]> wagnertech.de Git - mfinanz.git/blobdiff - SL/Controller/DeliveryOrder.pm
CsvImport: Anpassungen für order_type in Lieferscheinen
[mfinanz.git] / SL / Controller / DeliveryOrder.pm
index 42ee5d5ad193060dcbcb2a1528bbc37e884d4439..33b35bbabb8ba7b48ece5f759dd7168d1cd54420 100644 (file)
@@ -890,10 +890,12 @@ sub action_return_from_create_part {
 sub action_stock_in_out_dialog {
   my ($self) = @_;
 
-  my $part = SL::DB::Part->load_cached($::form->{parts_id}) or die "need parts_id";
-  my $stock = $::form->{stock};
-  my $unit = $::form->{unit};
-  my $qty = _parse_number($::form->{qty_as_number});
+  my $part    = SL::DB::Part->load_cached($::form->{parts_id}) or die "need parts_id";
+  my $stock   = $::form->{stock};
+  my $unit    = $::form->{unit};
+  my $row     = $::form->{row};
+  my $item_id = $::form->{item_id};
+  my $qty     = _parse_number($::form->{qty_as_number});
 
   my $inout = $self->type_data->transfer;
 
@@ -904,10 +906,12 @@ sub action_stock_in_out_dialog {
 
   $self->render("delivery_order/stock_dialog", { layout => 0 },
     WHCONTENTS => $self->order->delivered ? $stock_info : \@contents,
-    part  => $part,
-    do_qty => $qty,
-    do_unit => $unit,
-    delivered => $self->order->delivered,
+    part       => $part,
+    do_qty     => $qty,
+    do_unit    => $unit,
+    delivered  => $self->order->delivered,
+    row        => $row,
+    item_id    => $item_id,
   );
 }
 
@@ -1268,6 +1272,8 @@ sub load_order {
   # You need a custom shipto object to call cvars_by_config to get the cvars.
   $self->order->custom_shipto(SL::DB::Shipto->new(module => 'OE', custom_variables => [])) if !$self->order->custom_shipto;
 
+  $self->prepare_stock_info($_) for $self->order->items;
+
   return $self->order;
 }
 
@@ -1317,6 +1323,9 @@ sub make_order {
     push @items, $item;
     $pos++;
   }
+
+  $self->prepare_stock_info($_) for $order->items, @items;
+
   $order->add_items(grep {!$_->id} @items);
 
   return $order;
@@ -1339,6 +1348,26 @@ sub make_item {
   # saved. Adding empty custom_variables to new orderitem here solves this problem.
   $item ||= SL::DB::DeliveryOrderItem->new(custom_variables => []);
 
+  # handle stock info
+  if (my $stock_info = delete $attr->{stock_info}) {
+    my %existing = map { $_->id => $_ } $item->delivery_order_stock_entries;
+    my @save;
+
+    for my $line (@{ DO->unpack_stock_information(packed => $stock_info) }) {
+      # lookup existing or make new
+      my $obj = delete $existing{$line->{delivery_order_items_stock_id}}
+             // SL::DB::DeliveryOrderItemsStock->new;
+
+      # assign attributes
+      $obj->$_($line->{$_}) for qw(bin_id warehouse_id chargenumber qty unit);
+      $obj->bestbefore_as_date($line->{bestfbefore})
+        if $line->{bestbefore} && $::instance_conf->get_show_bestbefore;
+      push @save, $obj;
+    }
+
+    $item->delivery_order_stock_entries(@save);
+  }
+
   $item->assign_attributes(%$attr);
 
   if ($is_new) {
@@ -1424,6 +1453,21 @@ sub new_item {
   return $item;
 }
 
+sub prepare_stock_info {
+  my ($self, $item) = @_;
+
+  $item->{stock_info} = SL::YAML::Dump([
+    map +{
+      delivery_order_items_stock_id => $_->id,
+      qty                           => $_->qty,
+      warehouse_id                  => $_->warehouse_id,
+      bin_id                        => $_->bin_id,
+      chargenumber                  => $_->chargenumber,
+      unit                          => $_->unit,
+    }, $item->delivery_order_stock_entries
+  ]);
+}
+
 sub setup_order_from_cv {
   my ($order) = @_;