assortment Test mit sellprice und lastcost sum
[kivitendo-erp.git] / t / part / assortment.t
1 use strict;
2 use Test::More;
3
4 use lib 't';
5 use Support::TestSetup;
6 use Carp;
7 use Test::Exception;
8 use SL::DB::Unit;
9 use SL::DB::Part;
10 use Data::Dumper;
11
12 Support::TestSetup::login();
13
14 clear_up();
15 reset_state();
16
17 is( SL::DB::Manager::Part->get_all_count(), 3,  "total number of parts created is 3");
18
19 my $assortment = SL::DB::Manager::Part->find_by( partnumber => 'as1' );
20
21 is($assortment->part_type,                  'assortment', 'assortment has correct part_type');
22 is(scalar @{$assortment->assortment_items}, 2,            'assortment has two parts');
23 is($assortment->assortment_sellprice_sum,   19.98,        'assortment sellprice sum ok');
24 is($assortment->assortment_lastcost_sum,    13.32,        'assortment lastcost sum ok');
25
26 my $assortment_item = $assortment->assortment_items->[0];
27 is( $assortment_item->assortment->partnumber, 'as1', "assortment_item links back to correct assortment");
28
29 clear_up();
30 done_testing;
31
32 sub reset_state {
33   my %params = @_;
34
35   my ($part1, $part2, $unit);
36
37   # SL::DB::Manager::AssortmentItem->delete_all(all => 1);
38   # SL::DB::Manager::Part->delete_all(all => 1);
39   my ($part1, $part2, $unit, $assortment_part, $assortment_1, $assortment_2);
40
41   my $unit = SL::DB::Manager::Unit->find_by(name => 'Stck') || die "Can't find unit 'Stck'";
42   $part1 = SL::DB::Part->new_part( partnumber         => '7777',
43                                    description        => "assortment part 1",
44                                    unit               => $unit->name,
45                                    sellprice          => '3.33',
46                                    lastcost           => '2.22',
47                                  )->save;
48   $part2 = $part1->clone_and_reset($part1);
49   $part2->partnumber( $part1->partnumber + 1 );
50   $part2->description( "assortment part 2" );
51   $part2->save;
52
53   my $assortment_part = SL::DB::Part->new_assortment( partnumber         => 'as1',
54                                                       description        => 'assortment',
55                                                       sellprice          => '0',
56                                                       unit               => $unit->name);
57   my $assortment_1 = SL::DB::AssortmentItem->new( parts_id => $part1->id, qty => 3, unit => $part1->unit, position => 1);
58   my $assortment_2 = SL::DB::AssortmentItem->new( parts_id => $part2->id, qty => 3, unit => $part2->unit, position => 2);
59   $assortment_part->add_assortment_items($assortment_1, $assortment_2);
60   $assortment_part->save or die "Couldn't save assortment";
61
62 };
63
64 sub clear_up {
65   SL::DB::Manager::AssortmentItem->delete_all(all => 1);
66   SL::DB::Manager::Part->delete_all(          all => 1);
67 };
68
69
70 1;