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 ) ],
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
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) = @_;
$self->calculate_item_links;
$self->calculate_fill_up if $self->fill_up;
+
+ $self;
}
sub calculate_item_links {
$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 }
$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;
$helper->calculate($order_object);
$helper->calculate(\@order_objects);
+ $helper->calculate($orderitem_object);
+ $helper->calculate(\@orderitem_objects);
$helper->calculate($oe_id);
$helper->calculate(\@oe_ids);