diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000000000000000000000000000000000..bfd7ac53df9f103f6dc8853738c63fd364445fde --- /dev/null +++ b/.editorconfig @@ -0,0 +1,20 @@ +# Configuration for known file extensions +[*.{css,js,json,less,md,py,rst,sass,scss,xml,yaml,yml}] +charset = utf-8 +end_of_line = lf +indent_size = 4 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +[*.{json,yml,yaml,rst,md}] +indent_size = 2 + +# Do not configure editor for libs and autogenerated content +[{*/static/{lib,src/lib}/**,*/static/description/index.html,*/readme/../README.rst}] +charset = unset +end_of_line = unset +indent_size = unset +indent_style = unset +insert_final_newline = false +trim_trailing_whitespace = false diff --git a/.eslintrc.yml b/.eslintrc.yml new file mode 100644 index 0000000000000000000000000000000000000000..d4cc423ccda9db9691205c9da83307af97b2670f --- /dev/null +++ b/.eslintrc.yml @@ -0,0 +1,187 @@ +env: + browser: true + es6: true + +# See https://github.com/OCA/odoo-community.org/issues/37#issuecomment-470686449 +parserOptions: + ecmaVersion: 2017 + +overrides: + - files: + - "**/*.esm.js" + parserOptions: + sourceType: module + +# Globals available in Odoo that shouldn't produce errorings +globals: + _: readonly + $: readonly + fuzzy: readonly + jQuery: readonly + moment: readonly + odoo: readonly + openerp: readonly + owl: readonly + +# Styling is handled by Prettier, so we only need to enable AST rules; +# see https://github.com/OCA/maintainer-quality-tools/pull/618#issuecomment-558576890 +rules: + accessor-pairs: warn + array-callback-return: warn + callback-return: warn + capitalized-comments: + - warn + - always + - ignoreConsecutiveComments: true + ignoreInlineComments: true + complexity: + - warn + - 15 + constructor-super: warn + dot-notation: warn + eqeqeq: warn + global-require: warn + handle-callback-err: warn + id-blacklist: warn + id-match: warn + init-declarations: error + max-depth: warn + max-nested-callbacks: warn + max-statements-per-line: warn + no-alert: warn + no-array-constructor: warn + no-caller: warn + no-case-declarations: warn + no-class-assign: warn + no-cond-assign: error + no-const-assign: error + no-constant-condition: warn + no-control-regex: warn + no-debugger: error + no-delete-var: warn + no-div-regex: warn + no-dupe-args: error + no-dupe-class-members: error + no-dupe-keys: error + no-duplicate-case: error + no-duplicate-imports: error + no-else-return: warn + no-empty-character-class: warn + no-empty-function: error + no-empty-pattern: error + no-empty: warn + no-eq-null: error + no-eval: error + no-ex-assign: error + no-extend-native: warn + no-extra-bind: warn + no-extra-boolean-cast: warn + no-extra-label: warn + no-fallthrough: warn + no-func-assign: error + no-global-assign: error + no-implicit-coercion: + - warn + - allow: ["~"] + no-implicit-globals: warn + no-implied-eval: warn + no-inline-comments: warn + no-inner-declarations: warn + no-invalid-regexp: warn + no-irregular-whitespace: warn + no-iterator: warn + no-label-var: warn + no-labels: warn + no-lone-blocks: warn + no-lonely-if: error + no-mixed-requires: error + no-multi-str: warn + no-native-reassign: error + no-negated-condition: warn + no-negated-in-lhs: error + no-new-func: warn + no-new-object: warn + no-new-require: warn + no-new-symbol: warn + no-new-wrappers: warn + no-new: warn + no-obj-calls: warn + no-octal-escape: warn + no-octal: warn + no-param-reassign: warn + no-path-concat: warn + no-process-env: warn + no-process-exit: warn + no-proto: warn + no-prototype-builtins: warn + no-redeclare: warn + no-regex-spaces: warn + no-restricted-globals: warn + no-restricted-imports: warn + no-restricted-modules: warn + no-restricted-syntax: warn + no-return-assign: error + no-script-url: warn + no-self-assign: warn + no-self-compare: warn + no-sequences: warn + no-shadow-restricted-names: warn + no-shadow: warn + no-sparse-arrays: warn + no-sync: warn + no-this-before-super: warn + no-throw-literal: warn + no-undef-init: warn + no-undef: error + no-unmodified-loop-condition: warn + no-unneeded-ternary: error + no-unreachable: error + no-unsafe-finally: error + no-unused-expressions: error + no-unused-labels: error + no-unused-vars: error + no-use-before-define: error + no-useless-call: warn + no-useless-computed-key: warn + no-useless-concat: warn + no-useless-constructor: warn + no-useless-escape: warn + no-useless-rename: warn + no-void: warn + no-with: warn + operator-assignment: [error, always] + prefer-const: warn + radix: warn + require-yield: warn + sort-imports: warn + spaced-comment: [error, always] + strict: [error, function] + use-isnan: error + valid-jsdoc: + - warn + - prefer: + arg: param + argument: param + augments: extends + constructor: class + exception: throws + func: function + method: function + prop: property + return: returns + virtual: abstract + yield: yields + preferType: + array: Array + bool: Boolean + boolean: Boolean + number: Number + object: Object + str: String + string: String + requireParamDescription: false + requireReturn: false + requireReturnDescription: false + requireReturnType: false + valid-typeof: warn + yoda: warn diff --git a/.flake8 b/.flake8 new file mode 100644 index 0000000000000000000000000000000000000000..e397e8ed4e3e7f7fe7785dd391bb80aa6d85575e --- /dev/null +++ b/.flake8 @@ -0,0 +1,12 @@ +[flake8] +max-line-length = 88 +max-complexity = 16 +# B = bugbear +# B9 = bugbear opinionated (incl line length) +select = C,E,F,W,B,B9 +# E203: whitespace before ':' (black behaviour) +# E501: flake8 line length (covered by bugbear B950) +# W503: line break before binary operator (black behaviour) +ignore = E203,E501,W503 +per-file-ignores= + __init__.py:F401 diff --git a/.gitignore b/.gitignore index 75bb2042901930f807a588241612a29dd75e34d5..818770fb1bdc0a144e924c9a5940f0b035df8a0d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,75 @@ -.* -*.pyc -!.gitignore +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +/.venv +/.pytest_cache + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +bin/ +build/ +develop-eggs/ +dist/ +eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +*.egg-info/ +.installed.cfg +*.egg +*.eggs + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.cache +nosetests.xml +coverage.xml + +# Translations +*.mo + +# Pycharm +.idea + +# Eclipse +.settings + +# Visual Studio cache/options directory +.vs/ +.vscode + +# OSX Files +.DS_Store + +# Django stuff: +*.log + +# Mr Developer +.mr.developer.cfg +.project +.pydevproject + +# Rope +.ropeproject + +# Sphinx documentation +docs/_build/ + +# Backup files +*~ +*.swp + +# OCA rules +!static/lib/ diff --git a/.isort.cfg b/.isort.cfg new file mode 100644 index 0000000000000000000000000000000000000000..0ec187efd1bf802844749f508cda0c8f138970f9 --- /dev/null +++ b/.isort.cfg @@ -0,0 +1,13 @@ +[settings] +; see https://github.com/psf/black +multi_line_output=3 +include_trailing_comma=True +force_grid_wrap=0 +combine_as_imports=True +use_parentheses=True +line_length=88 +known_odoo=odoo +known_odoo_addons=odoo.addons +sections=FUTURE,STDLIB,THIRDPARTY,ODOO,ODOO_ADDONS,FIRSTPARTY,LOCALFOLDER +default_section=THIRDPARTY +ensure_newline_before_comments = True diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000000000000000000000000000000000000..1c6434bfc2274c73d98dbf62b6de9baccdc353ce --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,127 @@ +exclude: | + (?x) + # NOT INSTALLABLE ADDONS + # END NOT INSTALLABLE ADDONS + # Files and folders generated by bots, to avoid loops + ^setup/|/static/description/index\.html$| + # We don't want to mess with tool-generated files + .svg$|/tests/([^/]+/)?cassettes/|^.copier-answers.yml$|^.github/| + # Maybe reactivate this when all README files include prettier ignore tags? + ^README\.md$| + # Library files can have extraneous formatting (even minimized) + /static/(src/)?lib/| + # Repos using Sphinx to generate docs don't need prettying + ^docs/_templates/.*\.html$| + # You don't usually want a bot to modify your legal texts + (LICENSE.*|COPYING.*) +default_language_version: + python: python3 + node: "14.13.0" +repos: + - repo: local + hooks: + # These files are most likely copier diff rejection junks; if found, + # review them manually, fix the problem (if needed) and remove them + - id: forbidden-files + name: forbidden files + entry: found forbidden files; remove them + language: fail + files: "\\.rej$" + - repo: https://github.com/oca/maintainer-tools + rev: ab1d7f6 + hooks: + # update the NOT INSTALLABLE ADDONS section above + - id: oca-update-pre-commit-excluded-addons + - id: oca-fix-manifest-website + args: ["https://le-filament.com"] + - repo: https://github.com/myint/autoflake + rev: v1.4 + hooks: + - id: autoflake + args: + - --expand-star-imports + - --ignore-init-module-imports + - --in-place + - --remove-all-unused-imports + - --remove-duplicate-keys + - --remove-unused-variables + - repo: https://github.com/psf/black + rev: 20.8b1 + hooks: + - id: black + - repo: https://github.com/pre-commit/mirrors-prettier + rev: v2.1.2 + hooks: + - id: prettier + name: prettier (with plugin-xml) + additional_dependencies: + - "prettier@2.1.2" + - "@prettier/plugin-xml@0.12.0" + args: + - --plugin=@prettier/plugin-xml + files: \.(css|htm|html|js|json|jsx|less|md|scss|toml|ts|xml|yaml|yml)$ + - repo: https://github.com/pre-commit/mirrors-eslint + rev: v7.8.1 + hooks: + - id: eslint + verbose: true + args: + - --color + - --fix + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v3.2.0 + hooks: + - id: trailing-whitespace + # exclude autogenerated files + exclude: /README\.rst$|\.pot?$ + - id: end-of-file-fixer + # exclude autogenerated files + exclude: /README\.rst$|\.pot?$ + - id: debug-statements + - id: fix-encoding-pragma + args: ["--remove"] + - id: check-case-conflict + - id: check-docstring-first + - id: check-executables-have-shebangs + - id: check-merge-conflict + # exclude files where underlines are not distinguishable from merge conflicts + exclude: /README\.rst$|^docs/.*\.rst$ + - id: check-symlinks + - id: check-xml + - id: mixed-line-ending + args: ["--fix=lf"] + - repo: https://github.com/asottile/pyupgrade + rev: v2.7.2 + hooks: + - id: pyupgrade + args: ["--keep-percent-format"] + - repo: https://github.com/PyCQA/isort + rev: 5.5.1 + hooks: + - id: isort + name: isort except __init__.py + args: + - --settings=. + exclude: /__init__\.py$ + - repo: https://gitlab.com/PyCQA/flake8 + rev: 3.8.3 + hooks: + - id: flake8 + name: flake8 + additional_dependencies: ["flake8-bugbear==20.1.4"] + - repo: https://github.com/PyCQA/pylint + rev: pylint-2.5.3 + hooks: + - id: pylint + name: pylint with optional checks + args: + - --rcfile=.pylintrc + - --exit-zero + verbose: true + additional_dependencies: &pylint_deps + - pylint-odoo==3.5.0 + - id: pylint + name: pylint with mandatory checks + args: + - --rcfile=.pylintrc-mandatory + additional_dependencies: *pylint_deps diff --git a/.prettierrc.yml b/.prettierrc.yml new file mode 100644 index 0000000000000000000000000000000000000000..5b6d4b361ace92f3877993bf2848fac190d8fab6 --- /dev/null +++ b/.prettierrc.yml @@ -0,0 +1,8 @@ +# Defaults for all prettier-supported languages. +# Prettier will complete this with settings from .editorconfig file. +bracketSpacing: false +printWidth: 88 +proseWrap: always +semi: true +trailingComma: "es5" +xmlWhitespaceSensitivity: "strict" diff --git a/.pylintrc b/.pylintrc new file mode 100644 index 0000000000000000000000000000000000000000..0ce94edcf7f94335e23fc9f79951a895925d3c90 --- /dev/null +++ b/.pylintrc @@ -0,0 +1,88 @@ +[MASTER] +load-plugins=pylint_odoo +score=n + +[ODOOLINT] +readme_template_url="https://github.com/OCA/maintainer-tools/blob/master/template/module/README.rst" +manifest_required_authors=Le Filament +manifest_required_keys=license +manifest_deprecated_keys=description,active +license_allowed=AGPL-3,GPL-2,GPL-2 or any later version,GPL-3,GPL-3 or any later version,LGPL-3 +valid_odoo_versions=14.0 + +[MESSAGES CONTROL] +disable=all + +# This .pylintrc contains optional AND mandatory checks and is meant to be +# loaded in an IDE to have it check everything, in the hope this will make +# optional checks more visible to contributors who otherwise never look at a +# green travis to see optional checks that failed. +# .pylintrc-mandatory containing only mandatory checks is used the pre-commit +# config as a blocking check. + +enable=anomalous-backslash-in-string, + api-one-deprecated, + api-one-multi-together, + assignment-from-none, + attribute-deprecated, + class-camelcase, + dangerous-default-value, + dangerous-view-replace-wo-priority, + development-status-allowed, + duplicate-id-csv, + duplicate-key, + duplicate-xml-fields, + duplicate-xml-record-id, + eval-referenced, + eval-used, + incoherent-interpreter-exec-perm, + license-allowed, + manifest-author-string, + manifest-deprecated-key, + manifest-required-author, + manifest-required-key, + manifest-version-format, + method-compute, + method-inverse, + method-required-super, + method-search, + openerp-exception-warning, + pointless-statement, + pointless-string-statement, + print-used, + redundant-keyword-arg, + redundant-modulename-xml, + reimported, + relative-import, + return-in-init, + rst-syntax-error, + sql-injection, + too-few-format-args, + translation-field, + translation-required, + unreachable, + use-vim-comment, + wrong-tabs-instead-of-spaces, + xml-syntax-error, + # messages that do not cause the lint step to fail + consider-merging-classes-inherited, + create-user-wo-reset-password, + dangerous-filter-wo-user, + deprecated-module, + file-not-used, + invalid-commit, + missing-manifest-dependency, + missing-newline-extrafiles, + missing-readme, + no-utf8-coding-comment, + odoo-addons-relative-import, + old-api7-method-defined, + redefined-builtin, + too-complex, + unnecessary-utf8-coding-comment + + +[REPORTS] +msg-template={path}:{line}: [{msg_id}({symbol}), {obj}] {msg} +output-format=colorized +reports=no diff --git a/.pylintrc-mandatory b/.pylintrc-mandatory new file mode 100644 index 0000000000000000000000000000000000000000..43ea23947166ff8080219007cfae43ec54a28f8e --- /dev/null +++ b/.pylintrc-mandatory @@ -0,0 +1,64 @@ +[MASTER] +load-plugins=pylint_odoo +score=n + +[ODOOLINT] +readme_template_url="https://github.com/OCA/maintainer-tools/blob/master/template/module/README.rst" +manifest_required_authors=Le Filament +manifest_required_keys=license +manifest_deprecated_keys=description,active +license_allowed=AGPL-3,GPL-2,GPL-2 or any later version,GPL-3,GPL-3 or any later version,LGPL-3 +valid_odoo_versions=14.0 + +[MESSAGES CONTROL] +disable=all + +enable=anomalous-backslash-in-string, + api-one-deprecated, + api-one-multi-together, + assignment-from-none, + attribute-deprecated, + class-camelcase, + dangerous-default-value, + dangerous-view-replace-wo-priority, + development-status-allowed, + duplicate-id-csv, + duplicate-key, + duplicate-xml-fields, + duplicate-xml-record-id, + eval-referenced, + eval-used, + incoherent-interpreter-exec-perm, + license-allowed, + manifest-author-string, + manifest-deprecated-key, + manifest-required-author, + manifest-required-key, + manifest-version-format, + method-compute, + method-inverse, + method-required-super, + method-search, + openerp-exception-warning, + pointless-statement, + pointless-string-statement, + print-used, + redundant-keyword-arg, + redundant-modulename-xml, + reimported, + relative-import, + return-in-init, + rst-syntax-error, + sql-injection, + too-few-format-args, + translation-field, + translation-required, + unreachable, + use-vim-comment, + wrong-tabs-instead-of-spaces, + xml-syntax-error + +[REPORTS] +msg-template={path}:{line}: [{msg_id}({symbol}), {obj}] {msg} +output-format=colorized +reports=no diff --git a/__manifest__.py b/__manifest__.py old mode 100755 new mode 100644 index 698602518af3a2963a690dc48e442e6f0342e7ab..101d3044618b4683ef16ee71608e4904392028f8 --- a/__manifest__.py +++ b/__manifest__.py @@ -1,26 +1,26 @@ { - 'name': "AFAC - Membership", - 'summary': "Modification de Membership pour l'AFAC", - 'author': "Le Filament", - 'website': "https://www.le-filament.com", - 'version': '14.0.0.0', - 'license': "AGPL-3", - 'depends': [ - 'membership', - 'membership_extension', + "name": "AFAC - Membership", + "summary": "Modification de Membership pour l'AFAC", + "author": "Le Filament", + "website": "https://www.le-filament.com", + "version": "14.0.0.0.0", + "license": "AGPL-3", + "depends": [ + "membership", + "membership_extension", ], - 'data': [ + "data": [ # security - 'security/ir.model.access.csv', + "security/ir.model.access.csv", # datas - 'data/membership_sequence.xml', + "data/membership_sequence.xml", # views - 'views/membership_membership_line.xml', - 'views/res_partner.xml', + "views/membership_membership_line.xml", + "views/res_partner.xml", # templates - 'templates/report_invoice_document.xml', + "templates/report_invoice_document.xml", ], - 'qweb': [], - 'installable': True, - 'auto_install': False, + "qweb": [], + "installable": True, + "auto_install": False, } diff --git a/data/membership_sequence.xml b/data/membership_sequence.xml index 88665b1ce629d5bb2c1bbc24345245e61396503a..c8fd21235ea68ff7f45d236745a5fe4a1aa8b3aa 100644 --- a/data/membership_sequence.xml +++ b/data/membership_sequence.xml @@ -1,16 +1,15 @@ -<?xml version="1.0" encoding="UTF-8"?> +<?xml version="1.0" encoding="UTF-8" ?> <!-- Copyright 2021 Le Filament License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). --> - <odoo> <data noupdate="1"> <record id="membership_number_seq" model="ir.sequence"> <field name="name">AFAC : Num Adherent</field> <field name="code">afac.membership.number</field> - <field name="prefix"></field> - <field eval="1" name="number_next"/> - <field eval="1" name="number_increment"/> - <field eval="False" name="company_id"/> + <field name="prefix" /> + <field eval="1" name="number_next" /> + <field eval="1" name="number_increment" /> + <field eval="False" name="company_id" /> </record> </data> </odoo> diff --git a/models/account_move.py b/models/account_move.py index 2ce086c2f1309cc58464831a2c0ce65aefa65d27..e4b14c1236caf590e2f2457d71368f57d99a69d5 100644 --- a/models/account_move.py +++ b/models/account_move.py @@ -5,7 +5,7 @@ from odoo import models class AccountMove(models.Model): - _inherit = 'account.move' + _inherit = "account.move" def action_post(self): """ @@ -14,10 +14,16 @@ class AccountMove(models.Model): """ if self.partner_id.membership_number == 0: membership_lines = self.line_ids.filtered( - lambda line: line.move_id.move_type == 'out_invoice' and line.product_id.membership) + lambda line: line.move_id.move_type == "out_invoice" + and line.product_id.membership + ) if membership_lines: - self.partner_id.write({ - 'membership_number': self.env['ir.sequence'].sudo().next_by_code('afac.membership.number') - }) + self.partner_id.write( + { + "membership_number": self.env["ir.sequence"] + .sudo() + .next_by_code("afac.membership.number") + } + ) res = super(AccountMove, self).action_post() return res diff --git a/models/res_partner.py b/models/res_partner.py index f8d216e228b6c7ec422b6faea47d8b10c78964ee..7374a59e5cea886e5bf8950c7eda94f753b90292 100644 --- a/models/res_partner.py +++ b/models/res_partner.py @@ -1,48 +1,48 @@ # Copyright 2021 Le Filament (<http://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import fields, models, api +from odoo import api, fields, models class ResPartner(models.Model): - _inherit = 'res.partner' + _inherit = "res.partner" # Company Fields membership_number = fields.Integer( - string='N° Adhérent', + string="N° Adhérent", ) membership_contact_id = fields.Many2one( - comodel_name='res.partner', - string='Contact Adhésion', - domain="[('parent_id', '=', id)]" + comodel_name="res.partner", + string="Contact Adhésion", + domain="[('parent_id', '=', id)]", ) membership_mandate_id = fields.Many2one( - comodel_name='res.partner', - string='Contact Mandataire', - domain="[('parent_id', '=', id)]" + comodel_name="res.partner", + string="Contact Mandataire", + domain="[('parent_id', '=', id)]", ) membership_delegate_id = fields.Many2one( - comodel_name='res.partner', - string='Contact Délégataire', - domain="[('parent_id', '=', id)]" + comodel_name="res.partner", + string="Contact Délégataire", + domain="[('parent_id', '=', id)]", ) membership_is_delegate = fields.Boolean( - string='Personne Délégataire', - compute='_compute_membership_is_delegate', + string="Personne Délégataire", + compute="_compute_membership_is_delegate", store=True, - default=False + default=False, ) membership_is_mandate = fields.Boolean( - string='Personne Mandataire', - compute='_compute_membership_is_mandate', + string="Personne Mandataire", + compute="_compute_membership_is_mandate", store=True, - default=False + default=False, ) membership_is_contact = fields.Boolean( - string='Personne Contact Adhésion', - compute='_compute_membership_is_contact', + string="Personne Contact Adhésion", + compute="_compute_membership_is_contact", store=True, - default=False + default=False, ) # ------------------------------------------------------ @@ -56,19 +56,19 @@ class ResPartner(models.Model): # ------------------------------------------------------ # Computed fields / Search Fields # ------------------------------------------------------ - @api.depends('parent_id', 'parent_id.membership_delegate_id') + @api.depends("parent_id", "parent_id.membership_delegate_id") def _compute_membership_is_delegate(self): for partner in self: if partner.parent_id.membership_delegate_id == partner: partner.membership_is_delegate = True - @api.depends('parent_id', 'parent_id.membership_mandate_id') + @api.depends("parent_id", "parent_id.membership_mandate_id") def _compute_membership_is_mandate(self): for partner in self: if partner.parent_id.membership_mandate_id == partner: partner.membership_is_mandate = True - @api.depends('parent_id', 'parent_id.membership_contact_id') + @api.depends("parent_id", "parent_id.membership_contact_id") def _compute_membership_is_contact(self): for partner in self: if partner.parent_id.membership_contact_id == partner: diff --git a/templates/report_invoice_document.xml b/templates/report_invoice_document.xml index 91dfd354905eba49e5268a08dbb08600713bf470..c6b97d52ba929b7421c03e92e2c8974d895f3f99 100644 --- a/templates/report_invoice_document.xml +++ b/templates/report_invoice_document.xml @@ -1,18 +1,24 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="utf-8" ?> <!-- Copyright 2021 Le Filament License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). --> - <odoo> <data> - <template id="afac_report_invoice_document" inherit_id="account.report_invoice_document"> + <template + id="afac_report_invoice_document" + inherit_id="account.report_invoice_document" + > <xpath expr="//div[@name='invoice_date']" position="after"> - <div class="col-auto col-3 mw-100 mb-2" t-if="o.partner_id.membership_number > 0 and o.move_type == 'out_invoice' and o.state == 'posted'" name="membership_number"> + <div + class="col-auto col-3 mw-100 mb-2" + t-if="o.partner_id.membership_number > 0 and o.move_type == 'out_invoice' and o.state == 'posted'" + name="membership_number" + > <strong>N° Adhérent :</strong> - <p class="m-0" t-field="o.partner_id.membership_number"/> + <p class="m-0" t-field="o.partner_id.membership_number" /> </div> </xpath> </template> </data> -</odoo> \ No newline at end of file +</odoo> diff --git a/views/membership_membership_line.xml b/views/membership_membership_line.xml index 40e91e99b4195a96a1bf688315fe1a2af37887a4..992d3cae7a344b7cd30fa72aab2f2f8f6cbf24c7 100644 --- a/views/membership_membership_line.xml +++ b/views/membership_membership_line.xml @@ -1,7 +1,6 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="utf-8" ?> <!-- Copyright 2021 Le Filament License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). --> - <odoo> <data> @@ -12,11 +11,23 @@ <field name="model">membership.membership_line</field> <field name="arch" type="xml"> <search string="Members"> - <field name="partner"/> - <filter string="Cette année" name="this_year" domain="[('date_to','<=', time.strftime('%%Y-12-31')), ('date_to','>=',time.strftime('%%Y-01-01'))]"/> + <field name="partner" /> + <filter + string="Cette année" + name="this_year" + domain="[('date_to','<=', time.strftime('%%Y-12-31')), ('date_to','>=',time.strftime('%%Y-01-01'))]" + /> <group expand="0" name="group_by" string="Group By"> - <filter name="group_date_to" string="Date de fin" context="{'group_by': 'date_to'}"/> - <filter name="group_state" string="Statut" context="{'group_by': 'state'}"/> + <filter + name="group_date_to" + string="Date de fin" + context="{'group_by': 'date_to'}" + /> + <filter + name="group_state" + string="Statut" + context="{'group_by': 'state'}" + /> </group> </search> </field> @@ -33,20 +44,23 @@ <sheet> <group> <group> - <field name="partner"/> - <field name="membership_id"/> - <field name="date"/> - <field name="date_from"/> - <field name="date_to"/> - <field name="category_id"/> - <field name="member_price"/> + <field name="partner" /> + <field name="membership_id" /> + <field name="date" /> + <field name="date_from" /> + <field name="date_to" /> + <field name="category_id" /> + <field name="member_price" /> </group> <group> <field name="state" /> - <field name="account_invoice_id"/> - <field name="account_invoice_line"/> - <field name="company_id" groups="base.group_multi_company"/> - <field name="date_cancel"/> + <field name="account_invoice_id" /> + <field name="account_invoice_line" /> + <field + name="company_id" + groups="base.group_multi_company" + /> + <field name="date_cancel" /> </group> </group> </sheet> @@ -62,13 +76,13 @@ <field name="priority">10</field> <field name="arch" type="xml"> <tree string="Members" create="0" edit="0"> - <field name="partner"/> - <field name="membership_id"/> - <field name="date_from"/> - <field name="date_to"/> - <field name="category_id"/> - <field name="member_price"/> - <field name="company_id" groups="base.group_multi_company"/> + <field name="partner" /> + <field name="membership_id" /> + <field name="date_from" /> + <field name="date_to" /> + <field name="category_id" /> + <field name="member_price" /> + <field name="company_id" groups="base.group_multi_company" /> <field name="state" /> </tree> </field> @@ -79,13 +93,13 @@ <field name="priority">20</field> <field name="arch" type="xml"> <tree string="Members"> - <field name="partner"/> - <field name="membership_id"/> - <field name="date_from"/> - <field name="date_to"/> - <field name="category_id"/> - <field name="member_price"/> - <field name="company_id" groups="base.group_multi_company"/> + <field name="partner" /> + <field name="membership_id" /> + <field name="date_from" /> + <field name="date_to" /> + <field name="category_id" /> + <field name="member_price" /> + <field name="company_id" groups="base.group_multi_company" /> <field name="state" /> </tree> </field> @@ -97,8 +111,8 @@ <field name="model">membership.membership_line</field> <field name="arch" type="xml"> <pivot string="Members"> - <field name="date_to" type="row"/> - <field name="member_price" type="measure"/> + <field name="date_to" type="row" /> + <field name="member_price" type="measure" /> </pivot> </field> </record> @@ -108,8 +122,8 @@ <field name="model">membership.membership_line</field> <field name="arch" type="xml"> <graph string="Members"> - <field name="date_to" type="row"/> - <field name="member_price" type="measure"/> + <field name="date_to" type="row" /> + <field name="member_price" type="measure" /> </graph> </field> </record> @@ -130,35 +144,38 @@ <field name="context">{}</field> </record> <record id="action_contacts_view_tree" model="ir.actions.act_window.view"> - <field name="sequence" eval="1"/> + <field name="sequence" eval="1" /> <field name="view_mode">tree</field> - <field name="view_id" ref="membership_membership_line_tree"/> - <field name="act_window_id" ref="action_membership_membership_line"/> + <field name="view_id" ref="membership_membership_line_tree" /> + <field name="act_window_id" ref="action_membership_membership_line" /> </record> <!-- Menu --> <!-- Contacts --> - <menuitem name="Périodes d'adhésion" - id="menu_contact_membership_line" - sequence="8" - parent="contacts.menu_contacts" - action="action_membership_membership_ro_line" + <menuitem + name="Périodes d'adhésion" + id="menu_contact_membership_line" + sequence="8" + parent="contacts.menu_contacts" + action="action_membership_membership_ro_line" /> <!-- Membership --> - <menuitem name="Lignes d'adhésion" - id="menu_membership_line" - sequence="80" - parent="membership.menu_marketing_config_association" - action="action_membership_membership_line" - groups="base.group_erp_manager" + <menuitem + name="Lignes d'adhésion" + id="menu_membership_line" + sequence="80" + parent="membership.menu_marketing_config_association" + action="action_membership_membership_line" + groups="base.group_erp_manager" /> <!-- Articles --> - <menuitem name="Articles d'adhésion" - id="menu_membership_products" - sequence="102" - parent="account.menu_finance_receivables" - action="membership.action_membership_products" + <menuitem + name="Articles d'adhésion" + id="menu_membership_products" + sequence="102" + parent="account.menu_finance_receivables" + action="membership.action_membership_products" /> diff --git a/views/res_partner.xml b/views/res_partner.xml index 5ff901144b22ab6aba069d170266b81a48ababf1..37dc33ea73d62d261f01e0e211f9984ce019eeba 100644 --- a/views/res_partner.xml +++ b/views/res_partner.xml @@ -1,7 +1,6 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="utf-8" ?> <!-- Copyright 2021 Le Filament License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). --> - <odoo> <data> @@ -9,20 +8,36 @@ <record model="ir.ui.view" id="res_partner_afac_member_filter"> <field name="name">res.partner.afac.member.select</field> <field name="model">res.partner</field> - <field name="inherit_id" ref="base.view_res_partner_filter"/> + <field name="inherit_id" ref="base.view_res_partner_filter" /> <field name="arch" type="xml"> <xpath expr="//field[@name='category_id']" position="after"> - <field name="membership_number"/> + <field name="membership_number" /> </xpath> <xpath expr="//filter[@name='inactive']" position="before"> - <filter string="Membres" name="member" domain="[('membership_state', 'in', ('free', 'paid'))]"/> - <filter string="En attente" name="waiting_member" domain="[('membership_state', 'in', ('waiting', 'invoiced'))]"/> - <filter string="Anciens membres" name="old_member" domain="[('membership_state', '=', 'old')]"/> - <separator/> + <filter + string="Membres" + name="member" + domain="[('membership_state', 'in', ('free', 'paid'))]" + /> + <filter + string="En attente" + name="waiting_member" + domain="[('membership_state', 'in', ('waiting', 'invoiced'))]" + /> + <filter + string="Anciens membres" + name="old_member" + domain="[('membership_state', '=', 'old')]" + /> + <separator /> </xpath> <xpath expr="//filter[@name='group_country']" position="before"> - <filter name="group_membership_state" string="Collège" context="{'group_by': 'membership_state'}"/> - <separator/> + <filter + name="group_membership_state" + string="Collège" + context="{'group_by': 'membership_state'}" + /> + <separator /> </xpath> </field> </record> @@ -31,15 +46,15 @@ <record model="ir.ui.view" id="res_partner_afac_tree"> <field name="name">res.partner.afac.tree</field> <field name="model">res.partner</field> - <field name="inherit_id" ref="base.view_partner_tree"/> + <field name="inherit_id" ref="base.view_partner_tree" /> <field name="arch" type="xml"> <xpath expr="//field[@name='category_id']" position="after"> - <field name="membership_number" optional="hide"/> - <field name="membership_mandate_id" optional="hide"/> - <field name="membership_delegate_id" optional="hide"/> - <field name="membership_contact_id" optional="hide"/> - <field name="membership_start" optional="hide"/> - <field name="membership_stop" optional="hide"/> + <field name="membership_number" optional="hide" /> + <field name="membership_mandate_id" optional="hide" /> + <field name="membership_delegate_id" optional="hide" /> + <field name="membership_contact_id" optional="hide" /> + <field name="membership_start" optional="hide" /> + <field name="membership_stop" optional="hide" /> </xpath> </field> @@ -48,43 +63,61 @@ <!-- Form view --> <record model="ir.ui.view" id="res_partner_membership_form"> <field name="name">res.partner.membership.form.inherit</field> - <field name="inherit_id" ref="membership.view_partner_form"/> + <field name="inherit_id" ref="membership.view_partner_form" /> <field name="model">res.partner</field> <field name="arch" type="xml"> <xpath expr="//page[@name='membership']" position="attributes"> - <attribute name="attrs">{'invisible': [('is_company', '!=', True)]}</attribute> + <attribute + name="attrs" + >{'invisible': [('is_company', '!=', True)]}</attribute> </xpath> <xpath expr="//field[@name='free_member']" position="attributes"> <attribute name="invisible">1</attribute> </xpath> <xpath expr="//field[@name='free_member']" position="before"> - <field name="membership_number" readonly="1"/> + <field name="membership_number" readonly="1" /> </xpath> - <xpath expr="//button[@name='%(membership.action_membership_invoice_view)d']" position="attributes"> + <xpath + expr="//button[@name='%(membership.action_membership_invoice_view)d']" + position="attributes" + > <attribute name="invisible">1</attribute> </xpath> <xpath expr="//field[@name='associate_member']" position="attributes"> <attribute name="invisible">1</attribute> </xpath> <xpath expr="//field[@name='member_lines']" position="before"> - <hr/> + <hr /> <group> <group> - <field name="membership_mandate_id" options="{'no_create': True}"/> - <field name="membership_delegate_id" options="{'no_create': True}"/> + <field + name="membership_mandate_id" + options="{'no_create': True}" + /> + <field + name="membership_delegate_id" + options="{'no_create': True}" + /> </group> <group> - <field name="membership_contact_id" options="{'no_create': True}"/> + <field + name="membership_contact_id" + options="{'no_create': True}" + /> </group> </group> </xpath> <xpath expr="//page[@name='internal_notes']" position="after"> - <page name="membership_contact" string="Membre" attrs="{'invisible': ['|', ('is_company', '=', True), ('parent_id', '=', False)]}"> + <page + name="membership_contact" + string="Membre" + attrs="{'invisible': ['|', ('is_company', '=', True), ('parent_id', '=', False)]}" + > <group> <group> - <field name="membership_is_delegate"/> - <field name="membership_is_mandate"/> - <field name="membership_is_contact"/> + <field name="membership_is_delegate" /> + <field name="membership_is_mandate" /> + <field name="membership_is_contact" /> </group> </group> </page>