+  my ($is_linked_bank_transaction, $is_linked_ap_transaction);
+
+  if ($form->{id} && SL::DB::Manager::BankTransactionAccTrans->find_by(gl_id => $form->{id})) {
+    $is_linked_bank_transaction = 1;
+  }
+  if ($form->{id} && SL::DB::Manager::ApGl->find_by(gl_id => $form->{id})) {
+    $is_linked_ap_transaction = 1;
+  }
+
+
+  my $create_post_action = sub {
+    # $_[0]: description
+    # $_[1]: after_action
+    action => [
+      $_[0],
+      submit   => [ '#form', { action => 'post', after_action => $_[1] } ],
+      disabled => $form->{locked}                           ? t8('The billing period has already been locked.')
+                : $form->{storno}                           ? t8('A canceled general ledger transaction cannot be posted.')
+                : ($form->{id} && $change_never)            ? t8('Changing general ledger transaction has been disabled in the configuration.')
+                : ($form->{id} && $change_on_same_day_only) ? t8('General ledger transactions can only be changed on the day they are posted.')
+                : $is_linked_bank_transaction               ? t8('This transaction is linked with a bank transaction. Please undo and redo the bank transaction booking if needed.')
+                : $is_linked_ap_transaction                 ? t8('This transaction is linked with a AP transaction. Please undo and redo the AP transaction booking if needed.')
+                : undef,
+    ],
+  };
+
+  my %post_entry;
+  if ($::instance_conf->get_gl_add_doc && $::instance_conf->get_doc_storage) {
+    %post_entry = (combobox => [ $create_post_action->(t8('Post'), 'doc-tab'),
+                                 $create_post_action->(t8('Post and new booking')) ]);
+  } elsif ($::instance_conf->get_doc_storage) {
+    %post_entry = (combobox => [ $create_post_action->(t8('Post')),
+                                 $create_post_action->(t8('Post and upload document'), 'doc-tab') ]);
+  } else {
+    %post_entry = $create_post_action->(t8('Post'));
+  }