Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 10d9b17f

Von Jan Büren vor mehr als 6 Jahren hinzugefügt

  • ID 10d9b17f7a9c45d07f278ed6031851af5b9c97e5
  • Vorgänger ed9b1bfb
  • Nachfolger 19c89dfd

Dialogbuchen transaktionssicher

In Ergänzung zum Commit 81ce5300bddf, dass Todo transaktionssicher gelöst.

Unterschiede anzeigen:

bin/mozilla/gl.pl
$form->error($locale->text('Empty transaction!'));
}
if ((my $errno = GL->post_transaction(\%myconfig, \%$form)) <= -1) {
$errno *= -1;
my @err;
$err[1] = $locale->text('Cannot have a value in both Debit and Credit!');
$err[2] = $locale->text('Debit and credit out of balance!');
$err[3] = $locale->text('Cannot post a transaction without a value!');
$form->error($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;
}
# /saving the history
# called from BankTransaction - Assign RecordLink and update 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 (TODO) chain this transaction safe (post_transaction + history_erp + this)
my ($bt, $chart_id, $payment);
$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 => '%AR_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
$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;
# start transaction (post + history + (optional) banktrans)
SL::DB->client->with_transaction(sub {
if ((my $errno = GL->post_transaction(\%myconfig, \%$form)) <= -1) {
$errno *= -1;
my @err;
$err[1] = $locale->text('Cannot have a value in both Debit and Credit!');
$err[2] = $locale->text('Debit and credit out of balance!');
$err[3] = $locale->text('Cannot post a transaction without a value!');
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 => '%AR_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
$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}) {
print $form->redirect_header($form->{callback});
$form->redirect($locale->text('GL transaction posted.') . ' ' . $locale->text('ID') . ': ' . $form->{id});
}
# remove or clarify
undef($form->{callback});
$main::lxdebug->leave_sub();

Auch abrufbar als: Unified diff