X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/ac271c64e22976acedeb66e78902b3b34a2ee8c8..60b17b3058bee155d03921bb0dfdabee274e9719:/SL/Controller/BankTransaction.pm diff --git a/SL/Controller/BankTransaction.pm b/SL/Controller/BankTransaction.pm index fe21db1b4..638da64c9 100644 --- a/SL/Controller/BankTransaction.pm +++ b/SL/Controller/BankTransaction.pm @@ -309,20 +309,16 @@ sub action_ajax_payment_suggestion { # create an HTML blob to be used by the js function add_invoices in templates/webpages/bank_transactions/list.html # and return encoded as JSON - my $bt = SL::DB::Manager::BankTransaction->find_by( id => $::form->{bt_id} ); - my $invoice = SL::DB::Manager::Invoice->find_by( id => $::form->{prop_id} ) || SL::DB::Manager::PurchaseInvoice->find_by( id => $::form->{prop_id} ); + croak("Need bt_id") unless $::form->{bt_id}; - die unless $bt and $invoice; + my $invoice = SL::DB::Manager::Invoice->find_by( id => $::form->{prop_id} ) || SL::DB::Manager::PurchaseInvoice->find_by( id => $::form->{prop_id} ); - my @select_options = $invoice->get_payment_select_options_for_bank_transaction($::form->{bt_id}); + croak("No valid invoice found") unless $invoice; - my $html; - $html = $self->render( + my $html = $self->render( 'bank_transactions/_payment_suggestion', { output => 0 }, bt_id => $::form->{bt_id}, - prop_id => $::form->{prop_id}, invoice => $invoice, - SELECT_OPTIONS => \@select_options, ); $self->render(\ SL::JSON::to_json( { 'html' => "$html" } ), { layout => 0, type => 'json', process => 0 }); @@ -631,12 +627,25 @@ sub save_single_bank_transaction { }; } - my $payment_type; + my ($payment_type, $free_skonto_amount); if ( defined $::form->{invoice_skontos}->{"$bt_id"} ) { $payment_type = shift(@{ $::form->{invoice_skontos}->{"$bt_id"} }); } else { $payment_type = 'without_skonto'; - }; + } + + if ($payment_type eq 'free_skonto') { + # parse user input > 0 + if ($::form->parse_amount(\%::myconfig, $::form->{"free_skonto_amount"}->{"$bt_id"}{$invoice->id}) > 0) { + $free_skonto_amount = $::form->parse_amount(\%::myconfig, $::form->{"free_skonto_amount"}->{"$bt_id"}{$invoice->id}); + } else { + return { + %data, + result => 'error', + message => $::locale->text("Free skonto amount has to be a positive number."), + }; + } + } # pay invoice # TODO rewrite this: really booked amount should be a return value of Payment.pm # also this controller shouldnt care about how to calc skonto. we simply delegate the @@ -652,6 +661,7 @@ sub save_single_bank_transaction { # get the right direction for the payment bookings (all amounts < 0 are stornos, credit notes or negative ap) $amount_for_payment *= -1 if $invoice->amount < 0; + $free_skonto_amount *= -1 if ($free_skonto_amount && $invoice->amount < 0); # get the right direction for the bank transaction $amount_for_booking *= $sign; @@ -659,12 +669,13 @@ sub save_single_bank_transaction { # ... and then pay the invoice my @acc_ids = $invoice->pay_invoice(chart_id => $bank_transaction->local_bank_account->chart_id, - trans_id => $invoice->id, - amount => $amount_for_payment, - payment_type => $payment_type, - source => $source, - memo => $memo, - transdate => $bank_transaction->valutadate->to_kivitendo); + trans_id => $invoice->id, + amount => $amount_for_payment, + payment_type => $payment_type, + source => $source, + memo => $memo, + skonto_amount => $free_skonto_amount, + transdate => $bank_transaction->valutadate->to_kivitendo); # ... and record the origin via BankTransactionAccTrans if (scalar(@acc_ids) < 2) { return {