mirror of
https://github.com/bringout/oca-ocb-accounting.git
synced 2026-04-24 01:02:06 +02:00
44 lines
1.9 KiB
Python
44 lines
1.9 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from collections import defaultdict
|
|
|
|
from odoo import models
|
|
|
|
|
|
class StockMove(models.Model):
|
|
_inherit = "stock.move"
|
|
|
|
def _get_value_from_production(self, quantity, at_date=None):
|
|
# TODO: Maybe move _cal_price here
|
|
self.ensure_one()
|
|
if not self.production_id:
|
|
return super()._get_value_from_production(quantity, at_date)
|
|
value = quantity * self.price_unit
|
|
return {
|
|
'value': value,
|
|
'quantity': quantity,
|
|
'description': self.env._('%(value)s for %(quantity)s %(unit)s from %(production)s',
|
|
value=self.company_currency_id.format(value), quantity=quantity, unit=self.product_id.uom_id.name,
|
|
production=self.production_id.display_name),
|
|
}
|
|
|
|
def _get_all_related_sm(self, product):
|
|
moves = super()._get_all_related_sm(product)
|
|
return moves | self.filtered(
|
|
lambda m:
|
|
m.bom_line_id.bom_id.type == 'phantom' and
|
|
m.bom_line_id.bom_id == moves.bom_line_id.bom_id
|
|
)
|
|
|
|
def _get_kit_price_unit(self, product, kit_bom, valuated_quantity):
|
|
""" Override the value for kit products """
|
|
_dummy, exploded_lines = kit_bom.explode(product, valuated_quantity)
|
|
total_price_unit = 0
|
|
component_qty_per_kit = defaultdict(float)
|
|
for line in exploded_lines:
|
|
component_qty_per_kit[line[0].product_id] += line[1]['qty']
|
|
for component, valuated_moves in self.grouped('product_id').items():
|
|
price_unit = super(StockMove, valuated_moves)._get_price_unit()
|
|
qty_per_kit = component_qty_per_kit[component] / kit_bom.product_qty
|
|
total_price_unit += price_unit * qty_per_kit
|
|
return total_price_unit / valuated_quantity if not product.uom_id.is_zero(valuated_quantity) else 0
|