Skip to content

Commit

Permalink
[IMP] product_contract: Set description under product name instead of…
Browse files Browse the repository at this point in the history
… description

Using the feature extraLines of Many2one field Component we can add the info under the product and avoid noice on the product description.

You can show this info on the description by using the system parameters:
    - product_contract.show_recurrency
    - product_contract.show_invoicing_type
    - product_contract.show_date
  • Loading branch information
CarlosRoca13 committed Jan 27, 2025
1 parent 891236a commit ed9cc64
Show file tree
Hide file tree
Showing 8 changed files with 209 additions and 142 deletions.
10 changes: 10 additions & 0 deletions product_contract/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,16 @@ invoice directly.
.. contents::
:local:

Configuration
=============

You can include the contract details on the sales order description by
using the following system parameters:

1. **Recurrency** -> product_contract.show_recurrency
2. **Invoicing Type** -> product_contract.show_invoicing_type
3. **Date** -> product_contract.show_date

Usage
=====

Expand Down
80 changes: 28 additions & 52 deletions product_contract/i18n/es.po
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-08-30 12:54+0000\n"
"PO-Revision-Date: 2024-08-30 15:06+0200\n"
"POT-Creation-Date: 2025-01-24 14:18+0000\n"
"PO-Revision-Date: 2025-01-24 15:19+0100\n"
"Last-Translator: Pedro M. Baeza <[email protected]>\n"
"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n"
"Language: es\n"
Expand All @@ -20,6 +20,27 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Poedit 3.0.1\n"

#. module: product_contract
#. odoo-python
#: code:addons/product_contract/models/sale_order_line.py:0
#, python-format
msgid "- Date: {}"
msgstr "- Fecha: {}"

#. module: product_contract
#. odoo-python
#: code:addons/product_contract/models/sale_order_line.py:0
#, python-format
msgid "- Invoicing Type: {}"
msgstr "- Tipo de facturación: {}"

#. module: product_contract
#. odoo-python
#: code:addons/product_contract/models/sale_order_line.py:0
#, python-format
msgid "- Recurrency: {}"
msgstr "- Recurrencia: {}"

#. module: product_contract
#: model_terms:ir.ui.view,arch_db:product_contract.contract_contract_customer_form_view
msgid "<span class=\"o_stat_text\">Sale Orders</span>"
Expand Down Expand Up @@ -361,6 +382,11 @@ msgstr "Producto"
msgid "Product Contract Configurator Wizard"
msgstr ""

#. module: product_contract
#: model:ir.model.fields,field_description:product_contract.field_sale_order_line__product_contract_description
msgid "Product Contract Description"
msgstr ""

#. module: product_contract
#: model:ir.model.fields,field_description:product_contract.field_product_contract_configurator__product_uom_qty
msgid "Quantity"
Expand Down Expand Up @@ -616,53 +642,3 @@ msgstr "Años"
#, python-format
msgid "You can't upsell or downsell a terminated contract"
msgstr "No puede vender o vender un contrato terminado"

#. module: product_contract
#. odoo-python
#: code:addons/product_contract/models/sale_order.py:0
#, python-format
msgid ""
"You must specify a contract template for '%(product_name)s' product in "
"'%(company_name)s' company."
msgstr ""
"Debes especificar una plantilla de contrato para el producto "
"'%(product_name)s' en la empresa '%(company_name)s'."

#. module: product_contract
#. odoo-python
#: code:addons/product_contract/models/sale_order_line.py:0
#, python-format
msgid ""
"{product}:\n"
" - Recurrency: {recurring_rule}\n"
" - Invoicing Type: {invoicing_type}\n"
" - Date: {date_text}\n"
" "
msgstr ""

#, python-format
#~ msgid ""
#~ "{product}\n"
#~ " - Recurrency: {recurring_rule}\n"
#~ " - Invoicing Type: {invoicing_type}\n"
#~ " - Date: {date_text}\n"
#~ " "
#~ msgstr ""
#~ "{product}\n"
#~ " - Periodicidad: {recurring_rule}\n"
#~ " - Tipo de facturación: {invoicing_type}\n"
#~ " - Fecha: {date_text}\n"
#~ " "

#~ msgid "Product Template"
#~ msgstr "Plantilla de producto"

#~ msgid "Sale Order"
#~ msgstr "Pedido de Venta"

#, python-format
#~ msgid ""
#~ "You must specify a contract template for '{}' product in '{}' company."
#~ msgstr ""
#~ "Debe especificar una plantilla de contrato para el producto '{}' en la "
#~ "compañía '{}'."
49 changes: 28 additions & 21 deletions product_contract/i18n/product_contract.pot
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,36 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 17.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-01-24 14:18+0000\n"
"PO-Revision-Date: 2025-01-24 14:18+0000\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: product_contract
#. odoo-python
#: code:addons/product_contract/models/sale_order_line.py:0
#, python-format
msgid "- Date: {}"
msgstr ""

#. module: product_contract
#. odoo-python
#: code:addons/product_contract/models/sale_order_line.py:0
#, python-format
msgid "- Invoicing Type: {}"
msgstr ""

#. module: product_contract
#. odoo-python
#: code:addons/product_contract/models/sale_order_line.py:0
#, python-format
msgid "- Recurrency: {}"
msgstr ""

#. module: product_contract
#: model_terms:ir.ui.view,arch_db:product_contract.contract_contract_customer_form_view
msgid "<span class=\"o_stat_text\">Sale Orders</span>"
Expand Down Expand Up @@ -354,6 +377,11 @@ msgstr ""
msgid "Product Contract Configurator Wizard"
msgstr ""

#. module: product_contract
#: model:ir.model.fields,field_description:product_contract.field_sale_order_line__product_contract_description
msgid "Product Contract Description"
msgstr ""

#. module: product_contract
#: model:ir.model.fields,field_description:product_contract.field_product_contract_configurator__product_uom_qty
msgid "Quantity"
Expand Down Expand Up @@ -559,24 +587,3 @@ msgstr ""
#, python-format
msgid "You can't upsell or downsell a terminated contract"
msgstr ""

#. module: product_contract
#. odoo-python
#: code:addons/product_contract/models/sale_order.py:0
#, python-format
msgid ""
"You must specify a contract template for '%(product_name)s' product in "
"'%(company_name)s' company."
msgstr ""

#. module: product_contract
#. odoo-python
#: code:addons/product_contract/models/sale_order_line.py:0
#, python-format
msgid ""
"{product}:\n"
" - Recurrency: {recurring_rule}\n"
" - Invoicing Type: {invoicing_type}\n"
" - Date: {date_text}\n"
" "
msgstr ""
152 changes: 97 additions & 55 deletions product_contract/models/sale_order_line.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,9 @@ class SaleOrderLine(models.Model):
contract_start_date_method = fields.Selection(
related="product_id.contract_start_date_method"
)
product_contract_description = fields.Text(
compute="_compute_product_contract_description"
)

@api.constrains("contract_id")
def _check_contact_is_not_terminated(self):
Expand Down Expand Up @@ -307,64 +310,103 @@ def _set_contract_line_start_date(self):
start_date = start_date + relativedelta(day=31)
line.date_start = start_date

@api.depends("product_id")
def _compute_name(self):
res = super()._compute_name()
for line in self:
if line.is_contract:
date_text = ""
if line.contract_start_date_method == "manual":
date_text = "%s" % line.date_start
if line.date_end:
date_text += " -> %s" % line.date_end
else:
field_info = dict(
line._fields["contract_start_date_method"].get_description(
self.env
)
)
field_selection = dict(field_info.get("selection"))
start_method_label = field_selection.get(
line.contract_start_date_method
)
date_text = "%s" % start_method_label
if (
line.recurring_rule_type != "monthly"
and line.product_id["force_month_%s" % line.recurring_rule_type]
):
field_info = dict(
self.env["product.template"]
._fields["force_month_%s" % line.recurring_rule_type]
.get_description(self.env)
)
field_selection = dict(field_info.get("selection"))
force_month_label = field_selection.get(
line.product_id["force_month_%s" % line.recurring_rule_type]
)
date_text += " (%s)" % force_month_label
field_info = dict(
self._fields["recurring_rule_type"].get_description(self.env)
)
field_selection = dict(field_info.get("selection"))
recurring_rule_label = field_selection.get(line.recurring_rule_type)
def _get_product_contract_date_text(self):
self.ensure_one()
date_text = ""

Check warning on line 315 in product_contract/models/sale_order_line.py

View check run for this annotation

Codecov / codecov/patch

product_contract/models/sale_order_line.py#L314-L315

Added lines #L314 - L315 were not covered by tests
if self.contract_start_date_method == "manual":
date_text = "%s" % self.date_start

Check warning on line 317 in product_contract/models/sale_order_line.py

View check run for this annotation

Codecov / codecov/patch

product_contract/models/sale_order_line.py#L317

Added line #L317 was not covered by tests
if self.date_end:
date_text += " -> %s" % self.date_end

Check warning on line 319 in product_contract/models/sale_order_line.py

View check run for this annotation

Codecov / codecov/patch

product_contract/models/sale_order_line.py#L319

Added line #L319 was not covered by tests
else:
field_info = dict(

Check warning on line 321 in product_contract/models/sale_order_line.py

View check run for this annotation

Codecov / codecov/patch

product_contract/models/sale_order_line.py#L321

Added line #L321 was not covered by tests
self._fields["contract_start_date_method"].get_description(self.env)
)
field_selection = dict(field_info.get("selection"))
start_method_label = field_selection.get(self.contract_start_date_method)
date_text = start_method_label and "%s" % start_method_label

Check warning on line 326 in product_contract/models/sale_order_line.py

View check run for this annotation

Codecov / codecov/patch

product_contract/models/sale_order_line.py#L324-L326

Added lines #L324 - L326 were not covered by tests
if (
self.recurring_rule_type != "monthly"
and self.product_id["force_month_%s" % self.recurring_rule_type]
):
field_info = dict(
self._fields["recurring_invoicing_type"].get_description(self.env)
self.env["product.template"]
._fields["force_month_%s" % self.recurring_rule_type]
.get_description(self.env)
)
field_selection = dict(field_info.get("selection"))
invoicing_type_label = field_selection.get(
line.recurring_invoicing_type
)
line.name = _(
"""{product}:
- Recurrency: {recurring_rule}
- Invoicing Type: {invoicing_type}
- Date: {date_text}
"""
).format(
product=line.product_id.display_name,
recurring_rule=recurring_rule_label,
invoicing_type=invoicing_type_label,
date_text=date_text,
force_month_label = field_selection.get(

Check warning on line 337 in product_contract/models/sale_order_line.py

View check run for this annotation

Codecov / codecov/patch

product_contract/models/sale_order_line.py#L337

Added line #L337 was not covered by tests
self.product_id["force_month_%s" % self.recurring_rule_type]
)
date_text += " (%s)" % force_month_label
return date_text and _("- Date: {}").format(date_text)

Check warning on line 341 in product_contract/models/sale_order_line.py

View check run for this annotation

Codecov / codecov/patch

product_contract/models/sale_order_line.py#L340-L341

Added lines #L340 - L341 were not covered by tests

def _get_product_contract_recurring_rule_label(self):
self.ensure_one()
field_info = dict(self._fields["recurring_rule_type"].get_description(self.env))
field_selection = dict(field_info.get("selection"))
recurring_rule_label = field_selection.get(self.recurring_rule_type)
return recurring_rule_label and _("- Recurrency: {}").format(

Check warning on line 348 in product_contract/models/sale_order_line.py

View check run for this annotation

Codecov / codecov/patch

product_contract/models/sale_order_line.py#L344-L348

Added lines #L344 - L348 were not covered by tests
recurring_rule_label
)

def _get_product_contract_invoicing_type_label(self):
field_info = dict(

Check warning on line 353 in product_contract/models/sale_order_line.py

View check run for this annotation

Codecov / codecov/patch

product_contract/models/sale_order_line.py#L353

Added line #L353 was not covered by tests
self._fields["recurring_invoicing_type"].get_description(self.env)
)
field_selection = dict(field_info.get("selection"))
invoicing_type_label = field_selection.get(self.recurring_invoicing_type)
return invoicing_type_label and _("- Invoicing Type: {}").format(

Check warning on line 358 in product_contract/models/sale_order_line.py

View check run for this annotation

Codecov / codecov/patch

product_contract/models/sale_order_line.py#L356-L358

Added lines #L356 - L358 were not covered by tests
invoicing_type_label
)

@api.depends(
"product_id",
"date_start",
"date_end",
"recurring_rule_type",
"recurring_invoicing_type",
)
def _compute_product_contract_description(self):
self.product_contract_description = False

Check warning on line 370 in product_contract/models/sale_order_line.py

View check run for this annotation

Codecov / codecov/patch

product_contract/models/sale_order_line.py#L370

Added line #L370 was not covered by tests
for line in self:
if line.is_contract:
description = ""

Check warning on line 373 in product_contract/models/sale_order_line.py

View check run for this annotation

Codecov / codecov/patch

product_contract/models/sale_order_line.py#L373

Added line #L373 was not covered by tests
if (
recurring_rule_label
:= line._get_product_contract_recurring_rule_label()
):
description += recurring_rule_label + "||"

Check warning on line 378 in product_contract/models/sale_order_line.py

View check run for this annotation

Codecov / codecov/patch

product_contract/models/sale_order_line.py#L378

Added line #L378 was not covered by tests
if (
invoicing_type_label
:= line._get_product_contract_invoicing_type_label()
):
description += invoicing_type_label + "||"

Check warning on line 383 in product_contract/models/sale_order_line.py

View check run for this annotation

Codecov / codecov/patch

product_contract/models/sale_order_line.py#L383

Added line #L383 was not covered by tests
if date_text := line._get_product_contract_date_text():
description += date_text + "||"
line.product_contract_description = description

Check warning on line 386 in product_contract/models/sale_order_line.py

View check run for this annotation

Codecov / codecov/patch

product_contract/models/sale_order_line.py#L385-L386

Added lines #L385 - L386 were not covered by tests

@api.depends(
"date_start", "date_end", "recurring_rule_type", "recurring_invoicing_type"
)
def _compute_name(self):
res = super()._compute_name()
ICP = self.env["ir.config_parameter"].sudo()
for line in self:
if line.is_contract:
description = ""
if ICP.get_param("product_contract.show_recurrency") and (
recurring_rule_label
:= line._get_product_contract_recurring_rule_label()
):
description += "\n\t" + recurring_rule_label

Check warning on line 401 in product_contract/models/sale_order_line.py

View check run for this annotation

Codecov / codecov/patch

product_contract/models/sale_order_line.py#L401

Added line #L401 was not covered by tests
if ICP.get_param("product_contract.show_invoicing_type") and (
invoicing_type_label
:= line._get_product_contract_invoicing_type_label()
):
description += "\n\t" + invoicing_type_label

Check warning on line 406 in product_contract/models/sale_order_line.py

View check run for this annotation

Codecov / codecov/patch

product_contract/models/sale_order_line.py#L406

Added line #L406 was not covered by tests
if ICP.get_param("product_contract.show_date") and (
date_text := line._get_product_contract_date_text()
):
description += "\n\t" + date_text

Check warning on line 410 in product_contract/models/sale_order_line.py

View check run for this annotation

Codecov / codecov/patch

product_contract/models/sale_order_line.py#L410

Added line #L410 was not covered by tests
line.name = f"{line.product_id.display_name}{description}"
return res
5 changes: 5 additions & 0 deletions product_contract/readme/CONFIGURE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
You can include the contract details on the sales order description by using the following system parameters:

1. **Recurrency** -\> product_contract.show_recurrency
2. **Invoicing Type** -\> product_contract.show_invoicing_type
3. **Date** -\> product_contract.show_date
Loading

0 comments on commit ed9cc64

Please sign in to comment.