1 use Test::More tests => 28;
 
   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),
 
 121                     create_order_item(part => $parts[2], qty => 11, sellprice => 80)
 
 127 datatype;customer;ordnumber
 
 128 datatype;description;qty
 
 130 DeliveryOrder;TestCustomer1;1234
 
 131 OrderItem;TestPart1;5
 
 132 OrderItem;TestPart2;10
 
 133 OrderItem;TestPart3;7
 
 134 OrderItem;TestPart3;1
 
 135 OrderItem;TestPart3;11
 
 138   1;                            # make emacs happy
 
 141 # delivery oder pos/qty <- order pos/qty
 
 148 $entries = do_import($file);
 
 149 $orders[0]->load;               # reload order to get correct delivered status
 
 151 $entry = $entries->[0];
 
 152 is $entry->{object}->ordnumber, '1234', 'with source order: ordnumber';
 
 154 my $linked = $orders[0]->linked_records(to => 'DeliveryOrder');
 
 155 ok(scalar @$linked == 1, 'with source order: order linked to one delivery order');
 
 156 ok($linked->[0]->id == $entry->{object}->id, 'with source order: order linked to imported delivery order');
 
 159 $linked = $entry->{object}->linked_records(from => 'Order');
 
 160 ok(scalar @$linked == 1, 'with source order: delivery order linked from one order');
 
 161 ok($linked->[0]->id == $orders[0]->id, 'with source order: delivery order linked from source order');
 
 163 $entry = $entries->[1];
 
 164 $linked = $entry->{object}->linked_records(from => 'OrderItem');
 
 165 ok(scalar @$linked == 0, 'with source order: delivered qty > ordered qty: delivery order item not linked');
 
 167 $entry = $entries->[2];
 
 168 $linked = $entry->{object}->linked_records(from => 'OrderItem');
 
 169 ok(scalar @$linked == 1, 'with source order: same qtys: delivery order item linked');
 
 170 ok($linked->[0]->id == $orders[0]->items_sorted->[1]->id, 'with source order: same qtys: delivery order item linked from source order item');
 
 172 $entry = $entries->[3];
 
 173 $linked = $entry->{object}->linked_records(from => 'OrderItem');
 
 174 ok(scalar @$linked == 1, 'with source order: delivered qty < ordered qty: delivery order item linked (fill up)');
 
 175 ok($linked->[0]->position == 3, 'with source order: delivered qty < ordered qty: order position ok (fill up)');
 
 177 $entry = $entries->[4];
 
 178 $linked = $entry->{object}->linked_records(from => 'OrderItem');
 
 179 ok(scalar @$linked == 1, 'with source order: delivered qty < ordered qty: delivery order item linked (fill up) 2');
 
 180 ok($linked->[0]->position == 3, 'with source order: delivered qty < ordered qty: order position ok (fill up) 2');
 
 182 $entry = $entries->[5];
 
 183 $linked = $entry->{object}->linked_records(from => 'OrderItem');
 
 184 ok(scalar @$linked == 1, 'with source order: delivered qty == ordered qty: found exact match after fill up');
 
 185 ok($linked->[0]->position == 4, 'with source order: delivered qty == ordered qty: order position ok after fill up');
 
 187 ok(!$orders[0]->delivered, 'with source order: order not completely delivered');
 
 193 @customers = (new_customer(name => 'TestCustomer1', discount => 0)->save);
 
 195   new_part(description => 'TestPart1', ean => '')->save,
 
 196   new_part(description => 'TestPart2', ean => '')->save,
 
 197   new_part(description => 'TestPart3', ean => '')->save
 
 202     customer   => $customers[0],
 
 204     orderitems => [ create_order_item(part => $parts[0], qty =>  3, sellprice => 70),
 
 205                     create_order_item(part => $parts[1], qty => 10, sellprice => 50),
 
 206                     create_order_item(part => $parts[2], qty =>  8, sellprice => 80),
 
 207                     create_order_item(part => $parts[2], qty => 11, sellprice => 80)
 
 213 datatype;customer;ordnumber
 
 214 datatype;description;qty
 
 216 DeliveryOrder;TestCustomer1;1234
 
 217 OrderItem;TestPart1;1
 
 218 OrderItem;TestPart2;10
 
 219 OrderItem;TestPart1;2
 
 220 OrderItem;TestPart3;7
 
 221 OrderItem;TestPart3;11
 
 222 OrderItem;TestPart3;1
 
 226   1;                            # make emacs happy
 
 229 # delivery oder pos/qty <- order pos/qty
 
 237 $entries = do_import($file);
 
 238 $orders[0]->load;               # reload order to get correct delivered status
 
 240 $entry = $entries->[1];
 
 241 $linked = $entry->{object}->linked_records(from => 'OrderItem');
 
 242 ok($linked->[0]->position == 1, 'with source order: mixed qtys and fill up: order position ok 1');
 
 244 $entry = $entries->[2];
 
 245 $linked = $entry->{object}->linked_records(from => 'OrderItem');
 
 246 ok($linked->[0]->position == 2, 'with source order: mixed qtys and fill up: order position ok 2');
 
 248 $entry = $entries->[3];
 
 249 $linked = $entry->{object}->linked_records(from => 'OrderItem');
 
 250 ok($linked->[0]->position == 1, 'with source order: mixed qtys and fill up: order position ok 3');
 
 252 $entry = $entries->[4];
 
 253 $linked = $entry->{object}->linked_records(from => 'OrderItem');
 
 254 ok($linked->[0]->position == 3, 'with source order: mixed qtys and fill up: order position ok 4');
 
 256 $entry = $entries->[5];
 
 257 $linked = $entry->{object}->linked_records(from => 'OrderItem');
 
 258 ok($linked->[0]->position == 4, 'with source order: mixed qtys and fill up: order position ok 5');
 
 260 $entry = $entries->[6];
 
 261 $linked = $entry->{object}->linked_records(from => 'OrderItem');
 
 262 ok($linked->[0]->position == 3, 'with source order: mixed qtys and fill up: order position ok 6');
 
 264 ok(!!$orders[0]->delivered, 'with source order: mixed qtys and fill up: order completely delivered');
 
 272 $::myconfig{numberformat} = $old_numberformat;
 
 273 $::locale                 = $old_locale;
 
 279 # set emacs to perl mode