Revision 40f891ac
Von Bernd Bleßmann vor etwa 11 Jahren hinzugefügt
SL/Controller/CsvImport/Order.pm | ||
---|---|---|
129 | 129 |
sub init_contacts_by { |
130 | 130 |
my ($self) = @_; |
131 | 131 |
|
132 |
my $cby = { map { my $col = $_; ( $col => { map { ( $_->$col => $_ ) } @{ $self->all_contacts } } ) } qw(cp_id cp_name) };
|
|
132 |
my $cby; |
|
133 | 133 |
|
134 | 134 |
# by customer/vendor id _and_ contact person id |
135 |
$cby->{'cp_cv_id+cp_id'} = { map { ( $_->cp_cv_id . '+' . $_->cp_id => $_ ) } @{ $self->all_contacts } }; |
|
135 |
$cby->{'cp_cv_id+cp_id'} = { map { ( $_->cp_cv_id . '+' . $_->cp_id => $_ ) } @{ $self->all_contacts } }; |
|
136 |
# by customer/vendor id _and_ contact person name |
|
137 |
$cby->{'cp_cv_id+cp_name'} = { map { ( $_->cp_cv_id . '+' . $_->cp_name => $_ ) } @{ $self->all_contacts } }; |
|
138 |
|
|
136 | 139 |
|
137 | 140 |
return $cby; |
138 | 141 |
} |
... | ... | |
170 | 173 |
sub init_ct_shiptos_by { |
171 | 174 |
my ($self) = @_; |
172 | 175 |
|
173 |
my $sby = { map { my $col = $_; ( $col => { map { ( $_->$col => $_ ) } @{ $self->all_ct_shiptos } } ) } qw(shipto_id) };
|
|
176 |
my $sby; |
|
174 | 177 |
|
175 | 178 |
# by trans_id _and_ shipto_id |
176 | 179 |
$sby->{'trans_id+shipto_id'} = { map { ( $_->trans_id . '+' . $_->shipto_id => $_ ) } @{ $self->all_ct_shiptos } }; |
... | ... | |
250 | 253 |
{ header => $::locale->text('Customer/Vendor'), method => 'vc_name' }); |
251 | 254 |
# Todo: access via ->[0] ok? Better: search first order column and use this |
252 | 255 |
$self->add_columns($self->settings->{'order_column'}, |
253 |
map { "${_}_id" } grep { exists $self->controller->data->[0]->{raw_data}->{$_} } qw(payment language department globalproject taxzone)); |
|
256 |
map { "${_}_id" } grep { exists $self->controller->data->[0]->{raw_data}->{$_} } qw(payment language department globalproject taxzone cp));
|
|
254 | 257 |
$self->add_columns($self->settings->{'order_column'}, 'globalproject_id') if exists $self->controller->data->[0]->{raw_data}->{globalprojectnumber}; |
258 |
$self->add_columns($self->settings->{'order_column'}, 'cp_id') if exists $self->controller->data->[0]->{raw_data}->{contact}; |
|
255 | 259 |
|
256 | 260 |
foreach my $entry (@{ $self->controller->data }) { |
257 | 261 |
if ($entry->{raw_data}->{datatype} eq $self->settings->{'item_column'} && $entry->{object}->can('part')) { |
... | ... | |
444 | 448 |
|
445 | 449 |
my $object = $entry->{object}; |
446 | 450 |
|
451 |
my $cp_cv_id = $object->customer_id || $object->vendor_id; |
|
452 |
return 0 unless $cp_cv_id; |
|
453 |
|
|
447 | 454 |
# Check wether or not contact ID is valid. |
448 |
if ($object->cp_id && !$self->contacts_by->{cp_id}->{ $object->cp_id }) {
|
|
455 |
if ($object->cp_id && !$self->contacts_by->{'cp_cv_id+cp_id'}->{ $cp_cv_id . '+' . $object->cp_id }) {
|
|
449 | 456 |
push @{ $entry->{errors} }, $::locale->text('Error: Invalid contact'); |
450 | 457 |
return 0; |
451 | 458 |
} |
452 | 459 |
|
453 | 460 |
# Map name to ID if given. |
454 |
# Todo: names have not to be unique ... search all and check for matching customer/vendor? |
|
455 | 461 |
if (!$object->cp_id && $entry->{raw_data}->{contact}) { |
456 |
my $cp = $self->contacts_by->{cp_name}->{ $entry->{raw_data}->{contact} };
|
|
462 |
my $cp = $self->contacts_by->{'cp_cv_id+cp_name'}->{ $cp_cv_id . '+' . $entry->{raw_data}->{contact} };
|
|
457 | 463 |
if (!$cp) { |
458 | 464 |
push @{ $entry->{errors} }, $::locale->text('Error: Invalid contact'); |
459 | 465 |
return 0; |
... | ... | |
462 | 468 |
$object->cp_id($cp->cp_id); |
463 | 469 |
} |
464 | 470 |
|
465 |
# Check if the contact belongs to this customer/vendor. |
|
466 |
my $trans_id = $object->customer_id || $object->vendor_id; |
|
467 |
if ($object->cp_id && $trans_id |
|
468 |
&& !$self->contacts_by->{'cp_cv_id+cp_id'}->{ $trans_id . '+' . $object->cp_id }) { |
|
469 |
push @{ $entry->{errors} }, $::locale->text('Error: Invalid contact this customer/vendor'); |
|
470 |
return 0; |
|
471 |
} |
|
472 |
|
|
473 | 471 |
if ($object->cp_id) { |
474 |
$entry->{info_data}->{contact} = $self->contacts_by->{cp_id}->{ $object->cp_id }->cp_name;
|
|
472 |
$entry->{info_data}->{contact} = $self->contacts_by->{'cp_cv_id+cp_id'}->{ $cp_cv_id . '+' . $object->cp_id }->cp_name;
|
|
475 | 473 |
} |
476 | 474 |
|
477 | 475 |
return 1; |
... | ... | |
547 | 545 |
|
548 | 546 |
my $object = $entry->{object}; |
549 | 547 |
|
548 |
my $trans_id = $object->customer_id || $object->vendor_id; |
|
549 |
return 0 unless $trans_id; |
|
550 |
|
|
550 | 551 |
# Check wether or not shipto ID is valid. |
551 |
if ($object->shipto_id && !$self->ct_shiptos_by->{shipto_id}->{ $object->shipto_id }) {
|
|
552 |
if ($object->shipto_id && !$self->ct_shiptos_by->{'trans_id+shipto_id'}->{ $trans_id . '+' . $object->shipto_id }) {
|
|
552 | 553 |
push @{ $entry->{errors} }, $::locale->text('Error: Invalid shipto'); |
553 | 554 |
return 0; |
554 | 555 |
} |
555 | 556 |
|
556 |
# Check if the shipto belongs to this customer/vendor. |
|
557 |
my $trans_id = $object->customer_id || $object->vendor_id; |
|
558 |
if ($object->shipto_id && $trans_id |
|
559 |
&& !$self->ct_shiptos_by->{'trans_id+shipto_id'}->{ $trans_id . '+' . $object->shipto_id } ) { |
|
560 |
push @{ $entry->{errors} }, $::locale->text('Error: Invalid shipto for this customer/vendor'); |
|
561 |
return 0; |
|
562 |
} |
|
563 |
|
|
564 | 557 |
return 1; |
565 | 558 |
} |
566 | 559 |
|
Auch abrufbar als: Unified diff
Alle Kontakte und Lieferadressen für entspr. Kunden/Lieferanten behandeln.