Versteckte Felder in Lieferscheinen besser beibehalten
authorSven Schöling <s.schoeling@linet-services.de>
Wed, 8 Jan 2014 10:37:54 +0000 (11:37 +0100)
committerSven Schöling <s.schoeling@linet-services.de>
Wed, 8 Jan 2014 10:37:54 +0000 (11:37 +0100)
behebt #2131.

Im Bug gemeldet wurden Preisgruppen und das taxincluded Flag, die bei
einem frisch erstellten Lieferschein entweder garnicht gesetzt wurden,
oder beim übertragen in Rechnungen verloren gingen.

Dabei sind eine ganze Reihe von Bugs eingeschlagen.

1. Hat Speichern bei lieferscheinen noch kein redirect auf edit gemacht,
sondern hat noch direkt display_form aufgerufen. Ich habe das wie in oe
geändert.

2. wurden Preisgruppen garnicht gesetzt
3. ...und gehen dann trotzdem kaputt, weil der Algorithmus sich die
Infos aus dem Dropdown holt, das bei Lieferscheinen nicht vorhanden ist.
4. ...aber selbst das reicht nicht aus, weil die hiddens Variablen
autovivifien, die hinterher benutzt werden, um rauszukriegen ob die
preisgruppen automatisch gesetzt werden müssen oder schonmal angefasst
wurden. Ich habe es so geändert, dass nicht definierte Variablen nicht
mehr in den hiddens landen.

Die gleichen Änderungen beheben das auch für taxincluded, und (zu
hoffen) alle anderen Felder.

bin/mozilla/do.pl
bin/mozilla/io.pl

index a196eb5..b0b9f62 100644 (file)
@@ -38,6 +38,7 @@ use SL::DB::DeliveryOrder;
 use SL::DO;
 use SL::IR;
 use SL::IS;
+use SL::MoreCommon qw(ary_diff);
 use SL::ReportGenerator;
 use SL::WH;
 require "bin/mozilla/arap.pl";
@@ -415,6 +416,12 @@ sub update_delivery_order {
         $form->{"sellprice_$i"}          = $form->format_amount(\%myconfig, $form->{"sellprice_$i"} * (1 - $form->{tradediscount}));
         $form->{"lastcost_$i"}          = $form->format_amount(\%myconfig, $form->{"lastcost_$i"});
         $form->{"qty_$i"}                = $form->format_amount(\%myconfig, $form->{"qty_$i"});
+
+        # get pricegroups for parts
+        IS->get_pricegroups_for_parts(\%myconfig, \%$form);
+
+        # build up html code for prices_$i
+        &set_pricegroup($i);
       }
 
       display_form();
@@ -687,8 +694,8 @@ sub save {
 
   $form->{simple_save} = 1;
   if (!$params{no_redirect} && !$form->{print_and_save}) {
-    set_headings("edit");
-    update();
+    delete @{$form}{ary_diff([keys %{ $form }], [qw(login id script type cursor_fokus)])};
+    edit();
     ::end_of_request();
   }
   $main::lxdebug->leave_sub();
@@ -829,7 +836,7 @@ sub invoice {
     $form->{"sellprice_pg_$i"} = join '--', $form->{"sellprice_$i"}, $form->{"pricegroup_id_$i"};
   }
   IS->get_pricegroups_for_parts(\%myconfig, \%$form);
-  set_pricegroup($_) for 1 .. $form->{rowcount};
+  set_pricegroup($form->{rowcount});
 
   display_form();
 
index 0ba1991..480de97 100644 (file)
@@ -421,7 +421,9 @@ sub display_row {
 
     if ($is_delivery_order) {
       map { $form->{"${_}_${i}"} = $form->format_amount(\%myconfig, $form->{"${_}_${i}"}) } qw(sellprice discount lastcost);
-      push @hidden_vars, qw(sellprice discount not_discountable price_factor_id lastcost pricegroup_id);
+      $form->{"pricegroup_id_$i"} = $form->{"pricegroup_old_$i"} if $form->{"pricegroup_old_$i"};
+      $form->{"sellprice_pg_$i"}  = $form->{"hidden_prices_$i"}  if $form->{"hidden_prices_$i"};
+      push @hidden_vars, grep { defined $form->{"${_}_${i}"} } qw(sellprice discount not_discountable price_factor_id lastcost pricegroup_id sellprice_pg);
       push @hidden_vars, "stock_${stock_in_out}_sum_qty", "stock_${stock_in_out}";
     }
 
@@ -483,6 +485,10 @@ sub set_pricegroup {
       $form->{"sellprice_$j"}      = $item->{price}           if $item->{selected} &&  $item->{pricegroup_id};
       $form->{"price_new_$j"}      = $form->{"sellprice_$j"}  if $item->{selected} || !$item->{pricegroup_id};
     }
+
+    # save hidden pricegroups for delivery_orders
+    next unless my @selected_prices = grep { $_->{selected} } @{ $form->{PRICES}{$j} };
+    $form->{"hidden_prices_$j"} = $selected_prices[-1]{price} . "--" . $selected_prices[-1]{pricegroup_id};
   }
   $main::lxdebug->leave_sub();
 }