X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FHelper%2FShippedQty.pm;h=3ad46197e112d1f792d7324ff2ca9175f58d9b5a;hb=4a852cb1ba0225e6e086786d3950fc7a3c068f38;hp=e109fa7ec0c21b5263abf56631d3d064f5632a58;hpb=42442d1f6692b00f2cefe3b302d9aca5724b4c82;p=kivitendo-erp.git diff --git a/SL/Helper/ShippedQty.pm b/SL/Helper/ShippedQty.pm index e109fa7ec..3ad46197e 100644 --- a/SL/Helper/ShippedQty.pm +++ b/SL/Helper/ShippedQty.pm @@ -14,7 +14,8 @@ use SL::Locale::String qw(t8); use Rose::Object::MakeMethods::Generic ( 'scalar' => [ qw(objects objects_or_ids shipped_qty keep_matches) ], - 'scalar --get_set_init' => [ qw(oe_ids dbh require_stock_out fill_up item_identity_fields oi2oe oi_qty delivered matches) ], + 'scalar --get_set_init' => [ qw(oe_ids dbh require_stock_out fill_up item_identity_fields oi2oe oi_qty delivered matches + services_deliverable) ], ); my $no_stock_item_links_query = <<''; @@ -26,6 +27,7 @@ my $no_stock_item_links_query = <<''; ORDER BY oi.trans_id, oi.position # oi not item linked. takes about 250ms for 100k hits +# obsolete since 3.5.6 my $fill_up_oi_query = <<''; SELECT oi.id, oi.trans_id, oi.position, oi.parts_id, oi.description, oi.reqdate, oi.serialnumber, oi.qty, oi.unit FROM orderitems oi @@ -33,6 +35,7 @@ my $fill_up_oi_query = <<''; ORDER BY oi.trans_id, oi.position # doi linked by record, but not by items; 250ms for 100k hits +# obsolete since 3.5.6 my $no_stock_fill_up_doi_query = <<''; SELECT doi.id, doi.delivery_order_id, doi.position, doi.parts_id, doi.description, doi.reqdate, doi.serialnumber, doi.qty, doi.unit FROM delivery_order_items doi @@ -217,12 +220,13 @@ sub write_to { $obj->{shipped_qty} = $shipped_qty->{$obj->id} //= 0; $obj->{delivered} = $shipped_qty->{$obj->id} == $obj->qty; } elsif ('SL::DB::Order' eq ref $obj) { - if (defined $obj->{orderitems}) { - $self->write_to($obj->{orderitems}); - $obj->{delivered} = all { $_->{delivered} } @{ $obj->{orderitems} }; + # load all orderitems unless not already loaded + $obj->orderitems unless (defined $obj->{orderitems}); + $self->write_to($obj->{orderitems}); + if ($self->services_deliverable) { + $obj->{delivered} = all { $_->{delivered} } grep { !$_->{optional} } @{ $obj->{orderitems} }; } else { - # don't force a load on items. just compute by oe_id directly - $obj->{delivered} = $self->delivered->{$obj->id}; + $obj->{delivered} = all { $_->{delivered} } grep { !$_->{optional} && !$_->part->is_service } @{ $obj->{orderitems} }; } } else { die "unknown reference '@{[ ref $obj ]}' for @{[ __PACKAGE__ ]}::write_to"; @@ -300,6 +304,17 @@ sub init_require_stock_out { $::instance_conf->get_shipped_qty_require_stock_ sub init_item_identity_fields { [ grep $item_identity_fields{$_}, @{ $::instance_conf->get_shipped_qty_item_identity_fields } ] } sub init_fill_up { $::instance_conf->get_shipped_qty_fill_up } +sub init_services_deliverable { + my ($self) = @_; + if ($::form->{type} =~ m/^sales_/) { + $::instance_conf->get_sales_delivery_order_check_service; + } elsif ($::form->{type} =~ m/^purchase_/) { + $::instance_conf->get_purchase_delivery_order_check_service; + } else { + croak "wrong call, no customer or vendor object referenced"; + } +} + 1; __END__ @@ -417,7 +432,9 @@ include a bulk mode to speed up multiple objects. =item C -Creates a new helper object. PARAMS may include: +Creates a new helper object, $::form->{type} is mandatory. + +PARAMS may include: =over 4 @@ -457,6 +474,7 @@ than this modules provides. See C for the returned format. + =back =item C