Auftrags-Controller: fake id für Items nach Workflow setzen.
authorBernd Bleßmann <bernd@kivitendo-premium.de>
Mon, 28 May 2018 09:29:46 +0000 (11:29 +0200)
committerBernd Bleßmann <bernd@kivitendo-premium.de>
Mon, 28 May 2018 09:36:27 +0000 (11:36 +0200)
Für items, die hinzugefügt werden, also noch nicht in der DB gespeichert sind,
muss eine fake id gesetzt werden, damit diese bei den actions, die einzelne
items betreffen, auch richtig gefunden/zugeordnet werden können.

Das behebt z.B. einen Fehler mit falschen Preisquellen nach dem Workflow
Angebot -> Auftrag, wo immer die Preisquellen der ersten Postion im Dialog
verwendet wurde.

SL/Controller/Order.pm
templates/webpages/order/tabs/basic_data.html

index 4229964..1309f14 100644 (file)
@@ -1372,6 +1372,11 @@ sub _workflow_sales_or_purchase_order {
   $self->order(SL::DB::Order->new_from($self->order, destination_type => $destination_type));
   $self->{converted_from_oe_id} = delete $::form->{id};
 
+  # set item ids to new fake id, to identify them as new items
+  foreach my $item (@{$self->order->items_sorted}) {
+    $item->{new_fake_id} = join('_', 'new', Time::HiRes::gettimeofday(), int rand 1000000000000);
+  }
+
   # change form type
   $::form->{type} = $destination_type;
   $self->init_type;
index c968a94..870e4aa 100644 (file)
             </thead>
 
             [%- FOREACH item = SELF.order.items_sorted %]
-              [%- PROCESS order/tabs/_row.html ITEM=item ID=item.id TYPE=SELF.type ALL_PRICE_FACTORS=SELF.all_price_factors %]
+              [%- PROCESS order/tabs/_row.html ITEM=item ID=(item.id||item.new_fake_id) TYPE=SELF.type ALL_PRICE_FACTORS=SELF.all_price_factors %]
             [%- END %]
 
           </table>