From abbf48cb170ffe562f879fa88bfe8592707f496f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20-=20Le=20Filament?= <remi@le-filament.com>
Date: Tue, 1 Apr 2025 15:22:42 +0200
Subject: [PATCH] [MIG] Migration to version 18.0

---
 .eslintrc.yml                         | 188 ------------------------
 .gitignore                            |   4 +
 .pre-commit-config.yaml               |  61 ++++----
 .prettierrc.yml                       |   8 -
 .pylintrc                             |   2 +-
 .pylintrc-mandatory                   |   2 +-
 .ruff.toml                            |   9 +-
 __manifest__.py                       |   2 +-
 eslint.config.cjs                     | 202 ++++++++++++++++++++++++++
 prettier.config.cjs                   |  14 ++
 security/training_security.xml        |   1 -
 templates/report_agreement.xml        | 174 +++++++++++-----------
 templates/report_attendance_sheet.xml |  48 +++---
 templates/report_attestation.xml      |  57 ++++----
 templates/report_convocation.xml      | 122 ++++++++--------
 templates/report_program.xml          |  64 ++++----
 views/account_move_view.xml           |  18 +--
 views/res_company_view.xml            |   2 -
 views/res_config_settings_view.xml    |  34 ++---
 views/res_partner_view.xml            |  18 +--
 views/sale_order_view.xml             |  18 +--
 views/training_course_view.xml        | 191 ++++++++++++------------
 views/training_session_view.xml       |  12 +-
 views/training_training_view.xml      |  29 ++--
 views/training_type_view.xml          |  12 +-
 25 files changed, 646 insertions(+), 646 deletions(-)
 delete mode 100644 .eslintrc.yml
 delete mode 100644 .prettierrc.yml
 create mode 100644 eslint.config.cjs
 create mode 100644 prettier.config.cjs

diff --git a/.eslintrc.yml b/.eslintrc.yml
deleted file mode 100644
index 0b38203..0000000
--- a/.eslintrc.yml
+++ /dev/null
@@ -1,188 +0,0 @@
-env:
-  browser: true
-  es6: true
-
-# See https://github.com/OCA/odoo-community.org/issues/37#issuecomment-470686449
-parserOptions:
-  ecmaVersion: 2022
-
-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
-  luxon: 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/.gitignore b/.gitignore
index c9f4238..109270f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -26,6 +26,9 @@ var/
 *.eggs
 .copier-answers.yml
 
+# Windows installers
+*.msi
+
 # Debian packages
 *.deb
 
@@ -34,6 +37,7 @@ var/
 
 # MacOS packages
 *.dmg
+*.pkg
 
 # Installer logs
 pip-log.txt
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index f58f2c6..207e4c9 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -5,7 +5,7 @@ exclude: |
   # 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/|
+  .svg$|/tests/([^/]+/)?cassettes/|^.copier-answers.yml$|^.github/|^eslint.config.cjs|^prettier.config.cjs|
   # Maybe reactivate this when all README files include prettier ignore tags?
   ^README\.md$|
   # Library files can have extraneous formatting (even minimized)
@@ -22,7 +22,7 @@ exclude: |
   (LICENSE.*|COPYING.*)
 default_language_version:
   python: python3
-  node: "16.17.0"
+  node: "22.9.0"
 repos:
   - repo: local
     hooks:
@@ -37,55 +37,52 @@ repos:
         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/sbidoul/whool
-          #    rev: v0.5
-          #    hooks:
-          #      - id: whool-init
+        files: '[a-zA-Z0-9_]*/i18n/en\.po$'
   - repo: https://github.com/oca/maintainer-tools
-    rev: d5fab7ee87fceee858a3d01048c78a548974d935
+    rev: bf9ecb9938b6a5deca0ff3d870fbd3f33341fded
     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"]
-      - id: oca-gen-addon-readme
-        args:
-          - --addons-dir=.
-          - --branch=17.0
-          - --org-name=lefilament
-          - --repo-name=template_module
-          - --if-source-changed
-          - --keep-source-digest
-          - --convert-fragments-to-markdown
-      # - id: oca-gen-external-dependencies
   - repo: https://github.com/OCA/odoo-pre-commit-hooks
-    rev: v0.0.25
+    rev: v0.0.33
     hooks:
       - id: oca-checks-odoo-module
       - id: oca-checks-po
-  - repo: https://github.com/pre-commit/mirrors-prettier
-    rev: v2.7.1
+        args:
+          - --disable=po-pretty-format
+  - repo: local
     hooks:
       - id: prettier
         name: prettier (with plugin-xml)
-        additional_dependencies:
-          - "prettier@2.7.1"
-          - "@prettier/plugin-xml@2.2.0"
+        entry: prettier
         args:
-          - --plugin=@prettier/plugin-xml
+          - --write
+          - --list-different
+          - --ignore-unknown
+        types: [text]
         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
+        language: node
+        additional_dependencies:
+          - "prettier@3.3.3"
+          - "@prettier/plugin-xml@3.4.1"
+  - repo: local
     hooks:
       - id: eslint
-        verbose: true
+        name: eslint
+        entry: eslint
         args:
           - --color
           - --fix
+        verbose: true
+        types: [javascript]
+        language: node
+        additional_dependencies:
+          - "eslint@9.12.0"
+          - "eslint-plugin-jsdoc@50.3.1"
   - repo: https://github.com/pre-commit/pre-commit-hooks
-    rev: v4.3.0
+    rev: v4.6.0
     hooks:
       - id: trailing-whitespace
         # exclude autogenerated files
@@ -107,13 +104,13 @@ repos:
       - id: mixed-line-ending
         args: ["--fix=lf"]
   - repo: https://github.com/astral-sh/ruff-pre-commit
-    rev: v0.1.3
+    rev: v0.6.8
     hooks:
       - id: ruff
         args: [--fix, --exit-non-zero-on-fix]
       - id: ruff-format
   - repo: https://github.com/OCA/pylint-odoo
-    rev: v9.0.4
+    rev: v9.1.3
     hooks:
       - id: pylint_odoo
         name: pylint with optional checks
diff --git a/.prettierrc.yml b/.prettierrc.yml
deleted file mode 100644
index 5b6d4b3..0000000
--- a/.prettierrc.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-# 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
index 4fb9ba5..b855a92 100644
--- a/.pylintrc
+++ b/.pylintrc
@@ -10,7 +10,7 @@ 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=17.0
+valid-odoo-versions=18.0
 
 [MESSAGES CONTROL]
 disable=all
diff --git a/.pylintrc-mandatory b/.pylintrc-mandatory
index 42885e9..f945051 100644
--- a/.pylintrc-mandatory
+++ b/.pylintrc-mandatory
@@ -9,7 +9,7 @@ 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=17.0
+valid-odoo-versions=18.0
 
 [MESSAGES CONTROL]
 disable=all
diff --git a/.ruff.toml b/.ruff.toml
index 0240c75..5e63128 100644
--- a/.ruff.toml
+++ b/.ruff.toml
@@ -10,21 +10,22 @@ extend-select = [
     "I",  # isort
     "UP",  # pyupgrade
 ]
+extend-safe-fixes = ["UP008"]
 exclude = ["setup/*"]
 
 [format]
 exclude = ["setup/*"]
 
-[per-file-ignores]
+[lint.per-file-ignores]
 "__init__.py" = ["F401", "I001"]  # ignore unused and unsorted imports in __init__.py
 "__manifest__.py" = ["B018"]  # useless expression
 
-[isort]
+[lint.isort]
 section-order = ["future", "standard-library", "third-party", "odoo", "odoo-addons", "first-party", "local-folder"]
 
-[isort.sections]
+[lint.isort.sections]
 "odoo" = ["odoo"]
 "odoo-addons" = ["odoo.addons"]
 
-[mccabe]
+[lint.mccabe]
 max-complexity = 16
diff --git a/__manifest__.py b/__manifest__.py
index 99a7677..544f975 100644
--- a/__manifest__.py
+++ b/__manifest__.py
@@ -1,6 +1,6 @@
 {
     "name": "Le Filament - Training",
-    "version": "17.0.1.0.0",
+    "version": "18.0.1.0.0",
     "summary": "Training sessions managment",
     "license": "AGPL-3",
     "author": "Le Filament",
diff --git a/eslint.config.cjs b/eslint.config.cjs
new file mode 100644
index 0000000..0d5731f
--- /dev/null
+++ b/eslint.config.cjs
@@ -0,0 +1,202 @@
+jsdoc = require("eslint-plugin-jsdoc");
+
+const config = [{
+    plugins: {
+      jsdoc,
+    },
+
+    languageOptions: {
+        globals: {
+            _: "readonly",
+            $: "readonly",
+            fuzzy: "readonly",
+            jQuery: "readonly",
+            moment: "readonly",
+            odoo: "readonly",
+            openerp: "readonly",
+            owl: "readonly",
+            luxon: "readonly",
+        },
+
+        ecmaVersion: 2024,
+        sourceType: "script",
+    },
+
+    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",
+
+        "jsdoc/check-tag-names": "warn",
+        "jsdoc/check-types": "warn",
+        "jsdoc/require-param-description": "off",
+        "jsdoc/require-return": "off",
+        "jsdoc/require-return-description": "off",
+        "jsdoc/require-return-type": "off",
+
+        "valid-typeof": "warn",
+        yoda: "warn",
+    },
+
+    settings: {
+        jsdoc: {
+            tagNamePreference: {
+                arg: "param",
+                argument: "param",
+                augments: "extends",
+                constructor: "class",
+                exception: "throws",
+                func: "function",
+                method: "function",
+                prop: "property",
+                return: "returns",
+                virtual: "abstract",
+                yield: "yields",
+            },
+            preferredTypes: {
+                array: "Array",
+                bool: "Boolean",
+                boolean: "Boolean",
+                number: "Number",
+                object: "Object",
+                str: "String",
+                string: "String",
+            },
+        },
+    },
+
+}, {
+    files: ["**/*.esm.js"],
+
+    languageOptions: {
+        ecmaVersion: 2024,
+        sourceType: "module",
+    },
+}];
+
+module.exports = config
diff --git a/prettier.config.cjs b/prettier.config.cjs
new file mode 100644
index 0000000..e66cd82
--- /dev/null
+++ b/prettier.config.cjs
@@ -0,0 +1,14 @@
+/** @type {import('prettier').Config} */
+
+const config = {
+  // https://github.com/prettier/prettier/issues/15388#issuecomment-1717746872
+  plugins: [require.resolve("@prettier/plugin-xml")],
+  bracketSpacing: false,
+  printWidth: 88,
+  proseWrap: "always",
+  semi: true,
+  trailingComma: "es5",
+  xmlWhitespaceSensitivity: "preserve",
+};
+
+module.exports = config;
diff --git a/security/training_security.xml b/security/training_security.xml
index 623ee3c..99ace1f 100644
--- a/security/training_security.xml
+++ b/security/training_security.xml
@@ -13,5 +13,4 @@
         <field name="category_id" ref="module_category_training" />
         <field name="implied_ids" eval="[(4, ref('base.group_user'))]" />
     </record>
-
 </odoo>
diff --git a/templates/report_agreement.xml b/templates/report_agreement.xml
index 7a5b568..1c94c7c 100644
--- a/templates/report_agreement.xml
+++ b/templates/report_agreement.xml
@@ -16,8 +16,8 @@
                             <div class="col-12 text-center">
                                 <h1>
                                     CONVENTION DE FORMATION PROFESSIONNELLE N°<t
-                                        t-out="doc.agreement_number"
-                                    />
+                                    t-out="doc.agreement_number"
+                                />
                                 </h1>
                                 <h2 t-field="doc.course_id.name" />
                                 <hr />
@@ -25,25 +25,25 @@
                             <div class="col-12">
                                 <p>ENTRE :</p>
                                 <p>
-                                    <strong><t
-                                            t-out="doc.company_id.name"
-                                        /></strong> – Déclaration d’activité enregistrée sous le numéro <t
-                                        t-out="doc.company_id.training_number"
-                                    /> - dont le siège est situé <t
-                                        t-out="doc.company_id.partner_id._display_address(without_company=True)"
-                                    />.
+                                    <strong>
+                                    <t t-out="doc.company_id.name" />
+                                </strong> – Déclaration d’activité enregistrée sous le numéro <t
+                                    t-out="doc.company_id.training_number"
+                                /> - dont le siège est situé <t
+                                    t-out="doc.company_id.partner_id._display_address(without_company=True)"
+                                />.
                                     <br />
                                     Représenté par <t t-out="doc.signin_person" />, <t
-                                        t-out="doc.signin_function"
-                                    />
+                                    t-out="doc.signin_function"
+                                />
                                 </p>
                                 <p>ET</p>
                                 <p>
-                                    <strong><t
-                                            t-out="doc.customer_id.name"
-                                        /></strong> - <t
-                                        t-out="doc.customer_id._display_address(without_company=True)"
-                                    />.
+                                    <strong>
+                                    <t t-out="doc.customer_id.name" />
+                                </strong> - <t
+                                    t-out="doc.customer_id._display_address(without_company=True)"
+                                />.
                                 </p>
                                 <p>
                                     Il est établi la présente convention de formation en application des dispositions de la sixième partie du Code du Travail (article L6353-1 à 2 et R6353-1) portant organisation de la formation professionnelle continue tout au long de la vie.
@@ -54,53 +54,56 @@
                                     >ARTICLE 1 - OBJET ET CARACTERISTIQUES DE LA FORMATION</h3>
                                     <p>
                                         En exécution de la présente convention, l’organisme <t
-                                            t-out="doc.company_id.name"
-                                        /> s’engage à organiser l’action de formation intitulée : <strong
-                                        ><t t-out="doc.course_id.name" /></strong>
+                                        t-out="doc.company_id.name"
+                                    /> s’engage à organiser l’action de formation intitulée : <strong
+                                    >
+                                        <t t-out="doc.course_id.name" />
+                                    </strong>
                                     </p>
                                     <p>
                                         <span
-                                            class="text-decoration-underline"
-                                        >Nature de l’action au sens de l’article L.6313-1 du code du travail</span> :<br
-                                        />
+                                        class="text-decoration-underline"
+                                    >Nature de l’action au sens de l’article L.6313-1 du code du travail</span> :<br
+                                    />
                                         Développement des compétences et de la qualification professionnelle
                                     </p>
                                     <p>
                                         <span
-                                            class="text-decoration-underline"
-                                        >Compétences visées</span> : <br />
+                                        class="text-decoration-underline"
+                                    >Compétences visées</span> : <br />
                                         À l’issue de la formation l'apprenant sera en mesure de :<br
-                                        />
+                                    />
                                         <span t-field="doc.course_id.objective" />
                                     </p>
                                     <p>
                                         <span
-                                            class="text-decoration-underline"
-                                        >Prérequis</span> : <br />
+                                        class="text-decoration-underline"
+                                    >Prérequis</span> : <br />
                                         <t t-out="doc.course_id.prerequisites" />
                                     </p>
                                     <p>
                                         <span
-                                            class="text-decoration-underline"
-                                        >Profil des stagiaires</span> : <br />
+                                        class="text-decoration-underline"
+                                    >Profil des stagiaires</span> : <br />
                                         <t t-out="doc.course_id.students_profile" />
                                     </p>
                                     <p>
                                         <span
-                                            class="text-decoration-underline"
-                                        >Formateur(s)</span> : <br />
+                                        class="text-decoration-underline"
+                                    >Formateur(s)</span> : <br />
                                         <t
-                                            t-set="trainers"
-                                            t-value="doc._get_trainers()"
-                                        />
+                                        t-set="trainers"
+                                        t-value="doc._get_trainers()"
+                                    />
                                         <t t-foreach="trainers" t-as="trainer">
-                                            <t t-out="trainer.name" /><br />
-                                        </t>
+                                        <t t-out="trainer.name" />
+                                        <br />
+                                    </t>
                                     </p>
                                     <p>
                                         <span
-                                            class="text-decoration-underline"
-                                        >Modalités et délais d'accès</span> : <br />
+                                        class="text-decoration-underline"
+                                    >Modalités et délais d'accès</span> : <br />
                                         Nous avoir renvoyé la convention signée au plus tard 24h avant la formation
                                     </p>
                                 </div>
@@ -139,10 +142,8 @@
                                                 </td>
                                                 <td style="border: 0px;">
                                                     Du <span
-                                                        t-field="doc.date_begin"
-                                                    /> au <span
-                                                        t-field="doc.date_end"
-                                                    />
+                                                    t-field="doc.date_begin"
+                                                /> au <span t-field="doc.date_end" />
                                                 </td>
                                             </tr>
                                             <tr style="border: 0px;">
@@ -177,16 +178,20 @@
                                     <p
                                     >L’entreprise signataire inscrit à cette formation les personnes suivantes :</p>
                                     <t t-foreach="doc.student_ids" t-as="student">
-                                        <strong><span
+                                        <strong>
+                                            <span
                                                 t-field="student.student_id.lastname"
-                                            /> <span
+                                            />
+                                            <span
                                                 t-field="student.student_id.firstname"
-                                            /></strong><br />
+                                            />
+                                        </strong>
+                                        <br />
                                     </t>
                                     <p>
-                                        Nombre d'inscrit(s) : <strong><span
-                                                t-esc="doc.students_count"
-                                            /></strong>
+                                        Nombre d'inscrit(s) : <strong>
+                                        <span t-esc="doc.students_count" />
+                                    </strong>
                                     </p>
                                 </div>
                                 <div class="subblock">
@@ -204,9 +209,11 @@
                                         </thead>
                                         <tbody>
                                             <tr>
-                                                <td><span
+                                                <td>
+                                                    <span
                                                         t-field="doc.course_id.name"
-                                                    /></td>
+                                                    />
+                                                </td>
                                                 <td
                                                     t-out="doc.cost"
                                                     class="text-end"
@@ -245,20 +252,26 @@
                                     <p class="fw-bold">Situations particulières</p>
                                     <p>
                                         Pour toute difficulté ou handicap, veuillez contacter <span
-                                            t-field="doc.email_contact"
-                                        /> pour voir les éventuelles adaptations à prévoir.
+                                        t-field="doc.email_contact"
+                                    /> pour voir les éventuelles adaptations à prévoir.
+                                    </p>
+                                    <p>
+                                        <span t-field="doc.course_id.means" />
                                     </p>
-                                    <p><span t-field="doc.course_id.means" /></p>
                                 </div>
                                 <div class="subblock">
                                     <h3
                                     >ARTICLE 6 – MOYENS PERMETTANT D’APPRECIER LES RESULTATS DE L’ACTION</h3>
-                                    <p><span t-field="doc.course_id.evaluation" /></p>
+                                    <p>
+                                        <span t-field="doc.course_id.evaluation" />
+                                    </p>
                                 </div>
                                 <div class="subblock">
                                     <h3
                                     >ARTICLE 7 – MOYENS PERMETTANT DE SUIVRE L’EXECUTION DE L’ACTION</h3>
-                                    <p><span t-field="doc.course_id.control" /></p>
+                                    <p>
+                                        <span t-field="doc.course_id.control" />
+                                    </p>
                                 </div>
                                 <div class="subblock">
                                     <h3>ARTICLE 8 – SANCTION DE LA FORMATION</h3>
@@ -277,8 +290,8 @@
                                     </p>
                                     <p>
                                         Pour toute annulation faite par le client moins de 10 jours avant le début du stage, <t
-                                            t-out="doc.company_id.name"
-                                        /> facturera un dédit de 50% des frais de stage, montant non imputable par l’entreprise à la contribution financière obligatoire de formation. En cas d’absence ou d’abandon en cours de stage d’un stagiaire, la formation reste payable en totalité.
+                                        t-out="doc.company_id.name"
+                                    /> facturera un dédit de 50% des frais de stage, montant non imputable par l’entreprise à la contribution financière obligatoire de formation. En cas d’absence ou d’abandon en cours de stage d’un stagiaire, la formation reste payable en totalité.
                                     </p>
                                     <p>
                                         Dans le cas de force majeure dûment reconnue, ou de la cessation anticipée du fait de l’organisme de formation, de nouvelles dates seront convenues.
@@ -289,19 +302,19 @@
                                     </p>
                                     <p>
                                         Annulation-report du fait de <t
-                                            t-out="doc.company_id.name"
-                                        /> : <t
-                                            t-out="doc.company_id.name"
-                                        /> se réserve la possibilité de reporter ou d’annuler une formation. <t
-                                            t-out="doc.company_id.name"
-                                        /> en informe alors le Client dans les plus brefs délais. En cas de report, il incombe alors au Client de confirmer sa participation à la nouvelle session qui lui sera proposée. Aucune indemnité ne sera versée au Client en raison d’un report ou d’une annulation du fait de <t
-                                            t-out="doc.company_id.name"
-                                        />.
+                                        t-out="doc.company_id.name"
+                                    /> : <t
+                                        t-out="doc.company_id.name"
+                                    /> se réserve la possibilité de reporter ou d’annuler une formation. <t
+                                        t-out="doc.company_id.name"
+                                    /> en informe alors le Client dans les plus brefs délais. En cas de report, il incombe alors au Client de confirmer sa participation à la nouvelle session qui lui sera proposée. Aucune indemnité ne sera versée au Client en raison d’un report ou d’une annulation du fait de <t
+                                        t-out="doc.company_id.name"
+                                    />.
                                     </p>
                                     <p>
                                         En cas de renoncement par <t
-                                            t-out="doc.company_id.name"
-                                        /> à l’exécution de la présente convention, aucun règlement n’est dû et les sommes perçues sont remboursées.
+                                        t-out="doc.company_id.name"
+                                    /> à l’exécution de la présente convention, aucun règlement n’est dû et les sommes perçues sont remboursées.
                                     </p>
                                 </div>
 
@@ -318,8 +331,8 @@
                                     />
                                     <p class="mt-3 mb-33">
                                         Fait à <span
-                                            t-field="doc.place_convention"
-                                        />, le <span t-field="doc.date_convention" />
+                                        t-field="doc.place_convention"
+                                    />, le <span t-field="doc.date_convention" />
                                     </p>
                                     <table
                                         class="table table-borderless"
@@ -328,22 +341,22 @@
                                         <tr>
                                             <td style="border-color: #eee;">
                                                 Pour <span
-                                                    t-field="doc.customer_id.name"
-                                                /> <br />
+                                                t-field="doc.customer_id.name"
+                                            /> <br />
                                                 (Cachet et signature)
                                             </td>
                                             <td style="border: 0;">
                                                 Pour <t
-                                                    t-out="doc.company_id.name"
-                                                    class="text-uppercase"
-                                                /><br />
+                                                t-out="doc.company_id.name"
+                                                class="text-uppercase"
+                                            /><br />
                                                 <t t-if="doc.signin_person">
-                                                    <t t-out="doc.signin_person" />
-                                                    <t t-if="doc.signin_function">, <t
-                                                            t-out="doc.signin_function"
-                                                        /></t>
-                                                    <br />
-                                                </t>
+                                                <t t-out="doc.signin_person" />
+                                                <t t-if="doc.signin_function">, <t
+                                                    t-out="doc.signin_function"
+                                                /></t>
+                                                <br />
+                                            </t>
                                                 (Cachet et signature)
                                             </td>
                                         </tr>
@@ -380,5 +393,4 @@
         <field name="binding_type">report</field>
         <field name="paperformat_id" ref="paperformat_a4_training" />
     </record>
-
 </odoo>
diff --git a/templates/report_attendance_sheet.xml b/templates/report_attendance_sheet.xml
index 2d32289..56bd4db 100644
--- a/templates/report_attendance_sheet.xml
+++ b/templates/report_attendance_sheet.xml
@@ -22,8 +22,8 @@
                                     <div class="col-12 text-center">
                                         <h1>
                                             FORMATION : <span
-                                                t-field="doc.course_id.name"
-                                            />
+                                            t-field="doc.course_id.name"
+                                        />
                                         </h1>
                                         <h2>
                                             Feuille d'émargement
@@ -33,28 +33,27 @@
                                 <div class="row">
                                     <div class="col-6 mt-4">
                                         <strong>Lieu : </strong><span
-                                            t-field="doc.place"
-                                        /><br />
+                                        t-field="doc.place"
+                                    /><br />
                                         <strong>Dates : </strong>du <span
-                                            t-field="doc.date_begin"
-                                        /> au <span t-field="doc.date_end" /><br />
+                                        t-field="doc.date_begin"
+                                    /> au <span t-field="doc.date_end" /><br />
                                         <strong>Durée : </strong><span
-                                            t-field="doc.hours"
-                                        />h<br />
+                                        t-field="doc.hours"
+                                    />h<br />
                                         <strong>Client : </strong><span
-                                            t-field="doc.customer_id.name"
-                                        />
+                                        t-field="doc.customer_id.name"
+                                    />
                                     </div>
                                     <div class="col-6 mt-4">
                                         <t t-if="doc.file_number">
-                                            <strong>N° Dossier : </strong><span
-                                                t-field="doc.file_number"
-                                            /><br />
+                                            <strong>N° Dossier : </strong>
+                                            <span t-field="doc.file_number" />
+                                            <br />
                                         </t>
                                         <t t-if="doc.plan">
-                                            <strong>Dispositif : </strong><span
-                                                t-field="doc.plan"
-                                            />
+                                            <strong>Dispositif : </strong>
+                                            <span t-field="doc.plan" />
                                         </t>
                                     </div>
                                 </div>
@@ -84,16 +83,16 @@
                                                             style="vertical-align: middle; width: 100px;"
                                                         >
                                                             <span
-                                                                t-field="session.date"
-                                                                t-options='{"format": "dd/MM/yyyy"}'
-                                                            /><br />
+                                                            t-field="session.date"
+                                                            t-options='{"format": "dd/MM/yyyy"}'
+                                                        /><br />
                                                             Début : <span
-                                                                t-field="session.date"
-                                                                t-options='{"format": "HH:mm"}'
-                                                            /><br />
+                                                            t-field="session.date"
+                                                            t-options='{"format": "HH:mm"}'
+                                                        /><br />
                                                             Durée : <span
-                                                                t-esc="session.date_delay"
-                                                            />h
+                                                            t-esc="session.date_delay"
+                                                        />h
                                                         </th>
                                                     </t>
                                                 </tr>
@@ -207,5 +206,4 @@
         <field name="binding_type">report</field>
         <field name="paperformat_id" ref="paperformat_a4_training" />
     </record>
-
 </odoo>
diff --git a/templates/report_attestation.xml b/templates/report_attestation.xml
index ca207bc..9ebab00 100644
--- a/templates/report_attestation.xml
+++ b/templates/report_attestation.xml
@@ -22,26 +22,26 @@
                                     <div class="col-12" style="margin-top: 20px;">
                                         <p>
                                             Je soussigné, <t
-                                                t-out="doc.signin_person"
-                                            />, agissant en qualité de <t
-                                                t-out="doc.signin_function"
-                                            /> au sein de l’organisme de formation <t
-                                                t-out="doc.company_id.name"
-                                            />, enregistré sous le numéro <t
-                                                t-out="doc.company_id.training_number"
-                                            />, atteste que :
+                                            t-out="doc.signin_person"
+                                        />, agissant en qualité de <t
+                                            t-out="doc.signin_function"
+                                        /> au sein de l’organisme de formation <t
+                                            t-out="doc.company_id.name"
+                                        />, enregistré sous le numéro <t
+                                            t-out="doc.company_id.training_number"
+                                        />, atteste que :
                                         </p>
                                         <p>
-                                            <strong><t
-                                                    t-out="student.student_id.name"
-                                                /></strong>
+                                            <strong>
+                                                <t t-out="student.student_id.name" />
+                                            </strong>
                                         </p>
                                         <p>
-                                            Salarié(e) de la société <strong><t
-                                                    t-out="doc.customer_id.name"
-                                                /></strong>, située au <t
-                                                t-out="doc.customer_id._display_address(without_company=True)"
-                                            />,
+                                            Salarié(e) de la société <strong>
+                                            <t t-out="doc.customer_id.name" />
+                                        </strong>, située au <t
+                                            t-out="doc.customer_id._display_address(without_company=True)"
+                                        />,
                                         </p>
                                         <p>
                                             A suivi la formation suivante :
@@ -66,10 +66,10 @@
                                                     </td>
                                                     <td>
                                                         Du <span
-                                                            t-field="doc.date_begin"
-                                                        /> au <span
-                                                            t-field="doc.date_end"
-                                                        />
+                                                        t-field="doc.date_begin"
+                                                    /> au <span
+                                                        t-field="doc.date_end"
+                                                    />
                                                     </td>
                                                     <td style="width: 120px;">
                                                         <strong>Lieu</strong>
@@ -84,8 +84,8 @@
                                                     </td>
                                                     <td>
                                                         <span
-                                                            t-out="doc.hours"
-                                                        /> heures
+                                                        t-out="doc.hours"
+                                                    /> heures
                                                     </td>
                                                     <td style="width: 120px;">
                                                         <strong>Intervenant(s)</strong>
@@ -100,10 +100,10 @@
                                                             t-as="trainer"
                                                         >
                                                             <span
-                                                                t-field="trainer.lastname"
-                                                            /> <span
-                                                                t-field="trainer.firstname"
-                                                            />,
+                                                            t-field="trainer.lastname"
+                                                        /> <span
+                                                            t-field="trainer.firstname"
+                                                        />,
                                                         </t>
                                                     </td>
                                                 </tr>
@@ -119,8 +119,8 @@
                                     >
                                         Pour valoir ce que de droit <br />
                                         Fait à <span
-                                            t-field="doc.place_attestation"
-                                        />, le <span t-field="doc.date_attestation" />
+                                        t-field="doc.place_attestation"
+                                    />, le <span t-field="doc.date_attestation" />
                                     </div>
                                 </div>
                             </div>
@@ -140,5 +140,4 @@
         <field name="binding_type">report</field>
         <field name="paperformat_id" ref="paperformat_a4_training" />
     </record>
-
 </odoo>
diff --git a/templates/report_convocation.xml b/templates/report_convocation.xml
index 773999c..0fcb287 100644
--- a/templates/report_convocation.xml
+++ b/templates/report_convocation.xml
@@ -17,19 +17,17 @@
                                 <div class="row mb-4">
                                     <div class="offset-8 col-4">
                                         <p>
-                                            À <t t-if="student.student_id.title"><t
-                                                    t-out="student.student_id.title.name"
-                                                /> </t><t
-                                                t-out="student.student_id.lastname"
-                                                class="text-uppercase"
-                                            /> <t
-                                                t-out="student.student_id.firstname"
-                                            />
+                                            À <t t-if="student.student_id.title">
+                                            <t t-out="student.student_id.title.name" />
+                                        </t><t
+                                            t-out="student.student_id.lastname"
+                                            class="text-uppercase"
+                                        /> <t t-out="student.student_id.firstname" />
                                             <br />
                                             <t t-out="doc.company_id.city" />, le <t
-                                                t-out="doc.date_convocation"
-                                                t-options="{'widget': 'date', 'format': 'dd/MM/yyyy'}"
-                                            />
+                                            t-out="doc.date_convocation"
+                                            t-options="{'widget': 'date', 'format': 'dd/MM/yyyy'}"
+                                        />
                                         </p>
                                     </div>
                                 </div>
@@ -56,86 +54,87 @@
                                         />
                                         <p>
                                             dont l'objectif est de vous permettre de : <br
-                                            />
+                                        />
                                             <span t-field="doc.course_id.objective" />
                                         </p>
                                         <p>
                                             Le programme détaillé de cette formation est joint en annexe.<br
-                                            />
+                                        />
                                             Pour toute demande d’information concernant cette formation, vous pouvez vous adresser à : <a
-                                                t-attf-href="mailto:{{doc.email_contact}}"
-                                            ><t t-out="doc.email_contact" /></a>
+                                            t-attf-href="mailto:{{doc.email_contact}}"
+                                        >
+                                            <t t-out="doc.email_contact" />
+                                        </a>
                                         </p>
                                         <p>
                                             Cette formation se déroulera :
                                             <ul>
-                                                <li
-                                                    t-if="doc.training_type_id"
-                                                >au format suivant : <span
-                                                        t-out="doc.training_type_id.name"
-                                                        class="fw-bold text-decoration-underline"
-                                                    /><br /></li>
-                                                <li>
+                                            <li
+                                                t-if="doc.training_type_id"
+                                            >au format suivant : <span
+                                                t-out="doc.training_type_id.name"
+                                                class="fw-bold text-decoration-underline"
+                                            /><br /></li>
+                                            <li>
                                                     aux dates suivantes :
                                                     <ul>
-                                                        <li
-                                                            t-foreach="doc.session_ids"
-                                                            t-as="session"
-                                                        >
+                                                <li
+                                                    t-foreach="doc.session_ids"
+                                                    t-as="session"
+                                                >
                                                            <t
-                                                                t-out="session.date"
-                                                                t-options="{'widget': 'datetime', 'format': 'dd/MM/yyyy'}"
-                                                            /> de <t
-                                                                t-out="session.date"
-                                                                t-options="{'widget': 'datetime', 'format': 'HH:mm'}"
-                                                            /> à <t
-                                                                t-out="session.date + relativedelta(hours=session.date_delay)"
-                                                                t-options="{'widget': 'datetime', 'format': 'HH:mm'}"
-                                                            />
+                                                    t-out="session.date"
+                                                    t-options="{'widget': 'datetime', 'format': 'dd/MM/yyyy'}"
+                                                /> de <t
+                                                    t-out="session.date"
+                                                    t-options="{'widget': 'datetime', 'format': 'HH:mm'}"
+                                                /> à <t
+                                                    t-out="session.date + relativedelta(hours=session.date_delay)"
+                                                    t-options="{'widget': 'datetime', 'format': 'HH:mm'}"
+                                                />
                                                         </li>
-                                                    </ul>
-                                                </li>
                                             </ul>
+                                                </li>
+                                        </ul>
                                         </p>
                                         <p>
                                             Lieu : <span
-                                                t-out="doc.place"
-                                                class="fw-bold"
-                                            />
+                                            t-out="doc.place"
+                                            class="fw-bold"
+                                        />
                                             <t t-if="doc.place_detail">
-                                                <br /><span
-                                                    t-field="doc.place_detail"
-                                                    class="fst-italic"
-                                                />
-                                            </t>
+                                            <br />
+                                            <span
+                                                t-field="doc.place_detail"
+                                                class="fst-italic"
+                                            />
+                                        </t>
                                         </p>
                                         <p t-if="doc.equipment">
                                             Nous vous prions pour le bon déroulé de la formation d'apporter les éléments suivants : <br
-                                            />
+                                        />
                                             <span t-field="doc.equipment" />
                                         </p>
                                         <p>
                                             <span
-                                                class="fw-bold"
-                                            >Situations particulières</span><br />
+                                            class="fw-bold"
+                                        >Situations particulières</span><br />
                                             Pour toute difficulté ou handicap, veuillez contacter <a
-                                                t-attf-href="mailto:{{doc.email_contact}}"
-                                            ><t
-                                                    t-out="doc.email_contact"
-                                                /></a> pour voir les éventuelles adaptations à prévoir.
+                                            t-attf-href="mailto:{{doc.email_contact}}"
+                                        >
+                                            <t t-out="doc.email_contact" />
+                                        </a> pour voir les éventuelles adaptations à prévoir.
                                         </p>
                                         <p>
                                             Nous vous prions d’agréer, <t
-                                                t-if="student.student_id.title"
-                                            ><t
-                                                    t-out="student.student_id.title.name"
-                                                />, </t>l’expression de nos cordiales salutations. <br
-                                            />
+                                            t-if="student.student_id.title"
+                                        ><t
+                                            t-out="student.student_id.title.name"
+                                        />, </t>l’expression de nos cordiales salutations. <br
+                                        />
                                             Fait à <span
-                                                t-field="doc.company_id.city"
-                                            />, le <span
-                                                t-field="doc.date_convocation"
-                                            />
+                                            t-field="doc.company_id.city"
+                                        />, le <span t-field="doc.date_convocation" />
                                         </p>
                                     </div>
                                 </div>
@@ -156,5 +155,4 @@
         <field name="binding_type">report</field>
         <field name="paperformat_id" ref="paperformat_a4_training" />
     </record>
-
 </odoo>
diff --git a/templates/report_program.xml b/templates/report_program.xml
index 77ccf59..f3da69d 100644
--- a/templates/report_program.xml
+++ b/templates/report_program.xml
@@ -28,22 +28,22 @@
 
                                 <div class="subblock" t-if="doc.course_id.objective">
                                     <h3><t
-                                            t-out="chapter"
-                                        />. OBJECTIFS / COMPÉTENCES VISÉES</h3>
+                                        t-out="chapter"
+                                    />. OBJECTIFS / COMPÉTENCES VISÉES</h3>
                                     <p t-field="doc.course_id.objective" />
                                     <t t-set="chapter" t-value="chapter + 1" />
                                 </div>
 
                                 <div class="" t-if="doc.course_id.session_ids">
                                     <h3><t
-                                            t-out="chapter"
-                                        />. PROGRAMME DE LA FORMATION</h3>
+                                        t-out="chapter"
+                                    />. PROGRAMME DE LA FORMATION</h3>
                                     <t t-foreach="doc.session_ids" t-as="session">
                                         <div class="subblock">
                                             <h4 style="margin-left: 40px;">
                                                 <t t-out="chapter" />. <t
-                                                    t-out="'%01d' % (session_index+1)"
-                                                /> <t t-out="session.session_id.name" />
+                                                t-out="'%01d' % (session_index+1)"
+                                            /> <t t-out="session.session_id.name" />
                                             </h4>
                                             <p style="margin-bottom: 40px;">
                                                 <span
@@ -57,15 +57,15 @@
 
                                 <div class="subblock" t-if="doc.course_id.method">
                                     <h3><t
-                                            t-out="chapter"
-                                        />. MÉTHODOLOGIE ET SUPPORTS PÉDAGOGIQUES</h3>
+                                        t-out="chapter"
+                                    />. MÉTHODOLOGIE ET SUPPORTS PÉDAGOGIQUES</h3>
                                     <span t-field="doc.course_id.method" />
                                     <t t-set="chapter" t-value="chapter + 1" />
                                 </div>
                                 <div class="subblock" t-if="doc.course_id.means">
                                     <h3><t
-                                            t-out="chapter"
-                                        />. MOYENS PÉDAGOGIQUES D'ENCADREMENT</h3>
+                                        t-out="chapter"
+                                    />. MOYENS PÉDAGOGIQUES D'ENCADREMENT</h3>
                                     <span t-field="doc.course_id.means" />
                                     <t t-set="chapter" t-value="chapter + 1" />
                                 </div>
@@ -78,46 +78,45 @@
 
                                 <div class="subblock" t-if="doc.course_id.evaluation">
                                     <h3><t
-                                            t-out="chapter"
-                                        />. MODALITÉS D'ÉVALUATION</h3>
+                                        t-out="chapter"
+                                    />. MODALITÉS D'ÉVALUATION</h3>
                                     <span t-field="doc.course_id.evaluation" />
                                     <t t-set="chapter" t-value="chapter + 1" />
                                 </div>
 
                                 <div class="subblock" t-if="doc.session_hours">
                                     <h3><t
-                                            t-out="chapter"
-                                        />. MODALITÉS ET DURÉE DE LA FORMATION</h3>
+                                        t-out="chapter"
+                                    />. MODALITÉS ET DURÉE DE LA FORMATION</h3>
                                     <p>
                                         Formation dispensée en intra-entreprise par groupes de <t
-                                            t-out="doc.students_nb_prev"
-                                        /> personnes, et par session de demi-journées, afin de s’adapter aux contraintes de disponibilité de l’entreprise.
+                                        t-out="doc.students_nb_prev"
+                                    /> personnes, et par session de demi-journées, afin de s’adapter aux contraintes de disponibilité de l’entreprise.
                                     </p>
                                     <p>
-                                        Horaires : <strong><t
-                                                t-out="doc.session_hours"
-                                            /></strong>
+                                        Horaires : <strong>
+                                        <t t-out="doc.session_hours" />
+                                    </strong>
                                     </p>
                                     <p>
                                         <strong><t
-                                                t-out="doc.session_count"
-                                            /> sessions</strong> de formation, soit <strong
-                                        ><t
-                                                t-out="doc.hours"
-                                            /> heures par personne</strong>
+                                        t-out="doc.session_count"
+                                    /> sessions</strong> de formation, soit <strong><t
+                                        t-out="doc.hours"
+                                    /> heures par personne</strong>
                                     </p>
                                     <t t-set="chapter" t-value="chapter + 1" />
                                 </div>
 
                                 <div class="subblock" t-if="doc.date_begin">
                                     <h3><t
-                                            t-out="chapter"
-                                        />. LIEU ET DÉLAIS DE LA FORMATION</h3>
+                                        t-out="chapter"
+                                    />. LIEU ET DÉLAIS DE LA FORMATION</h3>
                                     <p t-field="doc.place" />
                                     <p>
                                         Du <t t-out="doc.date_begin" /> au <t
-                                            t-out="doc.date_end"
-                                        />
+                                        t-out="doc.date_end"
+                                    />
                                     </p>
                                     <t t-set="chapter" t-value="chapter + 1" />
                                 </div>
@@ -125,10 +124,10 @@
                                     <h3><t t-out="chapter" />. COÛT DE LA FORMATION</h3>
                                     <p>
                                         <t
-                                            t-out="doc.cost"
-                                        /> € HT en formation INTRA de <t
-                                            t-out="doc.students_nb_prev"
-                                        /> personnes.
+                                        t-out="doc.cost"
+                                    /> € HT en formation INTRA de <t
+                                        t-out="doc.students_nb_prev"
+                                    /> personnes.
                                     </p>
                                     <t t-set="chapter" t-value="chapter + 1" />
                                 </div>
@@ -177,5 +176,4 @@
         <field name="binding_type">report</field>
         <field name="paperformat_id" ref="paperformat_a4_training" />
     </record>
-
 </odoo>
diff --git a/views/account_move_view.xml b/views/account_move_view.xml
index e8c2e7c..4c6d3be 100644
--- a/views/account_move_view.xml
+++ b/views/account_move_view.xml
@@ -2,21 +2,19 @@
 <!-- Copyright 2019- Le Filament (https://le-filament.com)
      License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
 <odoo>
-
     <!-- Client Form View -->
     <record id="account_invoice_training_form_view" model="ir.ui.view">
-      <field name="name">Invoice Training Form View</field>
-      <field name="model">account.move</field>
-      <field name="inherit_id" ref="account.view_move_form" />
-      <field name="arch" type="xml">
-              <xpath expr="//page[@name='other_info']/group/group[2]" position="inside">
-                  <field
+        <field name="name">Invoice Training Form View</field>
+        <field name="model">account.move</field>
+        <field name="inherit_id" ref="account.view_move_form" />
+        <field name="arch" type="xml">
+            <xpath expr="//page[@name='other_info']/group/group[2]" position="inside">
+                <field
                     name="training_id"
                     domain="['|', ('customer_id', '=', partner_id), ('opco_id', '=', partner_id)]"
                     options="{ 'no_create': True, }"
                 />
-              </xpath>
-      </field>
+            </xpath>
+        </field>
     </record>
-
 </odoo>
diff --git a/views/res_company_view.xml b/views/res_company_view.xml
index ea5dc1d..67de5e0 100644
--- a/views/res_company_view.xml
+++ b/views/res_company_view.xml
@@ -2,7 +2,6 @@
 <!-- Copyright 2019- Le Filament (https://le-filament.com)
      License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
 <odoo>
-
     <!-- Form View -->
     <record id="view_company_form_form_view" model="ir.ui.view">
         <field name="name">res.company.form.training</field>
@@ -14,5 +13,4 @@
             </xpath>
         </field>
     </record>
-
 </odoo>
diff --git a/views/res_config_settings_view.xml b/views/res_config_settings_view.xml
index 02ee231..171d80a 100644
--- a/views/res_config_settings_view.xml
+++ b/views/res_config_settings_view.xml
@@ -9,11 +9,6 @@
         <field name="inherit_id" ref="base.res_config_settings_view_form" />
         <field name="arch" type="xml">
             <xpath expr="//form" position="inside">
-                <field
-                    name="country_code"
-                    invisible="1"
-                    groups="account.group_account_manager"
-                />
                 <app
                     data-string="Formation"
                     string="Formation"
@@ -54,27 +49,26 @@
                                 <field name="text_font" />
                                 <br />
                                 <field name="logo_ids" mode="kanban">
-                                     <kanban delete="1">
-                                         <field name="name" />
-                                         <field name="company_id" />
-                                         <field name="logo" />
-                                         <templates>
-                                              <t t-name="kanban-box">
-                                                  <div class="oe_kanban_global_click">
-                                                      <field
+                                    <kanban delete="1">
+                                        <field name="name" />
+                                        <field name="company_id" />
+                                        <field name="logo" />
+                                        <templates>
+                                            <t t-name="kanban-box">
+                                                <div class="oe_kanban_global_click">
+                                                    <field
                                                         name="logo"
                                                         preview_image="logo"
                                                         widget="image"
                                                         options="{'zoom': true, 'zoom_delay': 1000}"
                                                     />
                                                 </div>
-                                              </t>
-                                          </templates>
-                                     </kanban>
-                                     <form string="Logos">
-                                         <field name="logo" filename="name" />
-                                         <field name="company_id" invisible="1" />
-                                     </form>
+                                            </t>
+                                        </templates>
+                                    </kanban>
+                                    <form string="Logos">
+                                        <field name="logo" filename="name" />
+                                    </form>
                                 </field>
                             </setting>
                         </block>
diff --git a/views/res_partner_view.xml b/views/res_partner_view.xml
index df6c999..900886d 100644
--- a/views/res_partner_view.xml
+++ b/views/res_partner_view.xml
@@ -2,17 +2,15 @@
 <!-- Copyright 2019- Le Filament (https://le-filament.com)
      License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
 <odoo>
-
     <!-- Client Form View -->
     <record id="res_partner_training_form_view" model="ir.ui.view">
-      <field name="name">Parnter Training Form View</field>
-      <field name="model">res.partner</field>
-      <field name="inherit_id" ref="base.view_partner_form" />
-      <field name="arch" type="xml">
-              <xpath expr="//group[@name='sale']" position="inside">
-                  <field name="is_opco" />
-              </xpath>
-      </field>
+        <field name="name">Parnter Training Form View</field>
+        <field name="model">res.partner</field>
+        <field name="inherit_id" ref="base.view_partner_form" />
+        <field name="arch" type="xml">
+            <xpath expr="//group[@name='sale']" position="inside">
+                <field name="is_opco" />
+            </xpath>
+        </field>
     </record>
-
 </odoo>
diff --git a/views/sale_order_view.xml b/views/sale_order_view.xml
index cdb83f9..624562b 100644
--- a/views/sale_order_view.xml
+++ b/views/sale_order_view.xml
@@ -2,21 +2,19 @@
 <!-- Copyright 2019- Le Filament (https://le-filament.com)
      License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
 <odoo>
-
     <!-- Client Form View -->
     <record id="sale_order_training_form_view" model="ir.ui.view">
-      <field name="name">Sale Order Training Form View</field>
-      <field name="model">sale.order</field>
-      <field name="inherit_id" ref="sale.view_order_form" />
-      <field name="arch" type="xml">
-              <xpath expr="//group[@name='sale_info']" position="inside">
-                  <field
+        <field name="name">Sale Order Training Form View</field>
+        <field name="model">sale.order</field>
+        <field name="inherit_id" ref="sale.view_order_form" />
+        <field name="arch" type="xml">
+            <xpath expr="//group[@name='sale_info']" position="inside">
+                <field
                     name="training_id"
                     domain="['|', ('customer_id', '=', partner_id), ('opco_id', '=', partner_id)]"
                     options="{ 'no_create': True, }"
                 />
-              </xpath>
-      </field>
+            </xpath>
+        </field>
     </record>
-
 </odoo>
diff --git a/views/training_course_view.xml b/views/training_course_view.xml
index a2500d1..0d43dbc 100644
--- a/views/training_course_view.xml
+++ b/views/training_course_view.xml
@@ -7,123 +7,121 @@
         <field name="name">Training Course Form View</field>
         <field name="model">training.course</field>
         <field name="arch" type="xml">
-        <form string="Formation">
-            <sheet>
-                <label for="name" />
-                <h1><field name="name" /></h1>
-                <group>
-                    <field name="duration_total" />
-                </group>
-                <notebook>
-                    <!-- Informations générales -->
-                    <page name="general_info" string="Informations générales">
-                        <label for="description" class="mb-2" />
-                        <field name="description" class="mb-4" />
-
-                        <label for="objective" class="mb-2" />
-                        <field name="objective" class="mb-4" />
-
-                        <label for="method" class="mb-2" />
-                        <div class="text-muted">
+            <form string="Formation">
+                <sheet>
+                    <label for="name" />
+                    <h1>
+                        <field name="name" />
+                    </h1>
+                    <group>
+                        <field name="duration_total" />
+                    </group>
+                    <notebook>
+                        <!-- Informations générales -->
+                        <page name="general_info" string="Informations générales">
+                            <label for="description" class="mb-2" />
+                            <field name="description" class="mb-4" />
+
+                            <label for="objective" class="mb-2" />
+                            <field name="objective" class="mb-4" />
+
+                            <label for="method" class="mb-2" />
+                            <div class="text-muted">
                             La méthodologie est décrite dans le programme de formation
                         </div>
-                        <field name="method" class="mb-4" />
+                            <field name="method" class="mb-4" />
 
-                        <label for="means" class="mb-2" />
-                        <div class="text-muted">
+                            <label for="means" class="mb-2" />
+                            <div class="text-muted">
                             Apparaît dans le programme et la convention
                         </div>
-                        <field name="means" class="mb-4" />
+                            <field name="means" class="mb-4" />
 
-                        <label for="control" class="mb-2" />
-                        <div class="text-muted">
+                            <label for="control" class="mb-2" />
+                            <div class="text-muted">
                             Apparaît dans le programme et la convention
                         </div>
-                        <field name="control" class="mb-4" />
+                            <field name="control" class="mb-4" />
 
-                        <label for="evaluation" class="mb-2" />
-                        <div class="text-muted">
+                            <label for="evaluation" class="mb-2" />
+                            <div class="text-muted">
                             Apparaît dans le programme et la convention
                         </div>
-                        <field name="evaluation" class="mb-4" />
+                            <field name="evaluation" class="mb-4" />
 
-                        <label for="students_profile" class="mb-2" />
-                        <div class="text-muted">
+                            <label for="students_profile" class="mb-2" />
+                            <div class="text-muted">
                             Apparaît dans le programme et la convention
                         </div>
-                        <field name="students_profile" class="mb-4" />
+                            <field name="students_profile" class="mb-4" />
 
-                        <label for="prerequisites" class="mb-2" />
-                        <div class="text-muted">
+                            <label for="prerequisites" class="mb-2" />
+                            <div class="text-muted">
                             Apparaît dans le programme et la convention
                         </div>
-                        <field name="prerequisites" class="mb-4" />
+                            <field name="prerequisites" class="mb-4" />
 
-                        <label for="nature" class="mb-2" />
-                        <div class="text-muted">
+                            <label for="nature" class="mb-2" />
+                            <div class="text-muted">
                             Apparaît dans la convention et l'attestation de fin de formation
                         </div>
-                        <field name="nature" class="mb-4" />
+                            <field name="nature" class="mb-4" />
 
-                        <label for="acquis" class="mb-2" />
-                        <div class="text-muted">
+                            <label for="acquis" class="mb-2" />
+                            <div class="text-muted">
                             Apparaît dans la convention et l'attestation de fin de formation
                         </div>
-                        <field name="acquis" class="mb-4" />
-                    </page>
-                    <!-- Sessions / Modules -->
-                    <page name="sessions" string="Sessions/Modules">
-                        <field name="session_ids">
-                            <tree>
-                                <field name="sequence" widget="handle" />
-                                <field name="name" />
-                                <field name="duration" />
-                            </tree>
-                        </field>
-                    </page>
-                </notebook>
-            </sheet>
-            <div class="oe_chatter">
-                <field name="message_follower_ids" widget="mail_followers" />
-                <field name="message_ids" widget="mail_thread" />
-            </div>
-        </form>
-    </field>
+                            <field name="acquis" class="mb-4" />
+                        </page>
+                        <!-- Sessions / Modules -->
+                        <page name="sessions" string="Sessions/Modules">
+                            <field name="session_ids">
+                                <list>
+                                    <field name="sequence" widget="handle" />
+                                    <field name="name" />
+                                    <field name="duration" />
+                                </list>
+                            </field>
+                        </page>
+                    </notebook>
+                </sheet>
+                <chatter />
+            </form>
+        </field>
     </record>
 
-
-    <!-- Tree View Programs -->
+    <!-- List View Programs -->
     <record id="training_course_tree" model="ir.ui.view">
-        <field name="name">Training Course Tree View</field>
+        <field name="name">Training Course List View</field>
         <field name="model">training.course</field>
         <field name="arch" type="xml">
-            <tree decoration-danger="duration_total == 0">
+            <list decoration-danger="duration_total == 0">
                 <field name="name" />
                 <field name="duration_total" />
                 <field name="session_count" />
-            </tree>
+            </list>
         </field>
     </record>
 
     <!-- Search view -->
     <record id="training_course_search" model="ir.ui.view">
-          <field name="name">Training Course Search View</field>
-          <field name="model">training.course</field>
-          <field name="arch" type="xml">
-                <search>
-                    <!-- Champs de recherche -->
-                    <field name="name" />
-                    <!-- Groupes -->
-                    <group expand="0" name="group_by" string="Group By">
-                       <filter
+        <field name="name">Training Course Search View</field>
+        <field name="model">training.course</field>
+        <field name="arch" type="xml">
+            <search>
+                <!-- Champs de recherche -->
+                <field name="name" />
+                <!-- Groupes -->
+                <group expand="0" name="group_by" string="Group By">
+                    <filter
                         string="Nombre de sessions"
                         name="group_duration_total"
                         domain="[]"
                         context="{'group_by' : 'duration_total'}"
                     />
-                   </group>
-                </search>
-          </field>
+                </group>
+            </search>
+        </field>
     </record>
 
     <!-- Form View -->
@@ -131,30 +129,29 @@
         <field name="name">Training Course Session Form View</field>
         <field name="model">training.course.session</field>
         <field name="arch" type="xml">
-        <form string="Formation">
-            <sheet>
-                <group>
-                    <field name="name" />
-                    <field name="description" />
-                    <field name="duration" />
-                    <field name="course_id" widget="many2many_tags" />
-                </group>
-            </sheet>
-        </form>
-    </field>
+            <form string="Formation">
+                <sheet>
+                    <group>
+                        <field name="name" />
+                        <field name="description" />
+                        <field name="duration" />
+                        <field name="course_id" widget="many2many_tags" />
+                    </group>
+                </sheet>
+            </form>
+        </field>
     </record>
 
-
-    <!-- Tree View Programs -->
+    <!-- List View Programs -->
     <record id="training_course_session_tree" model="ir.ui.view">
-        <field name="name">Training Course Session Tree View</field>
+        <field name="name">Training Course Session List View</field>
         <field name="model">training.course.session</field>
         <field name="arch" type="xml">
-          <tree>
-              <field name="name" />
-              <field name="duration" />
-              <field name="course_id" />
-          </tree>
+            <list>
+                <field name="name" />
+                <field name="duration" />
+                <field name="course_id" />
+            </list>
         </field>
     </record>
 
@@ -162,12 +159,12 @@
     <record model="ir.actions.act_window" id="action_training_course">
         <field name="name">Catalogue de Formations</field>
         <field name="res_model">training.course</field>
-        <field name="view_mode">tree,form,pivot,graph</field>
+        <field name="view_mode">list,form,pivot,graph</field>
     </record>
 
     <record model="ir.actions.act_window" id="action_training_course_session">
         <field name="name">Sessions de Formations</field>
         <field name="res_model">training.course.session</field>
-        <field name="view_mode">tree,form,pivot,graph</field>
+        <field name="view_mode">list,form,pivot,graph</field>
     </record>
 </odoo>
diff --git a/views/training_session_view.xml b/views/training_session_view.xml
index 6041079..4980de5 100644
--- a/views/training_session_view.xml
+++ b/views/training_session_view.xml
@@ -21,19 +21,18 @@
         </field>
     </record>
 
-
-    <!-- Tree View -->
+    <!-- List View -->
     <record id="training_session_tree" model="ir.ui.view">
-        <field name="name">Training session Tree View</field>
+        <field name="name">Training session List View</field>
         <field name="model">training.session</field>
         <field name="arch" type="xml">
-            <tree>
+            <list>
                 <field name="date" />
                 <field name="session_id" />
                 <field name="training_id" />
                 <field name="customer_id" />
                 <field name="user_id" />
-            </tree>
+            </list>
         </field>
     </record>
 
@@ -76,7 +75,6 @@
     <record model="ir.actions.act_window" id="action_training_session">
         <field name="name">Sessions</field>
         <field name="res_model">training.session</field>
-        <field name="view_mode">tree,form,calendar,pivot,graph</field>
+        <field name="view_mode">list,form,calendar,pivot,graph</field>
     </record>
-
 </odoo>
diff --git a/views/training_training_view.xml b/views/training_training_view.xml
index 07abf9d..edbc45e 100644
--- a/views/training_training_view.xml
+++ b/views/training_training_view.xml
@@ -10,7 +10,7 @@
                 <header>
                     <button
                         name="action_valid"
-                        invisible="state != 'draft'"
+                        nvisible="state != 'draft'"
                         string="Valider"
                         class="btn-primary"
                         type="object"
@@ -69,7 +69,6 @@
                     </group>
                     <group string="Infos Financières">
                         <group>
-                            <field name="company_id" invisible="1" />
                             <field name="cost" required="1" />
                             <field name="is_vat" />
                             <field name="payment_term_id" />
@@ -88,27 +87,27 @@
                         <page name="students" string="Stagiaires">
                             <field
                                 name="student_ids"
-                                context="{'default_parent_id': customer_id, 'default_training_id': active_id}"
+                                context="{'default_parent_id': customer_id}"
                             >
-                                <tree>
+                                <list>
                                     <field
                                         name="student_id"
                                         domain="[('parent_id', '=', parent_id), ]"
                                     />
                                     <field name="parent_id" />
                                     <field name="certificate" />
-                                </tree>
+                                </list>
                             </field>
                         </page>
                         <page name="sessions" string="Sessions">
                             <field name="session_ids">
-                                <tree editable="bottom">
+                                <list editable="bottom">
                                     <field name="sequence" widget="handle" />
                                     <field name="session_id" />
                                     <field name="date" />
                                     <field name="user_id" />
                                     <field name="date_delay" />
-                                </tree>
+                                </list>
                             </field>
                         </page>
                         <page name="opco" string="OPCO">
@@ -145,20 +144,17 @@
                         </page>
                     </notebook>
                 </sheet>
-                <div class="oe_chatter">
-                    <field name="message_follower_ids" widget="mail_followers" />
-                    <field name="message_ids" widget="mail_thread" />
-                </div>
+                <chatter />
             </form>
         </field>
     </record>
 
-    <!-- Tree View -->
+    <!-- List View -->
     <record id="training_training_tree" model="ir.ui.view">
-        <field name="name">Training Tree View</field>
+        <field name="name">Training List View</field>
         <field name="model">training.training</field>
         <field name="arch" type="xml">
-            <tree>
+            <list>
                 <field name="customer_id" />
                 <field name="opco_id" />
                 <field name="course_id" />
@@ -169,7 +165,7 @@
                 <field name="invoiced" />
                 <field name="payment" />
                 <field name="state" />
-            </tree>
+            </list>
         </field>
     </record>
 
@@ -252,7 +248,6 @@
     <record model="ir.actions.act_window" id="action_training_training">
         <field name="name">Formations</field>
         <field name="res_model">training.training</field>
-        <field name="view_mode">tree,form,pivot,graph</field>
+        <field name="view_mode">list,form,pivot,graph</field>
     </record>
-
 </odoo>
diff --git a/views/training_type_view.xml b/views/training_type_view.xml
index d934ddc..0a4c04b 100644
--- a/views/training_type_view.xml
+++ b/views/training_type_view.xml
@@ -2,15 +2,14 @@
 <!-- Copyright 2019- Le Filament (https://le-filament.com)
      License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
 <odoo>
-
-    <!-- Tree View -->
+    <!-- List View -->
     <record id="training_type_tree" model="ir.ui.view">
-        <field name="name">Training Type Tree View</field>
+        <field name="name">Training Type List View</field>
         <field name="model">training.type</field>
         <field name="arch" type="xml">
-            <tree editable="bottom">
+            <list editable="bottom">
                 <field name="name" />
-            </tree>
+            </list>
         </field>
     </record>
 
@@ -30,7 +29,6 @@
     <record model="ir.actions.act_window" id="action_training_type">
         <field name="name">Types de Formations</field>
         <field name="res_model">training.type</field>
-        <field name="view_mode">tree</field>
+        <field name="view_mode">list</field>
     </record>
-
 </odoo>
-- 
GitLab