CsvImport: bei nicht eindeutigen Kunden/Lieferanten Fehler melden.
[kivitendo-erp.git] / SL / Controller / CsvImport / Order.pm
index e6a1fc0..0d54944 100644 (file)
@@ -133,9 +133,11 @@ sub setup_displayable_columns {
                                  { name => 'taxincluded',             description => $::locale->text('Tax Included')                          },
                                  { name => 'customer',                description => $::locale->text('Customer (name)')                       },
                                  { name => 'customernumber',          description => $::locale->text('Customer Number')                       },
+                                 { name => 'customer_gln',            description => $::locale->text('Customer GLN')                          },
                                  { name => 'customer_id',             description => $::locale->text('Customer (database ID)')                },
                                  { name => 'vendor',                  description => $::locale->text('Vendor (name)')                         },
                                  { name => 'vendornumber',            description => $::locale->text('Vendor Number')                         },
+                                 { name => 'vendor_gln',              description => $::locale->text('Vendor GLN')                            },
                                  { name => 'vendor_id',               description => $::locale->text('Vendor (database ID)')                  },
                                  { name => 'language_id',             description => $::locale->text('Language (database ID)')                },
                                  { name => 'language',                description => $::locale->text('Language (name)')                       },
@@ -255,6 +257,8 @@ sub check_objects {
   foreach my $entry (@{ $self->controller->data }) {
     $self->controller->track_progress(progress => $i/$num_data * 100) if $i % 100 == 0;
 
+    $entry->{info_data}->{datatype} = $entry->{raw_data}->{datatype};
+
     if ($entry->{raw_data}->{datatype} eq $self->_order_column) {
       $self->handle_order($entry);
     } elsif ($entry->{raw_data}->{datatype} eq $self->_item_column && $entry->{object}->can('part')) {
@@ -266,6 +270,11 @@ sub check_objects {
     $i++;
   }
 
+  $self->add_info_columns($self->_order_column,
+                          { header => $::locale->text('Data type'), method => 'datatype' });
+  $self->add_info_columns($self->_item_column,
+                          { header => $::locale->text('Data type'), method => 'datatype' });
+
   $self->add_info_columns($self->_order_column,
                           { header => $::locale->text('Customer/Vendor'), method => 'vc_name' });
   # Todo: access via ->[0] ok? Better: search first order column and use this
@@ -285,21 +294,6 @@ sub check_objects {
 
   $self->add_items_to_order();
   $self->handle_prices_and_taxes();
-
-
-  # If order has errors set error for orderitems as well
-  my $order_entry;
-  foreach my $entry (@{ $self->controller->data }) {
-    # Search first order
-    if ($entry->{raw_data}->{datatype} eq $self->_order_column) {
-      $order_entry = $entry;
-    } elsif ( defined $order_entry
-              && $entry->{raw_data}->{datatype} eq $self->_item_column
-              && scalar @{ $order_entry->{errors} } > 0 ) {
-      push @{ $entry->{errors} }, $::locale->text('Error: Invalid order for this order item');
-    }
-  }
-
 }
 
 sub handle_order {
@@ -308,10 +302,10 @@ sub handle_order {
   my $object = $entry->{object};
 
   my $vc_obj;
-  if (any { $entry->{raw_data}->{$_} } qw(customer customernumber customer_id)) {
+  if (any { $entry->{raw_data}->{$_} } qw(customer customernumber customer_gln customer_id)) {
     $self->check_vc($entry, 'customer_id');
     $vc_obj = SL::DB::Customer->new(id => $object->customer_id)->load if $object->customer_id;
-  } elsif (any { $entry->{raw_data}->{$_} } qw(vendor vendornumber vendor_id)) {
+  } elsif (any { $entry->{raw_data}->{$_} } qw(vendor vendornumber vendor_gln vendor_id)) {
     $self->check_vc($entry, 'vendor_id');
     $vc_obj = SL::DB::Vendor->new(id => $object->vendor_id)->load if $object->vendor_id;
   } else {
@@ -671,16 +665,16 @@ sub handle_prices_and_taxes() {
 sub save_objects {
   my ($self, %params) = @_;
 
-  # set order number and collect to save
-  my $objects_to_save;
+  # Collect orders without errors to save.
+  my $entries_to_save = [];
   foreach my $entry (@{ $self->controller->data }) {
     next if $entry->{raw_data}->{datatype} ne $self->_order_column;
     next if @{ $entry->{errors} };
 
-    push @{ $objects_to_save }, $entry;
+    push @{ $entries_to_save }, $entry;
   }
 
-  $self->SUPER::save_objects(data => $objects_to_save);
+  $self->SUPER::save_objects(data => $entries_to_save);
 }
 
 sub _order_column {