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);
$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 $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;
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
$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
);
$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',
);
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
}
sub number_of_payments {
- my $transactions = shift;
+ my $invoice = shift;
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++;
};
sub total_amount {
- my $transactions = shift;
+ my $invoice = shift;
- my $total = sum map { $_->amount } @$transactions;
+ my $total = sum map { $_->amount } @{ $invoice->transactions };
return $::form->round_amount($total, 5);
$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';
$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';
$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';
$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';
$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';
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';
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';
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';
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';
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';
$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';
$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';
$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';
$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';
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';
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';
$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';
$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';
$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';
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';