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)