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):
_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
......@@ -3,34 +3,15 @@ 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})?)$",
......@@ -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_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"
)
......
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