From 6c5f35c0124817a0a65620ce93b0bb028f19dd50 Mon Sep 17 00:00:00 2001
From: Juliana <juliana@le-filament.com>
Date: Tue, 25 Jul 2023 19:03:53 +0200
Subject: [PATCH] [UPD]Pre commit

---
 .copier-answers.yml                           |  24 +
 .editorconfig                                 |  20 +
 .eslintrc.yml                                 | 187 +++++++
 .flake8                                       |  12 +
 .gitignore                                    |  74 +++
 .isort.cfg                                    |  13 +
 .pre-commit-config.yaml                       | 128 +++++
 .prettierrc.yml                               |   8 +
 .pylintrc                                     | 123 +++++
 .pylintrc-mandatory                           |  98 ++++
 __init__.py                                   |   3 +-
 __manifest__.py                               |   4 +-
 .../__pycache__/__init__.cpython-310.pyc      | Bin 196 -> 0 bytes
 controllers/__pycache__/main.cpython-310.pyc  | Bin 2135 -> 0 bytes
 controllers/main.py                           |  11 +-
 models/__pycache__/__init__.cpython-310.pyc   | Bin 213 -> 0 bytes
 .../__pycache__/acc_operation.cpython-310.pyc | Bin 1159 -> 0 bytes
 models/acc_operation.py                       |   7 +-
 static/src/css/acc_style.scss                 |  30 +-
 static/src/js/canvas.js                       | 501 +++++++++---------
 templates/operation_templates_page.xml        | 113 ++--
 templates/portal_layout.xml                   |   2 +-
 22 files changed, 1034 insertions(+), 324 deletions(-)
 create mode 100644 .copier-answers.yml
 create mode 100644 .editorconfig
 create mode 100644 .eslintrc.yml
 create mode 100644 .flake8
 create mode 100644 .gitignore
 create mode 100644 .isort.cfg
 create mode 100644 .pre-commit-config.yaml
 create mode 100644 .prettierrc.yml
 create mode 100644 .pylintrc
 create mode 100644 .pylintrc-mandatory
 delete mode 100644 controllers/__pycache__/__init__.cpython-310.pyc
 delete mode 100644 controllers/__pycache__/main.cpython-310.pyc
 delete mode 100644 models/__pycache__/__init__.cpython-310.pyc
 delete mode 100644 models/__pycache__/acc_operation.cpython-310.pyc

diff --git a/.copier-answers.yml b/.copier-answers.yml
new file mode 100644
index 0000000..c13a05f
--- /dev/null
+++ b/.copier-answers.yml
@@ -0,0 +1,24 @@
+# Do NOT update manually; changes here will be overwritten by Copier
+_commit: v1.14.2
+_src_path: https://github.com/OCA/oca-addons-repo-template.git
+ci: false
+dependency_installation_mode: PIP
+generate_requirements_txt: false
+github_check_license: false
+github_ci_extra_env: {}
+github_enable_codecov: false
+github_enable_makepot: false
+github_enable_stale_action: false
+github_enforce_dev_status_compatibility: false
+include_wkhtmltopdf: false
+odoo_version: 16.0
+org_name: Le Filament
+org_slug: lefilament
+rebel_module_groups: []
+repo_description: null
+repo_name: Module Template
+repo_slug: template_module
+repo_website: https://le-filament.com 
+travis_apt_packages: []
+travis_apt_sources: []
+
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..bfd7ac5
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,20 @@
+# Configuration for known file extensions
+[*.{css,js,json,less,md,py,rst,sass,scss,xml,yaml,yml}]
+charset = utf-8
+end_of_line = lf
+indent_size = 4
+indent_style = space
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.{json,yml,yaml,rst,md}]
+indent_size = 2
+
+# Do not configure editor for libs and autogenerated content
+[{*/static/{lib,src/lib}/**,*/static/description/index.html,*/readme/../README.rst}]
+charset = unset
+end_of_line = unset
+indent_size = unset
+indent_style = unset
+insert_final_newline = false
+trim_trailing_whitespace = false
diff --git a/.eslintrc.yml b/.eslintrc.yml
new file mode 100644
index 0000000..9429bc6
--- /dev/null
+++ b/.eslintrc.yml
@@ -0,0 +1,187 @@
+env:
+  browser: true
+  es6: true
+
+# See https://github.com/OCA/odoo-community.org/issues/37#issuecomment-470686449
+parserOptions:
+  ecmaVersion: 2019
+
+overrides:
+  - files:
+      - "**/*.esm.js"
+    parserOptions:
+      sourceType: module
+
+# Globals available in Odoo that shouldn't produce errorings
+globals:
+  _: readonly
+  $: readonly
+  fuzzy: readonly
+  jQuery: readonly
+  moment: readonly
+  odoo: readonly
+  openerp: readonly
+  owl: readonly
+
+# Styling is handled by Prettier, so we only need to enable AST rules;
+# see https://github.com/OCA/maintainer-quality-tools/pull/618#issuecomment-558576890
+rules:
+  accessor-pairs: warn
+  array-callback-return: warn
+  callback-return: warn
+  capitalized-comments:
+    - warn
+    - always
+    - ignoreConsecutiveComments: true
+      ignoreInlineComments: true
+  complexity:
+    - warn
+    - 15
+  constructor-super: warn
+  dot-notation: warn
+  eqeqeq: warn
+  global-require: warn
+  handle-callback-err: warn
+  id-blacklist: warn
+  id-match: warn
+  init-declarations: error
+  max-depth: warn
+  max-nested-callbacks: warn
+  max-statements-per-line: warn
+  no-alert: warn
+  no-array-constructor: warn
+  no-caller: warn
+  no-case-declarations: warn
+  no-class-assign: warn
+  no-cond-assign: error
+  no-const-assign: error
+  no-constant-condition: warn
+  no-control-regex: warn
+  no-debugger: error
+  no-delete-var: warn
+  no-div-regex: warn
+  no-dupe-args: error
+  no-dupe-class-members: error
+  no-dupe-keys: error
+  no-duplicate-case: error
+  no-duplicate-imports: error
+  no-else-return: warn
+  no-empty-character-class: warn
+  no-empty-function: error
+  no-empty-pattern: error
+  no-empty: warn
+  no-eq-null: error
+  no-eval: error
+  no-ex-assign: error
+  no-extend-native: warn
+  no-extra-bind: warn
+  no-extra-boolean-cast: warn
+  no-extra-label: warn
+  no-fallthrough: warn
+  no-func-assign: error
+  no-global-assign: error
+  no-implicit-coercion:
+    - warn
+    - allow: ["~"]
+  no-implicit-globals: warn
+  no-implied-eval: warn
+  no-inline-comments: warn
+  no-inner-declarations: warn
+  no-invalid-regexp: warn
+  no-irregular-whitespace: warn
+  no-iterator: warn
+  no-label-var: warn
+  no-labels: warn
+  no-lone-blocks: warn
+  no-lonely-if: error
+  no-mixed-requires: error
+  no-multi-str: warn
+  no-native-reassign: error
+  no-negated-condition: warn
+  no-negated-in-lhs: error
+  no-new-func: warn
+  no-new-object: warn
+  no-new-require: warn
+  no-new-symbol: warn
+  no-new-wrappers: warn
+  no-new: warn
+  no-obj-calls: warn
+  no-octal-escape: warn
+  no-octal: warn
+  no-param-reassign: warn
+  no-path-concat: warn
+  no-process-env: warn
+  no-process-exit: warn
+  no-proto: warn
+  no-prototype-builtins: warn
+  no-redeclare: warn
+  no-regex-spaces: warn
+  no-restricted-globals: warn
+  no-restricted-imports: warn
+  no-restricted-modules: warn
+  no-restricted-syntax: warn
+  no-return-assign: error
+  no-script-url: warn
+  no-self-assign: warn
+  no-self-compare: warn
+  no-sequences: warn
+  no-shadow-restricted-names: warn
+  no-shadow: warn
+  no-sparse-arrays: warn
+  no-sync: warn
+  no-this-before-super: warn
+  no-throw-literal: warn
+  no-undef-init: warn
+  no-undef: error
+  no-unmodified-loop-condition: warn
+  no-unneeded-ternary: error
+  no-unreachable: error
+  no-unsafe-finally: error
+  no-unused-expressions: error
+  no-unused-labels: error
+  no-unused-vars: error
+  no-use-before-define: error
+  no-useless-call: warn
+  no-useless-computed-key: warn
+  no-useless-concat: warn
+  no-useless-constructor: warn
+  no-useless-escape: warn
+  no-useless-rename: warn
+  no-void: warn
+  no-with: warn
+  operator-assignment: [error, always]
+  prefer-const: warn
+  radix: warn
+  require-yield: warn
+  sort-imports: warn
+  spaced-comment: [error, always]
+  strict: [error, function]
+  use-isnan: error
+  valid-jsdoc:
+    - warn
+    - prefer:
+        arg: param
+        argument: param
+        augments: extends
+        constructor: class
+        exception: throws
+        func: function
+        method: function
+        prop: property
+        return: returns
+        virtual: abstract
+        yield: yields
+      preferType:
+        array: Array
+        bool: Boolean
+        boolean: Boolean
+        number: Number
+        object: Object
+        str: String
+        string: String
+      requireParamDescription: false
+      requireReturn: false
+      requireReturnDescription: false
+      requireReturnType: false
+  valid-typeof: warn
+  yoda: warn
diff --git a/.flake8 b/.flake8
new file mode 100644
index 0000000..e397e8e
--- /dev/null
+++ b/.flake8
@@ -0,0 +1,12 @@
+[flake8]
+max-line-length = 88
+max-complexity = 16
+# B = bugbear
+# B9 = bugbear opinionated (incl line length)
+select = C,E,F,W,B,B9
+# E203: whitespace before ':' (black behaviour)
+# E501: flake8 line length (covered by bugbear B950)
+# W503: line break before binary operator (black behaviour)
+ignore = E203,E501,W503
+per-file-ignores=
+    __init__.py:F401
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9c283fd
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,74 @@
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+/.venv
+/.pytest_cache
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+env/
+bin/
+build/
+develop-eggs/
+dist/
+eggs/
+lib64/
+parts/
+sdist/
+var/
+*.egg-info/
+.installed.cfg
+*.egg
+*.eggs
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.coverage
+.cache
+nosetests.xml
+coverage.xml
+
+# Translations
+*.mo
+
+# Pycharm
+.idea
+
+# Eclipse
+.settings
+
+# Visual Studio cache/options directory
+.vs/
+.vscode
+
+# OSX Files
+.DS_Store
+
+# Django stuff:
+*.log
+
+# Mr Developer
+.mr.developer.cfg
+.project
+.pydevproject
+
+# Rope
+.ropeproject
+
+# Sphinx documentation
+docs/_build/
+
+# Backup files
+*~
+*.swp
+
+# OCA rules
+!static/lib/
diff --git a/.isort.cfg b/.isort.cfg
new file mode 100644
index 0000000..0ec187e
--- /dev/null
+++ b/.isort.cfg
@@ -0,0 +1,13 @@
+[settings]
+; see https://github.com/psf/black
+multi_line_output=3
+include_trailing_comma=True
+force_grid_wrap=0
+combine_as_imports=True
+use_parentheses=True
+line_length=88
+known_odoo=odoo
+known_odoo_addons=odoo.addons
+sections=FUTURE,STDLIB,THIRDPARTY,ODOO,ODOO_ADDONS,FIRSTPARTY,LOCALFOLDER
+default_section=THIRDPARTY
+ensure_newline_before_comments = True
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
new file mode 100644
index 0000000..10acf1e
--- /dev/null
+++ b/.pre-commit-config.yaml
@@ -0,0 +1,128 @@
+exclude: |
+  (?x)
+  # NOT INSTALLABLE ADDONS
+  # END NOT INSTALLABLE ADDONS
+  # Files and folders generated by bots, to avoid loops
+  ^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
+  ^docs/_templates/.*\.html$|
+  # You don't usually want a bot to modify your legal texts
+  (LICENSE.*|COPYING.*)
+default_language_version:
+  python: python3
+  node: "16.17.0"
+repos:
+  - repo: local
+    hooks:
+      # These files are most likely copier diff rejection junks; if found,
+      # review them manually, fix the problem (if needed) and remove them
+      - id: forbidden-files
+        name: forbidden files
+        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: 4cd2b852214dead80822e93e6749b16f2785b2fe
+    hooks:
+      # update the NOT INSTALLABLE ADDONS section above
+      - id: oca-update-pre-commit-excluded-addons
+      - id: oca-fix-manifest-website
+        args: ["https://le-filament.com"]
+  - repo: https://github.com/myint/autoflake
+    rev: v1.6.1
+    hooks:
+      - id: autoflake
+        args:
+          - --expand-star-imports
+          - --ignore-init-module-imports
+          - --in-place
+          - --remove-all-unused-imports
+          - --remove-duplicate-keys
+          - --remove-unused-variables
+  - repo: https://github.com/psf/black
+    rev: 22.8.0
+    hooks:
+      - id: black
+  - repo: https://github.com/pre-commit/mirrors-prettier
+    rev: v2.7.1
+    hooks:
+      - id: prettier
+        name: prettier (with plugin-xml)
+        additional_dependencies:
+          - "prettier@2.7.1"
+          - "@prettier/plugin-xml@2.2.0"
+        args:
+          - --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.24.0
+    hooks:
+      - id: eslint
+        verbose: true
+        args:
+          - --color
+          - --fix
+  - repo: https://github.com/pre-commit/pre-commit-hooks
+    rev: v4.3.0
+    hooks:
+      - id: trailing-whitespace
+        # exclude autogenerated files
+        exclude: /README\.rst$|\.pot?$
+      - id: end-of-file-fixer
+        # exclude autogenerated files
+        exclude: /README\.rst$|\.pot?$
+      - id: debug-statements
+      - id: fix-encoding-pragma
+        args: ["--remove"]
+      - id: check-case-conflict
+      - id: check-docstring-first
+      - id: check-executables-have-shebangs
+      - id: check-merge-conflict
+        # exclude files where underlines are not distinguishable from merge conflicts
+        exclude: /README\.rst$|^docs/.*\.rst$
+      - id: check-symlinks
+      - id: check-xml
+      - id: mixed-line-ending
+        args: ["--fix=lf"]
+  - repo: https://github.com/asottile/pyupgrade
+    rev: v2.38.2
+    hooks:
+      - id: pyupgrade
+        args: ["--keep-percent-format"]
+  - repo: https://github.com/PyCQA/isort
+    rev: 5.12.0
+    hooks:
+      - id: isort
+        name: isort except __init__.py
+        args:
+          - --settings=.
+        exclude: /__init__\.py$
+  - repo: https://github.com/PyCQA/flake8
+    rev: 3.9.2
+    hooks:
+      - id: flake8
+        name: flake8
+        additional_dependencies: ["flake8-bugbear==21.9.2"]
+  - repo: https://github.com/OCA/pylint-odoo
+    rev: 7.0.2
+    hooks:
+      - id: pylint_odoo
+        name: pylint with optional checks
+        args:
+          - --rcfile=.pylintrc
+          - --exit-zero
+        verbose: true
+      - id: pylint_odoo
+        args:
+          - --rcfile=.pylintrc-mandatory
diff --git a/.prettierrc.yml b/.prettierrc.yml
new file mode 100644
index 0000000..5b6d4b3
--- /dev/null
+++ b/.prettierrc.yml
@@ -0,0 +1,8 @@
+# Defaults for all prettier-supported languages.
+# Prettier will complete this with settings from .editorconfig file.
+bracketSpacing: false
+printWidth: 88
+proseWrap: always
+semi: true
+trailingComma: "es5"
+xmlWhitespaceSensitivity: "strict"
diff --git a/.pylintrc b/.pylintrc
new file mode 100644
index 0000000..71c476d
--- /dev/null
+++ b/.pylintrc
@@ -0,0 +1,123 @@
+
+
+[MASTER]
+load-plugins=pylint_odoo
+score=n
+
+[ODOOLINT]
+readme_template_url="https://github.com/OCA/maintainer-tools/blob/master/template/module/README.rst"
+manifest_required_authors=Le Filament
+manifest_required_keys=license
+manifest_deprecated_keys=description,active
+license_allowed=AGPL-3,GPL-2,GPL-2 or any later version,GPL-3,GPL-3 or any later version,LGPL-3
+valid_odoo_versions=16.0
+
+[MESSAGES CONTROL]
+disable=all
+
+# This .pylintrc contains optional AND mandatory checks and is meant to be
+# loaded in an IDE to have it check everything, in the hope this will make
+# optional checks more visible to contributors who otherwise never look at a
+# green travis to see optional checks that failed.
+# .pylintrc-mandatory containing only mandatory checks is used the pre-commit
+# config as a blocking check.
+
+enable=anomalous-backslash-in-string,
+    api-one-deprecated,
+    api-one-multi-together,
+    assignment-from-none,
+    attribute-deprecated,
+    class-camelcase,
+    dangerous-default-value,
+    dangerous-view-replace-wo-priority,
+    development-status-allowed,
+    duplicate-id-csv,
+    duplicate-key,
+    duplicate-xml-fields,
+    duplicate-xml-record-id,
+    eval-referenced,
+    eval-used,
+    incoherent-interpreter-exec-perm,
+    license-allowed,
+    manifest-author-string,
+    manifest-deprecated-key,
+    manifest-required-author,
+    manifest-required-key,
+    manifest-version-format,
+    method-compute,
+    method-inverse,
+    method-required-super,
+    method-search,
+    openerp-exception-warning,
+    pointless-statement,
+    pointless-string-statement,
+    print-used,
+    redundant-keyword-arg,
+    redundant-modulename-xml,
+    reimported,
+    relative-import,
+    return-in-init,
+    rst-syntax-error,
+    sql-injection,
+    too-few-format-args,
+    translation-field,
+    translation-required,
+    unreachable,
+    use-vim-comment,
+    wrong-tabs-instead-of-spaces,
+    xml-syntax-error,
+    attribute-string-redundant,
+    character-not-valid-in-resource-link,
+    consider-merging-classes-inherited,
+    context-overridden,
+    create-user-wo-reset-password,
+    dangerous-filter-wo-user,
+    dangerous-qweb-replace-wo-priority,
+    deprecated-data-xml-node,
+    deprecated-openerp-xml-node,
+    duplicate-po-message-definition,
+    except-pass,
+    file-not-used,
+    invalid-commit,
+    manifest-maintainers-list,
+    missing-newline-extrafiles,
+    missing-readme,
+    missing-return,
+    odoo-addons-relative-import,
+    old-api7-method-defined,
+    po-msgstr-variables,
+    po-syntax-error,
+    renamed-field-parameter,
+    resource-not-exist,
+    str-format-used,
+    test-folder-imported,
+    translation-contains-variable,
+    translation-positional-used,
+    unnecessary-utf8-coding-comment,
+    website-manifest-key-not-valid-uri,
+    xml-attribute-translatable,
+    xml-deprecated-qweb-directive,
+    xml-deprecated-tree-attribute,
+    external-request-timeout,
+    # messages that do not cause the lint step to fail
+    consider-merging-classes-inherited,
+    create-user-wo-reset-password,
+    dangerous-filter-wo-user,
+    deprecated-module,
+    file-not-used,
+    invalid-commit,
+    missing-manifest-dependency,
+    missing-newline-extrafiles,
+    missing-readme,
+    no-utf8-coding-comment,
+    odoo-addons-relative-import,
+    old-api7-method-defined,
+    redefined-builtin,
+    too-complex,
+    unnecessary-utf8-coding-comment
+
+
+[REPORTS]
+msg-template={path}:{line}: [{msg_id}({symbol}), {obj}] {msg}
+output-format=colorized
+reports=no
diff --git a/.pylintrc-mandatory b/.pylintrc-mandatory
new file mode 100644
index 0000000..ed2c217
--- /dev/null
+++ b/.pylintrc-mandatory
@@ -0,0 +1,98 @@
+
+[MASTER]
+load-plugins=pylint_odoo
+score=n
+
+[ODOOLINT]
+readme_template_url="https://github.com/OCA/maintainer-tools/blob/master/template/module/README.rst"
+manifest_required_authors=Le Filament
+manifest_required_keys=license
+manifest_deprecated_keys=description,active
+license_allowed=AGPL-3,GPL-2,GPL-2 or any later version,GPL-3,GPL-3 or any later version,LGPL-3
+valid_odoo_versions=16.0
+
+[MESSAGES CONTROL]
+disable=all
+
+enable=anomalous-backslash-in-string,
+    api-one-deprecated,
+    api-one-multi-together,
+    assignment-from-none,
+    attribute-deprecated,
+    class-camelcase,
+    dangerous-default-value,
+    dangerous-view-replace-wo-priority,
+    development-status-allowed,
+    duplicate-id-csv,
+    duplicate-key,
+    duplicate-xml-fields,
+    duplicate-xml-record-id,
+    eval-referenced,
+    eval-used,
+    incoherent-interpreter-exec-perm,
+    license-allowed,
+    manifest-author-string,
+    manifest-deprecated-key,
+    manifest-required-author,
+    manifest-required-key,
+    manifest-version-format,
+    method-compute,
+    method-inverse,
+    method-required-super,
+    method-search,
+    openerp-exception-warning,
+    pointless-statement,
+    pointless-string-statement,
+    print-used,
+    redundant-keyword-arg,
+    redundant-modulename-xml,
+    reimported,
+    relative-import,
+    return-in-init,
+    rst-syntax-error,
+    sql-injection,
+    too-few-format-args,
+    translation-field,
+    translation-required,
+    unreachable,
+    use-vim-comment,
+    wrong-tabs-instead-of-spaces,
+    xml-syntax-error,
+    attribute-string-redundant,
+    character-not-valid-in-resource-link,
+    consider-merging-classes-inherited,
+    context-overridden,
+    create-user-wo-reset-password,
+    dangerous-filter-wo-user,
+    dangerous-qweb-replace-wo-priority,
+    deprecated-data-xml-node,
+    deprecated-openerp-xml-node,
+    duplicate-po-message-definition,
+    except-pass,
+    file-not-used,
+    invalid-commit,
+    manifest-maintainers-list,
+    missing-newline-extrafiles,
+    missing-readme,
+    missing-return,
+    odoo-addons-relative-import,
+    old-api7-method-defined,
+    po-msgstr-variables,
+    po-syntax-error,
+    renamed-field-parameter,
+    resource-not-exist,
+    str-format-used,
+    test-folder-imported,
+    translation-contains-variable,
+    translation-positional-used,
+    unnecessary-utf8-coding-comment,
+    website-manifest-key-not-valid-uri,
+    xml-attribute-translatable,
+    xml-deprecated-qweb-directive,
+    xml-deprecated-tree-attribute,
+    external-request-timeout
+
+[REPORTS]
+msg-template={path}:{line}: [{msg_id}({symbol}), {obj}] {msg}
+output-format=colorized
+reports=no
diff --git a/__init__.py b/__init__.py
index 6ea0080..09e3e28 100644
--- a/__init__.py
+++ b/__init__.py
@@ -1,5 +1,4 @@
 # Copyright 2023 Le Filament (https://le-filament.com)
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
 
-from . import controllers
-from . import models
+from . import controllers, models
diff --git a/__manifest__.py b/__manifest__.py
index 69db56a..3fbb491 100644
--- a/__manifest__.py
+++ b/__manifest__.py
@@ -21,8 +21,8 @@
     "installable": True,
     "auto_install": False,
     "assets": {
-        'web.assets_frontend': [
-            'oacc_portal_overview_cdc/static/src/js/canvas.js',
+        "web.assets_frontend": [
+            "oacc_portal_overview_cdc/static/src/js/canvas.js",
         ],
     },
 }
diff --git a/controllers/__pycache__/__init__.cpython-310.pyc b/controllers/__pycache__/__init__.cpython-310.pyc
deleted file mode 100644
index dde1548f3599afcec4ab823d5d8aa68f529396b6..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 196
zcmd1j<>g{vU|`U@xh!QW0|Ucj5C<7EF)%PVFfcF_3otM+q%fo~<}l<kMlmunq%Z|D
zXfnTKWME*>WW2?ao0ysBr^$4Sp$Md7B|{Ml0|SKk<)t55oLW?@pH+}wnv!3tpP!PS
z4<-!F^pi`AOY(E|^AnSk!9;vPeo;wcj(&1}UP)1YP7X+4e0*kJW=VX!UP0w84x8Nk
Ql+v73JCMD_AgctJ0ddYSrT_o{

diff --git a/controllers/__pycache__/main.cpython-310.pyc b/controllers/__pycache__/main.cpython-310.pyc
deleted file mode 100644
index 4d415a7cce5c94f1d2b01d25fefadcbf37204d2f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2135
zcmd1j<>g{vU|{(6aDPe-9|OZ<5C<8vFfcGUFfcF_yD%^?q%fo~<}l<kMlmvi*i1Q0
zxy(__U^a6OOD<~^E11oa!<Ne)#m>m!&XB^I!q&o&!j{U~%pAp<!XC_^$?+0oz9!=>
zmW+~;0!_wS>_w@CrK!awnvA#joJ)&K@^e#*0`iMW5_2>eZwX`;$CnnT7R6`gm82Hs
zCFUf9bR%Onm<tma7#LC+q8L*cqL@;dvsh9X(-~8kQkYX%QdoOgQrJ@1TNs)dqgcUm
z94K;}DO_MVHn1EwiX2Z0FIbK}g)f*vlfMWQB2|X^`30#(i6xo&dHOcF`6;P68cK=D
z$$D^6B~2?h+fKhAH@}F9fq~%`3&<}an#{LYN-7IdZ?PnnmSo&wFHcP>&MZky1}TAg
zjgx_aft!JW!JC1B;d2oK14AZ5EprXy0)`aEg^V#wwJf!)U>*~g$5zW;!@htqg?S-k
zEqe{)0;YuwwH!4ZP!WzA<^>?VEDISHGBPqicr}bEEHx}OtTh}p>?w>XtaCU(awV(_
z*izVPm=`hyGib8=-C`+EP0hZ=oRV1ii$gU<Uo}@>HS!j7L2mv^j$52?AKv25P0Y-T
z&rixqO)j~`S&*2X8lRV#n|g~YC9xzmzPKc@sN@z0n4OxJ0%hf9=D}Er6}MQ6lM{1N
ztJLxnlau2Mz|kL{UzS=_mYG@}pPYgewDBO@*>CZrr<TO$Bo>#%rzBS1;wUaDN-N3C
zO})hn5>Lx4f=aNJ7J%%%B?=NQOUx-vEsoF3%PfgcFG?)PC}IZ13R_WXUP@}wO3qs>
z#i==IMFJo}rtI=tyby_ah`u6W1_p*A5s)OrFDa=>MPeW^Q3eKvl?+8H3=9mvg7rg-
zQ;UlAvkLM{Q}Rpo^HcKk!Gxiielj?D>x29VCa`%_KRG|Iq$ocp2V@8+SoI1ji})BA
z82CXcL5+cdfrX2YiI0hkk%N(ok&lUmiHV7c5gD@lVENC(TP1{=ne+;B^Q+8AOSj4S
zdBvr<sYNI$6I5XEKvQOM19ej-V-_g=u`Fb)<pifv&KkxV#uQehbjmh|6P!-j7jUGo
zL(?gTUlAy)6oFh-#0!cau7bp(k~~nckrKrU@<qNTXA~!h0rE~UIEIS^K~X0JBH$5Q
z1d2&WoQg9rFjQ%Sq6%9qA#!>=%v4RzB1w>8QXoPaM96>$S&(}KK&d(<H7BzywWu;a
zGo|<zTW(@OL23#(0T#(IFfeFx6)Aw!gA!knB8a5~A`nhf265rZEs6(bFUUA>(t{AH
zAp1CAlE$F2TMHx6@L)+cOpGkwS^o3zRf(e|9GF>E=A@;bf};GC(&UnS)a1j7RIn9+
z(vl`SM)a|Ov=)I9e3cFnF#u8xwx~z~6h`tO0+bh#0)!K;CJH1A%0^WZX#RvN@zdnE
z#SsrK!Q$g@amB~y=BJeAq{heJ;)#zhEKSS-m2L6ykRqM6D8IBM6`VthKmlE(1F`^N
zJ(vZG6mZP}N}a_<3=9k$4B(9WpNSciby<FKaj?iRF)<<Y<&pV(9ANz*r?G&F6o}=V
zAf_IuA_XU;C=D<_F(oBGuUHQ$<n)jV6+KX)0yZp45m|Y8Y7&aF(vr-a;v!ZYzPZH#
as`pBBQtcQ)NemQ`Jj^_dJj^^yBFq3iOEo$G

diff --git a/controllers/main.py b/controllers/main.py
index 45e3d3b..35ddb40 100644
--- a/controllers/main.py
+++ b/controllers/main.py
@@ -7,11 +7,8 @@ from odoo.http import request
 # from odoo.addons.portal.controllers.portal import CustomerPortal as CustomerPortal
 from odoo.addons.oacc_portal.controllers.main import CustomerPortal as CustomerPortal
 
-from odoo.addons.web.controllers.utils import is_user_internal
-
 
 class CustomerPortal(CustomerPortal):
-
     @http.route(
         [
             '/operation/<model("acc.operation"):operation>/pmo',
@@ -85,7 +82,9 @@ class CustomerPortal(CustomerPortal):
             }
         )
 
-        return request.render("oacc_portal_overview_cdc.operation_consumer", render_values)
+        return request.render(
+            "oacc_portal_overview_cdc.operation_consumer", render_values
+        )
 
     @http.route(
         [
@@ -121,4 +120,6 @@ class CustomerPortal(CustomerPortal):
             }
         )
 
-        return request.render("oacc_portal_overview_cdc.operation_productor", render_values)
+        return request.render(
+            "oacc_portal_overview_cdc.operation_productor", render_values
+        )
diff --git a/models/__pycache__/__init__.cpython-310.pyc b/models/__pycache__/__init__.cpython-310.pyc
deleted file mode 100644
index c87b3b9315c9a2c142e8727bd002fdf357b83d5d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 213
zcmd1j<>g{vU|^8nw?AbD0|Ucj5C<7EF)%PVFfcF_3otM+q%fo~<}l<kMlmunq%Z|D
zXfnTKWME*>WW2?jn4BD+UyxdqSdy8a=cmbZi=halbtOX)3j+g$_!XodTAW%`te;ho
zUz(C%s-K^dpARMs&GeH?i%arz_45;xlfguML4Hw5VorR1S!z*PW@>qSa!Rs(ZhlH?
kPO*M`d}dx|NqoFsLFFwDo80`A(wtN~kVA?=Rthi!0CPe&hX4Qo

diff --git a/models/__pycache__/acc_operation.cpython-310.pyc b/models/__pycache__/acc_operation.cpython-310.pyc
deleted file mode 100644
index c9cfd1704e44c5c9d66e4eb29f1bc7ccebe9eb98..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1159
zcmd1j<>g{vU|=XXzCXp6hk@ZSh=Yt-7#J8F7#J9ewHO!}QW#Pga~N_NqZo6UqL^}-
zqnH^P+!<1sQkYv9QkYYjvRIm#qgYc|f*CYfUxG~0WWL3gmYJH9QhbXoH$Npcr}!3g
zVnJpyNDdh@!EBLWU|>jPh+<4(h+;}%jADkE9mN7M^A?X|a<YFxYEfcIW`153Z(?$?
zUOtSQ%!p*7AOiyfCj$e6Gsx-N7#J987#1)rWME{-WT<7VVOYSJ!nlwzhN+gRmbr#$
z0aFUoLdIIA8fGYq8LWaCtb(PMwT1;M&Qik)WwC-)uz*#t)w0*HLB-i>*r6<TunJbN
z3XWRN8V;y9M-3;G#aY8t!(78s!&<{u!(PKt!<oW1hohFOhO34#h24gshB25ylf&;8
zb4p@m6^Cl1u4=BXYRWB^^3>GqTdcYHc_kUQSSnK!i!?cI@ueh|q{gQtR>l{XBo>w2
z;(_y1^HOf{gLxo*P-$L-07zZ{%mteWRRA#$A_7tYF#%*5Q~|^UumDJ&J0-CsF}^G@
zr!=)#ljRmyYF=?^QEGgCUg|BL^wg60oW$Z1kn?VF6qgjGm1O3o-r@y`r)3sFBs2wY
zu@tA~q}^hJ7*YgEl||eP3=Bm)Ac7Y}@PP<^5Fr2}Kyh3o#K6FCiwo=lh}Sv5Y>=ZM
ztd!KGTM$-mVg-zqnRkn&EHS5eB}0)s0|UdaaQ)EY)S_bjtb+W~l>Act{FMBBFkxt>
zpIlm8lAo)epO~BsCgKb7i%Jr6;`7T=i^?)n%j1(%lJy~pTR$;5IUb%M^$IF)iGq9y
z@lt$dUS>&rdQoCQh9)Rg8Zj_1a4@kj@iB5SaxwBTaWSEiOw3G-$dK&^2R932l@f9m
z(8FrHpC;=qj`;Yz#N5>Q_*-1@@wxdar8yurPkek~X<`mkh9f>RFC(=mv!qB76rS>^
zgaU}m%D}+D4stCU$h8bCj68}(ATd8pwp%QqP$~jt-6Cd?T2N7Oi`5sD&B1EGL5oCy
W47|l*196NUD7O}aw1_Z^F#`a|<vu9@

diff --git a/models/acc_operation.py b/models/acc_operation.py
index 0f2bf2d..6c6c6a7 100644
--- a/models/acc_operation.py
+++ b/models/acc_operation.py
@@ -1,11 +1,11 @@
 # Copyright 2023 Le Filament (<http://www.le-filament.com>)
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
 
-from odoo import fields, models, api
+from odoo import models
 
 
 class AccOperation(models.Model):
-    _inherit = 'acc.operation'
+    _inherit = "acc.operation"
 
     # ------------------------------------------------------
     # Fields declaration
@@ -76,7 +76,6 @@ class AccOperation(models.Model):
         values["data_values"] = data_values
         return values
 
-
         date_start, date_end = self.get_last_day("week")
 
         date_deb, date_max = self.get_last_day("day")
@@ -90,4 +89,4 @@ class AccOperation(models.Model):
             "date_start": date_start,
         }
 
-        return vals
\ No newline at end of file
+        return vals
diff --git a/static/src/css/acc_style.scss b/static/src/css/acc_style.scss
index bb0b829..52ccce8 100644
--- a/static/src/css/acc_style.scss
+++ b/static/src/css/acc_style.scss
@@ -10,31 +10,31 @@ Commons
 }
 
 .tooltip-oacc {
-  position: relative;
-  display: inline-block;
+    position: relative;
+    display: inline-block;
 }
 
 .tooltip-oacc .tooltiptext {
-  visibility: hidden;
-  width: 200px;
-  background-color: black;
-  color: #fff;
-  text-align: center;
-  border-radius: 6px;
-  padding: 5px 10px;
+    visibility: hidden;
+    width: 200px;
+    background-color: black;
+    color: #fff;
+    text-align: center;
+    border-radius: 6px;
+    padding: 5px 10px;
 
-  /* Position the tooltip */
-  position: absolute;
-  z-index: 1;
+    /* Position the tooltip */
+    position: absolute;
+    z-index: 1;
 }
 
 .tooltip-oacc .tooltiptext {
-  top: -5px;
-  right: 105%;
+    top: -5px;
+    right: 105%;
 }
 
 .tooltip-oacc:hover .tooltiptext {
-  visibility: visible;
+    visibility: visible;
 }
 
 /**************************
diff --git a/static/src/js/canvas.js b/static/src/js/canvas.js
index 1bd6372..33aba79 100644
--- a/static/src/js/canvas.js
+++ b/static/src/js/canvas.js
@@ -1,265 +1,260 @@
-odoo.define('oacc_portal_overview_cdc.canvas', function (require) {
-'use strict';
+odoo.define("oacc_portal_overview_cdc.canvas", function (require) {
+    "use strict";
 
-var core = require('web.core');
-const rpc = require("web.rpc");
-var publicWidget = require('web.public.widget');
+    var core = require("web.core");
+    var publicWidget = require("web.public.widget");
 
-var _t = core._t;
-var concurrency = require('web.concurrency');
-var dp = new concurrency.DropPrevious();
+    var concurrency = require("web.concurrency");
 
-publicWidget.registry.oaccPortalOverviewCdc = publicWidget.Widget.extend({
-    jsLibs: [
-        '/web/static/lib/Chart/Chart.js',
-    ],
-    selector: '.oe_website_canvas',
-    events: {
-//        'change select[name="shipping_id"]': '_onSetAddress',
-        'click .btn-period': '_onBtnPeriodClick',
-    },
+    publicWidget.registry.oaccPortalOverviewCdc = publicWidget.Widget.extend({
+        jsLibs: ["/web/static/lib/Chart/Chart.js"],
+        selector: ".oe_website_canvas",
+        events: {
+            //        'change select[name="shipping_id"]': '_onSetAddress',
+            "click .btn-period": "_onBtnPeriodClick",
+        },
 
-    /**
-     * @constructor
-     */
-    init: function (parent, options) {
-        this._super.apply(this, arguments);
-        this.scale = "week";
-        this.minDate = null;
-        this.maxDate = null;
-//        console.log("---- INIT -----");
-//        console.log(this);
-//        console.log("parent");
-//        console.log(parent);
-//        console.log("options");
-//        console.log(options);
-//        this._rpc({
-//            model: 'acc.operation',
-//            method: 'get_values_init_graph',
-//            args: [some, args],
-//        });
-    },
+        /**
+         * @class
+         */
+        init: function () {
+            this._super.apply(this, arguments);
+            this.scale = "week";
+            this.minDate = null;
+            this.maxDate = null;
+            //        Console.log("---- INIT -----");
+            //        console.log(this);
+            //        console.log("parent");
+            //        console.log(parent);
+            //        console.log("options");
+            //        console.log(options);
+            //        this._rpc({
+            //            model: 'acc.operation',
+            //            method: 'get_values_init_graph',
+            //            args: [some, args],
+            //        });
+        },
 
-    /**
-     * @override
-     */
-     start: function () {
-        var self = this;
-        console.log("---- START -----");
-        console.log(self);
-        return this._super().then(function () {
-//            self.render_dashboards();
-            self.render_graphs();
-//            self.$el.parent().addClass('oe_background_grey');
-        });
+        /**
+         * @override
+         */
+        start: function () {
+            var self = this;
+            console.log("---- START -----");
+            console.log(self);
+            return this._super().then(function () {
+                //            Self.render_dashboards();
+                self.render_graphs();
+                //            Self.$el.parent().addClass('oe_background_grey');
+            });
+        },
+        render_graphs: function () {
+            var self = this;
+            self.render_line_graph();
+            //        Self.render_donuts_graph();
+            //        self.render_histo_graph();
+        },
 
-    },
-    render_graphs: function () {
-        var self = this;
-        self.render_line_graph();
-//        self.render_donuts_graph();
-//        self.render_histo_graph();
-    },
+        render_line_graph: function () {
+            var self = this;
+            var ctx_line_conso = self.$(".line_chart_conso");
+            var ctx_line_prod = self.$(".line_chart_prod");
+            var ctx_donuts_conso = self.$(".donuts_chart_conso");
+            var ctx_donuts_prod = self.$(".donuts_chart_prod");
+            var ctx_histo_conso = self.$(".histo_chart_conso");
+            var ctx_histo_prod = self.$(".histo_chart_prod");
+            this._rpc({
+                model: "acc.operation",
+                method: "graph_view_global",
+                args: [1, self.scale, "2023-02-01", "2023-03-01"],
+            }).then(function (chart_data) {
+                var chart_line_conso = new Chart(
+                    ctx_line_conso,
+                    chart_data.line_chart_conso_line
+                );
+                var chart_donuts_conso = new Chart(
+                    ctx_donuts_conso,
+                    chart_data.donuts_chart_conso
+                );
+                var chart_histo_conso = new Chart(
+                    ctx_histo_conso,
+                    chart_data.histo_chart_conso
+                );
+                var chart_line_prod = new Chart(
+                    ctx_line_prod,
+                    chart_data.line_chart_prod_line
+                );
+                var chart_donuts_prod = new Chart(
+                    ctx_donuts_prod,
+                    chart_data.donuts_chart_prod
+                );
+                var chart_histo_prod = new Chart(
+                    ctx_histo_prod,
+                    chart_data.histo_chart_prod
+                );
+            });
+        },
+        //    Start: function () {
+        //        console.log("TEST");
+        //        var self = this;
+        // //        var $carriers = $('#delivery_carrier input[name="delivery_type"]');
+        // //        var $payButton = $('button[name="o_payment_submit_button"]');
+        // //        // Workaround to:
+        // //        // - update the amount/error on the label at first rendering
+        // //        // - prevent clicking on 'Pay Now' if the shipper rating fails
+        // //        if ($carriers.length > 0) {
+        // //            if ($carriers.filter(':checked').length === 0) {
+        // //                $payButton.prop('disabled', true);
+        // //                var disabledReasons = $payButton.data('disabled_reasons') || {};
+        // //                disabledReasons.carrier_selection = true;
+        // //                $payButton.data('disabled_reasons', disabledReasons);
+        // //            }
+        // //            $carriers.filter(':checked').click();
+        // //        }
+        // //
+        // //        // Asynchronously retrieve every carrier price
+        // //        _.each($carriers, function (carrierInput, k) {
+        // //            self._showLoading($(carrierInput));
+        // //            self._rpc({
+        // //                route: '/shop/carrier_rate_shipment',
+        // //                params: {
+        // //                    'carrier_id': carrierInput.value,
+        // //                },
+        // //            }).then(self._handleCarrierUpdateResultBadge.bind(self));
+        // //        });
+        //
+        //        return this._super.apply(this, arguments);
+        //    },
 
-    render_line_graph: function () {
-        var self = this;
-        var ctx_line_conso = self.$(".line_chart_conso");
-        var ctx_line_prod = self.$(".line_chart_prod");
-        var ctx_donuts_conso = self.$(".donuts_chart_conso");
-        var ctx_donuts_prod = self.$(".donuts_chart_prod");
-        var ctx_histo_conso = self.$(".histo_chart_conso");
-        var ctx_histo_prod = self.$(".histo_chart_prod");
-        this._rpc({
-            model: "acc.operation",
-            method: "graph_view_global",
-            args: [
-                1,
-                self.scale,
-                "2023-02-01",
-                "2023-03-01",
-            ],
-        }).then(function (chart_data) {
-            var chart_line_conso = new Chart(ctx_line_conso,
-                chart_data.line_chart_conso_line
-            );
-            var chart_donuts_conso = new Chart(ctx_donuts_conso,
-                chart_data.donuts_chart_conso
-            );
-            var chart_histo_conso = new Chart(ctx_histo_conso,
-                chart_data.histo_chart_conso);
-            var chart_line_prod = new Chart(ctx_line_prod,
-                chart_data.line_chart_prod_line
-            );
-            var chart_donuts_prod = new Chart(ctx_donuts_prod,
-                chart_data.donuts_chart_prod
-            );
-            var chart_histo_prod = new Chart(ctx_histo_prod,
-                chart_data.histo_chart_prod);
-        });
-    },
-//    start: function () {
-//        console.log("TEST");
-//        var self = this;
-////        var $carriers = $('#delivery_carrier input[name="delivery_type"]');
-////        var $payButton = $('button[name="o_payment_submit_button"]');
-////        // Workaround to:
-////        // - update the amount/error on the label at first rendering
-////        // - prevent clicking on 'Pay Now' if the shipper rating fails
-////        if ($carriers.length > 0) {
-////            if ($carriers.filter(':checked').length === 0) {
-////                $payButton.prop('disabled', true);
-////                var disabledReasons = $payButton.data('disabled_reasons') || {};
-////                disabledReasons.carrier_selection = true;
-////                $payButton.data('disabled_reasons', disabledReasons);
-////            }
-////            $carriers.filter(':checked').click();
-////        }
-////
-////        // Asynchronously retrieve every carrier price
-////        _.each($carriers, function (carrierInput, k) {
-////            self._showLoading($(carrierInput));
-////            self._rpc({
-////                route: '/shop/carrier_rate_shipment',
-////                params: {
-////                    'carrier_id': carrierInput.value,
-////                },
-////            }).then(self._handleCarrierUpdateResultBadge.bind(self));
-////        });
-//
-//        return this._super.apply(this, arguments);
-//    },
+        // --------------------------------------------------------------------------
+        // Private
+        // --------------------------------------------------------------------------
 
-    //--------------------------------------------------------------------------
-    // Private
-    //--------------------------------------------------------------------------
+        /**
+         * @private
+         * @param {jQuery} $carrierInput
+         */
+        //    _showLoading: function ($carrierInput) {
+        //        $carrierInput.siblings('.o_wsale_delivery_badge_price').empty();
+        //        $carrierInput.siblings('.o_wsale_delivery_badge_price').append('<span class="fa fa-circle-o-notch fa-spin"/>');
+        //    },
+        /**
+         * Update the total cost according to the selected shipping method
+         *
+         * @private
+         * @param {float} amount : The new total amount of to be paid
+         */
+        //    _updateShippingCost: function(amount){
+        //        core.bus.trigger('update_shipping_cost', amount);
+        //    },
+        /**
+         * @private
+         * @param {Object} result
+         */
+        //    _handleCarrierUpdateResult: function (result) {
+        //        this._handleCarrierUpdateResultBadge(result);
+        //        var $payButton = $('button[name="o_payment_submit_button"]');
+        //        var $amountDelivery = $('#order_delivery .monetary_field');
+        //        var $amountUntaxed = $('#order_total_untaxed .monetary_field');
+        //        var $amountTax = $('#order_total_taxes .monetary_field');
+        //        var $amountTotal = $('#order_total .monetary_field, #amount_total_summary.monetary_field');
+        //
+        //        if (result.status === true) {
+        //            $amountDelivery.html(result.new_amount_delivery);
+        //            $amountUntaxed.html(result.new_amount_untaxed);
+        //            $amountTax.html(result.new_amount_tax);
+        //            $amountTotal.html(result.new_amount_total);
+        //            var disabledReasons = $payButton.data('disabled_reasons') || {};
+        //            disabledReasons.carrier_selection = false;
+        //            $payButton.data('disabled_reasons', disabledReasons);
+        //            $payButton.prop('disabled', _.contains($payButton.data('disabled_reasons'), true));
+        //        } else {
+        //            $amountDelivery.html(result.new_amount_delivery);
+        //            $amountUntaxed.html(result.new_amount_untaxed);
+        //            $amountTax.html(result.new_amount_tax);
+        //            $amountTotal.html(result.new_amount_total);
+        //        }
+        //        if (result.new_amount_total_raw !== undefined) {
+        //            this._updateShippingCost(result.new_amount_total_raw);
+        //        }
+        //    },
+        /**
+         * @private
+         * @param {Object} result
+         */
 
-    /**
-     * @private
-     * @param {jQuery} $carrierInput
-     */
-//    _showLoading: function ($carrierInput) {
-//        $carrierInput.siblings('.o_wsale_delivery_badge_price').empty();
-//        $carrierInput.siblings('.o_wsale_delivery_badge_price').append('<span class="fa fa-circle-o-notch fa-spin"/>');
-//    },
-    /**
-     * Update the total cost according to the selected shipping method
-     *
-     * @private
-     * @param {float} amount : The new total amount of to be paid
-     */
-//    _updateShippingCost: function(amount){
-//        core.bus.trigger('update_shipping_cost', amount);
-//    },
-    /**
-     * @private
-     * @param {Object} result
-     */
-//    _handleCarrierUpdateResult: function (result) {
-//        this._handleCarrierUpdateResultBadge(result);
-//        var $payButton = $('button[name="o_payment_submit_button"]');
-//        var $amountDelivery = $('#order_delivery .monetary_field');
-//        var $amountUntaxed = $('#order_total_untaxed .monetary_field');
-//        var $amountTax = $('#order_total_taxes .monetary_field');
-//        var $amountTotal = $('#order_total .monetary_field, #amount_total_summary.monetary_field');
-//
-//        if (result.status === true) {
-//            $amountDelivery.html(result.new_amount_delivery);
-//            $amountUntaxed.html(result.new_amount_untaxed);
-//            $amountTax.html(result.new_amount_tax);
-//            $amountTotal.html(result.new_amount_total);
-//            var disabledReasons = $payButton.data('disabled_reasons') || {};
-//            disabledReasons.carrier_selection = false;
-//            $payButton.data('disabled_reasons', disabledReasons);
-//            $payButton.prop('disabled', _.contains($payButton.data('disabled_reasons'), true));
-//        } else {
-//            $amountDelivery.html(result.new_amount_delivery);
-//            $amountUntaxed.html(result.new_amount_untaxed);
-//            $amountTax.html(result.new_amount_tax);
-//            $amountTotal.html(result.new_amount_total);
-//        }
-//        if (result.new_amount_total_raw !== undefined) {
-//            this._updateShippingCost(result.new_amount_total_raw);
-//        }
-//    },
-    /**
-     * @private
-     * @param {Object} result
-     */
+        // --------------------------------------------------------------------------
+        // Handlers
+        // --------------------------------------------------------------------------
 
+        /**
+         * @private
+         * @param {Event} ev
+         */
+        //     _onAddIconClick: function(event){
+        //        var self = this;
+        //        this._rpc({
+        //            model: record.model,
+        //            method: 'save_record',
+        //            context: {
+        //                    model: record.model,
+        //                    record: record,
+        //                },
+        //        }).then(function () {
+        //            self._render()
+        //        });
+        //
+        //    }
+        _onBtnPeriodClick: function (ev) {
+            var $iframe = $(ev.currentTarget).val();
+            console.log($iframe);
+            var objquote = $iframe.replaceAll("'", '"');
+            console.log(objquote);
+            const obj = JSON.parse(objquote);
+            var first_day = obj.first_day;
+            var last_day = obj.last_day;
 
-    //--------------------------------------------------------------------------
-    // Handlers
-    //--------------------------------------------------------------------------
-
-    /**
-     * @private
-     * @param {Event} ev
-     */
-//     _onAddIconClick: function(event){
-//        var self = this;
-//        this._rpc({
-//            model: record.model,
-//            method: 'save_record',
-//            context: {
-//                    model: record.model,
-//                    record: record,
-//                },
-//        }).then(function () {
-//            self._render()
-//        });
-//
-//    }
-    _onBtnPeriodClick: function (ev) {
-
-        var $iframe = $(ev.currentTarget).val();
-        console.log($iframe);
-        var objquote = $iframe.replaceAll("'", '"');
-        console.log(objquote);
-        const obj = JSON.parse(objquote);
-        var first_day = obj.first_day;
-        var last_day = obj.last_day;
-
-//        var maxPage = $iframe.contents().find('#page_count').val();
-//        this._rpc({
-//            route: "/shop/cart/update_json",
-//            params: {
-//                line_id: line_id,
-//                product_id: parseInt($input.data('product-id'), 10),
-//                set_qty: value
-//            },
-//        }).then(function (data) {
-//        var $radio = $(ev.currentTarget).find('input[type="radio"]');
-//        this._showLoading($radio);
-//        $radio.prop("checked", true);
-//        var $payButton = $('button[name="o_payment_submit_button"]');
-//        $payButton.prop('disabled', true);
-//        var disabledReasons = $payButton.data('disabled_reasons') || {};
-//        disabledReasons.carrier_selection = true;
-//        $payButton.data('disabled_reasons', disabledReasons);
-//        dp.add(this._rpc({
-//            route: '/shop/update_carrier',
-//            params: {
-//                carrier_id: $radio.val(),
-//            },
-//        })).then(this._handleCarrierUpdateResult.bind(this));
-    },
-    /**
-     * @private
-     * @param {Event} ev
-     */
-//    _onSetAddress: function (ev) {
-//        var value = $(ev.currentTarget).val();
-//        var $providerFree = $('select[name="country_id"]:not(.o_provider_restricted), select[name="state_id"]:not(.o_provider_restricted)');
-//        var $providerRestricted = $('select[name="country_id"].o_provider_restricted, select[name="state_id"].o_provider_restricted');
-//        if (value === 0) {
-//            // Ship to the same address : only show shipping countries available for billing
-//            $providerFree.hide().attr('disabled', true);
-//            $providerRestricted.show().attr('disabled', false).change();
-//        } else {
-//            // Create a new address : show all countries available for billing
-//            $providerFree.show().attr('disabled', false).change();
-//            $providerRestricted.hide().attr('disabled', true);
-//        }
-//    },
-});
+            //        Var maxPage = $iframe.contents().find('#page_count').val();
+            //        this._rpc({
+            //            route: "/shop/cart/update_json",
+            //            params: {
+            //                line_id: line_id,
+            //                product_id: parseInt($input.data('product-id'), 10),
+            //                set_qty: value
+            //            },
+            //        }).then(function (data) {
+            //        var $radio = $(ev.currentTarget).find('input[type="radio"]');
+            //        this._showLoading($radio);
+            //        $radio.prop("checked", true);
+            //        var $payButton = $('button[name="o_payment_submit_button"]');
+            //        $payButton.prop('disabled', true);
+            //        var disabledReasons = $payButton.data('disabled_reasons') || {};
+            //        disabledReasons.carrier_selection = true;
+            //        $payButton.data('disabled_reasons', disabledReasons);
+            //        dp.add(this._rpc({
+            //            route: '/shop/update_carrier',
+            //            params: {
+            //                carrier_id: $radio.val(),
+            //            },
+            //        })).then(this._handleCarrierUpdateResult.bind(this));
+        },
+        /**
+         * @private
+         * @param {Event} ev
+         */
+        //    _onSetAddress: function (ev) {
+        //        var value = $(ev.currentTarget).val();
+        //        var $providerFree = $('select[name="country_id"]:not(.o_provider_restricted), select[name="state_id"]:not(.o_provider_restricted)');
+        //        var $providerRestricted = $('select[name="country_id"].o_provider_restricted, select[name="state_id"].o_provider_restricted');
+        //        if (value === 0) {
+        //            // Ship to the same address : only show shipping countries available for billing
+        //            $providerFree.hide().attr('disabled', true);
+        //            $providerRestricted.show().attr('disabled', false).change();
+        //        } else {
+        //            // Create a new address : show all countries available for billing
+        //            $providerFree.show().attr('disabled', false).change();
+        //            $providerRestricted.hide().attr('disabled', true);
+        //        }
+        //    },
+    });
 });
diff --git a/templates/operation_templates_page.xml b/templates/operation_templates_page.xml
index b67c22f..2bc7977 100644
--- a/templates/operation_templates_page.xml
+++ b/templates/operation_templates_page.xml
@@ -8,20 +8,20 @@
                 <div id="wrap" t-attf-class="wrap mt-0">
                     <div class="container oe_website_canvas text-center mb-5">
                         <div class="row mt-4 text-center">
-                            <t t-call="oacc_portal_overview_cdc.nav_button"/>
+                            <t t-call="oacc_portal_overview_cdc.nav_button" />
 
                             <div class="col-6">
                                 <h2>La consommation</h2>
-                                <t t-call="oacc_portal_overview_cdc.profil_conso"/>
-                                <t t-call="oacc_portal_overview_cdc.bilan_conso"/>
-                                <t t-call="oacc_portal_overview_cdc.cdc_conso"/>
+                                <t t-call="oacc_portal_overview_cdc.profil_conso" />
+                                <t t-call="oacc_portal_overview_cdc.bilan_conso" />
+                                <t t-call="oacc_portal_overview_cdc.cdc_conso" />
                             </div>
 
                             <div class="col-6">
                                 <h2>La Production</h2>
-                                <t t-call="oacc_portal_overview_cdc.profil_prod"/>
-                                <t t-call="oacc_portal_overview_cdc.bilan_prod"/>
-                                <t t-call="oacc_portal_overview_cdc.cdc_prod"/>
+                                <t t-call="oacc_portal_overview_cdc.profil_prod" />
+                                <t t-call="oacc_portal_overview_cdc.bilan_prod" />
+                                <t t-call="oacc_portal_overview_cdc.cdc_prod" />
                             </div>
 
                         </div>
@@ -39,17 +39,26 @@
                     <div class="row mt-4">
                         <div class="col-3">
                             <h3>La Consommation</h3>
-                            <ul
-                                class="nav nav-tabs o_wslides_nav_tabs flex-column"
-                            >
+                            <ul class="nav nav-tabs o_wslides_nav_tabs flex-column">
                                 <li class="nav-item"><a href="#">Globale</a></li>
                                 <li class="nav-item" t-foreach="consumers" t-as="cons">
-                                    <a href="cons.name"><t t-out="cons.name"/></a>
-                                    <ul class="nav nav-tabs o_wslides_nav_tabs flex-column">
-                                        <t t-set="prm_ids" t-att-value="operation.acc_delivery_ids.filtered(
-                                            lambda r: r.partner_id == cons)" />
-                                        <li t-foreach="prm_ids" t-as="prm" class="nav-item" >
-                                            <a href="prm.name"><t t-out="prm.name"/> </a>
+                                    <a href="cons.name"><t t-out="cons.name" /></a>
+                                    <ul
+                                        class="nav nav-tabs o_wslides_nav_tabs flex-column"
+                                    >
+                                        <t
+                                            t-set="prm_ids"
+                                            t-att-value="operation.acc_delivery_ids.filtered(
+                                            lambda r: r.partner_id == cons)"
+                                        />
+                                        <li
+                                            t-foreach="prm_ids"
+                                            t-as="prm"
+                                            class="nav-item"
+                                        >
+                                            <a href="prm.name"><t
+                                                    t-out="prm.name"
+                                                /> </a>
                                         </li>
                                     </ul>
                                 </li>
@@ -69,17 +78,23 @@
                         </div>
                         <div class="col-9">
                             <div class="row">
-                                <t t-call="oacc_portal_overview_cdc.nav_button"/>
+                                <t t-call="oacc_portal_overview_cdc.nav_button" />
 
                                 <div class="row mb32">
                                     <div class="col-md-6 col-12">
-                                        <t t-call="oacc_portal_overview_cdc.profil_conso"/>
+                                        <t
+                                            t-call="oacc_portal_overview_cdc.profil_conso"
+                                        />
                                     </div>
                                     <div class="col-md-6 col-12">
-                                        <t t-call="oacc_portal_overview_cdc.bilan_conso"/>
+                                        <t
+                                            t-call="oacc_portal_overview_cdc.bilan_conso"
+                                        />
                                     </div>
                                     <div class="col-12">
-                                        <t t-call="oacc_portal_overview_cdc.cdc_conso"/>
+                                        <t
+                                            t-call="oacc_portal_overview_cdc.cdc_conso"
+                                        />
                                     </div>
                                 </div>
                             </div>
@@ -106,25 +121,27 @@
                                 id="profile_extra_info_tablist"
                             >
                                 <li class="nav-item">
-                                    <a t-att-class="'nav-link %s' % ('active' if active_tab == 'other' else '')"
-                                       id="other-tab"
-                                       data-bs-toggle="pill"
-                                       href="#other"
-                                       role="tab"
-                                       aria-controls="other"
-                                       t-att-aria-selected="'true' if active_tab == 'other' else 'false'"
+                                    <a
+                                        t-att-class="'nav-link %s' % ('active' if active_tab == 'other' else '')"
+                                        id="other-tab"
+                                        data-bs-toggle="pill"
+                                        href="#other"
+                                        role="tab"
+                                        aria-controls="other"
+                                        t-att-aria-selected="'true' if active_tab == 'other' else 'false'"
                                     >
                                         Globale
                                     </a>
                                 </li>
                                 <li class="nav-item">
-                                    <a t-att-class="'nav-link %s' % ('active' if active_tab == 'other' else '')"
-                                       id="other-tab"
-                                       data-bs-toggle="pill"
-                                       href="#other"
-                                       role="tab"
-                                       aria-controls="other"
-                                       t-att-aria-selected="'true' if active_tab == 'other' else 'false'"
+                                    <a
+                                        t-att-class="'nav-link %s' % ('active' if active_tab == 'other' else '')"
+                                        id="other-tab"
+                                        data-bs-toggle="pill"
+                                        href="#other"
+                                        role="tab"
+                                        aria-controls="other"
+                                        t-att-aria-selected="'true' if active_tab == 'other' else 'false'"
                                     >
                                         Globale
                                     </a>
@@ -143,17 +160,25 @@
                                     aria-labelledby="other-tab"
                                 >
                                     <div class="row">
-                                        <t t-call="oacc_portal_overview_cdc.nav_button"/>
+                                        <t
+                                            t-call="oacc_portal_overview_cdc.nav_button"
+                                        />
 
                                         <div class="row mb32">
                                             <div class="col-md-6 col-12">
-                                                <t t-call="oacc_portal_overview_cdc.profil_prod"/>
+                                                <t
+                                                    t-call="oacc_portal_overview_cdc.profil_prod"
+                                                />
                                             </div>
                                             <div class="col-md-6 col-12">
-                                                <t t-call="oacc_portal_overview_cdc.bilan_prod"/>
+                                                <t
+                                                    t-call="oacc_portal_overview_cdc.bilan_prod"
+                                                />
                                             </div>
                                             <div class="col-12">
-                                                <t t-call="oacc_portal_overview_cdc.cdc_prod"/>
+                                                <t
+                                                    t-call="oacc_portal_overview_cdc.cdc_prod"
+                                                />
                                             </div>
                                         </div>
                                     </div>
@@ -215,7 +240,8 @@
     <template id="profil_conso">
         <div class="text-center">
             <h3 class="mt-3">Profil</h3>
-            <p>Cliquez sur les termes « AutoProd » ou « AlloConso » pour faire apparaître ou disparaître les données correspondantes.</p>
+            <p
+            >Cliquez sur les termes « AutoProd » ou « AlloConso » pour faire apparaître ou disparaître les données correspondantes.</p>
             <canvas
                 id="line_chart_conso"
                 class="line_chart_conso"
@@ -240,7 +266,8 @@
     <template id="cdc_conso">
         <div class="text-center">
             <h3 class="mt-3">Courbe de charge</h3>
-            <p>Cliquez sur les termes « Conso », « Production solaire » ou « AutoProd » pour faire apparaître ou disparaître les courbes correspondantes.</p>
+            <p
+            >Cliquez sur les termes « Conso », « Production solaire » ou « AutoProd » pour faire apparaître ou disparaître les courbes correspondantes.</p>
             <canvas
                 id="histo_chart_conso"
                 class="histo_chart_conso"
@@ -253,7 +280,8 @@
     <template id="profil_prod">
         <div class="text-center">
             <h3 class="mt-3">Profil</h3>
-            <p>Cliquez sur les termes « AutoConso » ou « Surplus » pour faire apparaître ou disparaître les données correspondantes.</p>
+            <p
+            >Cliquez sur les termes « AutoConso » ou « Surplus » pour faire apparaître ou disparaître les données correspondantes.</p>
             <canvas
                 id="line_chart_prod"
                 class="line_chart_prod"
@@ -278,7 +306,8 @@
     <template id="cdc_prod">
         <div class="text-center">
             <h3 class="mt-3">Courbe de charge</h3>
-            <p>Cliquez sur les termes « AutoConso » ou « Surplus » pour faire apparaître ou disparaître les courbes correspondantes.</p>
+            <p
+            >Cliquez sur les termes « AutoConso » ou « Surplus » pour faire apparaître ou disparaître les courbes correspondantes.</p>
             <canvas
                 id="histo_chart_prod"
                 class="histo_chart_prod"
diff --git a/templates/portal_layout.xml b/templates/portal_layout.xml
index 3751d96..caaef76 100644
--- a/templates/portal_layout.xml
+++ b/templates/portal_layout.xml
@@ -2,7 +2,7 @@
 <odoo>
 
     <!-- Layout operation -->
-    <template id="layout_op" inherit_id="oacc_portal.layout_op" >
+    <template id="layout_op" inherit_id="oacc_portal.layout_op">
         <xpath expr="//li[@id='menu-accueil']" position="after">
             <li t-attf-class="nav-link">
                 <a
-- 
GitLab