IC.pm->all_parts: Im bom Modus (Einzelteile von Erzeugnissen mit anzeigen) Preisfakto...
[kivitendo-erp.git] / SL / IS.pm
index 73bae36..2443d85 100644 (file)
--- a/SL/IS.pm
+++ b/SL/IS.pm
@@ -145,17 +145,20 @@ sub invoice_details {
        linetotal  nodiscount_linetotal tax_rate projectnumber
        price_factor price_factor_name partsgroup);
 
-  my @tax_arrays =
-    qw(taxbase tax taxdescription taxrate taxnumber);
+  my @tax_arrays = qw(taxbase tax taxdescription taxrate taxnumber);
+
+  my @payment_arrays = qw(payment paymentaccount paymentdate paymentsource paymentmemo);
+
+  map { $form->{TEMPLATE_ARRAYS}{$_} => [] } (@arrays, @tax_arrays, @payment_arrays);
 
   foreach $item (sort { $a->[1] cmp $b->[1] } @partsgroup) {
     $i = $item->[0];
 
     if ($item->[1] ne $sameitem) {
-      push(@{ $form->{description} }, qq|$item->[1]|);
+      push(@{ $form->{TEMPLATE_ARRAYS}->{description} }, qq|$item->[1]|);
       $sameitem = $item->[1];
 
-      map({ push(@{ $form->{$_} }, "") } grep({ $_ ne "description" } @arrays));
+      map({ push(@{ $form->{TEMPLATE_ARRAYS}->{$_} }, "") } grep({ $_ ne "description" } @arrays));
     }
 
     $form->{"qty_$i"} = $form->parse_amount($myconfig, $form->{"qty_$i"});
@@ -179,40 +182,41 @@ sub invoice_details {
 
       my $price_factor = $price_factors{$form->{"price_factor_id_$i"}} || { 'factor' => 1 };
 
-      push @{ $form->{runningnumber} },     $position;
-      push @{ $form->{number} },            $form->{"partnumber_$i"};
-      push @{ $form->{serialnumber} },      $form->{"serialnumber_$i"};
-      push @{ $form->{bin} },               $form->{"bin_$i"};
-      push @{ $form->{"partnotes"} },       $form->{"partnotes_$i"};
-      push @{ $form->{description} },       $form->{"description_$i"};
-      push @{ $form->{longdescription} },   $form->{"longdescription_$i"};
-      push @{ $form->{qty} },               $form->format_amount($myconfig, $form->{"qty_$i"});
-      push @{ $form->{unit} },              $form->{"unit_$i"};
-      push @{ $form->{deliverydate_oe} },   $form->{"deliverydate_$i"};
-      push @{ $form->{sellprice} },         $form->{"sellprice_$i"};
-      push @{ $form->{ordnumber_oe} },      $form->{"ordnumber_$i"};
-      push @{ $form->{transdate_oe} },      $form->{"transdate_$i"};
-      push @{ $form->{invnumber} },         $form->{"invnumber"};
-      push @{ $form->{invdate} },           $form->{"invdate"};
-      push @{ $form->{price_factor} },      $price_factor->{formatted_factor};
-      push @{ $form->{price_factor_name} }, $price_factor->{description};
-      push @{ $form->{partsgroup} },        $form->{"partsgroup_$i"};
+      push @{ $form->{TEMPLATE_ARRAYS}->{runningnumber} },     $position;
+      push @{ $form->{TEMPLATE_ARRAYS}->{number} },            $form->{"partnumber_$i"};
+      push @{ $form->{TEMPLATE_ARRAYS}->{serialnumber} },      $form->{"serialnumber_$i"};
+      push @{ $form->{TEMPLATE_ARRAYS}->{bin} },               $form->{"bin_$i"};
+      push @{ $form->{TEMPLATE_ARRAYS}->{partnotes} },         $form->{"partnotes_$i"};
+      push @{ $form->{TEMPLATE_ARRAYS}->{description} },       $form->{"description_$i"};
+      push @{ $form->{TEMPLATE_ARRAYS}->{longdescription} },   $form->{"longdescription_$i"};
+      push @{ $form->{TEMPLATE_ARRAYS}->{qty} },               $form->format_amount($myconfig, $form->{"qty_$i"});
+      push @{ $form->{TEMPLATE_ARRAYS}->{unit} },              $form->{"unit_$i"};
+      push @{ $form->{TEMPLATE_ARRAYS}->{deliverydate_oe} },   $form->{"deliverydate_$i"};
+      push @{ $form->{TEMPLATE_ARRAYS}->{sellprice} },         $form->{"sellprice_$i"};
+      push @{ $form->{TEMPLATE_ARRAYS}->{ordnumber_oe} },      $form->{"ordnumber_$i"};
+      push @{ $form->{TEMPLATE_ARRAYS}->{transdate_oe} },      $form->{"transdate_$i"};
+      push @{ $form->{TEMPLATE_ARRAYS}->{invnumber} },         $form->{"invnumber"};
+      push @{ $form->{TEMPLATE_ARRAYS}->{invdate} },           $form->{"invdate"};
+      push @{ $form->{TEMPLATE_ARRAYS}->{price_factor} },      $price_factor->{formatted_factor};
+      push @{ $form->{TEMPLATE_ARRAYS}->{price_factor_name} }, $price_factor->{description};
+      push @{ $form->{TEMPLATE_ARRAYS}->{partsgroup} },        $form->{"partsgroup_$i"};
+      push @{ $form->{TEMPLATE_ARRAYS}->{reqdate} },           $form->{"reqdate_$i"};
 
       if ($form->{lizenzen}) {
         if ($form->{"licensenumber_$i"}) {
           $query = qq|SELECT licensenumber, validuntil FROM license WHERE id = ?|;
           my ($licensenumber, $validuntil) = selectrow_query($form, $dbh, $query, conv_i($form->{"licensenumber_$i"}));
-          push(@{ $form->{licensenumber} }, $licensenumber);
-          push(@{ $form->{validuntil} }, $locale->date($myconfig, $validuntil, 0));
+          push(@{ $form->{TEMPLATE_ARRAYS}->{licensenumber} }, $licensenumber);
+          push(@{ $form->{TEMPLATE_ARRAYS}->{validuntil} }, $locale->date($myconfig, $validuntil, 0));
 
         } else {
-          push(@{ $form->{licensenumber} }, "");
-          push(@{ $form->{validuntil} },    "");
+          push(@{ $form->{TEMPLATE_ARRAYS}->{licensenumber} }, "");
+          push(@{ $form->{TEMPLATE_ARRAYS}->{validuntil} },    "");
         }
       }
 
       # listprice
-      push(@{ $form->{listprice} }, $form->{"listprice_$i"});
+      push(@{ $form->{TEMPLATE_ARRAYS}->{listprice} }, $form->{"listprice_$i"});
 
       my $sellprice     = $form->parse_amount($myconfig, $form->{"sellprice_$i"});
       my ($dec)         = ($sellprice =~ /\.(\d+)/);
@@ -226,12 +230,12 @@ sub invoice_details {
       my $nodiscount_linetotal = $form->round_amount($form->{"qty_$i"} * $sellprice / $price_factor->{factor}, 2);
       $form->{"netprice_$i"}   = $form->round_amount($form->{"qty_$i"} ? ($linetotal / $form->{"qty_$i"}) : 0, 2);
 
-      push @{ $form->{netprice} }, ($form->{"netprice_$i"} != 0) ? $form->format_amount($myconfig, $form->{"netprice_$i"}, $decimalplaces) : '';
+      push @{ $form->{TEMPLATE_ARRAYS}->{netprice} }, ($form->{"netprice_$i"} != 0) ? $form->format_amount($myconfig, $form->{"netprice_$i"}, $decimalplaces) : '';
 
       $linetotal = ($linetotal != 0) ? $linetotal : '';
 
-      push @{ $form->{discount} },   ($discount  != 0) ? $form->format_amount($myconfig, $discount * -1, 2) : '';
-      push @{ $form->{p_discount} }, $form->{"discount_$i"};
+      push @{ $form->{TEMPLATE_ARRAYS}->{discount} },   ($discount  != 0) ? $form->format_amount($myconfig, $discount * -1, 2) : '';
+      push @{ $form->{TEMPLATE_ARRAYS}->{p_discount} }, $form->{"discount_$i"};
 
       $form->{total}            += $linetotal;
       $form->{nodiscount_total} += $nodiscount_linetotal;
@@ -243,26 +247,26 @@ sub invoice_details {
       }
 
       if ($form->{"subtotal_$i"} && $subtotal_header && ($subtotal_header != $i)) {
-        push @{ $form->{discount_sub} },   $form->format_amount($myconfig, $discount_subtotal,   2);
-        push @{ $form->{nodiscount_sub} }, $form->format_amount($myconfig, $nodiscount_subtotal, 2);
+        push @{ $form->{TEMPLATE_ARRAYS}->{discount_sub} },   $form->format_amount($myconfig, $discount_subtotal,   2);
+        push @{ $form->{TEMPLATE_ARRAYS}->{nodiscount_sub} }, $form->format_amount($myconfig, $nodiscount_subtotal, 2);
 
         $discount_subtotal   = 0;
         $nodiscount_subtotal = 0;
         $subtotal_header     = 0;
 
       } else {
-        push @{ $form->{discount_sub} },   "";
-        push @{ $form->{nodiscount_sub} }, "";
+        push @{ $form->{TEMPLATE_ARRAYS}->{discount_sub} },   "";
+        push @{ $form->{TEMPLATE_ARRAYS}->{nodiscount_sub} }, "";
       }
 
       if (!$form->{"discount_$i"}) {
         $nodiscount += $linetotal;
       }
 
-      push @{ $form->{linetotal} }, $form->format_amount($myconfig, $linetotal, 2);
-      push @{ $form->{nodiscount_linetotal} }, $form->format_amount($myconfig, $nodiscount_linetotal, 2);
+      push @{ $form->{TEMPLATE_ARRAYS}->{linetotal} }, $form->format_amount($myconfig, $linetotal, 2);
+      push @{ $form->{TEMPLATE_ARRAYS}->{nodiscount_linetotal} }, $form->format_amount($myconfig, $nodiscount_linetotal, 2);
 
-      push(@{ $form->{projectnumber} }, $projectnumbers{$form->{"project_id_$i"}});
+      push(@{ $form->{TEMPLATE_ARRAYS}->{projectnumber} }, $projectnumbers{$form->{"project_id_$i"}});
 
       @taxaccounts = split(/ /, $form->{"taxaccounts_$i"});
       $taxrate     = 0;
@@ -304,7 +308,7 @@ sub invoice_details {
         }
       }
       my $tax_rate = $taxrate * 100;
-      push(@{ $form->{tax_rate} }, qq|$tax_rate|);
+      push(@{ $form->{TEMPLATE_ARRAYS}->{tax_rate} }, qq|$tax_rate|);
       if ($form->{"assembly_$i"}) {
         $sameitem = "";
 
@@ -327,18 +331,18 @@ sub invoice_details {
 
         while (my $ref = $sth->fetchrow_hashref('NAME_lc')) {
           if ($form->{groupitems} && $ref->{partsgroup} ne $sameitem) {
-            map({ push(@{ $form->{$_} }, "") } grep({ $_ ne "description" } @arrays));
+            map({ push(@{ $form->{TEMPLATE_ARRAYS}->{$_} }, "") } grep({ $_ ne "description" } @arrays));
             $sameitem = ($ref->{partsgroup}) ? $ref->{partsgroup} : "--";
-            push(@{ $form->{description} }, $sameitem);
+            push(@{ $form->{TEMPLATE_ARRAYS}->{description} }, $sameitem);
           }
 
           map { $form->{"a_$_"} = $ref->{$_} } qw(partnumber description);
 
-          push(@{ $form->{description} },
+          push(@{ $form->{TEMPLATE_ARRAYS}->{description} },
                $form->format_amount($myconfig, $ref->{qty} * $form->{"qty_$i"}
                  )
                  . qq| -- $form->{"a_partnumber"}, $form->{"a_description"}|);
-          map({ push(@{ $form->{$_} }, "") } grep({ $_ ne "description" } @arrays));
+          map({ push(@{ $form->{TEMPLATE_ARRAYS}->{$_} }, "") } grep({ $_ ne "description" } @arrays));
 
         }
         $sth->finish;
@@ -347,26 +351,24 @@ sub invoice_details {
   }
 
   foreach my $item (sort keys %taxaccounts) {
-    push(@{ $form->{taxbase} },
-          $form->format_amount($myconfig, $taxbase{$item}, 2));
-
     $tax += $taxamount = $form->round_amount($taxaccounts{$item}, 2);
 
-    push(@{ $form->{tax} }, $form->format_amount($myconfig, $taxamount, 2));
-    push(@{ $form->{taxdescription} }, $form->{"${item}_description"}  . q{ } . 100 * $form->{"${item}_rate"} . q{%});
-    push(@{ $form->{taxrate} },
-          $form->format_amount($myconfig, $form->{"${item}_rate"} * 100));
-    push(@{ $form->{taxnumber} }, $form->{"${item}_taxnumber"});
+    push(@{ $form->{TEMPLATE_ARRAYS}->{taxbase} },        $form->format_amount($myconfig, $taxbase{$item}, 2));
+    push(@{ $form->{TEMPLATE_ARRAYS}->{tax} },            $form->format_amount($myconfig, $taxamount,      2));
+    push(@{ $form->{TEMPLATE_ARRAYS}->{taxrate} },        $form->format_amount($myconfig, $form->{"${item}_rate"} * 100));
+    push(@{ $form->{TEMPLATE_ARRAYS}->{taxdescription} }, $form->{"${item}_description"} . q{ } . 100 * $form->{"${item}_rate"} . q{%});
+    push(@{ $form->{TEMPLATE_ARRAYS}->{taxnumber} },      $form->{"${item}_taxnumber"});
   }
 
   for my $i (1 .. $form->{paidaccounts}) {
     if ($form->{"paid_$i"}) {
-      push(@{ $form->{payment} }, $form->{"paid_$i"});
       my ($accno, $description) = split(/--/, $form->{"AR_paid_$i"});
-      push(@{ $form->{paymentaccount} }, $description);
-      push(@{ $form->{paymentdate} },    $form->{"datepaid_$i"});
-      push(@{ $form->{paymentsource} },  $form->{"source_$i"});
-      push(@{ $form->{paymentmemo} },    $form->{"memo_$i"});
+
+      push(@{ $form->{TEMPLATE_ARRAYS}->{payment} },        $form->{"paid_$i"});
+      push(@{ $form->{TEMPLATE_ARRAYS}->{paymentaccount} }, $description);
+      push(@{ $form->{TEMPLATE_ARRAYS}->{paymentdate} },    $form->{"datepaid_$i"});
+      push(@{ $form->{TEMPLATE_ARRAYS}->{paymentsource} },  $form->{"source_$i"});
+      push(@{ $form->{TEMPLATE_ARRAYS}->{paymentmemo} },    $form->{"memo_$i"});
 
       $form->{paid} += $form->parse_amount($myconfig, $form->{"paid_$i"});
     }
@@ -551,6 +553,7 @@ sub post_invoice {
   my %price_factors = map { $_->{id} => $_->{factor} } @{ $form->{ALL_PRICE_FACTORS} };
   my $price_factor;
 
+  $form->{amount}      = {};
   $form->{amount_cogs} = {};
 
   foreach my $i (1 .. $form->{rowcount}) {
@@ -1061,34 +1064,34 @@ sub _delete_payments {
 
   my ($self, $form, $dbh) = @_;
 
-  my @delete_oids;
+  my @delete_acc_trans_ids;
 
   # Delete old payment entries from acc_trans.
   my $query =
-    qq|SELECT oid
+    qq|SELECT acc_trans_id
        FROM acc_trans
        WHERE (trans_id = ?) AND fx_transaction
 
        UNION
 
-       SELECT at.oid
+       SELECT at.acc_trans_id
        FROM acc_trans at
        LEFT JOIN chart c ON (at.chart_id = c.id)
        WHERE (trans_id = ?) AND (c.link LIKE '%AR_paid%')|;
-  push @delete_oids, selectall_array_query($form, $dbh, $query, conv_i($form->{id}), conv_i($form->{id}));
+  push @delete_acc_trans_ids, selectall_array_query($form, $dbh, $query, conv_i($form->{id}), conv_i($form->{id}));
 
   $query =
-    qq|SELECT at.oid
+    qq|SELECT at.acc_trans_id
        FROM acc_trans at
        LEFT JOIN chart c ON (at.chart_id = c.id)
        WHERE (trans_id = ?)
          AND ((c.link = 'AR') OR (c.link LIKE '%:AR') OR (c.link LIKE 'AR:%'))
-       ORDER BY at.oid
+       ORDER BY at.acc_trans_id
        OFFSET 1|;
-  push @delete_oids, selectall_array_query($form, $dbh, $query, conv_i($form->{id}));
+  push @delete_acc_trans_ids, selectall_array_query($form, $dbh, $query, conv_i($form->{id}));
 
-  if (@delete_oids) {
-    $query = qq|DELETE FROM acc_trans WHERE oid IN (| . join(", ", @delete_oids) . qq|)|;
+  if (@delete_acc_trans_ids) {
+    $query = qq|DELETE FROM acc_trans WHERE acc_trans_id IN (| . join(", ", @delete_acc_trans_ids) . qq|)|;
     do_query($form, $dbh, $query);
   }
 
@@ -1145,7 +1148,7 @@ sub post_payment {
        LEFT JOIN chart c ON (at.chart_id = c.id)
        WHERE (trans_id = ?)
          AND ((c.link = 'AR') OR (c.link LIKE '%:AR') OR (c.link LIKE 'AR:%'))
-       ORDER BY at.oid
+       ORDER BY at.acc_trans_id
        LIMIT 1|;
 
   ($form->{AR}) = selectfirst_array_query($form, $dbh, $query, conv_i($form->{id}));
@@ -2022,7 +2025,8 @@ sub get_pricegroups_for_parts {
 
           } else {
 
-            $form->{"sellprice_$i"} = $pkr->{price};
+# this sub should not set anything and only return. --sschoeling, 20090506
+#            $form->{"sellprice_$i"} = $pkr->{price};
           }
 
         } elsif ($pkr->{price} == $pkr->{default_sellprice}) {