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 new file mode 100644 index 0000000000000000000000000000000000000000..818770fb1bdc0a144e924c9a5940f0b035df8a0d --- /dev/null +++ b/.gitignore @@ -0,0 +1,75 @@ +# 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..d2466a0d306094c0d5624fdf988e6be724b4daee --- /dev/null +++ b/.pylintrc @@ -0,0 +1,86 @@ +[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-newline-extrafiles, + 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/README.rst b/README.rst old mode 100755 new mode 100644 index c6fd9035e66f6c4613cbb9a66c19a57457c11f6b..ba655367185927c0465084c619e3631b1f274480 --- a/README.rst +++ b/README.rst @@ -15,8 +15,9 @@ Ce module défini le modèle de données ACC: * Création du modèle pour les données CDC *acc.enedis.cdc*, vues associées et menu * Création du modèle pour les données Energie *acc.enedis.energie*, vues associées et menu * Création du modèle pour les logs imports *acc.enedis.import.logs*, vues associées et menu -* Ajout de la fonctionnalité d'imports sur les opérations. Si des documents attachés existent, -le bouton *Intégration des données ENEDIS* permet d'intégrer les données Enedis dans la table +* Ajout de la fonctionnalité d'imports sur les opérations. Si des documents attachés existent + +Le bouton *Intégration des données ENEDIS* permet d'intégrer les données Enedis dans la table Description @@ -44,4 +45,3 @@ Maintainer :target: https://le-filament.com This module is maintained by Le Filament - diff --git a/__init__.py b/__init__.py index e352eeb90b1ca31078563924292ce9240f8b436c..957992f377d7ce8942a87238397684babc5eb305 100644 --- a/__init__.py +++ b/__init__.py @@ -1,4 +1,4 @@ # Copyright 2021 Le Filament (<http://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from . import models \ No newline at end of file +from . import models diff --git a/__manifest__.py b/__manifest__.py old mode 100755 new mode 100644 index c124587dd2ead76c1c755698ab2564431e460941..c3e00cc1ddaa61a7234e23f8efe4c47ca1caefb7 --- a/__manifest__.py +++ b/__manifest__.py @@ -1,29 +1,27 @@ { - 'name': "ACC - Base", - 'summary': "Base des contacts et modèles ACC", - 'author': "Le Filament", - 'website': "https://www.le-filament.com", - 'version': '14.0.1.0.1', - 'license': "AGPL-3", - 'depends': [ - 'contacts' - ], - 'data': [ + "name": "ACC - Base", + "summary": "Base des contacts et modèles ACC", + "author": "Le Filament", + "website": "https://www.le-filament.com", + "version": "14.0.1.0.1", + "license": "AGPL-3", + "depends": ["contacts"], + "data": [ "security/ir.model.access.csv", # datas # views - 'views/res_partner_views.xml', - 'views/acc_operation_views.xml', - 'views/acc_counter_views.xml', - 'views/acc_enedis_cdc_views.xml', - 'views/acc_enedis_import_logs_views.xml', + "views/res_partner_views.xml", + "views/acc_operation_views.xml", + "views/acc_counter_views.xml", + "views/acc_enedis_cdc_views.xml", + "views/acc_enedis_import_logs_views.xml", # views menu - 'views/menu_views.xml', + "views/menu_views.xml", # wizard ], - 'qweb': [ + "qweb": [ # "static/src/xml/*.xml", ], - 'installable': True, - 'auto_install': False, + "installable": True, + "auto_install": False, } diff --git a/models/acc_counter.py b/models/acc_counter.py index e8389fd09b127a30b4f65d81e0fa972373ac39bf..0e76344e2f4f16a1a0418aa98331c552911e50b7 100644 --- a/models/acc_counter.py +++ b/models/acc_counter.py @@ -1,7 +1,7 @@ # 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 AccCounter(models.Model): @@ -13,9 +13,7 @@ class AccCounter(models.Model): # ------------------------------------------------------ # General Info name = fields.Char("ID PRM", required=True) - acc_operation_id = fields.Many2one( - "acc.operation", - string="Opération liée") + acc_operation_id = fields.Many2one("acc.operation", string="Opération liée") date_start_contract = fields.Date("Date de début", default=fields.Datetime.now) date_end_contract = fields.Date("Date de fin", default=fields.Datetime.now) street = fields.Char("Rue") @@ -25,7 +23,7 @@ class AccCounter(models.Model): partner_id = fields.Many2one( comodel_name="res.partner", string="Personne Physique", - domain="['|', ('is_consumer', '=', True), ('is_producer', '=', True)]" + domain="['|', ('is_consumer', '=', True), ('is_producer', '=', True)]", ) # Info Soutirage counter @@ -42,9 +40,9 @@ class AccCounter(models.Model): power_instal = fields.Float("Puissance de l'installation (en kW)") buyer_id = fields.Many2one( - comodel_name='res.partner', + comodel_name="res.partner", string="Acheteur de surplus", - domain="[('is_buyer_surplus', '=', True)]" + domain="[('is_buyer_surplus', '=', True)]", ) # ------------------------------------------------------ # SQL Constraints @@ -64,7 +62,7 @@ class AccCounter(models.Model): # ------------------------------------------------------ # Onchange / Constraints # ------------------------------------------------------ - @api.onchange('is_injection', 'is_delivery') + @api.onchange("is_injection", "is_delivery") def _onchange_prm_type(self): domain = [] if self.is_injection: diff --git a/models/acc_enedis_cdc.py b/models/acc_enedis_cdc.py index 2f201e4806444df901a91e5570a729d062349fd1..bcce855583957cb0d62867f0945a664d8002820a 100644 --- a/models/acc_enedis_cdc.py +++ b/models/acc_enedis_cdc.py @@ -1,31 +1,30 @@ # 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 fields, models class AccEnedisCDC(models.Model): - _name = 'acc.enedis.cdc' - _description = 'CDC Enedis' + _name = "acc.enedis.cdc" + _description = "CDC Enedis" # ------------------------------------------------------ # Fields declaration # ------------------------------------------------------ name = fields.Char("Libellé du fichier") acc_operation_id = fields.Many2one( - 'acc.operation', - "Opération", - required=True, - ondelete="cascade") - acc_counter_id = fields.Many2one('acc.counter', "ID PRM") - comp_data_type = fields.Selection([ - ('autocons', 'autocons'), - ('cons', 'cons'), - ('prod', 'prod'), - ('surplus', 'surplus'), - ('complement', 'complement'), + "acc.operation", "Opération", required=True, ondelete="cascade" + ) + acc_counter_id = fields.Many2one("acc.counter", "ID PRM") + comp_data_type = fields.Selection( + [ + ("autocons", "autocons"), + ("cons", "cons"), + ("prod", "prod"), + ("surplus", "surplus"), + ("complement", "complement"), ], - string="Type de donnée calculée" + string="Type de donnée calculée", ) power = fields.Float("Puissance en W") date_slot = fields.Datetime("Date par Demi Heure") @@ -41,7 +40,7 @@ class AccEnedisCDC(models.Model): # ------------------------------------------------------ # Computed fields / Search Fields # ------------------------------------------------------ - + # ------------------------------------------------------ # Onchange / Constraints # ------------------------------------------------------ diff --git a/models/acc_enedis_import_logs.py b/models/acc_enedis_import_logs.py index 8af0e9f01eeb125952bf0030868986bd6d234d38..938e721e5a260414963d7cd8365e18b55fe33327 100644 --- a/models/acc_enedis_import_logs.py +++ b/models/acc_enedis_import_logs.py @@ -1,20 +1,19 @@ # 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 fields, models class AccEnedisImportLogs(models.Model): - _name = 'acc.enedis.import.logs' - _description = 'Table de logs' + _name = "acc.enedis.import.logs" + _description = "Table de logs" # ------------------------------------------------------ # Fields declaration # ------------------------------------------------------ name = fields.Char("Libellé des données chargées") - acc_operation_id = fields.Many2one('acc.operation', "Opération") - date_import = fields.Datetime( - "Date de l'appel") + acc_operation_id = fields.Many2one("acc.operation", "Opération") + date_import = fields.Datetime("Date de l'appel") # ------------------------------------------------------ # SQL Constraints # ------------------------------------------------------ diff --git a/models/acc_operation.py b/models/acc_operation.py index 9f49e6225aa05b9d09b45fcd186f60d3ed7761c7..03bdc7c8beb50b6ce8f8b14512cc02792378f61a 100644 --- a/models/acc_operation.py +++ b/models/acc_operation.py @@ -1,22 +1,20 @@ # Copyright 2021 Le Filament (<http://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -import json import base64 -import pandas as pd +from datetime import datetime, timedelta from io import StringIO -from odoo import fields, models, api -from datetime import datetime, timedelta, date -from odoo.exceptions import UserError -from odoo.tools import date_utils -from dateutil.relativedelta import relativedelta +import pandas as pd + +from odoo import _, api, fields, models +from odoo.exceptions import UserError class AccOperation(models.Model): - _name = 'acc.operation' - _inherit = ['mail.thread', 'image.mixin'] - _description = 'Opération' + _name = "acc.operation" + _inherit = ["mail.thread", "image.mixin"] + _description = "Opération" # ------------------------------------------------------ # Fields declaration @@ -25,46 +23,52 @@ class AccOperation(models.Model): name = fields.Char("ID Convention Enedis", required=True) description = fields.Char("Description") pmo_id = fields.Many2one( - comodel_name='res.partner', + comodel_name="res.partner", string="PMO", domain="[('is_pmo', '=', True)]", - required=True + required=True, ) acc_injection_ids = fields.One2many( - comodel_name='acc.counter', - inverse_name='acc_operation_id', - domain=[('is_injection', '=', True)], + comodel_name="acc.counter", + inverse_name="acc_operation_id", + domain=[("is_injection", "=", True)], string="Points d'injection", ) acc_delivery_ids = fields.One2many( - comodel_name='acc.counter', - inverse_name='acc_operation_id', - domain=[('is_delivery', '=', True)], + comodel_name="acc.counter", + inverse_name="acc_operation_id", + domain=[("is_delivery", "=", True)], string="Points de soutirage", ) acc_enedis_import_logs_ids = fields.One2many( - comodel_name='acc.enedis.import.logs', - inverse_name='acc_operation_id', + comodel_name="acc.enedis.import.logs", + inverse_name="acc_operation_id", string="Table des logs", ) acc_enedis_cdc_ids = fields.One2many( - comodel_name='acc.enedis.cdc', - inverse_name='acc_operation_id', + comodel_name="acc.enedis.cdc", + inverse_name="acc_operation_id", string="Table des courbes", ) - distribution_key = fields.Selection([ - ('statique', 'Statique'), - ('dynamique', 'Dynamique par défaut'), - ('dynamique_perso', 'Dynamique personnalisée') + distribution_key = fields.Selection( + [ + ("statique", "Statique"), + ("dynamique", "Dynamique par défaut"), + ("dynamique_perso", "Dynamique personnalisée"), ], - string="Clés de répartition" + string="Clés de répartition", + ) + date_start_contract = fields.Date( + string="Date de début", default=fields.Date.context_today + ) + date_end_contract = fields.Date( + string="Date de fin", default=fields.Date.context_today ) - date_start_contract = fields.Date(string="Date de début", default=fields.Date.context_today) - date_end_contract = fields.Date(string="Date de fin", default=fields.Date.context_today) birthday_date = fields.Integer( string="Date d'anniversaire calculée", - compute='_compute_birthday_date', - store=True) + compute="_compute_birthday_date", + store=True, + ) # ------------------------------------------------------ # SQL Constraints @@ -77,7 +81,7 @@ class AccOperation(models.Model): # ------------------------------------------------------ # Computed fields / Search Fields # ------------------------------------------------------ - @api.depends('date_start_contract') + @api.depends("date_start_contract") def _compute_birthday_date(self): for operation in self: if operation.date_start_contract: @@ -96,27 +100,27 @@ class AccOperation(models.Model): # ------------------------------------------------------ def import_enedis_data(self): for operation in self: - files = self.env['ir.attachment'].search([ - ('res_model', '=', 'acc.operation'), - ('res_id', '=', operation.id) - ]) + files = self.env["ir.attachment"].search( + [("res_model", "=", "acc.operation"), ("res_id", "=", operation.id)] + ) if not files: - raise UserError( - "Pas de fichiers à intégrer") + raise UserError(_("Pas de fichiers à intégrer")) else: for file in files: - data_filename = file.name.split('_') + data_filename = file.name.split("_") id_pdm = data_filename[0] - counter_id = self.env['acc.counter'] + counter_id = self.env["acc.counter"] if id_pdm != self.name: # Get the counter ID from file name - counter_id = self.env['acc.counter'].search([('name', '=', id_pdm)]) + counter_id = self.env["acc.counter"].search( + [("name", "=", id_pdm)] + ) computed_data_type = data_filename[3] - file_decode = StringIO(base64.b64decode(file.datas).decode('UTF-8')) + file_decode = StringIO(base64.b64decode(file.datas).decode("UTF-8")) file_decode.seek(0) # reader = pd.read_csv(file_decode, header=None, delimiter=';') - reader = pd.read_csv(file_decode, header=None, delimiter=';') + reader = pd.read_csv(file_decode, header=None, delimiter=";") if data_filename[4] == "CDC.csv": # Create Data for the CDC @@ -124,30 +128,36 @@ class AccOperation(models.Model): # Create 1st slot 0-30min date_slot = datetime.strptime(row[0], "%d/%m/%Y %H:%M") # date_slot = row[0] - self.env['acc.enedis.cdc'].create({ - 'name': file.name, - 'acc_operation_id': self.id, - 'acc_counter_id': counter_id.id or False, - 'comp_data_type': computed_data_type, - 'power': row[1], - 'date_slot': date_slot, - }) + self.env["acc.enedis.cdc"].create( + { + "name": file.name, + "acc_operation_id": self.id, + "acc_counter_id": counter_id.id or False, + "comp_data_type": computed_data_type, + "power": row[1], + "date_slot": date_slot, + } + ) # Create 2nd slot 30-60min date_slot_30 = date_slot + timedelta(minutes=30) - self.env['acc.enedis.cdc'].create({ - 'name': file.name, - 'acc_operation_id': self.id, - 'acc_counter_id': counter_id.id or False, - 'comp_data_type': computed_data_type, - 'power': row[2], - 'date_slot': date_slot_30, - }) + self.env["acc.enedis.cdc"].create( + { + "name": file.name, + "acc_operation_id": self.id, + "acc_counter_id": counter_id.id or False, + "comp_data_type": computed_data_type, + "power": row[2], + "date_slot": date_slot_30, + } + ) # Logs information logs - self.env['acc.enedis.import.logs'].create({ - 'name': file.name, - 'acc_operation_id': self.id, - }) + self.env["acc.enedis.import.logs"].create( + { + "name": file.name, + "acc_operation_id": self.id, + } + ) # Delete file after creation file.unlink() diff --git a/models/res_partner.py b/models/res_partner.py index 82ca57e49ee6707de13aa0bfd90af511884c0f95..18b04ce9b558f0490cf43f422c80b49f2702443a 100644 --- a/models/res_partner.py +++ b/models/res_partner.py @@ -1,19 +1,19 @@ # 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 fields, models class ResPartner(models.Model): - _inherit = 'res.partner' + _inherit = "res.partner" # ------------------------------------------------------ # Fields declaration # ------------------------------------------------------ is_pmo = fields.Boolean("Est un PMO") acc_operation_ids = fields.One2many( - comodel_name='acc.operation', - inverse_name='pmo_id', + comodel_name="acc.operation", + inverse_name="pmo_id", string="Liste des opérations", ) is_acc_linked = fields.Boolean("Est un sociétaire/adhérent/actionnaire app") @@ -21,16 +21,16 @@ class ResPartner(models.Model): is_consumer = fields.Boolean("Est un consommateur") is_buyer_surplus = fields.Boolean("Est un acheteur de surplus") injection_counter_ids = fields.One2many( - comodel_name='acc.counter', - inverse_name='partner_id', + comodel_name="acc.counter", + inverse_name="partner_id", string="Liste des points d'injection", - domain="[('is_injection', '=', True)]" + domain="[('is_injection', '=', True)]", ) delivery_counter_ids = fields.One2many( - comodel_name='acc.counter', - inverse_name='partner_id', + comodel_name="acc.counter", + inverse_name="partner_id", string="Liste des points d'injection", - domain="[('is_delivery', '=', True)]" + domain="[('is_delivery', '=', True)]", ) # ------------------------------------------------------ # SQL Constraints @@ -58,4 +58,4 @@ class ResPartner(models.Model): # ------------------------------------------------------ # Business methods - # ------------------------------------------------------ \ No newline at end of file + # ------------------------------------------------------ diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv old mode 100755 new mode 100644 index 5b547a8a1b34c505ae4945201163d81a07901718..b6207f6c859bceee86d41835955b09dbdc7ff65b --- a/security/ir.model.access.csv +++ b/security/ir.model.access.csv @@ -6,4 +6,4 @@ id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink "access_acc_enedis_cdc_group_partner_manager","acc_enedis_cdc group_partner_manager","model_acc_enedis_cdc","base.group_partner_manager",1,1,1,1 "access_acc_enedis_cdc_group_user","acc_enedis_cdc group_user","model_acc_enedis_cdc","base.group_user",1,0,0,0 "access_acc_enedis_import_logs_group_partner_manager","acc_enedis_import_logs group_partner_manager","model_acc_enedis_import_logs","base.group_partner_manager",1,1,1,1 -"access_acc_enedis_import_logs_group_user","acc_enedis_import_logs group_user","model_acc_enedis_import_logs","base.group_user",1,0,0,0 \ No newline at end of file +"access_acc_enedis_import_logs_group_user","acc_enedis_import_logs group_user","model_acc_enedis_import_logs","base.group_user",1,0,0,0 diff --git a/views/acc_counter_views.xml b/views/acc_counter_views.xml index c43b524d324cf4eaa3124af326e96bbf4209b686..c9a709adcfeab21324fbe814f7c9747de6252e41 100644 --- a/views/acc_counter_views.xml +++ b/views/acc_counter_views.xml @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="utf-8" ?> <odoo> <data> @@ -7,11 +7,19 @@ <field name="model">acc.counter</field> <field name="arch" type="xml"> <search string="Recherche PRMn"> - <field name="name" string="PRM"/> - <separator/> - <filter string="Points d'injection" name="is_injection" domain="[('is_injection', '=', True)]"/> - <filter string="Points de soutirage" name="is_delivery" domain="[('is_delivery', '=', True)]"/> - <separator/> + <field name="name" string="PRM" /> + <separator /> + <filter + string="Points d'injection" + name="is_injection" + domain="[('is_injection', '=', True)]" + /> + <filter + string="Points de soutirage" + name="is_delivery" + domain="[('is_delivery', '=', True)]" + /> + <separator /> </search> </field> </record> @@ -23,27 +31,29 @@ <form string="PRM"> <sheet> <div class="oe_title"> - <label for="name"/> + <label for="name" /> <h1> - <field name="name" placeholder="PRM"/> + <field name="name" placeholder="PRM" /> </h1> </div> <group> <group> - <field name="is_delivery"/> + <field name="is_delivery" /> </group> <group attrs="{'invisible': [('is_delivery', '!=', True)]}"> - <field name="power_delivery"/> - <field name="conso_annual"/> + <field name="power_delivery" /> + <field name="conso_annual" /> </group> </group> <group> <group> - <field name="is_injection"/> + <field name="is_injection" /> </group> - <group attrs="{'invisible': [('is_injection', '!=', True)]}"> - <field name="power_instal"/> - <field name="prod_annual"/> + <group + attrs="{'invisible': [('is_injection', '!=', True)]}" + > + <field name="power_instal" /> + <field name="prod_annual" /> </group> </group> <group name="infos"> @@ -51,14 +61,14 @@ <field name="acc_operation_id" /> <field name="date_start_contract" /> <field name="date_end_contract" /> - <field name="buyer_id"/> + <field name="buyer_id" /> </group> <group> - <field name="partner_id" required="True"/> - <field name="street"/> - <field name="street2"/> - <field name="zip"/> - <field name="city"/> + <field name="partner_id" required="True" /> + <field name="street" /> + <field name="street2" /> + <field name="zip" /> + <field name="city" /> </group> </group> </sheet> @@ -71,11 +81,11 @@ <field name="model">acc.counter</field> <field name="arch" type="xml"> <tree string="PRM"> - <field name="name"/> - <field name="partner_id"/> - <field name="city"/> - <field name="zip"/> - <field name="buyer_id"/> + <field name="name" /> + <field name="partner_id" /> + <field name="city" /> + <field name="zip" /> + <field name="buyer_id" /> </tree> </field> </record> @@ -85,7 +95,7 @@ <field name="type">ir.actions.act_window</field> <field name="res_model">acc.counter</field> <field name="view_mode">tree,form</field> - <field name="search_view_id" ref="view_acc_counter_filter"/> + <field name="search_view_id" ref="view_acc_counter_filter" /> <field name="help" type="html"> <p class="oe_view_nocontent_create"> Créer un PRM @@ -94,4 +104,4 @@ </record> </data> -</odoo> \ No newline at end of file +</odoo> diff --git a/views/acc_enedis_cdc_views.xml b/views/acc_enedis_cdc_views.xml index e227c07c71573043df04a459884b9ccfbd715778..b447aa23202b6992617cff3b6668f7245bf81ed0 100644 --- a/views/acc_enedis_cdc_views.xml +++ b/views/acc_enedis_cdc_views.xml @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="utf-8" ?> <odoo> <data> @@ -9,20 +9,20 @@ <form string="CDC Enedis"> <sheet> <div class="oe_title"> - <label for="name"/> + <label for="name" /> <h1> - <field name="name"/> + <field name="name" /> </h1> </div> <group> <group> - <field name="acc_operation_id"/> - <field name="acc_counter_id"/> + <field name="acc_operation_id" /> + <field name="acc_counter_id" /> </group> <group> - <field name="date_slot"/> - <field name="comp_data_type"/> - <field name="power"/> + <field name="date_slot" /> + <field name="comp_data_type" /> + <field name="power" /> </group> </group> </sheet> @@ -35,12 +35,12 @@ <field name="model">acc.enedis.cdc</field> <field name="arch" type="xml"> <tree string="CDC Enedis"> - <field name="name"/> - <field name="acc_operation_id"/> - <field name="acc_counter_id"/> - <field name="date_slot"/> - <field name="comp_data_type"/> - <field name="power"/> + <field name="name" /> + <field name="acc_operation_id" /> + <field name="acc_counter_id" /> + <field name="date_slot" /> + <field name="comp_data_type" /> + <field name="power" /> </tree> </field> </record> @@ -50,11 +50,11 @@ <field name="model">acc.enedis.cdc</field> <field name="arch" type="xml"> <pivot string="Account Statistics" sample="1"> - <field name="acc_operation_id" type="row"/> - <field name="date_slot" type="row"/> - <field name="acc_counter_id" type="row"/> - <field name="comp_data_type" type="row"/> - <field name="power" type="measure"/> + <field name="acc_operation_id" type="row" /> + <field name="date_slot" type="row" /> + <field name="acc_counter_id" type="row" /> + <field name="comp_data_type" type="row" /> + <field name="power" type="measure" /> </pivot> </field> </record> @@ -72,4 +72,4 @@ </record> </data> -</odoo> \ No newline at end of file +</odoo> diff --git a/views/acc_enedis_import_logs_views.xml b/views/acc_enedis_import_logs_views.xml index d742195cf28df3f15b255079b7832c6372c481ad..f7977561f27f9f4eea3b0efd10fb068a117c71df 100644 --- a/views/acc_enedis_import_logs_views.xml +++ b/views/acc_enedis_import_logs_views.xml @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="utf-8" ?> <odoo> <data> @@ -7,9 +7,9 @@ <field name="model">acc.enedis.import.logs</field> <field name="arch" type="xml"> <tree string="Logs Imports"> - <field name="name"/> - <field name="acc_operation_id"/> - <field name="date_import"/> + <field name="name" /> + <field name="acc_operation_id" /> + <field name="date_import" /> </tree> </field> </record> @@ -27,4 +27,4 @@ </record> </data> -</odoo> \ No newline at end of file +</odoo> diff --git a/views/acc_operation_views.xml b/views/acc_operation_views.xml index bf71ead158ad49a28efb9f70f46fd273abf65471..f7640586c59148f32c6a61aad43704b4591d3edc 100644 --- a/views/acc_operation_views.xml +++ b/views/acc_operation_views.xml @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="utf-8" ?> <odoo> <data> @@ -7,10 +7,14 @@ <field name="model">acc.operation</field> <field name="arch" type="xml"> <search string="Recherche Opération"> - <field name="name" string="Nom de l'opération"/> - <separator/> - <filter string="Archivé" name="inactive" domain="[('active', '=', False)]"/> - <separator/> + <field name="name" string="Nom de l'opération" /> + <separator /> + <filter + string="Archivé" + name="inactive" + domain="[('active', '=', False)]" + /> + <separator /> </search> </field> </record> @@ -20,69 +24,106 @@ <field name="model">acc.operation</field> <field name="arch" type="xml"> <form string="Opération"> - <header > + <header> <!-- <button string="Intégration des données ENEDIS" type="object" class="btn-primary" name="import_enedis_data"/>--> </header> <sheet> - <widget name="web_ribbon" title="Archivé" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/> - <field name="active" invisible="1"/> - <field name="image_1920" widget='image' options='{"preview_image": "image_256"}' style="float: right;"/> + <widget + name="web_ribbon" + title="Archivé" + bg_color="bg-danger" + attrs="{'invisible': [('active', '=', True)]}" + /> + <field name="active" invisible="1" /> + <field + name="image_1920" + widget='image' + options='{"preview_image": "image_256"}' + style="float: right;" + /> <div class="oe_title"> - <label for="description"/> + <label for="description" /> <h1> - <field name="description" placeholder="Nom de l'opération"/> + <field + name="description" + placeholder="Nom de l'opération" + /> </h1> - <label for="name"/> + <label for="name" /> <h2> - <field name="name" placeholder="ID Convention"/> + <field name="name" placeholder="ID Convention" /> </h2> - <label for="pmo_id"/> + <label for="pmo_id" /> <h2> - <field name="pmo_id" placeholder="PMO" domain="[('is_pmo', '=', True)]" context="{'default_is_pmo': True}"/> + <field + name="pmo_id" + placeholder="PMO" + domain="[('is_pmo', '=', True)]" + context="{'default_is_pmo': True}" + /> </h2> </div> <group> <group> - <field name="distribution_key"/> + <field name="distribution_key" /> </group> <group> - <field name="date_start_contract"/> + <field name="date_start_contract" /> </group> </group> <notebook> <page string="Points d'injection" name="injection"> <field - name="acc_injection_ids" - widget="one2many" - domain="[('is_injection', '=', True)]" - context="{'default_acc_operation_id': active_id, 'default_is_injection': True}"> + name="acc_injection_ids" + widget="one2many" + domain="[('is_injection', '=', True)]" + context="{'default_acc_operation_id': active_id, 'default_is_injection': True}" + > <tree string="Points d'injection" editable="bottom"> - <field name="acc_operation_id" invisible="1"/> - <field name="is_injection" invisible="1"/> - <field name="name"/> - <field name="partner_id" context="{'default_is_producer': True}"/> - <field name="buyer_id" context="{'default_is_buyer_surplus': True}"/> + <field name="acc_operation_id" invisible="1" /> + <field name="is_injection" invisible="1" /> + <field name="name" /> + <field + name="partner_id" + context="{'default_is_producer': True}" + /> + <field + name="buyer_id" + context="{'default_is_buyer_surplus': True}" + /> </tree> </field> </page> <page string="Points de soutirage" name="delivery"> - <field name="acc_delivery_ids" - widget="one2many" - domain="[('is_delivery', '=', True)]" - context="{'default_acc_operation_id': active_id, 'default_is_delivery': True}"> - <tree string="Points de soutirage" editable="bottom"> - <field name="acc_operation_id" invisible="1"/> - <field name="is_delivery" invisible="1"/> + <field + name="acc_delivery_ids" + widget="one2many" + domain="[('is_delivery', '=', True)]" + context="{'default_acc_operation_id': active_id, 'default_is_delivery': True}" + > + <tree + string="Points de soutirage" + editable="bottom" + > + <field name="acc_operation_id" invisible="1" /> + <field name="is_delivery" invisible="1" /> <field name="name" /> - <field name="partner_id" context="{'default_is_consumer': True}"/> + <field + name="partner_id" + context="{'default_is_consumer': True}" + /> </tree> </field> </page> <page string="Logs Imports" name="logs"> - <field name="acc_enedis_import_logs_ids" mode="tree" readonly="1"> + <field + name="acc_enedis_import_logs_ids" + mode="tree" + readonly="1" + > <tree string="Logs"> - <field name="name"/> - <field name="date_import"/> + <field name="name" /> + <field name="date_import" /> </tree> </field> </page> @@ -90,7 +131,7 @@ </sheet> <div class="oe_chatter"> <field name="message_follower_ids" /> - <field name="message_ids"/> + <field name="message_ids" /> </div> </form> </field> @@ -101,9 +142,9 @@ <field name="model">acc.operation</field> <field name="arch" type="xml"> <tree string="Opération"> - <field name="name"/> - <field name="pmo_id"/> - <field name="active" invisible="1"/> + <field name="name" /> + <field name="pmo_id" /> + <field name="active" invisible="1" /> </tree> </field> </record> @@ -114,29 +155,40 @@ <field name="model">acc.operation</field> <field name="arch" type="xml"> <kanban class="oe_background_grey o_kanban_dashboard o_account_kanban"> - <field name="id"/> - <field name="name"/> - <field name="pmo_id"/> - <field name="image_128"/> - <field name="image_256"/> + <field name="id" /> + <field name="name" /> + <field name="pmo_id" /> + <field name="image_128" /> + <field name="image_256" /> <templates> <t t-name="kanban-box"> - <div class="container o_kanban_card_content oe_kanban_global_click"> + <div + class="container o_kanban_card_content oe_kanban_global_click" + > <div class="row"> <div class="col text-center"> - <img alt="Operation image" t-if="record.image_256.raw_value" t-att-src="kanban_image('acc.operation', 'image_256', record.id.raw_value)"/> + <img + alt="Operation image" + t-if="record.image_256.raw_value" + t-att-src="kanban_image('acc.operation', 'image_256', record.id.raw_value)" + /> <t t-if="!record.image_128.raw_value"> - <img alt="Image Operation" class="img-fluid" style="max-width: 256px;" t-att-src='_s + "/acc_operation/static/img/placeholder.png"'/> + <img + alt="Image Operation" + class="img-fluid" + style="max-width: 256px;" + t-att-src='_s + "/acc_operation/static/img/placeholder.png"' + /> </t> </div> </div> <div class="row"> <div class="col"> - <h2 class="mt16"><field name="name"/></h2> - <hr/> + <h2 class="mt16"><field name="name" /></h2> + <hr /> <t> <p class="text-muted"> - PMO : <field name="pmo_id"/> <br /> + PMO : <field name="pmo_id" /> <br /> </p> </t> </div> @@ -153,7 +205,7 @@ <field name="type">ir.actions.act_window</field> <field name="res_model">acc.operation</field> <field name="view_mode">kanban,tree,form</field> - <field name="search_view_id" ref="view_acc_operation_filter"/> + <field name="search_view_id" ref="view_acc_operation_filter" /> <field name="help" type="html"> <p class="o_view_nocontent_smiling_face"> Créer une opération @@ -162,4 +214,4 @@ </record> </data> -</odoo> \ No newline at end of file +</odoo> diff --git a/views/menu_views.xml b/views/menu_views.xml index 0707b2f5b18cc7a2198abde6885d62dc1b456b5e..081a5024777ae55a579989f3505b0d32e604cf8a 100644 --- a/views/menu_views.xml +++ b/views/menu_views.xml @@ -1,56 +1,69 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="utf-8" ?> <odoo> <data> - <menuitem id="menu_acc" - name="ACC" - sequence="6" - web_icon="acc_operation,static/img/icon_operation.png" - groups="base.group_user,base.group_partner_manager"/> - - <menuitem id="menu_general" - parent="menu_acc" - name="ACC" - sequence="10"/> - - <menuitem id="menu_operations" - parent="menu_general" - name="Operations" - sequence="10" - action="acc_operation.acc_operation_act_window"/> - - <menuitem id="menu_prm" - parent="menu_general" - name="PRM" - sequence="20" - action="acc_operation.acc_counter_act_window"/> - - <menuitem id="acc_operation_menu_contacts" - name="Contacts" - action="contacts.action_contacts" - parent="menu_acc" - sequence="20"/> - - <menuitem id="acc_enedis_menu" - name="Données Enedis" - parent="menu_acc" - sequence="40"/> - - <menuitem id="acc_enedis_cdc_menu" - parent="acc_enedis_menu" - name="CDC Enedis" - sequence="10" - action="acc_operation.acc_enedis_cdc_act_window"/> - - <menuitem id="acc_enedis_import_logs_menu" - parent="acc_enedis_menu" - name="Logs Import des données" - sequence="30" - action="acc_operation.acc_enedis_import_logs_act_window"/> - - <menuitem id="menu_acc_config" + <menuitem + id="menu_acc" + name="ACC" + sequence="6" + web_icon="acc_operation,static/img/icon_operation.png" + groups="base.group_user,base.group_partner_manager" + /> + + <menuitem id="menu_general" parent="menu_acc" name="ACC" sequence="10" /> + + <menuitem + id="menu_operations" + parent="menu_general" + name="Operations" + sequence="10" + action="acc_operation.acc_operation_act_window" + /> + + <menuitem + id="menu_prm" + parent="menu_general" + name="PRM" + sequence="20" + action="acc_operation.acc_counter_act_window" + /> + + <menuitem + id="acc_operation_menu_contacts" + name="Contacts" + action="contacts.action_contacts" + parent="menu_acc" + sequence="20" + /> + + <menuitem + id="acc_enedis_menu" + name="Données Enedis" + parent="menu_acc" + sequence="40" + /> + + <menuitem + id="acc_enedis_cdc_menu" + parent="acc_enedis_menu" + name="CDC Enedis" + sequence="10" + action="acc_operation.acc_enedis_cdc_act_window" + /> + + <menuitem + id="acc_enedis_import_logs_menu" + parent="acc_enedis_menu" + name="Logs Import des données" + sequence="30" + action="acc_operation.acc_enedis_import_logs_act_window" + /> + + <menuitem + id="menu_acc_config" name="Configuration" parent="menu_acc" - sequence="60"/> + sequence="60" + /> </data> -</odoo> \ No newline at end of file +</odoo> diff --git a/views/res_partner_views.xml b/views/res_partner_views.xml index b08c437574020aaa6ac003b9f0c72bdeb3819ae0..8f98048440ca66ccb219027dfb86679d855318ef 100644 --- a/views/res_partner_views.xml +++ b/views/res_partner_views.xml @@ -1,18 +1,34 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="utf-8" ?> <odoo> <data> <record id="view_res_partner_filter" model="ir.ui.view"> <field name="name">res.partner.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="//filter[@name='type_person']" position="before"> - <filter string="PMO" name="type_pmo" domain="[('is_pmo', '=', True)]"/> - <filter string="Consommateurs" name="type_consumer" domain="[('is_consumer', '=', True)]"/> - <filter string="Producteurs" name="type_producer" domain="[('is_producer', '=', True)]"/> - <filter string="Acheteurs de surplus" name="type_buyer" domain="[('is_buyer_surplus', '=', True)]"/> - <separator/> + <filter + string="PMO" + name="type_pmo" + domain="[('is_pmo', '=', True)]" + /> + <filter + string="Consommateurs" + name="type_consumer" + domain="[('is_consumer', '=', True)]" + /> + <filter + string="Producteurs" + name="type_producer" + domain="[('is_producer', '=', True)]" + /> + <filter + string="Acheteurs de surplus" + name="type_buyer" + domain="[('is_buyer_surplus', '=', True)]" + /> + <separator /> </xpath> </field> </record> @@ -20,45 +36,77 @@ <record id="view_partner_form" model="ir.ui.view"> <field name="name">res.partner.form</field> <field name="model">res.partner</field> - <field name="inherit_id" ref="base.view_partner_form"/> + <field name="inherit_id" ref="base.view_partner_form" /> <field name="arch" type="xml"> <field name="type" position="before"> - <field name="is_producer"/> - <field name="is_consumer"/> - <field name="is_pmo"/> - <field name="is_buyer_surplus"/> + <field name="is_producer" /> + <field name="is_consumer" /> + <field name="is_pmo" /> + <field name="is_buyer_surplus" /> </field> <xpath expr="//notebook" position="inside"> - <page string="Points d'injection" name="injection" attrs="{'invisible': [('is_producer', '!=', True)]}"> - <field name="injection_counter_ids" widget="one2many"/> + <page + string="Points d'injection" + name="injection" + attrs="{'invisible': [('is_producer', '!=', True)]}" + > + <field name="injection_counter_ids" widget="one2many" /> </page> - <page string="Points de soutirage" name="delivery" attrs="{'invisible': [('is_consumer', '!=', True)]}"> - <field name="delivery_counter_ids" widget="one2many"/> + <page + string="Points de soutirage" + name="delivery" + attrs="{'invisible': [('is_consumer', '!=', True)]}" + > + <field name="delivery_counter_ids" widget="one2many" /> </page> - <page string="Liste des opérations" name="operation" attrs="{'invisible': [('is_producer', '=', False), ('is_consumer', '=', False), ('is_pmo', '=', False)]}"> + <page + string="Liste des opérations" + name="operation" + attrs="{'invisible': [('is_producer', '=', False), ('is_consumer', '=', False), ('is_pmo', '=', False)]}" + > <field name="acc_operation_ids" widget="one2many"> - <tree string="Liste des opérations" > - <field name="name"/> - <field name="pmo_id"/> + <tree string="Liste des opérations"> + <field name="name" /> + <field name="pmo_id" /> </tree> <form string="Opération"> <sheet> <group> - <field name="name"/> - <field name="pmo_id"/> + <field name="name" /> + <field name="pmo_id" /> </group> <notebook> - <page string="Points d'injection" name="injection"> - <field name="acc_injection_ids" widget="one2many" domain="[('is_injection', '=', True)]"> - <tree string="Points d'injection" editable="top"> - <field name="name"/> + <page + string="Points d'injection" + name="injection" + > + <field + name="acc_injection_ids" + widget="one2many" + domain="[('is_injection', '=', True)]" + > + <tree + string="Points d'injection" + editable="top" + > + <field name="name" /> </tree> </field> </page> - <page string="Points de soutirage" name="delivery"> - <field name="acc_delivery_ids" widget="one2many" domain="[('is_delivery', '=', True)]"> - <tree string="Points de soutirage" editable="top"> - <field name="name"/> + <page + string="Points de soutirage" + name="delivery" + > + <field + name="acc_delivery_ids" + widget="one2many" + domain="[('is_delivery', '=', True)]" + > + <tree + string="Points de soutirage" + editable="top" + > + <field name="name" /> </tree> </field> </page> @@ -72,4 +120,4 @@ </record> </data> -</odoo> \ No newline at end of file +</odoo>