1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models, _
from collections import defaultdict
class AccountMove(models.Model):
_inherit = 'account.move'
wip_production_ids = fields.Many2many(
'mrp.production', string="Relevant WIP MOs",
help="The MOs that this WIP entry was based on. Expected to be set at time of WIP entry creation.")
wip_production_count = fields.Integer("Manufacturing Orders Count", compute='_compute_wip_production_count')
@api.depends('wip_production_ids')
def _compute_wip_production_count(self):
for account in self:
account.wip_production_count = len(account.wip_production_ids)
def action_view_wip_production(self):
self.ensure_one()
action = {
'res_model': 'mrp.production',
'type': 'ir.actions.act_window',
}
if len(self.wip_production_ids) == 1:
action.update({
'view_mode': 'form',
'res_id': self.wip_production_ids.id,
})
else:
action.update({
'name': _("WIP MOs of %s", self.name),
'domain': [('id', 'in', self.wip_production_ids.ids)],
'view_mode': 'list,form',
})
return action
class AccountMoveLine(models.Model):
_inherit = "account.move.line"
def _get_invoiced_qty_per_product(self):
# Replace the kit-type products with their components
qties = defaultdict(float)
res = super()._get_invoiced_qty_per_product()
invoiced_products = self.env['product.product'].concat(*res.keys())
bom_kits = self.env['mrp.bom']._bom_find(invoiced_products, company_id=self.company_id[:1].id, bom_type='phantom')
for product, qty in res.items():
bom_kit = bom_kits[product]
if bom_kit:
invoiced_qty = product.uom_id._compute_quantity(qty, bom_kit.product_uom_id, round=False)
factor = invoiced_qty / bom_kit.product_qty
dummy, bom_sub_lines = bom_kit.explode(product, factor)
for bom_line, bom_line_data in bom_sub_lines:
qties[bom_line.product_id] += bom_line.product_uom_id._compute_quantity(bom_line_data['qty'], bom_line.product_id.uom_id)
else:
qties[product] += qty
return qties
|