Kontoauszug verbuchen: Verkaufsgutschriften nicht negativ bewerten
authorJan Büren <jan@kivitendo.de>
Wed, 9 Dec 2020 11:17:13 +0000 (12:17 +0100)
committerJan Büren <jan@kivitendo.de>
Wed, 9 Dec 2020 11:17:13 +0000 (12:17 +0100)
Punkte für wrong_sign höher gesetzt und beide Gutschriftentypen
jetzt sauber abgegrenzt (credit_note und negative_ap_transaction)

SL/DB/BankTransaction.pm
t/bank/bank_transactions.t

index 0d6895b..c02ebb9 100644 (file)
@@ -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,
   );
@@ -162,12 +162,13 @@ sub get_agreement_with_invoice {
   }
 
   #check sign
-  if ( $invoice->is_sales && $self->amount < 0 ) { # TODO debit note
+  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 && $invoice->amount > 0 && $self->amount > 0)  ||
-      ( !$invoice->is_sales && $invoice->amount < 0 && $self->amount < 0)     ) { # credit note
+      ( !$invoice->is_sales && $invoice->amount < 0 && $self->amount < 0)     ) { # purchase credit note
     $agreement += $points{wrong_sign};
     $rule_matches .= 'wrong_sign(' . $points{'wrong_sign'} . ') ';
   }
index ff3a001..6ea6b68 100644 (file)
@@ -711,8 +711,8 @@ sub test_credit_note {
                                                                 transdate     => $dt_10,
                                                                );
   my ($agreement, $rule_matches) = $bt->get_agreement_with_invoice($credit_note);
-  is($agreement, 13, "points for credit note ok");
-  is($rule_matches, 'remote_account_number(3) exact_amount(4) wrong_sign(-1) depositor_matches(2) remote_name(2) payment_within_30_days(1) datebonus14(2) ', "rules_matches for credit note ok");
+  is($agreement, 14, "points for credit note ok");
+  is($rule_matches, 'remote_account_number(3) exact_amount(4) depositor_matches(2) remote_name(2) payment_within_30_days(1) datebonus14(2) ', "rules_matches for credit note ok");
 
   $::form->{invoice_ids} = {
     $bt->id => [ $credit_note->id ]