diff --git a/models/account_journal.py b/models/account_journal.py index 1d92d9476923283d05601caeb42e7d32bfdd1442..839bacd148551adfe033aefe7916c5ee74a283c7 100644 --- a/models/account_journal.py +++ b/models/account_journal.py @@ -5,7 +5,7 @@ class AccountJournal(models.Model): _inherit = "account.journal" def _get_bank_statements_available_import_formats(self): - """Adds ofx to supported import formats.""" + """Adds bpce to supported import formats.""" rslt = super()._get_bank_statements_available_import_formats() rslt.append("bpce") return rslt diff --git a/wizard/account_bank_statement_import.py b/wizard/account_bank_statement_import.py index e9ae170c89c5c21ac251450bb322cc10ac5ced34..d753dfbf2bb83e4de2132d6675255d8005ae95bc 100644 --- a/wizard/account_bank_statement_import.py +++ b/wizard/account_bank_statement_import.py @@ -3,42 +3,22 @@ import logging import re from odoo import _, api, models -from odoo.exceptions import Warning +from odoo.exceptions import UserError _logger = logging.getLogger(__name__) -class AccountBankStatementImport(models.TransientModel): +class AccountStatementImport(models.TransientModel): _inherit = "account.statement.import" regexp_version = { - "version_A": { - "line_1": r"^Code de la banque : (?P<bank_group_code>\d{5});Code de l'agence : (?P<bank_local_code>\d{5});Date de début de téléchargement : (?P<opening_date>\d{2}/\d{2}/\d{4});Date de fin de téléchargement : (?P<closing_date>\d{2}/\d{2}/\d{4});;$", - "line_2": r"^Numéro de compte : (?P<bank_account_number>\d{11});Nom du compte : (?P<bank_account_name>.*);Devise : (?P<currency>.{3});;;$", - "line_closing_balance": r"^Solde en fin de période;;;;(?P<balance>\d+(,\d{1,2})?);$", - "line_opening_balance": r"^Solde en début de période;;;;(?P<balance>\d+(,\d{1,2})?);$", - "line_credit": r"^(?P<date>\d{2}/\d{2}/\d{4});(?P<unique_import_id>.*);(?P<name>.*);;(?P<credit>\d+(,\d{1,2})?);(?P<note>.*)$", - "line_debit": r"^(?P<date>\d{2}/\d{2}/\d{4});(?P<unique_import_id>.*);(?P<name>.*);(?P<debit>-\d+(,\d{1,2})?);;(?P<note>.*)$", - "line_date_format": "%d/%m/%Y", - }, - "version_B": { - "line_1": r"^Code de la banque : (?P<bank_group_code>\d{5});Date de début de téléchargement : (?P<opening_date>\d{2}/\d{2}/\d{4});Date de fin de téléchargement : (?P<closing_date>\d{2}/\d{2}/\d{4});;$", - "line_2": r"^Numéro de compte : (?P<bank_account_number>\d{11});Devise : (?P<currency>.{3});;;$", - "line_closing_balance": r"^Solde en fin de période;;;(?P<balance>\d+(,\d{1,2})?);$", - "line_opening_balance": r"^Solde en début de période;;;(?P<balance>\d+(,\d{1,2})?);$", - "line_credit": r"^(?P<date>\d{2}/\d{2}/\d{4});(?P<name>.*);;(?P<credit>\d+(,\d{1,2})?);(?P<note>.*)$", - "line_debit": r"^(?P<date>\d{2}/\d{2}/\d{4});(?P<name>.*);(?P<debit>-\d+(,\d{1,2})?);;(?P<note>.*)$", - "line_date_format": "%d/%m/%Y", - }, - "version_C": { - "line_1": r"^Code de la banque : (?P<bank_group_code>\d{5});Code de l'agence : (?P<bank_local_code>\d{5});Date de début de téléchargement : (?P<opening_date>\d{2}/\d{2}/\d{4});Date de fin de téléchargement : (?P<closing_date>\d{2}/\d{2}/\d{4});$", - "line_2": r"^Numéro de compte : (?P<bank_account_number>\d{11});Nom du compte : (?P<nom_compte>.*);Devise : (?P<currency>.{3});$", - "line_closing_balance": r"^Solde en fin de période;;;;(?P<balance>(\+|-)?\d+(,\d{1,2})?)$", - "line_opening_balance": r"^Solde en début de période;;;;(?P<balance>(\+|-)?\d+(,\d{1,2})?)$", - "line_credit": r"^(?P<date>\d{2}/\d{2}/\d{2});(?P<ref>.*);(?P<name>.*);;\+(?P<credit>\d+(,\d{1,2})?);(?P<note>.*);$", - "line_debit": r"^(?P<date>\d{2}/\d{2}/\d{2});(?P<ref>.*);(?P<name>.*);(?P<debit>-\d+(,\d{1,2})?);;(?P<note>.*);$", - "line_date_format": "%d/%m/%y", - }, + "line_1": r"^Code de la banque : (?P<bank_group_code>\d{5});Code de l'agence : (?P<bank_local_code>\d{5});Date de début de téléchargement : (?P<opening_date>\d{2}/\d{2}/\d{4});Date de fin de téléchargement : (?P<closing_date>\d{2}/\d{2}/\d{4});$", + "line_2": r"^Numéro de compte : (?P<bank_account_number>\d{11});Nom du compte : (?P<nom_compte>.*);Devise : (?P<currency>.{3});$", + "line_closing_balance": r"^Solde en fin de période;;;;(?P<balance>(\+|-)?\d+(,\d{1,2})?)$", + "line_opening_balance": r"^Solde en début de période;;;;(?P<balance>(\+|-)?\d+(,\d{1,2})?)$", + "line_credit": r"^(?P<date>\d{2}/\d{2}/\d{2});(?P<ref>.*);(?P<name>.*);;\+(?P<credit>\d+(,\d{1,2})?);(?P<note>.*);$", + "line_debit": r"^(?P<date>\d{2}/\d{2}/\d{2});(?P<ref>.*);(?P<name>.*);(?P<debit>-\d+(,\d{1,2})?);;(?P<note>.*);$", + "line_date_format": "%d/%m/%y", } @api.model @@ -56,41 +36,27 @@ class AccountBankStatementImport(models.TransientModel): @api.model def _check_file(self, data_file): try: - file_version = "version_A" - # for files generated before june 2017 - test_versionA = re.compile( - self.regexp_version[file_version]["line_1"] - ).search(data_file[0]) - if test_versionA is None: - # for files generated after june 2017 and before decembre 2017 - file_version = "version_B" - test_versionB = re.compile( - self.regexp_version[file_version]["line_1"] - ).search(data_file[0]) - if test_versionB is None: - # for files generated after december 2017 - file_version = "version_C" - parse_line_1 = re.compile( - self.regexp_version[file_version]["line_1"] - ).search(data_file[0]) + parse_line_1 = re.compile(self.regexp_version["line_1"]).search( + data_file[0] + ) bank_group_code = parse_line_1.group("bank_group_code") opening_date = parse_line_1.group("opening_date") closing_date = parse_line_1.group("closing_date") - parse_line_2 = re.compile( - self.regexp_version[file_version]["line_2"] - ).search(data_file[1]) + parse_line_2 = re.compile(self.regexp_version["line_2"]).search( + data_file[1] + ) bank_account_number = parse_line_2.group("bank_account_number") currency = parse_line_2.group("currency") closing_balance = float( - re.compile(self.regexp_version[file_version]["line_closing_balance"]) + re.compile(self.regexp_version["line_closing_balance"]) .search(data_file[3]) .group("balance") .replace(",", ".") ) opening_balance = float( - re.compile(self.regexp_version[file_version]["line_opening_balance"]) + re.compile(self.regexp_version["line_opening_balance"]) .search(data_file[len(data_file) - 1]) .group("balance") .replace(",", ".") @@ -100,7 +66,6 @@ class AccountBankStatementImport(models.TransientModel): _logger.debug(e) return False return ( - file_version, bank_group_code, opening_date, closing_date, @@ -118,7 +83,6 @@ class AccountBankStatementImport(models.TransientModel): return super()._parse_file(data_file) ( - file_version, bank_group_code, opening_date, closing_date, @@ -132,17 +96,15 @@ class AccountBankStatementImport(models.TransientModel): try: index = 0 for line in data_file_split[5 : len(data_file_split) - 1]: - transaction = re.compile( - self.regexp_version[file_version]["line_debit"] - ).search(line) + transaction = re.compile(self.regexp_version["line_debit"]).search(line) if transaction is not None: transaction_amount = float( transaction.group("debit").replace(",", ".") ) else: - transaction = re.compile( - self.regexp_version[file_version]["line_credit"] - ).search(line) + transaction = re.compile(self.regexp_version["line_credit"]).search( + line + ) transaction_amount = float( transaction.group("credit").replace(",", ".") ) @@ -153,7 +115,7 @@ class AccountBankStatementImport(models.TransientModel): vals_line = { "date": datetime.datetime.strptime( transaction.group("date"), - self.regexp_version[file_version]["line_date_format"], + self.regexp_version["line_date_format"], ).strftime("%Y-%m-%d"), "payment_ref": libelle, # 'ref': transaction.group('unique_import_id'), @@ -179,7 +141,7 @@ class AccountBankStatementImport(models.TransientModel): ) except Exception as e: - raise Warning( + raise UserError( _( "The following problem occurred during import. The file might not be valid.\n\n %s" )