Als es noch eine Methode transactions in SL::DB::Helper::Payment gab
wurden die acc_trans-Einträge bei Zugriff per $self->transactions jedes
Mal aus der Datenbank ausgelesen:
(SL::DB::Manager::AccTransaction->get_all(query => [ trans_id => $self->id ]);
Seit Commit
01b298ec3 wird stattdessen der aktuelle relationship Array
verwendet, wenn die transactions noch nicht ausgelesen wurden werden sie
wie oben geladen, wenn sie aber schon existieren dann werden die
Transaktionen im Speicher benutzt.
Bei den Tests gab es aber das Problem, daß in pay_invoice die
acc_trans-Einträge der Zahlungen als AccTrans-Objekte unabhängig vom
Rechnungsobjekt gespeichert wurden, und der transaction Array daher
nicht aktualisiert wurde. Am Ende von pay_invoice wird nun per
forget_related der transaction-Array zurückgesetzt, damit bei der
nächsten Verwendung die aktuell gespeicherten Transaktionen nachgeladen
werden.
source => $params{source},
taxkey => 0,
tax_id => SL::DB::Manager::Tax->find_by(taxkey => 0)->id);
source => $params{source},
taxkey => 0,
tax_id => SL::DB::Manager::Tax->find_by(taxkey => 0)->id);
+
+ # the acc_trans entries are saved individually, not added to $self and then saved all at once
$new_acc_trans->save;
$reference_amount -= abs($amount);
$new_acc_trans->save;
$reference_amount -= abs($amount);
$self->datepaid($transdate_obj);
$self->save;
$self->datepaid($transdate_obj);
$self->save;
+ # make sure transactions will be reloaded the next time $self->transactions
+ # is called, as pay_invoice saves the acc_trans objects individually rather
+ # than adding them to the transaction relation array.
+ $self->forget_related('transactions');
+
my $datev_check = 0;
if ( $is_sales ) {
if ( ( $self->invoice && $::instance_conf->get_datev_check_on_sales_invoice ) ||
my $datev_check = 0;
if ( $is_sales ) {
if ( ( $self->invoice && $::instance_conf->get_datev_check_on_sales_invoice ) ||
my $skonto_configured = 1; # default is assume skonto works
my $skonto_configured = 1; # default is assume skonto works
- my $transactions = $self->transactions;
- foreach my $transaction (@{ $transactions }) {
+ # my $transactions = $self->transactions;
+ foreach my $transaction (@{ $self->transactions }) {
# find all transactions with an AR_amount or AP_amount link
my $tax = SL::DB::Manager::Tax->get_first( where => [taxkey => $transaction->{taxkey}]);
croak "no tax for taxkey " . $transaction->{taxkey} unless ref $tax;
# find all transactions with an AR_amount or AP_amount link
my $tax = SL::DB::Manager::Tax->get_first( where => [taxkey => $transaction->{taxkey}]);
croak "no tax for taxkey " . $transaction->{taxkey} unless ref $tax;
my $reference_ARAP_amount = 0;
my $reference_ARAP_amount = 0;
- my $transactions = $self->transactions;
- foreach my $transaction (@{ $transactions }) {
+ # my $transactions = $self->transactions;
+ foreach my $transaction (@{ $self->transactions }) {
# find all transactions with an AR_amount or AP_amount link
$transaction->{chartlinks} = { map { $_ => 1 } split(m/:/, $transaction->{chart_link}) };
# second condition is that we can determine an automatic Skonto account for each AR_amount entry
# find all transactions with an AR_amount or AP_amount link
$transaction->{chartlinks} = { map { $_ => 1 } split(m/:/, $transaction->{chart_link}) };
# second condition is that we can determine an automatic Skonto account for each AR_amount entry
$ap->pay_invoice(chart_id => $bank->chart_id,
amount => $ap->open_amount,
transdate => DateTime->now->to_kivitendo,
$ap->pay_invoice(chart_id => $bank->chart_id,
amount => $ap->open_amount,
transdate => DateTime->now->to_kivitendo,
- memo => 'foobar;
- source => 'barfoo;
+ memo => 'foobar',
+ source => 'barfoo',
payment_type => 'without_skonto', # default if not specified
);
payment_type => 'without_skonto', # default if not specified
);
$ap->pay_invoice(chart_id => $bank->chart_id,
amount => $ap->amount, # doesn't need to be specified
transdate => DateTime->now->to_kivitendo,
$ap->pay_invoice(chart_id => $bank->chart_id,
amount => $ap->amount, # doesn't need to be specified
transdate => DateTime->now->to_kivitendo,
- memo => 'foobar;
- source => 'barfoo;
+ memo => 'foobar',
+ source => 'barfoo',
payment_type => 'with_skonto',
);
payment_type => 'with_skonto',
);
might always want to pay quickly making use of skonto, while another company
might always want to pay as late as possible.
might always want to pay quickly making use of skonto, while another company
might always want to pay as late as possible.
-=item C<transactions>
-
-Returns all acc_trans Objects of an ar/ap object.
-
-Example in console to print account numbers and booked amounts of an invoice:
- my $invoice = invoice(invnumber => '144');
- foreach my $acc_trans ( @{ $invoice->transactions } ) {
- print $acc_trans->chart->accno . " : " . $acc_trans->amount_as_number . "\n"
- };
- # 1200 : 226,00000
- # 1800 : -226,00000
- # 4300 : 100,00000
- # 3801 : 7,00000
- # 3806 : 19,00000
- # 4400 : 100,00000
- # 1200 : -226,00000
-
=item C<get_payment_select_options_for_bank_transaction $banktransaction_id %params>
Make suggestion for a skonto payment type by returning an HTML blob of the options
=item C<get_payment_select_options_for_bank_transaction $banktransaction_id %params>
Make suggestion for a skonto payment type by returning an HTML blob of the options
use Carp;
use List::Util qw(first sum);
use Carp;
use List::Util qw(first sum);
-use Rose::DB::Object::Helpers qw(has_loaded_related);
+use Rose::DB::Object::Helpers qw(has_loaded_related forget_related);
use SL::DB::MetaSetup::Invoice;
use SL::DB::Manager::Invoice;
use SL::DB::Helper::Payment qw(:ALL);
use SL::DB::MetaSetup::Invoice;
use SL::DB::Manager::Invoice;
use SL::DB::Helper::Payment qw(:ALL);
use SL::DB::Helper::LinkedRecords;
use SL::DB::Helper::Payment qw(:ALL);
use SL::Locale::String qw(t8);
use SL::DB::Helper::LinkedRecords;
use SL::DB::Helper::Payment qw(:ALL);
use SL::Locale::String qw(t8);
+use Rose::DB::Object::Helpers qw(has_loaded_related forget_related);
# The calculator hasn't been adjusted for purchase invoices yet.
# use SL::DB::Helper::PriceTaxCalculator;
# The calculator hasn't been adjusted for purchase invoices yet.
# use SL::DB::Helper::PriceTaxCalculator;
}
sub number_of_payments {
}
sub number_of_payments {
- my $transactions = shift;
my $number_of_payments;
my $paid_amount;
my $number_of_payments;
my $paid_amount;
- foreach my $transaction ( @$transactions ) {
+ foreach my $transaction ( @{ $invoice->transactions } ) {
if ( $transaction->chart_link =~ /(AR_paid|AP_paid)/ ) {
$paid_amount += $transaction->amount ;
$number_of_payments++;
if ( $transaction->chart_link =~ /(AR_paid|AP_paid)/ ) {
$paid_amount += $transaction->amount ;
$number_of_payments++;
- my $transactions = shift;
- my $total = sum map { $_->amount } @$transactions;
+ my $total = sum map { $_->amount } @{ $invoice->transactions };
return $::form->round_amount($total, 5);
return $::form->round_amount($total, 5);
$invoice->pay_invoice( %params );
$invoice->pay_invoice( %params );
- my ($number_of_payments, $paid_amount) = number_of_payments($invoice->transactions);
- my $total = total_amount($invoice->transactions);
+ my ($number_of_payments, $paid_amount) = number_of_payments($invoice);
+ my $total = total_amount($invoice);
my $title = 'default invoice, one item, 19% tax, without_skonto';
my $title = 'default invoice, one item, 19% tax, without_skonto';
$params{amount} = '-10.00';
$invoice->pay_invoice( %params );
$params{amount} = '-10.00';
$invoice->pay_invoice( %params );
- my ($number_of_payments, $paid_amount) = number_of_payments($invoice->transactions);
- my $total = total_amount($invoice->transactions);
+ my ($number_of_payments, $paid_amount) = number_of_payments($invoice);
+ my $total = total_amount($invoice);
my $title = 'default invoice, one item, 19% tax, without_skonto';
my $title = 'default invoice, one item, 19% tax, without_skonto';
$invoice->pay_invoice( %params );
$invoice->pay_invoice( %params );
- my ($number_of_payments, $paid_amount) = number_of_payments($invoice->transactions);
- my $total = total_amount($invoice->transactions);
+ my ($number_of_payments, $paid_amount) = number_of_payments($invoice);
+ my $total = total_amount($invoice);
my $title = 'default invoice, two items, 19/7% tax with_skonto_pt';
my $title = 'default invoice, two items, 19/7% tax with_skonto_pt';
$invoice->pay_invoice( %params );
$invoice->pay_invoice( %params );
- my ($number_of_payments, $paid_amount) = number_of_payments($invoice->transactions);
- my $total = total_amount($invoice->transactions);
+ my ($number_of_payments, $paid_amount) = number_of_payments($invoice);
+ my $total = total_amount($invoice);
my $title = 'default invoice, two items, 19/7% tax with_skonto_pt';
my $title = 'default invoice, two items, 19/7% tax with_skonto_pt';
$invoice->pay_invoice( %params );
$invoice->pay_invoice( %params );
- my ($number_of_payments, $paid_amount) = number_of_payments($invoice->transactions);
- my $total = total_amount($invoice->transactions);
+ my ($number_of_payments, $paid_amount) = number_of_payments($invoice);
+ my $total = total_amount($invoice);
my $title = 'default invoice, two items, 19/7% tax without skonto';
my $title = 'default invoice, two items, 19/7% tax without skonto';
transdate => DateTime->today_local->to_kivitendo,
);
transdate => DateTime->today_local->to_kivitendo,
);
- my ($number_of_payments, $paid_amount) = number_of_payments($invoice->transactions);
- my $total = total_amount($invoice->transactions);
+ my ($number_of_payments, $paid_amount) = number_of_payments($invoice);
+ my $total = total_amount($invoice);
my $title = 'default invoice, two items, 19/7% tax without skonto incomplete payment';
my $title = 'default invoice, two items, 19/7% tax without skonto incomplete payment';
transdate => DateTime->today_local->to_kivitendo
);
transdate => DateTime->today_local->to_kivitendo
);
- my ($number_of_payments, $paid_amount) = number_of_payments($invoice->transactions);
- my $total = total_amount($invoice->transactions);
+ my ($number_of_payments, $paid_amount) = number_of_payments($invoice);
+ my $total = total_amount($invoice);
my $title = 'default invoice, two items, 19/7% tax not included';
my $title = 'default invoice, two items, 19/7% tax not included';
transdate => DateTime->today_local->to_kivitendo
);
transdate => DateTime->today_local->to_kivitendo
);
- my ($number_of_payments, $paid_amount) = number_of_payments($invoice->transactions);
- my $total = total_amount($invoice->transactions);
+ my ($number_of_payments, $paid_amount) = number_of_payments($invoice);
+ my $total = total_amount($invoice);
my $title = 'default invoice, two items, 19/7% tax not included';
my $title = 'default invoice, two items, 19/7% tax not included';
transdate => DateTime->today_local->to_kivitendo
);
transdate => DateTime->today_local->to_kivitendo
);
- my ($number_of_payments, $paid_amount) = number_of_payments($invoice->transactions);
- my $total = total_amount($invoice->transactions);
+ my ($number_of_payments, $paid_amount) = number_of_payments($invoice);
+ my $total = total_amount($invoice);
my $title = 'default invoice, two items, 19/7% tax not included';
my $title = 'default invoice, two items, 19/7% tax not included';
transdate => DateTime->today_local->to_kivitendo
);
transdate => DateTime->today_local->to_kivitendo
);
- my ($number_of_payments, $paid_amount) = number_of_payments($invoice->transactions);
- my $total = total_amount($invoice->transactions);
+ my ($number_of_payments, $paid_amount) = number_of_payments($invoice);
+ my $total = total_amount($invoice);
my $title = 'default invoice, two items, 19/7% tax not included';
my $title = 'default invoice, two items, 19/7% tax not included';
$params{payment_type} = 'difference_as_skonto';
$invoice->pay_invoice( %params );
$params{payment_type} = 'difference_as_skonto';
$invoice->pay_invoice( %params );
- my ($number_of_payments, $paid_amount) = number_of_payments($invoice->transactions);
- my $total = total_amount($invoice->transactions);
+ my ($number_of_payments, $paid_amount) = number_of_payments($invoice);
+ my $total = total_amount($invoice);
my $title = 'default invoice, one item, 19% tax, without_skonto';
my $title = 'default invoice, one item, 19% tax, without_skonto';
$params{payment_type} = 'difference_as_skonto';
$invoice->pay_invoice( %params );
$params{payment_type} = 'difference_as_skonto';
$invoice->pay_invoice( %params );
- my ($number_of_payments, $paid_amount) = number_of_payments($invoice->transactions);
- my $total = total_amount($invoice->transactions);
+ my ($number_of_payments, $paid_amount) = number_of_payments($invoice);
+ my $total = total_amount($invoice);
my $title = 'default invoice, one item, 19% tax, without_skonto';
my $title = 'default invoice, one item, 19% tax, without_skonto';
$purchase_invoice->pay_invoice( %params );
$purchase_invoice->pay_invoice( %params );
- my ($number_of_payments, $paid_amount) = number_of_payments($purchase_invoice->transactions);
- my $total = total_amount($purchase_invoice->transactions);
+ my ($number_of_payments, $paid_amount) = number_of_payments($purchase_invoice);
+ my $total = total_amount($purchase_invoice);
my $title = 'default invoice, two items, 19/7% tax without skonto';
my $title = 'default invoice, two items, 19/7% tax without skonto';
$purchase_invoice->pay_invoice( %params );
$purchase_invoice->pay_invoice( %params );
- my ($number_of_payments, $paid_amount) = number_of_payments($purchase_invoice->transactions);
- my $total = total_amount($purchase_invoice->transactions);
+ my ($number_of_payments, $paid_amount) = number_of_payments($purchase_invoice);
+ my $total = total_amount($purchase_invoice);
my $title = 'default invoice, two items, 19/7% tax without skonto';
my $title = 'default invoice, two items, 19/7% tax without skonto';
chart_id => $bank_account->chart_id,
transdate => DateTime->today_local->to_kivitendo
);
chart_id => $bank_account->chart_id,
transdate => DateTime->today_local->to_kivitendo
);
- my ($number_of_payments, $paid_amount) = number_of_payments($purchase_invoice->transactions);
- my $total = total_amount($purchase_invoice->transactions);
+ my ($number_of_payments, $paid_amount) = number_of_payments($purchase_invoice);
+ my $total = total_amount($purchase_invoice);
my $title = 'default purchase_invoice, two charts, 19/7% tax multiple payments with final difference as skonto';
my $title = 'default purchase_invoice, two charts, 19/7% tax multiple payments with final difference as skonto';
transdate => DateTime->today_local->to_kivitendo
);
transdate => DateTime->today_local->to_kivitendo
);
- my ($number_of_payments, $paid_amount) = number_of_payments($purchase_invoice->transactions);
- my $total = total_amount($purchase_invoice->transactions);
+ my ($number_of_payments, $paid_amount) = number_of_payments($purchase_invoice);
+ my $total = total_amount($purchase_invoice);
my $title = 'default purchase_invoice, two charts, 19/7% tax multiple payments with final difference as skonto';
my $title = 'default purchase_invoice, two charts, 19/7% tax multiple payments with final difference as skonto';
$invoice->pay_invoice( %params );
$invoice->pay_invoice( %params );
- my ($number_of_payments, $paid_amount) = number_of_payments($invoice->transactions);
- my $total = total_amount($invoice->transactions);
+ my ($number_of_payments, $paid_amount) = number_of_payments($invoice);
+ my $total = total_amount($invoice);
my $title = 'default invoice, two items, 19/7% tax with_skonto_pt 50/50';
my $title = 'default invoice, two items, 19/7% tax with_skonto_pt 50/50';
$invoice->pay_invoice( %params );
$invoice->pay_invoice( %params );
- my ($number_of_payments, $paid_amount) = number_of_payments($invoice->transactions);
- my $total = total_amount($invoice->transactions);
+ my ($number_of_payments, $paid_amount) = number_of_payments($invoice);
+ my $total = total_amount($invoice);
my $title = 'default invoice, four items, 19/7% tax with_skonto_pt 4x25';
my $title = 'default invoice, four items, 19/7% tax with_skonto_pt 4x25';
$invoice->pay_invoice( %params );
$invoice->pay_invoice( %params );
- my ($number_of_payments, $paid_amount) = number_of_payments($invoice->transactions);
- my $total = total_amount($invoice->transactions);
+ my ($number_of_payments, $paid_amount) = number_of_payments($invoice);
+ my $total = total_amount($invoice);
my $title = 'default invoice, four items, 19/7% tax with_skonto_pt 4x25';
my $title = 'default invoice, four items, 19/7% tax with_skonto_pt 4x25';
transdate => DateTime->today_local->to_kivitendo
);
transdate => DateTime->today_local->to_kivitendo
);
- my ($number_of_payments, $paid_amount) = number_of_payments($invoice->transactions);
- my $total = total_amount($invoice->transactions);
+ my ($number_of_payments, $paid_amount) = number_of_payments($invoice);
+ my $total = total_amount($invoice);
my $title = 'default invoice, four items, 19/7% tax with_skonto_pt 4x25';
my $title = 'default invoice, four items, 19/7% tax with_skonto_pt 4x25';