Nicht editierbare CVars nicht rendern, aber richtig speichern und drucken.
authorBernd Bleßmann <bernd@kivitendo-premium.de>
Tue, 20 Jan 2015 23:01:36 +0000 (00:01 +0100)
committerBernd Bleßmann <bernd@kivitendo-premium.de>
Tue, 20 Jan 2015 23:44:21 +0000 (00:44 +0100)
Dazu werden die Werte dieser Variablen aus der DB gelesen, nämlich:
- aus custom_variables zu den Stammdaten, wenn die Artikelzeile neu
    hinzugekommen ist
- aus custom_variables zur Artikelzeile, wenn die Zeile schon im Beleg
    gespeichert war

Hier für Angebote/Aufträge und Lieferscheine.

Todo:
- Für Rechnungen muss das noch gemacht werden (wenn dort die item-ids persistent
sind).

- Gruppieren nach Warengruppen im Ausdruck muss getestet werden, aber das geht im
Moment ohnehin nicht.

Siehe auch Ticket 1836 (trac.kivitendo.de) bzw. 4 und 25 (redmine.kivitendo-premium.de)

SL/DO.pm
SL/OE.pm
templates/webpages/amcvar/render_inputs_block.html

index de9a728..584ad59 100644 (file)
--- a/SL/DO.pm
+++ b/SL/DO.pm
@@ -298,6 +298,7 @@ SQL
 
     my $position = $i;
 
+    my $cvars;
     if (!$form->{"delivery_order_items_id_$i"}) {
       # there is no persistent id, therefore create one with all necessary constraints
       my $q_item_id = qq|SELECT nextval('delivery_order_items_id')|;
@@ -308,7 +309,23 @@ SQL
       do_query($form, $dbh, $query, conv_i($form->{"delivery_order_items_id_$i"}),
                 conv_i($form->{"id"}), conv_i($position), conv_i($form->{"id_$i"}));
       $h_item_id->finish();
+
+      # 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 => 'delivery_order_items',
+                                          trans_id   => $form->{"delivery_order_items_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 };
+
     $form->{"qty_$i"} = $form->parse_amount($myconfig, $form->{"qty_$i"});
 
     my $item_unit = $part_unit_map{$form->{"id_$i"}};
@@ -983,6 +1000,24 @@ sub order_details {
       }
     }
 
+    my $cvars;
+    if (! $form->{"delivery_order_items_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 => 'delivery_order_items',
+                                          trans_id   => $form->{"delivery_order_items_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 };
index 2985e89..a60b86c 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;
 
@@ -1377,6 +1394,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 };
index 3141a5a..5d668e1 100644 (file)
       SET render_cvar_tag_options.no_id = 1;
     END;
 %]
-[%- IF (cvar.hide_non_editable && !cvar.var.flag_editable) || cvar.partsgroup_filtered %]
-[%- L.hidden_tag(cvar_tag_name, cvar.var.value, render_cvar_tag_options) %]
-[%- ELSIF !cvar.valid %]
+
+[%- IF (!cvar.hide_non_editable || cvar.var.flag_editable) && !cvar.partsgroup_filtered %]
+
+[%- IF !cvar.valid %]
   [%- IF show_disabled_message %]
 <i>[% 'Element disabled' | $T8 %]</i>
   [%- END %]
@@ -71,4 +72,7 @@
 [% render_cvar_tag_options.maxlength=cvar.var.maxlength IF cvar.var.maxlength;
    L.input_tag(cvar_tag_name, cvar.value, render_cvar_tag_options) %]
 [%- END %]
+
+[%- END %]
+
 [%- END %]