From 68a816c8db0cee35a169df0899af4819cdff4048 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Thu, 19 Feb 2026 08:44:28 +0100 Subject: [PATCH 1/2] [IMP] sale_purchase_force_vendor: Add Vendor filter to sale order TT61030 --- .../views/sale_order_view.xml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/sale_purchase_force_vendor/views/sale_order_view.xml b/sale_purchase_force_vendor/views/sale_order_view.xml index c82733c2c89..b733f9ed1f9 100644 --- a/sale_purchase_force_vendor/views/sale_order_view.xml +++ b/sale_purchase_force_vendor/views/sale_order_view.xml @@ -33,4 +33,18 @@ + + sale.order.list.select + sale.order + + + + + + + From 5d2fb211f9baf5bb0710a58cefd9ae14da39630b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Thu, 19 Feb 2026 08:22:58 +0100 Subject: [PATCH 2/2] [IMP] sale_purchase_force_vendor: Add vendor_id field to sale report TT61030 --- sale_purchase_force_vendor/README.rst | 16 ++++++------- sale_purchase_force_vendor/__init__.py | 1 + sale_purchase_force_vendor/__manifest__.py | 1 + sale_purchase_force_vendor/report/__init__.py | 1 + .../report/sale_report.py | 24 +++++++++++++++++++ .../report/sale_report_views.xml | 20 ++++++++++++++++ .../static/description/index.html | 4 ++-- 7 files changed, 57 insertions(+), 10 deletions(-) create mode 100644 sale_purchase_force_vendor/report/__init__.py create mode 100644 sale_purchase_force_vendor/report/sale_report.py create mode 100644 sale_purchase_force_vendor/report/sale_report_views.xml diff --git a/sale_purchase_force_vendor/README.rst b/sale_purchase_force_vendor/README.rst index 134fc730c5c..28a3c3d8586 100644 --- a/sale_purchase_force_vendor/README.rst +++ b/sale_purchase_force_vendor/README.rst @@ -51,9 +51,9 @@ To configure this module, you need to: 5. Go to *Sale -> Products -> Products*. 6. Create a new product with the following options: - - [Puchase tab] \`Vendors\`: Set different vendors (Vendor A + Vendor - B). - - [Iventory tab] \`Routes\`: Buy and MTO + - [Puchase tab] \`Vendors\`: Set different vendors (Vendor A + + Vendor B). + - [Iventory tab] \`Routes\`: Buy and MTO Usage ===== @@ -61,8 +61,8 @@ Usage 1. Go to *Sale -> Orders -> Quotations* and create a new Quotation. 2. Create a new line with the following options: - - \`Route\`: MTO. - - \`Vendor\`: Vendor B. + - \`Route\`: MTO. + - \`Vendor\`: Vendor B. 3. Confirm sale order. 4. A new purchase order will have been created to Vendor B. @@ -91,10 +91,10 @@ Authors Contributors ------------ -- `Tecnativa `__: +- `Tecnativa `__: - - Víctor Martínez - - Pedro M. Baeza + - Víctor Martínez + - Pedro M. Baeza Maintainers ----------- diff --git a/sale_purchase_force_vendor/__init__.py b/sale_purchase_force_vendor/__init__.py index 0650744f6bc..bf588bc8b80 100644 --- a/sale_purchase_force_vendor/__init__.py +++ b/sale_purchase_force_vendor/__init__.py @@ -1 +1,2 @@ from . import models +from . import report diff --git a/sale_purchase_force_vendor/__manifest__.py b/sale_purchase_force_vendor/__manifest__.py index 2ae2d8fcbb9..5809eab7852 100644 --- a/sale_purchase_force_vendor/__manifest__.py +++ b/sale_purchase_force_vendor/__manifest__.py @@ -12,6 +12,7 @@ "data": [ "views/res_config_settings_view.xml", "views/sale_order_view.xml", + "report/sale_report_views.xml", ], "maintainers": ["victoralmau"], } diff --git a/sale_purchase_force_vendor/report/__init__.py b/sale_purchase_force_vendor/report/__init__.py new file mode 100644 index 00000000000..cd23411b84d --- /dev/null +++ b/sale_purchase_force_vendor/report/__init__.py @@ -0,0 +1 @@ +from . import sale_report diff --git a/sale_purchase_force_vendor/report/sale_report.py b/sale_purchase_force_vendor/report/sale_report.py new file mode 100644 index 00000000000..5f731a1f6bb --- /dev/null +++ b/sale_purchase_force_vendor/report/sale_report.py @@ -0,0 +1,24 @@ +# Copyright 2026 Tecnativa - Víctor Martínez +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html + +from odoo import fields, models + + +class SaleReport(models.Model): + _inherit = "sale.report" + + vendor_id = fields.Many2one( + comodel_name="res.partner", + string="Vendor", + readonly=True, + ) + + def _select_additional_fields(self): + res = super()._select_additional_fields() + res["vendor_id"] = "l.vendor_id" + return res + + def _group_by_sale(self): + group_by = super()._group_by_sale() + group_by += ", l.vendor_id" + return group_by diff --git a/sale_purchase_force_vendor/report/sale_report_views.xml b/sale_purchase_force_vendor/report/sale_report_views.xml new file mode 100644 index 00000000000..53f0afd0694 --- /dev/null +++ b/sale_purchase_force_vendor/report/sale_report_views.xml @@ -0,0 +1,20 @@ + + + + sale.report.search + sale.report + + + + + + + + + + + diff --git a/sale_purchase_force_vendor/static/description/index.html b/sale_purchase_force_vendor/static/description/index.html index 9c74e8e5ee8..8c75c66c1aa 100644 --- a/sale_purchase_force_vendor/static/description/index.html +++ b/sale_purchase_force_vendor/static/description/index.html @@ -399,8 +399,8 @@

Configuration

“Unarchived” MTO route.
  • Go to Sale -> Products -> Products.
  • Create a new product with the following options:
      -
    • [Puchase tab] `Vendors`: Set different vendors (Vendor A + Vendor -B).
    • +
    • [Puchase tab] `Vendors`: Set different vendors (Vendor A + +Vendor B).
    • [Iventory tab] `Routes`: Buy and MTO