odoo/addons/mrp/report/mrp_bom_cost_report.py

48 lines
2.1 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, models
class MrpBomCost(models.AbstractModel):
_name = 'report.mrp_bom_cost'
@api.multi
def get_lines(self, boms):
product_lines = []
for bom in boms:
products = bom.product_id
if not products:
products = bom.product_tmpl_id.product_variant_ids
for product in products:
attributes = []
for value in product.attribute_value_ids:
attributes += [(value.attribute_id.name, value.name)]
result, result2 = bom.explode(product, 1)
product_line = {'bom': bom, 'name': product.name, 'lines': [], 'total': 0.0,
'currency': self.env.user.company_id.currency_id,
'product_uom_qty': bom.product_qty,
'product_uom': bom.product_uom_id,
'attributes': attributes}
total = 0.0
for bom_line, line_data in result2:
price_uom = bom_line.product_id.uom_id._compute_price(bom_line.product_id.standard_price, bom_line.product_uom_id)
line = {
'product_id': bom_line.product_id,
'product_uom_qty': line_data['qty'], #line_data needed for phantom bom explosion
'product_uom': bom_line.product_uom_id,
'price_unit': price_uom,
'total_price': price_uom * line_data['qty'],
}
total += line['total_price']
product_line['lines'] += [line]
product_line['total'] = total
product_lines += [product_line]
return product_lines
@api.model
def render_html(self, docids, data=None):
boms = self.env['mrp.bom'].browse(docids)
res = self.get_lines(boms)
return self.env['report'].render('mrp.mrp_bom_cost_report', {'lines': res})