Einkaufspreis bei Einkaufsauftrag aus Verkaufsauftrag 2
[kivitendo-erp.git] / SL / CP.pm
index 46cebfe..b7e6241 100644 (file)
--- a/SL/CP.pm
+++ b/SL/CP.pm
 package CP;
 use SL::DBUtils;
 
+use strict;
+
 sub new {
   $main::lxdebug->enter_sub();
 
   my ($type, $countrycode) = @_;
 
-  $self = {};
+  my $self = {};
 
   if ($countrycode) {
     if (-f "locale/$countrycode/Num2text") {
@@ -79,7 +81,7 @@ sub paymentaccounts {
   $form->{PR}{ $form->{ARAP} } = ();
   $form->{PR}{"$form->{ARAP}_paid"} = ();
 
-  while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
+  while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
     foreach my $item (split(/:/, $ref->{link})) {
       if ($item eq $form->{ARAP}) {
         push(@{ $form->{PR}{ $form->{ARAP} } }, $ref);
@@ -162,15 +164,15 @@ sub get_openinvoices {
 
   my $query =
      qq|SELECT a.id, a.invnumber, a.transdate, a.amount, a.paid, a.curr | .
-          qq|FROM $arap a | .
-     qq|WHERE (a.${vc}_id = ?) AND (a.curr = ? $curr_null) AND NOT (a.amount = paid)|;
-                qq|ORDER BY a.id|;
+     qq|FROM $arap a | .
+     qq|WHERE (a.${vc}_id = ?) AND (a.curr = ? $curr_null) AND NOT (a.amount = paid)| .
+     qq|ORDER BY a.id|;
   my $sth = prepare_execute_query($form, $dbh, $query,
                                   conv_i($form->{"${vc}_id"}),
                                   $form->{currency});
 
   $form->{PR} = [];
-  while ($ref = $sth->fetchrow_hashref(NAME_lc)) {
+  while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
 
     # if this is a foreign currency transaction get exchangerate
     $ref->{exchangerate} =
@@ -189,6 +191,7 @@ sub process_payment {
   $main::lxdebug->enter_sub();
 
   my ($self, $myconfig, $form) = @_;
+  my $amount;
 
   # connect to database, turn AutoCommit off
   my $dbh = $form->dbconnect_noauto($myconfig);
@@ -201,20 +204,16 @@ sub process_payment {
       $form->parse_amount($myconfig, $form->{exchangerate});
 
     if ($form->{vc} eq 'customer') {
-      $form->update_exchangerate($dbh, $form->{currency}, $form->{datepaid},
-                                 $form->{exchangerate}, 0);
+      $form->update_exchangerate($dbh, $form->{currency}, $form->{datepaid}, $form->{exchangerate}, 0);
     } else {
-      $form->update_exchangerate($dbh, $form->{currency}, $form->{datepaid}, 0,
-                                 $form->{exchangerate});
+      $form->update_exchangerate($dbh, $form->{currency}, $form->{datepaid}, 0, $form->{exchangerate});
     }
   } else {
     $form->{exchangerate} = 1;
   }
 
-  my $query =
-    qq|SELECT fxgain_accno_id, fxloss_accno_id FROM defaults|;
-  my ($fxgain_accno_id, $fxloss_accno_id) =
-    selectrow_query($form, $dbh, $query);
+  my $query = qq|SELECT fxgain_accno_id, fxloss_accno_id FROM defaults|;
+  my ($fxgain_accno_id, $fxloss_accno_id) = selectrow_query($form, $dbh, $query);
 
   my $buysell = $form->{vc} eq "customer" ? "buy" : "sell";
   my $arap = $form->{arap} eq "ar" ? "ar" : "ap";
@@ -233,9 +232,8 @@ sub process_payment {
       qq|  (c.link LIKE '%:AP:%')) |;
   }
 
-  $paymentamount = $form->{amount};
+  my $paymentamount = $form->{amount};
 
-  #  $paymentamount = $form->{amount};
   my $null;
   ($null, $form->{department_id}) = split(/--/, $form->{department});
   $form->{department_id} *= 1;
@@ -254,8 +252,7 @@ sub process_payment {
     $form->{"due_$i"}  = $form->parse_amount($myconfig, $form->{"due_$i"});
 
     if ($form->{"checked_$i"} && $form->{"paid_$i"}) {
-      $paymentamount =
-        (($paymentamount * 1000) - ($form->{"paid_$i"} * 1000)) / 1000;
+      $paymentamount = (($paymentamount * 1000) - ($form->{"paid_$i"} * 1000)) / 1000;
 
       # get exchangerate for original
       $query =
@@ -298,8 +295,7 @@ sub process_payment {
       do_query($form, $dbh, $query, @values);
 
       # add exchangerate difference if currency ne defaultcurrency
-      $amount =
-        $form->round_amount($form->{"paid_$i"} * ($form->{exchangerate} - 1),
+      $amount = $form->round_amount($form->{"paid_$i"} * ($form->{exchangerate} - 1),
                             2);
       if ($amount != 0) {
 
@@ -308,7 +304,7 @@ sub process_payment {
           qq|INSERT INTO acc_trans (trans_id, chart_id, transdate, amount, | .
           qq|                       cleared, fx_transaction) | .
           qq|VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?, ?, ?)|;
-                   @values = (conv_i($form->{"id_$i"}), $paymentaccno,
+        @values = (conv_i($form->{"id_$i"}), $paymentaccno,
                    conv_date($form->{datepaid}), ($amount * $ml * -1), '0',
                    '1');
         do_query($form, $dbh, $query, @values);
@@ -339,6 +335,7 @@ sub process_payment {
 
       $amount += $form->{"paid_$i"};
 
+      my $paid;
       # BUG 324
       if ($form->{arap} eq 'ap') {
         $paid = "paid = paid + $amount";
@@ -348,7 +345,7 @@ sub process_payment {
 
       # update AR/AP transaction
       $query = qq|UPDATE $arap SET $paid, datepaid = ? WHERE id = ?|;
-                 @values = (conv_date($form->{datepaid}), conv_i($form->{"id_$i"}));
+      @values = (conv_date($form->{datepaid}), conv_i($form->{"id_$i"}));
       do_query($form, $dbh, $query, @values);
       # saving the history
       $form->{id} = $form->{"id_$i"};
@@ -357,18 +354,16 @@ sub process_payment {
         $form->{addition} = "POSTED";
         $form->save_history($form->dbconnect($myconfig));
       }
-      # /saving the history 
+      # /saving the history
     }
   }
 
-  # record a AR/AP with a payment
-  if ($form->round_amount($paymentamount, 2) > 0) {
-    $form->{invnumber} = "";
-    OP::overpayment("", $myconfig, $form, $dbh, $paymentamount, $ml, 1);
-  }
-
+  my $rc;
   if ($form->round_amount($paymentamount, 2) < 0) {
-    $dbh->rollback;
+               # Hier werden negativen Zahlungseingänge abgefangen
+               # Besser: in Oberfläche schon prüfen
+               # Zahlungsein- und ausgänge sind immer positiv
+    $dbh->rollback;    
     $rc = 0;
   }
   if ($form->round_amount($paymentamount, 2) == 0) {