18 changed files with 1028 additions and 0 deletions
@ -0,0 +1,22 @@ |
|||||
|
Manufacturing Reports |
||||
|
===================== |
||||
|
Manufacturing Reports is a free mrp software helps to generate advanced |
||||
|
report for MRP module(Material requirements planning).This allows both PDF & XLS report for MRP systems. |
||||
|
Also you can view the product image in the report.This works well for large and small business MRP systems. |
||||
|
|
||||
|
Installation |
||||
|
============ |
||||
|
|
||||
|
To install this module, you need to install : |
||||
|
Report Xls located in : https://github.com/OCA/reporting-engine |
||||
|
|
||||
|
Features |
||||
|
======== |
||||
|
* Filter manufacturing orders based on Product |
||||
|
* Set start and end date, to print the orders between this date |
||||
|
* Filter orders based on the status of the production |
||||
|
* Enable filter for responsible for the production |
||||
|
|
||||
|
Credits |
||||
|
======= |
||||
|
Cybrosys Technologies, odoo@cybrosys.com |
@ -0,0 +1,26 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################## |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# Copyright (C) 2012-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
||||
|
# Author: Cybrosys Technologies(<http://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 <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################## |
||||
|
|
||||
|
import report |
||||
|
import wizards |
||||
|
|
@ -0,0 +1,42 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################## |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# Copyright (C) 2012-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
||||
|
# Author: Cybrosys Technologies(<http://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 <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################## |
||||
|
{ |
||||
|
'name': 'Manufacturing Reports', |
||||
|
'version': '8.0.1.0.0', |
||||
|
'summary': 'PDF & XLS Reports For Manufacturing Module.', |
||||
|
'description': 'PDF & XLS reports for manufacturing module with advanced filters.', |
||||
|
'category': 'Manufacturing', |
||||
|
'author': 'Cybrosys Techno Solutions', |
||||
|
'website': "http://www.cybrosys.com", |
||||
|
'company': 'Cybrosys Techno Solutions', |
||||
|
'depends': ['base', 'mrp', 'report_xls'], |
||||
|
'data': [ |
||||
|
'views/mrp_wizard_view.xml', |
||||
|
'views/mrp_report_template.xml' |
||||
|
], |
||||
|
'images': ['static/description/banner.jpg'], |
||||
|
'license': 'LGPL-3', |
||||
|
'installable': True, |
||||
|
'auto_install': False, |
||||
|
'application': False, |
||||
|
} |
@ -0,0 +1,25 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################## |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# Copyright (C) 2012-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
||||
|
# Author: Cybrosys Technologies(<http://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 <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################## |
||||
|
|
||||
|
import mrp_parser |
||||
|
import mrp_report_xls |
@ -0,0 +1,207 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################## |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# Copyright (C) 2012-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
||||
|
# Author: Cybrosys Technologies(<http://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 <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################## |
||||
|
|
||||
|
import datetime |
||||
|
from openerp.osv import osv |
||||
|
from openerp.report import report_sxw |
||||
|
|
||||
|
|
||||
|
class MrpReport(report_sxw.rml_parse): |
||||
|
|
||||
|
def __init__(self, cr, uid, name, context=None): |
||||
|
super(MrpReport, self).__init__(cr, uid, name, context=context) |
||||
|
self.localcontext.update({ |
||||
|
'get_details': self.get_details, |
||||
|
'get_date': self.get_date, |
||||
|
}) |
||||
|
self.context = context |
||||
|
|
||||
|
def get_date(self): |
||||
|
date = datetime.datetime.now() |
||||
|
return date |
||||
|
|
||||
|
def get_details(self, data): |
||||
|
lines = [] |
||||
|
|
||||
|
if data['filter'] is True: |
||||
|
if data['filter_user'] is True: |
||||
|
|
||||
|
if len(data['product']) > 0 \ |
||||
|
and data['stage'] is not False: |
||||
|
for k in range(0, len(data['product'])): |
||||
|
for l in range(0, len(data['responsible'])): |
||||
|
for i in self.pool.get('mrp.production').search(self.cr, self.uid, []): |
||||
|
obj = self.pool.get('mrp.production').browse(self.cr, self.uid, i) |
||||
|
if (data['date_from'] <= obj.date_planned) \ |
||||
|
and (data['date_to'] >= obj.date_planned) \ |
||||
|
and obj.state == data['stage'] \ |
||||
|
and obj.product_id.id == data['product'][k] \ |
||||
|
and obj.user_id.id == data['responsible'][l]: |
||||
|
lines.append(obj) |
||||
|
|
||||
|
elif len(data['product']) == 0 and data['stage'] is not False: |
||||
|
for l in range(0, len(data['responsible'])): |
||||
|
for i in self.pool.get('mrp.production').search(self.cr, self.uid, []): |
||||
|
obj = self.pool.get('mrp.production').browse(self.cr, self.uid, i) |
||||
|
if (data['date_from'] <= obj.date_planned) \ |
||||
|
and (data['date_to'] >= obj.date_planned) \ |
||||
|
and obj.state == data['stage'] \ |
||||
|
and obj.user_id.id == data['responsible'][l]: |
||||
|
lines.append(obj) |
||||
|
|
||||
|
if len(data['product']) > 0 \ |
||||
|
and data['stage'] is False: |
||||
|
for k in range(0, len(data['product'])): |
||||
|
for l in range(0, len(data['responsible'])): |
||||
|
for i in self.pool.get('mrp.production').search(self.cr, self.uid, []): |
||||
|
obj = self.pool.get('mrp.production').browse(self.cr, self.uid, i) |
||||
|
if (data['date_from'] <= obj.date_planned) \ |
||||
|
and (data['date_to'] >= obj.date_planned) \ |
||||
|
and obj.product_id.id == data['product'][k] \ |
||||
|
and obj.user_id.id == data['responsible'][l]: |
||||
|
lines.append(obj) |
||||
|
|
||||
|
if len(data['product']) == 0 \ |
||||
|
and data['stage'] is False: |
||||
|
for l in range(0, len(data['responsible'])): |
||||
|
for i in self.pool.get('mrp.production').search(self.cr, self.uid, []): |
||||
|
obj = self.pool.get('mrp.production').browse(self.cr, self.uid, i) |
||||
|
if (data['date_from'] <= obj.date_planned) \ |
||||
|
and (data['date_to'] >= obj.date_planned) \ |
||||
|
and obj.user_id.id == data['responsible'][l]: |
||||
|
lines.append(obj) |
||||
|
if data['filter_user'] is False: |
||||
|
if len(data['product']) > 0 \ |
||||
|
and data['stage'] is not False: |
||||
|
for k in range(0, len(data['product'])): |
||||
|
for i in self.pool.get('mrp.production').search(self.cr, self.uid, []): |
||||
|
obj = self.pool.get('mrp.production').browse(self.cr, self.uid, i) |
||||
|
if (data['date_from'] <= obj.date_planned) \ |
||||
|
and (data['date_to'] >= obj.date_planned) \ |
||||
|
and obj.state == data['stage'] \ |
||||
|
and obj.product_id.id == data['product'][k]: |
||||
|
lines.append(obj) |
||||
|
|
||||
|
elif len(data['product']) == 0 and data['stage'] is not False: |
||||
|
for i in self.pool.get('mrp.production').search(self.cr, self.uid, []): |
||||
|
obj = self.pool.get('mrp.production').browse(self.cr, self.uid, i) |
||||
|
if (data['date_from'] <= obj.date_planned) \ |
||||
|
and (data['date_to'] >= obj.date_planned) \ |
||||
|
and obj.state == data['stage']: |
||||
|
lines.append(obj) |
||||
|
|
||||
|
if len(data['product']) > 0 \ |
||||
|
and data['stage'] is False: |
||||
|
for k in range(0, len(data['product'])): |
||||
|
for i in self.pool.get('mrp.production').search(self.cr, self.uid, []): |
||||
|
obj = self.pool.get('mrp.production').browse(self.cr, self.uid, i) |
||||
|
if (data['date_from'] <= obj.date_planned) \ |
||||
|
and (data['date_to'] >= obj.date_planned) \ |
||||
|
and obj.product_id.id == data['product'][k]: |
||||
|
lines.append(obj) |
||||
|
|
||||
|
if len(data['product']) == 0 \ |
||||
|
and data['stage'] is False: |
||||
|
for i in self.pool.get('mrp.production').search(self.cr, self.uid, []): |
||||
|
obj = self.pool.get('mrp.production').browse(self.cr, self.uid, i) |
||||
|
if (data['date_from'] <= obj.date_planned) \ |
||||
|
and (data['date_to'] >= obj.date_planned): |
||||
|
lines.append(obj) |
||||
|
|
||||
|
if data['filter'] is False: |
||||
|
if data['filter_user'] is True: |
||||
|
if len(data['product']) > 0 \ |
||||
|
and data['stage'] is not False: |
||||
|
for k in range(0, len(data['product'])): |
||||
|
for l in range(0, len(data['responsible'])): |
||||
|
for i in self.pool.get('mrp.production').search(self.cr, self.uid, []): |
||||
|
obj = self.pool.get('mrp.production').browse(self.cr, self.uid, i) |
||||
|
if obj.state == data['stage'] \ |
||||
|
and obj.product_id.id == data['product'][k] \ |
||||
|
and obj.user_id.id == data['responsible'][l]: |
||||
|
lines.append(obj) |
||||
|
|
||||
|
elif len(data['product']) == 0 and data['stage'] is not False: |
||||
|
for l in range(0, len(data['responsible'])): |
||||
|
for i in self.pool.get('mrp.production').search(self.cr, self.uid, []): |
||||
|
obj = self.pool.get('mrp.production').browse(self.cr, self.uid, i) |
||||
|
if obj.state == data['stage'] \ |
||||
|
and obj.user_id.id == data['responsible'][l]: |
||||
|
lines.append(obj) |
||||
|
|
||||
|
if len(data['product']) > 0 \ |
||||
|
and data['stage'] is False: |
||||
|
for k in range(0, len(data['product'])): |
||||
|
for l in range(0, len(data['responsible'])): |
||||
|
for i in self.pool.get('mrp.production').search(self.cr, self.uid, []): |
||||
|
obj = self.pool.get('mrp.production').browse(self.cr, self.uid, i) |
||||
|
if obj.product_id.id == data['product'][k] \ |
||||
|
and obj.user_id.id == data['responsible'][l]: |
||||
|
lines.append(obj) |
||||
|
|
||||
|
if len(data['product']) == 0 \ |
||||
|
and data['stage'] is False: |
||||
|
for l in range(0, len(data['responsible'])): |
||||
|
for i in self.pool.get('mrp.production').search(self.cr, self.uid, []): |
||||
|
obj = self.pool.get('mrp.production').browse(self.cr, self.uid, i) |
||||
|
if obj.user_id.id == data['responsible'][l]: |
||||
|
lines.append(obj) |
||||
|
if data['filter_user'] is False: |
||||
|
|
||||
|
if len(data['product']) > 0 \ |
||||
|
and data['stage'] is not False: |
||||
|
for k in range(0, len(data['product'])): |
||||
|
for i in self.pool.get('mrp.production').search(self.cr, self.uid, []): |
||||
|
obj = self.pool.get('mrp.production').browse(self.cr, self.uid, i) |
||||
|
if obj.state == data['stage'] \ |
||||
|
and obj.product_id.id == data['product'][k]: |
||||
|
lines.append(obj) |
||||
|
|
||||
|
elif len(data['product']) == 0 and data['stage'] is not False: |
||||
|
for i in self.pool.get('mrp.production').search(self.cr, self.uid, []): |
||||
|
obj = self.pool.get('mrp.production').browse(self.cr, self.uid, i) |
||||
|
if obj.state == data['stage']: |
||||
|
lines.append(obj) |
||||
|
|
||||
|
if len(data['product']) > 0 \ |
||||
|
and data['stage'] is False: |
||||
|
for k in range(0, len(data['product'])): |
||||
|
for i in self.pool.get('mrp.production').search(self.cr, self.uid, []): |
||||
|
obj = self.pool.get('mrp.production').browse(self.cr, self.uid, i) |
||||
|
if obj.product_id.id == data['product'][k]: |
||||
|
lines.append(obj) |
||||
|
|
||||
|
if len(data['product']) == 0 \ |
||||
|
and data['stage'] is False: |
||||
|
for i in self.pool.get('mrp.production').search(self.cr, self.uid, []): |
||||
|
obj = self.pool.get('mrp.production').browse(self.cr, self.uid, i) |
||||
|
lines.append(obj) |
||||
|
|
||||
|
return lines |
||||
|
|
||||
|
|
||||
|
class PrintReport(osv.AbstractModel): |
||||
|
_name = 'report.manufacturing_reports.mrp_pdf' |
||||
|
_inherit = 'report.abstract_report' |
||||
|
_template = 'manufacturing_reports.mrp_pdf' |
||||
|
_wrapped_report_class = MrpReport |
@ -0,0 +1,301 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################## |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# Copyright (C) 2012-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
||||
|
# Author: Cybrosys Technologies(<http://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 <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################## |
||||
|
|
||||
|
import xlwt |
||||
|
import datetime |
||||
|
from openerp.addons.report_xls.report_xls import report_xls |
||||
|
|
||||
|
|
||||
|
def get_xls(obj): |
||||
|
getvals = { |
||||
|
'name': obj.name, |
||||
|
'product': obj.product_id.name, |
||||
|
'product_qty': obj.product_qty, |
||||
|
'product_uom': obj.product_uom.name, |
||||
|
'user_id': obj.user_id.name, |
||||
|
'date_planned': obj.date_planned, |
||||
|
'state': obj.state, |
||||
|
} |
||||
|
templist1 = [(1, 3, 0, 'text', getvals['name']), |
||||
|
(2, 3, 0, 'text', getvals['product']), |
||||
|
(3, 2, 0, 'text', getvals['product_qty']), |
||||
|
(4, 2, 0, 'text', getvals['product_uom']), |
||||
|
(5, 2, 0, 'text', getvals['user_id']), |
||||
|
(6, 1, 0, 'text', getvals['date_planned']), |
||||
|
(7, 1, 0, 'text', getvals['state']), |
||||
|
] |
||||
|
return templist1 |
||||
|
|
||||
|
|
||||
|
class MrpXlsReport(report_xls): |
||||
|
|
||||
|
def generate_xls_report(self, _p, _xs, data, objects, wb): |
||||
|
report_name = "Manufacturing Orders" |
||||
|
ws = wb.add_sheet(report_name[:31]) |
||||
|
ws.panes_frozen = True |
||||
|
ws.remove_splits = True |
||||
|
ws.portrait = 1 |
||||
|
ws.fit_width_to_pages = 1 |
||||
|
row_pos = 0 |
||||
|
ws.set_horz_split_pos(row_pos) |
||||
|
ws.header_str = self.xls_headers['standard'] |
||||
|
ws.footer_str = self.xls_footers['standard'] |
||||
|
_xs.update({ |
||||
|
'xls_title': 'font: bold true, height 350;' |
||||
|
}) |
||||
|
_xs.update({ |
||||
|
'xls_sub_title': 'font: bold false, height 250;' |
||||
|
}) |
||||
|
cell_style = xlwt.easyxf(_xs['xls_title'] + _xs['center']) |
||||
|
cell_center = xlwt.easyxf(_xs['center']) |
||||
|
cell_center_bold_no = xlwt.easyxf(_xs['center'] + _xs['bold']) |
||||
|
cell_left_b = xlwt.easyxf(_xs['left'] + _xs['bold']) |
||||
|
c_specs = [('report_name', 8, 0, 'text', report_name)] |
||||
|
row_pos += 1 |
||||
|
row_data = self.xls_row_template(c_specs, ['report_name']) |
||||
|
row_pos = self.xls_write_row(ws, row_pos, row_data, row_style=cell_style) |
||||
|
ws.row(row_pos - 1).height_mismatch = True |
||||
|
ws.row(row_pos - 1).height = 220 * 2 |
||||
|
row_pos += 1 |
||||
|
date_report = "Date Of Report :" + str(datetime.datetime.now().strftime("%Y-%m-%d %H:%M %p")) |
||||
|
top2 = [('entry1', 3, 0, 'text', date_report)] |
||||
|
row_data = self.xls_row_template(top2, [x[0] for x in top2]) |
||||
|
row_pos = self.xls_write_row(ws, row_pos, row_data, cell_left_b) |
||||
|
row_pos += 1 |
||||
|
|
||||
|
templist = [(1, 3, 0, 'text', 'Reference'), |
||||
|
(2, 3, 0, 'text', 'Product'), |
||||
|
(3, 2, 0, 'text', 'Quantity'), |
||||
|
(4, 2, 0, 'text', 'Unit'), |
||||
|
(5, 2, 0, 'text', 'Responsible'), |
||||
|
(6, 1, 0, 'text', 'Start Date'), |
||||
|
(7, 1, 0, 'text', 'State'), ] |
||||
|
row_pos += 1 |
||||
|
row_data = self.xls_row_template(templist, [x[0] for x in templist]) |
||||
|
row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center_bold_no) |
||||
|
|
||||
|
if data['filter'] is True: |
||||
|
if data['filter_user'] is True: |
||||
|
|
||||
|
if len(data['product']) > 0 \ |
||||
|
and data['stage'] is not False: |
||||
|
for k in range(0, len(data['product'])): |
||||
|
for l in range(0, len(data['responsible'])): |
||||
|
for i in self.pool.get('mrp.production').search(self.cr, self.uid, []): |
||||
|
obj = self.pool.get('mrp.production').browse(self.cr, self.uid, i) |
||||
|
if (data['date_from'] <= obj.date_planned) \ |
||||
|
and (data['date_to'] >= obj.date_planned) \ |
||||
|
and obj.state == data['stage'] \ |
||||
|
and obj.product_id.id == data['product'][k] \ |
||||
|
and obj.user_id.id == data['responsible'][l]: |
||||
|
templist1 = get_xls(obj) |
||||
|
|
||||
|
row_data = self.xls_row_template(templist1, [x[0] for x in templist1]) |
||||
|
row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) |
||||
|
|
||||
|
elif len(data['product']) == 0 and data['stage'] is not False: |
||||
|
for l in range(0, len(data['responsible'])): |
||||
|
for i in self.pool.get('mrp.production').search(self.cr, self.uid, []): |
||||
|
obj = self.pool.get('mrp.production').browse(self.cr, self.uid, i) |
||||
|
if (data['date_from'] <= obj.date_planned) \ |
||||
|
and (data['date_to'] >= obj.date_planned) \ |
||||
|
and obj.state == data['stage'] \ |
||||
|
and obj.user_id.id == data['responsible'][l]: |
||||
|
templist1 = get_xls(obj) |
||||
|
|
||||
|
row_data = self.xls_row_template(templist1, [x[0] for x in templist1]) |
||||
|
row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) |
||||
|
|
||||
|
if len(data['product']) > 0 \ |
||||
|
and data['stage'] is False: |
||||
|
for k in range(0, len(data['product'])): |
||||
|
for l in range(0, len(data['responsible'])): |
||||
|
for i in self.pool.get('mrp.production').search(self.cr, self.uid, []): |
||||
|
obj = self.pool.get('mrp.production').browse(self.cr, self.uid, i) |
||||
|
if (data['date_from'] <= obj.date_planned) \ |
||||
|
and (data['date_to'] >= obj.date_planned) \ |
||||
|
and obj.product_id.id == data['product'][k] \ |
||||
|
and obj.user_id.id == data['responsible'][l]: |
||||
|
templist1 = get_xls(obj) |
||||
|
|
||||
|
row_data = self.xls_row_template(templist1, [x[0] for x in templist1]) |
||||
|
row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) |
||||
|
|
||||
|
if len(data['product']) == 0 \ |
||||
|
and data['stage'] is False: |
||||
|
for l in range(0, len(data['responsible'])): |
||||
|
for i in self.pool.get('mrp.production').search(self.cr, self.uid, []): |
||||
|
obj = self.pool.get('mrp.production').browse(self.cr, self.uid, i) |
||||
|
if (data['date_from'] <= obj.date_planned) \ |
||||
|
and (data['date_to'] >= obj.date_planned) \ |
||||
|
and obj.user_id.id == data['responsible'][l]: |
||||
|
templist1 = get_xls(obj) |
||||
|
|
||||
|
row_data = self.xls_row_template(templist1, [x[0] for x in templist1]) |
||||
|
row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) |
||||
|
|
||||
|
if data['filter_user'] is False: |
||||
|
if len(data['product']) > 0 \ |
||||
|
and data['stage'] is not False: |
||||
|
for k in range(0, len(data['product'])): |
||||
|
for i in self.pool.get('mrp.production').search(self.cr, self.uid, []): |
||||
|
obj = self.pool.get('mrp.production').browse(self.cr, self.uid, i) |
||||
|
if (data['date_from'] <= obj.date_planned) \ |
||||
|
and (data['date_to'] >= obj.date_planned) \ |
||||
|
and obj.state == data['stage'] \ |
||||
|
and obj.product_id.id == data['product'][k]: |
||||
|
templist1 = get_xls(obj) |
||||
|
|
||||
|
row_data = self.xls_row_template(templist1, [x[0] for x in templist1]) |
||||
|
row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) |
||||
|
|
||||
|
elif len(data['product']) == 0 and data['stage'] is not False: |
||||
|
for i in self.pool.get('mrp.production').search(self.cr, self.uid, []): |
||||
|
obj = self.pool.get('mrp.production').browse(self.cr, self.uid, i) |
||||
|
if (data['date_from'] <= obj.date_planned) \ |
||||
|
and (data['date_to'] >= obj.date_planned) \ |
||||
|
and obj.state == data['stage']: |
||||
|
templist1 = get_xls(obj) |
||||
|
|
||||
|
row_data = self.xls_row_template(templist1, [x[0] for x in templist1]) |
||||
|
row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) |
||||
|
|
||||
|
if len(data['product']) > 0 \ |
||||
|
and data['stage'] is False: |
||||
|
for k in range(0, len(data['product'])): |
||||
|
for i in self.pool.get('mrp.production').search(self.cr, self.uid, []): |
||||
|
obj = self.pool.get('mrp.production').browse(self.cr, self.uid, i) |
||||
|
if (data['date_from'] <= obj.date_planned) \ |
||||
|
and (data['date_to'] >= obj.date_planned) \ |
||||
|
and obj.product_id.id == data['product'][k]: |
||||
|
templist1 = get_xls(obj) |
||||
|
|
||||
|
row_data = self.xls_row_template(templist1, [x[0] for x in templist1]) |
||||
|
row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) |
||||
|
|
||||
|
if len(data['product']) == 0 \ |
||||
|
and data['stage'] is False: |
||||
|
for i in self.pool.get('mrp.production').search(self.cr, self.uid, []): |
||||
|
obj = self.pool.get('mrp.production').browse(self.cr, self.uid, i) |
||||
|
if (data['date_from'] <= obj.date_planned) \ |
||||
|
and (data['date_to'] >= obj.date_planned): |
||||
|
templist1 = get_xls(obj) |
||||
|
|
||||
|
row_data = self.xls_row_template(templist1, [x[0] for x in templist1]) |
||||
|
row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) |
||||
|
|
||||
|
if data['filter'] is False: |
||||
|
if data['filter_user'] is True: |
||||
|
if len(data['product']) > 0 \ |
||||
|
and data['stage'] is not False: |
||||
|
for k in range(0, len(data['product'])): |
||||
|
for l in range(0, len(data['responsible'])): |
||||
|
for i in self.pool.get('mrp.production').search(self.cr, self.uid, []): |
||||
|
obj = self.pool.get('mrp.production').browse(self.cr, self.uid, i) |
||||
|
if obj.state == data['stage'] \ |
||||
|
and obj.product_id.id == data['product'][k] \ |
||||
|
and obj.user_id.id == data['responsible'][l]: |
||||
|
templist1 = get_xls(obj) |
||||
|
|
||||
|
row_data = self.xls_row_template(templist1, [x[0] for x in templist1]) |
||||
|
row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) |
||||
|
|
||||
|
elif len(data['product']) == 0 and data['stage'] is not False: |
||||
|
for l in range(0, len(data['responsible'])): |
||||
|
for i in self.pool.get('mrp.production').search(self.cr, self.uid, []): |
||||
|
obj = self.pool.get('mrp.production').browse(self.cr, self.uid, i) |
||||
|
if obj.state == data['stage'] \ |
||||
|
and obj.user_id.id == data['responsible'][l]: |
||||
|
templist1 = get_xls(obj) |
||||
|
|
||||
|
row_data = self.xls_row_template(templist1, [x[0] for x in templist1]) |
||||
|
row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) |
||||
|
|
||||
|
if len(data['product']) > 0 \ |
||||
|
and data['stage'] is False: |
||||
|
for k in range(0, len(data['product'])): |
||||
|
for l in range(0, len(data['responsible'])): |
||||
|
for i in self.pool.get('mrp.production').search(self.cr, self.uid, []): |
||||
|
obj = self.pool.get('mrp.production').browse(self.cr, self.uid, i) |
||||
|
if obj.product_id.id == data['product'][k] \ |
||||
|
and obj.user_id.id == data['responsible'][l]: |
||||
|
templist1 = get_xls(obj) |
||||
|
|
||||
|
row_data = self.xls_row_template(templist1, [x[0] for x in templist1]) |
||||
|
row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) |
||||
|
|
||||
|
if len(data['product']) == 0 \ |
||||
|
and data['stage'] is False: |
||||
|
for l in range(0, len(data['responsible'])): |
||||
|
for i in self.pool.get('mrp.production').search(self.cr, self.uid, []): |
||||
|
obj = self.pool.get('mrp.production').browse(self.cr, self.uid, i) |
||||
|
if obj.user_id.id == data['responsible'][l]: |
||||
|
templist1 = get_xls(obj) |
||||
|
|
||||
|
row_data = self.xls_row_template(templist1, [x[0] for x in templist1]) |
||||
|
row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) |
||||
|
|
||||
|
if data['filter_user'] is False: |
||||
|
|
||||
|
if len(data['product']) > 0 \ |
||||
|
and data['stage'] is not False: |
||||
|
for k in range(0, len(data['product'])): |
||||
|
for i in self.pool.get('mrp.production').search(self.cr, self.uid, []): |
||||
|
obj = self.pool.get('mrp.production').browse(self.cr, self.uid, i) |
||||
|
if obj.state == data['stage'] \ |
||||
|
and obj.product_id.id == data['product'][k]: |
||||
|
templist1 = get_xls(obj) |
||||
|
|
||||
|
row_data = self.xls_row_template(templist1, [x[0] for x in templist1]) |
||||
|
row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) |
||||
|
|
||||
|
elif len(data['product']) == 0 and data['stage'] is not False: |
||||
|
for i in self.pool.get('mrp.production').search(self.cr, self.uid, []): |
||||
|
obj = self.pool.get('mrp.production').browse(self.cr, self.uid, i) |
||||
|
if obj.state == data['stage']: |
||||
|
templist1 = get_xls(obj) |
||||
|
|
||||
|
row_data = self.xls_row_template(templist1, [x[0] for x in templist1]) |
||||
|
row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) |
||||
|
|
||||
|
if len(data['product']) > 0 \ |
||||
|
and data['stage'] is False: |
||||
|
for k in range(0, len(data['product'])): |
||||
|
for i in self.pool.get('mrp.production').search(self.cr, self.uid, []): |
||||
|
obj = self.pool.get('mrp.production').browse(self.cr, self.uid, i) |
||||
|
if obj.product_id.id == data['product'][k]: |
||||
|
templist1 = get_xls(obj) |
||||
|
|
||||
|
row_data = self.xls_row_template(templist1, [x[0] for x in templist1]) |
||||
|
row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) |
||||
|
|
||||
|
if len(data['product']) == 0 \ |
||||
|
and data['stage'] is False: |
||||
|
for i in self.pool.get('mrp.production').search(self.cr, self.uid, []): |
||||
|
obj = self.pool.get('mrp.production').browse(self.cr, self.uid, i) |
||||
|
templist1 = get_xls(obj) |
||||
|
|
||||
|
row_data = self.xls_row_template(templist1, [x[0] for x in templist1]) |
||||
|
row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) |
||||
|
|
||||
|
MrpXlsReport('report.mrp_reports_xls', 'mrp.production') |
After Width: | Height: | Size: 53 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 18 KiB |
@ -0,0 +1,94 @@ |
|||||
|
<section class="oe_container"> |
||||
|
<div class="oe_row oe_spaced"> |
||||
|
<h1 class="oe_slogan">Manufacturing Reports</h1> |
||||
|
<h2 class="oe_slogan">PDF & XLS Reports For Manufacturing Module</h2> |
||||
|
<h3 class="oe_slogan">Author : Cybrosys Techno Solutions , www.cybrosys.com</h3> |
||||
|
<div> |
||||
|
<h4><p class="oe_mt32">Manufacturing Reports is a free Cybrosys MRP software which helps to generate advanced |
||||
|
report for MRP module(Material requirements planning).This allows both PDF & XLS report for MRP systems. |
||||
|
Also you can view the product image in the report.This works well for large and small business MRP systems.</p></h4> |
||||
|
|
||||
|
|
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
|
||||
|
|
||||
|
<section class="oe_container oe_dark"> |
||||
|
<div class="oe_row oe_spaced"> |
||||
|
<h2 class="oe_slogan">Filter MRP Orders</h2> |
||||
|
<div class="oe_row oe_spaced"> |
||||
|
<div class="oe_span12"> |
||||
|
<div class="oe_row_img oe_centered"> |
||||
|
<h4>Go to Manufacturing -> Print Report </h4> |
||||
|
<img class="oe_picture oe_screenshot" src="material requirements planning.png"> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="oe_span12"> |
||||
|
<p></p> |
||||
|
<ul> |
||||
|
<li style="list-style:none !important;"><span style="color:green;"> ☑</span> Filter manufacturing orders based on Product</li> |
||||
|
<li style="list-style:none !important;"><span style="color:green;"> ☑</span> Set start and end date, to print the orders between this date</li> |
||||
|
<li style="list-style:none !important;"><span style="color:green;"> ☑</span> Filter orders based on the status of the production</li> |
||||
|
<li style="list-style:none !important;"><span style="color:green;"> ☑</span> Enable filter based on the responsible person for production</li> |
||||
|
</ul> |
||||
|
</div> |
||||
|
|
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
|
||||
|
<section class="oe_container"> |
||||
|
<div class="oe_row oe_spaced"> |
||||
|
<h2 class="oe_slogan">PDF Report</h2> |
||||
|
<div class="oe_row oe_spaced"> |
||||
|
<div class="oe_span12"> |
||||
|
<div class="oe_row_img oe_centered"> |
||||
|
<img class="oe_picture oe_screenshot" src="mrp_pdf_report.png"> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
<section class="oe_container oe_dark"> |
||||
|
<div class="oe_row oe_spaced"> |
||||
|
<h2 class="oe_slogan">XLS Report</h2> |
||||
|
<div class="oe_row oe_spaced"> |
||||
|
<div class="oe_span12"> |
||||
|
<div class="oe_row_img oe_centered"> |
||||
|
<img class="oe_picture oe_screenshot" src="mrp_xls_report.png"> |
||||
|
</div> |
||||
|
</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="http://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="http://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="http://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,93 @@ |
|||||
|
<section class="oe_container"> |
||||
|
<div class="oe_row oe_spaced"> |
||||
|
<h1 class="oe_slogan">Manufacturing Reports</h1> |
||||
|
<h2 class="oe_slogan">PDF & XLS Reports For Manufacturing Module</h2> |
||||
|
<h3 class="oe_slogan">Author : Cybrosys Techno Solutions , www.cybrosys.com</h3> |
||||
|
<div> |
||||
|
<h4><p class="oe_mt32">Manufacturing Reports is a free Cybrosys mrp software helps to generate advanced |
||||
|
report for MRP module(Material requirements planning).This allows both PDF & XLS report for MRP systems. |
||||
|
Also you can view the product image in the report.This works well for large and small business MRP systems.</p></h4> |
||||
|
|
||||
|
|
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
|
||||
|
|
||||
|
<section class="oe_container oe_dark"> |
||||
|
<div class="oe_row oe_spaced"> |
||||
|
<h2 class="oe_slogan">Filter MRP Orders</h2> |
||||
|
<div class="oe_row oe_spaced"> |
||||
|
<div class="oe_span12"> |
||||
|
<div class="oe_row_img oe_centered"> |
||||
|
<h4>Go to Manufacturing -> Print Report </h4> |
||||
|
<img class="oe_picture oe_screenshot" src="material requirements planning.png"> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="oe_span12"> |
||||
|
<p></p> |
||||
|
<ul> |
||||
|
<li style="list-style:none !important;"><span style="color:green;"> ☑</span> Filter manufacturing orders based on Product</li> |
||||
|
<li style="list-style:none !important;"><span style="color:green;"> ☑</span> Set start and end date, to print the orders between this date</li> |
||||
|
<li style="list-style:none !important;"><span style="color:green;"> ☑</span> Filter orders based on the status of the production</li> |
||||
|
<li style="list-style:none !important;"><span style="color:green;"> ☑</span> Enable filter for responsible for the production</li> |
||||
|
</ul> |
||||
|
</div> |
||||
|
|
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
|
||||
|
<section class="oe_container"> |
||||
|
<div class="oe_row oe_spaced"> |
||||
|
<h2 class="oe_slogan">PDF Report</h2> |
||||
|
<div class="oe_row oe_spaced"> |
||||
|
<div class="oe_span12"> |
||||
|
<div class="oe_row_img oe_centered"> |
||||
|
<img class="oe_picture oe_screenshot" src="mrp_pdf_report.png"> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
<section class="oe_container oe_dark"> |
||||
|
<div class="oe_row oe_spaced"> |
||||
|
<h2 class="oe_slogan">XLS Report</h2> |
||||
|
<div class="oe_row oe_spaced"> |
||||
|
<div class="oe_span12"> |
||||
|
<div class="oe_row_img oe_centered"> |
||||
|
<img class="oe_picture oe_screenshot" src="mrp_xls_report.png"> |
||||
|
</div> |
||||
|
</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="http://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="http://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="http://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> |
After Width: | Height: | Size: 27 KiB |
After Width: | Height: | Size: 61 KiB |
After Width: | Height: | Size: 42 KiB |
@ -0,0 +1,74 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8" ?> |
||||
|
<openerp> |
||||
|
<data> |
||||
|
<report id="action_report_claims" |
||||
|
model="mrp.report" |
||||
|
string="MRP Report" |
||||
|
report_type="qweb-pdf" |
||||
|
file="manufacturing_reports.mrp_pdf" |
||||
|
name="manufacturing_reports.mrp_pdf" |
||||
|
/> |
||||
|
<template id="mrp_pdf"> |
||||
|
<t t-call="report.html_container"> |
||||
|
<t t-call="report.internal_layout"> |
||||
|
<div class="page"> |
||||
|
<div class="header" style="text-align:left;"><h1><strong>MRP Order Report</strong></h1></div> |
||||
|
<div class="row mt32 mb32" style="text-align:left;"> |
||||
|
<div class="col-xs-12"> |
||||
|
<h3> <strong> <p t-esc="res_company.name"/></strong></h3> |
||||
|
<strong>Date of report:</strong> |
||||
|
<p t-esc="get_date()"/> |
||||
|
</div> |
||||
|
</div> |
||||
|
<table class="table table-condensed"> |
||||
|
<thead> |
||||
|
<tr > |
||||
|
<th style="background-color:#9b9da0 !important;">Reference</th> |
||||
|
<th style="background-color:#9b9da0 !important;">Image</th> |
||||
|
<th style="background-color:#9b9da0 !important;">Product</th> |
||||
|
<th style="background-color:#9b9da0 !important;">Quantity</th> |
||||
|
<th style="background-color:#9b9da0 !important;">Unit</th> |
||||
|
<th style="background-color:#9b9da0 !important;">Responsible</th> |
||||
|
<th style="background-color:#9b9da0 !important;">Start Date</th> |
||||
|
<th style="background-color:#9b9da0 !important;">State</th> |
||||
|
</tr> |
||||
|
</thead> |
||||
|
<tbody> |
||||
|
<t t-foreach="get_details(data)" t-as="o"> |
||||
|
|
||||
|
<tr> |
||||
|
<td> |
||||
|
<span t-esc="o.name"/> |
||||
|
</td> |
||||
|
<td> |
||||
|
<img t-if="o.product_id.image_medium" t-att-src="'data:image/png;base64,%s' % o.product_id.image_medium" style="max-height: 40px;"/> |
||||
|
</td> |
||||
|
<td> |
||||
|
<span t-esc="o.product_id.name"/> |
||||
|
</td> |
||||
|
<td> |
||||
|
<span t-esc="o.product_qty"/> |
||||
|
</td> |
||||
|
<td> |
||||
|
<span t-esc="o.product_uom.name"/> |
||||
|
</td> |
||||
|
<td> |
||||
|
<span t-esc="o.user_id.name"/> |
||||
|
</td> |
||||
|
<td> |
||||
|
<span t-esc="o.date_planned"/> |
||||
|
</td> |
||||
|
<td> |
||||
|
<span t-esc="o.state"/> |
||||
|
</td> |
||||
|
</tr> |
||||
|
|
||||
|
</t> |
||||
|
</tbody> |
||||
|
</table> |
||||
|
</div> |
||||
|
</t> |
||||
|
</t> |
||||
|
</template> |
||||
|
</data> |
||||
|
</openerp> |
@ -0,0 +1,56 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8" ?> |
||||
|
<openerp> |
||||
|
<data> |
||||
|
|
||||
|
<record id="mrp_wizard_view" model="ir.ui.view"> |
||||
|
<field name="name">MRP Report</field> |
||||
|
<field name="model">mrp.report</field> |
||||
|
<field name="arch" type="xml"> |
||||
|
<form string="MRP Report"> |
||||
|
<group> |
||||
|
<group> |
||||
|
<field name="product" widget="many2many_tags" /> |
||||
|
<field name="filter"/> |
||||
|
<field name="date_from" attrs="{'invisible': [('filter','=',False)], 'required': [('filter', '=', True)]}"/> |
||||
|
<field name="date_to" attrs="{'invisible': [('filter','=',False)], 'required': [('filter', '=', True)]}"/> |
||||
|
</group> |
||||
|
<group> |
||||
|
<field name="stage"/> |
||||
|
<field name="filter_user"/> |
||||
|
<field name="responsible" widget="many2many_tags" attrs="{'invisible': [('filter_user','=',False)], 'required': [('filter_user', '=', True)]}"/> |
||||
|
</group> |
||||
|
</group> |
||||
|
|
||||
|
<footer> |
||||
|
<button name="check_report" string="Export xls" type="object" |
||||
|
class="oe_highlight" style="margin: 0 5px;" |
||||
|
context="{'xls_export':1}" icon='gtk-print' /> |
||||
|
<button name="print_pdf" string="Print Pdf" type="object" |
||||
|
class="oe_highlight" style="margin: 0 5px;" |
||||
|
icon='gtk-print' /> |
||||
|
or |
||||
|
<button string="Cancel" class="oe_link" special="cancel" /> |
||||
|
</footer> |
||||
|
</form> |
||||
|
</field> |
||||
|
|
||||
|
</record> |
||||
|
|
||||
|
<record model="ir.actions.act_window" id="mrp_wizard_action"> |
||||
|
<field name="name">MRP Report</field> |
||||
|
<field name="res_model">mrp.report</field> |
||||
|
<field name="view_type">form</field> |
||||
|
<field name="view_mode">form</field> |
||||
|
<field name="target">new</field> |
||||
|
|
||||
|
</record> |
||||
|
|
||||
|
|
||||
|
<menuitem id="mrp_report_menu" name="Print Report" |
||||
|
parent="base.menu_mrp_root"/> |
||||
|
<menuitem id="mrp_pdf$xls_menu" name="PDF and XLS" |
||||
|
parent="manufacturing_reports.mrp_report_menu" |
||||
|
action="mrp_wizard_action"/> |
||||
|
</data> |
||||
|
|
||||
|
</openerp> |
@ -0,0 +1,24 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################## |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# Copyright (C) 2012-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
||||
|
# Author: Cybrosys Technologies(<http://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 <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################## |
||||
|
|
||||
|
import mrp_report_wizard |
@ -0,0 +1,64 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################## |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# Copyright (C) 2012-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
||||
|
# Author: Cybrosys Technologies(<http://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 <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################## |
||||
|
|
||||
|
from openerp import models, fields |
||||
|
|
||||
|
|
||||
|
class MrpReportWizard (models.Model): |
||||
|
_name = "mrp.report" |
||||
|
|
||||
|
filter = fields.Boolean('Enable filter by date') |
||||
|
date_from = fields.Date("Start Date") |
||||
|
date_to = fields.Date("End Date") |
||||
|
filter_user = fields.Boolean("Filter On Responsible") |
||||
|
responsible = fields.Many2many('res.users', string='Responsible') |
||||
|
product = fields.Many2many('product.product', string='Product') |
||||
|
stage = fields.Selection([ |
||||
|
('confirmed', 'Confirmed'), |
||||
|
('planned', 'Planned'), |
||||
|
('progress', 'In Progress'), |
||||
|
('done', 'Done'), |
||||
|
('cancel', 'Cancelled')], string="Filter State") |
||||
|
|
||||
|
def check_report(self, cr, uid, ids, context): |
||||
|
data = self.read(cr, uid, ids, ['filter_user', |
||||
|
'filter', 'date_from', 'responsible', |
||||
|
'date_to', 'product', 'stage'], context=context)[0] |
||||
|
return {'type': 'ir.actions.report.xml', |
||||
|
'report_name': 'mrp_reports_xls', |
||||
|
'datas': data} |
||||
|
|
||||
|
def print_pdf(self, cr, uid, ids, context=None): |
||||
|
if context is None: |
||||
|
context = {} |
||||
|
data = self.read(cr, uid, ids, ['filter_user', |
||||
|
'filter', 'date_from', 'responsible', |
||||
|
'date_to', 'product', 'stage'], context=context)[0] |
||||
|
datas = { |
||||
|
'ids': context.get('active_ids', []), |
||||
|
'model': 'mrp.report', |
||||
|
'form': data |
||||
|
} |
||||
|
datas['form']['active_ids'] = context.get('active_ids', False) |
||||
|
return self.pool['report'].get_action(cr, uid, [], 'manufacturing_reports.mrp_pdf', data=data, |
||||
|
context=context) |
Loading…
Reference in new issue