@ -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> |