From 92a1b511c13f1558a953fd464da0510f11e87423 Mon Sep 17 00:00:00 2001 From: Alexis de Lattre Date: Wed, 29 Nov 2023 16:51:15 +0100 Subject: [PATCH] purchase_stock_usability: add product_supplier_code in tree view of stock.move and stock.move.line purchase_usability: improve computation of product_supplier_code on purchase order line --- purchase_stock_usability/__manifest__.py | 2 ++ purchase_stock_usability/models/__init__.py | 2 ++ purchase_stock_usability/models/stock_move.py | 32 ++++++++++++++++++ .../models/stock_move_line.py | 33 +++++++++++++++++++ purchase_stock_usability/views/stock_move.xml | 21 ++++++++++++ .../views/stock_move_line.xml | 31 +++++++++++++++++ .../views/stock_picking.xml | 3 ++ purchase_usability/models/purchase_order.py | 14 +++++--- 8 files changed, 134 insertions(+), 4 deletions(-) create mode 100644 purchase_stock_usability/models/stock_move.py create mode 100644 purchase_stock_usability/models/stock_move_line.py create mode 100644 purchase_stock_usability/views/stock_move.xml create mode 100644 purchase_stock_usability/views/stock_move_line.xml diff --git a/purchase_stock_usability/__manifest__.py b/purchase_stock_usability/__manifest__.py index bc19857..55fcaff 100644 --- a/purchase_stock_usability/__manifest__.py +++ b/purchase_stock_usability/__manifest__.py @@ -25,6 +25,8 @@ This module has been written by Alexis de Lattre from Akretion France. 'data': [ 'views/stock_picking.xml', 'views/purchase_order.xml', + 'views/stock_move.xml', + 'views/stock_move_line.xml', ], 'installable': True, } diff --git a/purchase_stock_usability/models/__init__.py b/purchase_stock_usability/models/__init__.py index 370f577..587d01d 100644 --- a/purchase_stock_usability/models/__init__.py +++ b/purchase_stock_usability/models/__init__.py @@ -1 +1,3 @@ from . import purchase +from . import stock_move +from . import stock_move_line diff --git a/purchase_stock_usability/models/stock_move.py b/purchase_stock_usability/models/stock_move.py new file mode 100644 index 0000000..b87676f --- /dev/null +++ b/purchase_stock_usability/models/stock_move.py @@ -0,0 +1,32 @@ +# Copyright 2023 Akretion France (http://www.akretion.com) +# @author Alexis de Lattre +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class StockMove(models.Model): + _inherit = 'stock.move' + + # for optional display in tree view + product_supplier_code = fields.Char( + compute='_compute_product_supplier_code', string="Vendor Product Code") + + def _compute_product_supplier_code(self): + pso = self.env['product.supplierinfo'] + for move in self: + code = False + if move.purchase_line_id and move.purchase_line_id.order_id: + po = move.purchase_line_id.order_id + partner_id = po.partner_id.commercial_partner_id.id + if partner_id: + sinfo = pso.search_read([ + ('product_code', '!=', False), + ('partner_id', '=', partner_id), + ('company_id', 'in', (False, move.company_id.id)), + ('product_id', 'in', (False, move.product_id.id)), + ], ['product_code'], limit=1, order='product_id') + # if I order by product_id, I get the null values at the end + if sinfo: + code = sinfo[0]['product_code'] + move.product_supplier_code = code diff --git a/purchase_stock_usability/models/stock_move_line.py b/purchase_stock_usability/models/stock_move_line.py new file mode 100644 index 0000000..455d861 --- /dev/null +++ b/purchase_stock_usability/models/stock_move_line.py @@ -0,0 +1,33 @@ +# Copyright 2023 Akretion France (http://www.akretion.com) +# @author Alexis de Lattre +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class StockMoveLine(models.Model): + _inherit = 'stock.move.line' + + # for optional display in tree view + product_supplier_code = fields.Char( + compute='_compute_product_supplier_code', string="Vendor Product Code") + + def _compute_product_supplier_code(self): + pso = self.env['product.supplierinfo'] + for mline in self: + code = False + move = mline.move_id + if move and move.purchase_line_id and move.purchase_line_id.order_id: + po = move.purchase_line_id.order_id + partner_id = po.partner_id.commercial_partner_id.id + if partner_id: + sinfo = pso.search_read([ + ('product_code', '!=', False), + ('partner_id', '=', partner_id), + ('company_id', 'in', (False, mline.company_id.id)), + ('product_id', 'in', (False, mline.product_id.id)), + ], ['product_code'], limit=1, order='product_id') + # if I order by product_id, I get the null values at the end + if sinfo: + code = sinfo[0]['product_code'] + mline.product_supplier_code = code diff --git a/purchase_stock_usability/views/stock_move.xml b/purchase_stock_usability/views/stock_move.xml new file mode 100644 index 0000000..29219f4 --- /dev/null +++ b/purchase_stock_usability/views/stock_move.xml @@ -0,0 +1,21 @@ + + + + + + + stock.move + + + + + + + + + + diff --git a/purchase_stock_usability/views/stock_move_line.xml b/purchase_stock_usability/views/stock_move_line.xml new file mode 100644 index 0000000..6643314 --- /dev/null +++ b/purchase_stock_usability/views/stock_move_line.xml @@ -0,0 +1,31 @@ + + + + + + + stock.move.line + + + + + + + + + + + stock.move.line + + + + + + + + + diff --git a/purchase_stock_usability/views/stock_picking.xml b/purchase_stock_usability/views/stock_picking.xml index a372f14..5295196 100644 --- a/purchase_stock_usability/views/stock_picking.xml +++ b/purchase_stock_usability/views/stock_picking.xml @@ -16,6 +16,9 @@ + + + diff --git a/purchase_usability/models/purchase_order.py b/purchase_usability/models/purchase_order.py index 54ce2af..76db2cc 100644 --- a/purchase_usability/models/purchase_order.py +++ b/purchase_usability/models/purchase_order.py @@ -79,15 +79,21 @@ class PurchaseOrderLine(models.Model): compute='_compute_product_supplier_code', string='Vendor Product Code') def _compute_product_supplier_code(self): + pso = self.env['product.supplierinfo'] for line in self: code = False if not line.display_type and line.product_id and line.order_id: partner_id = line.order_id.partner_id.commercial_partner_id.id if partner_id: - for supplier_info in line.product_id.seller_ids: - if supplier_info.partner_id.id == partner_id: - code = supplier_info.product_code - break + sinfo = pso.search_read([ + ('product_code', '!=', False), + ('partner_id', '=', partner_id), + ('company_id', 'in', (False, line.order_id.company_id.id)), + ('product_id', 'in', (False, line.product_id.id)), + ], ['product_code'], limit=1, order='product_id') + # if I order by product_id, I get the null values at the end + if sinfo: + code = sinfo[0]['product_code'] line.product_supplier_code = code def _get_product_purchase_description(self, product_lang):