2 use Test::More tests => 16;
5 use Support::TestSetup;
10 use SL::DB::PurchaseBasketItem;
12 use SL::Controller::DispositionManager;
15 use SL::Dev::Part qw(new_part);
16 use SL::Dev::Inventory qw(create_warehouse_and_bins set_stock);
17 use SL::Dev::CustomerVendor qw(new_vendor);
21 Support::TestSetup::login();
24 my ($wh, $bin) = create_warehouse_and_bins();
25 my $vendor = new_vendor()->save;
29 description => 'Testpart 1 rop no stock',
34 warehouse_id => $wh->id,
36 makemodels => [ _create_makemodel_for_vendor(vendor => $vendor) ],
41 description => 'Testpart 2 norop',
44 makemodels => [ _create_makemodel_for_vendor(vendor => $vendor) ],
46 set_stock(part => $part2, bin_id => $bin->id, qty => 80);
50 partnumber => "TPO $i",
51 description => "Testpart onhand $i",
56 warehouse_id => $wh->id,
58 makemodels => [ _create_makemodel_for_vendor(vendor => $vendor) ],
60 set_stock(part => $part, bin_id => $bin->id, qty => ($i * 10));
63 my $controller = SL::Controller::DispositionManager->new();
64 my $reorder_parts = $controller->_get_parts;
65 is(scalar @{$reorder_parts}, 5, "found 5 parts where onhand < rop");
67 # die; # die here if you want to test making basket manually
69 note('creating purchase basket items');
70 $::form = Support::TestSetup->create_new_form;
71 $::form->{ids} = [ map { $_->id } @{$reorder_parts} ];
73 # call action_add_to_purchase_basket while redirecting rendered HTML output
75 open(my $outputFH, '>', \$output) or die;
76 my $oldFH = select $outputFH;
77 $controller->action_add_to_purchase_basket;
81 is(SL::DB::Manager::PurchaseBasketItem->get_all_count(), 5, "5 items in purchase basket ok");
83 # die; # die here if you want to test creating purchase orders manually
85 note('making purchase order from purchase basket items');
86 my $purchase_basket_items = SL::DB::Manager::PurchaseBasketItem->get_all;
87 $::form = Support::TestSetup->create_new_form;
88 $::form->{ids} = [ map { $_->id } @{ $purchase_basket_items } ];
89 $::form->{basket_ids} = [ map { $_->id } @{ $purchase_basket_items } ];
90 $::form->{vendor_ids} = [ map { $vendor->id } @{ $purchase_basket_items } ];
92 open($outputFH, '>', \$output) or die;
93 $oldFH = select $outputFH;
94 my $ret = $controller->action_transfer_to_purchase_order;
97 is($ret, 1, "action_transfer_to_purchase_order ok");
99 my @basket_item_ids = map { $_->id } @{ $purchase_basket_items } ;
100 my $purchase_order = SL::DB::Order->create_from_purchase_basket(
101 \@basket_item_ids, [], $vendor->id
103 $purchase_order->save;
105 is(SL::DB::Manager::Order->get_all_count( where => [ SL::DB::Manager::Order->type_filter('purchase_order') ] ), 1, "1 purchase order created ok");
106 is(SL::DB::Manager::PurchaseBasketItem->get_all_count(), 0, "purchase basket empty after purchase order was created");
108 is( scalar @{$purchase_order->items}, 5, "Purchase order has 5 item ok");
109 my $first_item = $purchase_order->items_sorted->[0];
110 is( $first_item->parts_id, $part1->id, "Purchase order: first item is part1");
111 is( $first_item->qty, '20.00000', "Purchase order: first item has qty 20");
112 cmp_ok( $purchase_order->netamount, '==', 240, "Purchase order: netamount ok");
113 is( $first_item->active_price_source, 'makemodel/' . $part1->makemodels->[0]->id, "Purchase order: first item has correct active_price_source" . $first_item->part->partnumber);
116 my @vendor_item_ids = ( $part1->id, $part2->id );
118 my $purchase_order2 = SL::DB::Order->create_from_purchase_basket(
119 [], \@vendor_item_ids, $vendor->id
122 is( scalar @{$purchase_order2->items}, 2, "Purchase order 2 has 2 item ok");
123 my $item_1 = $purchase_order2->items_sorted->[0];
124 is( $item_1->parts_id, $part1->id, "Purchase order 2: first item is part1");
125 my $item_2 = $purchase_order2->items_sorted->[1];
126 is( $item_2->parts_id, $part2->id, "Purchase order 2: secound item is part2");
127 is( $item_1->qty, '1.00000', "Purchase order 2: first item has qty 1");
128 is( $item_2->qty, '2.00000', "Purchase order 2: secound item has qty 2");
129 is( $item_1->active_price_source, 'makemodel/' . $part1->makemodels->[0]->id, "Purchase order 2: first item has correct active_price_source" . $first_item->part->partnumber);
136 SL::DB::Manager::Inventory->delete_all(all => 1);
137 SL::DB::Manager::Order->delete_all(all => 1);
138 SL::DB::Manager::PurchaseBasketItem->delete_all(all => 1);
139 SL::DB::Manager::MakeModel->delete_all(all => 1);
140 SL::DB::Manager::Part->delete_all(all => 1);
141 SL::DB::Manager::Vendor->delete_all(all => 1);
142 SL::DB::Manager::Customer->delete_all(all => 1);
143 SL::DB::Manager::Bin->delete_all(all => 1);
144 SL::DB::Manager::Warehouse->delete_all(all => 1);
147 sub _create_makemodel_for_vendor {
150 my $vendor = delete $params{vendor};
151 die "no vendor" unless ref($vendor) eq 'SL::DB::Vendor';
153 my $mm = SL::DB::MakeModel->new(make => $vendor->id,
158 $mm->assign_attributes( %params );