X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FController%2FCsvImport%2FPart.pm;h=be989eee1bd3dbf651169c9afb64cb0e623dfdca;hb=b33bd26a82d846ed4b24b13acfac03ccaf8736b7;hp=34bdd73655e637d61b19d5ebb2c4059a4dfa2f0d;hpb=cd3150ed14f13bc1af071dd0f91015dd32360eae;p=kivitendo-erp.git diff --git a/SL/Controller/CsvImport/Part.pm b/SL/Controller/CsvImport/Part.pm index 34bdd7365..be989eee1 100644 --- a/SL/Controller/CsvImport/Part.pm +++ b/SL/Controller/CsvImport/Part.pm @@ -27,6 +27,24 @@ use Rose::Object::MakeMethods::Generic translation_columns all_pricegroups) ], ); +sub set_profile_defaults { + my ($self) = @_; + + my $bugru = SL::DB::Manager::Buchungsgruppe->find_by(description => { like => 'Standard%19%' }); + + $self->controller->profile->_set_defaults( + sellprice_places => 2, + sellprice_adjustment => 0, + sellprice_adjustment_type => 'percent', + article_number_policy => 'update_prices', + shoparticle_if_missing => '0', + parts_type => 'part', + default_buchungsgruppe => ($bugru ? $bugru->id : undef), + apply_buchungsgruppe => 'all', + ); +}; + + sub init_class { my ($self) = @_; $self->class('SL::DB::Part'); @@ -258,7 +276,7 @@ sub check_type { my ($self, $entry) = @_; my $bg = $self->bg_by->{id}->{ $entry->{object}->buchungsgruppen_id }; - $bg ||= SL::DB::Buchungsgruppe->new(inventory_accno_id => 1, income_accno_id_0 => 1, expense_accno_id_0 => 1); + $bg ||= SL::DB::Buchungsgruppe->new(inventory_accno_id => 1); # does this case ever occur? my $type = $self->settings->{parts_type}; if ($type eq 'mixed') { @@ -270,17 +288,21 @@ sub check_type { $entry->{object}->assembly($type eq 'assembly'); - $entry->{object}->income_accno_id( $bg->income_accno_id_0 ); + # when saving income_accno_id or expense_accno_id use ids from the selected + # $bg according to the default tax_zone (the one with the highest sort + # order). Alternatively one could use the ids from defaults, but they might + # not all be set. + + $entry->{object}->income_accno_id( $bg->income_accno_id( SL::DB::Manager::TaxZone->get_default->id ) ); if ($type eq 'part' || $type eq 'service') { - $entry->{object}->expense_accno_id( $bg->expense_accno_id_0 ); + $entry->{object}->expense_accno_id( $bg->expense_accno_id( SL::DB::Manager::TaxZone->get_default->id ) ); } if ($type eq 'part') { $entry->{object}->inventory_accno_id( $bg->inventory_accno_id ); } - if (none { $_ eq $type } qw(part service assembly)) { push @{ $entry->{errors} }, $::locale->text('Error: Invalid part type'); return 0; @@ -423,10 +445,11 @@ sub handle_makemodel { return; } - my %old_makemodels_by_make = map { $_->make => $_ } $entry->{part}->makemodels; + my %old_makemodels_by_mm = map { $_->make . $; . $_->model => $_ } $entry->{part}->makemodels; + my @new_makemodels; foreach my $makemodel ($object->makemodels()) { - my $makemodel_orig = $old_makemodels_by_make{$makemodel->make}; + my $makemodel_orig = $old_makemodels_by_mm{$makemodel->make,$makemodel->model}; $found_any = 1; if ($makemodel_orig) { @@ -434,11 +457,15 @@ sub handle_makemodel { $makemodel_orig->lastcost($makemodel->lastcost); } else { - $entry->{part}->add_makemodels($makemodel); + push @new_makemodels, $makemodel; } } - $entry->{part}->makemodel($object->makemodel); + $entry->{part}->makemodels([ $entry->{part}->makemodels, @new_makemodels ]) if @new_makemodels; + + # reindex makemodels + my $i = 0; + $_->sortorder(++$i) for @{ $entry->{part}->makemodels }; $self->save_with_cascade(1) if $found_any; }