CsvImport: bei nicht eindeutigen Kunden/Lieferanten Fehler melden.
[kivitendo-erp.git] / SL / Controller / CsvImport / BankTransaction.pm
index 4bd9b96..d6a7e87 100644 (file)
@@ -56,6 +56,7 @@ sub check_objects {
   }
 
   $self->add_info_columns({ header => $::locale->text('Bank account'), method => 'local_bank_name' });
+  $self->add_raw_data_columns("currency", "currency_id") if grep { /^currency(?:_id)?$/ } @{ $self->csv->header };
 }
 
 sub check_existing {
@@ -82,25 +83,29 @@ sub check_existing {
   };
 }
 
+sub _displayable_columns {
+ (
+   { name => 'local_bank_code',       description => $::locale->text('Own bank code') },
+   { name => 'local_account_number',  description => $::locale->text('Own bank account number or IBAN') },
+   { name => 'local_bank_account_id', description => $::locale->text('ID of own bank account') },
+   { name => 'remote_bank_code',      description => $::locale->text('Bank code of the goal/source') },
+   { name => 'remote_account_number', description => $::locale->text('Account number of the goal/source') },
+   { name => 'transdate',             description => $::locale->text('Date of transaction') },
+   { name => 'valutadate',            description => $::locale->text('Valuta date') },
+   { name => 'amount',                description => $::locale->text('Amount') },
+   { name => 'currency',              description => $::locale->text('Currency') },
+   { name => 'currency_id',           description => $::locale->text('Currency (database ID)')          },
+   { name => 'remote_name',           description => $::locale->text('Name of the goal/source (if field names remote_name and remote_name_1 exist they will be combined into field "remote_name")') },
+   { name => 'purpose',               description => $::locale->text('Purpose (if field names purpose, purpose1, purpose2 ... exist they will all combined into the field "purpose")') }
+ );
+}
+
 sub setup_displayable_columns {
   my ($self) = @_;
 
   $self->SUPER::setup_displayable_columns;
 
-  # TODO: don't show fields cleared, invoice_amount and transaction_id in the help text, as these should not be imported
-  $self->add_displayable_columns({ name => 'local_bank_code',       description => $::locale->text('Own bank code') },
-                                 { name => 'local_account_number',  description => $::locale->text('Own bank account number or IBAN') },
-                                 { name => 'local_bank_account_id', description => $::locale->text('ID of own bank account') },
-                                 { name => 'remote_bank_code',      description => $::locale->text('Bank code of the goal/source') },
-                                 { name => 'remote_account_number', description => $::locale->text('Account number of the goal/source') },
-                                 { name => 'transdate',             description => $::locale->text('Date of transaction') },
-                                 { name => 'valutadate',            description => $::locale->text('Valuta date') },
-                                 { name => 'amount',                description => $::locale->text('Amount') },
-                                 { name => 'currency',              description => $::locale->text('Currency') },
-                                 { name => 'currency_id',           description => $::locale->text('Currency (database ID)')          },
-                                 { name => 'remote_name',           description => $::locale->text('Name of the goal/source (if field names remote_name and remote_name_1 exist they will be combined into field "remote_name")') },
-                                 { name => 'purpose',               description => $::locale->text('Purpose (if field names purpose, purpose1, purpose2 ... exist they will all combined into the field "purpose")') },
-                                 );
+  $self->add_displayable_columns($self->_displayable_columns);
 }
 
 sub check_bank_account {
@@ -108,9 +113,9 @@ sub check_bank_account {
 
   my $object = $entry->{object};
 
-  # Check whether or not local_bank_account ID exists and is valid.
+  # import via id: check whether or not local_bank_account ID exists and is valid.
   if ($object->local_bank_account_id && !$self->bank_accounts_by->{id}->{ $object->local_bank_account_id }) {
-    push @{ $entry->{errors} }, $::locale->text('Error: Invalid local bank account');
+    push @{ $entry->{errors} }, $::locale->text('Error: unknown local bank account id');
     return 0;
   }
 
@@ -118,11 +123,11 @@ sub check_bank_account {
   if ($object->local_bank_account_id && $entry->{raw_data}->{local_account_number}) {
     my $bank_account = $self->bank_accounts_by->{id}->{ $object->local_bank_account_id };
     if ($bank_account->account_number ne $entry->{raw_data}->{local_account_number}) {
-      push @{ $entry->{errors} }, $::locale->text('Error: Invalid local bank account');
+      push @{ $entry->{errors} }, $::locale->text('Error: local bank account id doesn\'t match local bank account number');
       return 0;
     }
     if ($entry->{raw_data}->{local_bank_code} && $entry->{raw_data}->{local_bank_code} ne $bank_account->bank_code) {
-      push @{ $entry->{errors} }, $::locale->text('Error: Invalid local bank account');
+      push @{ $entry->{errors} }, $::locale->text('Error: local bank account id doesn\'t match local bank code');
       return 0;
     }
 
@@ -136,18 +141,17 @@ sub check_bank_account {
        $bank_account = $self->bank_accounts_by->{iban}->{ $entry->{raw_data}->{local_account_number} };
     };
     if (!$bank_account) {
-      push @{ $entry->{errors} }, $::locale->text('Error: Invalid local bank account');
+      push @{ $entry->{errors} }, $::locale->text('Error: unknown local bank account') . ": " . $entry->{raw_data}->{local_account_number};
       return 0;
     }
     if ($entry->{raw_data}->{local_bank_code} && $entry->{raw_data}->{local_bank_code} ne $bank_account->bank_code) {
-      push @{ $entry->{errors} }, $::locale->text('Error: Invalid local bank account');
+      push @{ $entry->{errors} }, $::locale->text('Error: Found local bank account number but local bank code doesn\'t match') . ": " . $entry->{raw_data}->{local_bank_code};
       return 0;
     }
 
     $object->local_bank_account_id($bank_account->id);
     $entry->{info_data}->{local_bank_name} = $bank_account->name;
   }
-
   return $object->local_bank_account_id ? 1 : 0;
 }
 
@@ -182,4 +186,8 @@ sub join_remote_names {
   $object->remote_name($remote_name);
 }
 
+sub check_auth {
+  $::auth->assert('config') if ! $::auth->assert('bank_transaction',1);
+}
+
 1;