]> wagnertech.de Git - mfinanz.git/blobdiff - SL/Helper/ShippedQty.pm
SL::Helper::ShippedQty: SQL Fehler im stock_fill_up query
[mfinanz.git] / SL / Helper / ShippedQty.pm
index 38a450eb25d170d8a389ca0a83543783f815dc42..80ee73d9cdc770d0582de6c332baa09120fcdb10 100644 (file)
@@ -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);