X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FHelper%2FCsv%2FDispatcher.pm;h=801e8229f2bfb2d997376bde3c7383306119c4d8;hb=73f7989fcf23410ebd879d5150f6a13913ca2b90;hp=a744892c14bda100db2e6c69d4d6e5190be95335;hpb=048a6eb734688cb4bc67ac24df8b96ec75cdce09;p=kivitendo-erp.git diff --git a/SL/Helper/Csv/Dispatcher.pm b/SL/Helper/Csv/Dispatcher.pm index a744892c1..801e8229f 100644 --- a/SL/Helper/Csv/Dispatcher.pm +++ b/SL/Helper/Csv/Dispatcher.pm @@ -99,26 +99,22 @@ sub apply { } sub is_known { - my ($self, $col) = @_; - return grep { $col eq $_->{key} } $self->_specs; + my ($self, $col, $row) = @_; + return grep { $col eq $_->{key} } @{ $self->_specs->[$row // 0] }; } sub parse_profile { my ($self, %params) = @_; - my $profile; - my $class; my @specs; + my $csv_profile = $self->_csv->profile; + my $h_aref = ($self->_csv->is_multiplexed)? $self->_csv->header : [ $self->_csv->header ]; my $i = 0; - foreach my $header (@{ $self->_csv->header }) { - if ($self->_csv->profile) { - $profile = $self->_csv->profile->[$i]->{profile}; - $class = $self->_csv->profile->[$i]->{class}; - } - - my $spec = $self->_parse_profile(profile => $profile, - class => $class, + foreach my $header (@{ $h_aref }) { + my $spec = $self->_parse_profile(profile => $csv_profile->[$i]->{profile}, + mapping => $csv_profile->[$i]->{mapping}, + class => $csv_profile->[$i]->{class}, header => $header); push @specs, $spec; $i++; @@ -134,23 +130,24 @@ sub parse_profile { sub _parse_profile { my ($self, %params) = @_; - my $profile = $params{profile}; + my $profile = $params{profile} // {}; my $class = $params{class}; my $header = $params{header}; + my $mapping = $params{mapping}; my @specs; for my $col (@$header) { next unless $col; - if ($self->_csv->strict_profile) { - if (exists $profile->{$col}) { - push @specs, $self->make_spec($col, $profile->{$col}, $class); - } else { - $self->unknown_column($col, undef); - } + if (exists $mapping->{$col} && $profile->{$mapping->{$col}}) { + push @specs, $self->make_spec($col, $profile->{$mapping->{$col}}, $class); + } elsif (exists $mapping->{$col} && !%{ $profile }) { + push @specs, $self->make_spec($col, $mapping->{$col}, $class); + } elsif (exists $profile->{$col}) { + push @specs, $self->make_spec($col, $profile->{$col}, $class); } else { - if (exists $profile->{$col}) { - push @specs, $self->make_spec($col, $profile->{$col}, $class); + if ($self->_csv->strict_profile) { + $self->unknown_column($col, undef); } else { push @specs, $self->make_spec($col, $col, $class); } @@ -163,7 +160,7 @@ sub _parse_profile { sub make_spec { my ($self, $col, $path, $cur_class) = @_; - my $spec = { key => $col, steps => [] }; + my $spec = { key => $col, path => $path, steps => [] }; return unless $path;