1 use Test::More tests => 15;
8 use Support::TestSetup;
10 use List::MoreUtils qw(none any);
12 use SL::Controller::CsvImport;
13 use_ok 'SL::Controller::CsvImport::DeliveryOrder';
15 use SL::Dev::ALL qw(:ALL);
17 Support::TestSetup::login();
21 my ($file, $settings) = @_;
23 my $controller = SL::Controller::CsvImport->new(
24 type => 'delivery_orders',
26 $controller->load_default_profile;
27 $controller->profile->set(
33 my $worker = SL::Controller::CsvImport::DeliveryOrder->new(
34 controller => $controller,
37 $worker->run(test => 0);
39 return if $worker->controller->errors;
41 # don't try and save objects that have errors
42 $worker->save_objects unless scalar @{$worker->controller->data->[0]->{errors}};
44 return $worker->controller->data;
48 foreach (qw(RecordLink Order DeliveryOrder Customer Part)) {
49 "SL::DB::Manager::${_}"->delete_all(all => 1);
51 SL::DB::Manager::Employee->delete_all(where => [ '!login' => 'unittests' ]);
56 # set numberformat and locale (so we can match errors)
57 my $old_numberformat = $::myconfig{numberformat};
58 $::myconfig{numberformat} = '1.000,00';
59 my $old_locale = $::locale;
60 $::locale = Locale->new('en');
73 @customers = (new_customer(name => 'TestCustomer1', discount => 0)->save);
75 new_part(description => 'TestPart1', ean => '')->save,
76 new_part(description => 'TestPart2', ean => '')->save
81 datatype;description;qty
83 DeliveryOrder;TestCustomer1
85 OrderItem;TestPart2;10
88 $entries = do_import($file);
90 $entry = $entries->[0];
91 is $entry->{object}->customer_id, $customers[0]->id, 'simple import: customer_id';
93 $entry = $entries->[1];
94 is $entry->{object}->parts_id, $parts[0]->id, 'simple import: part 1: parts_id';
95 is $entry->{object}->qty, 5, 'simple import: part 1: qty';
97 $entry = $entries->[2];
98 is $entry->{object}->parts_id, $parts[1]->id, 'simple import: part 2: parts_id';
99 is $entry->{object}->qty, 10, 'simple import: part 2: qty';
107 @customers = (new_customer(name => 'TestCustomer1', discount => 0)->save);
109 new_part(description => 'TestPart1', ean => '')->save,
110 new_part(description => 'TestPart2', ean => '')->save,
111 new_part(description => 'TestPart3', ean => '')->save
116 customer => $customers[0],
118 orderitems => [ create_order_item(part => $parts[0], qty => 3, sellprice => 70),
119 create_order_item(part => $parts[1], qty => 10, sellprice => 50),
120 create_order_item(part => $parts[2], qty => 8, sellprice => 80)
126 datatype;customer;ordnumber
127 datatype;description;qty
129 DeliveryOrder;TestCustomer1;1234
130 OrderItem;TestPart1;5
131 OrderItem;TestPart2;10
132 OrderItem;TestPart3;7
133 OrderItem;TestPart3;1
136 $entries = do_import($file);
138 $entry = $entries->[0];
140 is $entry->{object}->ordnumber, '1234', 'with source order: ordnumber';
142 my $linked = $orders[0]->linked_records(to => 'DeliveryOrder');
143 ok(scalar @$linked == 1, 'with source order: order linked to one delivery order');
144 ok($linked->[0]->id == $entry->{object}->id, 'with source order: order linked to imported delivery order');
147 $linked = $entry->{object}->linked_records(from => 'Order');
148 ok(scalar @$linked == 1, 'with source order: delivery order linked from one order');
149 ok($linked->[0]->id == $orders[0]->id, 'with source order: delivery order linked from source order');
151 $entry = $entries->[1];
152 $linked = $entry->{object}->linked_records(from => 'OrderItem');
153 ok(scalar @$linked == 0, 'with source order: delivered qty > ordered qty: delivery order item not linked');
155 $entry = $entries->[2];
156 $linked = $entry->{object}->linked_records(from => 'OrderItem');
157 ok(scalar @$linked == 1, 'with source order: same qtys: delivery order item linked');
158 ok($linked->[0]->id == $orders[0]->items_sorted->[1]->id, 'with source order: same qtys: delivery order item linked from source order item');
160 $entry = $entries->[3];
161 $linked = $entry->{object}->linked_records(from => 'OrderItem');
162 ok(scalar @$linked == 0, 'with source order: delivered qty < ordered qty: delivery order item not linked');
167 $::myconfig{numberformat} = $old_numberformat;
168 $::locale = $old_locale;
174 # set emacs to perl mode