From 561a40f6dc850f1b94c1d64deb79737b4eea9c7f Mon Sep 17 00:00:00 2001
From: benjamin <benjamin@le-filament.com>
Date: Thu, 9 Nov 2023 18:17:24 +0100
Subject: [PATCH] [UPD] load data exceptions

---
 .pre-commit-config.yaml           |  35 +++++----
 wizard/scop_invoice_idf_wizard.py | 121 +++++++++++++++++-------------
 2 files changed, 86 insertions(+), 70 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 732d0c4..4acca68 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -6,6 +6,8 @@ exclude: |
   ^setup/|/static/description/index\.html$|
   # We don't want to mess with tool-generated files
   .svg$|/tests/([^/]+/)?cassettes/|^.copier-answers.yml$|^.github/|
+  # Maybe reactivate this when all README files include prettier ignore tags?
+  ^README\.md$|
   # Library files can have extraneous formatting (even minimized)
   /static/(src/)?lib/|
   # Repos using Sphinx to generate docs don't need prettying
@@ -25,8 +27,13 @@ repos:
         entry: found forbidden files; remove them
         language: fail
         files: "\\.rej$"
+      - id: en-po-files
+        name: en.po files cannot exist
+        entry: found a en.po file
+        language: fail
+        files: '[a-zA-Z0-9_]*/i18n/en\.po$'
   - repo: https://github.com/oca/maintainer-tools
-    rev: 7d8a9f9ad73db0976fb03cbee43d953bc29b89e9
+    rev: ab1d7f6
     hooks:
       # update the NOT INSTALLABLE ADDONS section above
       - id: oca-update-pre-commit-excluded-addons
@@ -48,7 +55,7 @@ repos:
     hooks:
       - id: black
   - repo: https://github.com/pre-commit/mirrors-prettier
-    rev: v2.6.2
+    rev: v2.1.2
     hooks:
       - id: prettier
         name: prettier (with plugin-xml)
@@ -59,7 +66,7 @@ repos:
           - --plugin=@prettier/plugin-xml
         files: \.(css|htm|html|js|json|jsx|less|md|scss|toml|ts|xml|yaml|yml)$
   - repo: https://github.com/pre-commit/mirrors-eslint
-    rev: v8.15.0
+    rev: v7.8.1
     hooks:
       - id: eslint
         verbose: true
@@ -67,7 +74,7 @@ repos:
           - --color
           - --fix
   - repo: https://github.com/pre-commit/pre-commit-hooks
-    rev: v4.2.0
+    rev: v3.2.0
     hooks:
       - id: trailing-whitespace
         # exclude autogenerated files
@@ -89,37 +96,33 @@ repos:
       - id: mixed-line-ending
         args: ["--fix=lf"]
   - repo: https://github.com/asottile/pyupgrade
-    rev: v2.32.1
+    rev: v2.7.2
     hooks:
       - id: pyupgrade
         args: ["--keep-percent-format"]
   - repo: https://github.com/PyCQA/isort
-    rev: 5.10.1
+    rev: 5.12.0
     hooks:
       - id: isort
         name: isort except __init__.py
         args:
           - --settings=.
         exclude: /__init__\.py$
-  - repo: https://gitlab.com/PyCQA/flake8
-    rev: 3.9.2
+  - repo: https://github.com/PyCQA/flake8
+    rev: 3.8.3
     hooks:
       - id: flake8
         name: flake8
         additional_dependencies: ["flake8-bugbear==20.1.4"]
-  - repo: https://github.com/PyCQA/pylint
-    rev: v2.11.1
+  - repo: https://github.com/OCA/pylint-odoo
+    rev: 7.0.2
     hooks:
-      - id: pylint
+      - id: pylint_odoo
         name: pylint with optional checks
         args:
           - --rcfile=.pylintrc
           - --exit-zero
         verbose: true
-        additional_dependencies: &pylint_deps
-          - pylint-odoo==5.0.5
-      - id: pylint
-        name: pylint with mandatory checks
+      - id: pylint_odoo
         args:
           - --rcfile=.pylintrc-mandatory
-        additional_dependencies: *pylint_deps
diff --git a/wizard/scop_invoice_idf_wizard.py b/wizard/scop_invoice_idf_wizard.py
index 160b753..a203913 100644
--- a/wizard/scop_invoice_idf_wizard.py
+++ b/wizard/scop_invoice_idf_wizard.py
@@ -6,6 +6,8 @@ import csv
 import mimetypes
 from io import StringIO
 
+from dateutil.parser import parse
+
 from odoo import _, api, fields, models
 from odoo.exceptions import UserError
 from odoo.tools.mimetypes import guess_mimetype
@@ -105,72 +107,83 @@ class ScopImportIDFWizard(models.TransientModel):
             if journal in ["VE", "BFC"]:
                 tried_lines += 1
                 compte = row["Compte"]
-                partner_id = self.env["res.partner"].search(
-                    [
-                        ["member_number_int", "=", int(compte[2:7])],
-                        ["member_number_int", "!=", 0],
-                    ]
-                )
-                if len(partner_id) != 1:
+                if not compte[2:7].isdigit():
                     logs += (
                         "<li> Ligne "
                         + str(line)
-                        + ": Impossible de rattacher le compte "
+                        + ": Le compte "
                         + compte
-                        + "</li>"
+                        + " n'est pas lié à un adhérent</li>"
                     )
                 else:
-                    writing_date = row["Date écriture"]
-                    libelle = row["Libellé écriture"]
-                    existing_import_line = self.env[model].search(
+                    partner_id = self.env["res.partner"].search(
                         [
-                            ["partner_id", "=", partner_id.id],
-                            ["writing_date", "=", writing_date],
-                            ["journal", "=", journal],
-                            ["name", "=", libelle],
+                            ["member_number_int", "=", int(compte[2:7])],
+                            ["member_number_int", "!=", 0],
                         ]
                     )
-                    if len(existing_import_line) > 0:
-                        logs += "<li> Ligne " + str(line) + ": Doublon</li>"
+                    if len(partner_id) != 1:
+                        logs += (
+                            "<li> Ligne "
+                            + str(line)
+                            + ": Impossible de rattacher le compte "
+                            + compte
+                            + "</li>"
+                        )
                     else:
-                        debit = float(row["Débit euro"].replace(",", "."))
-                        credit = float(row["Crédit euro"].replace(",", "."))
-                        if debit > 0 and credit > 0:
-                            logs += (
-                                "<li> Ligne " + str(line) + ": Montants incorrects</li>"
-                            )
+                        writing_date = parse(row["Date écriture"])
+                        libelle = row["Libellé écriture"]
+                        existing_import_line = self.env[model].search(
+                            [
+                                ["partner_id", "=", partner_id.id],
+                                ["writing_date", "=", writing_date],
+                                ["journal", "=", journal],
+                                ["name", "=", libelle],
+                            ]
+                        )
+                        if len(existing_import_line) > 0:
+                            logs += "<li> Ligne " + str(line) + ": Doublon</li>"
                         else:
-                            if journal == "VE" and debit > 0:
-                                line_type = "inv"
-                            elif journal == "BFC" and credit > 0:
-                                line_type = "pay"
-                            elif journal == "BFC" and debit > 0:
-                                line_type = "reject"
-                                credit = debit * (-1)
-                                debit = 0
+                            debit = float(row["Débit euro"].replace(",", "."))
+                            credit = float(row["Crédit euro"].replace(",", "."))
+                            if debit > 0 and credit > 0:
+                                logs += (
+                                    "<li> Ligne "
+                                    + str(line)
+                                    + ": Montants incorrects</li>"
+                                )
                             else:
-                                line_type = "refund"
-
-                            lettrage = row["Lettrage N"]
-                            year = row["Année"]
-                            acc_doc = row["Pièce"]
-
-                            values = {
-                                "company_id": company_id.id,
-                                "partner_id": partner_id.id,
-                                "journal": journal,
-                                "writing_date": writing_date,
-                                "acc_doc": acc_doc,
-                                "name": libelle,
-                                "year": year,
-                                "type": line_type,
-                                "lettrage": lettrage,
-                                "debit": debit,
-                                "credit": credit,
-                            }
-                            new_line = self.env[model].create(values)
-                            success += 1
-                            new_lines_years.add(new_line.year)
+                                if journal == "VE" and debit > 0:
+                                    line_type = "inv"
+                                elif journal == "BFC" and credit > 0:
+                                    line_type = "pay"
+                                elif journal == "BFC" and debit > 0:
+                                    line_type = "reject"
+                                    credit = debit * (-1)
+                                    debit = 0
+                                else:
+                                    line_type = "refund"
+
+                                lettrage = row["Lettrage N"]
+                                year = row["Année"]
+                                acc_doc = row["Pièce"]
+
+                                values = {
+                                    "company_id": company_id.id,
+                                    "partner_id": partner_id.id,
+                                    "journal": journal,
+                                    "writing_date": writing_date,
+                                    "acc_doc": acc_doc,
+                                    "name": libelle,
+                                    "year": year,
+                                    "type": line_type,
+                                    "lettrage": lettrage,
+                                    "debit": debit,
+                                    "credit": credit,
+                                }
+                                new_line = self.env[model].create(values)
+                                success += 1
+                                new_lines_years.add(new_line.year)
             logs += "</ul>"
 
         new_log.write(
-- 
GitLab