+ die $err[$errno];
+ }
+ # saving the history
+ if(!exists $form->{addition} && $form->{id} ne "") {
+ $form->{snumbers} = qq|gltransaction_| . $form->{id};
+ $form->{addition} = "POSTED";
+ $form->{what_done} = "gl transaction";
+ $form->save_history;
+ }
+
+ # Case BankTransaction: update RecordLink and BankTransaction
+ if ($form->{callback} =~ /BankTransaction/ && $form->{bt_id}) {
+ # set invoice_amount - we only rely on bt_id in form, do all other stuff ui independent
+ # die if we have a unlogic or NYI case and abort the whole transaction
+ my ($bt, $chart_id, $payment);
+ require SL::DB::Manager::BankTransaction;
+
+ $bt = SL::DB::Manager::BankTransaction->find_by(id => $::form->{bt_id});
+ die "No bank transaction found" unless $bt;
+
+ $chart_id = SL::DB::Manager::BankAccount->find_by(id => $bt->local_bank_account_id)->chart_id;
+ die "no chart id:" unless $chart_id;
+
+ $payment = SL::DB::Manager::AccTransaction->get_all(where => [ trans_id => $::form->{id},
+ chart_link => { like => '%_paid%' },
+ chart_id => $chart_id ]);
+ die "guru meditation error: Can only assign amount to one bank account booking" if scalar @{ $payment } > 1;
+
+ # credit/debit * -1 matches the sign for bt.amount and bt.invoice_amount
+ die "Can only assign the full bank amount to a single general ledger booking" unless $bt->amount == $payment->[0]->amount * -1;
+ $bt->update_attributes(invoice_amount => $bt->invoice_amount + ($payment->[0]->amount * -1));
+
+ # create record_link
+ my @props = (
+ from_table => 'bank_transactions',
+ from_id => $::form->{bt_id},
+ to_table => 'gl',
+ to_id => $::form->{id},
+ );
+ SL::DB::RecordLink->new(@props)->save;
+
+ }
+ 1;
+ }) or do { die SL::DB->client->error };
+
+ if ($form->{callback} =~ /BankTransaction/ && $form->{bt_id}) {