X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=t%2Fhelper%2Fshipped_qty.t;h=dc2f9dd3b4e1ef19892f61738a5f5e81de569a4e;hb=ec9240b226871df4c5bb9c5068d4b131e00ee420;hp=fcddffc3a8e74c4ce9d39b6b3ee0ec0a92722e33;hpb=e7d334c9d4e2bdfe6275b15596350e180c741f2c;p=kivitendo-erp.git diff --git a/t/helper/shipped_qty.t b/t/helper/shipped_qty.t index fcddffc3a..dc2f9dd3b 100644 --- a/t/helper/shipped_qty.t +++ b/t/helper/shipped_qty.t @@ -18,7 +18,7 @@ use SL::DB::DeliveryOrderItemsStock; 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; @@ -28,13 +28,13 @@ clear_up(); 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"); @@ -46,7 +46,7 @@ my %part_defaults = ( # 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' ); @@ -63,11 +63,11 @@ my %default_transfer_params = ( wh => $wh, bin => $bin1, unit => 'Stck'); 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), ] ); @@ -79,8 +79,8 @@ SL::Helper::ShippedQty ->calculate($purchase_order) ->write_to_objects; -is($purchase_order->orderitems->[0]->{shipped_qty}, 0, "first purchase orderitem has no shipped_qty"); -ok(!$purchase_order->orderitems->[0]->{delivered}, "first purchase orderitem is not delivered"); +is($purchase_order->items_sorted->[0]->{shipped_qty}, 0, "first purchase orderitem has no shipped_qty"); +ok(!$purchase_order->items_sorted->[0]->{delivered}, "first purchase orderitem is not delivered"); my $purchase_orderitem_part1 = SL::DB::Manager::OrderItem->find_by( parts_id => $part1->id, trans_id => $purchase_order->id); @@ -100,8 +100,8 @@ SL::Helper::ShippedQty ->calculate($purchase_order) ->write_to_objects; -is($purchase_order->orderitems->[0]->{shipped_qty}, 11, "require_stock_out => 0: first purchase orderitem has shipped_qty"); -ok($purchase_order->orderitems->[0]->{delivered}, "require_stock_out => 0: first purchase orderitem is delivered"); +is($purchase_order->items_sorted->[0]->{shipped_qty}, 11, "require_stock_out => 0: first purchase orderitem has shipped_qty"); +ok($purchase_order->items_sorted->[0]->{delivered}, "require_stock_out => 0: first purchase orderitem is delivered"); Rose::DB::Object::Helpers::forget_related($purchase_order, 'orderitems'); $purchase_order->orderitems; @@ -111,11 +111,11 @@ SL::Helper::ShippedQty ->calculate($purchase_order) ->write_to_objects; -is($purchase_order->orderitems->[0]->{shipped_qty}, 0, "require_stock_out => 1: first purchase orderitem has no shipped_qty"); -ok(!$purchase_order->orderitems->[0]->{delivered}, "require_stock_out => 1: first purchase orderitem is not delivered"); +is($purchase_order->items_sorted->[0]->{shipped_qty}, 0, "require_stock_out => 1: first purchase orderitem has no shipped_qty"); +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; @@ -125,8 +125,8 @@ SL::Helper::ShippedQty ->calculate($purchase_order) ->write_to_objects; -is($purchase_order->orderitems->[0]->{shipped_qty}, 11, "require_stock_out => 1: first purchase orderitem has shipped_qty"); -ok($purchase_order->orderitems->[0]->{delivered}, "require_stock_out => 1: first purchase orderitem is delivered"); +is($purchase_order->items_sorted->[0]->{shipped_qty}, 11, "require_stock_out => 1: first purchase orderitem has shipped_qty"); +ok($purchase_order->items_sorted->[0]->{delivered}, "require_stock_out => 1: first purchase orderitem is delivered"); my $purchase_orderitem_part2 = SL::DB::Manager::OrderItem->find_by(parts_id => $part1->id, trans_id => $purchase_order->id); @@ -135,15 +135,15 @@ is($purchase_orderitem_part2->shipped_qty(require_stock_out => 1), 11, "OrderIte 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 @@ -151,8 +151,8 @@ SL::Helper::ShippedQty ->calculate($sales_order) ->write_to_objects; -is($sales_order->orderitems->[0]->{shipped_qty}, 0, "first sales orderitem has no shipped_qty"); -ok(!$sales_order->orderitems->[0]->{delivered}, "first sales orderitem is not delivered"); +is($sales_order->items_sorted->[0]->{shipped_qty}, 0, "first sales orderitem has no shipped_qty"); +ok(!$sales_order->items_sorted->[0]->{delivered}, "first sales orderitem is not delivered"); my $orderitem_part1 = SL::DB::Manager::OrderItem->find_by(parts_id => $part1->id, trans_id => $sales_order->id); my $orderitem_part2 = SL::DB::Manager::OrderItem->find_by(parts_id => $part2->id, trans_id => $sales_order->id); @@ -167,8 +167,8 @@ SL::Helper::ShippedQty ->calculate($sales_order) ->write_to_objects; -is($sales_order->orderitems->[0]->{shipped_qty}, 5, "require_stock_out => 0: first sales orderitem has shipped_qty"); -ok($sales_order->orderitems->[0]->{delivered}, "require_stock_out => 0: first sales orderitem is delivered"); +is($sales_order->items_sorted->[0]->{shipped_qty}, 5, "require_stock_out => 0: first sales orderitem has shipped_qty"); +ok($sales_order->items_sorted->[0]->{delivered}, "require_stock_out => 0: first sales orderitem is delivered"); Rose::DB::Object::Helpers::forget_related($sales_order, 'orderitems'); $sales_order->orderitems; @@ -178,11 +178,11 @@ SL::Helper::ShippedQty ->calculate($sales_order) ->write_to_objects; -is($sales_order->orderitems->[0]->{shipped_qty}, 0, "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}, 0, "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"); # 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; @@ -192,8 +192,8 @@ SL::Helper::ShippedQty ->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); @@ -206,6 +206,57 @@ is ($number_of_linked_items , 6, "6 record_links for items, 3 from sales order, 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 {