X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/9ef0dcd3d48a961e72e96f98956ac6938b7bd323..93e82bab24ec05ffe820ad264328e55e7b62ba6f:/SL/Controller/DeliveryOrder.pm diff --git a/SL/Controller/DeliveryOrder.pm b/SL/Controller/DeliveryOrder.pm index 80a215566..33b35bbab 100644 --- a/SL/Controller/DeliveryOrder.pm +++ b/SL/Controller/DeliveryOrder.pm @@ -53,7 +53,8 @@ use Rose::Object::MakeMethods::Generic # safety -__PACKAGE__->run_before('check_auth'); +__PACKAGE__->run_before('check_auth', + except => [ qw(pack_stock_information) ]); __PACKAGE__->run_before('get_unalterable_data', only => [ qw(save save_as_new save_and_delivery_order save_and_invoice save_and_ap_transaction @@ -889,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; @@ -903,11 +906,25 @@ 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, + part => $part, + do_qty => $qty, + do_unit => $unit, + delivered => $self->order->delivered, + row => $row, + item_id => $item_id, ); +} + +# we're using the old YAML based stock packing, but don't want to do this in +# the frontend so we're doing a tiny roundtrip to the backend, back the info in +# perl, serve it back to the frontend and store it in the DOM there +sub action_pack_stock_information { + my ($self) = @_; + + my $stock_info = $::form->{stock_info}; + my $yaml = SL::YAML::Dump($stock_info); + $self->render(\$yaml, { layout => 0, process => 0 }); } sub merge_stock_data { @@ -1255,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; } @@ -1304,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; @@ -1326,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) { @@ -1411,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) = @_;