From c0d012e281c1c2dafbcbe20ebcbe27db221f6d78 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Iv=C3=A1n=20Todorovich?=
Date: Mon, 2 Dec 2024 11:12:39 -0300
Subject: [PATCH 1/5] [ADD] fieldservice_sale_agreement
---
fieldservice_sale_agreement/README.rst | 89 ++++
fieldservice_sale_agreement/__init__.py | 1 +
fieldservice_sale_agreement/__manifest__.py | 19 +
.../i18n/fieldservice_sale_agreement.pot | 19 +
.../models/__init__.py | 1 +
.../models/sale_order.py | 14 +
fieldservice_sale_agreement/pyproject.toml | 3 +
.../readme/CONTRIBUTORS.md | 3 +
.../readme/DESCRIPTION.md | 3 +
.../static/description/icon.png | Bin 0 -> 9455 bytes
.../static/description/index.html | 432 ++++++++++++++++++
fieldservice_sale_agreement/tests/__init__.py | 1 +
.../tests/test_fsm_sale_agreement.py | 56 +++
13 files changed, 641 insertions(+)
create mode 100644 fieldservice_sale_agreement/README.rst
create mode 100644 fieldservice_sale_agreement/__init__.py
create mode 100644 fieldservice_sale_agreement/__manifest__.py
create mode 100644 fieldservice_sale_agreement/i18n/fieldservice_sale_agreement.pot
create mode 100644 fieldservice_sale_agreement/models/__init__.py
create mode 100644 fieldservice_sale_agreement/models/sale_order.py
create mode 100644 fieldservice_sale_agreement/pyproject.toml
create mode 100644 fieldservice_sale_agreement/readme/CONTRIBUTORS.md
create mode 100644 fieldservice_sale_agreement/readme/DESCRIPTION.md
create mode 100644 fieldservice_sale_agreement/static/description/icon.png
create mode 100644 fieldservice_sale_agreement/static/description/index.html
create mode 100644 fieldservice_sale_agreement/tests/__init__.py
create mode 100644 fieldservice_sale_agreement/tests/test_fsm_sale_agreement.py
diff --git a/fieldservice_sale_agreement/README.rst b/fieldservice_sale_agreement/README.rst
new file mode 100644
index 0000000000..8a59eac97f
--- /dev/null
+++ b/fieldservice_sale_agreement/README.rst
@@ -0,0 +1,89 @@
+===============================
+Field Service - Sale Agreements
+===============================
+
+..
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! This file is generated by oca-gen-addon-readme !!
+ !! changes will be overwritten. !!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! source digest: sha256:51e39dfe70b9f047e57fb1bddb25c479a39139d3388fbcf2ca252ae9d409ec16
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
+ :target: https://odoo-community.org/page/development-status
+ :alt: Beta
+.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
+ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Ffield--service-lightgray.png?logo=github
+ :target: https://github.com/OCA/field-service/tree/17.0/fieldservice_sale_agreement
+ :alt: OCA/field-service
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+ :target: https://translation.odoo-community.org/projects/field-service-17-0/field-service-17-0-fieldservice_sale_agreement
+ :alt: Translate me on Weblate
+.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
+ :target: https://runboat.odoo-community.org/builds?repo=OCA/field-service&target_branch=17.0
+ :alt: Try me on Runboat
+
+|badge1| |badge2| |badge3| |badge4| |badge5|
+
+Integrates the Field Service and Sale Agreements modules, to:
+
+- Propagate the ``agreement_id`` field from the Sales Order to the FSM
+ Order
+
+**Table of contents**
+
+.. contents::
+ :local:
+
+Bug Tracker
+===========
+
+Bugs are tracked on `GitHub Issues `_.
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us to smash it by providing a detailed and welcomed
+`feedback `_.
+
+Do not contact contributors directly about support or help with technical issues.
+
+Credits
+=======
+
+Authors
+-------
+
+* Camptocamp
+
+Contributors
+------------
+
+- `Camptocamp `__:
+
+ - Iván Todorovich
+
+Maintainers
+-----------
+
+This module is maintained by the OCA.
+
+.. image:: https://odoo-community.org/logo.png
+ :alt: Odoo Community Association
+ :target: https://odoo-community.org
+
+OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
+.. |maintainer-ivantodorovich| image:: https://github.com/ivantodorovich.png?size=40px
+ :target: https://github.com/ivantodorovich
+ :alt: ivantodorovich
+
+Current `maintainer `__:
+
+|maintainer-ivantodorovich|
+
+This module is part of the `OCA/field-service `_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/fieldservice_sale_agreement/__init__.py b/fieldservice_sale_agreement/__init__.py
new file mode 100644
index 0000000000..0650744f6b
--- /dev/null
+++ b/fieldservice_sale_agreement/__init__.py
@@ -0,0 +1 @@
+from . import models
diff --git a/fieldservice_sale_agreement/__manifest__.py b/fieldservice_sale_agreement/__manifest__.py
new file mode 100644
index 0000000000..646625831e
--- /dev/null
+++ b/fieldservice_sale_agreement/__manifest__.py
@@ -0,0 +1,19 @@
+# Copyright 2024 Camptocamp SA (https://www.camptocamp.com).
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+{
+ "name": "Field Service - Sale Agreements",
+ "summary": "Integrate Field Service with Sale Agreements",
+ "version": "17.0.1.0.0",
+ "author": "Camptocamp, Odoo Community Association (OCA)",
+ "maintainers": ["ivantodorovich"],
+ "website": "https://github.com/OCA/field-service",
+ "license": "AGPL-3",
+ "category": "Field Service",
+ "depends": [
+ "fieldservice_agreement",
+ "fieldservice_sale",
+ "agreement_sale",
+ ],
+ "auto_install": True,
+}
diff --git a/fieldservice_sale_agreement/i18n/fieldservice_sale_agreement.pot b/fieldservice_sale_agreement/i18n/fieldservice_sale_agreement.pot
new file mode 100644
index 0000000000..1b8e9aeced
--- /dev/null
+++ b/fieldservice_sale_agreement/i18n/fieldservice_sale_agreement.pot
@@ -0,0 +1,19 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * fieldservice_sale_agreement
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: fieldservice_sale_agreement
+#: model:ir.model,name:fieldservice_sale_agreement.model_sale_order
+msgid "Sales Order"
+msgstr ""
diff --git a/fieldservice_sale_agreement/models/__init__.py b/fieldservice_sale_agreement/models/__init__.py
new file mode 100644
index 0000000000..6aacb75313
--- /dev/null
+++ b/fieldservice_sale_agreement/models/__init__.py
@@ -0,0 +1 @@
+from . import sale_order
diff --git a/fieldservice_sale_agreement/models/sale_order.py b/fieldservice_sale_agreement/models/sale_order.py
new file mode 100644
index 0000000000..521b65b1bc
--- /dev/null
+++ b/fieldservice_sale_agreement/models/sale_order.py
@@ -0,0 +1,14 @@
+# Copyright 2024 Camptocamp SA (https://www.camptocamp.com).
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from odoo import models
+
+
+class SaleOrder(models.Model):
+ _inherit = "sale.order"
+
+ def _prepare_fsm_values(self, **kwargs):
+ # OVERRIDE to propagate the agreement_id to the FSM Order
+ res = super()._prepare_fsm_values(**kwargs)
+ res.update({"agreement_id": self.agreement_id.id})
+ return res
diff --git a/fieldservice_sale_agreement/pyproject.toml b/fieldservice_sale_agreement/pyproject.toml
new file mode 100644
index 0000000000..4231d0cccb
--- /dev/null
+++ b/fieldservice_sale_agreement/pyproject.toml
@@ -0,0 +1,3 @@
+[build-system]
+requires = ["whool"]
+build-backend = "whool.buildapi"
diff --git a/fieldservice_sale_agreement/readme/CONTRIBUTORS.md b/fieldservice_sale_agreement/readme/CONTRIBUTORS.md
new file mode 100644
index 0000000000..4fa5a70e1d
--- /dev/null
+++ b/fieldservice_sale_agreement/readme/CONTRIBUTORS.md
@@ -0,0 +1,3 @@
+- [Camptocamp](https://camptocamp.com):
+
+ - Iván Todorovich \<\>
diff --git a/fieldservice_sale_agreement/readme/DESCRIPTION.md b/fieldservice_sale_agreement/readme/DESCRIPTION.md
new file mode 100644
index 0000000000..3d5836afe8
--- /dev/null
+++ b/fieldservice_sale_agreement/readme/DESCRIPTION.md
@@ -0,0 +1,3 @@
+Integrates the Field Service and Sale Agreements modules, to:
+
+* Propagate the `agreement_id` field from the Sales Order to the FSM Order
diff --git a/fieldservice_sale_agreement/static/description/icon.png b/fieldservice_sale_agreement/static/description/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d
GIT binary patch
literal 9455
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
z
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
Xviia!U7SGha1wx#SCgwmn*{w2TRX*I
literal 0
HcmV?d00001
diff --git a/fieldservice_sale_agreement/static/description/index.html b/fieldservice_sale_agreement/static/description/index.html
new file mode 100644
index 0000000000..e26878885e
--- /dev/null
+++ b/fieldservice_sale_agreement/static/description/index.html
@@ -0,0 +1,432 @@
+
+
+
+
+
+Field Service - Sale Agreements
+
+
+
+
+
Field Service - Sale Agreements
+
+
+

+
Integrates the Field Service and Sale Agreements modules, to:
+
+- Propagate the agreement_id field from the Sales Order to the FSM
+Order
+
+
Table of contents
+
+
+
+
Bugs are tracked on GitHub Issues.
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us to smash it by providing a detailed and welcomed
+feedback.
+
Do not contact contributors directly about support or help with technical issues.
+
+
+
+
+
+
+
+
This module is maintained by the OCA.
+
+
+
+
OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
Current maintainer:
+

+
This module is part of the OCA/field-service project on GitHub.
+
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
+
+
+
+
+
diff --git a/fieldservice_sale_agreement/tests/__init__.py b/fieldservice_sale_agreement/tests/__init__.py
new file mode 100644
index 0000000000..f3b083d003
--- /dev/null
+++ b/fieldservice_sale_agreement/tests/__init__.py
@@ -0,0 +1 @@
+from . import test_fsm_sale_agreement
diff --git a/fieldservice_sale_agreement/tests/test_fsm_sale_agreement.py b/fieldservice_sale_agreement/tests/test_fsm_sale_agreement.py
new file mode 100644
index 0000000000..c835a25e46
--- /dev/null
+++ b/fieldservice_sale_agreement/tests/test_fsm_sale_agreement.py
@@ -0,0 +1,56 @@
+# Copyright 2024 Camptocamp SA
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from odoo import Command
+
+from odoo.addons.base.tests.common import DISABLED_MAIL_CONTEXT
+from odoo.addons.sale.tests.common import TestSaleCommonBase
+
+
+class TestFieldServiceSaleAgreement(TestSaleCommonBase):
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
+ cls.env = cls.env(context=dict(cls.env.context, **DISABLED_MAIL_CONTEXT))
+ cls.fsm_template = cls.env["fsm.template"].create(
+ {
+ "name": "Test FSM Template",
+ "instructions": "Test Notes",
+ "duration": 2,
+ }
+ )
+ cls.product = cls.env["product.product"].create(
+ {
+ "name": "FSM Product",
+ "type": "service",
+ "invoice_policy": "delivery",
+ "field_service_tracking": "line",
+ "fsm_order_template_id": cls.fsm_template.id,
+ }
+ )
+ cls.order = cls.env["sale.order"].create(
+ {
+ "partner_id": cls.env.ref("base.main_partner").id,
+ "agreement_id": cls.env.ref("agreement.market1").id,
+ "fsm_location_id": cls.env.ref("fieldservice.test_location").id,
+ "order_line": [
+ Command.create(
+ {
+ "product_id": cls.product.id,
+ "product_uom_qty": 1,
+ }
+ )
+ ],
+ }
+ )
+
+ def test_propagate_agreement_id(self):
+ self.order.action_confirm()
+ self.assertTrue(
+ self.order.fsm_order_ids, "The FSM Order should've been created"
+ )
+ self.assertEqual(
+ self.order.fsm_order_ids.agreement_id,
+ self.order.agreement_id,
+ "The FSM Order should have the same agreement as the Sale Order",
+ )
From 27fb0dc9e4701581194c9f3ae8d1aeb8879fac41 Mon Sep 17 00:00:00 2001
From: mymage
Date: Wed, 22 Jan 2025 09:44:45 +0000
Subject: [PATCH 2/5] Added translation using Weblate (Italian)
---
fieldservice_sale_agreement/i18n/it.po | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
create mode 100644 fieldservice_sale_agreement/i18n/it.po
diff --git a/fieldservice_sale_agreement/i18n/it.po b/fieldservice_sale_agreement/i18n/it.po
new file mode 100644
index 0000000000..407df89e1c
--- /dev/null
+++ b/fieldservice_sale_agreement/i18n/it.po
@@ -0,0 +1,22 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * fieldservice_sale_agreement
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"PO-Revision-Date: 2025-01-22 12:06+0000\n"
+"Last-Translator: mymage \n"
+"Language-Team: none\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 5.6.2\n"
+
+#. module: fieldservice_sale_agreement
+#: model:ir.model,name:fieldservice_sale_agreement.model_sale_order
+msgid "Sales Order"
+msgstr "Ordine di vendita"
From 0e3f836a4d55a76191537238d868946b8c69967d Mon Sep 17 00:00:00 2001
From: Vincent Van Rossem
Date: Mon, 18 Aug 2025 10:33:01 +0200
Subject: [PATCH 3/5] [MIG] fieldservice_sale_agreement: Migration to 18.0
---
fieldservice_sale_agreement/README.rst | 18 +++++++++---------
fieldservice_sale_agreement/__manifest__.py | 2 +-
.../static/description/index.html | 6 +++---
3 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/fieldservice_sale_agreement/README.rst b/fieldservice_sale_agreement/README.rst
index 8a59eac97f..4a2549c6ae 100644
--- a/fieldservice_sale_agreement/README.rst
+++ b/fieldservice_sale_agreement/README.rst
@@ -17,21 +17,21 @@ Field Service - Sale Agreements
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Ffield--service-lightgray.png?logo=github
- :target: https://github.com/OCA/field-service/tree/17.0/fieldservice_sale_agreement
+ :target: https://github.com/OCA/field-service/tree/18.0/fieldservice_sale_agreement
:alt: OCA/field-service
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/field-service-17-0/field-service-17-0-fieldservice_sale_agreement
+ :target: https://translation.odoo-community.org/projects/field-service-18-0/field-service-18-0-fieldservice_sale_agreement
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
- :target: https://runboat.odoo-community.org/builds?repo=OCA/field-service&target_branch=17.0
+ :target: https://runboat.odoo-community.org/builds?repo=OCA/field-service&target_branch=18.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
Integrates the Field Service and Sale Agreements modules, to:
-- Propagate the ``agreement_id`` field from the Sales Order to the FSM
- Order
+- Propagate the ``agreement_id`` field from the Sales Order to the FSM
+ Order
**Table of contents**
@@ -44,7 +44,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues `_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
-`feedback `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -59,9 +59,9 @@ Authors
Contributors
------------
-- `Camptocamp `__:
+- `Camptocamp `__:
- - Iván Todorovich
+ - Iván Todorovich
Maintainers
-----------
@@ -84,6 +84,6 @@ Current `maintainer `__:
|maintainer-ivantodorovich|
-This module is part of the `OCA/field-service `_ project on GitHub.
+This module is part of the `OCA/field-service `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/fieldservice_sale_agreement/__manifest__.py b/fieldservice_sale_agreement/__manifest__.py
index 646625831e..2062d38ea4 100644
--- a/fieldservice_sale_agreement/__manifest__.py
+++ b/fieldservice_sale_agreement/__manifest__.py
@@ -4,7 +4,7 @@
{
"name": "Field Service - Sale Agreements",
"summary": "Integrate Field Service with Sale Agreements",
- "version": "17.0.1.0.0",
+ "version": "18.0.1.0.0",
"author": "Camptocamp, Odoo Community Association (OCA)",
"maintainers": ["ivantodorovich"],
"website": "https://github.com/OCA/field-service",
diff --git a/fieldservice_sale_agreement/static/description/index.html b/fieldservice_sale_agreement/static/description/index.html
index e26878885e..b7b48b9570 100644
--- a/fieldservice_sale_agreement/static/description/index.html
+++ b/fieldservice_sale_agreement/static/description/index.html
@@ -369,7 +369,7 @@ Field Service - Sale Agreements
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:51e39dfe70b9f047e57fb1bddb25c479a39139d3388fbcf2ca252ae9d409ec16
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-

+

Integrates the Field Service and Sale Agreements modules, to:
- Propagate the agreement_id field from the Sales Order to the FSM
@@ -392,7 +392,7 @@
Bugs are tracked on GitHub Issues.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
-feedback.
+feedback.
Do not contact contributors directly about support or help with technical issues.
From 339ea001be26114bee4c3cd23b387d6e3078f004 Mon Sep 17 00:00:00 2001
From: oca-ci
Date: Thu, 4 Sep 2025 11:31:42 +0000
Subject: [PATCH 4/5] [UPD] Update fieldservice_sale_agreement.pot
---
fieldservice_sale_agreement/README.rst | 16 +++++++-----
.../i18n/fieldservice_sale_agreement.pot | 2 +-
.../static/description/index.html | 26 ++++++++++++-------
3 files changed, 27 insertions(+), 17 deletions(-)
diff --git a/fieldservice_sale_agreement/README.rst b/fieldservice_sale_agreement/README.rst
index 4a2549c6ae..397e021a76 100644
--- a/fieldservice_sale_agreement/README.rst
+++ b/fieldservice_sale_agreement/README.rst
@@ -1,3 +1,7 @@
+.. image:: https://odoo-community.org/readme-banner-image
+ :target: https://odoo-community.org/get-involved?utm_source=readme
+ :alt: Odoo Community Association
+
===============================
Field Service - Sale Agreements
===============================
@@ -7,13 +11,13 @@ Field Service - Sale Agreements
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- !! source digest: sha256:51e39dfe70b9f047e57fb1bddb25c479a39139d3388fbcf2ca252ae9d409ec16
+ !! source digest: sha256:fa7c285214870a1b35dc7164ed3e8f4c8f2b06924d272e043a98bfeb5452cd06
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
-.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
+.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Ffield--service-lightgray.png?logo=github
@@ -30,8 +34,8 @@ Field Service - Sale Agreements
Integrates the Field Service and Sale Agreements modules, to:
-- Propagate the ``agreement_id`` field from the Sales Order to the FSM
- Order
+- Propagate the ``agreement_id`` field from the Sales Order to the FSM
+ Order
**Table of contents**
@@ -59,9 +63,9 @@ Authors
Contributors
------------
-- `Camptocamp `__:
+- `Camptocamp `__:
- - Iván Todorovich
+ - Iván Todorovich
Maintainers
-----------
diff --git a/fieldservice_sale_agreement/i18n/fieldservice_sale_agreement.pot b/fieldservice_sale_agreement/i18n/fieldservice_sale_agreement.pot
index 1b8e9aeced..40c107d18e 100644
--- a/fieldservice_sale_agreement/i18n/fieldservice_sale_agreement.pot
+++ b/fieldservice_sale_agreement/i18n/fieldservice_sale_agreement.pot
@@ -4,7 +4,7 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 17.0\n"
+"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
diff --git a/fieldservice_sale_agreement/static/description/index.html b/fieldservice_sale_agreement/static/description/index.html
index b7b48b9570..7efc753475 100644
--- a/fieldservice_sale_agreement/static/description/index.html
+++ b/fieldservice_sale_agreement/static/description/index.html
@@ -3,7 +3,7 @@
-Field Service - Sale Agreements
+README.rst
-
-
Field Service - Sale Agreements
+
+
+
+
+
+
-
+
Bugs are tracked on GitHub Issues.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
@@ -396,15 +401,15 @@
Do not contact contributors directly about support or help with technical issues.
+