diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 732d0c4a644eb444d6b4385643ff32fab19fab52..4acca684ec8c5cda7b3ecd21b9e568ab03d57e8c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -6,6 +6,8 @@ exclude: | ^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 @@ -25,8 +27,13 @@ repos: entry: found forbidden files; remove them language: fail files: "\\.rej$" + - id: en-po-files + name: en.po files cannot exist + entry: found a en.po file + language: fail + files: '[a-zA-Z0-9_]*/i18n/en\.po$' - repo: https://github.com/oca/maintainer-tools - rev: 7d8a9f9ad73db0976fb03cbee43d953bc29b89e9 + rev: ab1d7f6 hooks: # update the NOT INSTALLABLE ADDONS section above - id: oca-update-pre-commit-excluded-addons @@ -48,7 +55,7 @@ repos: hooks: - id: black - repo: https://github.com/pre-commit/mirrors-prettier - rev: v2.6.2 + rev: v2.1.2 hooks: - id: prettier name: prettier (with plugin-xml) @@ -59,7 +66,7 @@ repos: - --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: v8.15.0 + rev: v7.8.1 hooks: - id: eslint verbose: true @@ -67,7 +74,7 @@ repos: - --color - --fix - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.2.0 + rev: v3.2.0 hooks: - id: trailing-whitespace # exclude autogenerated files @@ -89,37 +96,33 @@ repos: - id: mixed-line-ending args: ["--fix=lf"] - repo: https://github.com/asottile/pyupgrade - rev: v2.32.1 + rev: v2.7.2 hooks: - id: pyupgrade args: ["--keep-percent-format"] - repo: https://github.com/PyCQA/isort - rev: 5.10.1 + rev: 5.12.0 hooks: - id: isort name: isort except __init__.py args: - --settings=. exclude: /__init__\.py$ - - repo: https://gitlab.com/PyCQA/flake8 - rev: 3.9.2 + - repo: https://github.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: v2.11.1 + - repo: https://github.com/OCA/pylint-odoo + rev: 7.0.2 hooks: - - id: pylint + - id: pylint_odoo name: pylint with optional checks args: - --rcfile=.pylintrc - --exit-zero verbose: true - additional_dependencies: &pylint_deps - - pylint-odoo==5.0.5 - - id: pylint - name: pylint with mandatory checks + - id: pylint_odoo args: - --rcfile=.pylintrc-mandatory - additional_dependencies: *pylint_deps diff --git a/__init__.py b/__init__.py index bf853b2cb717d382cf347fbce0e83b0b651435fa..e3bc617b1241f1778644d22df337206bd4c8f6fd 100644 --- a/__init__.py +++ b/__init__.py @@ -1,5 +1,4 @@ # © 2019 Le Filament (<http://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from . import models -from . import wizard +from . import models, wizard diff --git a/models/cgscop_timesheet_sheet.py b/models/cgscop_timesheet_sheet.py index 1dfc7811577dee2c473e32c059750ac1b1b08a62..26fbe72181049c78f0ae1400417de5e0a738dfda 100644 --- a/models/cgscop_timesheet_sheet.py +++ b/models/cgscop_timesheet_sheet.py @@ -128,49 +128,64 @@ class ScopHrTimesheetSheet(models.Model): # Retourne les lignes de la Fdt avec les totaux par projet # ------------------------------------------------------ def _to_duration(self, infloat): - return '{0:02.0f}:{1:02.0f}'.format(*divmod(infloat * 60, 60)) + return "{:02.0f}:{:02.0f}".format(*divmod(infloat * 60, 60)) + def _get_timesheet_line_act(self): for sheet in self: - lines = sheet.timesheet_line_ids.sorted(key=lambda b: (b.project_id.name, b.date)) + lines = sheet.timesheet_line_ids.sorted( + key=lambda b: (b.project_id.name, b.date) + ) rows = [] last_project = False tot_project = 0 for line in lines: # On insère un total intermédiaire if last_project != line.project_id.name and tot_project != 0: - rows.append({ - 'total': 1, - 'name': False, - 'partner': False, - 'project': False, - 'date': False, - 'ur_financial_system': 'Total ' + last_project + ' : ' + self._to_duration(tot_project), - 'unit_amount': False, - }) + rows.append( + { + "total": 1, + "name": False, + "partner": False, + "project": False, + "date": False, + "ur_financial_system": "Total " + + last_project + + " : " + + self._to_duration(tot_project), + "unit_amount": False, + } + ) tot_project = 0 # On insère la ligne lue - rows.append({ - 'total': 0, - 'name': line.name, - 'partner': line.partner_id.name, - 'project': line.project_id.name, - 'date': line.date, - 'ur_financial_system': line.ur_financial_system_id.name, - 'unit_amount': self._to_duration(line.unit_amount), - }) + rows.append( + { + "total": 0, + "name": line.name, + "partner": line.partner_id.name, + "project": line.project_id.name, + "date": line.date, + "ur_financial_system": line.ur_financial_system_id.name, + "unit_amount": self._to_duration(line.unit_amount), + } + ) last_project = line.project_id.name tot_project = tot_project + line.unit_amount # On insère le dernier total - rows.append({ - 'total': 1, - 'name': False, - 'partner': False, - 'project': False, - 'date': False, - 'ur_financial_system': 'Total ' + last_project + ' : ' + self._to_duration(tot_project), - 'unit_amount': False, - }) + rows.append( + { + "total": 1, + "name": False, + "partner": False, + "project": False, + "date": False, + "ur_financial_system": "Total " + + last_project + + " : " + + self._to_duration(tot_project), + "unit_amount": False, + } + ) return rows diff --git a/report/report_hr_timesheet_act.xml b/report/report_hr_timesheet_act.xml index 19ab3dad516e3abcf6c28ab4ab6713ccdfae6dd1..a244c865e677a819a82c0707ef17ca167a59247d 100644 --- a/report/report_hr_timesheet_act.xml +++ b/report/report_hr_timesheet_act.xml @@ -5,7 +5,9 @@ <t t-call="web.external_layout"> <div class="page"> <h2> - Feuille de Temps par activité <t t-if="o.state == 'draft'"> - Brouillon</t> + Feuille de Temps par activité <t + t-if="o.state == 'draft'" + > - Brouillon</t> </h2> <h3> <t t-esc="o.name" /> @@ -50,27 +52,24 @@ </tr> </thead> <tbody class="invoice_tbody"> - <t - t-foreach="o._get_timesheet_line_act()" - t-as="line" - > + <t t-foreach="o._get_timesheet_line_act()" t-as="line"> <tr> - <td><span><t t-esc="line['project']"/></span></td> - <td><span><t t-esc="line['date']"/></span></td> - <td><span><t t-esc="line['partner']"/></span></td> - <td><span><t t-esc="line['name']"/></span></td> + <td><span><t t-esc="line['project']" /></span></td> + <td><span><t t-esc="line['date']" /></span></td> + <td><span><t t-esc="line['partner']" /></span></td> + <td><span><t t-esc="line['name']" /></span></td> <td><span> <t t-if="line['total']==1"> <strong> - <t t-esc="line['ur_financial_system']"/> + <t t-esc="line['ur_financial_system']" /> </strong> </t> <t t-if="line['total']==0"> - <t t-esc="line['ur_financial_system']"/> + <t t-esc="line['ur_financial_system']" /> </t> </span></td> <td class="text-right"><span> - <t t-esc="line['unit_amount']"/> + <t t-esc="line['unit_amount']" /> </span></td> </tr> </t> @@ -126,8 +125,12 @@ <field name="name">CG Scop - Feuille de Temps par activité</field> <field name="model">cgscop.timesheet.sheet</field> <field name="report_type">qweb-pdf</field> - <field name="report_name">cgscop_timesheet.report_timesheet_sheet_act</field> - <field name="report_file">cgscop_timesheet.report_timesheet_sheet_act</field> + <field + name="report_name" + >cgscop_timesheet.report_timesheet_sheet_act</field> + <field + name="report_file" + >cgscop_timesheet.report_timesheet_sheet_act</field> <field name="paperformat_id" ref="cgscop_paperformat_a4_landscape" /> </record> diff --git a/views/hr_timesheet.xml b/views/hr_timesheet.xml index 225254adb482bc657f01db60db2710d24449b363..c10abab945277cc3af576dcb871516c8924858f2 100644 --- a/views/hr_timesheet.xml +++ b/views/hr_timesheet.xml @@ -253,9 +253,9 @@ /> <field name="is_present" widget="boolean_toggle" /> <field - name="location" - attrs="{'invisible': [('ur_id', '!=', %(cgscop_partner.riga_14233)d)]}" - /> + name="location" + attrs="{'invisible': [('ur_id', '!=', %(cgscop_partner.riga_14233)d)]}" + /> </field> <field name="task_id" position="attributes"> <attribute name="invisible">True</attribute> diff --git a/wizard/__init__.py b/wizard/__init__.py index 0cfc1deddcc8574c893d967dcdca2833d17dea0e..39c80c7d80a1a88c9cf2c97f34342b8262e39cf0 100644 --- a/wizard/__init__.py +++ b/wizard/__init__.py @@ -3,4 +3,3 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import cgscop_timesheet_print_wizard - diff --git a/wizard/cgscop_timesheet_print_wizard.py b/wizard/cgscop_timesheet_print_wizard.py index 90c21608e61e6e0436885eb3fdc17a0151f1d9d8..5d9ff4b800e37219e52fbf62b5d96ad4fdc469e7 100644 --- a/wizard/cgscop_timesheet_print_wizard.py +++ b/wizard/cgscop_timesheet_print_wizard.py @@ -2,7 +2,7 @@ # © 2020 Confédération Générale des Scop (<https://www.les-scop.coop>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import _, api, exceptions, fields, models +from odoo import api, fields, models class CgscopTimesheetPrintWizard(models.TransientModel): @@ -32,9 +32,9 @@ class CgscopTimesheetPrintWizard(models.TransientModel): def valid_wizard(self): report_name = "cgscop_timesheet.cgscop_timesheet_sheet_report" - if self.print_type == '0': + if self.print_type == "0": report_name = "cgscop_timesheet.cgscop_timesheet_sheet_report" - elif self.print_type == '1': + elif self.print_type == "1": report_name = "cgscop_timesheet.cgscop_timesheet_sheet_report_act" return self.env.ref(report_name).report_action(self.timesheet_id)