X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/7ec8b55e0058fdbecd494ecb9d15022e44d57b24..f74b0dac7a8e55cc7a67c4a03a3ee229415b3fbd:/SL/Helper/Csv/Dispatcher.pm diff --git a/SL/Helper/Csv/Dispatcher.pm b/SL/Helper/Csv/Dispatcher.pm index 758981cc9..a063103ba 100644 --- a/SL/Helper/Csv/Dispatcher.pm +++ b/SL/Helper/Csv/Dispatcher.pm @@ -59,7 +59,7 @@ sub _specs_by_line { # initialize lookup hash if not already done if ($self->_csv->is_multiplexed && ! defined $self->_row_spec ) { - $self->_row_spec({ pairwise { $a->{row_ident} => $b } @{ $self->_csv->profile }, @{ $self->_specs } }); + $self->_row_spec({ pairwise { no warnings 'once'; $a->{row_ident} => $b } @{ $self->_csv->profile }, @{ $self->_specs } }); } if ($self->_csv->is_multiplexed) { @@ -106,21 +106,15 @@ sub is_known { sub parse_profile { my ($self, %params) = @_; - my $profile; - my $class; - my $header; 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 $h (@{ $self->_csv->header }) { - $header = $h; - 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++; @@ -128,6 +122,8 @@ sub parse_profile { $self->_specs(\@specs); + $self->_csv->_push_error($self->errors); + return ! $self->errors; } @@ -137,28 +133,27 @@ sub _parse_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}) { + 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); } } } - $self->_csv->_push_error($self->errors); - return \@specs; }