]> wagnertech.de Git - mfinanz.git/blobdiff - SL/Controller/BankTransaction.pm
BankTransaction: Verlinkungen auf alten Vorlagencode upgedated.
[mfinanz.git] / SL / Controller / BankTransaction.pm
index 10c64bf708449800e0b158d52f429b90ea550cec..64198ee402a0a69c059ba574c2ef75bb349e6c38 100644 (file)
@@ -178,6 +178,8 @@ sub action_create_invoice {
   $self->{transaction} = SL::DB::Manager::BankTransaction->find_by(id => $::form->{bt_id});
   my $vendor_of_transaction = SL::DB::Manager::Vendor->find_by(account_number => $self->{transaction}->{remote_account_number});
 
+  my $use_vendor_filter = $self->{transaction}->{remote_account_number} && $vendor_of_transaction;
+
   my $drafts = SL::DB::Manager::Draft->get_all(where => [ module => 'ap'] , with_objects => 'employee');
 
   my @filtered_drafts;
@@ -191,15 +193,15 @@ sub action_create_invoice {
   }
 
   #Filter drafts
-  @filtered_drafts = grep { $_->{vendor_id} == $vendor_of_transaction->id } @filtered_drafts if $vendor_of_transaction && $self->{transaction}->{remote_account_number};
+  @filtered_drafts = grep { $_->{vendor_id} == $vendor_of_transaction->id } @filtered_drafts if $use_vendor_filter;
 
   my $all_vendors = SL::DB::Manager::Vendor->get_all();
 
   $self->render('bank_transactions/create_invoice', { layout  => 0 },
       title      => t8('Create invoice'),
       DRAFTS     => \@filtered_drafts,
-      vendor_id  => $vendor_of_transaction ? $vendor_of_transaction->id : undef,
-      vendor_name => $vendor_of_transaction ? $vendor_of_transaction->name : undef,
+      vendor_id  => $use_vendor_filter ? $vendor_of_transaction->id : undef,
+      vendor_name => $use_vendor_filter ? $vendor_of_transaction->name : undef,
       ALL_VENDORS => $all_vendors,
       limit      => $myconfig{vclimit},
       callback   => $self->url_for(action                => 'list',
@@ -379,8 +381,12 @@ sub action_save_invoices {
                        return -1 if (!$a->is_sales and $a->amount < 0);
                        return 1; } @invoices                    if $bank_transaction->amount < 0;
 
+    my $max_invoices = scalar(@invoices);
+    my $n_invoices   = 0;
+
     foreach my $invoice (@invoices) {
 
+      $n_invoices++ ;
       # Check if bank_transaction already has a link to the invoice, may only be linked once per invoice
       # This might be caused by the user reloading a page and resending the form
       die t8("Bank transaction with id #1 has already been linked to #2.", $bank_transaction->id, $invoice->displayable_name)
@@ -400,7 +406,7 @@ sub action_save_invoices {
         last;
       }
       # pay invoice or go to the next bank transaction if the amount is not sufficiently high
-      if ($invoice->open_amount <= $amount_of_transaction) {
+      if ($invoice->open_amount <= $amount_of_transaction && $n_invoices < $max_invoices) {
         # first calculate new bank transaction amount ...
         if ($invoice->is_sales) {
           $amount_of_transaction -= $sign * $invoice->open_amount;
@@ -434,6 +440,18 @@ sub action_save_invoices {
           );
 
       SL::DB::RecordLink->new(@props)->save;
+
+      # "close" a sepa_export_item if it exists
+      # code duplicated in action_save_proposals!
+      # currently only works, if there is only exactly one open sepa_export_item
+      if ( my $seis = $invoice->find_sepa_export_items({ executed => 0 }) ) {
+        if ( scalar @$seis == 1 ) {
+          # moved the execution and the check for sepa_export into a method,
+          # this isn't part of a transaction, though
+          $seis->[0]->set_executed if $invoice->id == $seis->[0]->arap_id;
+        };
+      };
+
     }
     $bank_transaction->save;
   }
@@ -475,6 +493,17 @@ sub action_save_proposals {
         );
 
     SL::DB::RecordLink->new(@props)->save;
+
+    # code duplicated in action_save_invoices!
+    # "close" a sepa_export_item if it exists
+    # currently only works, if there is only exactly one open sepa_export_item
+    if ( my $seis = $arap->find_sepa_export_items({ executed => 0 }) ) {
+      if ( scalar @$seis == 1 ) {
+        # moved the execution and the check for sepa_export into a method,
+        # this isn't part of a transaction, though
+        $seis->[0]->set_executed if $arap->id == $seis->[0]->arap_id;
+      };
+    };
   }
 
   flash('ok', t8('#1 proposal(s) saved.', scalar @{ $::form->{proposal_ids} }));