From 5137d235622260b66923862262c97f3cc4e3e005 Mon Sep 17 00:00:00 2001 From: xtremxpert Date: Wed, 30 Jul 2025 14:16:37 -0400 Subject: [PATCH] product_pricelist_supplierinfo_chatter --- .../__init__.py | 3 + .../__manifest__.py | 32 ++++ .../models/__init__.py | 1 + .../models/product_supplier_info.py | 146 ++++++++++++++++++ .../static/description/icon.png | Bin 0 -> 13986 bytes .../views/product_view.xml | 36 +++++ .../views/supplierinfo_pricelist.xml | 75 +++++++++ 7 files changed, 293 insertions(+) create mode 100644 product_pricelist_supplierinfo_chatter/__init__.py create mode 100755 product_pricelist_supplierinfo_chatter/__manifest__.py create mode 100644 product_pricelist_supplierinfo_chatter/models/__init__.py create mode 100755 product_pricelist_supplierinfo_chatter/models/product_supplier_info.py create mode 100755 product_pricelist_supplierinfo_chatter/static/description/icon.png create mode 100755 product_pricelist_supplierinfo_chatter/views/product_view.xml create mode 100644 product_pricelist_supplierinfo_chatter/views/supplierinfo_pricelist.xml diff --git a/product_pricelist_supplierinfo_chatter/__init__.py b/product_pricelist_supplierinfo_chatter/__init__.py new file mode 100644 index 0000000..cde864b --- /dev/null +++ b/product_pricelist_supplierinfo_chatter/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import models diff --git a/product_pricelist_supplierinfo_chatter/__manifest__.py b/product_pricelist_supplierinfo_chatter/__manifest__.py new file mode 100755 index 0000000..e1f95d3 --- /dev/null +++ b/product_pricelist_supplierinfo_chatter/__manifest__.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- + +{ + "name": "Product Pricelist Supplierinfo Chatter", + "version": "18.0.3.0.0", + "license": "AGPL-3", + "author": "Bemade", + "category": "Tools", + "depends": [ + "base", + "product", + "stock", + "product_pricelist_supplierinfo", + "sale", + "purchase", + "mrp", + ], + "description": """ + This module extends basic inventory and pricelist management in + Odoo to include support for supplierinfo chatter making price + updates visible in the chatter. + """, + "demo": [], + 'data': [ + 'views/product_view.xml', + 'views/supplierinfo_pricelist.xml', + ], + 'test': [], + 'installable': True, + 'active': False +} +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/product_pricelist_supplierinfo_chatter/models/__init__.py b/product_pricelist_supplierinfo_chatter/models/__init__.py new file mode 100644 index 0000000..937da63 --- /dev/null +++ b/product_pricelist_supplierinfo_chatter/models/__init__.py @@ -0,0 +1 @@ +from . import product_supplier_info \ No newline at end of file diff --git a/product_pricelist_supplierinfo_chatter/models/product_supplier_info.py b/product_pricelist_supplierinfo_chatter/models/product_supplier_info.py new file mode 100755 index 0000000..344ab25 --- /dev/null +++ b/product_pricelist_supplierinfo_chatter/models/product_supplier_info.py @@ -0,0 +1,146 @@ +# -*- coding: utf-8 -*- + +from odoo import models, fields, api +from markupsafe import Markup + + +class ProductSupplierInfo(models.Model): + _name = "product.supplierinfo" + _inherit = ["product.supplierinfo", "mail.thread", "mail.activity.mixin"] + + # Commented out because breaking basic Odoo tests. See if this is really needed. + + # _sql_constraints = [("supplierinfo_product_tmpl_id_no_null", + # "CHECK((product_tmpl_id IS NOT NULL))", + # "Supplier pricelist need product template"), + # ] + + # This while avoid the database to save those record with lost product_tmpl_id + @api.depends("supplier_list_price", "supplier_discount_percent") + def _compute_price(self): + for rec in self: + rec.price = rec.supplier_list_price - ( + rec.supplier_list_price * rec.supplier_discount_percent / 100 + ) + + @api.depends("supplier_discount_percent") + def _inverse_price(self): + for rec in self: + discount = ( + rec.supplier_discount_percent if rec.supplier_discount_percent else 0 + ) + rec.supplier_list_price = (100 * rec.price) / (100 - discount) + + # We add tracking to the fields that are displayed in the chatter + partner_id = fields.Many2one( + tracking=True, + domain=[("is_company", "=", True)] + ) + + product_name = fields.Char(tracking=True) + product_code = fields.Char(tracking=True) + product_uom = fields.Many2one(tracking=True) + min_qty = fields.Float(tracking=True) + currency_id = fields.Many2one(tracking=True) + date_start = fields.Date(tracking=True) + date_end = fields.Date(tracking=True) + product_id = fields.Many2one(tracking=True) + product_tmpl_id = fields.Many2one(tracking=True) + delay = fields.Integer(tracking=True) + + date_updated = fields.Date( + string="Last updated", + help="Date at which the supplier " + " list price was last updated.", + ) + + purchasing_notes = fields.Text( + tracking=True, + string="Purchasing Notes" + ) + + supplier_list_price = fields.Float( + string="Supplier List Price", + digits="Product Price", + tracking=True, + help="""This the supplier list price to which supplier discounts are applied, if + any, and the net price if no supplier discounts are to be applied""", + ) + + supplier_discount_percent = fields.Float( + string="Supplier discount (%)", + digits="Product Price", + tracking=True, + default=0 + ) + + price = fields.Float( + compute="_compute_price", + inverse="_inverse_price", + string="Supplier Price", + digits="Product Price", + help="This price will be considered as a price for the supplier UoM if any or " + "the default Unit of Measure of the product otherwise", + store=True, + ) + + def _generate_chatter(self, vals, operation): + if len(self) == 1 and self.product_tmpl_id: + msg = "" + headmsg = ( + f"" + f"Price {operation} for {self.product_id.name} :
" + ) + if self.min_qty > 0: + msg += f"
  • Minimum qty : {self.min_qty}
  • " + if self.date_start: + msg += f"
  • Starting : {self.date_start}
  • " + if self.date_end: + msg += f"
  • Ending : {self.date_end}
  • " + if msg: + msg = headmsg + "" + else: + msg = headmsg + for change in vals: + msg += f"{change} --> {vals[change]}
    " + # Should always be there + if self.product_tmpl_id: + self.product_tmpl_id.message_post( + body=Markup(msg), + ) + # only for variant + if self.product_id: + self.product_id.message_post(body=Markup(msg)) + + # Well hard time to set the chatter + # def create(self, vals): + # res = super(ProductSupplierInfo, self).create(vals) + # # # res._generate_chatter(vals, 'create') + + def write(self, vals): + res = super(ProductSupplierInfo, self).write(vals) + self._generate_chatter(vals, "modify") + return res + + def suplierinfo_show_details(self): + """ + Action to open product.supplierinfo (pricelist) in its own windows and not in a javascript + popup to avoid loosing product_tmpl_id. We rely on both context and domain to pass the + information + """ + # views = [(self.env.ref('account.invoice_supplier_tree').id, 'tree'), + # (self.env.ref('account.invoice_supplier_form').id, 'form')] + return { + "name": "Supplier price", + "view_type": "form", + "view_mode": "form", + "res_id": self.id, + "context": self.env.context, + "res_model": "product.supplierinfo", + "domain": [ + ("product_tmpl_id", "=", self.product_tmpl_id), + ("product_id", "=", self.product_id), + ], + "type": "ir.actions.act_window", + # 'view_id': False, + # 'views': views, + } diff --git a/product_pricelist_supplierinfo_chatter/static/description/icon.png b/product_pricelist_supplierinfo_chatter/static/description/icon.png new file mode 100755 index 0000000000000000000000000000000000000000..0130194366529344db9db51e138a7c1f25cb0c80 GIT binary patch literal 13986 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 literal 0 HcmV?d00001 diff --git a/product_pricelist_supplierinfo_chatter/views/product_view.xml b/product_pricelist_supplierinfo_chatter/views/product_view.xml new file mode 100755 index 0000000..c3fea2e --- /dev/null +++ b/product_pricelist_supplierinfo_chatter/views/product_view.xml @@ -0,0 +1,36 @@ + + + + + product.supplierinfo.tree.no.edit + product.supplierinfo + + + + + + + + + + + + product.template.form.view.landed + + product.template + + + + + {'default_product_tmpl_id': id, + 'product_template_invisible_variant': True, + 'list_view_ref':'product_pricelist_supplierinfo_chatter.product_supplierinfo_tree_view_no_edit'} + + + + {'model': 'product.template', 'active_id': id, + 'list_view_ref':'product_pricelist_supplierinfo_chatter.product_supplierinfo_tree_view_no_edit'} + + + + \ No newline at end of file diff --git a/product_pricelist_supplierinfo_chatter/views/supplierinfo_pricelist.xml b/product_pricelist_supplierinfo_chatter/views/supplierinfo_pricelist.xml new file mode 100644 index 0000000..9d72f74 --- /dev/null +++ b/product_pricelist_supplierinfo_chatter/views/supplierinfo_pricelist.xml @@ -0,0 +1,75 @@ + + + + + supplierinfo.pricelist.chatter + product.supplierinfo + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    +
    +
    +
    +
    \ No newline at end of file