X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/bae8f672cb7a0c7062b0570d3c91e7f9ac756f1f..e5e8dfae3a1edcdcfe64338112923ec40fc0353c:/SL/Helper/ShippedQty.pm diff --git a/SL/Helper/ShippedQty.pm b/SL/Helper/ShippedQty.pm index 38a450eb2..80ee73d9c 100644 --- a/SL/Helper/ShippedQty.pm +++ b/SL/Helper/ShippedQty.pm @@ -7,8 +7,9 @@ use SL::AM; use Scalar::Util qw(blessed); use SL::DBUtils qw(selectall_hashref_query selectall_as_map); use List::Util qw(min); -use List::MoreUtils qw(any all); +use List::MoreUtils qw(any all uniq); use List::UtilsBy qw(partition_by); +use SL::Locale::String qw(t8); use Rose::Object::MakeMethods::Generic ( 'scalar' => [ qw(objects objects_or_ids shipped_qty ) ], @@ -60,7 +61,7 @@ my $stock_item_links_query = <<''; ORDER BY oi.trans_id, oi.position my $stock_fill_up_doi_query = <<''; - SELECT doi.id, doi.delivery_order_id, doi.position, doi.parts_id, doi.description, doi.reqdate, doi.serialnumber, i.qty, i.unit + SELECT doi.id, doi.delivery_order_id, doi.position, doi.parts_id, doi.description, doi.reqdate, doi.serialnumber, i.qty, p.unit FROM delivery_order_items doi INNER JOIN parts p ON p.id = doi.parts_id INNER JOIN delivery_order_items_stock dois ON dois.delivery_order_item_id = doi.id @@ -86,6 +87,14 @@ my $oe_do_record_links = <<''; AND from_table = 'oe' AND to_table = 'delivery_orders' +my @known_item_identity_fields = qw(parts_id description reqdate serialnumber); +my %item_identity_fields = ( + parts_id => t8('Part'), + description => t8('Description'), + reqdate => t8('Reqdate'), + serialnumber => t8('Serial Number'), +); + sub calculate { my ($self, $data) = @_; @@ -99,6 +108,8 @@ sub calculate { $self->calculate_item_links; $self->calculate_fill_up if $self->fill_up; + + $self; } sub calculate_item_links { @@ -244,13 +255,18 @@ sub normalize_input { $self->shipped_qty({}); } +sub available_item_identity_fields { + map { [ $_ => $item_identity_fields{$_} ] } @known_item_identity_fields; +} + sub init_oe_ids { my ($self) = @_; die 'oe_ids not initialized in id mode' if !$self->objects_or_ids; die 'objects not initialized before accessing ids' if $self->objects_or_ids && !defined $self->objects; + die 'objects need to be Order or OrderItem' if any { ref($_) !~ /^SL::DB::Order(?:Item)?$/ } @{ $self->objects }; - [ map { $_->id } @{ $self->objects } ] + [ uniq map { ref($_) =~ /Item/ ? $_->trans_id : $_->id } @{ $self->objects } ] } sub init_dbh { SL::DB->client->dbh } @@ -268,9 +284,9 @@ sub init_delivered { $d; } -sub init_require_stock_out { 0 } -sub init_item_identity_fields { [ qw(parts_id description reqdate serialnumber) ] } -sub init_fill_up { 1 } +sub init_require_stock_out { $::instance_conf->get_shipped_qty_require_stock_out } +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 } 1; @@ -295,6 +311,8 @@ SL::Helper::ShippedQty - Algorithmic module for calculating shipped qty $helper->calculate($order_object); $helper->calculate(\@order_objects); + $helper->calculate($orderitem_object); + $helper->calculate(\@orderitem_objects); $helper->calculate($oe_id); $helper->calculate(\@oe_ids);