diff --git a/.eslintrc.yml b/.eslintrc.yml
index fed88d70d23ecb3297ea28854b320c4d62ee3c26..0b382039586ae1303994e343dfca336fe46b0bdd 100644
--- a/.eslintrc.yml
+++ b/.eslintrc.yml
@@ -4,7 +4,7 @@ env:
 
 # See https://github.com/OCA/odoo-community.org/issues/37#issuecomment-470686449
 parserOptions:
-  ecmaVersion: 2019
+  ecmaVersion: 2022
 
 overrides:
   - files:
diff --git a/.gitignore b/.gitignore
index d99361a24aa02c2d19d8165c3a057b84bc575166..c9f42387ef7051b2a868a9361f4f3cb6d562d4ed 100644
--- a/.gitignore
+++ b/.gitignore
@@ -26,6 +26,15 @@ var/
 *.eggs
 .copier-answers.yml
 
+# Debian packages
+*.deb
+
+# Redhat packages
+*.rpm
+
+# MacOS packages
+*.dmg
+
 # Installer logs
 pip-log.txt
 pip-delete-this-directory.txt
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 3efb4d9157dc36d84e372eec5fc21e7f4a417a58..f58f2c6608a042bb13f2c7559889e33bf3f46733 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -16,6 +16,8 @@ exclude: |
   readme/.*\.(rst|md)$|
   # Ignore build and dist directories in addons
   /build/|/dist/|
+  # Ignore test files in addons
+  /tests/samples/.*|
   # You don't usually want a bot to modify your legal texts
   (LICENSE.*|COPYING.*)
 default_language_version:
@@ -35,9 +37,14 @@ repos:
         name: en.po files cannot exist
         entry: found a en.po file
         language: fail
-        files: '[a-zA-Z0-9_]*/i18n/en\.po$'
+        files:
+          '[a-zA-Z0-9_]*/i18n/en\.po$'
+          #  - repo: https://github.com/sbidoul/whool
+          #    rev: v0.5
+          #    hooks:
+          #      - id: whool-init
   - repo: https://github.com/oca/maintainer-tools
-    rev: f71041f22b8cd68cf7c77b73a14ca8d8cd190a60
+    rev: d5fab7ee87fceee858a3d01048c78a548974d935
     hooks:
       # update the NOT INSTALLABLE ADDONS section above
       - id: oca-update-pre-commit-excluded-addons
@@ -46,11 +53,13 @@ repos:
       - id: oca-gen-addon-readme
         args:
           - --addons-dir=.
-          - --branch=16.0
+          - --branch=17.0
           - --org-name=lefilament
           - --repo-name=template_module
           - --if-source-changed
           - --keep-source-digest
+          - --convert-fragments-to-markdown
+      # - id: oca-gen-external-dependencies
   - repo: https://github.com/OCA/odoo-pre-commit-hooks
     rev: v0.0.25
     hooks:
@@ -104,7 +113,7 @@ repos:
         args: [--fix, --exit-non-zero-on-fix]
       - id: ruff-format
   - repo: https://github.com/OCA/pylint-odoo
-    rev: v8.0.19
+    rev: v9.0.4
     hooks:
       - id: pylint_odoo
         name: pylint with optional checks
diff --git a/.prettierrc.yml b/.prettierrc.yml
new file mode 100644
index 0000000000000000000000000000000000000000..5b6d4b361ace92f3877993bf2848fac190d8fab6
--- /dev/null
+++ b/.prettierrc.yml
@@ -0,0 +1,8 @@
+# Defaults for all prettier-supported languages.
+# Prettier will complete this with settings from .editorconfig file.
+bracketSpacing: false
+printWidth: 88
+proseWrap: always
+semi: true
+trailingComma: "es5"
+xmlWhitespaceSensitivity: "strict"
diff --git a/.pylintrc b/.pylintrc
index 71c476d4f10ac08a7333729b93705c9573d240d5..4fb9ba5362fb402b42c1a587d56b28ed71e8f933 100644
--- a/.pylintrc
+++ b/.pylintrc
@@ -5,12 +5,12 @@ 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=16.0
+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=17.0
 
 [MESSAGES CONTROL]
 disable=all
diff --git a/.pylintrc-mandatory b/.pylintrc-mandatory
index 99064933ef82c469ba5fda5b2904447c05c99dbe..42885e9b5eb0cde47fa65d308683c29504934143 100644
--- a/.pylintrc-mandatory
+++ b/.pylintrc-mandatory
@@ -9,7 +9,7 @@ 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=16.0
+valid-odoo-versions=17.0
 
 [MESSAGES CONTROL]
 disable=all
diff --git a/__manifest__.py b/__manifest__.py
index 60d1d36e55e619015eba8d5f62867d5d122158a1..36efc516efba46fff073608dfa25f82994e2498f 100644
--- a/__manifest__.py
+++ b/__manifest__.py
@@ -1,9 +1,9 @@
 {
     "name": "Lien Commandes Projets",
-    "summary": """Filament - Lien entre commandes et projets""",
+    "summary": "Lien entre commandes et projets",
     "author": "Le Filament",
     "website": "https://le-filament.com",
-    "version": "16.0.1.0.0",
+    "version": "17.0.1.0.0",
     "license": "AGPL-3",
     "category": "Services/Project",
     "depends": ["sale_timesheet", "project"],
diff --git a/models/__init__.py b/models/__init__.py
index 9463a5bb66749640931e09372bc49276daa72c5d..a475b71bd4e4860a73d762fa80eff8d63d9362b5 100644
--- a/models/__init__.py
+++ b/models/__init__.py
@@ -1,5 +1,4 @@
 from . import res_company
 from . import res_config_settings
-from . import project_update
 from . import sale_order
 from . import sale_order_line
diff --git a/models/project_update.py b/models/project_update.py
deleted file mode 100644
index b2fde5acee99b4b601c26189f115c4ffdd8a7a9b..0000000000000000000000000000000000000000
--- a/models/project_update.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright 2021- Le Filament (<https://le-filament.com>)
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-
-
-from odoo import models
-
-
-class Project(models.Model):
-    _inherit = "project.update"
-
-    def _get_services_values(self, project):
-        res = super()._get_services_values(project)
-        total_sold = 0
-        total_effective = 0
-        for service_line in res["data"]:
-            sol = service_line["sol"]
-            product_uom_qty = sol._convert_qty_company_hours(sol.company_id)
-            delivered_qty = service_line["effective_value"]
-            service_line["sold_value"] = product_uom_qty
-            service_line["remaining_value"] = product_uom_qty - delivered_qty
-            total_sold += product_uom_qty
-            total_effective += delivered_qty
-        total_remaining = total_sold - total_effective
-        res.update(
-            {
-                "total_sold": total_sold,
-                "total_effective": total_effective,
-                "total_remaining": total_remaining,
-            }
-        )
-        return res
diff --git a/views/res_config_settings_view.xml b/views/res_config_settings_view.xml
index 870c905467edec3fdf310ae8b937d5a4b341b61c..023a757182f972e4c0433cc63e5a6f8f7cb0d428 100644
--- a/views/res_config_settings_view.xml
+++ b/views/res_config_settings_view.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" ?>
-<!-- Copyright 2019-2022 Le Filament (<https://le-filament.com>)
+<!-- Copyright 2019- Le Filament (https://le-filament.com)
      License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
 <odoo>
 
@@ -20,11 +20,7 @@
                                 string="Taux horaire"
                                 class="col-3 col-lg-3 o_light_label"
                             />
-                        <field
-                                name="taux_horaire"
-                                class="oe_inline"
-                                required="1"
-                            />
+                        <field name="taux_horaire" class="oe_inline" required="1" />
                     </div>
                 </div>
             </div>
diff --git a/views/sale_view.xml b/views/sale_view.xml
index 537debd3b3cc27927868298919ba797204691c74..d2731108a2d0ae1ad1ceca87aee4031f84701c0f 100644
--- a/views/sale_view.xml
+++ b/views/sale_view.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" ?>
-<!-- Copyright 2021-2022 Le Filament (<https://le-filament.com>)
+<!-- Copyright 2021- Le Filament (https://le-filament.com)
      License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
 <odoo>