Skip to content
Extraits de code Groupes Projets
Valider 55343c4d rédigé par Rémi - Le Filament's avatar Rémi - Le Filament
Parcourir les fichiers

[UPD] simplify processing

parent 70ceb416
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -5,7 +5,7 @@ class AccountJournal(models.Model): ...@@ -5,7 +5,7 @@ class AccountJournal(models.Model):
_inherit = "account.journal" _inherit = "account.journal"
def _get_bank_statements_available_import_formats(self): 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 = super()._get_bank_statements_available_import_formats()
rslt.append("bpce") rslt.append("bpce")
return rslt return rslt
...@@ -3,34 +3,15 @@ import logging ...@@ -3,34 +3,15 @@ import logging
import re import re
from odoo import _, api, models from odoo import _, api, models
from odoo.exceptions import Warning from odoo.exceptions import UserError
_logger = logging.getLogger(__name__) _logger = logging.getLogger(__name__)
class AccountBankStatementImport(models.TransientModel): class AccountStatementImport(models.TransientModel):
_inherit = "account.statement.import" _inherit = "account.statement.import"
regexp_version = { 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_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_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_closing_balance": r"^Solde en fin de période;;;;(?P<balance>(\+|-)?\d+(,\d{1,2})?)$",
...@@ -38,7 +19,6 @@ class AccountBankStatementImport(models.TransientModel): ...@@ -38,7 +19,6 @@ class AccountBankStatementImport(models.TransientModel):
"line_credit": r"^(?P<date>\d{2}/\d{2}/\d{2});(?P<ref>.*);(?P<name>.*);;\+(?P<credit>\d+(,\d{1,2})?);(?P<note>.*);$", "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_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_date_format": "%d/%m/%y",
},
} }
@api.model @api.model
...@@ -56,41 +36,27 @@ class AccountBankStatementImport(models.TransientModel): ...@@ -56,41 +36,27 @@ class AccountBankStatementImport(models.TransientModel):
@api.model @api.model
def _check_file(self, data_file): def _check_file(self, data_file):
try: try:
file_version = "version_A" parse_line_1 = re.compile(self.regexp_version["line_1"]).search(
# for files generated before june 2017 data_file[0]
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])
bank_group_code = parse_line_1.group("bank_group_code") bank_group_code = parse_line_1.group("bank_group_code")
opening_date = parse_line_1.group("opening_date") opening_date = parse_line_1.group("opening_date")
closing_date = parse_line_1.group("closing_date") closing_date = parse_line_1.group("closing_date")
parse_line_2 = re.compile( parse_line_2 = re.compile(self.regexp_version["line_2"]).search(
self.regexp_version[file_version]["line_2"] data_file[1]
).search(data_file[1]) )
bank_account_number = parse_line_2.group("bank_account_number") bank_account_number = parse_line_2.group("bank_account_number")
currency = parse_line_2.group("currency") currency = parse_line_2.group("currency")
closing_balance = float( 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]) .search(data_file[3])
.group("balance") .group("balance")
.replace(",", ".") .replace(",", ".")
) )
opening_balance = float( 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]) .search(data_file[len(data_file) - 1])
.group("balance") .group("balance")
.replace(",", ".") .replace(",", ".")
...@@ -100,7 +66,6 @@ class AccountBankStatementImport(models.TransientModel): ...@@ -100,7 +66,6 @@ class AccountBankStatementImport(models.TransientModel):
_logger.debug(e) _logger.debug(e)
return False return False
return ( return (
file_version,
bank_group_code, bank_group_code,
opening_date, opening_date,
closing_date, closing_date,
...@@ -118,7 +83,6 @@ class AccountBankStatementImport(models.TransientModel): ...@@ -118,7 +83,6 @@ class AccountBankStatementImport(models.TransientModel):
return super()._parse_file(data_file) return super()._parse_file(data_file)
( (
file_version,
bank_group_code, bank_group_code,
opening_date, opening_date,
closing_date, closing_date,
...@@ -132,17 +96,15 @@ class AccountBankStatementImport(models.TransientModel): ...@@ -132,17 +96,15 @@ class AccountBankStatementImport(models.TransientModel):
try: try:
index = 0 index = 0
for line in data_file_split[5 : len(data_file_split) - 1]: for line in data_file_split[5 : len(data_file_split) - 1]:
transaction = re.compile( transaction = re.compile(self.regexp_version["line_debit"]).search(line)
self.regexp_version[file_version]["line_debit"]
).search(line)
if transaction is not None: if transaction is not None:
transaction_amount = float( transaction_amount = float(
transaction.group("debit").replace(",", ".") transaction.group("debit").replace(",", ".")
) )
else: else:
transaction = re.compile( transaction = re.compile(self.regexp_version["line_credit"]).search(
self.regexp_version[file_version]["line_credit"] line
).search(line) )
transaction_amount = float( transaction_amount = float(
transaction.group("credit").replace(",", ".") transaction.group("credit").replace(",", ".")
) )
...@@ -153,7 +115,7 @@ class AccountBankStatementImport(models.TransientModel): ...@@ -153,7 +115,7 @@ class AccountBankStatementImport(models.TransientModel):
vals_line = { vals_line = {
"date": datetime.datetime.strptime( "date": datetime.datetime.strptime(
transaction.group("date"), transaction.group("date"),
self.regexp_version[file_version]["line_date_format"], self.regexp_version["line_date_format"],
).strftime("%Y-%m-%d"), ).strftime("%Y-%m-%d"),
"payment_ref": libelle, "payment_ref": libelle,
# 'ref': transaction.group('unique_import_id'), # 'ref': transaction.group('unique_import_id'),
...@@ -179,7 +141,7 @@ class AccountBankStatementImport(models.TransientModel): ...@@ -179,7 +141,7 @@ class AccountBankStatementImport(models.TransientModel):
) )
except Exception as e: except Exception as e:
raise Warning( raise UserError(
_( _(
"The following problem occurred during import. The file might not be valid.\n\n %s" "The following problem occurred during import. The file might not be valid.\n\n %s"
) )
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter