Die Funktion "Zahlung buchen" bei Kreditorenrechnungen komplett umgeschrieben. Sie...
[kivitendo-erp.git] / bin / mozilla / ar.pl
index 97eef05..667c7b3 100644 (file)
@@ -177,112 +177,7 @@ sub create_links {
   # build the popup menus
   $form->{taxincluded} = ($form->{id}) ? $form->{taxincluded} : "checked";
 
-  # forex
-  $form->{forex} = $form->{exchangerate};
-  $exchangerate = ($form->{exchangerate}) ? $form->{exchangerate} : 1;
-  foreach $key (keys %{ $form->{AR_links} }) {
-    # if there is a value we have an old entry
-    my $j = 0;
-    my $k = 0;
-
-    for $i (1 .. scalar @{ $form->{acc_trans}{$key} }) {
-      if ($key eq "AR_paid") {
-        $j++;
-        $form->{"AR_paid_$j"} = $form->{acc_trans}{$key}->[$i-1]->{accno};
-
-        # reverse paid
-        $form->{"paid_$j"} = $form->{acc_trans}{$key}->[$i - 1]->{amount} * -1;
-        $form->{"datepaid_$j"} =
-          $form->{acc_trans}{$key}->[$i - 1]->{transdate};
-        $form->{"source_$j"} = $form->{acc_trans}{$key}->[$i - 1]->{source};
-        $form->{"memo_$j"}   = $form->{acc_trans}{$key}->[$i - 1]->{memo};
-
-        $form->{"forex_$j"} = $form->{"exchangerate_$i"} =
-          $form->{acc_trans}{$key}->[$i - 1]->{exchangerate};
-        $form->{"paid_project_id_$j"} = $form->{acc_trans}{$key}->[$i - 1]->{project_id};
-        $form->{paidaccounts}++;
-
-      } else {
-
-        $akey = $key;
-        $akey =~ s/AR_//;
-
-        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->round_amount(
-                  $form->{acc_trans}{$key}->[$i - 1]->{amount} / $exchangerate,
-                  2);
-
-          if ($form->{"$form->{acc_trans}{$key}->[$i-1]->{accno}_rate"} > 0) {
-            $totaltax +=
-              $form->{"${akey}_$form->{acc_trans}{$key}->[$i-1]->{accno}"};
-            $taxrate +=
-              $form->{"$form->{acc_trans}{$key}->[$i-1]->{accno}_rate"};
-          } else {
-            $totalwithholding +=
-              $form->{"${akey}_$form->{acc_trans}{$key}->[$i-1]->{accno}"};
-            $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 {
-          $k++;
-          $form->{"${akey}_$k"} =
-            $form->round_amount(
-                  $form->{acc_trans}{$key}->[$i - 1]->{amount} / $exchangerate,
-                  2);
-          if ($akey eq 'amount') {
-            $form->{rowcount}++;
-            $totalamount += $form->{"${akey}_$i"};
-
-            $form->{"oldprojectnumber_$k"} = $form->{"projectnumber_$k"} =
-              "$form->{acc_trans}{$key}->[$i-1]->{projectnumber}";
-            $form->{taxrate} = $form->{acc_trans}{$key}->[$i - 1]->{rate};
-            $form->{"project_id_$k"} =
-              "$form->{acc_trans}{$key}->[$i-1]->{project_id}";
-          }
-          $form->{"${key}_$i"} =
-            "$form->{acc_trans}{$key}->[$i-1]->{accno}--$form->{acc_trans}{$key}->[$i-1]->{description}";
-
-          if ($akey eq "AR") {
-            $form->{ARselected} = $form->{acc_trans}{$key}->[$i-1]->{accno};
-
-          } elsif ($akey eq "amount") {
-            $form->{"${key}_$k"} = $form->{acc_trans}{$key}->[$i-1]->{accno} .
-              "--" . $form->{acc_trans}{$key}->[$i-1]->{id};
-            $form->{"taxchart_$k"} = $form->{acc_trans}{$key}->[$i-1]->{id} .
-              "--" . $form->{acc_trans}{$key}->[$i-1]->{rate};
-          }
-        }
-      }
-    }
-  }
-
-  $form->{taxincluded}  = $taxincluded if ($form->{id});
-  $form->{paidaccounts} = 1            if not defined $form->{paidaccounts};
-
-  if ($form->{taxincluded} && $form->{taxrate} && $totalamount) {
-
-    # add tax to amounts and invtotal
-    for $i (1 .. $form->{rowcount}) {
-      $taxamount =
-        ($totaltax + $totalwithholding) * $form->{"amount_$i"} / $totalamount;
-      $tax = $form->round_amount($taxamount, 2);
-      $diff                += ($taxamount - $tax);
-      $form->{"amount_$i"} += $form->{"tax_$i"};
-    }
-    $form->{amount_1} += $form->round_amount($diff, 2);
-  }
-
-  $taxamount = $form->round_amount($taxamount, 2);
-  $form->{tax} = $taxamount;
-
-  $form->{invtotal} = $totalamount + $totaltax;
+  AR->setup_form($form);
 
   $form->{locked} =
     ($form->datetonum($form->{transdate}, \%myconfig) <=
@@ -685,6 +580,7 @@ $jsscript
     $project = "";
   }
 
+  $form->{invtotal_unformatted} = $form->{invtotal};
   $form->{invtotal} = $form->format_amount(\%myconfig, $form->{invtotal}, 2);
 
   $ARselected =
@@ -756,7 +652,9 @@ $jsscript
         </tr>
 ";
 
-  my @triggers = ();
+  my @triggers  = ();
+  my $totalpaid = 0;
+
   $form->{paidaccounts}++ if ($form->{"paid_$form->{paidaccounts}"});
   for $i (1 .. $form->{paidaccounts}) {
     print "
@@ -770,6 +668,8 @@ $jsscript
                            '-labels' => \%AR_paid_labels,
                            '-default' => $form->{"AR_paid_$i"}));
 
+    $totalpaid += $form->{"paid_$i"};
+
     # format amounts
     if ($form->{"paid_$i"}) {
       $form->{"paid_$i"} =
@@ -822,7 +722,22 @@ $jsscript
     push(@triggers, "datepaid_$i", "BL", "trigger_datepaid_$i");
   }
 
-  print $form->write_trigger(\%myconfig, scalar(@triggers) / 3, @triggers) .
+  my $paid_missing = $form->{invtotal_unformatted} - $totalpaid;
+
+  print qq|
+        <tr>
+          <td></td>
+          <td></td>
+          <td align="center">| . $locale->text('Total') . qq|</td>
+          <td align="center">| . H($form->format_amount(\%myconfig, $totalpaid, 2)) . qq|</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td></td>
+          <td align="center">| . $locale->text('Missing amount') . qq|</td>
+          <td align="center">| . H($form->format_amount(\%myconfig, $paid_missing, 2)) . qq|</td>
+        </tr>
+| . $form->write_trigger(\%myconfig, scalar(@triggers) / 3, @triggers) .
     qq|
 <input type=hidden name=paidaccounts value=$form->{paidaccounts}>
 
@@ -869,9 +784,9 @@ sub form_footer {
   $transdate = $form->datetonum($form->{transdate}, \%myconfig);
   $closedto  = $form->datetonum($form->{closedto},  \%myconfig);
 
-  # ToDO: insert a global check for stornos, so that a storno is only possible a limited time after saving it
-  print qq|<input class=submit type=submit name=action value="| . $locale->text('Storno') . qq|">|;
-    if $form->{id} && !IS->has_storno(\%myconfig, $form, 'ar') && !IS->is_storno(\%myconfig, $form, 'ar');
+  # ToDO: insert a global check for stornos, so that a storno is only possible a limited time after saving it
+  print qq|<input class=submit type=submit name=action value="| . $locale->text('Storno') . qq|">|
+    if ($form->{id} && !IS->has_storno(\%myconfig, $form, 'ar') && !IS->is_storno(\%myconfig, $form, 'ar') && !$form->{paid_1});
 
   print qq|<input class="submit" type="submit" name="action" id="update_button" value="| . $locale->text('Update') . qq|">\n|;
   if ($form->{id}) {
@@ -1026,7 +941,7 @@ sub post_payment {
 
   ($form->{AR})      = split /--/, $form->{AR};
   ($form->{AR_paid}) = split /--/, $form->{AR_paid};
-  $form->redirect($locale->text(' Payment posted!'))
+  $form->redirect($locale->text('Payment posted!'))
       if (AR->post_payment(\%myconfig, \%$form));
     $form->error($locale->text('Cannot post payment!'));
 
@@ -1650,7 +1565,7 @@ sub ar_transactions {
     $column_data{invnumber} =
       "<td><a href=$module?action=edit&id=$ar->{id}&login=$form->{login}&password=$form->{password}&callback=$callback>$ar->{invnumber}</a></td>";
 
-    my $is_storno  = $ar->{storno} && IS->is_storno(\%myconfig, $form, 'ar'); #($ar->{invnumber} =~ /^Storno zu/); # ToDO: fix this
+    my $is_storno  = $ar->{storno} && IS->is_storno(\%myconfig, $form, 'ar');
     my $has_storno = $ar->{storno} && !$is_storno;
 
     $column_data{type} = "<td>" .
@@ -1794,16 +1709,6 @@ sub storno {
     $form->error($locale->text("Transaction has already been cancelled!"));
   }
 
-  # ToDO: 
-  #       - nicht anzeigen wenn neue rechnung
-  #       - nicht anzeigen wenn schons toniert
-  #       - nicht anziegen wenn zahlungen da
-
-
-#  my %keep_keys = map { $_, 1 } qw(login password id stylesheet);
-#  map { delete $form->{$_} unless $keep_keys{$_} } keys %{ $form };
-#  prepare_transaction();
-
   # negate amount/taxes
   for my $i (1 .. $form->{rowcount}) {
     $form->{"amount_$i"} *= -1;
@@ -1834,5 +1739,4 @@ sub storno {
   # /saving the history 
 
   $lxdebug->leave_sub();
-
 }