From ba0fd8e3c5953ab13abb3af455447ac61578bbdb Mon Sep 17 00:00:00 2001 From: benjamin <benjamin@le-filament.com> Date: Tue, 1 Mar 2022 19:11:29 +0100 Subject: [PATCH] [clean] add pre-commit changes --- .editorconfig | 20 ++ .eslintrc.yml | 187 +++++++++++++++ .flake8 | 12 + .gitignore | 75 ++++++ .isort.cfg | 13 ++ .pre-commit-config.yaml | 127 ++++++++++ .prettierrc.yml | 8 + .pylintrc | 87 +++++++ .pylintrc-mandatory | 64 +++++ datas/cgscop_timesheet_code_data.xml | 18 +- models/cgscop_timesheet_code.py | 2 +- models/cgscop_timesheet_sheet.py | 30 ++- models/hr_timesheet.py | 36 +-- models/project.py | 2 +- models/res_partner.py | 2 +- models/ur_financial_system.py | 2 +- models/ur_month_timesheet.py | 2 +- models/ur_regional_convention.py | 2 +- report/report_hr_timesheet.xml | 77 +++--- security/ir.model.access.csv | 4 +- security/security_rules.xml | 90 ++++--- static/src/css/style.css | 8 +- static/src/js/ur_month_timesheet.js | 70 +++--- static/src/xml/month_timesheet.xml | 60 ++--- views/assets.xml | 25 +- views/cgscop_timesheet_code.xml | 13 +- views/cgscop_timesheet_sheet.xml | 253 +++++++++++++------- views/hr_timesheet.xml | 337 ++++++++++++++++++++------- views/hr_timesheet_cgscop.xml | 181 ++++++++++---- views/res_company.xml | 12 +- views/res_partner.xml | 44 ++-- views/ur_financial_system.xml | 22 +- views/ur_month_timesheet.xml | 37 +-- views/ur_regional_convention.xml | 22 +- 34 files changed, 1489 insertions(+), 455 deletions(-) create mode 100644 .editorconfig create mode 100644 .eslintrc.yml create mode 100644 .flake8 create mode 100644 .gitignore create mode 100644 .isort.cfg create mode 100644 .pre-commit-config.yaml create mode 100644 .prettierrc.yml create mode 100644 .pylintrc create mode 100644 .pylintrc-mandatory diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..bfd7ac5 --- /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 0000000..d4cc423 --- /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 0000000..e397e8e --- /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 0000000..818770f --- /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 0000000..0ec187e --- /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 0000000..1c6434b --- /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 0000000..5b6d4b3 --- /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 0000000..dc6270e --- /dev/null +++ b/.pylintrc @@ -0,0 +1,87 @@ +[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, + 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 0000000..43ea239 --- /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/datas/cgscop_timesheet_code_data.xml b/datas/cgscop_timesheet_code_data.xml index f9969de..cd52df0 100644 --- a/datas/cgscop_timesheet_code_data.xml +++ b/datas/cgscop_timesheet_code_data.xml @@ -1,4 +1,4 @@ -<?xml version="1.0"?> +<?xml version="1.0" ?> <odoo> <data noupdate="1"> <record id="code_cg_activite_0" model="cgscop.timesheet.code"> @@ -18,7 +18,9 @@ </record> <record id="code_cg_activite_4" model="cgscop.timesheet.code"> - <field name="name">Accompagnement - Suivi syndical Scop en difficultés</field> + <field + name="name" + >Accompagnement - Suivi syndical Scop en difficultés</field> </record> <record id="code_cg_activite_5" model="cgscop.timesheet.code"> @@ -30,7 +32,9 @@ </record> <record id="code_cg_activite_7" model="cgscop.timesheet.code"> - <field name="name">Accompagnement - Animation coopérative et intercoopérative (réseau)</field> + <field + name="name" + >Accompagnement - Animation coopérative et intercoopérative (réseau)</field> </record> <record id="code_cg_activite_8" model="cgscop.timesheet.code"> @@ -46,7 +50,9 @@ </record> <record id="code_cg_activite_11" model="cgscop.timesheet.code"> - <field name="name">Formation des coopératives - Préparation et gestion administrative</field> + <field + name="name" + >Formation des coopératives - Préparation et gestion administrative</field> </record> <record id="code_cg_activite_12" model="cgscop.timesheet.code"> @@ -58,7 +64,9 @@ </record> <record id="code_cg_activite_14" model="cgscop.timesheet.code"> - <field name="name">Vie du mouvement - Réunions équipe technique (régional et national)</field> + <field + name="name" + >Vie du mouvement - Réunions équipe technique (régional et national)</field> </record> <record id="code_cg_activite_15" model="cgscop.timesheet.code"> diff --git a/models/cgscop_timesheet_code.py b/models/cgscop_timesheet_code.py index 3d0437c..be6d231 100644 --- a/models/cgscop_timesheet_code.py +++ b/models/cgscop_timesheet_code.py @@ -1,7 +1,7 @@ # © 2019 Le Filament (<http://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import models, fields +from odoo import fields, models class ScopTimesheetCode(models.Model): diff --git a/models/cgscop_timesheet_sheet.py b/models/cgscop_timesheet_sheet.py index 1415e7b..f6ddf31 100644 --- a/models/cgscop_timesheet_sheet.py +++ b/models/cgscop_timesheet_sheet.py @@ -1,7 +1,7 @@ # © 2020 Le Filament (<http://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import models, fields, api +from odoo import _, api, fields, models from odoo.exceptions import UserError, ValidationError @@ -41,9 +41,7 @@ class ScopHrTimesheetSheet(models.Model): [("user_id", "=", self.env.uid)], limit=1 ), ) - total_hour = fields.Float( - string="Total", compute="_compute_hour", store=True - ) + total_hour = fields.Float(string="Total", compute="_compute_hour", store=True) company_id = fields.Many2one( comodel_name="res.company", string="Company", @@ -68,14 +66,10 @@ class ScopHrTimesheetSheet(models.Model): @api.depends("timesheet_line_ids", "timesheet_line_ids.unit_amount") def _compute_hour(self): for sheet in self: - sheet.total_hour = sum( - sheet.timesheet_line_ids.mapped("unit_amount") - ) + sheet.total_hour = sum(sheet.timesheet_line_ids.mapped("unit_amount")) def _compute_can_reset(self): - is_timesheet_user = self.user_has_groups( - "hr_timesheet.group_timesheet_manager" - ) + is_timesheet_user = self.user_has_groups("hr_timesheet.group_timesheet_manager") for sheet in self: if sheet.state == "draft" or is_timesheet_user: sheet.can_edit = True @@ -93,8 +87,10 @@ class ScopHrTimesheetSheet(models.Model): len(employee_ids) == 1 and employee_ids != sheet.employee_id ): raise ValidationError( - "Vous ne pouvez pas ajouter les lignes" - " de temps de plusieurs employés." + _( + "Vous ne pouvez pas ajouter les lignes" + " de temps de plusieurs employés." + ) ) # ------------------------------------------------------ @@ -104,8 +100,10 @@ class ScopHrTimesheetSheet(models.Model): for timesheet in self: if timesheet.state in ["submit", "valid"]: raise UserError( - "Vous ne pouvez pas supprimer une " - "feuille de temps soumise ou validée" + _( + "Vous ne pouvez pas supprimer une " + "feuille de temps soumise ou validée" + ) ) super(ScopHrTimesheetSheet, self).unlink() @@ -119,9 +117,7 @@ class ScopHrTimesheetSheet(models.Model): self.write({"state": "valid", "validation_date": fields.Date.today()}) def reset_timesheet_sheets(self): - self.write( - {"state": "draft", "submit_date": False, "validation_date": False} - ) + self.write({"state": "draft", "submit_date": False, "validation_date": False}) def print_timesheet(self): return self.env.ref( diff --git a/models/hr_timesheet.py b/models/hr_timesheet.py index 88aa83f..ba8b2af 100644 --- a/models/hr_timesheet.py +++ b/models/hr_timesheet.py @@ -3,7 +3,7 @@ from datetime import datetime, time -from odoo import models, fields, api +from odoo import _, api, fields, models from odoo.exceptions import UserError, ValidationError @@ -86,9 +86,9 @@ class ScopHrTimesheet(models.Model): ) timesheet.ur_financial_system_nb = len(financial_system) # Calcul nombre de conventions - regional_convention = timesheet.env[ - "ur.regional.convention" - ].search([("ur_id", "=", timesheet.ur_id.id)]) + regional_convention = timesheet.env["ur.regional.convention"].search( + [("ur_id", "=", timesheet.ur_id.id)] + ) timesheet.ur_regional_convention_nb = len(regional_convention) @api.depends("sheet_id", "sheet_id.state") @@ -169,8 +169,10 @@ class ScopHrTimesheet(models.Model): and total > self.env.user.company_id.day_duration ): raise ValidationError( - "Vous ne pouvez imputer plus de %sh sur la même journée.\n" - "Journée du %s" + _( + "Vous ne pouvez imputer plus de %sh sur la même journée.\n" + "Journée du %s" + ) % ( self.env.user.company_id.day_duration, record.date.strftime("%d/%m/%Y"), @@ -192,8 +194,10 @@ class ScopHrTimesheet(models.Model): ) if line.date.weekday() in (5, 6) or holiday: raise ValidationError( - "Vous ne pouvez imputer du temps sur un weekend " - "ou un jour férié." + _( + "Vous ne pouvez imputer du temps sur un weekend " + "ou un jour férié." + ) ) # ------------------------------------------------------ @@ -203,8 +207,10 @@ class ScopHrTimesheet(models.Model): for timesheet in self: if timesheet.state in ["submit", "valid"]: raise UserError( - "Vous ne pouvez pas supprimer une " - "ligne de temps soumise ou validée" + _( + "Vous ne pouvez pas supprimer une " + "ligne de temps soumise ou validée" + ) ) super(ScopHrTimesheet, self).unlink() @@ -216,13 +222,13 @@ class ScopHrTimesheet(models.Model): Crée une feuille de temps avec les lignes sélectionnées """ if any(time.state != "to_report" or time.sheet_id for time in self): - raise UserError( - "Vous ne pouvez pas insérer 2 fois la même ligne !" - ) + raise UserError(_("Vous ne pouvez pas insérer 2 fois la même ligne !")) if len(self.mapped("employee_id")) != 1: raise UserError( - "Il ne peut y avoir plusieurs employés dans une " - "même feuille de temps." + _( + "Il ne peut y avoir plusieurs employés dans une " + "même feuille de temps." + ) ) return { diff --git a/models/project.py b/models/project.py index e42a076..0356acd 100644 --- a/models/project.py +++ b/models/project.py @@ -1,7 +1,7 @@ # © 2019 Le Filament (<http://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import models, fields, api +from odoo import api, fields, models class ScopProjectTimesheet(models.Model): diff --git a/models/res_partner.py b/models/res_partner.py index 1322cb9..7db4a6a 100644 --- a/models/res_partner.py +++ b/models/res_partner.py @@ -1,7 +1,7 @@ # © 2020 Le Filament (<http://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import models, fields +from odoo import fields, models class ScopPartnerTimesheet(models.Model): diff --git a/models/ur_financial_system.py b/models/ur_financial_system.py index f1aa473..6fe8030 100644 --- a/models/ur_financial_system.py +++ b/models/ur_financial_system.py @@ -1,7 +1,7 @@ # © 2019 Le Filament (<http://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import models, fields +from odoo import fields, models class ScopTimesheetCode(models.Model): diff --git a/models/ur_month_timesheet.py b/models/ur_month_timesheet.py index 76753cc..a3c9387 100644 --- a/models/ur_month_timesheet.py +++ b/models/ur_month_timesheet.py @@ -1,7 +1,7 @@ # © 2019 Le Filament (<http://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import models, fields, api +from odoo import api, fields, models def get_years(): diff --git a/models/ur_regional_convention.py b/models/ur_regional_convention.py index 6129a14..ec71f9e 100644 --- a/models/ur_regional_convention.py +++ b/models/ur_regional_convention.py @@ -1,7 +1,7 @@ # © 2019 Le Filament (<http://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import models, fields +from odoo import fields, models class ScopRegionalConvention(models.Model): diff --git a/report/report_hr_timesheet.xml b/report/report_hr_timesheet.xml index f6f1b49..8df120f 100644 --- a/report/report_hr_timesheet.xml +++ b/report/report_hr_timesheet.xml @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="utf-8" ?> <odoo> <data> <template id="report_timesheet_document"> @@ -8,48 +8,64 @@ Feuille de Temps <t t-if="o.state == 'draft'"> - Brouillon</t> </h2> <h3> - <t t-esc="o.name"/> + <t t-esc="o.name" /> </h3> <div id="informations" class="row mt32 mb32"> <div class="col-auto mw-100 mb-2" name="employee"> <strong>Employé</strong> - <p class="m-0" t-field="o.employee_id.name"/> + <p class="m-0" t-field="o.employee_id.name" /> </div> - <div class="col-auto mw-100 mb-2" > + <div class="col-auto mw-100 mb-2"> <strong>Soumis le</strong> - <p class="m-0" t-field="o.submit_date"/> + <p class="m-0" t-field="o.submit_date" /> </div> <div class="col-auto mw-100 mb-2" name="date_end"> <strong>Validé le</strong> - <p class="m-0" t-field="o.validation_date"/> + <p class="m-0" t-field="o.validation_date" /> </div> <div class="col-auto mw-100 mb-2" name="date_end"> <strong>Total</strong> - <p class="m-0" t-field="o.total_hour" t-options="{'widget': 'duration', 'digital': True, 'unit': 'hour', 'round': 'minute'}"/> + <p + class="m-0" + t-field="o.total_hour" + t-options="{'widget': 'duration', 'digital': True, 'unit': 'hour', 'round': 'minute'}" + /> </div> </div> - <table class="table table-sm o_main_table" name="invoice_line_table"> + <table + class="table table-sm o_main_table" + name="invoice_line_table" + > <thead> <tr> <th class="text-left"><span>Date</span></th> <th class="text-left"><span>Code activité UR</span></th> <th class="text-left"><span>Contact</span></th> <th class="text-left"><span>Description</span></th> - <th class="text-left"><span>Dispositif Financier</span></th> + <th class="text-left"><span + >Dispositif Financier</span></th> <th class="text-left"><span>Durée</span></th> </tr> </thead> <tbody class="invoice_tbody"> - <t t-foreach="o.timesheet_line_ids.sorted('date')" t-as="line"> + <t + t-foreach="o.timesheet_line_ids.sorted('date')" + t-as="line" + > <tr> - <td><span t-field="line.date"/></td> - <td><span t-field="line.project_id"/></td> - <td><span t-field="line.partner_id"/></td> - <td><span t-field="line.name"/></td> - <td><span t-field="line.ur_financial_system_id"/></td> - <td class="text-right"><span t-field="line.unit_amount" t-options="{'widget': 'duration', 'digital': True, 'unit': 'hour', 'round': 'minute'}"/></td> + <td><span t-field="line.date" /></td> + <td><span t-field="line.project_id" /></td> + <td><span t-field="line.partner_id" /></td> + <td><span t-field="line.name" /></td> + <td><span + t-field="line.ur_financial_system_id" + /></td> + <td class="text-right"><span + t-field="line.unit_amount" + t-options="{'widget': 'duration', 'digital': True, 'unit': 'hour', 'round': 'minute'}" + /></td> </tr> </t> <tr> @@ -58,24 +74,33 @@ <td /> <td /> <td class="text-right"><strong>Total</strong></td> - <td class="text-right"><strong t-esc="o.total_hour" t-options="{'widget': 'duration', 'digital': True, 'unit': 'hour', 'round': 'minute'}"/></td> + <td class="text-right"><strong + t-esc="o.total_hour" + t-options="{'widget': 'duration', 'digital': True, 'unit': 'hour', 'round': 'minute'}" + /></td> </tr> </tbody> </table> - <div t-if="o.state == 'draft'">Cette feuille de temps a été éditée en brouillon.</div> + <div + t-if="o.state == 'draft'" + >Cette feuille de temps a été éditée en brouillon.</div> <div t-else=""> <table style="float: right;"> <tr> - <td style="width: 300px; border-bottom: 1px solid #495057; text-align: center;"> + <td + style="width: 300px; border-bottom: 1px solid #495057; text-align: center;" + > Visa salarié </td> - <td style="width: 300px; border-bottom: 1px solid #495057; text-align: center;"> + <td + style="width: 300px; border-bottom: 1px solid #495057; text-align: center;" + > Visa direction </td> </tr> <tr> - <td><br/><br/><br/></td> - <td><br/><br/><br/></td> + <td><br /><br /><br /></td> + <td><br /><br /><br /></td> </tr> </table> </div> @@ -86,7 +111,7 @@ <template id="report_timesheet_sheet"> <t t-call="web.html_container"> <t t-foreach="docs" t-as="o"> - <t t-call="cgscop_timesheet.report_timesheet_document"/> + <t t-call="cgscop_timesheet.report_timesheet_document" /> </t> </t> </template> @@ -94,14 +119,14 @@ <!-- Paper format --> <record id="cgscop_paperformat_a4_landscape" model="report.paperformat"> <field name="name">A4 Paysage</field> - <field name="default" eval="True"/> + <field name="default" eval="True" /> <field name="format">A4</field> <field name="orientation">Landscape</field> <field name="margin_top">35</field> <field name="margin_bottom">20</field> <field name="margin_left">10</field> <field name="margin_right">10</field> - <field name="header_line" eval="False"/> + <field name="header_line" eval="False" /> <field name="header_spacing">30</field> <field name="dpi">90</field> </record> @@ -113,7 +138,7 @@ <field name="report_type">qweb-pdf</field> <field name="report_name">cgscop_timesheet.report_timesheet_sheet</field> <field name="report_file">cgscop_timesheet.report_timesheet_sheet</field> - <field name="paperformat_id" ref="cgscop_paperformat_a4_landscape"/> + <field name="paperformat_id" ref="cgscop_paperformat_a4_landscape" /> </record> </data> diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv index f06ad99..a00e653 100644 --- a/security/ir.model.access.csv +++ b/security/ir.model.access.csv @@ -12,6 +12,6 @@ access_cgscop_timesheet_sheet_user,access_cgscop_timesheet_sheet_user,model_cgsc access_ur_regional_convention,access_ur_regional_convention,model_ur_regional_convention,base.group_user,1,0,0,0 access_ur_regional_convention_ur_manager,access_ur_regional_convention_ur,model_ur_regional_convention,cgscop_partner.group_ur_list_modif,1,1,1,1 access_ur_regional_convention_cg_manager,access_ur_regional_convention_cg,model_ur_regional_convention,cgscop_partner.group_cg_administrator,1,1,1,1 -access_ur_month_timesheet,access_ur_month_timesheet,model_ur_month_timesheet,base.group_user,1,0,0,0 +access_ur_month_timesheet,access_ur_month_timesheet,model_ur_month_timesheet,base.group_user,1,0,0,0 access_ur_month_timesheet_ur_manager,access_ur_month_timesheet_ur,model_ur_month_timesheet,cgscop_partner.group_ur_list_modif,1,1,1,1 -access_ur_month_timesheet_cg_manager,access_ur_month_timesheet_cg,model_ur_month_timesheet,cgscop_partner.group_cg_administrator,1,1,1,1 \ No newline at end of file +access_ur_month_timesheet_cg_manager,access_ur_month_timesheet_cg,model_ur_month_timesheet,cgscop_partner.group_cg_administrator,1,1,1,1 diff --git a/security/security_rules.xml b/security/security_rules.xml index c60f601..33c9bc1 100644 --- a/security/security_rules.xml +++ b/security/security_rules.xml @@ -1,97 +1,111 @@ -<?xml version="1.0"?> +<?xml version="1.0" ?> <!-- Copyright 2019 Le Filament License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). --> - <odoo> <data> <record id="ur_financial_system_rule_ur" model="ir.rule"> <field name="name">ur financial system rule per ur</field> - <field name="model_id" ref="model_ur_financial_system"/> + <field name="model_id" ref="model_ur_financial_system" /> <field name="domain_force">[('ur_id','=',user.company_id.ur_id.id)]</field> - <field name="groups" eval="[(6, 0, [ref('base.group_user')])]"/> - <field eval="True" name="global"/> + <field name="groups" eval="[(6, 0, [ref('base.group_user')])]" /> + <field eval="True" name="global" /> </record> <record id="ur_regional_convention_rule_ur" model="ir.rule"> <field name="name">ur regional convention rule per ur</field> - <field name="model_id" ref="model_ur_regional_convention"/> + <field name="model_id" ref="model_ur_regional_convention" /> <field name="domain_force">[('ur_id','=',user.company_id.ur_id.id)]</field> - <field name="groups" eval="[(6, 0, [ref('base.group_user')])]"/> - <field eval="True" name="global"/> + <field name="groups" eval="[(6, 0, [ref('base.group_user')])]" /> + <field eval="True" name="global" /> </record> <record id="ur_month_timesheet_rule_ur" model="ir.rule"> <field name="name">ur month timesheet rule per ur</field> - <field name="model_id" ref="model_ur_month_timesheet"/> + <field name="model_id" ref="model_ur_month_timesheet" /> <field name="domain_force">[('ur_id','=',user.company_id.ur_id.id)]</field> - <field name="groups" eval="[(6, 0, [ref('base.group_user')])]"/> - <field eval="True" name="global"/> + <field name="groups" eval="[(6, 0, [ref('base.group_user')])]" /> + <field eval="True" name="global" /> </record> <record id="project_rule_ur" model="ir.rule"> <field name="name">project rule per ur</field> - <field name="model_id" ref="project.model_project_project"/> + <field name="model_id" ref="project.model_project_project" /> <field name="domain_force">[('ur_id','=',user.company_id.ur_id.id)]</field> - <field name="groups" eval="[(6, 0, [ref('base.group_user')])]"/> - <field eval="True" name="global"/> + <field name="groups" eval="[(6, 0, [ref('base.group_user')])]" /> + <field eval="True" name="global" /> </record> <record id="project_rule_administrator_ur" model="ir.rule"> <field name="name">project rule for administrator</field> - <field name="model_id" ref="project.model_project_project"/> + <field name="model_id" ref="project.model_project_project" /> <field name="domain_force">[(1,'=',1)]</field> - <field name="groups" eval="[(6, 0, [ref('cgscop_partner.group_cg_administrator')])]"/> - <field eval="True" name="global"/> + <field + name="groups" + eval="[(6, 0, [ref('cgscop_partner.group_cg_administrator')])]" + /> + <field eval="True" name="global" /> </record> <record id="analytic_line_ur_rule" model="ir.rule"> <field name="name">Analytic line UR rule</field> - <field name="model_id" ref="analytic.model_account_analytic_line"/> - <field name="groups" eval="[(6, 0, [ref('base.group_user')])]"/> - <field eval="True" name="global"/> + <field name="model_id" ref="analytic.model_account_analytic_line" /> + <field name="groups" eval="[(6, 0, [ref('base.group_user')])]" /> + <field eval="True" name="global" /> <field name="domain_force">[('ur_id','=',user.company_id.ur_id.id)]</field> </record> <record id="analytic_rule_administrator_ur" model="ir.rule"> <field name="name">Analytic line UR administrator rule</field> - <field name="model_id" ref="analytic.model_account_analytic_line"/> + <field name="model_id" ref="analytic.model_account_analytic_line" /> <field name="domain_force">[(1,'=',1)]</field> - <field name="groups" eval="[(6, 0, [ref('cgscop_partner.group_cg_administrator')])]"/> - <field eval="True" name="global"/> + <field + name="groups" + eval="[(6, 0, [ref('cgscop_partner.group_cg_administrator')])]" + /> + <field eval="True" name="global" /> </record> <record id="analytic.analytic_line_comp_rule" model="ir.rule"> <field name="name">Analytic line multi company rule</field> - <field name="model_id" ref="model_account_analytic_line"/> - <field eval="True" name="global"/> - <field name="active" eval="False"/> + <field name="model_id" ref="model_account_analytic_line" /> + <field eval="True" name="global" /> + <field name="active" eval="False" /> </record> <record id="account.account_analytic_line_rule_billing_user" model="ir.rule"> <field name="name">account.analytic.line.billing.user</field> - <field name="model_id" ref="model_account_analytic_line"/> - <field name="perm_read" eval="False"/> - <field name="perm_write" eval="True"/> - <field name="perm_create" eval="True"/> - <field name="perm_unlink" eval="True"/> - <field name="active" eval="False"/> + <field name="model_id" ref="model_account_analytic_line" /> + <field name="perm_read" eval="False" /> + <field name="perm_write" eval="True" /> + <field name="perm_create" eval="True" /> + <field name="perm_unlink" eval="True" /> + <field name="active" eval="False" /> </record> <record id="timesheet_sheet_rule_ur" model="ir.rule"> <field name="name">Feuilles de temps de mon UR</field> - <field name="model_id" ref="cgscop_timesheet.model_cgscop_timesheet_sheet"/> + <field + name="model_id" + ref="cgscop_timesheet.model_cgscop_timesheet_sheet" + /> <field name="domain_force">[('ur_id','=',user.company_id.ur_id.id)]</field> - <field name="groups" eval="[(6, 0, [ref('base.group_user')])]"/> - <field eval="True" name="global"/> + <field name="groups" eval="[(6, 0, [ref('base.group_user')])]" /> + <field eval="True" name="global" /> </record> <record id="timesheet_sheet_rule_administrator_ur" model="ir.rule"> <field name="name">Feuilles de temps administrator</field> - <field name="model_id" ref="cgscop_timesheet.model_cgscop_timesheet_sheet"/> + <field + name="model_id" + ref="cgscop_timesheet.model_cgscop_timesheet_sheet" + /> <field name="domain_force">[(1,'=',1)]</field> - <field name="groups" eval="[(6, 0, [ref('cgscop_partner.group_cg_administrator')])]"/> - <field eval="True" name="global"/> + <field + name="groups" + eval="[(6, 0, [ref('cgscop_partner.group_cg_administrator')])]" + /> + <field eval="True" name="global" /> </record> </data> </odoo> diff --git a/static/src/css/style.css b/static/src/css/style.css index 9980dc9..866a047 100644 --- a/static/src/css/style.css +++ b/static/src/css/style.css @@ -1,9 +1,9 @@ .td-ellipsis { - max-width: 120px; - overflow: hidden; + max-width: 120px; + overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .td-minwidth { - min-width: 200px; -} \ No newline at end of file + min-width: 200px; +} diff --git a/static/src/js/ur_month_timesheet.js b/static/src/js/ur_month_timesheet.js index 216d43b..10b2b70 100644 --- a/static/src/js/ur_month_timesheet.js +++ b/static/src/js/ur_month_timesheet.js @@ -1,40 +1,32 @@ - // © 2019 Le Filament (<http://www.le-filament.com>) - // License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). - -odoo.define('cgscop_timesheet.ur_month_timesheet', function (require) { - "use strict"; - - var core = require('web.core'); - var session = require('web.session'); - var AbstractAction = require('web.AbstractAction'); - var QWeb = core.qweb; - - var ScopMonthTimesheet = AbstractAction.extend({ - template: 'ScopMonthTimesheet', - - willStart: function() { - var deferred = new jQuery.Deferred(); - var self = this; - this.values = {}; - this._rpc({ - model: 'ur.month.timesheet', - method: 'get_month_values', - args: [], - }) - .then(function(results) { - self.values = results; - deferred.resolve(); - }); - return jQuery.when(this._super.apply(this, arguments),deferred); - }, - - start: function() { - }, - - }); - - core.action_registry.add('cgscop_timesheet.ur_month_timesheet', ScopMonthTimesheet); - - +// © 2019 Le Filament (<http://www.le-filament.com>) +// License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +odoo.define("cgscop_timesheet.ur_month_timesheet", function (require) { + "use strict"; + + var core = require("web.core"); + var AbstractAction = require("web.AbstractAction"); + + var ScopMonthTimesheet = AbstractAction.extend({ + template: "ScopMonthTimesheet", + + willStart: function () { + var deferred = new jQuery.Deferred(); + var self = this; + this.values = {}; + this._rpc({ + model: "ur.month.timesheet", + method: "get_month_values", + args: [], + }).then(function (results) { + self.values = results; + deferred.resolve(); + }); + return jQuery.when(this._super.apply(this, arguments), deferred); + }, + + // Start: function () {}, + }); + + core.action_registry.add("cgscop_timesheet.ur_month_timesheet", ScopMonthTimesheet); }); - diff --git a/static/src/xml/month_timesheet.xml b/static/src/xml/month_timesheet.xml index 32cce8d..de78bcc 100644 --- a/static/src/xml/month_timesheet.xml +++ b/static/src/xml/month_timesheet.xml @@ -1,34 +1,34 @@ -<?xml version="1.0" encoding="UTF-8"?> +<?xml version="1.0" encoding="UTF-8" ?> <!-- Copyright 2019 Le Filament (<https://www.le-filament.com>) License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). --> - <templates xml:space="preserve"> - <t t-name="ScopMonthTimesheet"> - <table class="table"> - <thead> - <tr> - <t t-foreach="widget.values.month" t-as="m"> - <t t-if="m.num_month == widget.values.today.month and m.year == widget.values.today.year"> - <th class="text-success"> - <t t-esc="m.month"/> <t t-esc="m.year"/> - </th> - </t> - <t t-else=""> - <th> - <t t-esc="m.month"/> <t t-esc="m.year"/> - </th> - </t> - </t> - </tr> - </thead> - <tbody> - <tr> - <t t-foreach="widget.values.values" t-as="v"> - <td><t t-esc="v"/> h</td> - </t> - </tr> - </tbody> - </table> - - </t> + <t t-name="ScopMonthTimesheet"> + <table class="table"> + <thead> + <tr> + <t t-foreach="widget.values.month" t-as="m"> + <t + t-if="m.num_month == widget.values.today.month and m.year == widget.values.today.year" + > + <th class="text-success"> + <t t-esc="m.month" /> <t t-esc="m.year" /> + </th> + </t> + <t t-else=""> + <th> + <t t-esc="m.month" /> <t t-esc="m.year" /> + </th> + </t> + </t> + </tr> + </thead> + <tbody> + <tr> + <t t-foreach="widget.values.values" t-as="v"> + <td><t t-esc="v" /> h</td> + </t> + </tr> + </tbody> + </table> + </t> </templates> diff --git a/views/assets.xml b/views/assets.xml index d74beef..a78a534 100644 --- a/views/assets.xml +++ b/views/assets.xml @@ -1,15 +1,24 @@ -<?xml version="1.0"?> +<?xml version="1.0" ?> <!-- Copyright 2019 Le Filament License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). --> - <odoo> - - <template id="cgscop_assets_backend" name="account assets" inherit_id="web.assets_backend"> + <template + id="cgscop_assets_backend" + name="account assets" + inherit_id="web.assets_backend" + > <xpath expr="." position="inside"> - <link rel="stylesheet" type="text/css" href="/cgscop_timesheet/static/src/css/style.css"/> + <link + rel="stylesheet" + type="text/css" + href="/cgscop_timesheet/static/src/css/style.css" + /> - <script type="text/javascript" src="/cgscop_timesheet/static/src/js/ur_month_timesheet.js"></script> - </xpath> + <script + type="text/javascript" + src="/cgscop_timesheet/static/src/js/ur_month_timesheet.js" + /> + </xpath> </template> -</odoo> \ No newline at end of file +</odoo> diff --git a/views/cgscop_timesheet_code.xml b/views/cgscop_timesheet_code.xml index 45cdb28..cae0710 100644 --- a/views/cgscop_timesheet_code.xml +++ b/views/cgscop_timesheet_code.xml @@ -1,7 +1,6 @@ -<?xml version="1.0"?> +<?xml version="1.0" ?> <!-- Copyright 2019 Le Filament License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). --> - <odoo> <data> <record id="view_cgscop_timesheet_code_tree" model="ir.ui.view"> @@ -9,7 +8,7 @@ <field name="model">cgscop.timesheet.code</field> <field name="arch" type="xml"> <tree editable='top'> - <field name="name" required="1"/> + <field name="name" required="1" /> <field name="domain" /> </tree> </field> @@ -22,12 +21,14 @@ <field name="help">Affiche et gère les Codes activité Nationaux</field> </record> - <menuitem id="menu_cgscop_timesheet_code" + <menuitem + id="menu_cgscop_timesheet_code" name="Codes Activité National" parent="hr_timesheet.hr_timesheet_menu_configuration" action="action_cgscop_timesheet_code_tree" sequence="40" - groups="cgscop_partner.group_cg_administrator"/> + groups="cgscop_partner.group_cg_administrator" + /> </data> -</odoo> \ No newline at end of file +</odoo> diff --git a/views/cgscop_timesheet_sheet.xml b/views/cgscop_timesheet_sheet.xml index a609757..6b0eb49 100644 --- a/views/cgscop_timesheet_sheet.xml +++ b/views/cgscop_timesheet_sheet.xml @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="utf-8" ?> <odoo> <!-- Vues @@ -11,11 +11,11 @@ <field name="arch" type="xml"> <tree string="Timesheet Reports" decoration-warning="state=='draft'"> <field name="name" /> - <field name="employee_id"/> - <field name="create_date"/> + <field name="employee_id" /> + <field name="create_date" /> <field name="validation_date" /> - <field name="total_hour" sum="Total"/> - <field name="state"/> + <field name="total_hour" sum="Total" /> + <field name="state" /> </tree> </field> </record> @@ -24,63 +24,115 @@ <record id="view_cgscop_timesheet_sheet_form" model="ir.ui.view"> <field name="name">cgscop.timesheet.sheet.form</field> <field name="model">cgscop.timesheet.sheet</field> - <field name="priority" eval="25"/> + <field name="priority" eval="25" /> <field name="arch" type="xml"> <form> - <field name="company_id" invisible="1"/> + <field name="company_id" invisible="1" /> <header> - <button name="action_submit_timesheet" states="draft" string="Soumettre" type="object" class="oe_highlight"/> - <button name="approve_timesheet_sheets" states="submit" string="Valider" type="object" groups="hr_timesheet.group_timesheet_manager" class="oe_highlight"/> - <button name="print_timesheet" string="Imprimer" type="object" /> - <button name="reset_timesheet_sheets" string="Remettre en brouillon" - type="object" attrs="{'invisible': [('state', '=', 'draft')]}" - groups="hr_timesheet.group_timesheet_manager"/> - <field name="state" widget="statusbar" statusbar_visible="draft,submit,valid"/> + <button + name="action_submit_timesheet" + states="draft" + string="Soumettre" + type="object" + class="oe_highlight" + /> + <button + name="approve_timesheet_sheets" + states="submit" + string="Valider" + type="object" + groups="hr_timesheet.group_timesheet_manager" + class="oe_highlight" + /> + <button + name="print_timesheet" + string="Imprimer" + type="object" + /> + <button + name="reset_timesheet_sheets" + string="Remettre en brouillon" + type="object" + attrs="{'invisible': [('state', '=', 'draft')]}" + groups="hr_timesheet.group_timesheet_manager" + /> + <field + name="state" + widget="statusbar" + statusbar_visible="draft,submit,valid" + /> </header> <sheet> <div class="oe_title"> - <label for="name" class="oe_edit_only"/> + <label for="name" class="oe_edit_only" /> <h1> - <field name="name" attrs="{'readonly': [('can_edit','=', False), ('state','!=', 'draft')]}"/> + <field + name="name" + attrs="{'readonly': [('can_edit','=', False), ('state','!=', 'draft')]}" + /> </h1> </div> <group> <group> - <field name="employee_id" groups="hr_timesheet.group_timesheet_manager" options="{'no_open': True, 'no_create': True}"/> - <field name="company_id" groups="base.group_multi_company" options="{'no_open': True, 'no_create': True}"/> + <field + name="employee_id" + groups="hr_timesheet.group_timesheet_manager" + options="{'no_open': True, 'no_create': True}" + /> + <field + name="company_id" + groups="base.group_multi_company" + options="{'no_open': True, 'no_create': True}" + /> </group> <group> - <field name="create_date" readonly="1"/> - <field name="submit_date" readonly="1"/> - <field name="validation_date" readonly="1"/> - <field name="total_hour" widget="float_time"/> + <field name="create_date" readonly="1" /> + <field name="submit_date" readonly="1" /> + <field name="validation_date" readonly="1" /> + <field name="total_hour" widget="float_time" /> </group> </group> - <field name="can_edit" invisible="1"/> - <field name="timesheet_line_ids" widget="many2many" - domain="[('sheet_id', '=', False), ('employee_id', '=', employee_id)]" - options="{'reload_on_button': True}" attrs="{'readonly': [('can_edit','=', False), ('state','!=', 'draft')]}" - context="{'form_view_ref' : 'hr_timesheet.timesheet_view_form_user'}"> + <field name="can_edit" invisible="1" /> + <field + name="timesheet_line_ids" + widget="many2many" + domain="[('sheet_id', '=', False), ('employee_id', '=', employee_id)]" + options="{'reload_on_button': True}" + attrs="{'readonly': [('can_edit','=', False), ('state','!=', 'draft')]}" + context="{'form_view_ref' : 'hr_timesheet.timesheet_view_form_user'}" + > <tree editable="top"> - <field name="company_id" invisible="1"/> - <field name="ur_id" invisible="1"/> - <field name="date"/> - <field name="employee_id" readonly="1"/> - <field name="state" invisible="1"/> - <field name="sheet_id" invisible="1"/> - <field name="project_id" options="{'no_open': True, 'no_create': True}" /> - <field name="partner_id" options="{'no_open': True, 'no_create': True}" /> - <field name="name"/> + <field name="company_id" invisible="1" /> + <field name="ur_id" invisible="1" /> + <field name="date" /> + <field name="employee_id" readonly="1" /> + <field name="state" invisible="1" /> + <field name="sheet_id" invisible="1" /> + <field + name="project_id" + options="{'no_open': True, 'no_create': True}" + /> + <field + name="partner_id" + options="{'no_open': True, 'no_create': True}" + /> + <field name="name" /> <field name="unit_amount" widget="float_time" /> - <field name="ur_financial_system_id" options="{'no_open': True, 'no_create': True}" /> - <field name="justificatifs" attrs="{'invisible': [('ur_id', '!=', %(cgscop_partner.riga_14243)d)]}"/> + <field + name="ur_financial_system_id" + options="{'no_open': True, 'no_create': True}" + /> + <field + name="justificatifs" + attrs="{'invisible': [('ur_id', '!=', %(cgscop_partner.riga_14243)d)]}" + /> </tree> </field> </sheet> <div class="oe_chatter"> - <field name="message_follower_ids" widget="mail_followers"/> - <field name="activity_ids" widget="mail_activity"/> - <field name="message_ids" widget="mail_thread"/> + <field name="message_follower_ids" widget="mail_followers" /> + <field name="activity_ids" widget="mail_activity" /> + <field name="message_ids" widget="mail_thread" /> </div> </form> </field> @@ -92,19 +144,51 @@ <field name="model">cgscop.timesheet.sheet</field> <field name="arch" type="xml"> <search string="Feuille de temps"> - <field name="name"/> - <field name="state"/> + <field name="name" /> + <field name="state" /> <separator /> - <field name="employee_id"/> - <filter string="Mes feuilles de temps" name="my_reports" domain="[('employee_id.user_id', '=', uid)]"/> - <filter string="Mon équipe" name="my_team_reports" domain="[('employee_id.parent_id.user_id', '=', uid)]" groups="hr_timesheet.group_timesheet_manager" help="Expenses of Your Team Member"/> + <field name="employee_id" /> + <filter + string="Mes feuilles de temps" + name="my_reports" + domain="[('employee_id.user_id', '=', uid)]" + /> + <filter + string="Mon équipe" + name="my_team_reports" + domain="[('employee_id.parent_id.user_id', '=', uid)]" + groups="hr_timesheet.group_timesheet_manager" + help="Expenses of Your Team Member" + /> <separator /> - <filter domain="[('state', '=', 'draft')]" string="Brouillon" name="draft" /> - <filter domain="[('state', '=', 'submit')]" string="Soumis" name="submitted"/> - <filter domain="[('state', '=', 'valid')]" string="Validé" name="valid"/> + <filter + domain="[('state', '=', 'draft')]" + string="Brouillon" + name="draft" + /> + <filter + domain="[('state', '=', 'submit')]" + string="Soumis" + name="submitted" + /> + <filter + domain="[('state', '=', 'valid')]" + string="Validé" + name="valid" + /> <group expand="0" string="Group By"> - <filter string="Employé" name="employee" domain="[]" context="{'group_by': 'employee_id'}"/> - <filter string="Statut" domain="[]" context="{'group_by': 'state'}" name="state"/> + <filter + string="Employé" + name="employee" + domain="[]" + context="{'group_by': 'employee_id'}" + /> + <filter + string="Statut" + domain="[]" + context="{'group_by': 'state'}" + name="state" + /> </group> </search> </field> @@ -119,16 +203,19 @@ <field name="name">Mes feuilles de temps</field> <field name="res_model">cgscop.timesheet.sheet</field> <field name="view_mode">tree,form</field> - <field name="search_view_id" ref="view_cgscop_timesheet_sheet_filter"/> + <field name="search_view_id" ref="view_cgscop_timesheet_sheet_filter" /> <field name="domain">[('employee_id.user_id', '=', uid)]</field> <field name="context">{'search_default_my_reports': 1}</field> </record> - <record id="action_cgscop_timesheet_sheet_to_approve" model="ir.actions.act_window"> + <record + id="action_cgscop_timesheet_sheet_to_approve" + model="ir.actions.act_window" + > <field name="name">Feuilles de temps à valider</field> <field name="res_model">cgscop.timesheet.sheet</field> <field name="view_mode">tree,form</field> - <field name="search_view_id" ref="view_cgscop_timesheet_sheet_filter"/> + <field name="search_view_id" ref="view_cgscop_timesheet_sheet_filter" /> <field name="domain">[]</field> <field name="context">{'search_default_submitted': 1}</field> </record> @@ -137,7 +224,7 @@ <field name="name">Toutes les feuilles de temps</field> <field name="res_model">cgscop.timesheet.sheet</field> <field name="view_mode">tree,form</field> - <field name="search_view_id" ref="view_cgscop_timesheet_sheet_filter"/> + <field name="search_view_id" ref="view_cgscop_timesheet_sheet_filter" /> <field name="domain">[('ur_id', '=', ur_id)]</field> <field name="context">{}</field> </record> @@ -148,29 +235,37 @@ Menus --> - <menuitem id="timesheet_sheet_menu" - parent="hr_timesheet.timesheet_menu_root" - name="Feuilles de temps" - sequence="25"/> - - <menuitem id="menu_hr_timesheet_my_timesheet" - name="Mes feuilles de temps" - sequence="1" - action="cgscop_timesheet.action_cgscop_timesheet_sheet_my_all" - parent="cgscop_timesheet.timesheet_sheet_menu"/> - - <menuitem id="menu_hr_timesheet_to_approve" - name="À valider" - sequence="1" - action="cgscop_timesheet.action_cgscop_timesheet_sheet_to_approve" - parent="cgscop_timesheet.timesheet_sheet_menu" - groups="hr_timesheet.group_timesheet_manager"/> - - <menuitem id="menu_hr_timesheet_all" - name="Toutes les feuilles de temps" - sequence="1" - action="cgscop_timesheet.action_cgscop_timesheet_sheet_all" - parent="cgscop_timesheet.timesheet_sheet_menu" - groups="hr_timesheet.group_timesheet_manager"/> + <menuitem + id="timesheet_sheet_menu" + parent="hr_timesheet.timesheet_menu_root" + name="Feuilles de temps" + sequence="25" + /> + + <menuitem + id="menu_hr_timesheet_my_timesheet" + name="Mes feuilles de temps" + sequence="1" + action="cgscop_timesheet.action_cgscop_timesheet_sheet_my_all" + parent="cgscop_timesheet.timesheet_sheet_menu" + /> + + <menuitem + id="menu_hr_timesheet_to_approve" + name="À valider" + sequence="1" + action="cgscop_timesheet.action_cgscop_timesheet_sheet_to_approve" + parent="cgscop_timesheet.timesheet_sheet_menu" + groups="hr_timesheet.group_timesheet_manager" + /> + + <menuitem + id="menu_hr_timesheet_all" + name="Toutes les feuilles de temps" + sequence="1" + action="cgscop_timesheet.action_cgscop_timesheet_sheet_all" + parent="cgscop_timesheet.timesheet_sheet_menu" + groups="hr_timesheet.group_timesheet_manager" + /> </odoo> diff --git a/views/hr_timesheet.xml b/views/hr_timesheet.xml index 0c42c55..c30c847 100644 --- a/views/hr_timesheet.xml +++ b/views/hr_timesheet.xml @@ -1,7 +1,6 @@ -<?xml version="1.0"?> +<?xml version="1.0" ?> <!-- Copyright 2019 Le Filament License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). --> - <odoo> <data> @@ -11,25 +10,52 @@ <record id="cgscop_hr_timesheet_line_search" model="ir.ui.view"> <field name="name">cgscop.hr.timesheet.line.search</field> <field name="model">account.analytic.line</field> - <field name="inherit_id" ref="hr_timesheet.hr_timesheet_line_search"/> + <field name="inherit_id" ref="hr_timesheet.hr_timesheet_line_search" /> + <field name="priority">100</field> <field name="arch" type="xml"> - <field name="task_id" position="replace"/> + <field name="task_id" position="replace" /> <field name="project_id" position="attributes"> <attribute name="string">Code activité UR</attribute> </field> <field name="project_id" position="after"> - <field name="partner_id" string="Contact"/> + <field name="partner_id" string="Contact" /> </field> <xpath expr="//filter[@name='mine']" position="after"> - <separator></separator> - <filter domain="[('sheet_id', '=', False)]" string="A rapporter" name="no_report"/> - <filter domain="[('state', '=', 'draft')]" string="En brouillon" name="draft"/> - <filter domain="[('state', '=', 'submit')]" string="Soumis" name="submitted"/> - <filter domain="[('state', '=', 'valid')]" string="Validé" name="validated"/> + <separator /> + <filter + domain="[('sheet_id', '=', False)]" + string="A rapporter" + name="no_report" + /> + <filter + domain="[('state', '=', 'draft')]" + string="En brouillon" + name="draft" + /> + <filter + domain="[('state', '=', 'submit')]" + string="Soumis" + name="submitted" + /> + <filter + domain="[('state', '=', 'valid')]" + string="Validé" + name="validated" + /> </xpath> <xpath expr="//filter[@name='groupby_task']" position="replace"> - <filter string="Contact" name="groupby_partner" domain="[]" context="{'group_by':'partner_id'}"/> - <filter string="Dispositif financier" name="groupby_financial_system" domain="[]" context="{'group_by':'ur_financial_system_id'}"/> + <filter + string="Contact" + name="groupby_partner" + domain="[]" + context="{'group_by':'partner_id'}" + /> + <filter + string="Dispositif financier" + name="groupby_financial_system" + domain="[]" + context="{'group_by':'ur_financial_system_id'}" + /> </xpath> <xpath expr="//filter[@name='groupby_date']" position="attributes"> <attribute name="context">{'group_by':'date:day'}</attribute> @@ -44,32 +70,67 @@ <record id="view_cgscop_hr_timesheet_line_form" model="ir.ui.view"> <field name="name">account.analytic.line.timesheet.form.cgscop</field> <field name="model">account.analytic.line</field> - <field name="inherit_id" ref="hr_timesheet.hr_timesheet_line_form"/> + <field name="inherit_id" ref="hr_timesheet.hr_timesheet_line_form" /> <field name="arch" type="xml"> <xpath expr="//form/sheet/group" position="attributes"> <attribute name="invisible">1</attribute> </xpath> <xpath expr="//form/sheet/group" position="after"> <group string="Activité"> - <field name="ur_id" options="{'no_open': True, 'no_create': True}" groups="cgscop_partner.group_cg_administrator"/> - <field name="employee_id" required="True" readonly="1"/> - <field name="employee_id" options="{'no_open': True, 'no_create': True}" required="True" groups="hr_timesheet.group_timesheet_manager"/> - <field name="date"/> - <field name="project_id" required="True" options="{'no_open': True, 'no_create': True}" string="Code activité UR" /> - <field name="partner_id" domain="[('is_company', '=', True), ('ur_id', '=', ur_id)]" required="True" options="{'no_open': True, 'no_create': True}" string="Contact" /> - <field name="name"/> - <field name="unit_amount" widget="float_time"/> + <field + name="ur_id" + options="{'no_open': True, 'no_create': True}" + groups="cgscop_partner.group_cg_administrator" + /> + <field name="employee_id" required="True" readonly="1" /> + <field + name="employee_id" + options="{'no_open': True, 'no_create': True}" + required="True" + groups="hr_timesheet.group_timesheet_manager" + /> + <field name="date" /> + <field + name="project_id" + required="True" + options="{'no_open': True, 'no_create': True}" + string="Code activité UR" + /> + <field + name="partner_id" + domain="[('is_company', '=', True), ('ur_id', '=', ur_id)]" + required="True" + options="{'no_open': True, 'no_create': True}" + string="Contact" + /> + <field name="name" /> + <field name="unit_amount" widget="float_time" /> </group> <group string="Divers"> - <field name="is_present" widget="boolean_toggle"/> + <field name="is_present" widget="boolean_toggle" /> </group> - <group name="DF" string="Dispositif financier" attrs="{'invisible': ['&',('ur_regional_convention_nb', '=', 0),('ur_financial_system_nb', '=', 0)]}"> - <field name="ur_financial_system_id" options="{'no_open': True, 'no_create': True}" attrs="{'required':[('ur_financial_system_nb', '>', 0)], 'invisible':[('ur_financial_system_nb', '=', 0)]}"/> - <field name="ur_regional_convention_id" options="{'no_open': True, 'no_create': True}" attrs="{'required':[('ur_regional_convention_nb', '>', 0)], 'invisible':[('ur_regional_convention_nb', '=', 0)]}"/> - <field name="justificatifs" attrs="{'invisible': [('ur_id', '!=', %(cgscop_partner.riga_14243)d)]}"/> - <field name="ur_regional_convention_nb" invisible="1"/> - <field name="ur_financial_system_nb" invisible="1"/> - <field name="user_id" invisible="1"/> + <group + name="DF" + string="Dispositif financier" + attrs="{'invisible': ['&',('ur_regional_convention_nb', '=', 0),('ur_financial_system_nb', '=', 0)]}" + > + <field + name="ur_financial_system_id" + options="{'no_open': True, 'no_create': True}" + attrs="{'required':[('ur_financial_system_nb', '>', 0)], 'invisible':[('ur_financial_system_nb', '=', 0)]}" + /> + <field + name="ur_regional_convention_id" + options="{'no_open': True, 'no_create': True}" + attrs="{'required':[('ur_regional_convention_nb', '>', 0)], 'invisible':[('ur_regional_convention_nb', '=', 0)]}" + /> + <field + name="justificatifs" + attrs="{'invisible': [('ur_id', '!=', %(cgscop_partner.riga_14243)d)]}" + /> + <field name="ur_regional_convention_nb" invisible="1" /> + <field name="ur_financial_system_nb" invisible="1" /> + <field name="user_id" invisible="1" /> </group> </xpath> </field> @@ -80,30 +141,65 @@ <record id="view_cgscop_hr_timesheet_line_form2" model="ir.ui.view"> <field name="name">account.analytic.line.timesheet.form.cgscop</field> <field name="model">account.analytic.line</field> - <field name="inherit_id" ref="analytic.view_account_analytic_line_form"/> + <field name="inherit_id" ref="analytic.view_account_analytic_line_form" /> <field name="arch" type="xml"> <xpath expr="//sheet/group" position="attributes"> <attribute name="groups">base.group_system</attribute> </xpath> <xpath expr="//sheet/group" position="before"> <group string="Activité"> - <field name="ur_id" options="{'no_open': True, 'no_create': True}" groups="cgscop_partner.group_cg_administrator"/> - <field name="employee_id" options="{'no_open': True, 'no_create': True}" required="True" groups="hr_timesheet.group_timesheet_manager"/> - <field name="date"/> - <field name="project_id" required="True" options="{'no_open': True, 'no_create': True}" string="Code activité UR" /> - <field name="partner_id" domain="[('is_company', '=', True), ('ur_id', '=', ur_id)]" required="True" options="{'no_open': True, 'no_create': True}" string="Contact" /> - <field name="name"/> - <field name="unit_amount" widget="float_time"/> + <field + name="ur_id" + options="{'no_open': True, 'no_create': True}" + groups="cgscop_partner.group_cg_administrator" + /> + <field + name="employee_id" + options="{'no_open': True, 'no_create': True}" + required="True" + groups="hr_timesheet.group_timesheet_manager" + /> + <field name="date" /> + <field + name="project_id" + required="True" + options="{'no_open': True, 'no_create': True}" + string="Code activité UR" + /> + <field + name="partner_id" + domain="[('is_company', '=', True), ('ur_id', '=', ur_id)]" + required="True" + options="{'no_open': True, 'no_create': True}" + string="Contact" + /> + <field name="name" /> + <field name="unit_amount" widget="float_time" /> </group> <group string="Divers"> - <field name="is_present" widget="boolean_toggle"/> + <field name="is_present" widget="boolean_toggle" /> </group> - <group name="DF" string="Dispositif financier" attrs="{'invisible': ['&',('ur_regional_convention_nb', '=', 0),('ur_financial_system_nb', '=', 0)]}"> - <field name="ur_financial_system_id" options="{'no_open': True, 'no_create': True}" attrs="{'required':[('ur_financial_system_nb', '>', 0)], 'invisible':[('ur_financial_system_nb', '=', 0)]}"/> - <field name="ur_regional_convention_id" options="{'no_open': True, 'no_create': True}" attrs="{'required':[('ur_regional_convention_nb', '>', 0)], 'invisible':[('ur_regional_convention_nb', '=', 0)]}"/> - <field name="justificatifs" attrs="{'invisible': [('ur_id', '!=', %(cgscop_partner.riga_14243)d)]}"/> - <field name="ur_regional_convention_nb" invisible="1"/> - <field name="ur_financial_system_nb" invisible="1"/> + <group + name="DF" + string="Dispositif financier" + attrs="{'invisible': ['&',('ur_regional_convention_nb', '=', 0),('ur_financial_system_nb', '=', 0)]}" + > + <field + name="ur_financial_system_id" + options="{'no_open': True, 'no_create': True}" + attrs="{'required':[('ur_financial_system_nb', '>', 0)], 'invisible':[('ur_financial_system_nb', '=', 0)]}" + /> + <field + name="ur_regional_convention_id" + options="{'no_open': True, 'no_create': True}" + attrs="{'required':[('ur_regional_convention_nb', '>', 0)], 'invisible':[('ur_regional_convention_nb', '=', 0)]}" + /> + <field + name="justificatifs" + attrs="{'invisible': [('ur_id', '!=', %(cgscop_partner.riga_14243)d)]}" + /> + <field name="ur_regional_convention_nb" invisible="1" /> + <field name="ur_financial_system_nb" invisible="1" /> </group> </xpath> </field> @@ -114,20 +210,39 @@ <record id="view_cgscop_hr_timesheet_line_tree" model="ir.ui.view"> <field name="name">account.analytic.line.timesheet.cgscop</field> <field name="model">account.analytic.line</field> - <field name="inherit_id" ref="hr_timesheet.hr_timesheet_line_tree"/> + <field name="inherit_id" ref="hr_timesheet.hr_timesheet_line_tree" /> + <field name="priority">100</field> <field name="arch" type="xml"> - <field name="name" position="replace"/> - <field name="date" position="attributes" > - <attribute name="attrs">{'readonly': [('state', 'in', ('submit', 'valid'))]}</attribute> + <field name="name" position="replace" /> + <field name="date" position="attributes"> + <attribute + name="attrs" + >{'readonly': [('state', 'in', ('submit', 'valid'))]}</attribute> </field> - <field name="project_id" position="attributes" > - <attribute name="options">{'no_open': True, 'no_create': True}</attribute> + <field name="project_id" position="attributes"> + <attribute + name="options" + >{'no_open': True, 'no_create': True}</attribute> <attribute name="string">Code activité UR</attribute> - <attribute name="attrs">{'readonly': [('state', 'in', ('submit', 'valid'))]}</attribute> + <attribute + name="attrs" + >{'readonly': [('state', 'in', ('submit', 'valid'))]}</attribute> </field> - <field name="project_id" position="after" > - <field name="partner_id" domain="[('is_company', '=', True), ('ur_id', '=', ur_id)]" required="True" class="td-ellipsis" options="{'no_open': True, 'no_create': True}" string="Contact" attrs="{'readonly': [('state', 'in', ('submit', 'valid'))]}"/> - <field name="name" class="td-minwidth" attrs="{'readonly': [('state', 'in', ('submit', 'valid'))]}"/> + <field name="project_id" position="after"> + <field + name="partner_id" + domain="[('is_company', '=', True), ('ur_id', '=', ur_id)]" + required="True" + class="td-ellipsis" + options="{'no_open': True, 'no_create': True}" + string="Contact" + attrs="{'readonly': [('state', 'in', ('submit', 'valid'))]}" + /> + <field + name="name" + class="td-minwidth" + attrs="{'readonly': [('state', 'in', ('submit', 'valid'))]}" + /> <field name="is_present" widget="boolean_toggle" /> </field> <field name="task_id" position="attributes"> @@ -135,16 +250,33 @@ </field> <field name="unit_amount" position="attributes"> <attribute name="widget">float_time</attribute> - <attribute name="attrs">{'readonly': [('state', 'in', ('submit', 'valid'))]}</attribute> + <attribute + name="attrs" + >{'readonly': [('state', 'in', ('submit', 'valid'))]}</attribute> </field> <field name="unit_amount" position="after"> - <field name="ur_regional_convention_nb" invisible="1"/> - <field name="ur_financial_system_nb" invisible="1"/> - <field name="ur_financial_system_id" options="{'no_open': True, 'no_create': True}" attrs="{'required': [('ur_financial_system_nb', '>', 0)], 'invisible': [('ur_financial_system_nb', '<', 1)], 'readonly': [('state', 'in', ('submit', 'valid'))]}"/> - <field name="ur_regional_convention_id" options="{'no_open': True, 'no_create': True}" attrs="{'required':[('ur_regional_convention_nb', '>', 0)], 'invisible':[('ur_regional_convention_nb', '<', 1)], 'readonly': [('state', 'in', ('submit', 'valid'))]}"/> - <field name="justificatifs" attrs="{'invisible': [('ur_id', '!=', %(cgscop_partner.riga_14243)d)]}"/> + <field name="ur_regional_convention_nb" invisible="1" /> + <field name="ur_financial_system_nb" invisible="1" /> + <field + name="ur_financial_system_id" + options="{'no_open': True, 'no_create': True}" + attrs="{'required': [('ur_financial_system_nb', '>', 0)], 'invisible': [('ur_financial_system_nb', '<', 1)], 'readonly': [('state', 'in', ('submit', 'valid'))]}" + /> + <field + name="ur_regional_convention_id" + options="{'no_open': True, 'no_create': True}" + attrs="{'required':[('ur_regional_convention_nb', '>', 0)], 'invisible':[('ur_regional_convention_nb', '<', 1)], 'readonly': [('state', 'in', ('submit', 'valid'))]}" + /> + <field + name="justificatifs" + attrs="{'invisible': [('ur_id', '!=', %(cgscop_partner.riga_14243)d)]}" + /> <field name="state" /> - <field name="ur_id" attrs="{'readonly': [('state', 'in', ('submit', 'valid'))]}" groups="cgscop_partner.group_cg_administrator"/> + <field + name="ur_id" + attrs="{'readonly': [('state', 'in', ('submit', 'valid'))]}" + groups="cgscop_partner.group_cg_administrator" + /> </field> </field> </record> @@ -156,25 +288,28 @@ <field name="arch" type="xml"> <pivot string="Rapport"> <field name="project_id" type="row" string="Code activité UR" /> - <field name="partner_id" type="row" string="Contact"/> - <field name="date" interval="month" type="col"/> - <field name="unit_amount" type="measure" widget="timesheet_uom"/> + <field name="partner_id" type="row" string="Contact" /> + <field name="date" interval="month" type="col" /> + <field name="unit_amount" type="measure" widget="timesheet_uom" /> </pivot> </field> </record> <!-- Calendar View Timesheet CG --> - <record model="ir.ui.view" id="view_cgscop_hr_timesheet_line_calendar" > + <record model="ir.ui.view" id="view_cgscop_hr_timesheet_line_calendar"> <field name="name">account.analytic.line.timesheet.cgscop.calendar</field> <field name="model">account.analytic.line</field> <field name="arch" type="xml"> - <calendar string="Ligne de temps" - date_start="date" mode="month" - quick_add="False" - color="project_id" - form_view_id="cgscop_timesheet.view_cgscop_hr_timesheet_line_form"> - <field name="calendar_l1"/> - <field name="calendar_l2"/> + <calendar + string="Ligne de temps" + date_start="date" + mode="month" + quick_add="False" + color="project_id" + form_view_id="cgscop_timesheet.view_cgscop_hr_timesheet_line_form" + > + <field name="calendar_l1" /> + <field name="calendar_l2" /> </calendar> </field> </record> @@ -186,29 +321,37 @@ <!-- Hérite l'action de la fenetre dans hr_timesheet --> <record id="hr_timesheet.act_hr_timesheet_line" model="ir.actions.act_window"> <field name="view_mode">calendar,tree,form,pivot</field> - <field name="context">{'search_default_no_report': 1, 'search_default_groupby_date': 1}</field> - <field name="view_ids" eval="[(5, 0, 0), + <field + name="context" + >{'search_default_no_report': 1, 'search_default_groupby_date': 1}</field> + <field + name="view_ids" + eval="[(5, 0, 0), (0, 0, {'view_mode': 'tree', 'sequence': 5, 'view_id': ref('cgscop_timesheet.view_cgscop_hr_timesheet_line_tree')}), (0, 0, {'view_mode': 'calendar', 'sequence': 10, 'view_id': ref('cgscop_timesheet.view_cgscop_hr_timesheet_line_calendar')}), (0, 0, {'view_mode': 'pivot', 'sequence': 15, 'view_id': ref('hr_timesheet.view_hr_timesheet_line_pivot')}), - (0, 0, {'view_mode': 'form', 'sequence': 20, 'view_id': ref('cgscop_timesheet.view_cgscop_hr_timesheet_line_form')})]"/> + (0, 0, {'view_mode': 'form', 'sequence': 20, 'view_id': ref('cgscop_timesheet.view_cgscop_hr_timesheet_line_form')})]" + /> </record> <!-- Hérite l'action de la fenetre dans hr_timesheet --> <record id="hr_timesheet.timesheet_action_all" model="ir.actions.act_window"> <field name="res_model">account.analytic.line</field> - <field name="search_view_id" ref="cgscop_hr_timesheet_line_search"/> + <field name="search_view_id" ref="cgscop_hr_timesheet_line_search" /> <field name="domain">[('project_id', '!=', False)]</field> <field name="context">{ 'search_default_week':1, 'search_default_groupby_date':1, 'search_default_groupby_employee':1, 'search_default_groupby_project':1, - }</field> + }</field> <field name="view_mode">tree,form</field> - <field name="view_ids" eval="[(5, 0, 0), + <field + name="view_ids" + eval="[(5, 0, 0), (0, 0, {'view_mode': 'tree', 'sequence': 5, 'view_id': ref('cgscop_timesheet.view_cgscop_hr_timesheet_line_tree')}), - (0, 0, {'view_mode': 'form', 'sequence': 20, 'view_id': ref('cgscop_timesheet.view_cgscop_hr_timesheet_line_form')})]"/> + (0, 0, {'view_mode': 'form', 'sequence': 20, 'view_id': ref('cgscop_timesheet.view_cgscop_hr_timesheet_line_form')})]" + /> </record> <!-- Report View per Contact --> @@ -217,18 +360,24 @@ <field name="res_model">account.analytic.line</field> <field name="domain">[('project_id', '!=', False)]</field> <field name="context">{'search_default_groupby_partner':1,}</field> - <field name="search_view_id" ref="cgscop_timesheet.cgscop_hr_timesheet_line_search"/> - <field name="view_ids" eval="[(5, 0, 0), + <field + name="search_view_id" + ref="cgscop_timesheet.cgscop_hr_timesheet_line_search" + /> + <field + name="view_ids" + eval="[(5, 0, 0), (0, 0, {'view_mode': 'pivot', 'sequence': 5, 'view_id': ref('hr_timesheet.view_hr_timesheet_line_pivot')}), (0, 0, {'view_mode': 'tree', 'sequence': 10, 'view_id': ref('cgscop_timesheet.view_cgscop_hr_timesheet_line_tree')}), - (0, 0, {'view_mode': 'form', 'sequence': 15, 'view_id': ref('cgscop_timesheet.view_cgscop_hr_timesheet_line_form')})]"/> + (0, 0, {'view_mode': 'form', 'sequence': 15, 'view_id': ref('cgscop_timesheet.view_cgscop_hr_timesheet_line_form')})]" + /> </record> <record id="hr_timesheet_submit_action_server" model="ir.actions.server"> <field name="name">Insérer dans une feuille de temps</field> <field name="type">ir.actions.server</field> - <field name="model_id" ref="model_account_analytic_line"/> - <field name="binding_model_id" ref="model_account_analytic_line"/> + <field name="model_id" ref="model_account_analytic_line" /> + <field name="binding_model_id" ref="model_account_analytic_line" /> <field name="state">code</field> <field name="code"> if records: @@ -243,24 +392,32 @@ if records: <!-- affichage du menu employé uniquement pour le groupe Fonctionnaire --> <record model="ir.ui.menu" id="hr.menu_hr_root"> - <field name="groups_id" eval="[(6,0,[ref('hr.group_hr_user')])]"/> + <field name="groups_id" eval="[(6,0,[ref('hr.group_hr_user')])]" /> </record> <!-- ajoute des droits sur le menu Configuration --> <record model="ir.ui.menu" id="hr_timesheet.hr_timesheet_menu_configuration"> - <field name="groups_id" eval="[(6,0, [ref('hr_timesheet.group_timesheet_manager'), ref('cgscop_partner.group_cg_administrator'), ref('cgscop_partner.group_ur_list_modif')])]"/> + <field + name="groups_id" + eval="[(6,0, [ref('hr_timesheet.group_timesheet_manager'), ref('cgscop_partner.group_cg_administrator'), ref('cgscop_partner.group_ur_list_modif')])]" + /> </record> <!-- ajoute des droits pour gestionnaire uniquement sur le menu Toutes les lignes de temps --> <record model="ir.ui.menu" id="hr_timesheet.timesheet_menu_activity_all"> - <field name="groups_id" eval="[(6,0, [ref('hr_timesheet.group_timesheet_manager'), ref('cgscop_partner.group_cg_administrator')])]"/> + <field + name="groups_id" + eval="[(6,0, [ref('hr_timesheet.group_timesheet_manager'), ref('cgscop_partner.group_cg_administrator')])]" + /> </record> - <menuitem id="timesheet_menu_report_timesheet_by_contact" + <menuitem + id="timesheet_menu_report_timesheet_by_contact" parent="hr_timesheet.menu_timesheets_reports_timesheet" action="timesheet_action_report_by_contact" name="Par Contact" - sequence="25"/> + sequence="25" + /> </data> -</odoo> \ No newline at end of file +</odoo> diff --git a/views/hr_timesheet_cgscop.xml b/views/hr_timesheet_cgscop.xml index e2eeceb..0e4dd24 100644 --- a/views/hr_timesheet_cgscop.xml +++ b/views/hr_timesheet_cgscop.xml @@ -1,7 +1,6 @@ -<?xml version="1.0"?> +<?xml version="1.0" ?> <!-- Copyright 2019 Le Filament License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). --> - <odoo> <data> @@ -12,50 +11,107 @@ <field name="arch" type="xml"> <form string="Project"> <sheet string="Project"> - <div class="oe_button_box" name="button_box" groups="base.group_user"> - <button class="oe_stat_button" name="%(hr_timesheet.act_hr_timesheet_line_by_project)d" type="action" icon="fa-calendar" string="Timesheets" attrs="{'invisible': [('allow_timesheets', '=', False)]}" groups="hr_timesheet.group_hr_timesheet_user"/> - <button name="toggle_active" type="object" - confirm="(Un)archiving a project automatically (un)archives its tasks. Do you want to proceed?" - class="oe_stat_button" icon="fa-archive"> - <field name="active" widget="boolean_button" - options='{"terminology": "archive"}'/> + <div + class="oe_button_box" + name="button_box" + groups="base.group_user" + > + <button + class="oe_stat_button" + name="%(hr_timesheet.act_hr_timesheet_line_by_project)d" + type="action" + icon="fa-calendar" + string="Timesheets" + attrs="{'invisible': [('allow_timesheets', '=', False)]}" + groups="hr_timesheet.group_hr_timesheet_user" + /> + <button + name="toggle_active" + type="object" + confirm="(Un)archiving a project automatically (un)archives its tasks. Do you want to proceed?" + class="oe_stat_button" + icon="fa-archive" + > + <field + name="active" + widget="boolean_button" + options='{"terminology": "archive"}' + /> </button> </div> <div class="oe_title"> <h1> - <field name="name" placeholder="Code activité UR"/> + <field name="name" placeholder="Code activité UR" /> </h1> </div> <group> <group> - <field name="partner_id" string="Contact par défaut" domain="[('is_company', '=', True), ('ur_id', '=', ur_id)]" help="Contact par défaut auquel est rattaché cette activité. Ce contact sera sélectionné automatiquement dans les feuilles de temps" options="{'no_open': True, 'no_create': True}"/> - <field name="ur_id" string="Union Régionale" options="{'no_open': True, 'no_create': True}" required="1" /> - <field name="company_id" groups="base.group_multi_company" options="{'no_open': True, 'no_create': True}" string="Société" invisible="1" /> + <field + name="partner_id" + string="Contact par défaut" + domain="[('is_company', '=', True), ('ur_id', '=', ur_id)]" + help="Contact par défaut auquel est rattaché cette activité. Ce contact sera sélectionné automatiquement dans les feuilles de temps" + options="{'no_open': True, 'no_create': True}" + /> + <field + name="ur_id" + string="Union Régionale" + options="{'no_open': True, 'no_create': True}" + required="1" + /> + <field + name="company_id" + groups="base.group_multi_company" + options="{'no_open': True, 'no_create': True}" + string="Société" + invisible="1" + /> </group> <group> - <field name="cgscop_timesheet_code_id" required="1" placeholder="Code activité National" options="{'no_open': True, 'no_create': True}"/> - <field name="analytic_account_id" invisible="1"/> - <field name="privacy_visibility" invisible="1"/> - <field name="allow_timesheets" invisible="1"/> + <field + name="cgscop_timesheet_code_id" + required="1" + placeholder="Code activité National" + options="{'no_open': True, 'no_create': True}" + /> + <field name="analytic_account_id" invisible="1" /> + <field name="privacy_visibility" invisible="1" /> + <field name="allow_timesheets" invisible="1" /> </group> </group> - <group string="Configuration" name="project_config" groups="base.group_no_one"> + <group + string="Configuration" + name="project_config" + groups="base.group_no_one" + > <group> - <field name="user_id" string="Project Manager" - attrs="{'readonly':[('active','=',False)]}" options="{'no_open': True, 'no_create': True}"/> - <field name="sequence" groups="base.group_no_one"/> + <field + name="user_id" + string="Project Manager" + attrs="{'readonly':[('active','=',False)]}" + options="{'no_open': True, 'no_create': True}" + /> + <field name="sequence" groups="base.group_no_one" /> </group> - <group > + <group> <field name="allow_timesheets" /> - <field name="privacy_visibility" widget="radio"/> - <field name="resource_calendar_id" groups="base.group_no_one"/> + <field name="privacy_visibility" widget="radio" /> + <field + name="resource_calendar_id" + groups="base.group_no_one" + /> </group> </group> </sheet> <div class="oe_chatter"> - <field name="message_follower_ids" widget="mail_followers" help="Follow this project to automatically track the events associated to tasks and issues of this project." groups="base.group_user"/> + <field + name="message_follower_ids" + widget="mail_followers" + help="Follow this project to automatically track the events associated to tasks and issues of this project." + groups="base.group_user" + /> </div> </form> </field> @@ -67,14 +123,25 @@ <field name="model">project.project</field> <field name="arch" type="xml"> <search string="Search Project"> - <field name="name" string="Code activité UR"/> - <field name="cgscop_timesheet_code_id" string="Code activité National"/> - <field name="partner_id" string="Contact par défaut"/> + <field name="name" string="Code activité UR" /> + <field + name="cgscop_timesheet_code_id" + string="Code activité National" + /> + <field name="partner_id" string="Contact par défaut" /> - <filter string="Archived" name="inactive" domain="[('active','=',False)]"/> + <filter + string="Archived" + name="inactive" + domain="[('active','=',False)]" + /> <group expand="0" string="Group By"> - <filter string="Contact par défaut" name="Partner" context="{'group_by': 'partner_id'}"/> + <filter + string="Contact par défaut" + name="Partner" + context="{'group_by': 'partner_id'}" + /> </group> </search> </field> @@ -86,11 +153,18 @@ <field name="model">project.project</field> <field name="arch" type="xml"> <tree decoration-muted="active == False" string="Projects"> - <field name="sequence" widget="handle"/> - <field name="active" invisible="1"/> + <field name="sequence" widget="handle" /> + <field name="active" invisible="1" /> <field name="name" /> - <field name="cgscop_timesheet_code_id" options="{'no_open': True, 'no_create': True}"/> - <field name="partner_id" string="Contact" options="{'no_open': True, 'no_create': True}"/> + <field + name="cgscop_timesheet_code_id" + options="{'no_open': True, 'no_create': True}" + /> + <field + name="partner_id" + string="Contact" + options="{'no_open': True, 'no_create': True}" + /> </tree> </field> </record> @@ -101,23 +175,38 @@ <field name="model">project.project</field> <field name="arch" type="xml"> <kanban class="o_kanban_mobile"> - <field name="user_id" string="Project Manager"/> + <field name="user_id" string="Project Manager" /> <templates> <t t-name="kanban-box"> - <div t-attf-class="oe_kanban_content oe_kanban_global_click o_kanban_get_form"> + <div + t-attf-class="oe_kanban_content oe_kanban_global_click o_kanban_get_form" + > <div class="row"> <div class="col-12"> - <strong><field name="name" string="Code activité UR"/></strong> - <field name="cgscop_timesheet_code_id" string="Code activité CG"/> + <strong><field + name="name" + string="Code activité UR" + /></strong> + <field + name="cgscop_timesheet_code_id" + string="Code activité CG" + /> </div> </div> <div class="row"> <div class="col-8"> - <field name="partner_id" string="Contact"/> + <field name="partner_id" string="Contact" /> </div> <div class="col-4"> <div class="oe_kanban_bottom_right"> - <img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" t-att-alt="record.user_id.value" width="24" height="24" class="oe_kanban_avatar float-right"/> + <img + t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" + t-att-title="record.user_id.value" + t-att-alt="record.user_id.value" + width="24" + height="24" + class="oe_kanban_avatar float-right" + /> </div> </div> </div> @@ -133,11 +222,14 @@ <field name="res_model">project.project</field> <field name="domain">[]</field> <field name="view_mode">tree,kanban,form</field> - <field name="view_ids" eval="[(5, 0, 0), + <field + name="view_ids" + eval="[(5, 0, 0), (0, 0, {'view_mode': 'tree', 'view_id': ref('view_cgscop_project_timesheet_tree')}), (0, 0, {'view_mode': 'kanban', 'view_id': ref('view_cgscop_project_timesheet_kanban')}), - (0, 0, {'view_mode': 'form', 'view_id': ref('view_cgscop_project_timesheet_form')})]"/> - <field name="search_view_id" ref="view_cgscop_project_timesheet_filter"/> + (0, 0, {'view_mode': 'form', 'view_id': ref('view_cgscop_project_timesheet_form')})]" + /> + <field name="search_view_id" ref="view_cgscop_project_timesheet_filter" /> <field name="context">{ 'default_privacy_visibility': 'employees', 'default_allow_timesheets': True, @@ -150,7 +242,8 @@ action="act_cgscop_project_timesheet" id="menu_action_project_lines_tree" sequence="35" - groups="cgscop_partner.group_ur_list_modif,cgscop_partner.group_cg_administrator"/> + groups="cgscop_partner.group_ur_list_modif,cgscop_partner.group_cg_administrator" + /> </data> </odoo> diff --git a/views/res_company.xml b/views/res_company.xml index 6e353fe..ae025e9 100644 --- a/views/res_company.xml +++ b/views/res_company.xml @@ -1,20 +1,22 @@ -<?xml version="1.0"?> +<?xml version="1.0" ?> <!-- Copyright 2019 Le Filament License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). --> - <odoo> <data> <record id="company_form_with_ur" model="ir.ui.view"> <field name="name">scop.res.company.timesheet.form</field> <field name="model">res.company</field> - <field name="inherit_id" ref="base.view_company_form"/> + <field name="inherit_id" ref="base.view_company_form" /> <field name="arch" type="xml"> <xpath expr="//notebook/page" position="after"> <page name="company_timesheet" string="Feuilles de temps"> <group> <group string="Condiguration Imputations"> - <field name="day_working" widget="boolean_toggle"/> - <field name="day_duration" attrs="{'invisible': [('day_working', '=', True)]}"/> + <field name="day_working" widget="boolean_toggle" /> + <field + name="day_duration" + attrs="{'invisible': [('day_working', '=', True)]}" + /> </group> </group> </page> diff --git a/views/res_partner.xml b/views/res_partner.xml index edde37d..1617388 100644 --- a/views/res_partner.xml +++ b/views/res_partner.xml @@ -1,7 +1,6 @@ -<?xml version="1.0"?> +<?xml version="1.0" ?> <!-- Copyright 2019 Le Filament License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). --> - <odoo> <data> @@ -9,21 +8,38 @@ <record id="view_partner_cooperative_timesheet_form" model="ir.ui.view"> <field name="name">cooperative.timesheet.form</field> <field name="model">res.partner</field> - <field name="inherit_id" ref="cgscop_partner.scop_contact_view_form"/> - <field name="priority" eval="1"/> + <field name="inherit_id" ref="cgscop_partner.scop_contact_view_form" /> + <field name="priority" eval="1" /> <field name="arch" type="xml"> - <xpath expr="//field[@name='activity_federation_indus_ids']" position="after"> - <separator></separator> - <field name="ur_regional_convention_nb" invisible="1"/> - <field name="ur_financial_system_nb" invisible="1"/> - <field name="ur_financial_system_id" options="{'no_open': True, 'no_create': True}" attrs="{'invisible':[('ur_financial_system_nb', '=', 0)]}"/> - <field name="ur_financial_system_date" attrs="{'invisible':[('ur_financial_system_id','=',False)]}"/> - <field name="ur_regional_convention_id" options="{'no_open': True, 'no_create': True}" attrs="{'invisible':[('ur_regional_convention_nb', '=', 0)]}"/> - <field name="ur_regional_convention_date" attrs="{'invisible':[('ur_regional_convention_id','=',False)]}"/> - <separator></separator> + <xpath + expr="//field[@name='activity_federation_indus_ids']" + position="after" + > + <separator /> + <field name="ur_regional_convention_nb" invisible="1" /> + <field name="ur_financial_system_nb" invisible="1" /> + <field + name="ur_financial_system_id" + options="{'no_open': True, 'no_create': True}" + attrs="{'invisible':[('ur_financial_system_nb', '=', 0)]}" + /> + <field + name="ur_financial_system_date" + attrs="{'invisible':[('ur_financial_system_id','=',False)]}" + /> + <field + name="ur_regional_convention_id" + options="{'no_open': True, 'no_create': True}" + attrs="{'invisible':[('ur_regional_convention_nb', '=', 0)]}" + /> + <field + name="ur_regional_convention_date" + attrs="{'invisible':[('ur_regional_convention_id','=',False)]}" + /> + <separator /> </xpath> </field> </record> </data> -</odoo> \ No newline at end of file +</odoo> diff --git a/views/ur_financial_system.xml b/views/ur_financial_system.xml index 52d8861..1d6a87d 100644 --- a/views/ur_financial_system.xml +++ b/views/ur_financial_system.xml @@ -1,7 +1,6 @@ -<?xml version="1.0"?> +<?xml version="1.0" ?> <!-- Copyright 2019 Le Filament License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). --> - <odoo> <data> <record id="view_ur_financial_system_tree" model="ir.ui.view"> @@ -10,8 +9,15 @@ <field name="arch" type="xml"> <tree editable='top'> <field name="name" /> - <field name="ur_id" options="{'no_open': True, 'no_create': True}"/> - <field name="company_id" groups="base.group_no_one" options="{'no_open': True, 'no_create': True}"/> + <field + name="ur_id" + options="{'no_open': True, 'no_create': True}" + /> + <field + name="company_id" + groups="base.group_no_one" + options="{'no_open': True, 'no_create': True}" + /> </tree> </field> </record> @@ -22,12 +28,14 @@ <field name="view_mode">tree</field> </record> - <menuitem id="menu_ur_financial_system" + <menuitem + id="menu_ur_financial_system" name="Dispositifs financiers" parent="hr_timesheet.hr_timesheet_menu_configuration" action="action_ur_financial_system" sequence="45" - groups="cgscop_partner.group_ur_list_modif"/> + groups="cgscop_partner.group_ur_list_modif" + /> </data> -</odoo> \ No newline at end of file +</odoo> diff --git a/views/ur_month_timesheet.xml b/views/ur_month_timesheet.xml index f759073..0722d3f 100644 --- a/views/ur_month_timesheet.xml +++ b/views/ur_month_timesheet.xml @@ -1,7 +1,6 @@ -<?xml version="1.0"?> +<?xml version="1.0" ?> <!-- Copyright 2019 Le Filament License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). --> - <odoo> <data> <record id="view_ur_month_timesheet_tree" model="ir.ui.view"> @@ -9,11 +8,19 @@ <field name="model">ur.month.timesheet</field> <field name="arch" type="xml"> <tree editable='top'> - <field name="year" required="1"/> - <field name="month" required="1"/> - <field name="working_time" required="1"/> - <field name="ur_id" options="{'no_open': True, 'no_create': True}" readonly="1"/> - <field name="company_id" groups="base.group_no_one" options="{'no_open': True, 'no_create': True}"/> + <field name="year" required="1" /> + <field name="month" required="1" /> + <field name="working_time" required="1" /> + <field + name="ur_id" + options="{'no_open': True, 'no_create': True}" + readonly="1" + /> + <field + name="company_id" + groups="base.group_no_one" + options="{'no_open': True, 'no_create': True}" + /> </tree> </field> </record> @@ -28,21 +35,25 @@ <field name="name">Temps de travail théorique</field> <field name="tag">cgscop_timesheet.ur_month_timesheet</field> <field name="target">new</field> - <field name="binding_model_id" ref="model_ur_month_timesheet"/> + <field name="binding_model_id" ref="model_ur_month_timesheet" /> <field name="binding_type">action</field> </record> - <menuitem id="menu_ur_month_timesheet" + <menuitem + id="menu_ur_month_timesheet" name="Temps de travail mensuel" parent="hr_timesheet.hr_timesheet_menu_configuration" action="action_ur_month_timesheet" sequence="50" - groups="cgscop_partner.group_ur_list_modif"/> + groups="cgscop_partner.group_ur_list_modif" + /> - <menuitem id="menu_ur_month_timesheet_show" + <menuitem + id="menu_ur_month_timesheet_show" parent="hr_timesheet.menu_hr_time_tracking" action="action_ur_month_timesheet_show" - sequence="50"/> + sequence="50" + /> </data> -</odoo> \ No newline at end of file +</odoo> diff --git a/views/ur_regional_convention.xml b/views/ur_regional_convention.xml index 97e9b3e..7ca3b96 100644 --- a/views/ur_regional_convention.xml +++ b/views/ur_regional_convention.xml @@ -1,7 +1,6 @@ -<?xml version="1.0"?> +<?xml version="1.0" ?> <!-- Copyright 2019 Le Filament License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). --> - <odoo> <data> <record id="view_ur_regional_convention_tree" model="ir.ui.view"> @@ -10,8 +9,15 @@ <field name="arch" type="xml"> <tree editable='top'> <field name="name" /> - <field name="ur_id" options="{'no_open': True, 'no_create': True}"/> - <field name="company_id" groups="base.group_no_one" options="{'no_open': True, 'no_create': True}"/> + <field + name="ur_id" + options="{'no_open': True, 'no_create': True}" + /> + <field + name="company_id" + groups="base.group_no_one" + options="{'no_open': True, 'no_create': True}" + /> </tree> </field> </record> @@ -22,12 +28,14 @@ <field name="view_mode">tree</field> </record> - <menuitem id="menu_ur_regional_convention" + <menuitem + id="menu_ur_regional_convention" name="Conventions Régionales" parent="hr_timesheet.hr_timesheet_menu_configuration" action="action_ur_regional_convention" sequence="50" - groups="cgscop_partner.group_ur_list_modif"/> + groups="cgscop_partner.group_ur_list_modif" + /> </data> -</odoo> \ No newline at end of file +</odoo> -- GitLab