Merge branch 'master' of ssh://lx-office/~/lx-office-erp
[kivitendo-erp.git] / SL / DO.pm
index 22471e4..49dbb9f 100644 (file)
--- a/SL/DO.pm
+++ b/SL/DO.pm
@@ -38,8 +38,10 @@ use YAML;
 
 use SL::AM;
 use SL::Common;
+use SL::CVar;
 use SL::DBUtils;
 use SL::RecordLinks;
+use SL::IC;
 
 sub transactions {
   $main::lxdebug->enter_sub();
@@ -79,10 +81,10 @@ sub transactions {
   }
 
   if ($form->{project_id}) {
-    $query .=
+    push @where,
       qq|(dord.globalproject_id = ?) OR EXISTS
           (SELECT * FROM delivery_order_items doi
-           WHERE (doi.project_id = ?) AND (oi.delivery_order_id = dord.id))|;
+           WHERE (doi.project_id = ?) AND (doi.delivery_order_id = dord.id))|;
     push @values, conv_i($form->{project_id}), conv_i($form->{project_id});
   }
 
@@ -107,7 +109,8 @@ sub transactions {
     push @values, '%' . $form->{$item} . '%';
   }
 
-  if (!($form->{open} && $form->{closed})) {
+  if (($form->{open} || $form->{closed}) &&
+      ($form->{open} ne $form->{closed})) {
     push @where, ($form->{open} ? "NOT " : "") . "COALESCE(dord.closed, FALSE)";
   }
 
@@ -190,6 +193,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 +306,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();
@@ -545,6 +560,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';
@@ -642,7 +660,7 @@ sub retrieve {
          doi.reqdate, doi.project_id, doi.serialnumber, doi.lastcost,
          doi.ordnumber, doi.transdate, doi.cusordnumber, doi.longdescription,
          doi.price_factor_id, doi.price_factor, doi.marge_price_factor,
-         pr.projectnumber,
+         pr.projectnumber, dord.transdate AS dord_transdate,
          pg.partsgroup
        FROM delivery_order_items doi
        JOIN parts p ON (doi.parts_id = p.id)
@@ -654,6 +672,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';
 
@@ -748,12 +776,21 @@ sub order_details {
 
   my $num_si   = 0;
 
+  my $ic_cvar_configs = CVar->get_configs(module => 'IC');
+
+  $form->{TEMPLATE_ARRAYS} = { };
+  IC->prepare_parts_for_printing();
+
   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);
 
+  map { $form->{TEMPLATE_ARRAYS}->{$_} = [] } (@arrays, @tax_arrays);
+
+  push @arrays, map { "ic_cvar_$_->{name}" } @{ $ic_cvar_configs };
+
   my $sameitem = "";
   foreach $item (sort { $a->[1] cmp $b->[1] } @partsgroup) {
     $i = $item->[0];
@@ -832,6 +869,8 @@ sub order_details {
         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();