Neues parsingtemplate für XML oder andere einfache unformatierte Dateien angelegt
[kivitendo-erp.git] / SL / AR.pm
index 75dc026..b4c0ae1 100644 (file)
--- a/SL/AR.pm
+++ b/SL/AR.pm
@@ -55,10 +55,11 @@ sub post_transaction {
                                 $form->{transdate}, 'buy');
   }
   for $i (1 .. $form->{rowcount}) {
-    $form->{AR_amounts}{"amount_$i"} = (split(/--/, $form->{"AR_amount_$i"}))[0];
+    $form->{AR_amounts}{"amount_$i"} =
+      (split(/--/, $form->{"AR_amount_$i"}))[0];
   }
   ($form->{AR_amounts}{receivables}) = split(/--/, $form->{ARselected});
-  ($form->{AR}{receivables}) = split(/--/, $form->{ARselected});
+  ($form->{AR}{receivables})         = split(/--/, $form->{ARselected});
 
   $form->{exchangerate} =
     ($exchangerate)
@@ -73,41 +74,60 @@ sub post_transaction {
                           2);
 
     $form->{netamount} += $form->{"amount_$i"};
+
+    # parse tax_$i for later
+    $form->{"tax_$i"} = $form->parse_amount($myconfig, $form->{"tax_$i"});
   }
 
   # this is for ar
 
   $form->{amount} = $form->{netamount};
 
-  $form->{tax} = 0;
+  $form->{tax}       = 0;
+  $form->{netamount} = 0;
+  $form->{total_tax} = 0;
 
   # taxincluded doesn't make sense if there is no amount
 
   $form->{taxincluded} = 0 if ($form->{amount} == 0);
   for $i (1 .. $form->{rowcount}) {
-    ($form->{"taxkey_$i"},      $NULL)         = split /--/, $form->{"taxchart_$i"};
+    ($form->{"tax_id_$i"}, $NULL) = split /--/, $form->{"taxchart_$i"};
+
+    $query = qq|SELECT c.accno, t.taxkey, t.rate
+            FROM tax t LEFT JOIN chart c on (c.id=t.chart_id)
+            WHERE t.id=$form->{"tax_id_$i"}
+            ORDER BY c.accno|;
 
-    $query =
-      qq| SELECT c.accno, t.rate FROM chart c, tax t where c.id=t.chart_id AND t.taxkey=$form->{"taxkey_$i"}|;
     $sth = $dbh->prepare($query);
     $sth->execute || $form->dberror($query);
-    ($form->{AR_amounts}{"tax_$i"}, $form->{"taxrate_$i"}) = $sth->fetchrow_array;
-    $form->{AR_amounts}{"tax_$i"}{taxkey} = $form->{"taxkey_$i"};
+    ($form->{AR_amounts}{"tax_$i"}, $form->{"taxkey_$i"}, $form->{"taxrate_$i"}) =
+      $sth->fetchrow_array;
+    $form->{AR_amounts}{"tax_$i"}{taxkey}    = $form->{"taxkey_$i"};
     $form->{AR_amounts}{"amount_$i"}{taxkey} = $form->{"taxkey_$i"};
 
     $sth->finish;
-    if (!$form->{"korrektur_$i"}) {
-      if ($form->{taxincluded} *= 1) {
-        $tax = $form->{"amount_$i"} - ($form->{"amount_$i"} / ($form->{"taxrate_$i"} + 1));
-        $amount = $form->{"amount_$i"} - $tax;
-        $form->{"amount_$i"} = $form->round_amount($amount, 2);
-        $diff += $amount - $form->{"amount_$i"};
-        $form->{"tax_$i"} = $form->round_amount($tax, 2);
-        $form->{netamount} += $form->{"amount_$i"};
+    if ($form->{taxincluded} *= 1) {
+      if (!$form->{"korrektur_$i"}) {
+      $tax =
+        $form->{"amount_$i"} -
+        ($form->{"amount_$i"} / ($form->{"taxrate_$i"} + 1));
+      } else {
+        $tax = $form->{"tax_$i"};
+      }
+      $amount = $form->{"amount_$i"} - $tax;
+      $form->{"amount_$i"} = $form->round_amount($amount, 2);
+      $diff += $amount - $form->{"amount_$i"};
+      $form->{"tax_$i"} = $form->round_amount($tax, 2);
+      $form->{netamount} += $form->{"amount_$i"};
+    } else {
+      if (!$form->{"korrektur_$i"}) {
+        $form->{"tax_$i"} = $form->{"amount_$i"} * $form->{"taxrate_$i"};
       }
-      $form->{"tax_$i"} = $form->{"amount_$i"} * $form->{"taxrate_$i"};
-      $form->{"tax_$i"} = $form->round_amount($form->{"tax_$i"} * $form->{exchangerate}, 2);
+      $form->{"tax_$i"} =
+        $form->round_amount($form->{"tax_$i"} * $form->{exchangerate}, 2);
+      $form->{netamount} += $form->{"amount_$i"};
     }
+    
     $form->{total_tax} += $form->{"tax_$i"};
   }
 
@@ -223,9 +243,11 @@ sub post_transaction {
                                        WHERE c.accno = '$form->{AR_amounts}{"amount_$i"}'),
                  $form->{"amount_$i"}, '$form->{transdate}', $project_id, '$taxkey')|;
       $dbh->do($query) || $form->dberror($query);
-      if ($form->{"tax_$i"} !=0) {
+      if ($form->{"tax_$i"} != 0) {
+
         # insert detail records in acc_trans
-        $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate,
+        $query =
+          qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate,
                                           project_id, taxkey)
                     VALUES ($form->{id}, (SELECT c.id FROM chart c
                                           WHERE c.accno = '$form->{AR_amounts}{"tax_$i"}'),
@@ -234,6 +256,7 @@ sub post_transaction {
       }
     }
   }
+
   # add recievables
   $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate,
                                       project_id)
@@ -242,7 +265,6 @@ sub post_transaction {
               $form->{receivables}, '$form->{transdate}', $project_id)|;
   $dbh->do($query) || $form->dberror($query);
 
-
   # add paid transactions
   for my $i (1 .. $form->{paidaccounts}) {
     if ($form->{"paid_$i"} != 0) {
@@ -435,7 +457,7 @@ sub ar_transactions {
   my @a = (transdate, invnumber, name);
   push @a, "employee" if $form->{l_employee};
   my $sortorder = join ', ', $form->sort_columns(@a);
-  $sortorder = $form->{sort} unless $sortorder;
+  $sortorder = $form->{sort} if $form->{sort};
 
   $query .= "WHERE $where
              ORDER by $sortorder";