+sub create_assembly {
+ my (%params) = @_;
+
+ my @parts;
+ my $partnumber = delete $params{part1number} || 'ap1';
+ my $part1 = SL::Dev::Part::create_part(partnumber => $partnumber,
+ description => 'Testpart',
+ )->save;
+ push(@parts, $part1);
+
+ my $number_of_parts = delete $params{number_of_parts} || 3;
+
+ for my $i ( 2 .. $number_of_parts ) {
+ my $part = $parts[0]->clone_and_reset;
+ $part->partnumber( $partnumber . " " . $i );
+ $part->description( ($part->description // '') . " " . $i );
+ $part->save;
+ push(@parts, $part);
+ }
+
+ my $assnumber = delete $params{assnumber} || 'as1';
+ my $assembly = SL::DB::Part->new_assembly(
+ partnumber => $assnumber,
+ description => 'Test Assembly',
+ sellprice => '10',
+ lastcost => '5',
+ buchungsgruppen_id => _default_buchungsgruppe()->id,
+ unit => _default_unit()->name
+ );
+
+ foreach my $part ( @parts ) {
+ $assembly->add_assemblies( SL::DB::Assembly->new(parts_id => $part->id, qty => 1, bom => 1) );
+ }
+ $assembly->assign_attributes( %params );
+ return $assembly;
+}
+
+sub create_assortment {
+ my (%params) = @_;
+
+ my $assortment_items = [];
+ if ( $params{assortment_items} ) {
+ $assortment_items = $params{assortment_items};
+ } else {
+ # no assortment items were passed, create a part, clone it several times
+ # and add to assortment as assortment_items
+ my @parts;
+ my $part1 = SL::Dev::Part::create_part(partnumber => 'sp1',
+ description => 'Testpart assortment',
+ )->save;
+ push(@parts, $part1);
+
+ my $number_of_parts = delete $params{number_of_parts} || 3;
+
+ for my $i ( 2 .. $number_of_parts ) {
+ my $part = $parts[0]->clone_and_reset;
+ $part->partnumber( ($part->partnumber // '') . " " . $i );
+ $part->description( ($part->description // '') . " " . $i );
+ $part->save;
+ push(@parts, $part);
+ }
+ my $position = 0;
+ foreach my $part ( @parts ) {
+ push( @{$assortment_items}, SL::DB::AssortmentItem->new(parts_id => $part->id,
+ qty => 1,
+ position => $position++,
+ charge => 1,
+ unit => $part->unit,
+ ));
+ }
+ }
+
+ my $assortment = SL::DB::Part->new_assortment(
+ partnumber => 'as1',
+ description => 'Test Assortment',
+ sellprice => '10',
+ lastcost => '5',
+ assortment_items => $assortment_items,
+ buchungsgruppen_id => _default_buchungsgruppe()->id,
+ unit => _default_unit()->name
+ );
+
+ $assortment->assign_attributes( %params );
+ return $assortment;
+}
+
+
+sub _default_buchungsgruppe {
+ return SL::DB::Manager::Buchungsgruppe->find_by(description => 'Standard 19%') || die "No accounting group";
+}
+
+sub _default_unit {
+ return SL::DB::Manager::Unit->find_by(name => 'Stck') || die "No unit";
+}
+
+