X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FDB%2FBankTransaction.pm;h=8617a814642e033241fbe8f6971f7467d1d8746d;hb=1b032ef45d886922f1fe347ec234c9b0c8c50efd;hp=06302bb01a622c2f52587cbb9020e493fd025dd9;hpb=19c89dfd42c7766b14de78718066270ad09e20de;p=kivitendo-erp.git diff --git a/SL/DB/BankTransaction.pm b/SL/DB/BankTransaction.pm index 06302bb01..8617a8146 100644 --- a/SL/DB/BankTransaction.pm +++ b/SL/DB/BankTransaction.pm @@ -40,9 +40,9 @@ sub linked_invoices { my $record_links = SL::DB::Manager::RecordLink->get_all(where => [ from_table => 'bank_transactions', from_id => $self->id ]); foreach my $record_link (@{ $record_links }) { - push @linked_invoices, SL::DB::Manager::Invoice->find_by(id => $record_link->to_id)->invnumber if $record_link->to_table eq 'ar'; - push @linked_invoices, SL::DB::Manager::PurchaseInvoice->find_by(id => $record_link->to_id)->invnumber if $record_link->to_table eq 'ap'; - push @linked_invoices, SL::DB::Manager::GLTransaction->find_by(id => $record_link->to_id)->reference if $record_link->to_table eq 'gl'; + push @linked_invoices, SL::DB::Manager::Invoice->find_by(id => $record_link->to_id) if $record_link->to_table eq 'ar'; + push @linked_invoices, SL::DB::Manager::PurchaseInvoice->find_by(id => $record_link->to_id) if $record_link->to_table eq 'ap'; + push @linked_invoices, SL::DB::Manager::GLTransaction->find_by(id => $record_link->to_id) if $record_link->to_table eq 'gl'; } return [ @linked_invoices ]; @@ -79,7 +79,7 @@ sub get_agreement_with_invoice { payment_within_30_days => 1, remote_account_number => 3, skonto_exact_amount => 5, - wrong_sign => -1, + wrong_sign => -4, sepa_export_item => 5, batch_sepa_transaction => 20, ); @@ -99,6 +99,17 @@ sub get_agreement_with_invoice { $bank_code = $invoice->vendor->bank_code if ! $invoice->is_sales; $iban = $invoice->vendor->iban if ! $invoice->is_sales; $account_number = $invoice->vendor->account_number if ! $invoice->is_sales; + + # check only valid remote_account_number (with some content) + if ($self->remote_account_number) { + if ($bank_code eq $self->remote_bank_code && $account_number eq $self->remote_account_number) { + $agreement += $points{remote_account_number}; + $rule_matches .= 'remote_account_number(' . $points{'remote_account_number'} . ') '; + } elsif ($iban eq $self->remote_account_number) { # elsif -> do not add twice + $agreement += $points{remote_account_number}; + $rule_matches .= 'remote_account_number(' . $points{'remote_account_number'} . ') '; + } + } if ( $bank_code eq $self->remote_bank_code && $account_number eq $self->remote_account_number ) { $agreement += $points{remote_account_number}; $rule_matches .= 'remote_account_number(' . $points{'remote_account_number'} . ') '; @@ -122,7 +133,7 @@ sub get_agreement_with_invoice { # compare open amount, preventing double points when open amount = invoice amount if ( $invoice->amount != $invoice->open_amount && abs(abs($invoice->open_amount) - abs($self->amount)) < 0.01 && - $::form->format_amount(\%::myconfig,abs($invoice->amount_less_skonto),2) eq + $::form->format_amount(\%::myconfig,abs($invoice->open_amount),2) eq $::form->format_amount(\%::myconfig,abs($self->amount),2) ) { $agreement += $points{exact_open_amount}; @@ -162,11 +173,13 @@ sub get_agreement_with_invoice { } #check sign - if ( $invoice->is_sales && $self->amount < 0 ) { + if (( $invoice->is_sales && $invoice->amount > 0 && $self->amount < 0 ) || + ( $invoice->is_sales && $invoice->amount < 0 && $self->amount > 0 ) ) { # sales credit note $agreement += $points{wrong_sign}; $rule_matches .= 'wrong_sign(' . $points{'wrong_sign'} . ') '; } - if ( ! $invoice->is_sales && $self->amount > 0 ) { + if (( !$invoice->is_sales && $invoice->amount > 0 && $self->amount > 0) || + ( !$invoice->is_sales && $invoice->amount < 0 && $self->amount < 0) ) { # purchase credit note $agreement += $points{wrong_sign}; $rule_matches .= 'wrong_sign(' . $points{'wrong_sign'} . ') '; } @@ -287,6 +300,30 @@ sub _check_string { return $match; }; + +sub not_assigned_amount { + my ($self) = @_; + + my $not_assigned_amount = $self->amount - $self->invoice_amount; + die ("undefined state") if (abs($not_assigned_amount) > abs($self->amount)); + + return $not_assigned_amount; + +} +sub closed_period { + my ($self) = @_; + + # check for closed period + croak t8('Illegal date') unless ref $self->valutadate eq 'DateTime'; + + + my $closedto = $::locale->parse_date_to_object($::instance_conf->get_closedto); + if ( ref $closedto && $self->valutadate < $closedto ) { + return 1; + } else { + return 0; + } +} 1; __END__ @@ -331,7 +368,7 @@ Example: =item C -Returns an array of record names (invoice number or gl reference) +Returns an array of record objects (invoices, debit, credit or gl objects) which are linked for this bank transaction. Returns an empty array ref if no links are found. @@ -339,6 +376,16 @@ Usage: croak("No linked records at all") unless @{ $bt->linked_invoices() }; +=item C + +Returns the not open amount of this bank transaction. +Dies if the return amount is higher than the original amount. + +=item C + +Returns 1 if the bank transaction valutadate is in a closed period, 0 if the +valutadate of the bank transaction is not in a closed period. + =back =head1 AUTHOR