Skip to content
Permalink
Browse files

[FIX] sale_mrp: BOM selection for COGS

- Create the FIFO & Automated products:
  Kit ABC: 2 variants, e.g. Black and White, invoice on delivered qty
  Kit A
  Kit B
  Kit C
- Create the BOM for the variants of Kit ABC, in this order:
  Black: 1 unit of Kit A and 1 unit of Kit B
  White: 1 unit of Kit A and 1 unit of Kit C
- Receive the components
  Kit A: 10 USD
  Kit B: 12 USD
  Kit C: 13 USD
- Create a SO for Kit ABC (Black)
- Validate the picking, create and validate invoice

The COGS is incorrect: the amount is 23 instead of 22.

This happens because the BOM selected is always the first BOM of the
product template instead of the product-specific BOM.

We select the BOM the same way it is done when it is exploded in:

https://github.com/odoo/odoo/blob/95348a5e1dc4e69ce0edaf89de1124fe55ce4ec8/addons/mrp/models/stock_move.py#L161

Note that if the BOM changed between picking creation and invoice
validation, it will fail.

opw-2153629

closes #43268

X-original-commit: 7714f7c
Signed-off-by: Nicolas Martinelli (nim) <nim@odoo.com>
Co-authored-by: Nicolas Martinelli <nim@odoo.com>
  • Loading branch information
loan181 and nim-odoo committed Jan 9, 2020
1 parent a5872dc commit 31ca9f5a39ee11d11a549a056fa7ef738c83dfb3
Showing with 1 addition and 1 deletion.
  1. +1 −1 addons/sale_mrp/models/sale_mrp.py
@@ -121,7 +121,7 @@ def _get_anglo_saxon_price_unit(self):
# Go through all the moves and do nothing until you get to qty_done
# Beyond qty_done we need to calculate the average of the price_unit
# on the moves we encounter.
bom = s_line.product_id.product_tmpl_id.bom_ids and s_line.product_id.product_tmpl_id.bom_ids[0]
bom = self.env['mrp.bom'].sudo()._bom_find(product=s_line.product_id, company_id=s_line.company_id.id)
if bom.type == 'phantom':
average_price_unit = 0
components = s_line._get_bom_component_qty(bom)

0 comments on commit 31ca9f5

Please sign in to comment.
You can’t perform that action at this time.