diff --git a/mrp_bom_location/README.rst b/mrp_bom_location/README.rst index aac54f611..b972ade39 100644 --- a/mrp_bom_location/README.rst +++ b/mrp_bom_location/README.rst @@ -11,6 +11,9 @@ components. This may be useful to distinguish between different BoMs for the same product or to highlight the preferred locations to fetch the components from. +The location appears in the BOM Structure Report. + + Usage ===== diff --git a/mrp_bom_location/__init__.py b/mrp_bom_location/__init__.py index 7201c0805..e24555ed0 100644 --- a/mrp_bom_location/__init__.py +++ b/mrp_bom_location/__init__.py @@ -3,3 +3,4 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from . import models +from . import report diff --git a/mrp_bom_location/__openerp__.py b/mrp_bom_location/__openerp__.py index 14b76319b..ca1e0277f 100644 --- a/mrp_bom_location/__openerp__.py +++ b/mrp_bom_location/__openerp__.py @@ -16,5 +16,6 @@ ], "data": [ "views/mrp_view.xml", + "views/report_mrpbomstructure.xml", ], } diff --git a/mrp_bom_location/report/__init__.py b/mrp_bom_location/report/__init__.py new file mode 100644 index 000000000..55d26865b --- /dev/null +++ b/mrp_bom_location/report/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# Copyright 2017 Eficent Business and IT Consulting Services S.L. +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import bom_structure diff --git a/mrp_bom_location/report/bom_structure.py b/mrp_bom_location/report/bom_structure.py new file mode 100644 index 000000000..4c7fa2d90 --- /dev/null +++ b/mrp_bom_location/report/bom_structure.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +# © 2017 Eficent Business and IT Consulting Services S.L. +# (http://www.eficent.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from openerp.osv import osv +from openerp.report import report_sxw + + +class bom_structure(report_sxw.rml_parse): + def __init__(self, cr, uid, name, context): + super(bom_structure, self).__init__(cr, uid, name, context=context) + self.localcontext.update({ + 'get_children': self.get_children, + }) + + def get_children(self, object, level=0): + result = [] + + def _get_rec(object, level, qty=1.0): + for l in object: + res = {} + res['pname'] = l.product_id.name_get()[0][1] + res['pcode'] = l.product_id.default_code + res['pqty'] = l.product_qty * qty + res['uname'] = l.product_uom.name + res['level'] = level + res['code'] = l.bom_id.code + res['location_name'] = l.location_id.complete_name or '' + result.append(res) + if l.child_line_ids: + if level<6: + level += 1 + _get_rec(l.child_line_ids, level, qty=res['pqty']) + if level>0 and level<6: + level -= 1 + return result + + children = _get_rec(object,level) + + return children + + +class report_mrpbomstructure_location(osv.AbstractModel): + _inherit = 'report.mrp.report_mrpbomstructure' + _template = 'mrp.report_mrpbomstructure' + _wrapped_report_class = bom_structure diff --git a/mrp_bom_location/views/report_mrpbomstructure.xml b/mrp_bom_location/views/report_mrpbomstructure.xml new file mode 100644 index 000000000..b4ee8cda7 --- /dev/null +++ b/mrp_bom_location/views/report_mrpbomstructure.xml @@ -0,0 +1,20 @@ + + + +