X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=t%2Fcontrollers%2Fcsvimport%2Fparts.t;h=86a3c78ca8fc74f5b6aefe1113e3866b03e74d0a;hb=dfa3f8457799035ff776600b4320507dbfe70a9e;hp=92cd875cc67811638213d2c86550e7b2a42e7ccf;hpb=38c0ed4353377b49ad96f134763b313337ad6729;p=kivitendo-erp.git diff --git a/t/controllers/csvimport/parts.t b/t/controllers/csvimport/parts.t index 92cd875cc..86a3c78ca 100644 --- a/t/controllers/csvimport/parts.t +++ b/t/controllers/csvimport/parts.t @@ -1,4 +1,4 @@ -use Test::More tests => 33; +use Test::More tests => 47; use strict; @@ -21,9 +21,12 @@ use SL::DB::Currency; use SL::DB::Customer; use SL::DB::Language; use SL::DB::Warehouse; +use SL::DB::Pricegroup; +use SL::DB::Price; use SL::DB::Bin; my ($translation, $bin1_1, $bin1_2, $bin2_1, $bin2_2, $wh1, $wh2, $bugru, $cvarconfig ); +my ($pg1_id, $pg2_id, $pg3_id); Support::TestSetup::login(); @@ -71,12 +74,19 @@ sub reset_state { module => 'IC', name => 'mycvar', type => 'text', - description => 'mein schattz', + description => 'mein Schatz', searchable => 1, sortkey => 1, includeable => 0, included_by_default => 0, )->save; + + foreach ( { id => 1, pricegroup => 'A', sortkey => 1 }, + { id => 2, pricegroup => 'B', sortkey => 2 }, + { id => 3, pricegroup => 'C', sortkey => 3 }, + { id => 4, pricegroup => 'D', sortkey => 4 } ) { + SL::DB::Pricegroup->new(%{$_})->save; + } } $bugru = SL::DB::Manager::Buchungsgruppe->find_by(description => { like => 'Standard%19%' }); @@ -86,48 +96,26 @@ reset_state(); ##### sub test_import { my ($file,$settings) = @_; - my @profiles; - my $controller = SL::Controller::CsvImport->new(); + + my $controller = SL::Controller::CsvImport->new( + type => 'parts' + ); + $controller->load_default_profile; + $controller->profile->set( + charset => 'utf-8', + sep_char => ';', + quote_char => '"', + numberformat => $::myconfig{numberformat}, + ); my $csv_part_import = SL::Controller::CsvImport::Part->new( settings => $settings, controller => $controller, file => $file, ); + #print "profile param type=".$csv_part_import->settings->{parts_type}."\n"; - $csv_part_import->test_run(0); - $csv_part_import->csv(SL::Helper::Csv->new(file => $csv_part_import->file, - profile => [{ profile => $csv_part_import->profile, - class => $csv_part_import->class, - mapping => $csv_part_import->controller->mappings_for_profile }], - encoding => 'utf-8', - ignore_unknown_columns => 1, - strict_profile => 1, - case_insensitive_header => 1, - sep_char => ';', - quote_char => '"', - ignore_unknown_columns => 1, - )); - - $csv_part_import->csv->parse; - - $csv_part_import->controller->errors([ $csv_part_import->csv->errors ]) if $csv_part_import->csv->errors; - - return if ( !$csv_part_import->csv->header || $csv_part_import->csv->errors ); - - my $headers = { headers => [ grep { $csv_part_import->csv->dispatcher->is_known($_, 0) } @{ $csv_part_import->csv->header } ] }; - $headers->{methods} = [ map { $_->{path} } @{ $csv_part_import->csv->specs->[0] } ]; - $headers->{used} = { map { ($_ => 1) } @{ $headers->{headers} } }; - $csv_part_import->controller->headers($headers); - $csv_part_import->controller->raw_data_headers({ used => { }, headers => [ ] }); - $csv_part_import->controller->info_headers({ used => { }, headers => [ ] }); - - my $objects = $csv_part_import->csv->get_objects; - my @raw_data = @{ $csv_part_import->csv->get_data }; - - $csv_part_import->controller->data([ pairwise { no warnings 'once'; { object => $a, raw_data => $b, errors => [], information => [], info_data => {} } } @$objects, @raw_data ]); - - $csv_part_import->check_objects; + $csv_part_import->run(test => 0); # don't try and save objects that have errors $csv_part_import->save_objects unless scalar @{$csv_part_import->controller->data->[0]->{errors}}; @@ -152,7 +140,8 @@ my $settings1 = { sellprice_adjustment_type => 'percent', article_number_policy => 'update_prices', shoparticle_if_missing => '0', - parts_type => 'part', + part_type => 'part', + part_classification => 3, default_buchungsgruppe => ($bugru ? $bugru->id : undef), apply_buchungsgruppe => 'all', }; @@ -162,7 +151,8 @@ my $settings2 = { sellprice_adjustment_type => 'percent', article_number_policy => 'update_parts', shoparticle_if_missing => '0', - parts_type => 'part', + part_type => 'mixed', + part_classification => 4, default_buchungsgruppe => ($bugru ? $bugru->id : undef), apply_buchungsgruppe => 'missing', default_unit => 'Stck', @@ -175,10 +165,10 @@ my $settings2 = { # die Dumper($entry->{errors}); -##### create part +##### create part with prices and 3 pricegroup prices $file = \<[0]; @@ -189,44 +179,53 @@ is $entry->{object}->partnumber,'P1000', 'partnumber'; is $entry->{object}->sellprice, '100.1', 'sellprice'; is $entry->{object}->lastcost, '90.2', 'lastcost'; is $entry->{object}->listprice, '95.3', 'listprice'; +is $entry->{object}->find_prices( { pricegroup_id => 2 } )->[0]->price, '122.22000', 'pricegroup_2 price'; -##### update prices of part +##### update prices of part, and price of pricegroup_2, keeping pricegroup_1 and pricegroup_3 $file = \<[0]; is $entry->{object}->sellprice, '110.1', 'updated sellprice'; is $entry->{object}->lastcost, '95.2', 'updated lastcost'; is $entry->{object}->listprice, '97.3', 'updated listprice'; +# $entry->{object}->prices currently only contains prices pricegroup_2 and pricegroup_4, reload object from db +# printf("%s %s: %s\n", $_->pricegroup_id, $_->pricegroup->pricegroup, $_->price) foreach @{$entry->{object}->prices}; +$entry->{object}->load; +is $entry->{object}->find_prices( { pricegroup_id => 1 } )->[0]->price, '111.11000', 'pricegroup_1 price didn\'t change'; +is $entry->{object}->find_prices( { pricegroup_id => 2 } )->[0]->price, '123.45000', 'pricegroup_2 price was updated'; +is $entry->{object}->find_prices( { pricegroup_id => 4 } )->[0]->price, '144.44000', 'pricegroup_4 price was added'; ##### insert parts with warehouse,bin name $file = \<[0]; is $entry->{object}->description, 'Teil 1000', 'Teil 1000 set'; is $entry->{object}->warehouse_id, $wh1->id, 'Lager1'; is $entry->{object}->bin_id, $bin1_1->id, 'Lagerort1'; +is $entry->{object}->part_type, 'part', 'Typ ist part'; $entry = $entries->[2]; is $entry->{object}->description, 'Teil 1002', 'Teil 1002 set'; is $entry->{object}->warehouse_id, $wh2->id, 'Lager2'; is $entry->{object}->bin_id, $bin2_1->id, 'Lagerort1'; +is $entry->{object}->part_type, 'service', 'Typ ist service'; ##### update warehouse and bin $file = \<[0]; @@ -269,16 +268,41 @@ is $l->longdescription, 'notes IT','IT notes set'; ##### add customvar $file = \<[0]; is $entry->{object}->partnumber, 'P1000', 'P1000 set'; -is $entry->{raw_data}->{cvar_mycvar},'das ist der ring','CVAR set'; -is @{$entry->{object}->custom_variables}[0]->text_value,'das ist der ring','Cvar mit richtigem Weert'; +is $entry->{raw_data}->{cvar_mycvar},'das ist der Ring','CVAR set'; +is @{$entry->{object}->custom_variables}[0]->text_value,'das ist der Ring','Cvar mit richtigem Wert'; + +# set locale to de so we can match abbreviations +$::locale = $old_locale; +##### import part classification +$file = \<[0]; +is $entry->{object}->classification_id, '1', 'W1000 von Klasse Einkauf'; +is $entry->{object}->type, 'part', 'W1000 vom Type part'; +$entry = $entries->[1]; +is $entry->{object}->classification_id, '2', 'W1001 von Klasse Verkauf'; +is $entry->{object}->type, 'part', 'W1001 vom Type part'; +$entry = $entries->[2]; +is $entry->{object}->classification_id, '2', 'D1002 von Klasse Verkauf'; +is $entry->{object}->type, 'service', 'D1002 vom Type service'; +$entry = $entries->[3]; +is $entry->{object}->classification_id, '3', 'D1003 von Klasse Handelsware'; +is $entry->{object}->type, 'service', 'D1003 vom Type service'; + clear_up(); # remove all data at end of tests @@ -287,6 +311,8 @@ clear_up(); # remove all data at end of tests sub clear_up { SL::DB::Manager::Part ->delete_all(all => 1); + SL::DB::Manager::Pricegroup ->delete_all(all => 1); + SL::DB::Manager::Price ->delete_all(all => 1); SL::DB::Manager::Translation->delete_all(all => 1); SL::DB::Manager::Language ->delete_all(all => 1); SL::DB::Manager::Bin ->delete_all(all => 1);