From 3eb7483706dd02b73f33a6bbbed124f0fa462a15 Mon Sep 17 00:00:00 2001 From: Jordi Ballester Alomar Date: Wed, 23 Nov 2022 15:26:03 +0100 Subject: [PATCH] [IMP] centralize the logic to get the correct cost of the RMA. --- rma_purchase/__manifest__.py | 2 +- rma_purchase/models/procurement.py | 49 --------------------------- rma_purchase/models/rma_order_line.py | 22 ++++++++++++ 3 files changed, 23 insertions(+), 50 deletions(-) diff --git a/rma_purchase/__manifest__.py b/rma_purchase/__manifest__.py index 153e14d6..addcbc58 100644 --- a/rma_purchase/__manifest__.py +++ b/rma_purchase/__manifest__.py @@ -2,7 +2,7 @@ # License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html) { "name": "RMA Purchase", - "version": "15.0.1.0.0", + "version": "15.0.1.0.1", "category": "RMA", "summary": "RMA from PO", "license": "LGPL-3", diff --git a/rma_purchase/models/procurement.py b/rma_purchase/models/procurement.py index b551873e..e065cfe9 100644 --- a/rma_purchase/models/procurement.py +++ b/rma_purchase/models/procurement.py @@ -4,55 +4,6 @@ from odoo import fields, models -class StockRule(models.Model): - _inherit = "stock.rule" - - def _get_stock_move_values( - self, - product_id, - product_qty, - product_uom, - location_id, - name, - origin, - company_id, - values, - ): - res = super(StockRule, self)._get_stock_move_values( - product_id, - product_qty, - product_uom, - location_id, - name, - origin, - company_id, - values, - ) - if "rma_line_id" in values: - line = values.get("rma_line_id") - line = self.env["rma.order.line"].browse([line]) - if line.reference_move_id: - return res - if line.purchase_order_line_id: - moves = line.purchase_order_line_id.move_ids - if moves: - # TODO: Should we be smart in the choice of the move? - layers = moves.mapped("stock_valuation_layer_ids") - if layers: - cost = layers[-1].unit_cost - res["price_unit"] = cost - elif line.account_move_line_id.purchase_line_id: - purchase_lines = line.account_move_line_id.purchase_line_id - moves = purchase_lines.mapped("move_ids") - if moves: - layers = moves.mapped("stock_valuation_layer_ids") - if layers: - cost = layers[-1].unit_cost - # TODO: Should we be smart in the choice of the move? - res["price_unit"] = cost - return res - - class ProcurementGroup(models.Model): _inherit = "procurement.group" diff --git a/rma_purchase/models/rma_order_line.py b/rma_purchase/models/rma_order_line.py index 319ac080..b2dbc378 100644 --- a/rma_purchase/models/rma_order_line.py +++ b/rma_purchase/models/rma_order_line.py @@ -223,3 +223,25 @@ class RmaOrderLine(models.Model): ): qty += self.uom_id._compute_quantity(line.product_qty, line.product_uom) return qty + + def _get_price_unit(self): + self.ensure_one() + price_unit = super(RmaOrderLine, self)._get_price_unit() + if self.purchase_order_line_id: + moves = self.purchase_order_line_id.move_ids + if moves: + layers = moves.sudo().mapped("stock_valuation_layer_ids") + if layers: + price_unit = sum(layers.mapped("value")) / sum( + layers.mapped("quantity") + ) + elif self.account_move_line_id.purchase_line_id: + purchase_lines = self.account_move_line_id.purchase_line_id + moves = purchase_lines.mapped("move_ids") + if moves: + layers = moves.sudo().mapped("stock_valuation_layer_ids") + if layers: + price_unit = sum(layers.mapped("value")) / sum( + layers.mapped("quantity") + ) + return price_unit