diff --git a/car_workshop_report/README.rst b/car_workshop_report/README.rst new file mode 100644 index 000000000..b202fd893 --- /dev/null +++ b/car_workshop_report/README.rst @@ -0,0 +1,48 @@ + +Report To Car Workshop v9 +========================= + +This module manages the report of Car Workshop. This is fully +integrated with Car Workshop Management module. + + +Installation +============ + +To install this module, you need to install Car Workshop Management +module located in: +https://apps.odoo.com/apps/modules/9.0/fleet_car_workshop/ +Also Report Xls located in : https://github.com/OCA/reporting-engine + + +Implementation +============== + +Reports can be in downloaded in XLS and PDF format.Also we can +filter results based on: + +Vehicle + +Date + +State/Status + +Customer + +Assigned Person. + +Credits +======= +* Cybrosys Techno Solutions, http://www.Cybrosys.com + +Author +------ +Developer: Treesa Maria Jude @ cybrosys, treesa@cybrosys.in +Guidance: Nilmar Shereef @ cybrosys, shereef@cybrosys.in + + + + + + + + + + + + diff --git a/car_workshop_report/__init__.py b/car_workshop_report/__init__.py new file mode 100644 index 000000000..942f00d16 --- /dev/null +++ b/car_workshop_report/__init__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2017-TODAY Cybrosys Technologies(). +# Author: Nilmar Shereef() +# 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 . +# +############################################################################## +import report +import wizards diff --git a/car_workshop_report/__openerp__.py b/car_workshop_report/__openerp__.py new file mode 100644 index 000000000..5e17b96aa --- /dev/null +++ b/car_workshop_report/__openerp__.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2017-TODAY Cybrosys Technologies(). +# Author: Nilmar Shereef() +# 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 . +# +############################################################################## +{ + 'name': 'Car Workshop Report', + 'version': '9.0.1.0.0', + 'summary': 'Reports for Car Workshop Management', + 'category': 'Industries', + 'author': 'Cybrosys Techno Solutions', + 'website': "http://www.cybrosys.com", + 'company': 'Cybrosys Techno Solutions', + 'depends': ['report_xls', 'fleet_car_workshop'], + 'data': [ + 'views/report_wizard.xml', + 'views/workshop_pdf_template.xml' + ], + 'license': 'LGPL-3', + 'images': ['static/description/banner.jpg'], + 'installable': True, + 'auto_install': False, + 'application': False, +} + diff --git a/car_workshop_report/report/__init__.py b/car_workshop_report/report/__init__.py new file mode 100644 index 000000000..94ab9152c --- /dev/null +++ b/car_workshop_report/report/__init__.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2017-TODAY Cybrosys Technologies(). +# Author: Nilmar Shereef() +# 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 . +# +############################################################################## +import car_xls_report +import car_pdf_report + diff --git a/car_workshop_report/report/car_pdf_report.py b/car_workshop_report/report/car_pdf_report.py new file mode 100644 index 000000000..aaee4d04d --- /dev/null +++ b/car_workshop_report/report/car_pdf_report.py @@ -0,0 +1,405 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2017-TODAY Cybrosys Technologies(). +# Author: Nilmar Shereef() +# 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 . +# +############################################################################## + +import datetime +from openerp.report import report_sxw +from openerp.osv import osv + + +def get_xls(obj): + getvals = { + 'name': obj.name, + 'vehicle': obj.vehicle_id.name.name, + 'date_deadline': obj.date_deadline, + 'partner_id': obj.partner_id.name, + 'user_id': obj.user_id.name, + 'amount_total': obj.amount_total, + 'stage_id': obj.stage_id.name, + } + return getvals + + +class CarReport(report_sxw.rml_parse): + + def __init__(self, cr, uid, name, context=None): + super(CarReport, 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_vehicle'] is True: + if data['filter_user'] is True: + + # ----------------------- FILTER ON DATE PARTNER STATE SP ------------------------- + if data['filter'] == 'filter_date' and data['filter_partner'] is True \ + and data['stage_id'] is not False: + for k in range(0, len(data['vehicles'])): + for j in range(0, len(data['partner_name'])): + for l in range(0, len(data['sales_person'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if (data['date_from'] <= obj.date_deadline) \ + and (data['date_to'] >= obj.date_deadline) \ + and obj.partner_id.id == data['partner_name'][j] \ + and obj.stage_id.id == data['stage_id'][0] \ + and obj.vehicle_id.name.id == data['vehicles'][k] \ + and obj.user_id.id == data['sales_person'][l]: + lines.append(get_xls(obj)) + + # ----------------------- FILTER ON DATE AND PARTNER SP ------------------------- + elif data['filter'] == 'filter_date' and data['filter_partner'] is True: + for k in range(0, len(data['vehicles'])): + for j in range(0, len(data['partner_name'])): + for l in range(0, len(data['sales_person'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if (data['date_from'] <= obj.date_deadline) \ + and (data['date_to'] >= obj.date_deadline) \ + and obj.vehicle_id.name.id == data['vehicles'][k] \ + and obj.partner_id.id == data['partner_name'][j] \ + and obj.user_id.id == data['sales_person'][l]: + lines.append(get_xls(obj)) + + # ----------------------- FILTER ON DATE AND STATE SP------------------------- + elif data['filter'] == 'filter_date' and data['stage_id'] is not False: + for k in range(0, len(data['vehicles'])): + for l in range(0, len(data['sales_person'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if (data['date_from'] <= obj.date_deadline) \ + and (data['date_to'] >= obj.date_deadline) \ + and obj.stage_id.id == data['stage_id'][0] \ + and obj.vehicle_id.name.id == data['vehicles'][k] \ + and obj.user_id.id == data['sales_person'][l]: + lines.append(get_xls(obj)) + + # ----------------------- FILTER ON PARTNER AND STATE SP------------------------- + elif data['stage_id'] is not False and data['filter_partner'] is True: + for k in range(0, len(data['vehicles'])): + for j in range(0, len(data['partner_name'])): + for l in range(0, len(data['sales_person'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if obj.stage_id.id == data['stage_id'][0] \ + and obj.vehicle_id.name.id == data['vehicles'][k] \ + and obj.partner_id.id == data['partner_name'][j] \ + and obj.user_id.id == data['sales_person'][l]: + lines.append(get_xls(obj)) + + # ----------------------- FILTER ON DATE SP------------------------- + elif data['filter'] == 'filter_date': + for k in range(0, len(data['vehicles'])): + for l in range(0, len(data['sales_person'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if (data['date_from'] <= obj.date_deadline) \ + and (data['date_to'] >= obj.date_deadline) \ + and obj.vehicle_id.name.id == data['vehicles'][k] \ + and obj.user_id.id == data['sales_person'][l]: + lines.append(get_xls(obj)) + + # ----------------------- FILTER ON PARTNER SP------------------------- + elif data['filter_partner'] is True: + for k in range(0, len(data['vehicles'])): + for j in range(0, len(data['partner_name'])): + for l in range(0, len(data['sales_person'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if obj.partner_id.id == data['partner_name'][j] \ + and obj.vehicle_id.name.id == data['vehicles'][k] \ + and obj.user_id.id == data['sales_person'][l]: + lines.append(get_xls(obj)) + + # ----------------------- FILTER ON STATE SP------------------------- + elif data['stage_id'] is not False: + for k in range(0, len(data['vehicles'])): + for l in range(0, len(data['sales_person'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if obj.stage_id.id == data['stage_id'][0] \ + and obj.vehicle_id.name.id == data['vehicles'][k] \ + and obj.user_id.id == data['sales_person'][l]: + lines.append(get_xls(obj)) + + # ------------------------ FILTER ON SP--------------------------------------- + else: + for k in range(0, len(data['vehicles'])): + for l in range(0, len(data['sales_person'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if obj.user_id.id == data['sales_person'][l] \ + and obj.vehicle_id.name.id == data['vehicles'][k]: + lines.append(get_xls(obj)) + else: + # ----------------------- FILTER ON DATE PARTNER STATE ------------------------- + if data['filter'] == 'filter_date' and data['filter_partner'] is True \ + and data['stage_id'] is not False: + for k in range(0, len(data['vehicles'])): + for j in range(0, len(data['partner_name'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if (data['date_from'] <= obj.date_deadline) and (data['date_to'] >= obj.date_deadline) \ + and obj.partner_id.id == data['partner_name'][j] \ + and obj.vehicle_id.name.id == data['vehicles'][k] \ + and obj.stage_id.id == data['stage_id'][0]: + lines.append(get_xls(obj)) + + # ----------------------- FILTER ON DATE AND PARTNER ------------------------- + elif data['filter'] == 'filter_date' and data['filter_partner'] is True: + for k in range(0, len(data['vehicles'])): + for j in range(0, len(data['partner_name'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if (data['date_from'] <= obj.date_deadline) \ + and (data['date_to'] >= obj.date_deadline) \ + and obj.vehicle_id.name.id == data['vehicles'][k] \ + and obj.partner_id.id == data['partner_name'][j]: + lines.append(get_xls(obj)) + + # ----------------------- FILTER ON DATE AND STATE ------------------------- + elif data['filter'] == 'filter_date' and data['stage_id'] is not False: + for k in range(0, len(data['vehicles'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if (data['date_from'] <= obj.date_deadline) and (data['date_to'] >= obj.date_deadline) \ + and obj.vehicle_id.name.id == data['vehicles'][k] \ + and obj.stage_id.id == data['stage_id'][0]: + lines.append(get_xls(obj)) + + # ----------------------- FILTER ON PARTNER AND STATE ------------------------- + elif data['stage_id'] is not False and data['filter_partner'] is True: + for k in range(0, len(data['vehicles'])): + for j in range(0, len(data['partner_name'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if obj.stage_id.id == data['stage_id'][0] \ + and obj.vehicle_id.name.id == data['vehicles'][k] \ + and obj.partner_id.id == data['partner_name'][j]: + lines.append(get_xls(obj)) + # ----------------------- FILTER ON DATE ------------------------- + elif data['filter'] == 'filter_date': + for k in range(0, len(data['vehicles'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if (data['date_from'] <= obj.date_deadline) \ + and obj.vehicle_id.name.id == data['vehicles'][k] \ + and (data['date_to'] >= obj.date_deadline): + lines.append(get_xls(obj)) + + # ----------------------- FILTER ON PARTNER ------------------------- + elif data['filter_partner'] is True: + for k in range(0, len(data['vehicles'])): + for j in range(0, len(data['partner_name'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if obj.partner_id.id == data['partner_name'][j] \ + and obj.vehicle_id.name.id == data['vehicles'][k]: + lines.append(get_xls(obj)) + + # ----------------------- FILTER ON STATE ------------------------- + elif data['stage_id'] is not False: + + for k in range(0, len(data['vehicles'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if obj.stage_id.id == data['stage_id'][0] and obj.vehicle_id.name.id == data['vehicles'][k]: + lines.append(get_xls(obj)) + + # ----------------------- VEHICLE ONLY ------------------------- + else: + for k in range(0, len(data['vehicles'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if obj.vehicle_id.name.id == data['vehicles'][k]: + lines.append(get_xls(obj)) + + else: + if data['filter_user'] is True: + # ----------------------- FILTER ON DATE PARTNER STATE SP ------------------------- + if data['filter'] == 'filter_date' and data['filter_partner'] is True \ + and data['stage_id'] is not False: + for j in range(0, len(data['partner_name'])): + for l in range(0, len(data['sales_person'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if (data['date_from'] <= obj.date_deadline) \ + and (data['date_to'] >= obj.date_deadline) \ + and obj.partner_id.id == data['partner_name'][j] \ + and obj.stage_id.id == data['stage_id'][0] \ + and obj.user_id.id == data['sales_person'][l]: + lines.append(get_xls(obj)) + + # ----------------------- FILTER ON DATE AND PARTNER SP ------------------------- + elif data['filter'] == 'filter_date' and data['filter_partner'] is True: + for j in range(0, len(data['partner_name'])): + for l in range(0, len(data['sales_person'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if (data['date_from'] <= obj.date_deadline) \ + and (data['date_to'] >= obj.date_deadline) \ + and obj.partner_id.id == data['partner_name'][j] \ + and obj.user_id.id == data['sales_person'][l]: + lines.append(get_xls(obj)) + + # ----------------------- FILTER ON DATE AND STATE SP------------------------- + elif data['filter'] == 'filter_date' and data['stage_id'] is not False: + for l in range(0, len(data['sales_person'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if (data['date_from'] <= obj.date_deadline) \ + and (data['date_to'] >= obj.date_deadline) \ + and obj.stage_id.id == data['stage_id'][0] \ + and obj.user_id.id == data['sales_person'][l]: + lines.append(get_xls(obj)) + + # ----------------------- FILTER ON PARTNER AND STATE SP------------------------- + elif data['stage_id'] is not False and data['filter_partner'] is True: + for j in range(0, len(data['partner_name'])): + for l in range(0, len(data['sales_person'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if obj.stage_id.id == data['stage_id'][0] \ + and obj.partner_id.id == data['partner_name'][j] \ + and obj.user_id.id == data['sales_person'][l]: + lines.append(get_xls(obj)) + + # ----------------------- FILTER ON DATE SP------------------------- + elif data['filter'] == 'filter_date': + for l in range(0, len(data['sales_person'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if (data['date_from'] <= obj.date_deadline) \ + and (data['date_to'] >= obj.date_deadline) \ + and obj.user_id.id == data['sales_person'][l]: + lines.append(get_xls(obj)) + + # ----------------------- FILTER ON PARTNER SP------------------------- + elif data['filter_partner'] is True: + for j in range(0, len(data['partner_name'])): + for l in range(0, len(data['sales_person'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if obj.partner_id.id == data['partner_name'][j] \ + and obj.user_id.id == data['sales_person'][l]: + lines.append(get_xls(obj)) + + # ----------------------- FILTER ON STATE SP------------------------- + elif data['stage_id'] is not False: + for l in range(0, len(data['sales_person'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if obj.stage_id.id == data['stage_id'][0] \ + and obj.user_id.id == data['sales_person'][l]: + lines.append(get_xls(obj)) + + # ------------------------ FILTER ON SP--------------------------------------- + else: + for l in range(0, len(data['sales_person'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if obj.user_id.id == data['sales_person'][l]: + lines.append(get_xls(obj)) + else: + # ----------------------- FILTER ON DATE PARTNER STATE ------------------------- + if data['filter'] == 'filter_date' and data['filter_partner'] is True \ + and data['stage_id'] is not False: + for j in range(0, len(data['partner_name'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if (data['date_from'] <= obj.date_deadline) and (data['date_to'] >= obj.date_deadline) \ + and obj.partner_id.id == data['partner_name'][j] \ + and obj.stage_id.id == data['stage_id'][0]: + lines.append(get_xls(obj)) + + # ----------------------- FILTER ON DATE AND PARTNER ------------------------- + elif data['filter'] == 'filter_date' and data['filter_partner'] is True: + for j in range(0, len(data['partner_name'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if (data['date_from'] <= obj.date_deadline) \ + and (data['date_to'] >= obj.date_deadline) \ + and obj.partner_id.id == data['partner_name'][j]: + lines.append(get_xls(obj)) + + # ----------------------- FILTER ON DATE AND STATE ------------------------- + elif data['filter'] == 'filter_date' and data['stage_id'] is not False: + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if (data['date_from'] <= obj.date_deadline) and (data['date_to'] >= obj.date_deadline) \ + and obj.stage_id.id == data['stage_id'][0]: + lines.append(get_xls(obj)) + + # ----------------------- FILTER ON PARTNER AND STATE ------------------------- + elif data['stage_id'] is not False and data['filter_partner'] is True: + for j in range(0, len(data['partner_name'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if obj.stage_id.id == data['stage_id'][0] and obj.partner_id.id == data['partner_name'][j]: + lines.append(get_xls(obj)) + + # ----------------------- FILTER ON DATE ------------------------- + elif data['filter'] == 'filter_date': + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if (data['date_from'] <= obj.date_deadline) and (data['date_to'] >= obj.date_deadline): + lines.append(get_xls(obj)) + + # ----------------------- FILTER ON PARTNER ------------------------- + elif data['filter_partner'] is True: + for j in range(0, len(data['partner_name'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if obj.partner_id.id == data['partner_name'][j]: + lines.append(get_xls(obj)) + + # ----------------------- FILTER ON STATE ------------------------- + elif data['stage_id'] is not False: + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if obj.stage_id.id == data['stage_id'][0]: + lines.append(get_xls(obj)) + + # ----------------------- NO FILTERS ------------------------- + else: + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + lines.append(get_xls(obj)) + + return lines + + +class PrintReport(osv.AbstractModel): + _name = 'report.car_workshop_report.workshop_pdf' + _inherit = 'report.abstract_report' + _template = 'car_workshop_report.workshop_pdf' + _wrapped_report_class = CarReport diff --git a/car_workshop_report/report/car_xls_report.py b/car_workshop_report/report/car_xls_report.py new file mode 100644 index 000000000..80b834cc6 --- /dev/null +++ b/car_workshop_report/report/car_xls_report.py @@ -0,0 +1,571 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2017-TODAY Cybrosys Technologies(). +# Author: Nilmar Shereef() +# 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 . +# +############################################################################## + +import xlwt +import datetime +from openerp.addons.report_xls.report_xls import report_xls + + +def get_xls(obj): + getvals = { + 'name': obj.name, + 'vehicle': obj.vehicle_id.name.name, + 'date_deadline': obj.date_deadline, + 'partner_id': obj.partner_id.name, + 'user_id': obj.user_id.name, + 'amount_total': obj.amount_total, + 'stage_id': obj.stage_id.name, + } + templist1 = [(1, 3, 0, 'text', getvals['name']), + (2, 3, 0, 'text', getvals['vehicle']), + (3, 2, 0, 'text', getvals['date_deadline']), + (4, 2, 0, 'text', getvals['partner_id']), + (5, 2, 0, 'text', getvals['user_id']), + (6, 1, 0, 'number', getvals['amount_total']), + (7, 1, 0, 'text', getvals['stage_id']), + ] + return templist1 + + +class SaleOrderReport(report_xls): + + def generate_xls_report(self, _p, _xs, data, objects, wb): + report_name = "Car Workshop Report" + 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 + + if data['filter'] == 'filter_date': + filter1 = "Filter By Date:" + 'Date' + top4 = [(1, 2, 0, 'text', filter1)] + + row_data = self.xls_row_template(top4, [x[0] for x in top4]) + row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center_bold_no) + + date_from = "Date from :" + str(data['date_from']) + date_to = "Date to :" + str(data['date_to']) + top6 = [(1, 2, 0, 'text', date_from), ] + row_data = self.xls_row_template(top6, [x[0] for x in top6]) + row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) + top6 = [(1, 2, 0, 'text', date_to), ] + row_data = self.xls_row_template(top6, [x[0] for x in top6]) + row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) + row_pos += 1 + + else: + filter1 = "Filter By Date:" + 'No filter' + top4 = [(1, 2, 0, 'text', filter1)] + + row_data = self.xls_row_template(top4, [x[0] for x in top4]) + row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center_bold_no) + + templist = [(1, 3, 0, 'text', 'Task '), + (2, 3, 0, 'text', 'Vehicle'), + (3, 2, 0, 'text', 'Deadline'), + (4, 2, 0, 'text', 'Customer'), + (5, 2, 0, 'text', 'Assignrd To'), + (6, 1, 0, 'text', 'Total'), + (7, 1, 0, 'text', 'Status'), ] + 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_vehicle'] is True: + if data['filter_user'] is True: + # ----------------------- FILTER ON DATE PARTNER STATE SP ------------------------- + if data['filter'] == 'filter_date' and data['filter_partner'] is True \ + and data['stage_id'] is not False: + for k in range(0, len(data['vehicles'])): + for j in range(0, len(data['partner_name'])): + for l in range(0, len(data['sales_person'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if (data['date_from'] <= obj.date_deadline) \ + and (data['date_to'] >= obj.date_deadline) \ + and obj.partner_id.id == data['partner_name'][j] \ + and obj.stage_id.id == data['stage_id'][0] \ + and obj.vehicle_id.name.id == data['vehicles'][k] \ + and obj.user_id.id == data['sales_person'][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) + + # ----------------------- FILTER ON DATE AND PARTNER SP ------------------------- + elif data['filter'] == 'filter_date' and data['filter_partner'] is True: + for k in range(0, len(data['vehicles'])): + for j in range(0, len(data['partner_name'])): + for l in range(0, len(data['sales_person'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if (data['date_from'] <= obj.date_deadline) \ + and (data['date_to'] >= obj.date_deadline) \ + and obj.vehicle_id.name.id == data['vehicles'][k] \ + and obj.partner_id.id == data['partner_name'][j] \ + and obj.user_id.id == data['sales_person'][l]: + + templist2 = get_xls(obj) + + row_data = self.xls_row_template(templist2, [x[0] for x in templist2]) + row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) + + # ----------------------- FILTER ON DATE AND STATE SP------------------------- + elif data['filter'] == 'filter_date' and data['stage_id'] is not False: + for k in range(0, len(data['vehicles'])): + for l in range(0, len(data['sales_person'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if (data['date_from'] <= obj.date_deadline) \ + and (data['date_to'] >= obj.date_deadline) \ + and obj.stage_id.id == data['stage_id'][0] \ + and obj.vehicle_id.name.id == data['vehicles'][k] \ + and obj.user_id.id == data['sales_person'][l]: + + templist2 = get_xls(obj) + + row_data = self.xls_row_template(templist2, [x[0] for x in templist2]) + row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) + + # ----------------------- FILTER ON PARTNER AND STATE SP------------------------- + elif data['stage_id'] is not False and data['filter_partner'] is True: + for k in range(0, len(data['vehicles'])): + for j in range(0, len(data['partner_name'])): + for l in range(0, len(data['sales_person'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if obj.stage_id.id == data['stage_id'][0] \ + and obj.vehicle_id.name.id == data['vehicles'][k] \ + and obj.partner_id.id == data['partner_name'][j] \ + and obj.user_id.id == data['sales_person'][l]: + + templist2 = get_xls(obj) + + row_data = self.xls_row_template(templist2, [x[0] for x in templist2]) + row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) + + # ----------------------- FILTER ON DATE SP------------------------- + elif data['filter'] == 'filter_date': + for k in range(0, len(data['vehicles'])): + for l in range(0, len(data['sales_person'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if (data['date_from'] <= obj.date_deadline)\ + and (data['date_to'] >= obj.date_deadline) \ + and obj.vehicle_id.name.id == data['vehicles'][k] \ + and obj.user_id.id == data['sales_person'][l]: + + templist2 = get_xls(obj) + + row_data = self.xls_row_template(templist2, [x[0] for x in templist2]) + row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) + + # ----------------------- FILTER ON PARTNER SP------------------------- + elif data['filter_partner'] is True: + for k in range(0, len(data['vehicles'])): + for j in range(0, len(data['partner_name'])): + for l in range(0, len(data['sales_person'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if obj.partner_id.id == data['partner_name'][j] \ + and obj.vehicle_id.name.id == data['vehicles'][k] \ + and obj.user_id.id == data['sales_person'][l]: + + templist3 = get_xls(obj) + + row_data = self.xls_row_template(templist3, [x[0] for x in templist3]) + row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) + + # ----------------------- FILTER ON STATE SP------------------------- + elif data['stage_id'] is not False: + for k in range(0, len(data['vehicles'])): + for l in range(0, len(data['sales_person'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if obj.stage_id.id == data['stage_id'][0] \ + and obj.vehicle_id.name.id == data['vehicles'][k] \ + and obj.user_id.id == data['sales_person'][l]: + + templist4 = get_xls(obj) + + row_data = self.xls_row_template(templist4, [x[0] for x in templist4]) + row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) + + # ------------------------ FILTER ON SP--------------------------------------- + else: + for k in range(0, len(data['vehicles'])): + for l in range(0, len(data['sales_person'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if obj.user_id.id == data['sales_person'][l] \ + and obj.vehicle_id.name.id == data['vehicles'][k]: + + templist4 = get_xls(obj) + + row_data = self.xls_row_template(templist4, [x[0] for x in templist4]) + row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) + else: + # ----------------------- FILTER ON DATE PARTNER STATE ------------------------- + if data['filter'] == 'filter_date' and data['filter_partner'] is True \ + and data['stage_id'] is not False: + for k in range(0, len(data['vehicles'])): + for j in range(0, len(data['partner_name'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if (data['date_from'] <= obj.date_deadline) \ + and (data['date_to'] >= obj.date_deadline) \ + and obj.partner_id.id == data['partner_name'][j] \ + and obj.vehicle_id.name.id == data['vehicles'][k] \ + and obj.stage_id.id == data['stage_id'][0]: + 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) + + # ----------------------- FILTER ON DATE AND PARTNER ------------------------- + elif data['filter'] == 'filter_date' and data['filter_partner'] is True: + for k in range(0, len(data['vehicles'])): + for j in range(0, len(data['partner_name'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if (data['date_from'] <= obj.date_deadline) \ + and (data['date_to'] >= obj.date_deadline) \ + and obj.vehicle_id.name.id == data['vehicles'][k] \ + and obj.partner_id.id == data['partner_name'][j]: + templist2 = get_xls(obj) + + row_data = self.xls_row_template(templist2, [x[0] for x in templist2]) + row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) + + # ----------------------- FILTER ON DATE AND STATE ------------------------- + elif data['filter'] == 'filter_date' and data['stage_id'] is not False: + for k in range(0, len(data['vehicles'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if (data['date_from'] <= obj.date_deadline)\ + and (data['date_to'] >= obj.date_deadline) \ + and obj.vehicle_id.name.id == data['vehicles'][k] \ + and obj.stage_id.id == data['stage_id'][0]: + templist2 = get_xls(obj) + + row_data = self.xls_row_template(templist2, [x[0] for x in templist2]) + row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) + + # ----------------------- FILTER ON PARTNER AND STATE ------------------------- + elif data['stage_id'] is not False and data['filter_partner'] is True: + for k in range(0, len(data['vehicles'])): + for j in range(0, len(data['partner_name'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if obj.stage_id.id == data['stage_id'][0] \ + and obj.vehicle_id.name.id == data['vehicles'][k] \ + and obj.partner_id.id == data['partner_name'][j]: + templist2 = get_xls(obj) + + row_data = self.xls_row_template(templist2, [x[0] for x in templist2]) + row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) + + # ----------------------- FILTER ON DATE ------------------------- + elif data['filter'] == 'filter_date': + for k in range(0, len(data['vehicles'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if (data['date_from'] <= obj.date_deadline) \ + and obj.vehicle_id.name.id == data['vehicles'][k] \ + and (data['date_to'] >= obj.date_deadline): + templist2 = get_xls(obj) + + row_data = self.xls_row_template(templist2, [x[0] for x in templist2]) + row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) + + # ----------------------- FILTER ON PARTNER ------------------------- + elif data['filter_partner'] is True: + for k in range(0, len(data['vehicles'])): + for j in range(0, len(data['partner_name'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if obj.partner_id.id == data['partner_name'][j] \ + and obj.vehicle_id.name.id == data['vehicles'][k]: + templist3 = get_xls(obj) + + row_data = self.xls_row_template(templist3, [x[0] for x in templist3]) + row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) + + # ----------------------- FILTER ON STATE ------------------------- + elif data['stage_id'] is not False: + + for k in range(0, len(data['vehicles'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if obj.stage_id.id == data['stage_id'][0] \ + and obj.vehicle_id.name.id == data['vehicles'][k]: + templist4 = get_xls(obj) + + row_data = self.xls_row_template(templist4, [x[0] for x in templist4]) + row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) + + # ----------------------- VEHICLE ONLY ------------------------- + else: + if len(data['vehicles']) == 0: + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + templist4 = get_xls(obj) + row_data = self.xls_row_template(templist4, [x[0] for x in templist4]) + row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) + else: + for k in range(0, len(data['vehicles'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if obj.vehicle_id.name.id == data['vehicles'][k]: + templist4 = get_xls(obj) + row_data = self.xls_row_template(templist4, [x[0] for x in templist4]) + row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) + + else: + if data['filter_user'] is True: + # ----------------------- FILTER ON DATE PARTNER STATE SP ------------------------- + if data['filter'] == 'filter_date' and data['filter_partner'] is True \ + and data['stage_id'] is not False: + for j in range(0, len(data['partner_name'])): + for l in range(0, len(data['sales_person'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if (data['date_from'] <= obj.date_deadline) \ + and (data['date_to'] >= obj.date_deadline) \ + and obj.partner_id.id == data['partner_name'][j]\ + and obj.stage_id.id == data['stage_id'][0] \ + and obj.user_id.id == data['sales_person'][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) + + # ----------------------- FILTER ON DATE AND PARTNER SP ------------------------- + elif data['filter'] == 'filter_date' and data['filter_partner'] is True: + for j in range(0, len(data['partner_name'])): + for l in range(0, len(data['sales_person'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if (data['date_from'] <= obj.date_deadline) \ + and (data['date_to'] >= obj.date_deadline) \ + and obj.partner_id.id == data['partner_name'][j] \ + and obj.user_id.id == data['sales_person'][l]: + templist2 = get_xls(obj) + + row_data = self.xls_row_template(templist2, [x[0] for x in templist2]) + row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) + + # ----------------------- FILTER ON DATE AND STATE SP------------------------- + elif data['filter'] == 'filter_date' and data['stage_id'] is not False: + for l in range(0, len(data['sales_person'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if (data['date_from'] <= obj.date_deadline) \ + and (data['date_to'] >= obj.date_deadline) \ + and obj.stage_id.id == data['stage_id'][0] \ + and obj.user_id.id == data['sales_person'][l]: + templist2 = get_xls(obj) + + row_data = self.xls_row_template(templist2, [x[0] for x in templist2]) + row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) + + # ----------------------- FILTER ON PARTNER AND STATE SP------------------------- + elif data['stage_id'] is not False and data['filter_partner'] is True: + for j in range(0, len(data['partner_name'])): + for l in range(0, len(data['sales_person'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if obj.stage_id.id == data['stage_id'][0] \ + and obj.partner_id.id == data['partner_name'][j] \ + and obj.user_id.id == data['sales_person'][l]: + templist2 = get_xls(obj) + + row_data = self.xls_row_template(templist2, [x[0] for x in templist2]) + row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) + + # ----------------------- FILTER ON DATE SP------------------------- + elif data['filter'] == 'filter_date': + for l in range(0, len(data['sales_person'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if (data['date_from'] <= obj.date_deadline) \ + and (data['date_to'] >= obj.date_deadline) \ + and obj.user_id.id == data['sales_person'][l]: + templist2 = get_xls(obj) + + row_data = self.xls_row_template(templist2, [x[0] for x in templist2]) + row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) + + # ----------------------- FILTER ON PARTNER SP------------------------- + elif data['filter_partner'] is True: + for j in range(0, len(data['partner_name'])): + for l in range(0, len(data['sales_person'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if obj.partner_id.id == data['partner_name'][j] \ + and obj.user_id.id == data['sales_person'][l]: + templist3 = get_xls(obj) + + row_data = self.xls_row_template(templist3, [x[0] for x in templist3]) + row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) + + # ----------------------- FILTER ON STATE SP------------------------- + elif data['stage_id'] is not False: + for l in range(0, len(data['sales_person'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if obj.stage_id.id == data['stage_id'][0] \ + and obj.user_id.id == data['sales_person'][l]: + templist4 = get_xls(obj) + + row_data = self.xls_row_template(templist4, [x[0] for x in templist4]) + row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) + + # ------------------------ FILTER ON SP--------------------------------------- + else: + for l in range(0, len(data['sales_person'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if obj.user_id.id == data['sales_person'][l]: + templist4 = get_xls(obj) + + row_data = self.xls_row_template(templist4, [x[0] for x in templist4]) + row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) + else: + # ----------------------- FILTER ON DATE PARTNER STATE ------------------------- + if data['filter'] == 'filter_date' and data['filter_partner'] is True \ + and data['stage_id'] is not False: + for j in range(0, len(data['partner_name'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if (data['date_from'] <= obj.date_deadline) and (data['date_to'] >= obj.date_deadline) \ + and obj.partner_id.id == data['partner_name'][j] \ + and obj.stage_id.id == data['stage_id'][0]: + 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) + + # ----------------------- FILTER ON DATE AND PARTNER ------------------------- + elif data['filter'] == 'filter_date' and data['filter_partner'] is True: + for j in range(0, len(data['partner_name'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if (data['date_from'] <= obj.date_deadline) \ + and (data['date_to'] >= obj.date_deadline) \ + and obj.partner_id.id == data['partner_name'][j]: + templist2 = get_xls(obj) + + row_data = self.xls_row_template(templist2, [x[0] for x in templist2]) + row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) + + # ----------------------- FILTER ON DATE AND STATE ------------------------- + elif data['filter'] == 'filter_date' and data['stage_id'] is not False: + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if (data['date_from'] <= obj.date_deadline) and (data['date_to'] >= obj.date_deadline) \ + and obj.stage_id.id == data['stage_id'][0]: + templist2 = get_xls(obj) + + row_data = self.xls_row_template(templist2, [x[0] for x in templist2]) + row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) + + # ----------------------- FILTER ON PARTNER AND STATE ------------------------- + elif data['stage_id'] is not False and data['filter_partner'] is True: + for j in range(0, len(data['partner_name'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if obj.stage_id.id == data['stage_id'][0] \ + and obj.partner_id.id == data['partner_name'][j]: + templist2 = get_xls(obj) + + row_data = self.xls_row_template(templist2, [x[0] for x in templist2]) + row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) + + # ----------------------- FILTER ON DATE ------------------------- + elif data['filter'] == 'filter_date': + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if (data['date_from'] <= obj.date_deadline) and (data['date_to'] >= obj.date_deadline): + templist2 = get_xls(obj) + + row_data = self.xls_row_template(templist2, [x[0] for x in templist2]) + row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) + + # ----------------------- FILTER ON PARTNER ------------------------- + elif data['filter_partner'] is True: + for j in range(0, len(data['partner_name'])): + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if obj.partner_id.id == data['partner_name'][j]: + templist3 = get_xls(obj) + + row_data = self.xls_row_template(templist3, [x[0] for x in templist3]) + row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) + + # ----------------------- FILTER ON STATE ------------------------- + elif data['stage_id'] is not False: + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + if obj.stage_id.id == data['stage_id'][0]: + templist4 = get_xls(obj) + + row_data = self.xls_row_template(templist4, [x[0] for x in templist4]) + row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) + + # ----------------------- NO FILTERS ------------------------- + else: + for i in self.pool.get('car.workshop').search(self.cr, self.uid, []): + obj = self.pool.get('car.workshop').browse(self.cr, self.uid, i) + templist4 = get_xls(obj) + row_data = self.xls_row_template(templist4, [x[0] for x in templist4]) + row_pos = self.xls_write_row(ws, row_pos, row_data, cell_center) + +SaleOrderReport('report.workshop_report', 'car.workshop') diff --git a/car_workshop_report/static/description/banner.jpg b/car_workshop_report/static/description/banner.jpg new file mode 100644 index 000000000..629c28f7e Binary files /dev/null and b/car_workshop_report/static/description/banner.jpg differ diff --git a/car_workshop_report/static/description/cybro_logo.png b/car_workshop_report/static/description/cybro_logo.png new file mode 100644 index 000000000..bb309114c Binary files /dev/null and b/car_workshop_report/static/description/cybro_logo.png differ diff --git a/car_workshop_report/static/description/icon.png b/car_workshop_report/static/description/icon.png new file mode 100644 index 000000000..e275f674e Binary files /dev/null and b/car_workshop_report/static/description/icon.png differ diff --git a/car_workshop_report/static/description/index.html b/car_workshop_report/static/description/index.html new file mode 100644 index 000000000..8d104e82b --- /dev/null +++ b/car_workshop_report/static/description/index.html @@ -0,0 +1,99 @@ +
+
+

Car Workshop Management PDF/XLS Report

+

Reports with filter facilities

+

Cybrosys Technologies , www.cybrosys.com

+
    +
  •    Reporting Module for Car Workshop Application.
  • +
  •    PDF & XLS Reports.
  • +
  •    Filter Facilities.
  • +
+
+
+ +
+
+
+

Report Wizard

+

Both XLS and PDF reports

+
+
+

+Reports can be downloaded in XLS and PDF format. +Filter results based on: +

+
    +
  • ⇨   Vehicles
  • +
  • ⇨   Date.
  • +
  • ⇨   State/Status.
  • +
  • ⇨   Customers.
  • +
  • ⇨   Technician.
  • +
+ +
+
+
+ +
+
+
+
+ +
+
+
+

PDF Report

+
+
+
+ +
+
+
+
+ +
+
+
+

XLS Report

+
+
+
+ +
+
+
+
+ +
+
+
+

+ If you want to analyze the working of Car Workshop Management Module, Click Here:

+
+ +
+
+
+ +
+

Need Any Help?

+ + +
+ + + diff --git a/car_workshop_report/static/description/pdf.png b/car_workshop_report/static/description/pdf.png new file mode 100644 index 000000000..7b51fdde1 Binary files /dev/null and b/car_workshop_report/static/description/pdf.png differ diff --git a/car_workshop_report/static/description/wizard.png b/car_workshop_report/static/description/wizard.png new file mode 100644 index 000000000..206f5fd16 Binary files /dev/null and b/car_workshop_report/static/description/wizard.png differ diff --git a/car_workshop_report/static/description/xls.png b/car_workshop_report/static/description/xls.png new file mode 100644 index 000000000..6d5b4047c Binary files /dev/null and b/car_workshop_report/static/description/xls.png differ diff --git a/car_workshop_report/views/report_wizard.xml b/car_workshop_report/views/report_wizard.xml new file mode 100644 index 000000000..edc3fc338 --- /dev/null +++ b/car_workshop_report/views/report_wizard.xml @@ -0,0 +1,67 @@ + + + + + workshop.xls.Report.view + workshop.report + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+ + + Workshop Report + workshop.report + form + form + new + + + + +
+
\ No newline at end of file diff --git a/car_workshop_report/views/workshop_pdf_template.xml b/car_workshop_report/views/workshop_pdf_template.xml new file mode 100644 index 000000000..084c62b4d --- /dev/null +++ b/car_workshop_report/views/workshop_pdf_template.xml @@ -0,0 +1,70 @@ + + + + + + + \ No newline at end of file diff --git a/car_workshop_report/wizards/__init__.py b/car_workshop_report/wizards/__init__.py new file mode 100644 index 000000000..9a45dc5fa --- /dev/null +++ b/car_workshop_report/wizards/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2017-TODAY Cybrosys Technologies(). +# Author: Nilmar Shereef() +# 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 . +# +############################################################################## +import report_wizard diff --git a/car_workshop_report/wizards/report_wizard.py b/car_workshop_report/wizards/report_wizard.py new file mode 100644 index 000000000..f141c8a71 --- /dev/null +++ b/car_workshop_report/wizards/report_wizard.py @@ -0,0 +1,62 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2017-TODAY Cybrosys Technologies(). +# Author: Nilmar Shereef() +# 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 . +# +############################################################################## +from openerp import models, fields + + +class SaleReportWizard (models.Model): + _name = "workshop.report" + + filter_partner = fields.Boolean('Enable Partner Filter') + filter = fields.Selection([('filter_date', 'Date'), ], "Filter by") + date_from = fields.Date("Start Date") + date_to = fields.Date("End Date") + filter_user = fields.Boolean("Enable Sales Person Filter") + filter_vehicle = fields.Boolean("Filter By Vehicle") + sales_person = fields.Many2many('res.users', string='Sales Person') + partner_name = fields.Many2many('res.partner', 'multiple_partners', 'partner_names', string='Partner Name') + vehicles = fields.Many2many('fleet.vehicle', string='Vehicle Name',) + stage_id = fields.Many2one('worksheet.stages', string='Select State') + + def check_report(self, cr, uid, ids, context): + data = self.read(cr, uid, ids, ['partner_name', 'filter_partner', 'filter_user', + 'filter', 'date_from', 'sales_person', + 'date_to', 'filter_vehicle', 'vehicles', 'stage_id'], context=context)[0] + + return {'type': 'ir.actions.report.xml', + 'report_name': 'workshop_report', + 'datas': data} + + def print_pdf(self, cr, uid, ids, context=None): + if context is None: + context = {} + data = self.read(cr, uid, ids, ['partner_name', 'filter_partner', 'filter_user', + 'filter', 'date_from', 'sales_person', + 'date_to', 'filter_vehicle', 'vehicles', 'stage_id'], context=context)[0] + datas = { + 'ids': context.get('active_ids', []), + 'model': 'workshop.report', + 'form': data + } + datas['form']['active_ids'] = context.get('active_ids', False) + return self.pool['report'].get_action(cr, uid, [], 'car_workshop_report.workshop_pdf', data=data, + context=context)