use SL::DB::Bin;
use SL::WH;
use SL::AM;
-use SL::Dev::ALL;
+use SL::Dev::ALL qw(:ALL);
use SL::Helper::ShippedQty;
use DateTime;
my ($customer, $vendor, @parts, $unit);
-$customer = SL::Dev::CustomerVendor::create_customer(name => 'Testkunde' )->save;
-$vendor = SL::Dev::CustomerVendor::create_vendor( name => 'Testlieferant')->save;
+$customer = new_customer(name => 'Testkunde' )->save;
+$vendor = new_vendor( name => 'Testlieferant')->save;
my $default_sellprice = 10;
my $default_lastcost = 4;
-my ($wh) = SL::Dev::Inventory::create_warehouse_and_bins();
+my ($wh) = create_warehouse_and_bins();
my $bin1 = SL::DB::Manager::Bin->find_by(description => "Bin 1");
my $bin2 = SL::DB::Manager::Bin->find_by(description => "Bin 2");
# create 3 parts to be used in test
for my $i ( 1 .. 4 ) {
- SL::Dev::Part::create_part( %part_defaults, partnumber => $i, description => "part $i test" )->save;
+ new_part( %part_defaults, partnumber => $i, description => "part $i test" )->save;
};
my $part1 = SL::DB::Manager::Part->find_by( partnumber => '1' );
note("testing purchases, no fill_up");
-my $purchase_order = SL::Dev::Record::create_purchase_order(
+my $purchase_order = create_purchase_order(
save => 1,
- orderitems => [ SL::Dev::Record::create_order_item(part => $part1, qty => 11),
- SL::Dev::Record::create_order_item(part => $part2, qty => 12),
- SL::Dev::Record::create_order_item(part => $part3, qty => 13),
+ orderitems => [ create_order_item(part => $part1, qty => 11),
+ create_order_item(part => $part2, qty => 12),
+ create_order_item(part => $part3, qty => 13),
]
);
ok(!$purchase_order->items_sorted->[0]->{delivered}, "require_stock_out => 1: first purchase orderitem is not delivered");
# ship items from delivery order
-SL::Dev::Inventory::transfer_purchase_delivery_order($purchase_delivery_order);
+transfer_purchase_delivery_order($purchase_delivery_order);
Rose::DB::Object::Helpers::forget_related($purchase_order, 'orderitems');
$purchase_order->orderitems;
note('testing sales, no fill_up');
-my $sales_order = SL::Dev::Record::create_sales_order(
+my $sales_order = create_sales_order(
save => 1,
- orderitems => [ SL::Dev::Record::create_order_item(part => $part1, qty => 5),
- SL::Dev::Record::create_order_item(part => $part2, qty => 6),
- SL::Dev::Record::create_order_item(part => $part3, qty => 7),
+ orderitems => [ create_order_item(part => $part1, qty => 5),
+ create_order_item(part => $part2, qty => 6),
+ create_order_item(part => $part3, qty => 7),
]
);
-Rose::DB::Object::Helpers::forget_related($purchase_order, 'orderitems');
+Rose::DB::Object::Helpers::forget_related($sales_order, 'orderitems');
$sales_order->orderitems;
SL::Helper::ShippedQty
ok(!$sales_order->items_sorted->[0]->{delivered}, "require_stock_out => 1: first sales orderitem is not delivered");
# ship items from delivery order
-SL::Dev::Inventory::transfer_sales_delivery_order($sales_delivery_order);
+transfer_sales_delivery_order($sales_delivery_order);
Rose::DB::Object::Helpers::forget_related($sales_order, 'orderitems');
$sales_order->orderitems;
->calculate($sales_order)
->write_to_objects;
-is($sales_order->orderitems->[0]->{shipped_qty}, 5, "require_stock_out => 1: first sales orderitem has no shipped_qty");
-ok($sales_order->orderitems->[0]->{delivered}, "require_stock_out => 1: first sales orderitem is not delivered");
+is($sales_order->items_sorted->[0]->{shipped_qty}, 5, "require_stock_out => 1: first sales orderitem has no shipped_qty");
+ok($sales_order->items_sorted->[0]->{delivered}, "require_stock_out => 1: first sales orderitem is not delivered");
$orderitem_part1 = SL::DB::Manager::OrderItem->find_by(parts_id => $part1->id, trans_id => $sales_order->id);
clear_up();
+{
+# legacy unlinked scenario:
+#
+# order with two positions of the same part, qtys: 5, 3.
+# 3 linked delivery orders, with positions:
+# 1: 3 unlinked
+# 2: 1 linked to 1, 3 linked to 2
+# 3: 1 linked to 1
+#
+# should be resolved under fill_up as 5/3, but gets resolved as 4/4
+ my $part = new_part()->save;
+ my $order = create_sales_order(
+ orderitems => [
+ create_order_item(part => $part, qty => 5),
+ create_order_item(part => $part, qty => 3),
+ ],
+ )->save;
+ my $do1 = create_sales_delivery_order(
+ orderitems => [
+ create_delivery_order_item(part => $part, qty => 3),
+ ],
+ );
+ my $do2 = create_sales_delivery_order(
+ orderitems => [
+ create_delivery_order_item(part => $part, qty => 1),
+ create_delivery_order_item(part => $part, qty => 3),
+ ],
+ );
+ my $do3 = create_sales_delivery_order(
+ orderitems => [
+ create_delivery_order_item(part => $part, qty => 1),
+ ],
+ );
+ $order->link_to_record($do1);
+ $order->link_to_record($do2);
+ $order->items_sorted->[0]->link_to_record($do2->items_sorted->[0]);
+ $order->items_sorted->[1]->link_to_record($do2->items_sorted->[1]);
+ $order->link_to_record($do3);
+ $order->items_sorted->[0]->link_to_record($do3->items->[0]);
+
+ SL::Helper::ShippedQty
+ ->new(fill_up => 1, require_stock_out => 0)
+ ->calculate($order)
+ ->write_to_objects;
+
+ is $order->items_sorted->[0]->{shipped_qty}, 5, 'unlinked legacy position test 1';
+ is $order->items_sorted->[1]->{shipped_qty}, 3, 'unlinked legacy position test 2';
+}
+
+clear_up();
+
done_testing;
sub clear_up {