summaryrefslogtreecommitdiff
path: root/addons/mrp/report/mrp_bom_structure_report.py
diff options
context:
space:
mode:
Diffstat (limited to 'addons/mrp/report/mrp_bom_structure_report.py')
-rw-r--r--addons/mrp/report/mrp_bom_structure_report.py55
1 files changed, 34 insertions, 21 deletions
diff --git a/addons/mrp/report/mrp_bom_structure_report.py b/addons/mrp/report/mrp_bom_structure_report.py
index a98f45b4754..c497d562f89 100644
--- a/addons/mrp/report/mrp_bom_structure_report.py
+++ b/addons/mrp/report/mrp_bom_structure_report.py
@@ -7,36 +7,49 @@ from odoo import api, models
class BomStructureReport(models.AbstractModel):
_name = 'report.mrp.mrp_bom_structure_report'
- def get_children(self, object, level=0):
+ @api.model
+ def _get_child_vals(self, record, level, qty, uom):
+ """Get bom.line values.
+
+ :param record: mrp.bom.line record
+ :param level: level of recursion
+ :param qty: quantity of the product
+ :param uom: unit of measurement of a product
+ """
+ child = {
+ 'pname': record.product_id.name_get()[0][1],
+ 'pcode': record.product_id.default_code,
+ 'puom': record.product_uom_id,
+ 'uname': record.product_uom_id.name,
+ 'level': level,
+ 'code': record.bom_id.code,
+ }
+ qty_per_bom = record.bom_id.product_qty
+ if uom:
+ if uom != record.bom_id.product_uom_id:
+ qty = uom._compute_quantity(qty, record.bom_id.product_uom_id)
+ child['pqty'] = (record.product_qty * qty) / qty_per_bom
+ else:
+ # for the first case, the ponderation is right
+ child['pqty'] = (record.product_qty * qty)
+ return child
+
+ def get_children(self, records, level=0):
result = []
- def _get_rec(object, level, qty=1.0, uom=False):
- for l in object:
- res = {}
- res['pname'] = l.product_id.name_get()[0][1]
- res['pcode'] = l.product_id.default_code
- qty_per_bom = l.bom_id.product_qty
- if uom:
- if uom != l.bom_id.product_uom_id:
- qty = uom._compute_quantity(qty, l.bom_id.product_uom_id)
- res['pqty'] = (l.product_qty *qty)/ qty_per_bom
- else:
- #for the first case, the ponderation is right
- res['pqty'] = (l.product_qty *qty)
- res['puom'] = l.product_uom_id
- res['uname'] = l.product_uom_id.name
- res['level'] = level
- res['code'] = l.bom_id.code
- result.append(res)
+ def _get_rec(records, level, qty=1.0, uom=False):
+ for l in records:
+ child = self._get_child_vals(l, level, qty, uom)
+ result.append(child)
if l.child_line_ids:
if level < 6:
level += 1
- _get_rec(l.child_line_ids, level, qty=res['pqty'], uom=res['puom'])
+ _get_rec(l.child_line_ids, level, qty=child['pqty'], uom=child['puom'])
if level > 0 and level < 6:
level -= 1
return result
- children = _get_rec(object, level)
+ children = _get_rec(records, level)
return children