diff --git a/README.md b/README.md
index 2eef60514b..0c325f47c2 100644
--- a/README.md
+++ b/README.md
@@ -23,7 +23,7 @@ Available addons
addon | version | maintainers | summary
--- | --- | --- | ---
[agreement_rebate_partner_company_group](agreement_rebate_partner_company_group/) | 18.0.1.0.0 | | Rebate agreements applied to all company group members
-[contract](contract/) | 18.0.2.4.0 | | Recurring - Contracts Management
+[contract](contract/) | 18.0.2.4.1 | | Recurring - Contracts Management
[contract_analytic_tag](contract_analytic_tag/) | 18.0.1.0.0 |
| Contract Analytic Tag
[contract_forecast](contract_forecast/) | 18.0.1.0.1 |
| Contract Forecast
[contract_forecast_variable_quantity](contract_forecast_variable_quantity/) | 18.0.1.0.0 | | Contract Forecast Variable Quantity
diff --git a/contract/README.rst b/contract/README.rst
index a61baac273..d9075b5f5d 100644
--- a/contract/README.rst
+++ b/contract/README.rst
@@ -11,7 +11,7 @@ Recurring - Contracts Management
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- !! source digest: sha256:68f83bb4e4dde7a54beeac546d364285c4a44d7abab73c256aced1f6ae6e4e72
+ !! source digest: sha256:8bf87caaab45c7753fd84be7828adf1b2667c83b0c0788beba02223780a52eab
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png
diff --git a/contract/__manifest__.py b/contract/__manifest__.py
index c4510b8a3c..bc8be7a299 100644
--- a/contract/__manifest__.py
+++ b/contract/__manifest__.py
@@ -11,7 +11,7 @@
{
"name": "Recurring - Contracts Management",
- "version": "18.0.2.4.0",
+ "version": "18.0.2.4.1",
"category": "Contract Management",
"license": "AGPL-3",
"author": "Tecnativa, ACSONE SA/NV, Odoo Community Association (OCA)",
diff --git a/contract/i18n/am.po b/contract/i18n/am.po
index a56559fe2b..13dd7138f0 100644
--- a/contract/i18n/am.po
+++ b/contract/i18n/am.po
@@ -367,6 +367,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/ar.po b/contract/i18n/ar.po
index 2cb08e849f..8f55949717 100644
--- a/contract/i18n/ar.po
+++ b/contract/i18n/ar.po
@@ -368,6 +368,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/bg.po b/contract/i18n/bg.po
index 5d8be1210c..dd01d19f48 100644
--- a/contract/i18n/bg.po
+++ b/contract/i18n/bg.po
@@ -367,6 +367,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/bs.po b/contract/i18n/bs.po
index 274d80829a..d273ab35fb 100644
--- a/contract/i18n/bs.po
+++ b/contract/i18n/bs.po
@@ -368,6 +368,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/ca.po b/contract/i18n/ca.po
index 9858bd7d4b..2c419cecff 100644
--- a/contract/i18n/ca.po
+++ b/contract/i18n/ca.po
@@ -470,6 +470,12 @@ msgstr "Cancel·lar"
msgid "Canceled"
msgstr "Cancel·lat"
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/ca_ES.po b/contract/i18n/ca_ES.po
index 0326e4d96c..0eff6b6e3b 100644
--- a/contract/i18n/ca_ES.po
+++ b/contract/i18n/ca_ES.po
@@ -363,6 +363,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/contract.pot b/contract/i18n/contract.pot
index 6b41d1b216..de10f3ecfa 100644
--- a/contract/i18n/contract.pot
+++ b/contract/i18n/contract.pot
@@ -335,6 +335,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/cs.po b/contract/i18n/cs.po
index 736ac7eaef..f4c0209541 100644
--- a/contract/i18n/cs.po
+++ b/contract/i18n/cs.po
@@ -367,6 +367,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/da.po b/contract/i18n/da.po
index c8de73d416..86866447cd 100644
--- a/contract/i18n/da.po
+++ b/contract/i18n/da.po
@@ -367,6 +367,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/de.po b/contract/i18n/de.po
index 1d37c01f79..9d83f8149b 100644
--- a/contract/i18n/de.po
+++ b/contract/i18n/de.po
@@ -383,6 +383,12 @@ msgstr "Abbrechen"
msgid "Canceled"
msgstr "Abgebrochen"
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/el_GR.po b/contract/i18n/el_GR.po
index 451ef45273..a9d935ed9f 100644
--- a/contract/i18n/el_GR.po
+++ b/contract/i18n/el_GR.po
@@ -368,6 +368,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/en_GB.po b/contract/i18n/en_GB.po
index b07d1c4a8e..2f550cb459 100644
--- a/contract/i18n/en_GB.po
+++ b/contract/i18n/en_GB.po
@@ -368,6 +368,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/es.po b/contract/i18n/es.po
index f0b74f670d..1b8286df23 100644
--- a/contract/i18n/es.po
+++ b/contract/i18n/es.po
@@ -395,6 +395,12 @@ msgstr "Cancelar"
msgid "Canceled"
msgstr "Cancelado"
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/es_AR.po b/contract/i18n/es_AR.po
index 9b2b755b22..652b5fe0bc 100644
--- a/contract/i18n/es_AR.po
+++ b/contract/i18n/es_AR.po
@@ -383,6 +383,12 @@ msgstr "Cancelar"
msgid "Canceled"
msgstr "Cancelado"
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/es_CL.po b/contract/i18n/es_CL.po
index 76ba811b70..ad2144c9b3 100644
--- a/contract/i18n/es_CL.po
+++ b/contract/i18n/es_CL.po
@@ -365,6 +365,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/es_CO.po b/contract/i18n/es_CO.po
index 5e47766f5f..225fb65ee6 100644
--- a/contract/i18n/es_CO.po
+++ b/contract/i18n/es_CO.po
@@ -368,6 +368,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/es_CR.po b/contract/i18n/es_CR.po
index 9f1e790876..5df7d77c3d 100644
--- a/contract/i18n/es_CR.po
+++ b/contract/i18n/es_CR.po
@@ -368,6 +368,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/es_DO.po b/contract/i18n/es_DO.po
index 8e0819a49c..34658d0407 100644
--- a/contract/i18n/es_DO.po
+++ b/contract/i18n/es_DO.po
@@ -368,6 +368,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/es_EC.po b/contract/i18n/es_EC.po
index 464f9dfdc6..ce553635b5 100644
--- a/contract/i18n/es_EC.po
+++ b/contract/i18n/es_EC.po
@@ -368,6 +368,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/es_MX.po b/contract/i18n/es_MX.po
index d4c4895d25..900eacf487 100644
--- a/contract/i18n/es_MX.po
+++ b/contract/i18n/es_MX.po
@@ -368,6 +368,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/es_PY.po b/contract/i18n/es_PY.po
index e428202aec..cd5bb301e0 100644
--- a/contract/i18n/es_PY.po
+++ b/contract/i18n/es_PY.po
@@ -368,6 +368,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/es_VE.po b/contract/i18n/es_VE.po
index 200064a23c..917cfdb177 100644
--- a/contract/i18n/es_VE.po
+++ b/contract/i18n/es_VE.po
@@ -368,6 +368,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/et.po b/contract/i18n/et.po
index 35b386b974..263d65c45f 100644
--- a/contract/i18n/et.po
+++ b/contract/i18n/et.po
@@ -367,6 +367,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/eu.po b/contract/i18n/eu.po
index e2623061f4..e49b5b9308 100644
--- a/contract/i18n/eu.po
+++ b/contract/i18n/eu.po
@@ -367,6 +367,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/fa.po b/contract/i18n/fa.po
index 86a6a274d3..c936001409 100644
--- a/contract/i18n/fa.po
+++ b/contract/i18n/fa.po
@@ -367,6 +367,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/fi.po b/contract/i18n/fi.po
index 0fc0e80386..e8de2fb98a 100644
--- a/contract/i18n/fi.po
+++ b/contract/i18n/fi.po
@@ -370,6 +370,12 @@ msgstr "Peru"
msgid "Canceled"
msgstr "Peruttu"
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/fr.po b/contract/i18n/fr.po
index 0edf0589bc..b8f25d7bfd 100644
--- a/contract/i18n/fr.po
+++ b/contract/i18n/fr.po
@@ -478,6 +478,12 @@ msgstr "Annuler"
msgid "Canceled"
msgstr "Annulée"
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/fr_CA.po b/contract/i18n/fr_CA.po
index 37c94b777d..24140a7b0d 100644
--- a/contract/i18n/fr_CA.po
+++ b/contract/i18n/fr_CA.po
@@ -368,6 +368,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/fr_CH.po b/contract/i18n/fr_CH.po
index 72f2fab7e5..05e32ed303 100644
--- a/contract/i18n/fr_CH.po
+++ b/contract/i18n/fr_CH.po
@@ -368,6 +368,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/fr_FR.po b/contract/i18n/fr_FR.po
index 592d4ea606..64c4bde8bd 100644
--- a/contract/i18n/fr_FR.po
+++ b/contract/i18n/fr_FR.po
@@ -375,6 +375,12 @@ msgstr "Annuler"
msgid "Canceled"
msgstr "Annulée"
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/gl.po b/contract/i18n/gl.po
index ae54c36079..5f40ec5121 100644
--- a/contract/i18n/gl.po
+++ b/contract/i18n/gl.po
@@ -371,6 +371,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/gl_ES.po b/contract/i18n/gl_ES.po
index 6795e6710d..390fd8a907 100644
--- a/contract/i18n/gl_ES.po
+++ b/contract/i18n/gl_ES.po
@@ -368,6 +368,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/he.po b/contract/i18n/he.po
index aad3994f04..cbb09c224d 100644
--- a/contract/i18n/he.po
+++ b/contract/i18n/he.po
@@ -367,6 +367,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/hi_IN.po b/contract/i18n/hi_IN.po
index 1f751d7dfd..5fc9570e29 100644
--- a/contract/i18n/hi_IN.po
+++ b/contract/i18n/hi_IN.po
@@ -368,6 +368,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/hr.po b/contract/i18n/hr.po
index 90685f2c76..f7c4f0f447 100644
--- a/contract/i18n/hr.po
+++ b/contract/i18n/hr.po
@@ -372,6 +372,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/hr_HR.po b/contract/i18n/hr_HR.po
index d9bc8f7ec3..d3f2af5f9d 100644
--- a/contract/i18n/hr_HR.po
+++ b/contract/i18n/hr_HR.po
@@ -369,6 +369,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/hu.po b/contract/i18n/hu.po
index e12ef73fab..9b3834e9b3 100644
--- a/contract/i18n/hu.po
+++ b/contract/i18n/hu.po
@@ -367,6 +367,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/id.po b/contract/i18n/id.po
index 359b724895..43fa5705bc 100644
--- a/contract/i18n/id.po
+++ b/contract/i18n/id.po
@@ -367,6 +367,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/it.po b/contract/i18n/it.po
index ac36f6a66e..f0d43713bc 100644
--- a/contract/i18n/it.po
+++ b/contract/i18n/it.po
@@ -472,6 +472,12 @@ msgstr "Annulla"
msgid "Canceled"
msgstr "Annullata"
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/ja.po b/contract/i18n/ja.po
index 2af680f719..2c72a3f945 100644
--- a/contract/i18n/ja.po
+++ b/contract/i18n/ja.po
@@ -367,6 +367,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/ko.po b/contract/i18n/ko.po
index b31e8ae1db..2839ffa3b0 100644
--- a/contract/i18n/ko.po
+++ b/contract/i18n/ko.po
@@ -367,6 +367,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/lt.po b/contract/i18n/lt.po
index 207162c984..dd3d5ee32f 100644
--- a/contract/i18n/lt.po
+++ b/contract/i18n/lt.po
@@ -368,6 +368,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/lt_LT.po b/contract/i18n/lt_LT.po
index 2f43b6c983..63826d8d0f 100644
--- a/contract/i18n/lt_LT.po
+++ b/contract/i18n/lt_LT.po
@@ -369,6 +369,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/lv.po b/contract/i18n/lv.po
index edcf7db997..a04b3c1b86 100644
--- a/contract/i18n/lv.po
+++ b/contract/i18n/lv.po
@@ -368,6 +368,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/mk.po b/contract/i18n/mk.po
index 4248bed571..b8bc8fb402 100644
--- a/contract/i18n/mk.po
+++ b/contract/i18n/mk.po
@@ -367,6 +367,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/mn.po b/contract/i18n/mn.po
index c348714e40..4dda52e98b 100644
--- a/contract/i18n/mn.po
+++ b/contract/i18n/mn.po
@@ -367,6 +367,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/nb.po b/contract/i18n/nb.po
index 922f9d75c6..1e6a6e0900 100644
--- a/contract/i18n/nb.po
+++ b/contract/i18n/nb.po
@@ -368,6 +368,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/nb_NO.po b/contract/i18n/nb_NO.po
index 739bc84933..6416ae058a 100644
--- a/contract/i18n/nb_NO.po
+++ b/contract/i18n/nb_NO.po
@@ -368,6 +368,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/nl.po b/contract/i18n/nl.po
index 1796dfad5c..29bbac3e6b 100644
--- a/contract/i18n/nl.po
+++ b/contract/i18n/nl.po
@@ -380,6 +380,12 @@ msgstr "Annuleren"
msgid "Canceled"
msgstr "Geannuleerd"
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/nl_BE.po b/contract/i18n/nl_BE.po
index c7aa65ff3c..41be039c8d 100644
--- a/contract/i18n/nl_BE.po
+++ b/contract/i18n/nl_BE.po
@@ -368,6 +368,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/nl_NL.po b/contract/i18n/nl_NL.po
index be3e87b80f..1fa421167e 100644
--- a/contract/i18n/nl_NL.po
+++ b/contract/i18n/nl_NL.po
@@ -368,6 +368,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/pl.po b/contract/i18n/pl.po
index 10e94e2e00..e7168f4feb 100644
--- a/contract/i18n/pl.po
+++ b/contract/i18n/pl.po
@@ -369,6 +369,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/pt.po b/contract/i18n/pt.po
index 7b7b16abf9..4d6d55432b 100644
--- a/contract/i18n/pt.po
+++ b/contract/i18n/pt.po
@@ -369,6 +369,12 @@ msgstr "Cancelar"
msgid "Canceled"
msgstr "Cancelado"
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/pt_BR.po b/contract/i18n/pt_BR.po
index 987f58591f..627a807ee7 100644
--- a/contract/i18n/pt_BR.po
+++ b/contract/i18n/pt_BR.po
@@ -382,6 +382,12 @@ msgstr "Cancelar"
msgid "Canceled"
msgstr "Cancelado"
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/pt_PT.po b/contract/i18n/pt_PT.po
index 1bc72f3d2d..5b4d5013dd 100644
--- a/contract/i18n/pt_PT.po
+++ b/contract/i18n/pt_PT.po
@@ -369,6 +369,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/ro.po b/contract/i18n/ro.po
index 7a8d7228cc..c50ad1a0d9 100644
--- a/contract/i18n/ro.po
+++ b/contract/i18n/ro.po
@@ -368,6 +368,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/ru.po b/contract/i18n/ru.po
index 0bb743da01..8970736c58 100644
--- a/contract/i18n/ru.po
+++ b/contract/i18n/ru.po
@@ -369,6 +369,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/sk.po b/contract/i18n/sk.po
index b21bbf1de6..362acb2b12 100644
--- a/contract/i18n/sk.po
+++ b/contract/i18n/sk.po
@@ -367,6 +367,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/sk_SK.po b/contract/i18n/sk_SK.po
index 4554078b9d..cbaff02465 100644
--- a/contract/i18n/sk_SK.po
+++ b/contract/i18n/sk_SK.po
@@ -368,6 +368,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/sl.po b/contract/i18n/sl.po
index 888d83d946..87442c5ce3 100644
--- a/contract/i18n/sl.po
+++ b/contract/i18n/sl.po
@@ -369,6 +369,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/sr.po b/contract/i18n/sr.po
index d328fd35af..0eb691dcbd 100644
--- a/contract/i18n/sr.po
+++ b/contract/i18n/sr.po
@@ -368,6 +368,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/sr@latin.po b/contract/i18n/sr@latin.po
index 58ab46b716..9c584064ff 100644
--- a/contract/i18n/sr@latin.po
+++ b/contract/i18n/sr@latin.po
@@ -369,6 +369,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/sv.po b/contract/i18n/sv.po
index cac5eb2241..bccf459127 100644
--- a/contract/i18n/sv.po
+++ b/contract/i18n/sv.po
@@ -472,6 +472,12 @@ msgstr "Avbryt"
msgid "Canceled"
msgstr "Annullerad"
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/th.po b/contract/i18n/th.po
index e78b69b41b..9f987e42c5 100644
--- a/contract/i18n/th.po
+++ b/contract/i18n/th.po
@@ -367,6 +367,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/tr.po b/contract/i18n/tr.po
index 0aa97117c0..3aa782179d 100644
--- a/contract/i18n/tr.po
+++ b/contract/i18n/tr.po
@@ -394,6 +394,12 @@ msgstr "İptal"
msgid "Canceled"
msgstr "İptal Edildi"
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/tr_TR.po b/contract/i18n/tr_TR.po
index fca63a35f4..f193d5a4f5 100644
--- a/contract/i18n/tr_TR.po
+++ b/contract/i18n/tr_TR.po
@@ -368,6 +368,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/uk.po b/contract/i18n/uk.po
index 2a803d3b49..9712d1dca7 100644
--- a/contract/i18n/uk.po
+++ b/contract/i18n/uk.po
@@ -368,6 +368,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/vi.po b/contract/i18n/vi.po
index f53cd986ff..1651273352 100644
--- a/contract/i18n/vi.po
+++ b/contract/i18n/vi.po
@@ -367,6 +367,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/vi_VN.po b/contract/i18n/vi_VN.po
index bbe64ad5aa..4fb8a5e616 100644
--- a/contract/i18n/vi_VN.po
+++ b/contract/i18n/vi_VN.po
@@ -368,6 +368,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/zh_CN.po b/contract/i18n/zh_CN.po
index adb74d733f..29adfc8784 100644
--- a/contract/i18n/zh_CN.po
+++ b/contract/i18n/zh_CN.po
@@ -371,6 +371,12 @@ msgstr "取消"
msgid "Canceled"
msgstr "已取消"
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/i18n/zh_TW.po b/contract/i18n/zh_TW.po
index 235b1a648f..ac10b6510a 100644
--- a/contract/i18n/zh_TW.po
+++ b/contract/i18n/zh_TW.po
@@ -372,6 +372,12 @@ msgstr ""
msgid "Canceled"
msgstr ""
+#. module: contract
+#. odoo-python
+#: code:addons/contract/models/contract_line.py:0
+msgid "Cannot compute total value for contract line '%s': no end date is set."
+msgstr ""
+
#. module: contract
#: model:ir.model.fields,field_description:contract.field_contract_line__product_uom_category_id
#: model:ir.model.fields,field_description:contract.field_contract_template_line__product_uom_category_id
diff --git a/contract/models/contract_line.py b/contract/models/contract_line.py
index bbc9ccda8d..a86aa706f8 100644
--- a/contract/models/contract_line.py
+++ b/contract/models/contract_line.py
@@ -8,8 +8,8 @@
from dateutil.relativedelta import relativedelta
-from odoo import api, fields, models
-from odoo.exceptions import ValidationError
+from odoo import _, api, fields, models
+from odoo.exceptions import UserError, ValidationError
# Months equivalent per recurrence unit (to normalise amounts to monthly)
_MONTHS_PER_RULE = {
@@ -345,3 +345,25 @@ def _get_quantity_to_invoice(
):
self.ensure_one()
return self.quantity if not self.display_type else 0.0
+
+ def _get_contract_line_total_value(self):
+ """Return the total value of this contract line over its full period.
+
+ Raises UserError if the line has no date_end, since a
+ total cannot be computed without a known end date.
+ """
+ self.ensure_one()
+ if not self.date_end:
+ raise UserError(
+ _(
+ "Cannot compute total value for contract line '%s': "
+ "no end date is set.",
+ self.display_name,
+ )
+ )
+ quantity = self._get_quantity_to_invoice(
+ self.date_start,
+ self.date_end,
+ self.date_start,
+ )
+ return quantity * self.price_unit
diff --git a/contract/static/description/index.html b/contract/static/description/index.html
index 1e829477cd..fb6eee5180 100644
--- a/contract/static/description/index.html
+++ b/contract/static/description/index.html
@@ -372,7 +372,7 @@
This module enables contracts management with recurring invoicing diff --git a/contract/tests/test_contract.py b/contract/tests/test_contract.py index 7e7029d0b8..96073b686f 100644 --- a/contract/tests/test_contract.py +++ b/contract/tests/test_contract.py @@ -10,7 +10,7 @@ from freezegun import freeze_time from odoo import Command, fields -from odoo.exceptions import ValidationError +from odoo.exceptions import UserError, ValidationError from odoo.tests import Form, common @@ -1610,3 +1610,61 @@ def test_analytic_distribution(self): self.assertEqual( new_contract_line.analytic_distribution, {str(analytic_account.id): 100} ) + + def test_get_contract_line_total_value_basic(self): + """Total value = quantity × price_unit over the full period.""" + self.acct_line.write( + { + "quantity": 3, + "price_unit": 400.0, + "date_start": "2026-01-01", + "date_end": "2026-12-31", + "recurring_next_date": "2026-01-01", + } + ) + self.assertEqual(self.acct_line._get_contract_line_total_value(), 3 * 400.0) + + def test_get_contract_line_total_value_single_unit(self): + self.acct_line.write( + { + "quantity": 1, + "price_unit": 1200.0, + "date_start": "2026-01-01", + "date_end": "2026-12-31", + "recurring_next_date": "2026-01-01", + } + ) + self.assertEqual(self.acct_line._get_contract_line_total_value(), 1200.0) + + def test_get_contract_line_total_value_zero_price(self): + self.acct_line.write( + { + "quantity": 5, + "price_unit": 0.0, + "date_start": "2026-01-01", + "date_end": "2026-06-30", + "recurring_next_date": "2026-01-01", + } + ) + self.assertEqual(self.acct_line._get_contract_line_total_value(), 0.0) + + def test_get_contract_line_total_value_no_date_end_raises(self): + """A line without date_end cannot compute a total: UserError expected.""" + line = self.env["contract.line"].new( + { + "contract_id": self.contract.id, + "product_id": self.product_1.id, + "name": "Test", + "quantity": 1, + "price_unit": 1000.0, + "date_start": to_date("2026-01-01"), + "recurring_next_date": to_date("2026-01-01"), + "recurring_interval": 1, + "recurring_rule_type": "monthly", + "recurring_invoicing_type": "pre-paid", + "uom_id": self.product_1.uom_id.id, + } + ) + line.date_end = False + with self.assertRaises(UserError): + line._get_contract_line_total_value()