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