Merge branch 'karushka'
[kivitendo-erp.git] / SL / DO.pm
index f6d2687..e555dc2 100644 (file)
--- a/SL/DO.pm
+++ b/SL/DO.pm
@@ -38,6 +38,7 @@ use YAML;
 
 use SL::AM;
 use SL::Common;
+use SL::CVar;
 use SL::DBUtils;
 use SL::RecordLinks;
 
@@ -190,6 +191,9 @@ sub save {
   my $all_units = AM->retrieve_units($myconfig, $form);
   $form->{all_units} = $all_units;
 
+  my $ic_cvar_configs = CVar->get_configs(module => 'IC',
+                                          dbh    => $dbh);
+
   $form->{donumber}    = $form->update_defaults($myconfig, $form->{type} eq 'sales_delivery_order' ? 'sdonumber' : 'pdonumber', $dbh) unless $form->{donumber};
   $form->{employee_id} = (split /--/, $form->{employee})[1] if !$form->{employee_id};
   $form->get_employee($dbh) unless ($form->{employee_id});
@@ -300,6 +304,15 @@ sub save {
                  conv_i($sinfo->{bin_id}), $sinfo->{chargenumber});
       do_statement($form, $h_item_stock, $q_item_stock, @values);
     }
+
+    CVar->save_custom_variables(module       => 'IC',
+                                sub_module   => 'delivery_order_items',
+                                trans_id     => $item_id,
+                                configs      => $ic_cvar_configs,
+                                variables    => $form,
+                                name_prefix  => 'ic_',
+                                name_postfix => "_$i",
+                                dbh          => $dbh);
   }
 
   $h_item_id->finish();
@@ -316,7 +329,7 @@ sub save {
          shippingpoint = ?, shipvia = ?, notes = ?, intnotes = ?, closed = ?,
          delivered = ?, department_id = ?, language_id = ?, shipto_id = ?,
          globalproject_id = ?, employee_id = ?, salesman_id = ?, cp_id = ?, transaction_description = ?,
-         is_sales = ?
+         is_sales = ?, taxzone_id = ?, taxincluded = ?, terms = ?, curr = ?
        WHERE id = ?|;
 
   @values = ($form->{donumber}, $form->{ordnumber},
@@ -330,6 +343,7 @@ sub save {
              conv_i($form->{salesman_id}), conv_i($form->{cp_id}),
              $form->{transaction_description},
              $form->{type} =~ /^sales/ ? 't' : 'f',
+             conv_i($form->{taxzone_id}), $form->{taxincluded} ? 't' : 'f', conv_i($form->{terms}), $form->{curr},
              conv_i($form->{id}));
   do_query($form, $dbh, $query, @values);
 
@@ -544,6 +558,9 @@ sub retrieve {
 
   my ($query, $query_add, @values, $sth, $ref);
 
+  my $ic_cvar_configs = CVar->get_configs(module => 'IC',
+                                          dbh    => $dbh);
+
   my $vc   = $params{vc} eq 'customer' ? 'customer' : 'vendor';
 
   my $mode = !$params{ids} ? 'default' : ref $params{ids} eq 'ARRAY' ? 'multi' : 'single';
@@ -575,7 +592,8 @@ sub retrieve {
          dord.closed, dord.reqdate, dord.department_id, dord.cusordnumber,
          d.description AS department, dord.language_id,
          dord.shipto_id,
-         dord.globalproject_id, dord.delivered, dord.transaction_description
+         dord.globalproject_id, dord.delivered, dord.transaction_description,
+         dord.taxzone_id, dord.taxincluded, dord.terms, dord.curr
        FROM delivery_orders dord
        JOIN ${vc} cv ON (dord.${vc}_id = cv.id)
        LEFT JOIN employee e ON (dord.employee_id = e.id)
@@ -593,6 +611,7 @@ sub retrieve {
     }
 
     map { $form->{$_} = $ref->{$_} } keys %$ref if ($ref);
+    $form->{donumber_array} .= $form->{donumber} . ' ';
   }
   $sth->finish();
 
@@ -651,6 +670,16 @@ sub retrieve {
 
   $form->{form_details} = selectall_hashref_query($form, $dbh, $query, @do_ids);
 
+  # Retrieve custom variables.
+  foreach my $doi (@{ $form->{form_details} }) {
+    my $cvars = CVar->get_custom_variables(dbh        => $dbh,
+                                           module     => 'IC',
+                                           sub_module => 'delivery_order_items',
+                                           trans_id   => $doi->{delivery_order_items_id},
+                                          );
+    map { $doi->{"ic_cvar_$_->{name}"} = $_->{value} } @{ $cvars };
+  }
+
   if ($mode eq 'single') {
     my $in_out = $form->{type} =~ /^sales/ ? 'out' : 'in';
 
@@ -745,12 +774,16 @@ sub order_details {
 
   my $num_si   = 0;
 
+  my $ic_cvar_configs = CVar->get_configs(module => 'IC');
+
   my @arrays =
     qw(runningnumber number description longdescription qty unit
        partnotes serialnumber reqdate projectnumber
        si_runningnumber si_number si_description
        si_warehouse si_bin si_chargenumber si_qty si_unit);
 
+  push @arrays, map { "ic_cvar_$_->{name}" } @{ $ic_cvar_configs };
+
   my $sameitem = "";
   foreach $item (sort { $a->[1] cmp $b->[1] } @partsgroup) {
     $i = $item->[0];
@@ -772,16 +805,16 @@ sub order_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->{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->{partnotes} },       $form->{"partnotes_$i"};
-    push @{ $form->{serialnumber} },    $form->{"serialnumber_$i"};
-    push @{ $form->{reqdate} },         $form->{"reqdate_$i"};
-    push @{ $form->{projectnumber} },   $projectnumbers{$form->{"project_id_$i"}};
+    push @{ $form->{TEMPLATE_ARRAYS}{runningnumber} },   $position;
+    push @{ $form->{TEMPLATE_ARRAYS}{number} },          $form->{"partnumber_$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}{partnotes} },       $form->{"partnotes_$i"};
+    push @{ $form->{TEMPLATE_ARRAYS}{serialnumber} },    $form->{"serialnumber_$i"};
+    push @{ $form->{TEMPLATE_ARRAYS}{reqdate} },         $form->{"reqdate_$i"};
+    push @{ $form->{TEMPLATE_ARRAYS}{projectnumber} },   $projectnumbers{$form->{"project_id_$i"}};
 
     if ($form->{"assembly_$i"}) {
       $sameitem = "";
@@ -819,16 +852,18 @@ sub order_details {
         do_statement($form, $h_bin_wh, $q_bin_wh, conv_i($si->{bin_id}), conv_i($si->{warehouse_id}));
         my $bin_wh = $h_bin_wh->fetchrow_hashref();
 
-        push @{ $form->{si_runningnumber}[$position-1] }, $num_si;
-        push @{ $form->{si_number}[$position-1] },        $form->{"partnumber_$i"};
-        push @{ $form->{si_description}[$position-1] },   $form->{"description_$i"};
-        push @{ $form->{si_warehouse}[$position-1] },     $bin_wh->{warehouse};
-        push @{ $form->{si_bin}[$position-1] },           $bin_wh->{bin};
-        push @{ $form->{si_chargenumber}[$position-1] },  $si->{chargenumber};
-        push @{ $form->{si_qty}[$position-1] },           $form->format_amount($myconfig, $si->{qty} * 1);
-        push @{ $form->{si_unit}[$position-1] },          $si->{unit};
+        push @{ $form->{TEMPLATE_ARRAYS}{si_runningnumber}[$position-1] }, $num_si;
+        push @{ $form->{TEMPLATE_ARRAYS}{si_number}[$position-1] },        $form->{"partnumber_$i"};
+        push @{ $form->{TEMPLATE_ARRAYS}{si_description}[$position-1] },   $form->{"description_$i"};
+        push @{ $form->{TEMPLATE_ARRAYS}{si_warehouse}[$position-1] },     $bin_wh->{warehouse};
+        push @{ $form->{TEMPLATE_ARRAYS}{si_bin}[$position-1] },           $bin_wh->{bin};
+        push @{ $form->{TEMPLATE_ARRAYS}{si_chargenumber}[$position-1] },  $si->{chargenumber};
+        push @{ $form->{TEMPLATE_ARRAYS}{si_qty}[$position-1] },           $form->format_amount($myconfig, $si->{qty} * 1);
+        push @{ $form->{TEMPLATE_ARRAYS}{si_unit}[$position-1] },          $si->{unit};
       }
     }
+
+    map { push @{ $form->{TEMPLATE_ARRAYS}->{"ic_cvar_$_->{name}"} }, $form->{"ic_cvar_$_->{name}_$i"} } @{ $ic_cvar_configs };
   }
 
   $h_pg->finish();