@ -0,0 +1,13 @@ | 
				
			|||||
 | 
					BOM Product Image v10 | 
				
			||||
 | 
					===================== | 
				
			||||
 | 
					This app allows to view the image of bill of materials in odoo manufacturing software. BOM | 
				
			||||
 | 
					images are automatically fetched into Manufacturing orders, when user creates it. Also adds the | 
				
			||||
 | 
					BOM images to reports such as Production Order, BOM Cost and BOM Structure. | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					Features | 
				
			||||
 | 
					======== | 
				
			||||
 | 
					* Smart button to show where the current product is a component of BOM. | 
				
			||||
 | 
					* Edit or delete product image in BOM. | 
				
			||||
 | 
					* Get BOM product images into manufacturing Orders by default. | 
				
			||||
 | 
					* Includes BOM images to reports such as Production Order, BOM Cost and BOM Structure. | 
				
			||||
 | 
					
 | 
				
			||||
@ -0,0 +1,25 @@ | 
				
			|||||
 | 
					# -*- coding: utf-8 -*- | 
				
			||||
 | 
					############################################################################## | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    Cybrosys Technologies Pvt. Ltd. | 
				
			||||
 | 
					#    Copyright (C) 2017-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | 
				
			||||
 | 
					#    Author: Treesa Maria Jude(<https://www.cybrosys.com>) | 
				
			||||
 | 
					#    you can modify it under the terms of the GNU LESSER | 
				
			||||
 | 
					#    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    It is forbidden to publish, distribute, sublicense, or sell copies | 
				
			||||
 | 
					#    of the Software or modified copies of the Software. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    This program is distributed in the hope that it will be useful, | 
				
			||||
 | 
					#    but WITHOUT ANY WARRANTY; without even the implied warranty of | 
				
			||||
 | 
					#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
				
			||||
 | 
					#    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | 
				
			||||
 | 
					#    GENERAL PUBLIC LICENSE (LGPL v3) along with this program. | 
				
			||||
 | 
					#    If not, see <https://www.gnu.org/licenses/>. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					############################################################################## | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					import models | 
				
			||||
 | 
					import report | 
				
			||||
@ -0,0 +1,47 @@ | 
				
			|||||
 | 
					# -*- coding: utf-8 -*- | 
				
			||||
 | 
					############################################################################## | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    Cybrosys Technologies Pvt. Ltd. | 
				
			||||
 | 
					#    Copyright (C) 2017-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | 
				
			||||
 | 
					#    Author: Treesa Maria Jude(<https://www.cybrosys.com>) | 
				
			||||
 | 
					#    you can modify it under the terms of the GNU LESSER | 
				
			||||
 | 
					#    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    It is forbidden to publish, distribute, sublicense, or sell copies | 
				
			||||
 | 
					#    of the Software or modified copies of the Software. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    This program is distributed in the hope that it will be useful, | 
				
			||||
 | 
					#    but WITHOUT ANY WARRANTY; without even the implied warranty of | 
				
			||||
 | 
					#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
				
			||||
 | 
					#    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | 
				
			||||
 | 
					#    GENERAL PUBLIC LICENSE (LGPL v3) along with this program. | 
				
			||||
 | 
					#    If not, see <https://www.gnu.org/licenses/>. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					############################################################################## | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					{ | 
				
			||||
 | 
					    'name': 'BoM Product Image', | 
				
			||||
 | 
					    'version': '10.0.1.0.0', | 
				
			||||
 | 
					    'summary': 'Allow To View BoM Images', | 
				
			||||
 | 
					    'description': 'Includes Bill Of Material Component Image to MRP module', | 
				
			||||
 | 
					    'category': 'Manufacturing', | 
				
			||||
 | 
					    'author': 'Cybrosys Techno Solutions', | 
				
			||||
 | 
					    'website': "https://www.cybrosys.com", | 
				
			||||
 | 
					    'company': 'Cybrosys Techno Solutions', | 
				
			||||
 | 
					    'depends': ['base', 'product', 'mrp', ], | 
				
			||||
 | 
					    'data': [ | 
				
			||||
 | 
					        'views/product_bom_view.xml', | 
				
			||||
 | 
					        'views/binary_image.xml', | 
				
			||||
 | 
					        'views/mrp_bom_structure_report_templates.xml', | 
				
			||||
 | 
					        'views/mrp_bom_cost_report_templates.xml', | 
				
			||||
 | 
					        'views/mrp_production_templates.xml' | 
				
			||||
 | 
					    ], | 
				
			||||
 | 
					    'qweb': ['static/src/xml/binary.xml', ], | 
				
			||||
 | 
					    'images': ['static/description/banner.jpg'], | 
				
			||||
 | 
					    'license': 'AGPL-3', | 
				
			||||
 | 
					    'installable': True, | 
				
			||||
 | 
					    'auto_install': False, | 
				
			||||
 | 
					    'application': False, | 
				
			||||
 | 
					} | 
				
			||||
@ -0,0 +1,25 @@ | 
				
			|||||
 | 
					# -*- coding: utf-8 -*- | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					############################################################################## | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    Cybrosys Technologies Pvt. Ltd. | 
				
			||||
 | 
					#    Copyright (C) 2017-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | 
				
			||||
 | 
					#    Author: Treesa Maria Jude(<https://www.cybrosys.com>) | 
				
			||||
 | 
					#    you can modify it under the terms of the GNU LESSER | 
				
			||||
 | 
					#    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    It is forbidden to publish, distribute, sublicense, or sell copies | 
				
			||||
 | 
					#    of the Software or modified copies of the Software. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    This program is distributed in the hope that it will be useful, | 
				
			||||
 | 
					#    but WITHOUT ANY WARRANTY; without even the implied warranty of | 
				
			||||
 | 
					#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
				
			||||
 | 
					#    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | 
				
			||||
 | 
					#    GENERAL PUBLIC LICENSE (LGPL v3) along with this program. | 
				
			||||
 | 
					#    If not, see <https://www.gnu.org/licenses/>. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					############################################################################## | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					import bom_product | 
				
			||||
@ -0,0 +1,94 @@ | 
				
			|||||
 | 
					# -*- coding: utf-8 -*- | 
				
			||||
 | 
					############################################################################## | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    Cybrosys Technologies Pvt. Ltd. | 
				
			||||
 | 
					#    Copyright (C) 2017-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | 
				
			||||
 | 
					#    Author: Treesa Maria Jude(<https://www.cybrosys.com>) | 
				
			||||
 | 
					#    you can modify it under the terms of the GNU LESSER | 
				
			||||
 | 
					#    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    It is forbidden to publish, distribute, sublicense, or sell copies | 
				
			||||
 | 
					#    of the Software or modified copies of the Software. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    This program is distributed in the hope that it will be useful, | 
				
			||||
 | 
					#    but WITHOUT ANY WARRANTY; without even the implied warranty of | 
				
			||||
 | 
					#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
				
			||||
 | 
					#    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | 
				
			||||
 | 
					#    GENERAL PUBLIC LICENSE (LGPL v3) along with this program. | 
				
			||||
 | 
					#    If not, see <https://www.gnu.org/licenses/>. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					############################################################################## | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					from odoo import models, fields, api | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					class UsedInBom(models.Model): | 
				
			||||
 | 
					    _inherit = 'product.template' | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    used_bom_count = fields.Integer(compute='_bom_count', string='Count') | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    def _bom_count(self): | 
				
			||||
 | 
					        bom = self.env['mrp.bom'].search([]) | 
				
			||||
 | 
					        for i in bom: | 
				
			||||
 | 
					            for j in i.bom_line_ids: | 
				
			||||
 | 
					                if j.product_id.name == self.name: | 
				
			||||
 | 
					                    self.used_bom_count = self.used_bom_count +1 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					class MoLineImage(models.Model): | 
				
			||||
 | 
					    _inherit = 'stock.move' | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    image = fields.Binary() | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					class BomLineImage(models.Model): | 
				
			||||
 | 
					    _inherit = 'mrp.bom.line' | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    image = fields.Binary(string="Image") | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    @api.multi | 
				
			||||
 | 
					    @api.onchange('product_id') | 
				
			||||
 | 
					    def product_id_change(self): | 
				
			||||
 | 
					        self.image = self.product_id.image_medium | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					class GetMoLineImage(models.Model): | 
				
			||||
 | 
					    _inherit = 'mrp.production' | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    def _generate_raw_move(self, bom_line, line_data): | 
				
			||||
 | 
					        quantity = line_data['qty'] | 
				
			||||
 | 
					        alt_op = line_data['parent_line'] and line_data['parent_line'].operation_id.id or False | 
				
			||||
 | 
					        if bom_line.child_bom_id and bom_line.child_bom_id.type == 'phantom': | 
				
			||||
 | 
					            return self.env['stock.move'] | 
				
			||||
 | 
					        if bom_line.product_id.type not in ['product', 'consu']: | 
				
			||||
 | 
					            return self.env['stock.move'] | 
				
			||||
 | 
					        if self.bom_id.routing_id and self.bom_id.routing_id.location_id: | 
				
			||||
 | 
					            source_location = self.bom_id.routing_id.location_id | 
				
			||||
 | 
					        else: | 
				
			||||
 | 
					            source_location = self.location_src_id | 
				
			||||
 | 
					        original_quantity = self.product_qty - self.qty_produced | 
				
			||||
 | 
					        data = { | 
				
			||||
 | 
					            'name': self.name, | 
				
			||||
 | 
					            'date': self.date_planned_start, | 
				
			||||
 | 
					            'date_expected': self.date_planned_start, | 
				
			||||
 | 
					            'bom_line_id': bom_line.id, | 
				
			||||
 | 
					            'product_id': bom_line.product_id.id, | 
				
			||||
 | 
					            'image': bom_line.image, | 
				
			||||
 | 
					            'product_uom_qty': quantity, | 
				
			||||
 | 
					            'product_uom': bom_line.product_uom_id.id, | 
				
			||||
 | 
					            'location_id': source_location.id, | 
				
			||||
 | 
					            'location_dest_id': self.product_id.property_stock_production.id, | 
				
			||||
 | 
					            'raw_material_production_id': self.id, | 
				
			||||
 | 
					            'company_id': self.company_id.id, | 
				
			||||
 | 
					            'operation_id': bom_line.operation_id.id or alt_op, | 
				
			||||
 | 
					            'price_unit': bom_line.product_id.standard_price, | 
				
			||||
 | 
					            'procure_method': 'make_to_stock', | 
				
			||||
 | 
					            'origin': self.name, | 
				
			||||
 | 
					            'warehouse_id': source_location.get_warehouse().id, | 
				
			||||
 | 
					            'group_id': self.procurement_group_id.id, | 
				
			||||
 | 
					            'propagate': self.propagate, | 
				
			||||
 | 
					            'unit_factor': quantity / original_quantity, | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					        return self.env['stock.move'].create(data) | 
				
			||||
@ -0,0 +1,26 @@ | 
				
			|||||
 | 
					# -*- coding: utf-8 -*- | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					############################################################################## | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    Cybrosys Technologies Pvt. Ltd. | 
				
			||||
 | 
					#    Copyright (C) 2017-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | 
				
			||||
 | 
					#    Author: Treesa Maria Jude(<https://www.cybrosys.com>) | 
				
			||||
 | 
					#    you can modify it under the terms of the GNU LESSER | 
				
			||||
 | 
					#    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    It is forbidden to publish, distribute, sublicense, or sell copies | 
				
			||||
 | 
					#    of the Software or modified copies of the Software. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    This program is distributed in the hope that it will be useful, | 
				
			||||
 | 
					#    but WITHOUT ANY WARRANTY; without even the implied warranty of | 
				
			||||
 | 
					#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
				
			||||
 | 
					#    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | 
				
			||||
 | 
					#    GENERAL PUBLIC LICENSE (LGPL v3) along with this program. | 
				
			||||
 | 
					#    If not, see <https://www.gnu.org/licenses/>. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					############################################################################## | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					import mrp_bom_cost_report | 
				
			||||
 | 
					import mrp_bom_structure_report | 
				
			||||
@ -0,0 +1,70 @@ | 
				
			|||||
 | 
					# -*- coding: utf-8 -*- | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					############################################################################## | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    Cybrosys Technologies Pvt. Ltd. | 
				
			||||
 | 
					#    Copyright (C) 2017-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | 
				
			||||
 | 
					#    Author: Treesa Maria Jude(<https://www.cybrosys.com>) | 
				
			||||
 | 
					#    you can modify it under the terms of the GNU LESSER | 
				
			||||
 | 
					#    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    It is forbidden to publish, distribute, sublicense, or sell copies | 
				
			||||
 | 
					#    of the Software or modified copies of the Software. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    This program is distributed in the hope that it will be useful, | 
				
			||||
 | 
					#    but WITHOUT ANY WARRANTY; without even the implied warranty of | 
				
			||||
 | 
					#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
				
			||||
 | 
					#    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | 
				
			||||
 | 
					#    GENERAL PUBLIC LICENSE (LGPL v3) along with this program. | 
				
			||||
 | 
					#    If not, see <https://www.gnu.org/licenses/>. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					############################################################################## | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					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, | 
				
			||||
 | 
					                        'image': bom_line.image, | 
				
			||||
 | 
					                        'product_uom_qty': line_data['qty'], | 
				
			||||
 | 
					                        '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('bom_components_image.mrp_bom_cost_report1', {'lines': res}) | 
				
			||||
@ -0,0 +1,75 @@ | 
				
			|||||
 | 
					# -*- coding: utf-8 -*- | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					############################################################################## | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    Cybrosys Technologies Pvt. Ltd. | 
				
			||||
 | 
					#    Copyright (C) 2017-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | 
				
			||||
 | 
					#    Author: Treesa Maria Jude(<https://www.cybrosys.com>) | 
				
			||||
 | 
					#    you can modify it under the terms of the GNU LESSER | 
				
			||||
 | 
					#    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    It is forbidden to publish, distribute, sublicense, or sell copies | 
				
			||||
 | 
					#    of the Software or modified copies of the Software. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    This program is distributed in the hope that it will be useful, | 
				
			||||
 | 
					#    but WITHOUT ANY WARRANTY; without even the implied warranty of | 
				
			||||
 | 
					#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
				
			||||
 | 
					#    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					#    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | 
				
			||||
 | 
					#    GENERAL PUBLIC LICENSE (LGPL v3) along with this program. | 
				
			||||
 | 
					#    If not, see <https://www.gnu.org/licenses/>. | 
				
			||||
 | 
					# | 
				
			||||
 | 
					############################################################################## | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					from odoo import api, models | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					class BomStructureReport(models.AbstractModel): | 
				
			||||
 | 
					    _name = 'report.mrp.report_mrpbomstructure' | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    def get_children(self, object, 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 | 
				
			||||
 | 
					                res['image'] = l.image | 
				
			||||
 | 
					                result.append(res) | 
				
			||||
 | 
					                if l.child_line_ids: | 
				
			||||
 | 
					                    if level < 6: | 
				
			||||
 | 
					                        level += 1 | 
				
			||||
 | 
					                    _get_rec(l.child_line_ids, level, qty=res['pqty'], uom=res['puom']) | 
				
			||||
 | 
					                    if level > 0 and level < 6: | 
				
			||||
 | 
					                        level -= 1 | 
				
			||||
 | 
					            return result | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        children = _get_rec(object, level) | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        return children | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    @api.multi | 
				
			||||
 | 
					    def render_html(self, docids, data=None): | 
				
			||||
 | 
					        docargs = { | 
				
			||||
 | 
					            'doc_ids': docids, | 
				
			||||
 | 
					            'doc_model': 'mrp.bom', | 
				
			||||
 | 
					            'docs': self.env['mrp.bom'].browse(docids), | 
				
			||||
 | 
					            'get_children': self.get_children, | 
				
			||||
 | 
					            'data': data, | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					        return self.env['report'].render('bom_components_image.mrp_bom_structure_report1', docargs) | 
				
			||||
| 
		 After Width: | Height: | Size: 63 KiB  | 
| 
		 After Width: | Height: | Size: 65 KiB  | 
| 
		 After Width: | Height: | Size: 128 KiB  | 
| 
		 After Width: | Height: | Size: 43 KiB  | 
| 
		 After Width: | Height: | Size: 61 KiB  | 
| 
		 After Width: | Height: | Size: 53 KiB  | 
| 
		 After Width: | Height: | Size: 16 KiB  | 
@ -0,0 +1,134 @@ | 
				
			|||||
 | 
					<section class="oe_container"> | 
				
			||||
 | 
					    <div class="oe_row oe_spaced"> | 
				
			||||
 | 
					        <h2 class="oe_slogan">BOM Product Image</h2> | 
				
			||||
 | 
					        <h3 class="oe_slogan">Includes Bill Of Material Component's Image to MRP module</h3> | 
				
			||||
 | 
					        <h4 class="oe_slogan">Author : Cybrosys Techno Solutions , www.cybrosys.com</h4> | 
				
			||||
 | 
					        <div> | 
				
			||||
 | 
					            <h4><p>Features:</p></h4> | 
				
			||||
 | 
					            <ul> | 
				
			||||
 | 
					                <li style="list-style:none !important;"><span style="color:green;"> ☑</span>   Smart button to show whether the current product is a component of BOM </li> | 
				
			||||
 | 
					                <li style="list-style:none !important;"><span style="color:green;"> ☑</span>   Edit or delete product image in BOM </li> | 
				
			||||
 | 
					                <li style="list-style:none !important;"><span style="color:green;"> ☑</span>   Get BOM product images into manufacturing Orders by default.</li> | 
				
			||||
 | 
					                <li style="list-style:none !important;"><span style="color:green;"> ☑</span>   Includes BOM images to reports such as Production Order, BOM Cost and BOM Structure.</li> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					            </ul> | 
				
			||||
 | 
					        </div> | 
				
			||||
 | 
					     </div> | 
				
			||||
 | 
					</section> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					<section class="oe_container oe_dark"> | 
				
			||||
 | 
					    <div class="oe_row oe_spaced"> | 
				
			||||
 | 
					        <div class="oe_picture"> | 
				
			||||
 | 
					            <h3 class="oe_slogan">Overview</h3> | 
				
			||||
 | 
					            <p class="oe_mt32"> | 
				
			||||
 | 
					            This app allows to view the image of bill of materials in odoo manufacturing software. BOM                 images are automatically fetched into Manufacturing orders, when user creates it. Also adds the | 
				
			||||
 | 
					                BOM images to reports such as Production Order, BOM Cost and BOM Structure. | 
				
			||||
 | 
					            </p> | 
				
			||||
 | 
					        </div> | 
				
			||||
 | 
					    </div> | 
				
			||||
 | 
					</section> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					<section class="oe_container"> | 
				
			||||
 | 
					     <div class="oe_row oe_spaced"> | 
				
			||||
 | 
					        <h3 class="oe_slogan">Used In BOM Components</h3> | 
				
			||||
 | 
					        <div class="oe_row oe_spaced"> | 
				
			||||
 | 
					            <div class="oe_span12"> | 
				
			||||
 | 
					                <div class="oe_row_img oe_centered"> | 
				
			||||
 | 
					                    <img style="border:10px solid white;" class="oe_picture oe_screenshot" src="bom55.png"> | 
				
			||||
 | 
					                </div> | 
				
			||||
 | 
					            </div> | 
				
			||||
 | 
					            <div class="oe_span12"> | 
				
			||||
 | 
					                <p class="oe_mt32"> | 
				
			||||
 | 
					                    This is to show whether the current product is a component of BOM  also press | 
				
			||||
 | 
					                    the button to open all related bill of material. The count is generated | 
				
			||||
 | 
					                    in real time on the Smart button. | 
				
			||||
 | 
					                    </p> | 
				
			||||
 | 
					            </div> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        </div> | 
				
			||||
 | 
					     </div> | 
				
			||||
 | 
					</section> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					<section class="oe_container oe_dark"> | 
				
			||||
 | 
					    <div class="oe_row oe_spaced"> | 
				
			||||
 | 
					        <h3 class="oe_slogan">Component's Image In BOM </h3> | 
				
			||||
 | 
					        <div class="oe_row oe_spaced"> | 
				
			||||
 | 
					            <div class="oe_span12"> | 
				
			||||
 | 
					                <div class="oe_row_img oe_centered"> | 
				
			||||
 | 
					                    <img style="border:10px solid white;" class="oe_picture oe_screenshot" src="bom3.png"> | 
				
			||||
 | 
					                </div> | 
				
			||||
 | 
					            </div> | 
				
			||||
 | 
					            <div class="oe_span12"> | 
				
			||||
 | 
					                <p class="oe_mt32"> | 
				
			||||
 | 
					                        <p>Manufacturing ---> Bill Of Material ---> Components</p> | 
				
			||||
 | 
					                <p>Here we can edit or delete new images to BOM components. Otherwise default image of the | 
				
			||||
 | 
					                    corresponding product is selected.</p> | 
				
			||||
 | 
					                </p> | 
				
			||||
 | 
					            </div> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        </div> | 
				
			||||
 | 
					    </div> | 
				
			||||
 | 
					</section> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					<section class="oe_container"> | 
				
			||||
 | 
					    <div class="oe_row oe_spaced"> | 
				
			||||
 | 
					        <h3 class="oe_slogan">BOM Product Image In Manufacturing Orders</h3> | 
				
			||||
 | 
					        <div class="oe_row oe_spaced"> | 
				
			||||
 | 
					            <div class="oe_span12"> | 
				
			||||
 | 
					                <div class="oe_row_img oe_centered"> | 
				
			||||
 | 
					                    <img style="border:10px solid white;" class="oe_picture oe_screenshot" src="bom7.png"> | 
				
			||||
 | 
					                </div> | 
				
			||||
 | 
					            </div> | 
				
			||||
 | 
					        </div> | 
				
			||||
 | 
					        <div class="oe_row oe_spaced"> | 
				
			||||
 | 
					            <p> | 
				
			||||
 | 
					                Generate BOM product images automatically, when user creates a manufacturing order. | 
				
			||||
 | 
					            </p> | 
				
			||||
 | 
					        </div> | 
				
			||||
 | 
					    </div> | 
				
			||||
 | 
					</section> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					<section class="oe_container oe_dark"> | 
				
			||||
 | 
					    <div class="oe_row oe_spaced"> | 
				
			||||
 | 
					        <h3 class="oe_slogan">BOM Product Image In Reports</h3> | 
				
			||||
 | 
					        <div class="oe_row oe_spaced"> | 
				
			||||
 | 
					            <div class="oe_span6"> | 
				
			||||
 | 
					        <h3>Production Order</h3> | 
				
			||||
 | 
					        <p>Manufacturing --->Manufacturing Orders --->Print --->Production Order</p> | 
				
			||||
 | 
					        <img class="oe_picture oe_screenshot" src="bom8.png"> | 
				
			||||
 | 
					        </div> | 
				
			||||
 | 
					    <div class="oe_span6 "> | 
				
			||||
 | 
					        <h3>BOM Cost</h3> | 
				
			||||
 | 
					        <p>Manufacturing --->Bill Of Material --->Print --->BOM Cost</p> | 
				
			||||
 | 
					        <img class="oe_picture oe_screenshot" src="bom6.png"> | 
				
			||||
 | 
					    </div></div></div> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					</section> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					<section class="oe_container "> | 
				
			||||
 | 
					        <h2 class="oe_slogan" style="margin-top:20px;" >Need Any Help?</h2> | 
				
			||||
 | 
					        <div class="oe_slogan" style="margin-top:10px !important;"> | 
				
			||||
 | 
					            <div> | 
				
			||||
 | 
					                <a  class="btn btn-primary btn-lg mt8" | 
				
			||||
 | 
					                style="color: #FFFFFF !important;border-radius: 0;" href="https://www.cybrosys.com"><i | 
				
			||||
 | 
					                class="fa fa-envelope"></i> Email </a> <a | 
				
			||||
 | 
					                class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" | 
				
			||||
 | 
					                href="https://www.cybrosys.com/contact/"><i | 
				
			||||
 | 
					                class="fa fa-phone"></i> Contact Us </a> <a | 
				
			||||
 | 
					                class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" | 
				
			||||
 | 
					                href="https://www.cybrosys.com/odoo-customization-and-installation/"><i | 
				
			||||
 | 
					                class="fa fa-check-square"></i> Request Customization </a> | 
				
			||||
 | 
					            </div> | 
				
			||||
 | 
					            <br> | 
				
			||||
 | 
					            <img src="cybro_logo.png" style="width: 190px; margin-bottom: 20px;" class="center-block"> | 
				
			||||
 | 
					            <div> | 
				
			||||
 | 
					              <a href="https://twitter.com/cybrosys" target="_blank"><i class="fa fa-2x fa-twitter" style="color:white;background: #00a0d1;width:35px;"></i></a></td> | 
				
			||||
 | 
					              <a href="https://www.linkedin.com/company/cybrosys-technologies-pvt-ltd" target="_blank"><i class="fa fa-2x fa-linkedin" style="color:white;background: #31a3d6;width:35px;padding-left: 3px;"></i></a></td> | 
				
			||||
 | 
					              <a href="https://www.facebook.com/cybrosystechnologies" target="_blank"><i class="fa fa-2x fa-facebook" style="color:white;background: #3b5998;width:35px;padding-left: 8px;"></i></a></td> | 
				
			||||
 | 
					              <a href="https://plus.google.com/106641282743045431892/about" target="_blank"><i class="fa fa-2x fa-google-plus" style="color:white;background: #c53c2c;width:35px;padding-left: 3px;"></i></a></td> | 
				
			||||
 | 
					              <a href="https://in.pinterest.com/cybrosys" target="_blank"><i class="fa fa-2x fa-pinterest" style="color:white;background: #ac0f18;width:35px;padding-left: 3px;"></i></a></td> | 
				
			||||
 | 
					            </div> | 
				
			||||
 | 
					        </div> | 
				
			||||
 | 
					</section> | 
				
			||||
@ -0,0 +1,47 @@ | 
				
			|||||
 | 
					odoo.define('bom_components_image.binary_image', function (require) { | 
				
			||||
 | 
					"use strict"; | 
				
			||||
 | 
					     | 
				
			||||
 | 
					     | 
				
			||||
 | 
					    var core = require('web.core'); | 
				
			||||
 | 
					    var session = require('web.session'); | 
				
			||||
 | 
					    var QWeb = core.qweb; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        | 
				
			||||
 | 
					    var AllBinaryImage = core.list_widget_registry.get('field').extend({ | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        _format: function (row_image, options) { | 
				
			||||
 | 
					                this.session = session; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					                if (!row_image[this.id] || !row_image[this.id].value) { | 
				
			||||
 | 
					                    return ''; | 
				
			||||
 | 
					                } | 
				
			||||
 | 
					                var value = row_image[this.id].value, src; | 
				
			||||
 | 
					                if (this.type === 'binary') { | 
				
			||||
 | 
					                    if (value && value.substr(0, 10).indexOf(' ') === -1) { | 
				
			||||
 | 
					                        src = "data:image/png;base64," + value; | 
				
			||||
 | 
					                    } else { | 
				
			||||
 | 
					                        var imageArgs = { | 
				
			||||
 | 
					                            model: options.model, | 
				
			||||
 | 
					                            field: this.id, | 
				
			||||
 | 
					                            id: options.id | 
				
			||||
 | 
					                        } | 
				
			||||
 | 
					                        if (this.resize) { | 
				
			||||
 | 
					                            imageArgs.resize = this.resize; | 
				
			||||
 | 
					                        } | 
				
			||||
 | 
					                        src = session.url('/web/binary/image', imageArgs); | 
				
			||||
 | 
					                    } | 
				
			||||
 | 
					                } else { | 
				
			||||
 | 
					                    if (!/\//.test(row_image[this.id].value)) { | 
				
			||||
 | 
					                        src = '/web/static/src/img/icons/' + row_image[this.id].value + '.png'; | 
				
			||||
 | 
					                    } else { | 
				
			||||
 | 
					                        src = row_image[this.id].value; | 
				
			||||
 | 
					                    } | 
				
			||||
 | 
					                } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					                return QWeb.render('ListView.row.imagen', {widget: this, src: src}); | 
				
			||||
 | 
					            } | 
				
			||||
 | 
					    }); | 
				
			||||
 | 
					     | 
				
			||||
 | 
					    core.list_widget_registry | 
				
			||||
 | 
					        .add('field.image', AllBinaryImage); | 
				
			||||
 | 
					}); | 
				
			||||
@ -0,0 +1,7 @@ | 
				
			|||||
 | 
					<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||
 | 
					<templates id="binary_image" xml:space="preserve"> | 
				
			||||
 | 
					    <img t-name="ListView.row.imagen" | 
				
			||||
 | 
					         t-att-height="widget.height || 32" | 
				
			||||
 | 
					         t-att-src="src" | 
				
			||||
 | 
					         class="oe_image_tree"/> | 
				
			||||
 | 
					</templates> | 
				
			||||
@ -0,0 +1,10 @@ | 
				
			|||||
 | 
					<?xml version="1.0" encoding="UTF-8"?> | 
				
			||||
 | 
					<openerp> | 
				
			||||
 | 
					    <data> | 
				
			||||
 | 
					        <template id="assets_backend" name="tree icon assets" inherit_id="web.assets_backend"> | 
				
			||||
 | 
					            <xpath expr="." position="inside"> | 
				
			||||
 | 
					                <script type="text/javascript" src="/bom_components_image/static/src/js/binary_image.js"></script> | 
				
			||||
 | 
					            </xpath> | 
				
			||||
 | 
					        </template> | 
				
			||||
 | 
					    </data> | 
				
			||||
 | 
					</openerp> | 
				
			||||
@ -0,0 +1,65 @@ | 
				
			|||||
 | 
					<?xml version="1.0" encoding="utf-8"?> | 
				
			||||
 | 
					<odoo> | 
				
			||||
 | 
					    <template id="mrp_bom_cost_report1"> | 
				
			||||
 | 
					        <t t-call="report.html_container"> | 
				
			||||
 | 
					            <t t-foreach="lines" t-as="line"> | 
				
			||||
 | 
					                <t t-call="report.internal_layout"> | 
				
			||||
 | 
					                    <div class="page"> | 
				
			||||
 | 
					                        <t t-set="currency" t-value="line['currency']"/> | 
				
			||||
 | 
					                        <table class="table table-condensed"> | 
				
			||||
 | 
					                            <thead> | 
				
			||||
 | 
					                                <tr> | 
				
			||||
 | 
					                                    <th colspan="6"> | 
				
			||||
 | 
					                                        <h1><t t-esc="line['name']"/></h1><br/> | 
				
			||||
 | 
					                                        <b><t t-esc="line['product_uom_qty']"/> <t t-esc="line['product_uom'].name"/></b> | 
				
			||||
 | 
					                                        <table> | 
				
			||||
 | 
					                                            <tbody> | 
				
			||||
 | 
					                                                <tr t-foreach="line['attributes']" t-as="attrib"> | 
				
			||||
 | 
					                                                    <td><span t-esc="attrib[0]"/></td> | 
				
			||||
 | 
					                                                    <td><span t-esc="attrib[1]"/></td> | 
				
			||||
 | 
					                                                </tr> | 
				
			||||
 | 
					                                            </tbody> | 
				
			||||
 | 
					                                        </table> | 
				
			||||
 | 
					                                        <h2>Cost Structure</h2> | 
				
			||||
 | 
					                                    </th> | 
				
			||||
 | 
					                                </tr> | 
				
			||||
 | 
					                                <tr> | 
				
			||||
 | 
					                                    <th colspan="3">Raw Materials</th> | 
				
			||||
 | 
					                                    <th>Image</th> | 
				
			||||
 | 
					                                    <th class="col-sm-2 text-right">Quantity</th> | 
				
			||||
 | 
					                                    <th class="col-sm-2 text-right">Unit Cost</th> | 
				
			||||
 | 
					                                    <th class="col-sm-2 text-right">Total Cost</th> | 
				
			||||
 | 
					                                </tr> | 
				
			||||
 | 
					                            </thead> | 
				
			||||
 | 
					                            <tbody> | 
				
			||||
 | 
					                                <tr t-foreach="line['lines']" t-as="bom_line"> | 
				
			||||
 | 
					                                    <td colspan="3"> | 
				
			||||
 | 
					                                        <span t-att-res-id="bom_line['product_id'].id" res-model="product.product" view-type="form" t-esc="bom_line['product_id'].name"/> | 
				
			||||
 | 
					                                    </td> | 
				
			||||
 | 
					                                     <td> | 
				
			||||
 | 
					                               <img t-if="bom_line['image']" t-att-src="'data:image/png;base64,%s' % bom_line['image']" style="max-height: 40px;"/> | 
				
			||||
 | 
					                            </td> | 
				
			||||
 | 
					                                    <td class="text-right"> | 
				
			||||
 | 
					                                        <span t-esc="bom_line['product_uom_qty']"/> <span t-esc="bom_line['product_uom'].name" groups="product.group_uom"/> | 
				
			||||
 | 
					                                    </td> | 
				
			||||
 | 
					                                    <td class="text-right"> | 
				
			||||
 | 
					                                        <span t-esc="bom_line['price_unit']" t-options='{"widget": "monetary", "display_currency": currency}'/> | 
				
			||||
 | 
					                                    </td> | 
				
			||||
 | 
					                                    <td class="text-right"> | 
				
			||||
 | 
					                                        <span t-esc="bom_line['total_price']" t-options='{"widget": "monetary", "display_currency": currency}'/> | 
				
			||||
 | 
					                                    </td> | 
				
			||||
 | 
					                                </tr> | 
				
			||||
 | 
					                                <tr> | 
				
			||||
 | 
					                                    <th colspan="5" class="text-right">Total Cost of Raw Materials</th> | 
				
			||||
 | 
					                                    <th class="text-right"> | 
				
			||||
 | 
					                                        <span t-esc="line['total']" t-options='{"widget": "monetary", "display_currency": currency}'/> | 
				
			||||
 | 
					                                    </th> | 
				
			||||
 | 
					                                </tr> | 
				
			||||
 | 
					                            </tbody> | 
				
			||||
 | 
					                        </table> | 
				
			||||
 | 
					                    </div> | 
				
			||||
 | 
					                </t> | 
				
			||||
 | 
					            </t> | 
				
			||||
 | 
					        </t> | 
				
			||||
 | 
					    </template> | 
				
			||||
 | 
					</odoo> | 
				
			||||
@ -0,0 +1,61 @@ | 
				
			|||||
 | 
					<?xml version="1.0" encoding="utf-8"?> | 
				
			||||
 | 
					<odoo> | 
				
			||||
 | 
					<data> | 
				
			||||
 | 
					<template id="mrp_bom_structure_report1"> | 
				
			||||
 | 
					    <t t-call="report.html_container"> | 
				
			||||
 | 
					        <t t-call="report.internal_layout"> | 
				
			||||
 | 
					            <div class="page"> | 
				
			||||
 | 
					                <h2>BOM Structure</h2> | 
				
			||||
 | 
					                <table class="table table-condensed"> | 
				
			||||
 | 
					                    <thead> | 
				
			||||
 | 
					                        <tr> | 
				
			||||
 | 
					                            <th>BOM Name</th> | 
				
			||||
 | 
					                            <th>Image</th> | 
				
			||||
 | 
					                            <th>Quantity</th> | 
				
			||||
 | 
					                            <th>BOM Ref</th> | 
				
			||||
 | 
					                        </tr> | 
				
			||||
 | 
					                    </thead> | 
				
			||||
 | 
					                    <tbody> | 
				
			||||
 | 
					                        <t t-foreach="docs" t-as="o"> | 
				
			||||
 | 
					                            <tr style="font-weight: bold;"> | 
				
			||||
 | 
					                                <td> | 
				
			||||
 | 
					                                    <span t-field="o.product_id.default_code"/> | 
				
			||||
 | 
					                                    <span t-field="o.display_name"/> | 
				
			||||
 | 
					                                </td> | 
				
			||||
 | 
					                                <td> | 
				
			||||
 | 
					                               <img t-if="o.product_id.image_medium" t-att-src="'data:image/png;base64,%s' % o.image" style="max-height: 40px;"/> | 
				
			||||
 | 
					                            </td> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					                                <td> | 
				
			||||
 | 
					                                    <span t-field="o.product_qty"/> | 
				
			||||
 | 
					                                    <span groups="product.group_uom" t-field="o.product_uom_id.name"/> | 
				
			||||
 | 
					                                </td> | 
				
			||||
 | 
					                                <td> | 
				
			||||
 | 
					                                    <span t-field="o.code"/> | 
				
			||||
 | 
					                                </td> | 
				
			||||
 | 
					                            </tr> | 
				
			||||
 | 
					                            <tr t-foreach="get_children(o.bom_line_ids)" t-as="l"> | 
				
			||||
 | 
					                                <td style="padding-left: 20px;"> | 
				
			||||
 | 
					                                    <span style="color: white;" t-esc="'... '*(l['level'])"/> | 
				
			||||
 | 
					                                    <span t-esc="l['pname']"/> | 
				
			||||
 | 
					                                </td> | 
				
			||||
 | 
					                                <td> | 
				
			||||
 | 
					                               <img t-if="l['image']" t-att-src="'data:image/png;base64,%s' % l['image']" style="max-height: 40px;"/> | 
				
			||||
 | 
					                            </td> | 
				
			||||
 | 
					                                <td> | 
				
			||||
 | 
					                                    <span t-esc="l['pqty']"/> | 
				
			||||
 | 
					                                    <span t-esc="l['uname']" groups="product.group_uom"/> | 
				
			||||
 | 
					                                </td> | 
				
			||||
 | 
					                                <td> | 
				
			||||
 | 
					                                    <span t-esc="l['code']"/> | 
				
			||||
 | 
					                                </td> | 
				
			||||
 | 
					                            </tr> | 
				
			||||
 | 
					                        </t> | 
				
			||||
 | 
					                    </tbody> | 
				
			||||
 | 
					                </table> | 
				
			||||
 | 
					            </div> | 
				
			||||
 | 
					        </t> | 
				
			||||
 | 
					    </t> | 
				
			||||
 | 
					</template> | 
				
			||||
 | 
					</data> | 
				
			||||
 | 
					</odoo> | 
				
			||||
@ -0,0 +1,138 @@ | 
				
			|||||
 | 
					<?xml version="1.0" encoding="utf-8"?> | 
				
			||||
 | 
					<odoo> | 
				
			||||
 | 
					<report | 
				
			||||
 | 
					            string="Production Order" | 
				
			||||
 | 
					            id="action_report_production_order" | 
				
			||||
 | 
					            model="mrp.production" | 
				
			||||
 | 
					            name="bom_components_image.report_mrporder" | 
				
			||||
 | 
					            file="bom_components_image.report.mrp_production_templates" | 
				
			||||
 | 
					            report_type="qweb-pdf" | 
				
			||||
 | 
					        /> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    <template id="report_mrporder"> | 
				
			||||
 | 
					    <t t-call="report.html_container"> | 
				
			||||
 | 
					        <t t-foreach="docs" t-as="o"> | 
				
			||||
 | 
					            <t t-call="report.internal_layout"> | 
				
			||||
 | 
					                <div class="page"> | 
				
			||||
 | 
					                    <div class="oe_structure"/> | 
				
			||||
 | 
					                    <div class="row"> | 
				
			||||
 | 
					                        <div class="col-xs-7"> | 
				
			||||
 | 
					                            <h2>Production Order # : <span t-field="o.name"/></h2> | 
				
			||||
 | 
					                        </div> | 
				
			||||
 | 
					                        <div class="col-xs-5"> | 
				
			||||
 | 
					                            <span class="text-right"> | 
				
			||||
 | 
					                                <img t-att-src="'/report/barcode/?type=%s&value=%s&width=%s&height=%s' % ('Code128', o.name, 600, 100)" style="width:350px;height:60px"/> | 
				
			||||
 | 
					                            </span> | 
				
			||||
 | 
					                        </div> | 
				
			||||
 | 
					                    </div> | 
				
			||||
 | 
					                    <div class="row mt32 mb32"> | 
				
			||||
 | 
					                        <div class="col-xs-3"> | 
				
			||||
 | 
					                            <strong>Source Document:</strong><br/> | 
				
			||||
 | 
					                            <span t-field="o.origin"/> | 
				
			||||
 | 
					                        </div> | 
				
			||||
 | 
					                        <div class="col-xs-3"> | 
				
			||||
 | 
					                            <strong>Product:</strong><br/> | 
				
			||||
 | 
					                            <span t-field="o.product_id.code"/> | 
				
			||||
 | 
					                            <span t-field="o.product_id.name"/> | 
				
			||||
 | 
					                        </div> | 
				
			||||
 | 
					                        <div class="col-xs-3"> | 
				
			||||
 | 
					                            <strong>Quantity:</strong><br/> | 
				
			||||
 | 
					                            <span t-field="o.product_qty"/> | 
				
			||||
 | 
					                            <span t-field="o.product_uom_id.name" groups="product.group_uom"/> | 
				
			||||
 | 
					                        </div> | 
				
			||||
 | 
					                    </div> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					                    <div class="row mt32 mb32"> | 
				
			||||
 | 
					                        <div class="col-xs-3"> | 
				
			||||
 | 
					                            <strong>Scheduled Date:</strong><br/> | 
				
			||||
 | 
					                            <span t-field="o.date_planned_start"/><span t-if="o.date_planned_finished"> - <span t-field="o.date_planned_finished"/></span> | 
				
			||||
 | 
					                        </div> | 
				
			||||
 | 
					                        <div class="col-xs-3"> | 
				
			||||
 | 
					                            <strong>Printing date:</strong><br/> | 
				
			||||
 | 
					                            <span t-esc="time.strftime('%Y-%m-%d')"/> | 
				
			||||
 | 
					                        </div> | 
				
			||||
 | 
					                        <div class="col-xs-3" t-if="'sale_ref' in o"> | 
				
			||||
 | 
					                            <strong>Partner Ref:</strong><br/> | 
				
			||||
 | 
					                            <span t-esc="'sale_ref' in o and o.sale_ref"/> | 
				
			||||
 | 
					                        </div> | 
				
			||||
 | 
					                        <div class="col-xs-3" t-if="'sale_name' in o"> | 
				
			||||
 | 
					                            <strong>SO Number:</strong><br/> | 
				
			||||
 | 
					                            <span t-esc="'sale_name' in o and o.sale_name"/> | 
				
			||||
 | 
					                        </div> | 
				
			||||
 | 
					                    </div> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					                    <div t-if="o.workorder_ids"> | 
				
			||||
 | 
					                        <strong>Work Orders</strong> | 
				
			||||
 | 
					                        <table class="table table-condensed"> | 
				
			||||
 | 
					                            <tr> | 
				
			||||
 | 
					                                <td class="text-center"><strong>Name</strong></td> | 
				
			||||
 | 
					                                <td class="text-center"><strong>WorkCenter</strong></td> | 
				
			||||
 | 
					                                <td class="text-center"><strong>No. Of Minutes</strong></td> | 
				
			||||
 | 
					                            </tr> | 
				
			||||
 | 
					                            <tr t-foreach="o.workorder_ids" t-as="line2"> | 
				
			||||
 | 
					                                <td class="text-center"><span t-field="line2.name"/></td> | 
				
			||||
 | 
					                                <td class="text-center"><span t-field="line2.workcenter_id.name"/></td> | 
				
			||||
 | 
					                                <td class="text-center"><span t-field="line2.duration_expected"/></td> | 
				
			||||
 | 
					                            </tr> | 
				
			||||
 | 
					                        </table> | 
				
			||||
 | 
					                    </div> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					                    <h3 t-if="o.move_raw_ids">Bill Of Material</h3> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					                    <table class="table table-condensed" t-if="o.move_raw_ids"> | 
				
			||||
 | 
					                        <thead> | 
				
			||||
 | 
					                            <tr> | 
				
			||||
 | 
					                                <th>  </th> | 
				
			||||
 | 
					                                <th><strong>Product</strong></th> | 
				
			||||
 | 
					                                <th class="text-right"><strong>Quantity</strong></th> | 
				
			||||
 | 
					                                <th class="text-center" groups="stock.group_stock_multi_locations"> | 
				
			||||
 | 
					                                    <strong>Source Location</strong> | 
				
			||||
 | 
					                                </th> | 
				
			||||
 | 
					                                <th class="text-center" groups="stock.group_stock_multi_locations"> | 
				
			||||
 | 
					                                    <strong>Destination Location</strong> | 
				
			||||
 | 
					                                </th> | 
				
			||||
 | 
					                                <th class="text-center"> | 
				
			||||
 | 
					                                    <strong>Barcode</strong> | 
				
			||||
 | 
					                                </th> | 
				
			||||
 | 
					                            </tr> | 
				
			||||
 | 
					                        </thead> | 
				
			||||
 | 
					                        <tbody> | 
				
			||||
 | 
					                            <t t-if="o.move_raw_ids"> | 
				
			||||
 | 
					                                <tr> | 
				
			||||
 | 
					                                    <td colspan="4"><strong>Products to Consume</strong></td> | 
				
			||||
 | 
					                                </tr> | 
				
			||||
 | 
					                                <tr t-foreach="o.move_raw_ids" t-as="line"> | 
				
			||||
 | 
					                                    <td> | 
				
			||||
 | 
					                                        <img t-if="line.image" t-att-src="'data:image/png;base64,%s' % line.image" style="max-height: 40px;"/> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					                                    </td> | 
				
			||||
 | 
					                                    <td> | 
				
			||||
 | 
					                                        <span t-field="line.product_id.code"/> | 
				
			||||
 | 
					                                        <span t-field="line.product_id.name"/> | 
				
			||||
 | 
					                                    </td> | 
				
			||||
 | 
					                                    <td class="text-right"> | 
				
			||||
 | 
					                                        <span t-field="line.product_uom_qty"/> | 
				
			||||
 | 
					                                        <span t-field="line.product_uom.name" groups="product.group_uom"/> | 
				
			||||
 | 
					                                    </td> | 
				
			||||
 | 
					                                    <td class="text-center" groups="stock.group_stock_multi_locations"> | 
				
			||||
 | 
					                                        <span t-field="line.location_id.name"/> | 
				
			||||
 | 
					                                    </td> | 
				
			||||
 | 
					                                    <td class="text-center" groups="stock.group_stock_multi_locations"> | 
				
			||||
 | 
					                                        <span t-field="line.location_dest_id.name"/> | 
				
			||||
 | 
					                                    </td> | 
				
			||||
 | 
					                                    <td class="text-center"> | 
				
			||||
 | 
					                                        <span t-if="line.product_id.barcode"> | 
				
			||||
 | 
					                                            <img t-att-src="'/report/barcode/?type=%s&value=%s&width=%s&height=%s' % ('Code128', line.product_id.barcode, 600, 100)" style="width:300px;height:50px"/> | 
				
			||||
 | 
					                                        </span> | 
				
			||||
 | 
					                                    </td> | 
				
			||||
 | 
					                                </tr> | 
				
			||||
 | 
					                            </t> | 
				
			||||
 | 
					                        </tbody> | 
				
			||||
 | 
					                    </table> | 
				
			||||
 | 
					                    <div class="oe_structure"/> | 
				
			||||
 | 
					                </div> | 
				
			||||
 | 
					            </t> | 
				
			||||
 | 
					        </t> | 
				
			||||
 | 
					    </t> | 
				
			||||
 | 
					</template> | 
				
			||||
 | 
					</odoo> | 
				
			||||
@ -0,0 +1,44 @@ | 
				
			|||||
 | 
					<?xml version="1.0" encoding="utf-8"?> | 
				
			||||
 | 
					<odoo> | 
				
			||||
 | 
					    <data> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        <record id="bom_button_veiw" model="ir.ui.view"> | 
				
			||||
 | 
					            <field name="name">bom.button</field> | 
				
			||||
 | 
					            <field name="model">product.template</field> | 
				
			||||
 | 
					            <field name="inherit_id" ref="product.product_template_only_form_view"/> | 
				
			||||
 | 
					            <field name="arch" type="xml"> | 
				
			||||
 | 
					              <xpath expr="//div" position="inside"> | 
				
			||||
 | 
					                  <div class="oe_right oe_button_box"> | 
				
			||||
 | 
					                  <button class="oe_stat_button" | 
				
			||||
 | 
					                          icon="fa-gears" | 
				
			||||
 | 
					                          name="%(mrp.mrp_bom_form_action)d" | 
				
			||||
 | 
					                          type="action" | 
				
			||||
 | 
					                         context="{'search_default_bom_line_ids': name}"> | 
				
			||||
 | 
					                      <field string="Used In BoM" name="used_bom_count" widget="statinfo"/> | 
				
			||||
 | 
					                  </button> | 
				
			||||
 | 
					                  </div> | 
				
			||||
 | 
					              </xpath> | 
				
			||||
 | 
					            </field> | 
				
			||||
 | 
					       </record> | 
				
			||||
 | 
					        <record id="mrp_bom_image_form_view" model="ir.ui.view"> | 
				
			||||
 | 
					            <field name="name">mrp.bom.image.form</field> | 
				
			||||
 | 
					            <field name="model">mrp.bom</field> | 
				
			||||
 | 
					             <field name="inherit_id" ref="mrp.mrp_bom_form_view"/> | 
				
			||||
 | 
					            <field name="arch" type="xml"> | 
				
			||||
 | 
					                    <xpath expr="//tree/field[@name='product_id']" position="after"> | 
				
			||||
 | 
					                <field name="image" widget="image"  class="oe_avatar" /> | 
				
			||||
 | 
					            </xpath> | 
				
			||||
 | 
					        </field></record> | 
				
			||||
 | 
					        <record id="mo_line_bom_image_form_view" model="ir.ui.view"> | 
				
			||||
 | 
					            <field name="name">mo_line.bom.image.form</field> | 
				
			||||
 | 
					            <field name="model">mrp.production</field> | 
				
			||||
 | 
					             <field name="inherit_id" ref="mrp.mrp_production_form_view"/> | 
				
			||||
 | 
					            <field name="arch" type="xml"> | 
				
			||||
 | 
					                    <xpath expr="//tree/field[@name='product_id']" position="before"> | 
				
			||||
 | 
					                                    <field name="image" widget="image"  class="oe_avatar" /> | 
				
			||||
 | 
					            </xpath> | 
				
			||||
 | 
					        </field></record> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    </data> | 
				
			||||
 | 
					</odoo> | 
				
			||||