Weitere Positionen verknüpft II
[kivitendo-erp.git] / SL / OE.pm
index 2985e89..3dd91bb 100644 (file)
--- a/SL/OE.pm
+++ b/SL/OE.pm
@@ -512,13 +512,30 @@ sub save {
       my $position = $i;
 
       # save detail record in orderitems table
+      my $cvars;
       if (! $form->{"orderitems_id_$i"}) {
         $query = qq|SELECT nextval('orderitemsid')|;
         ($form->{"orderitems_id_$i"}) = selectrow_query($form, $dbh, $query);
 
         $query = qq|INSERT INTO orderitems (id, position) VALUES (?, ?)|;
         do_query($form, $dbh, $query, $form->{"orderitems_id_$i"}, conv_i($position));
+
+        # get values for CVars from master data for new items
+        $cvars = CVar->get_custom_variables(dbh      => $dbh,
+                                            module   => 'IC',
+                                            trans_id => $form->{"id_$i"},
+                                           );
+      } else {
+        # get values for CVars from custom_variables for existing items
+        $cvars = CVar->get_custom_variables(dbh        => $dbh,
+                                            module     => 'IC',
+                                            sub_module => 'orderitems',
+                                            trans_id   => $form->{"orderitems_id_$i"},
+                                           );
       }
+      # map only non-editable CVars to form (editable ones are already there)
+      map { $form->{"ic_cvar_$_->{name}_$i"} = $_->{value} unless $_->{flag_editable} } @{ $cvars };
+
       my $orderitems_id = $form->{"orderitems_id_$i"};
       push @processed_orderitems, $orderitems_id;
 
@@ -561,6 +578,21 @@ SQL
                                   name_prefix  => 'ic_',
                                   name_postfix => "_$i",
                                   dbh          => $dbh);
+      # link previous items with orderitems
+      foreach (qw(quotation_orderitems orderitems invoice)) {
+        if ($form->{"converted_from_${_}_id_$i"}) {
+          my $table = $_;
+          $table    = 'orderitems' if $table eq 'quotation_orderitems';
+          RecordLinks->create_links('dbh'        => $dbh,
+                                    'mode'       => 'ids',
+                                    'from_table' => $table,
+                                    'from_ids'   => $form->{"converted_from_${_}_id_$i"},
+                                    'to_table'   => 'orderitems',
+                                    'to_id'      => $orderitems_id,
+          );
+          delete $form->{"converted_from_${_}_id_$i"};
+        }
+      }
     }
   }
   # search for orphaned ids
@@ -1377,6 +1409,24 @@ sub order_details {
         $sth->finish;
       }
 
+      my $cvars;
+      if (! $form->{"orderitems_id_$i"}) {
+        # get values for CVars from master data for new items
+        $cvars = CVar->get_custom_variables(dbh      => $dbh,
+                                            module   => 'IC',
+                                            trans_id => $form->{"id_$i"},
+                                           );
+      } else {
+        # get values for CVars from custom_variables for existing items
+        $cvars = CVar->get_custom_variables(dbh        => $dbh,
+                                            module     => 'IC',
+                                            sub_module => 'orderitems',
+                                            trans_id   => $form->{"orderitems_id_$i"},
+                                           );
+      }
+      # map only non-editable CVars to form (editable ones are already there)
+      map { $form->{"ic_cvar_$_->{name}_$i"} = $_->{value} unless $_->{flag_editable} } @{ $cvars };
+
       push @{ $form->{TEMPLATE_ARRAYS}->{"ic_cvar_$_->{name}"} },
         CVar->format_to_template(CVar->parse($form->{"ic_cvar_$_->{name}_$i"}, $_), $_)
           for @{ $ic_cvar_configs };