X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/18a627a60525c399009c39b4e6ce7cf5ade46a87..93e82bab24ec05ffe820ad264328e55e7b62ba6f:/SL/Controller/DeliveryOrder.pm diff --git a/SL/Controller/DeliveryOrder.pm b/SL/Controller/DeliveryOrder.pm index 42ee5d5ad..33b35bbab 100644 --- a/SL/Controller/DeliveryOrder.pm +++ b/SL/Controller/DeliveryOrder.pm @@ -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) = @_;