From 36f277940cdabb1f600cc51fc6156e90ce453f05 Mon Sep 17 00:00:00 2001 From: Alexis de Lattre Date: Mon, 30 Sep 2024 07:40:24 +0200 Subject: [PATCH] [MIG] partner_products_shortcut to v16 --- partner_products_shortcut/__init__.py | 1 + partner_products_shortcut/__manifest__.py | 27 +++++++++++++ partner_products_shortcut/res_partner.py | 38 ++++++++++++++++++ .../res_partner_view.xml | 27 +++++++++++++ .../static/description/icon.png | Bin 0 -> 18643 bytes 5 files changed, 93 insertions(+) create mode 100644 partner_products_shortcut/__init__.py create mode 100644 partner_products_shortcut/__manifest__.py create mode 100644 partner_products_shortcut/res_partner.py create mode 100644 partner_products_shortcut/res_partner_view.xml create mode 100644 partner_products_shortcut/static/description/icon.png diff --git a/partner_products_shortcut/__init__.py b/partner_products_shortcut/__init__.py new file mode 100644 index 0000000..91fed54 --- /dev/null +++ b/partner_products_shortcut/__init__.py @@ -0,0 +1 @@ +from . import res_partner diff --git a/partner_products_shortcut/__manifest__.py b/partner_products_shortcut/__manifest__.py new file mode 100644 index 0000000..5b95ee4 --- /dev/null +++ b/partner_products_shortcut/__manifest__.py @@ -0,0 +1,27 @@ +# Copyright 2014-2024 Akretion (http://www.akretion.com) +# @author Alexis de Lattre +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + 'name': 'Partner Product Shortcut', + 'version': '16.0.1.0.0', + 'category': 'Contact Management', + 'license': 'AGPL-3', + 'summary': 'Adds a shortcut on partner form to the products supplied by this partner', + 'description': """ +Partner Product Shortcut +======================== + +Adds a smartbutton on partner form to the products supplied by this partner. + +This is an alternative to the OCA module `partner_supplierinfo_smartbutton `_ which adds a smartbutton on partner form to links to the related product.supplierinfo (and not to product.template like in this module). + +This module has been written by Alexis de Lattre from Akretion +. + """, + 'author': 'Akretion', + 'website': 'https://github.com/akretion/odoo-usability', + 'depends': ['product'], + 'data': ['res_partner_view.xml'], + 'installable': True, +} diff --git a/partner_products_shortcut/res_partner.py b/partner_products_shortcut/res_partner.py new file mode 100644 index 0000000..16f2aa6 --- /dev/null +++ b/partner_products_shortcut/res_partner.py @@ -0,0 +1,38 @@ +# Copyright 2014-2024 Akretion (http://www.akretion.com) +# @author Alexis de Lattre +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import models, fields, _ + + +class ResPartner(models.Model): + _inherit = 'res.partner' + + def _product_supplied_count(self): + for partner in self: + count = 0 + sellers = self.env['product.supplierinfo'].search( + [('partner_id', '=', partner.id)]) + if sellers: + count = self.env['product.template'].search_count( + [('seller_ids', 'in', sellers.ids)]) + partner.product_supplied_count = count + + product_supplied_count = fields.Integer( + compute='_product_supplied_count', string="# of Products Supplied", + ) + + def show_supplied_products(self): + self.ensure_one() + sellers = self.env['product.supplierinfo'].search( + [('partner_id', '=', self.id)]) + ptemplates = self.env['product.template'].search( + [('seller_ids', 'in', sellers.ids)]) + action = { + 'name': _('Products'), + 'type': "ir.actions.act_window", + "res_model": "product.template", + "view_mode": 'tree,kanban,form', + 'domain': f"[('id', 'in', {ptemplates.ids})]", + } + return action diff --git a/partner_products_shortcut/res_partner_view.xml b/partner_products_shortcut/res_partner_view.xml new file mode 100644 index 0000000..09b4ddf --- /dev/null +++ b/partner_products_shortcut/res_partner_view.xml @@ -0,0 +1,27 @@ + + + + + + + add.shortcut.to.product.variants.partner.form + res.partner + + +
+ +
+
+
+ +
diff --git a/partner_products_shortcut/static/description/icon.png b/partner_products_shortcut/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6f980f239a7b340d06a3c23c257d62bd180f987a GIT binary patch literal 18643 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�VN^NdG)7V64&5~y<0Vm;vgPDz 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ν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 literal 0 HcmV?d00001