Speichern von Konten ein wenig debugged
[kivitendo-erp.git] / bin / mozilla / ar.pl
index 2451cc1..47a395d 100644 (file)
@@ -34,6 +34,7 @@
 use SL::AR;
 use SL::IS;
 use SL::PE;
 use SL::AR;
 use SL::IS;
 use SL::PE;
+use Data::Dumper;
 
 require "$form->{path}/arap.pl";
 
 
 require "$form->{path}/arap.pl";
 
@@ -110,11 +111,14 @@ sub create_links {
   $duedate = $form->{duedate};
 
   $taxincluded = $form->{taxincluded};
   $duedate = $form->{duedate};
 
   $taxincluded = $form->{taxincluded};
-
+  my $id = $form->{id};
   IS->get_customer(\%myconfig, \%$form);
   IS->get_customer(\%myconfig, \%$form);
+  $form->{taxincluded} = $taxincluded;
+  $form->{id} = $id;
 
   $form->{duedate}     = $duedate if $duedate;
   $form->{oldcustomer} = "$form->{customer}--$form->{customer_id}";
 
   $form->{duedate}     = $duedate if $duedate;
   $form->{oldcustomer} = "$form->{customer}--$form->{customer_id}";
+  $form->{rowcount}    = 1;
 
   # currencies
   @curr = split /:/, $form->{currencies};
 
   # currencies
   @curr = split /:/, $form->{currencies};
@@ -155,7 +159,7 @@ sub create_links {
 
   map {
     $tax .=
 
   map {
     $tax .=
-      qq|<option value=\"$_->{taxkey}--$_->{rate}\">$_->{taxdescription}  |
+      qq|<option value=\"$_->{id}--$_->{rate}\">$_->{taxdescription}  |
       . ($_->{rate} * 100) . qq| %|
   } @{ $form->{TAX} };
   $form->{taxchart}       = $tax;
       . ($_->{rate} * 100) . qq| %|
   } @{ $form->{TAX} };
   $form->{taxchart}       = $tax;
@@ -172,14 +176,16 @@ sub create_links {
           "<option value=\"$ref->{accno}\">$ref->{accno}--$ref->{description}</option>\n";
       } else {
         $form->{"select$key"} .=
           "<option value=\"$ref->{accno}\">$ref->{accno}--$ref->{description}</option>\n";
       } else {
         $form->{"select$key"} .=
-          "<option value=\"$ref->{accno}--$ref->{taxkey}\">$ref->{accno}--$ref->{description}</option>\n";
+          "<option value=\"$ref->{accno}--$ref->{tax_id}\">$ref->{accno}--$ref->{description}</option>\n";
       }
     }
 
     $form->{$key} = $form->{"select$key"};
 
     # if there is a value we have an old entry
       }
     }
 
     $form->{$key} = $form->{"select$key"};
 
     # if there is a value we have an old entry
-    $j = 0;
+    my $j = 0;
+    my $k = 0;
+
     for $i (1 .. scalar @{ $form->{acc_trans}{$key} }) {
       if ($key eq "AR_paid") {
         $j++;
     for $i (1 .. scalar @{ $form->{acc_trans}{$key} }) {
       if ($key eq "AR_paid") {
         $j++;
@@ -202,7 +208,7 @@ sub create_links {
         $akey = $key;
         $akey =~ s/AR_//;
 
         $akey = $key;
         $akey =~ s/AR_//;
 
-        if ($key eq "AR_tax") {
+        if ($key eq "AR_tax" || $key eq "AP_tax") {
           $form->{"${key}_$form->{acc_trans}{$key}->[$i-1]->{accno}"} =
             "$form->{acc_trans}{$key}->[$i-1]->{accno}--$form->{acc_trans}{$key}->[$i-1]->{description}";
           $form->{"${akey}_$form->{acc_trans}{$key}->[$i-1]->{accno}"} =
           $form->{"${key}_$form->{acc_trans}{$key}->[$i-1]->{accno}"} =
             "$form->{acc_trans}{$key}->[$i-1]->{accno}--$form->{acc_trans}{$key}->[$i-1]->{description}";
           $form->{"${akey}_$form->{acc_trans}{$key}->[$i-1]->{accno}"} =
@@ -221,9 +227,13 @@ sub create_links {
             $withholdingrate +=
               $form->{"$form->{acc_trans}{$key}->[$i-1]->{accno}_rate"};
           }
             $withholdingrate +=
               $form->{"$form->{acc_trans}{$key}->[$i-1]->{accno}_rate"};
           }
+          $index = $form->{acc_trans}{$key}->[$i - 1]->{index};
+          $form->{"tax_$index"} = $form->{acc_trans}{$key}->[$i - 1]->{amount};
+          $totaltax += $form->{"tax_$index"};
 
         } else {
 
         } else {
-          $form->{"${akey}_$i"} =
+          $k++;
+          $form->{"${akey}_$k"} =
             $form->round_amount(
                   $form->{acc_trans}{$key}->[$i - 1]->{amount} / $exchangerate,
                   2);
             $form->round_amount(
                   $form->{acc_trans}{$key}->[$i - 1]->{amount} / $exchangerate,
                   2);
@@ -231,24 +241,25 @@ sub create_links {
             $form->{rowcount}++;
             $totalamount += $form->{"${akey}_$i"};
 
             $form->{rowcount}++;
             $totalamount += $form->{"${akey}_$i"};
 
-            $form->{"oldprojectnumber_$i"} = $form->{"projectnumber_$i"} =
+            $form->{"oldprojectnumber_$k"} = $form->{"projectnumber_$k"} =
               "$form->{acc_trans}{$key}->[$i-1]->{projectnumber}";
             $form->{taxrate} = $form->{acc_trans}{$key}->[$i - 1]->{rate};
               "$form->{acc_trans}{$key}->[$i-1]->{projectnumber}";
             $form->{taxrate} = $form->{acc_trans}{$key}->[$i - 1]->{rate};
-            $form->{"project_id_$i"} =
+            $form->{"project_id_$k"} =
               "$form->{acc_trans}{$key}->[$i-1]->{project_id}";
           }
               "$form->{acc_trans}{$key}->[$i-1]->{project_id}";
           }
-          $form->{"${key}_$i"} =
+          $form->{"${key}_$k"} =
             "$form->{acc_trans}{$key}->[$i-1]->{accno}--$form->{acc_trans}{$key}->[$i-1]->{description}";
           $form->{"${key}_$i"} =
             "$form->{acc_trans}{$key}->[$i-1]->{accno}--$form->{acc_trans}{$key}->[$i-1]->{description}";
           $form->{"select${key}"} =~
             "$form->{acc_trans}{$key}->[$i-1]->{accno}--$form->{acc_trans}{$key}->[$i-1]->{description}";
           $form->{"${key}_$i"} =
             "$form->{acc_trans}{$key}->[$i-1]->{accno}--$form->{acc_trans}{$key}->[$i-1]->{description}";
           $form->{"select${key}"} =~
-            /(<option value=\"$form->{acc_trans}{$key}->[$i-1]->{accno}--[^\"]*\">$form->{acc_trans}{$key}->[$i-1]->{accno}--$form->{acc_trans}{$key}->[$i-1]->{description}<\/option>\n)/;
+            /<option value=\"($form->{acc_trans}{$key}->[$i-1]->{accno}--[^\"]*)\">$form->{acc_trans}{$key}->[$i-1]->{accno}--$form->{acc_trans}{$key}->[$i-1]->{description}<\/option>\n/;
           $test = $1;
           $test = $1;
-          $form->{"select${key}"} = $1;
+          $form->{"${key}_$k"} = $1;
           if ($akey eq 'amount') {
           if ($akey eq 'amount') {
-            $form->{selecttaxchart} =~
-              /(<option value=\"$form->{acc_trans}{$key}->[$i-1]->{taxkey}--[^<]*)/;
-            $form->{selecttaxchart} = $1;
+            $form->{"taxchart_$k"} = $form->{taxchart};
+            $form->{"taxchart_$k"} =~
+              /<option value=\"($form->{acc_trans}{$key}->[$i-1]->{id}--[^\"]*)/;
+            $form->{"taxchart_$k"} = $1;
           }
         }
       }
           }
         }
       }
@@ -261,38 +272,20 @@ sub create_links {
   if ($form->{taxincluded} && $form->{taxrate} && $totalamount) {
 
     # add tax to amounts and invtotal
   if ($form->{taxincluded} && $form->{taxrate} && $totalamount) {
 
     # add tax to amounts and invtotal
-    for $i (1 .. 1) {
+    for $i (1 .. $form->{rowcount}) {
       $taxamount =
         ($totaltax + $totalwithholding) * $form->{"amount_$i"} / $totalamount;
       $tax = $form->round_amount($taxamount, 2);
       $diff                += ($taxamount - $tax);
       $taxamount =
         ($totaltax + $totalwithholding) * $form->{"amount_$i"} / $totalamount;
       $tax = $form->round_amount($taxamount, 2);
       $diff                += ($taxamount - $tax);
-      $form->{"amount_$i"} += $tax;
+      $form->{"amount_$i"} += $form->{"tax_$i"};
     }
     $form->{amount_1} += $form->round_amount($diff, 2);
   }
 
     }
     $form->{amount_1} += $form->round_amount($diff, 2);
   }
 
-  # check if calculated is equal to stored
-  if ($form->{taxincluded} && $form->{taxrate} && $withholdingrate) {
-    if ($form->{"taxrate"} > 0) {
-      $taxamount =
-        $form->round_amount(
-            ($form->{amount_1} - ($form->{amount_1} / ($form->{taxrate} + 1))),
-            2);
-    } else {
-      $taxamount =
-        $form->round_amount(
-            ($totalamount + $totaltax + $totalwithholding) * $withholdingrate /
-              (1 - $withholdingrate),
-            2
-        ) * $form->{"taxrate"} / $withholdingrate;
-    }
-  } else {
-    $taxamount = $totalamount * $form->{"taxrate"};
-  }
   $taxamount = $form->round_amount($taxamount, 2);
   $form->{tax} = $taxamount;
 
   $taxamount = $form->round_amount($taxamount, 2);
   $form->{tax} = $taxamount;
 
-  $form->{invtotal} = $totalamount + $totaltax + $totalwithholding;
+  $form->{invtotal} = $totalamount + $totaltax;
 
   $form->{locked} =
     ($form->datetonum($form->{transdate}, \%myconfig) <=
 
   $form->{locked} =
     ($form->datetonum($form->{transdate}, \%myconfig) <=
@@ -311,6 +304,25 @@ sub form_header {
 
   # $locale->text('Add Accounts Receivables Transaction')
   # $locale->text('Edit Accounts Receivables Transaction')
 
   # $locale->text('Add Accounts Receivables Transaction')
   # $locale->text('Edit Accounts Receivables Transaction')
+  $form->{javascript} = qq|<script type="text/javascript">
+  <!--
+  function setTaxkey(accno, row) {
+    var taxkey = accno.options[accno.selectedIndex].value;
+    var reg = /--([0-9]*)/;
+    var found = reg.exec(taxkey);
+    var index = found[1];
+    index = parseInt(index);
+    var tax = 'taxchart_' + row;
+    for (var i = 0; i < document.getElementById(tax).options.length; ++i) {
+      var reg2 = new RegExp("^"+ index, "");
+      if (reg2.exec(document.getElementById(tax).options[i].value)) {
+        document.getElementById(tax).options[i].selected = true;
+        break;
+      }
+    }
+  };
+  //-->
+  </script>|;
 
   $readonly = ($form->{id}) ? "readonly" : "";
 
 
   $readonly = ($form->{id}) ? "readonly" : "";
 
@@ -324,8 +336,10 @@ sub form_header {
     $form->{"select$item"} =~
       s/option>\Q$form->{$item}\E/option selected>$form->{$item}/;
   }
     $form->{"select$item"} =~
       s/option>\Q$form->{$item}\E/option selected>$form->{$item}/;
   }
-
-  map { $form->{$_} =~ s/\"/&quot;/g } qw(AR_amount AR taxchart);
+  $selectAR_amount_unquoted = $form->{selectAR_amount};
+  $taxchart                 = $form->{taxchart};
+  map { $form->{$_} =~ s/\"/&quot;/g }
+    qw(AR_amount selectAR_amount AR taxchart);
 
   # format amounts
   $form->{exchangerate} =
 
   # format amounts
   $form->{exchangerate} =
@@ -409,14 +423,12 @@ sub form_header {
     $button1 = qq|
        <td><input name=transdate id=transdate size=11 title="$myconfig{dateformat}" value=$form->{transdate}></td>
        <td><input type=button name=transdate id="trigger1" value=|
     $button1 = qq|
        <td><input name=transdate id=transdate size=11 title="$myconfig{dateformat}" value=$form->{transdate}></td>
        <td><input type=button name=transdate id="trigger1" value=|
-      . $locale->text('button')
-      . qq|></td>  
+      . $locale->text('button') . qq|></td>
        |;
     $button2 = qq|
        <td><input name=duedate id=duedate size=11 title="$myconfig{dateformat}" value=$form->{duedate}></td>
        <td><input type=button name=duedate id="trigger2" value=|
        |;
     $button2 = qq|
        <td><input name=duedate id=duedate size=11 title="$myconfig{dateformat}" value=$form->{duedate}></td>
        <td><input type=button name=duedate id="trigger2" value=|
-      . $locale->text('button')
-      . qq|></td></td>
+      . $locale->text('button') . qq|></td></td>
      |;
 
     #write Trigger
      |;
 
     #write Trigger
@@ -517,64 +529,77 @@ sub form_header {
       </table>
     </td>
   </tr>
       </table>
     </td>
   </tr>
-  <tr>
-    <td>
-      <table width=100%>
 
 $jsscript
 
 $jsscript
-          
+  <input type=hidden name=selectAR_amount value="$form->{selectAR_amount}">
   <input type=hidden name=AR_amount value="$form->{AR_amount}">
   <input type=hidden name=taxchart value="$form->{taxchart}">
   <input type=hidden name=rowcount value=$form->{rowcount}>
   <input type=hidden name=AR_amount value="$form->{AR_amount}">
   <input type=hidden name=taxchart value="$form->{taxchart}">
   <input type=hidden name=rowcount value=$form->{rowcount}>
+  <tr>
+      <td>
+          <table width=100%>
+          <tr class=listheading>
+         <th class=listheading style="width:15%">|
+    . $locale->text('Account') . qq|</th>
+         <th class=listheading style="width:10%">|
+    . $locale->text('Amount') . qq|</th>
+          <th class=listheading style="width:10%">|
+    . $locale->text('Tax') . qq|</th>
+          <th class=listheading style="width:5%">|
+    . $locale->text('Korrektur') . qq|</th>
+          <th class=listheading style="width:10%">|
+    . $locale->text('Taxkey') . qq|</th>
+          <th class=listheading style="width:10%">|
+    . $locale->text('Project') . qq|</th>
+       </tr>
 |;
 
 |;
 
-  $form->{"tax"} = $form->format_amount(\%myconfig, $form->{"tax"}, 2);
-
   $amount  = $locale->text('Amount');
   $project = $locale->text('Project');
 
   $amount  = $locale->text('Amount');
   $project = $locale->text('Project');
 
-  for $i (1 .. 1) {
+  for $i (1 .. $form->{rowcount}) {
 
     # format amounts
     $form->{"amount_$i"} =
       $form->format_amount(\%myconfig, $form->{"amount_$i"}, 2);
 
     # format amounts
     $form->{"amount_$i"} =
       $form->format_amount(\%myconfig, $form->{"amount_$i"}, 2);
+    $form->{"tax_$i"} = $form->format_amount(\%myconfig, $form->{"tax_$i"}, 2);
+    $selectAR_amount = $selectAR_amount_unquoted;
+    $selectAR_amount =~
+      s/option value=\"$form->{"AR_amount_$i"}\"/option value=\"$form->{"AR_amount_$i"}\" selected/;
+    $tax          = $taxchart;
+    $tax_selected = $form->{"taxchart_$i"};
+    $tax =~ s/value=\"$tax_selected\"/value=\"$tax_selected\" selected/;
+    $tax =
+      qq|<td><select id="taxchart_$i" name="taxchart_$i" style="width:200px">$tax</select></td>|;
+    $korrektur_checked = ($form->{"korrektur_$i"} ? 'checked' : '');
 
     print qq|
        <tr>
 
     print qq|
        <tr>
-         <th align=right>$amount</th>
-         <td><input name="amount_$i" size=10 value=$form->{"amount_$i"}></td>
-         <th>$project</th>
+          <td width=50%><select name="AR_amount_$i" onChange="setTaxkey(this, $i)" style="width:100%">$selectAR_amount</select></td>
+          <td><input name="amount_$i" size=10 value=$form->{"amount_$i"}></td>
+          <td><input name="tax_$i" size=10 value=$form->{"tax_$i"}></td>
+          <td><input type="checkbox" name="korrektur_$i" value="1" $korrektur_checked></td>
+          $tax
          <td><input name="projectnumber_$i" size=20 value="$form->{"projectnumber_$i"}">
              <input type=hidden name="project_id_$i" value=$form->{"project_id_$i"}>
              <input type=hidden name="oldprojectnumber_$i" value="$form->{"oldprojectnumber_$i"}"></td>
          <td><input name="projectnumber_$i" size=20 value="$form->{"projectnumber_$i"}">
              <input type=hidden name="project_id_$i" value=$form->{"project_id_$i"}>
              <input type=hidden name="oldprojectnumber_$i" value="$form->{"oldprojectnumber_$i"}"></td>
-         <td width=50%><select name="AR_amountselected">$form->{"selectAR_amount"}</select></td>
        </tr>
 |;
     $amount  = "";
     $project = "";
   }
 
        </tr>
 |;
     $amount  = "";
     $project = "";
   }
 
-  $taxlabel =
-    ($form->{taxincluded})
-    ? $locale->text('Tax Included')
-    : $locale->text('Tax');
-
-  print qq|
-      <tr>
-       <th align=right nowrap>$taxlabel</th>
-       <td><input name="tax" size=10 value=$form->{"tax"}></td>
-       <td align=right></td>
-       <td></td>
-       <td><select name="taxchartselected">$form->{"selecttaxchart"}</select></td>
-      </tr>
-|;
-
   $form->{invtotal} = $form->format_amount(\%myconfig, $form->{invtotal}, 2);
 
   print qq|
         <tr>
   $form->{invtotal} = $form->format_amount(\%myconfig, $form->{invtotal}, 2);
 
   print qq|
         <tr>
-
-         <th align=right>| . $locale->text('Total') . qq|</th>
+          <td colspan=6>
+            <hr noshade>
+          </td>
+        </tr>
+        <tr>
+         <td><select name=ARselected>$form->{selectAR}</select></td>
+          <input type=hidden name=AR value="$form->{AR}">
          <th align=left>$form->{invtotal}</th>
 
          <input type=hidden name=oldinvtotal value=$form->{oldinvtotal}>
          <th align=left>$form->{invtotal}</th>
 
          <input type=hidden name=oldinvtotal value=$form->{oldinvtotal}>
@@ -582,14 +607,19 @@ $jsscript
 
          <input type=hidden name=taxaccounts value="$form->{taxaccounts}">
 
 
          <input type=hidden name=taxaccounts value="$form->{taxaccounts}">
 
-         <td colspan=2></td>
-         <td><select name=ARselected>$form->{selectAR}</select></td>
-          <input type=hidden name=AR value="$form->{AR}">
-  
+         <td colspan=4></td>
+
+
         </tr>
         </tr>
+        </table>
+        </td>
+    </tr>
+    <tr>
+      <td>
+        <table width=100%>
         <tr>
         <tr>
-         <th align=right>| . $locale->text('Notes') . qq|</th>
-         <td colspan=4>$notes</td>
+         <th align=left width=1%>| . $locale->text('Notes') . qq|</th>
+         <td align=left>$notes</td>
        </tr>
       </table>
     </td>
        </tr>
       </table>
     </td>
@@ -599,8 +629,7 @@ $jsscript
       <table width=100%>
        <tr class=listheading>
          <th colspan=6 class=listheading>|
       <table width=100%>
        <tr class=listheading>
          <th colspan=6 class=listheading>|
-    . $locale->text('Incoming Payments')
-    . qq|</th>
+    . $locale->text('Incoming Payments') . qq|</th>
        </tr>
 |;
 
        </tr>
 |;
 
@@ -636,8 +665,10 @@ $jsscript
       s/option value=\"$form->{"AR_paid_$i"}\">/option value=\"$form->{"AR_paid_$i"}\" selected>/;
 
     # format amounts
       s/option value=\"$form->{"AR_paid_$i"}\">/option value=\"$form->{"AR_paid_$i"}\" selected>/;
 
     # format amounts
-    $form->{"paid_$i"} =
-      $form->format_amount(\%myconfig, $form->{"paid_$i"}, 2);
+    if ($form->{"paid_$i"}) {
+      $form->{"paid_$i"} =
+        $form->format_amount(\%myconfig, $form->{"paid_$i"}, 2);
+    }
     $form->{"exchangerate_$i"} =
       $form->format_amount(\%myconfig, $form->{"exchangerate_$i"});
 
     $form->{"exchangerate_$i"} =
       $form->format_amount(\%myconfig, $form->{"exchangerate_$i"});
 
@@ -708,30 +739,30 @@ sub form_footer {
   $transdate = $form->datetonum($form->{transdate}, \%myconfig);
   $closedto  = $form->datetonum($form->{closedto},  \%myconfig);
 
   $transdate = $form->datetonum($form->{transdate}, \%myconfig);
   $closedto  = $form->datetonum($form->{closedto},  \%myconfig);
 
-  if ($form->{id} && $form->{radier}) {
-
-    print qq|<input class=submit type=submit name=action value="|
-      . $locale->text('Update') . qq|">
-|;
-
-    if (!$form->{revtrans}) {
-      if (!$form->{locked}) {
+  if ($form->{id}) {
+    if ($form->{radier}) {
+      print qq|<input class=submit type=submit name=action value="|
+        . $locale->text('Update') . qq|">
+  |;
+  
+      if (!$form->{revtrans}) {
+        if (!$form->{locked}) {
+          print qq|
+          <input class=submit type=submit name=action value="|
+            . $locale->text('Post') . qq|">
+          <input class=submit type=submit name=action value="|
+            . $locale->text('Delete') . qq|">
+  |;
+        }
+      }
+  
+      if ($transdate > $closedto) {
         print qq|
         print qq|
-       <input class=submit type=submit name=action value="|
-          . $locale->text('Post') . qq|">
-       <input class=submit type=submit name=action value="|
-          . $locale->text('Delete') . qq|">
-|;
+  <input class=submit type=submit name=action value="|
+          . $locale->text('Post as new') . qq|">
+  |;
       }
     }
       }
     }
-
-    if ($transdate > $closedto) {
-      print qq|
-<input class=submit type=submit name=action value="|
-        . $locale->text('Post as new') . qq|">
-|;
-    }
-
   } else {
     if ($transdate > $closedto) {
       print qq|<input class=submit type=submit name=action value="|
   } else {
     if ($transdate > $closedto) {
       print qq|<input class=submit type=submit name=action value="|
@@ -767,9 +798,9 @@ sub update {
 
   $form->{invtotal} = 0;
 
 
   $form->{invtotal} = 0;
 
-  $form->{selectAR_amount} = $form->{AR_amount};
-  $form->{selectAR_amount} =~
-    s/value=\"$form->{AR_amountselected}\"/value=\"$form->{AR_amountselected}\" selected/;
+  #   $form->{selectAR_amount} = $form->{AR_amount};
+  #   $form->{selectAR_amount} =~
+  #     s/value=\"$form->{AR_amountselected}\"/value=\"$form->{AR_amountselected}\" selected/;
 
   $form->{selectAR} = $form->{AR};
 
 
   $form->{selectAR} = $form->{AR};
 
@@ -790,21 +821,37 @@ sub update {
   @flds  = qw(amount AR_amount projectnumber oldprojectnumber project_id);
   $count = 0;
   @a     = ();
   @flds  = qw(amount AR_amount projectnumber oldprojectnumber project_id);
   $count = 0;
   @a     = ();
-  for $i (1 .. 1) {
+
+  for $i (1 .. $form->{rowcount}) {
     $form->{"amount_$i"} =
       $form->parse_amount(\%myconfig, $form->{"amount_$i"});
     $form->{"amount_$i"} =
       $form->parse_amount(\%myconfig, $form->{"amount_$i"});
+    $form->{"tax_$i"} = $form->parse_amount(\%myconfig, $form->{"tax_$i"});
     if ($form->{"amount_$i"}) {
       push @a, {};
       $j = $#a;
     if ($form->{"amount_$i"}) {
       push @a, {};
       $j = $#a;
+      if (!$form->{"korrektur_$i"}) {
+        ($taxkey, $rate) = split(/--/, $form->{"taxchart_$i"});
+        if ($taxkey > 1) {
+          if ($form->{taxincluded}) {
+            $form->{"tax_$i"} = $form->{"amount_$i"} / ($rate + 1) * $rate;
+          } else {
+            $form->{"tax_$i"} = $form->{"amount_$i"} * $rate;
+          }
+        } else {
+          $form->{"tax_$i"} = 0;
+        }
+      }
+      $form->{"tax_$i"} = $form->round_amount($form->{"tax_$i"}, 2);
 
 
+      $totaltax += $form->{"tax_$i"};
       map { $a[$j]->{$_} = $form->{"${_}_$i"} } @flds;
       $count++;
     }
   }
 
   $form->redo_rows(\@flds, \@a, $count, $form->{rowcount});
       map { $a[$j]->{$_} = $form->{"${_}_$i"} } @flds;
       $count++;
     }
   }
 
   $form->redo_rows(\@flds, \@a, $count, $form->{rowcount});
-
-  map { $form->{invtotal} += $form->{"amount_$_"} } (1 .. 1);
+  $form->{rowcount} = $count + 1;
+  map { $form->{invtotal} += $form->{"amount_$_"} } (1 .. $form->{rowcount});
 
   $form->{exchangerate} = $exchangerate
     if (
 
   $form->{exchangerate} = $exchangerate
     if (
@@ -821,38 +868,6 @@ sub update {
 
   &check_project;
 
 
   &check_project;
 
-TAXCALC:
-
-  # recalculate taxes
-
-  @taxaccounts = split / /, $form->{taxaccounts};
-
-  $form->{"tax"} = $form->parse_amount(\%myconfig, $form->{"tax"});
-
-  if ($form->{taxincluded} && $form->{"rate"}) {
-    $taxrate         = $form->{"rate"};
-    $withholdingrate = 0;
-
-    $amount =
-      $form->round_amount(
-                    ($form->{invtotal} - ($form->{invtotal} / ($taxrate + 1))),
-                    2);
-    $form->{"tax"} = $form->round_amount($amount, 2);
-    $taxdiff += ($amount - $form->{"tax"});
-
-    if (abs $taxdiff >= 0.005) {
-      $form->{"tax"} += $form->round_amount($taxdiff, 2);
-      $taxdiff = 0;
-    }
-    $totaltax += $form->{"tax"};
-
-  } else {
-    $form->{"tax"} =
-      $form->round_amount($form->{invtotal} * $form->{"rate"}, 2);
-    $totaltax += $form->{"tax"};
-
-  }
-
   $form->{invtotal} =
     ($form->{taxincluded}) ? $form->{invtotal} : $form->{invtotal} + $totaltax;
 
   $form->{invtotal} =
     ($form->{taxincluded}) ? $form->{invtotal} : $form->{invtotal} + $totaltax;
 
@@ -1030,8 +1045,8 @@ sub search {
     } (@{ $form->{all_departments} });
   }
 
     } (@{ $form->{all_departments} });
   }
 
-  $department = qq| 
-        <tr> 
+  $department = qq|
+        <tr>
          <th align=right nowrap>| . $locale->text('Department') . qq|</th>
          <td colspan=3><select name=department>$form->{selectdepartment}</select></td>
        </tr>
          <th align=right nowrap>| . $locale->text('Department') . qq|</th>
          <td colspan=3><select name=department>$form->{selectdepartment}</select></td>
        </tr>
@@ -1048,14 +1063,12 @@ sub search {
     $button1 = qq|
        <td><input name=transdatefrom id=transdatefrom size=11 title="$myconfig{dateformat}">
        <input type=button name=transdatefrom id="trigger1" value=|
     $button1 = qq|
        <td><input name=transdatefrom id=transdatefrom size=11 title="$myconfig{dateformat}">
        <input type=button name=transdatefrom id="trigger1" value=|
-      . $locale->text('button')
-      . qq|></td>
+      . $locale->text('button') . qq|></td>
       |;
     $button2 = qq|
        <td><input name=transdateto id=transdateto size=11 title="$myconfig{dateformat}">
        <input type=button name=transdateto name=transdateto id="trigger2" value=|
       |;
     $button2 = qq|
        <td><input name=transdateto id=transdateto size=11 title="$myconfig{dateformat}">
        <input type=button name=transdateto name=transdateto id="trigger2" value=|
-      . $locale->text('button')
-      . qq|></td>
+      . $locale->text('button') . qq|></td>
      |;
 
     #write Trigger
      |;
 
     #write Trigger
@@ -1274,10 +1287,9 @@ sub ar_transactions {
     $option   .= $locale->text('Closed');
   }
 
     $option   .= $locale->text('Closed');
   }
 
-  @columns =
-    $form->sort_columns(
+  @columns = $form->sort_columns(
     qw(transdate id invnumber ordnumber name netamount tax amount paid datepaid due duedate notes employee shippingpoint shipvia)
     qw(transdate id invnumber ordnumber name netamount tax amount paid datepaid due duedate notes employee shippingpoint shipvia)
-    );
+  );
 
   foreach $item (@columns) {
     if ($form->{"l_$item"} eq "Y") {
 
   foreach $item (@columns) {
     if ($form->{"l_$item"} eq "Y") {
@@ -1559,4 +1571,3 @@ sub ar_subtotal {
 
   $lxdebug->leave_sub();
 }
 
   $lxdebug->leave_sub();
 }
-