diff --git a/.eslintrc.yml b/.eslintrc.yml
deleted file mode 100644
index 0b382039586ae1303994e343dfca336fe46b0bdd..0000000000000000000000000000000000000000
--- 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 c9f42387ef7051b2a868a9361f4f3cb6d562d4ed..109270f27c2a80740fab3c0fbc084b9d938f964e 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 f58f2c6608a042bb13f2c7559889e33bf3f46733..207e4c9037d15863a1efcc9bd98b6199792df472 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 5b6d4b361ace92f3877993bf2848fac190d8fab6..0000000000000000000000000000000000000000
--- 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 4fb9ba5362fb402b42c1a587d56b28ed71e8f933..b855a9270efdb66248c84038041d1a589961ee44 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 42885e9b5eb0cde47fa65d308683c29504934143..f9450512a1b688db0b671c400b492ac9e4e2e425 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 0240c75f6a4ae4550f3473ad0a5faaef022bf6c7..5e63128201e64f4d1d6a2b1b582a555579b1298b 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 a9151751a702dfa33321d4ab4f5633f72d02672e..f8fae2f9276e9e0391428840036a39b54cd32ad0 100644
--- a/__manifest__.py
+++ b/__manifest__.py
@@ -3,7 +3,7 @@
"summary": "Gestion des mise en production logicielles",
"author": "Le Filament",
"website": "https://le-filament.com",
- "version": "17.0.1.0.0",
+ "version": "18.0.1.0.0",
"license": "AGPL-3",
"depends": [
"web",
@@ -15,7 +15,7 @@
# wizard
"wizard/multi_partner_release_wizard.xml",
# templates
- "templates/header_template.xml",
+ # "templates/header_template.xml",
"templates/partner_release_detail.xml",
"templates/partner_release_list.xml",
# views
diff --git a/controllers/__init__.py b/controllers/__init__.py
index 3512ec93f73fff1dc1885b8a3e42d65980dba163..a2ce8dc1d231cee67f816e5aa6213430a16099ec 100644
--- a/controllers/__init__.py
+++ b/controllers/__init__.py
@@ -1 +1 @@
-from . import banner_release, main, portal
+from . import main, portal
diff --git a/controllers/banner_release.py b/controllers/banner_release.py
deleted file mode 100644
index b0f0b400f45a095dfed48a39e5cfe4390ef92f9f..0000000000000000000000000000000000000000
--- a/controllers/banner_release.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# © 2022 Le Filament (<http://www.le-filament.com>)
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-
-from odoo import http
-from odoo.http import request
-
-
-class BannerController(http.Controller):
- @http.route(["/lefilament_release/header"], type="json", auth="user")
- def release_header(self):
- return {
- "html": request.env["ir.qweb"]._render(
- "lefilament_release.header_template", {}
- )
- }
diff --git a/eslint.config.cjs b/eslint.config.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..0d5731f89a8bc2073894c17dfe41e410db0e4cfe
--- /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/models/res_partner.py b/models/res_partner.py
index 03fb752fbafc81547d6e8fa0e94b613fb79d1c46..ad0aaf94a0fc103ebd63b7be4ede32ace21b2b52 100644
--- a/models/res_partner.py
+++ b/models/res_partner.py
@@ -57,14 +57,13 @@ class ResPartner(models.Model):
if module.get("author_type") != "odoo":
# Création du module
if module.get("name") not in existing_modules.mapped("name"):
- new_module = module
+ new_module = module.copy()
new_module.pop("latest_version", False)
module_id = existing_modules.create(new_module)
# Mise à jour des versions
else:
- # ruff: noqa: B023
module_id = existing_modules.filtered(
- lambda m: m.name == module.get("name")
+ lambda m: m.name == module.get("name") # noqa: B023
)
module_update = ModuleVersion.search(
[
@@ -97,9 +96,8 @@ class ResPartner(models.Model):
)
)
if module_uninstalled:
- # ruff: noqa: B023
module_ids = partner.module_version_ids.filtered(
- lambda m: m.module_id.name in module_uninstalled
+ lambda m: m.module_id.name in module_uninstalled # noqa: B023
)
module_ids.unlink()
diff --git a/prettier.config.cjs b/prettier.config.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..e66cd82cc1e4dfeded9749598144f820c8491fab
--- /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/views/res_partner.xml b/views/res_partner.xml
index 22875f7cdd2fb77eb9932024130278594d9dc6a2..4b485971a999baa07b2dc88b4020207aa4090093 100644
--- a/views/res_partner.xml
+++ b/views/res_partner.xml
@@ -14,14 +14,13 @@
<group>
<field name="server_ip" />
</group>
- <group>
- </group>
+ <group />
</group>
<field name="module_version_ids">
- <tree editable="top" default_order="module_id">
+ <list editable="top" default_order="module_id">
<field name="module_id" />
<field name="latest_version" />
- </tree>
+ </list>
</field>
</page>
<page name="release" invisible="not is_company" string="Releases">
@@ -33,12 +32,12 @@
/>
</group>
<field name="release_ids" options="{'no_create': 1, 'no_edit': 1}">
- <tree>
+ <list>
<field name="release_date" />
<field name="user_id" />
<field name="description" />
<field name="release_module_ids" widget="many2many_tags" />
- </tree>
+ </list>
</field>
</page>
</xpath>
@@ -53,5 +52,4 @@
<field name="state">code</field>
<field name="code">action = records.set_release_url()</field>
</record>
-
</odoo>
diff --git a/views/res_partner_module.xml b/views/res_partner_module.xml
index 1ce697549a246eb502e675726a502c8fbcaa20b7..16f0c4dd3fc68192b0f0cd5d9e1cd3fe04857b53 100644
--- a/views/res_partner_module.xml
+++ b/views/res_partner_module.xml
@@ -38,22 +38,22 @@
readonly="1"
default_order="partner_id"
>
- <tree>
+ <list>
<field name="partner_id" />
<field name="latest_version" />
- </tree>
+ </list>
</field>
</sheet>
</form>
</field>
</record>
- <!-- Tree View -->
+ <!-- List View -->
<record id="res_partner_module_tree_view" model="ir.ui.view">
<field name="name">res.partner.module.tree</field>
<field name="model">res.partner.module</field>
<field name="arch" type="xml">
- <tree>
+ <list>
<field name="name" />
<field name="author_type" />
<field name="author" />
@@ -62,7 +62,7 @@
options="{'no_create': 1,}"
widget="many2many_tags"
/>
- </tree>
+ </list>
</field>
</record>
@@ -71,7 +71,6 @@
<field name="name">Liste Modules</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner.module</field>
- <field name="view_mode">tree,form</field>
+ <field name="view_mode">list,form</field>
</record>
-
</odoo>
diff --git a/views/res_partner_module_version.xml b/views/res_partner_module_version.xml
index 3bfe0686a3436daa26bc1f17d763182a8223cf00..98a3fe6fea7bcb5eddf3fdf561c0a3c3fe4b1b72 100644
--- a/views/res_partner_module_version.xml
+++ b/views/res_partner_module_version.xml
@@ -14,16 +14,16 @@
</field>
</record>
- <!-- Tree View -->
+ <!-- List View -->
<record id="res_partner_module_version_tree_view" model="ir.ui.view">
<field name="name">res.partner.module.version.tree</field>
<field name="model">res.partner.module.version</field>
<field name="arch" type="xml">
- <tree string="Modules" editable="top">
+ <list string="Modules" editable="top">
<field name="partner_id" options="{'no_create': 1, 'no_edit': 1}" />
<field name="module_id" options="{'no_create': 1, 'no_edit': 1}" />
<field name="latest_version" />
- </tree>
+ </list>
</field>
</record>
@@ -35,8 +35,7 @@
<field name="name">Modules par client et version</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner.module.version</field>
- <field name="view_mode">tree</field>
+ <field name="view_mode">list</field>
</record>
-
</data>
</odoo>
diff --git a/views/res_partner_release.xml b/views/res_partner_release.xml
index a5ad8b76895ca088d6e5a2dc86d892de7e32c23e..65999aa05610eb36051bb2cff9dd14a7a3a1b998 100644
--- a/views/res_partner_release.xml
+++ b/views/res_partner_release.xml
@@ -66,48 +66,40 @@
options="{'string': 'Copier le lien'}"
/>
</group>
- <hr />
+ <hr colspan="12" />
<label for="description" class="font-weight-bold" />
<field name="description" />
- <hr />
+ <hr colspan="12" />
<label for="release_module_ids" class="font-weight-bold" />
- <field
- name="release_module_ids"
- context="{'default_release_id': active_id}"
- >
- <tree editable="top">
- <field name="partner_id" invisible="1" />
- <field name="release_id" invisible="1" />
+ <field name="release_module_ids">
+ <list editable="top">
<field
name="module_id"
options="{'no_create': True, 'no_edit': True}"
/>
<field name="release_type" />
<field name="log" />
- </tree>
+ </list>
</field>
</group>
</sheet>
- <div class="oe_chatter">
- <field name="message_follower_ids" />
- <field name="activity_ids" />
- <field name="message_ids" />
- </div>
+ <chatter />
</form>
</field>
</record>
- <!-- Tree View -->
+ <!-- List View -->
<record id="res_partner_release_tree_view" model="ir.ui.view">
<field name="name">res.partner.release.tree</field>
<field name="model">res.partner.release</field>
<field name="arch" type="xml">
- <tree banner_route="/lefilament_release/header">
+ <!-- TODO: make JS action to create releases for multiple customers -->
+ <list>
<field name="release_date" />
<field name="user_id" />
<field name="partner_id" />
<field name="name" />
- </tree>
+ </list>
</field>
</record>
@@ -125,10 +117,9 @@
<!-- Action Window -->
<record id="res_partner_release_act_window" model="ir.actions.act_window">
- <field name="name">Releases Client</field>
+ <field name="name">Releases Client Multiple</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner.release</field>
- <field name="view_mode">tree,form,pivot</field>
+ <field name="view_mode">list,form,pivot</field>
</record>
-
</odoo>
diff --git a/views/res_partner_release_module.xml b/views/res_partner_release_module.xml
index 16da3a700e3ec4a5e176c0b91bfd7ec0854af70d..d13f84020a0b4a7d04fafcfbd13b64a62382f4b3 100644
--- a/views/res_partner_release_module.xml
+++ b/views/res_partner_release_module.xml
@@ -50,16 +50,16 @@
</field>
</record>
- <!-- Tree View -->
+ <!-- List View -->
<record id="res_partner_release_module_tree_view" model="ir.ui.view">
<field name="name">res.partner.release.module.tree</field>
<field name="model">res.partner.release.module</field>
<field name="arch" type="xml">
- <tree create="0" delete="0" edit="0">
+ <list create="0" delete="0" edit="0">
<field name="release_date" />
<field name="module_id" />
<field name="release_type" />
- </tree>
+ </list>
</field>
</record>
@@ -79,7 +79,6 @@
<field name="name">Détail Modules</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner.release.module</field>
- <field name="view_mode">tree,form,pivot</field>
+ <field name="view_mode">list,form,pivot</field>
</record>
-
</odoo>
diff --git a/wizard/multi_partner_release_wizard.xml b/wizard/multi_partner_release_wizard.xml
index 1c48801b855d2f33eddaf314d82d81cadf13d7a5..8eff0d33539224f0a47dc6bc4c13d3a92d14d9b8 100644
--- a/wizard/multi_partner_release_wizard.xml
+++ b/wizard/multi_partner_release_wizard.xml
@@ -8,53 +8,47 @@
<field name="model">multi.partner.release.wizard</field>
<field name="arch" type="xml">
<form string="Releases Client">
- <sheet>
- <group>
- <group name="partner_details">
- <field name="release_date" />
- <field
- name="partner_ids"
- widget="many2many_tags"
- options="{'always_reload': True, 'no_create': True, 'no_edit': True}"
- />
- </group>
- <group name="release_details">
- <field
- name="user_id"
- options="{'no_create': True, 'no_edit': True}"
- />
- <field name="create_date" string="Créé le" />
- </group>
- <hr />
- <label for="description" class="font-weight-bold" />
- <field name="description" />
- <hr />
- <label for="release_module_ids" class="font-weight-bold" />
+ <group>
+ <group name="partner_details">
+ <field name="release_date" />
<field
- name="release_module_ids"
- context="{'default_release_id': active_id}"
- >
- <tree editable="top">
- <field name="release_id" invisible="1" />
- <field
- name="module_id"
- options="{'no_create': True, 'no_edit': True}"
- />
- <field name="release_type" />
- <field name="log" />
- </tree>
- </field>
+ name="partner_ids"
+ widget="many2many_tags"
+ options="{'always_reload': True, 'no_create': True, 'no_edit': True}"
+ />
</group>
- <footer>
- <button
- name="create_releases"
- type="object"
- string="Créer les releases"
- class="btn-primary"
+ <group name="release_details">
+ <field
+ name="user_id"
+ options="{'no_create': True, 'no_edit': True}"
/>
- <button string="Fermer" class="oe_link" special="cancel" />
- </footer>
- </sheet>
+ <field name="create_date" string="Créé le" />
+ </group>
+ <hr />
+ <label for="description" class="font-weight-bold" />
+ <field name="description" />
+ <hr />
+ <label for="release_module_ids" class="font-weight-bold" />
+ <field name="release_module_ids">
+ <list editable="top">
+ <field
+ name="module_id"
+ options="{'no_create': True, 'no_edit': True}"
+ />
+ <field name="release_type" />
+ <field name="log" />
+ </list>
+ </field>
+ </group>
+ <footer>
+ <button
+ name="create_releases"
+ type="object"
+ string="Créer les releases"
+ class="btn-primary"
+ />
+ <button string="Fermer" class="oe_link" special="cancel" />
+ </footer>
</form>
</field>
</record>
@@ -67,5 +61,4 @@
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
-
</odoo>