BankTransaction: Vorschlagslistencode aus action_list eigene Funktion verlagert
authorMoritz Bunkus <m.bunkus@linet-services.de>
Tue, 3 Sep 2019 11:52:04 +0000 (13:52 +0200)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Tue, 3 Sep 2019 12:30:57 +0000 (14:30 +0200)
SL/Controller/BankTransaction.pm
t/bank/bank_transactions.t

index 3649403..dc66ef0 100644 (file)
@@ -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,
               );
 }
 
index 8b38424..ca1fb17 100644 (file)
@@ -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