diff --git a/product_contract/README.rst b/product_contract/README.rst index e9f75bda91..57cae6822b 100644 --- a/product_contract/README.rst +++ b/product_contract/README.rst @@ -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 ===== diff --git a/product_contract/i18n/es.po b/product_contract/i18n/es.po index a3ce0bd48d..4704f42aa4 100644 --- a/product_contract/i18n/es.po +++ b/product_contract/i18n/es.po @@ -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 \n" "Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n" "Language: es\n" @@ -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 "Sale Orders" @@ -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" @@ -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 '{}'." diff --git a/product_contract/i18n/product_contract.pot b/product_contract/i18n/product_contract.pot index 1d930281c0..9959a7344b 100644 --- a/product_contract/i18n/product_contract.pot +++ b/product_contract/i18n/product_contract.pot @@ -6,6 +6,8 @@ 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" @@ -13,6 +15,27 @@ msgstr "" "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 "Sale Orders" @@ -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" @@ -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 "" diff --git a/product_contract/models/sale_order_line.py b/product_contract/models/sale_order_line.py index fa86047c89..9354ac20b2 100644 --- a/product_contract/models/sale_order_line.py +++ b/product_contract/models/sale_order_line.py @@ -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): @@ -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 = "" + if self.contract_start_date_method == "manual": + date_text = "%s" % self.date_start + if self.date_end: + date_text += " -> %s" % self.date_end + else: + field_info = dict( + 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 + 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( + self.product_id["force_month_%s" % self.recurring_rule_type] ) + date_text += " (%s)" % force_month_label + return date_text and _("- Date: {}").format(date_text) + 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( + recurring_rule_label + ) + + def _get_product_contract_invoicing_type_label(self): + field_info = dict( + 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( + 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 + for line in self: + if line.is_contract: + description = "" + if ( + recurring_rule_label + := line._get_product_contract_recurring_rule_label() + ): + description += recurring_rule_label + "||" + if ( + invoicing_type_label + := line._get_product_contract_invoicing_type_label() + ): + description += invoicing_type_label + "||" + if date_text := line._get_product_contract_date_text(): + description += date_text + "||" + line.product_contract_description = description + + @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 + 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 + if ICP.get_param("product_contract.show_date") and ( + date_text := line._get_product_contract_date_text() + ): + description += "\n\t" + date_text + line.name = f"{line.product_id.display_name}{description}" return res diff --git a/product_contract/readme/CONFIGURE.md b/product_contract/readme/CONFIGURE.md new file mode 100644 index 0000000000..f988ceb63f --- /dev/null +++ b/product_contract/readme/CONFIGURE.md @@ -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 diff --git a/product_contract/static/description/index.html b/product_contract/static/description/index.html index 9dfa5c9ec0..7688ad1f81 100644 --- a/product_contract/static/description/index.html +++ b/product_contract/static/description/index.html @@ -379,19 +379,30 @@

Recurring - Product Contract

Table of contents

+
+

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. +
  3. Invoicing Type -> product_contract.show_invoicing_type
  4. +
  5. Date -> product_contract.show_date
  6. +
+
-

Usage

+

Usage

To use this module, you need to:

  1. Go to Sales -> Products and select or create a product.
  2. @@ -401,14 +412,14 @@

    Usage

-

Known issues / Roadmap

+

Known issues / Roadmap

-

Bug Tracker

+

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 @@ -416,16 +427,16 @@

Bug Tracker

Do not contact contributors directly about support or help with technical issues.

-

Credits

+

Credits

-

Authors

+

Authors

  • LasLabs
  • ACSONE SA/NV
-

Contributors

+

Contributors