From 1c98ac6215ce89822dc0a344b1b49c687cc6f916 Mon Sep 17 00:00:00 2001 From: Moritz Bunkus Date: Tue, 3 Sep 2019 13:52:04 +0200 Subject: [PATCH] BankTransaction: Vorschlagslistencode aus action_list eigene Funktion verlagert --- SL/Controller/BankTransaction.pm | 65 ++++++++++++++++++-------------- t/bank/bank_transactions.t | 16 +++----- 2 files changed, 42 insertions(+), 39 deletions(-) diff --git a/SL/Controller/BankTransaction.pm b/SL/Controller/BankTransaction.pm index 36494038d..dc66ef090 100644 --- a/SL/Controller/BankTransaction.pm +++ b/SL/Controller/BankTransaction.pm @@ -68,32 +68,21 @@ sub action_list_all { $self->report_generator_list_objects(report => $self->{report}, objects => $self->models->get); } -sub action_list { - my ($self) = @_; - - if (!$::form->{filter}{bank_account}) { - flash('error', t8('No bank account chosen!')); - $self->action_search; - return; - } +sub gather_bank_transactions_and_proposals { + my ($self, %params) = @_; - my $sort_by = $::form->{sort_by} || 'transdate'; + my $sort_by = $params{sort_by} || 'transdate'; $sort_by = 'transdate' if $sort_by eq 'proposal'; - $sort_by .= $::form->{sort_dir} ? ' DESC' : ' ASC'; - - my $fromdate = $::locale->parse_date_to_object($::form->{filter}->{fromdate}); - my $todate = $::locale->parse_date_to_object($::form->{filter}->{todate}); - $todate->add( days => 1 ) if $todate; + $sort_by .= $params{sort_dir} ? ' DESC' : ' ASC'; my @where = (); - push @where, (transdate => { ge => $fromdate }) if ($fromdate); - push @where, (transdate => { lt => $todate }) if ($todate); - my $bank_account = SL::DB::Manager::BankAccount->find_by( id => $::form->{filter}{bank_account} ); + push @where, (transdate => { ge => $params{fromdate} }) if $params{fromdate}; + push @where, (transdate => { lt => $params{todate} }) if $params{todate}; # bank_transactions no younger than starting date, # including starting date (same search behaviour as fromdate) # but OPEN invoices to be matched may be from before - if ( $bank_account->reconciliation_starting_date ) { - push @where, (transdate => { ge => $bank_account->reconciliation_starting_date }); + if ( $params{bank_account}->reconciliation_starting_date ) { + push @where, (transdate => { ge => $params{bank_account}->reconciliation_starting_date }); }; my $bank_transactions = SL::DB::Manager::BankTransaction->get_all( @@ -102,7 +91,7 @@ sub action_list { limit => 10000, where => [ amount => {ne => \'invoice_amount'}, - local_bank_account_id => $::form->{filter}{bank_account}, + local_bank_account_id => $params{bank_account}->id, cleared => 0, @where ], @@ -117,7 +106,7 @@ sub action_list { with_objects => ['customer','payment_terms']); my $all_open_ap_invoices = SL::DB::Manager::PurchaseInvoice->get_all(where => [amount => { ne => \'paid' }], with_objects => ['vendor' ,'payment_terms']); - my $all_open_sepa_export_items = SL::DB::Manager::SepaExportItem->get_all(where => [chart_id => $bank_account->chart_id , + my $all_open_sepa_export_items = SL::DB::Manager::SepaExportItem->get_all(where => [chart_id => $params{bank_account}->chart_id , 'sepa_export.executed' => 0, 'sepa_export.closed' => 0 ], with_objects => ['sepa_export']); my @all_open_invoices; @@ -229,23 +218,43 @@ sub action_list { push @proposals, @otherproposals; # sort bank transaction proposals by quality (score) of proposal - if ($::form->{sort_by} && $::form->{sort_by} eq 'proposal') { - my $dir = $::form->{sort_dir} ? 1 : -1; + if ($params{sort_by} && $params{sort_by} eq 'proposal') { + my $dir = $params{sort_dir} ? 1 : -1; $bank_transactions = [ sort { ($a->{agreement} <=> $b->{agreement}) * $dir } @{ $bank_transactions } ]; } - # for testing with t/bank/banktransaction.t : - if ( $::form->{dont_render_for_test} ) { - return ( $bank_transactions , \@proposals ); + return ( $bank_transactions , \@proposals ); +} + +sub action_list { + my ($self) = @_; + + if (!$::form->{filter}{bank_account}) { + flash('error', t8('No bank account chosen!')); + $self->action_search; + return; } + my $bank_account = SL::DB::BankAccount->load_cached($::form->{filter}->{bank_account}); + my $fromdate = $::locale->parse_date_to_object($::form->{filter}->{fromdate}); + my $todate = $::locale->parse_date_to_object($::form->{filter}->{todate}); + $todate->add( days => 1 ) if $todate; + + my ($bank_transactions, $proposals) = $self->gather_bank_transactions_and_proposals( + bank_account => $bank_account, + fromdate => $fromdate, + todate => $todate, + sort_by => $::form->{sort_by}, + sort_dir => $::form->{sort_dir}, + ); + $::request->layout->add_javascripts("kivi.BankTransaction.js"); $self->render('bank_transactions/list', title => t8('Bank transactions MT940'), BANK_TRANSACTIONS => $bank_transactions, - PROPOSALS => \@proposals, + PROPOSALS => $proposals, bank_account => $bank_account, - ui_tab => scalar(@proposals) > 0?1:0, + ui_tab => scalar(@{ $proposals }) > 0 ? 1 : 0, ); } diff --git a/t/bank/bank_transactions.t b/t/bank/bank_transactions.t index 8b38424ec..ca1fb1726 100644 --- a/t/bank/bank_transactions.t +++ b/t/bank/bank_transactions.t @@ -1022,9 +1022,7 @@ sub test_bt_rule1 { is($bt->invoice_amount , '0.00000' , "$testname: bt invoice amount was not assigned"); my $bt_controller = SL::Controller::BankTransaction->new; - $::form->{dont_render_for_test} = 1; - $::form->{filter}{bank_account} = $bank_account->id; - my ( $bt_transactions, $proposals ) = $bt_controller->action_list; + my ( $bt_transactions, $proposals ) = $bt_controller->gather_bank_transactions_and_proposals(bank_account => $bank_account); is(scalar(@$bt_transactions) , 1 , "$testname: one bank_transaction"); is($bt_transactions->[0]->{agreement}, 20 , "$testname: agreement == 20"); @@ -1075,9 +1073,7 @@ sub test_sepa_export { is($sei->amount , '119.00000' , "$testname: sepa export amount ok"); my $bt_controller = SL::Controller::BankTransaction->new; - $::form->{dont_render_for_test} = 1; - $::form->{filter}{bank_account} = $bank_account->id; - my ( $bt_transactions, $proposals ) = $bt_controller->action_list; + my ( $bt_transactions, $proposals ) = $bt_controller->gather_bank_transactions_and_proposals(bank_account => $bank_account); is(scalar(@$bt_transactions) , 1 , "$testname: one bank_transaction"); is($bt_transactions->[0]->{agreement}, 25 , "$testname: agreement == 25"); @@ -1143,9 +1139,7 @@ sub test_two_banktransactions { #nun sollten zwei gleichwertige Rechnungen $ar_transaction_1 und $ar_transaction_3 für $bt1 gefunden werden #aber es darf keine Proposals geben mit mehreren Rechnungen my $bt_controller = SL::Controller::BankTransaction->new; - $::form->{dont_render_for_test} = 1; - $::form->{filter}{bank_account} = $bank_account->id; - my ( $bt_transactions, $proposals ) = $bt_controller->action_list; + my ( $bt_transactions, $proposals ) = $bt_controller->gather_bank_transactions_and_proposals(bank_account => $bank_account); is(scalar(@$bt_transactions) , 2 , "$testname: two bank_transaction"); is(scalar(@$proposals) , 0 , "$testname: no proposals"); @@ -1155,7 +1149,7 @@ sub test_two_banktransactions { # Jetzt gibt es zwei Kontobewegungen mit gleichen Punkten für eine Rechnung. # hier darf es auch keine Proposals geben - ( $bt_transactions, $proposals ) = $bt_controller->action_list; + ( $bt_transactions, $proposals ) = $bt_controller->gather_bank_transactions_and_proposals(bank_account => $bank_account); is(scalar(@$bt_transactions) , 2 , "$testname: two bank_transaction"); # odyn testfall - anforderungen so (noch) nicht in kivi @@ -1166,7 +1160,7 @@ sub test_two_banktransactions { # hier darf es auch keine Proposals geben $bt3->update_attributes( purpose => "fuer Rechnung salesinv10000"); - ( $bt_transactions, $proposals ) = $bt_controller->action_list; + ( $bt_transactions, $proposals ) = $bt_controller->gather_bank_transactions_and_proposals(bank_account => $bank_account); is(scalar(@$bt_transactions) , 2 , "$testname: two bank_transaction"); # odyn testfall - anforderungen so (noch) nicht in kivi -- 2.20.1