diff --git a/excel_report_designer/README.rst b/excel_report_designer/README.rst new file mode 100755 index 000000000..d68880408 --- /dev/null +++ b/excel_report_designer/README.rst @@ -0,0 +1,52 @@ +.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg + :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +Excel Report Designer +===================== +This module helps to create reports from various modules + +Configuration +============= +* No additional configurations needed + +Company +------- +* `Cybrosys Techno Solutions `__ + +License +======= +General Public License, version 3 (AGPL v3). +("https://www.odoo.com/documentation/16.0/legal/licenses.html") + +Credits +------- +* Developers: (v16) - Gayathri V + (v17) - Ajith V + (v18) - Safa Faheem PE +Contact: odoo@cybrosys.com + + +Contacts +-------- +* Mail Contact : odoo@cybrosys.com +* Website : https://cybrosys.com + +Bug Tracker +----------- +Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. + +Maintainer +========== +.. image:: https://cybrosys.com/images/logo.png + :target: https://cybrosys.com + +This module is maintained by Cybrosys Technologies. + +For support and more information, please visit `Our Website `__ + +Further information +=================== +HTML Description: ``__ + + diff --git a/excel_report_designer/__init__.py b/excel_report_designer/__init__.py new file mode 100755 index 000000000..6ece371f4 --- /dev/null +++ b/excel_report_designer/__init__.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies (). +# Author: Cybrosys Techno Solutions () +# +# This program is free software: you can modify +# it under the terms of the GNU Affero General Public License (AGPL) as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# 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 Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +################################################################################ +from . import models +from . import controllers +from . import wizards diff --git a/excel_report_designer/__manifest__.py b/excel_report_designer/__manifest__.py new file mode 100755 index 000000000..fff2196c7 --- /dev/null +++ b/excel_report_designer/__manifest__.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies (). +# Author: Cybrosys Techno Solutions () +# +# This program is free software: you can modify +# it under the terms of the GNU Affero General Public License (AGPL) as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# 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 Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +################################################################################ +{ + 'name': 'Excel Report Designer', + 'version': '18.0.1.0.0', + 'author': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'maintainer': 'Cybrosys Techno Solutions', + 'website': 'https://www.cybrosys.com', + 'category': 'Extra Tools', + 'summary': 'This module is used to create reports for' + ' models and can be select the fields the user want to print.', + 'description': """Create Excel Reports for Any Models""", + 'depends': ['sale', 'purchase', 'account', 'base'], + 'data': [ + 'security/ir.model.access.csv', + 'wizards/excel_report_wizards.xml', + 'views/report_excel.xml', + ], + 'assets': { + 'web.assets_backend': [ + '/excel_report_designer/static/src/js/action_manager.js' + ], + }, + 'images': ['static/description/banner.jpg'], + 'license': 'AGPL-3', + 'installable': True, + 'auto_install': False, + 'application': False, +} diff --git a/excel_report_designer/controllers/__init__.py b/excel_report_designer/controllers/__init__.py new file mode 100755 index 000000000..de2224d4a --- /dev/null +++ b/excel_report_designer/controllers/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies (). +# Author: Cybrosys Techno Solutions () +# +# This program is free software: you can modify +# it under the terms of the GNU Affero General Public License (AGPL) as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# 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 Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +################################################################################ +from . import excel_report_designer diff --git a/excel_report_designer/controllers/excel_report_designer.py b/excel_report_designer/controllers/excel_report_designer.py new file mode 100755 index 000000000..e1baaa048 --- /dev/null +++ b/excel_report_designer/controllers/excel_report_designer.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies (). +# Author: Cybrosys Techno Solutions () +# +# This program is free software: you can modify +# it under the terms of the GNU Affero General Public License (AGPL) as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# 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 Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +################################################################################ +import json +from odoo import http +from odoo.http import content_disposition, request +from odoo.tools import html_escape + + +class XLSXReportController(http.Controller): + """This is used to call the xlsx report function""" + + @http.route('/xlsx_reports', type='http', auth='user', + methods=['POST'], csrf=False) + def get_report_xlsx(self, model, options, output_format, report_name, **kw): + """this is used to call the function""" + uid = request.session.uid + report_obj = request.env[model].with_user(uid) + options = json.loads(options) + token = 'dummy-because-api-expects-one' + try: + if output_format == 'xlsx': + response = request.make_response( + None, + headers=[ + ('Content-Type', 'application/vnd.ms-excel'), + ('Content-Disposition', + content_disposition(report_name + '.xlsx')) + ] + ) + report_obj.get_xlsx_report(options, response) + response.set_cookie('fileToken', token) + return response + except Exception as e: + se = http.serialize_exception(e) + error = { + 'code': 200, + 'message': 'Odoo Server Error', + 'data': se + } + return request.make_response(html_escape(json.dumps(error))) diff --git a/excel_report_designer/doc/RELEASE_NOTES.md b/excel_report_designer/doc/RELEASE_NOTES.md new file mode 100755 index 000000000..f2f94a230 --- /dev/null +++ b/excel_report_designer/doc/RELEASE_NOTES.md @@ -0,0 +1,6 @@ +## Module + +#### 01.10.2024 +#### Version 18.0.1.0.0 +#### ADD +- Initial Commit Excel Report Designer diff --git a/excel_report_designer/models/__init__.py b/excel_report_designer/models/__init__.py new file mode 100755 index 000000000..9992285a9 --- /dev/null +++ b/excel_report_designer/models/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies (). +# Author: Cybrosys Techno Solutions () +# +# This program is free software: you can modify +# it under the terms of the GNU Affero General Public License (AGPL) as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# 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 Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +################################################################################ +from . import report_excel diff --git a/excel_report_designer/models/report_excel.py b/excel_report_designer/models/report_excel.py new file mode 100755 index 000000000..3f579dd1a --- /dev/null +++ b/excel_report_designer/models/report_excel.py @@ -0,0 +1,348 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies (). +# Author: Cybrosys Techno Solutions () +# +# This program is free software: you can modify +# it under the terms of the GNU Affero General Public License (AGPL) as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# 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 Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +################################################################################ +from odoo import api, fields, models, _ + +try: + from odoo.tools.misc import xlsxwriter +except ImportError: + import xlsxwriter +import io +import json +import datetime +from odoo.tools import json_default + + +class ReportExcel(models.Model): + """this is used to create the a binding action""" + _name = 'report.excel' + _description = "report excel" + _rec_name = 'name' + + name = fields.Char(string='Name', help='Name') + model_id = fields.Many2one('ir.model', string='Model', + required=True, + ondelete="cascade", help="The binding model") + fields_ids = fields.Many2many('ir.model.fields', + string='Fields', + required=True, ondelete="cascade", + help="the fields to be printed in the report") + date_field = fields.Many2one('ir.model.fields', + string='Date Filter', + ondelete="cascade", + help="filter on the basis of date") + start_date = fields.Date(string='Start Date', help="start date") + end_date = fields.Date(string='End Date', help="end date") + field_order = fields.Char(string="Field Order", default='[]', + help="the field order") + action_button = fields.Boolean(default=False, string="Action", + help="visibility of action") + state = fields.Selection([ + ('code', 'Execute Python Code'), + ('object_create', 'Create a new Record'), + ('object_write', 'Update the Record'), + ('multi', 'Execute several actions')], string='Action To Do', + default='code', required=True, copy=True, + help="to execute the code on the basis") + binding_model_id = fields.Many2one('ir.model', + ondelete="cascade", + string="Binding Model Id", + help="binding model id") + binding_type = fields.Selection([('action', 'Action'), + ('report', 'Report')], + required=True, default='action', + string="Binding Type", + help="binding type") + ir_act_server_ref = fields.Many2one('ir.actions.act_window', + readonly=True, + copy=False, string="Action Reference", + help="action reference") + fields_ids_domain = fields.Char(compute="_compute_fields_ids_domain", + readonly=True, store=False) + date_field_domain = fields.Char(compute="_compute_date_field_domain", + readonly=True, store=False) + + @api.depends('model_id') + def _compute_fields_ids_domain(self): + """Domain for fields_ids""" + for rec in self: + rec.fields_ids_domain = json.dumps( + [('model_id', '=', rec.model_id.id)] + ) + + @api.depends('model_id') + def _compute_date_field_domain(self): + """Domain for date_field""" + for rec in self: + rec.date_field_domain = json.dumps( + [('model_id', '=', rec.model_id.id), + ('ttype', 'in', ['date', 'datetime'])] + ) + + @api.onchange('model_id') + def onchange_model_id(self): + """This is used to return the fields""" + if self.model_id: + self.name = self.model_id.name + ' Report' + self.fields_ids = False + self.date_field = False + + def print_report(self): + """Create a function for printing reports""" + for rec in self: + data = { + 'report_name': rec.name, + 'model_name': rec.model_id.model, + 'fields_name': rec.fields_ids.mapped('name'), + 'field_label': rec.fields_ids.mapped('field_description'), + 'date_field': rec.date_field.name, + 'date_name': rec.date_field.field_description, + 'start_date': rec.start_date, + 'end_date': rec.end_date, + 'field_order': rec.field_order + } + return { + 'type': 'ir.actions.report', + 'data': {'model': 'report.excel', + 'options': json.dumps(data, + default=json_default), + 'output_format': 'xlsx', + 'report_name': rec.name, + }, + 'report_type': 'xlsx', + } + + def get_xlsx_report(self, data, response): + """this is used to print the report of all records""" + output = io.BytesIO() + workbook = xlsxwriter.Workbook(output, {'in_memory': True}) + sheet = workbook.add_worksheet() + # Formats + format1 = workbook.add_format( + {'font_size': 15, 'align': 'center', 'bold': True}) + format1.set_font_color('#000080') + format2 = workbook.add_format( + {'font_size': 11, 'bold': True, 'border': 1, 'bg_color': '#928E8E'}) + format4 = workbook.add_format( + {'font_size': 10, 'num_format': 'yyyy-m-d', 'align': 'center', + 'bold': True}) + format5 = workbook.add_format( + {'font_size': 10, 'border': 1, 'text_wrap': True}) + format6 = workbook.add_format({'font_size': 10, 'bold': True}) + format8 = workbook.add_format({'font_size': 10, 'border': 1}) + format9 = workbook.add_format( + {'font_size': 10, 'num_format': 'yyyy-m-d'}) + format10 = workbook.add_format( + {'font_size': 10, 'num_format': 'yyyy-m-d', 'border': 1}) + + format2.set_align('center') + format4.set_align('right') + format6.set_align('right') + format8.set_align('left') + + sheet.merge_range(1, 1, 1, len(data['field_label']) + 1, + data['report_name'], format1) + sheet.write(2, 0, "Date :", format4) + sheet.write(2, 1, fields.Datetime.today(), format4) + if data['date_field']: + sheet.write(3, 0, data['date_name'], format4) + if data['start_date']: + sheet.write(3, 1, "From:", format4) + sheet.write(3, 2, data['start_date'], format9) + else: + sheet.write(3, 2, "", format9) + if data['end_date']: + sheet.write(3, 3, "To:", format4) + sheet.write(3, 4, data['end_date'], format9) + else: + sheet.write(3, 4, "", format9) + sl_no = 1 + sheet.write(5, 1, "SL No", format2) + row_num = 5 + col_num = 2 + order = data['field_order'].strip('][').split(', ') + for field_id in order: + field_name = self.env['ir.model.fields'].browse( + int(field_id)).field_description + sheet.write(row_num, col_num, field_name, format2) + col_num += 1 + row_num += 1 + records = [] + if data['date_field']: + if data['start_date'] and data['end_date']: + records = self.env[data['model_name']].search([ + (data['date_field'], '>=', data['start_date']), + (data['date_field'], '<=', data['end_date'])]) + elif data['start_date'] and not data['end_date']: + records = self.env[data['model_name']].search([ + (data['date_field'], '>=', data['start_date'])]) + elif not data['start_date'] and data['end_date']: + records = self.env[data['model_name']].search([ + (data['date_field'], '<=', data['end_date'])]) + else: + records = self.env[data['model_name']].search([]) + new_table = [] + for record in records: + order = data['field_order'].strip('][').split(', ') + record_dict = {} + for field_id in order: + field = self.env['ir.model.fields'].browse(int(field_id)) + field_name = field.name + field_type = self.env['ir.model.fields'].browse( + int(field_id)).ttype + if field_type in ['many2many']: + one2many_values = ', '.join( + record[field_name].mapped('name')) + record_dict[field] = [one2many_values] + elif field_type in ['one2many']: + o2m_list = [] + for rec in record[field_name]: + if rec: + o2m_list.append(rec) + else: + o2m_list.append('') + record_dict[field] = o2m_list + else: + record_dict[field] = [record[field_name]] + new_table.append(record_dict) + for record in new_table: + col_num = 1 + sheet.write(row_num, col_num, sl_no, format5) + col_num += 1 + occupied_rows = max(len(value) for value in record.values()) + for field in record: + field_type = self.env['ir.model.fields'].browse( + int(field.id)).ttype + if not field_type in ['one2many', 'many2many']: + try: + if isinstance(record[field][0], datetime.date): + sheet.write(row_num, col_num, record[field][0], + format10) + elif isinstance(record[field][0], bool): + if not field: + sheet.write(row_num, col_num, " ", format5) + else: + sheet.write(row_num, col_num, "Yes", format5) + else: + sheet.write(row_num, col_num, record[field][0], + format5) + except Exception as e: + if 'display_name' in record[field][0]: + sheet.write(row_num, col_num, + record[field][0].display_name, format5) + else: + sheet.write(row_num, col_num, "", format5) + elif field_type == 'one2many': + for i in range(occupied_rows): + if len(record[field]) > i: + try: + if isinstance(record[field][i], datetime.date): + sheet.write(row_num + i, col_num, + record[field][i], format10) + elif isinstance(record[field][i], bool): + if not field: + sheet.write(row_num + i, col_num, "NO", + format5) + else: + sheet.write(row_num + i, col_num, "Yes", + format5) + else: + sheet.write(row_num + i, col_num, + record[field][i], format5) + except Exception as e: + if 'display_name' in record[field][i]: + sheet.write(row_num + i, col_num, + record[field][i].display_name, format5) + else: + sheet.write(row_num + i, col_num, "", + format5) + elif field_type == 'many2many': + if record[field]: + try: + if isinstance(record[field], datetime.date): + sheet.write(row_num, col_num, record[field][0], + format10) + elif isinstance(record[field], bool): + if not field: + sheet.write(row_num, col_num, " ", format5) + else: + sheet.write(row_num, col_num, "Yes", + format5) + else: + sheet.write(row_num, col_num, record[field][0], + format5) + except Exception as e: + if 'display_name' in record[field][0]: + sheet.write(row_num, col_num, + record[field].display_name, format5) + else: + sheet.write(row_num, col_num, "", format5) + col_num += 1 + row_num += occupied_rows + sl_no += 1 + workbook.close() + output.seek(0) + response.stream.write(output.read()) + output.close() + + def create_model_action(self): + """ Create a contextual action for each server action.""" + self.action_button = True + WindowAction = self.env['ir.actions.act_window'] + data = self.env['ir.model.data'] + for rec in self.browse(self._ids): + binding_model_id = rec.model_id.id + model_data_id = data._load_xmlid('excel_report_designer') + res_id = data.browse(model_data_id).res_id + button_name = _('Print Report (%s)') % rec.name + act_id = WindowAction.create({ + 'name': button_name, + 'type': 'ir.actions.act_window', + 'res_model': 'excel.report.wizards', + 'binding_model_id': binding_model_id, + 'context': "{'excel' : %d}" % (rec.id), + 'view_mode': 'form,list', + 'view_id': res_id, + 'target': 'new', + }) + rec.write({ + 'ir_act_server_ref': act_id.id, + }) + return True + + def unlink_model_action(self): + """ Remove the contextual actions created for the server actions. """ + self.action_button = False + self.check_access_rights('write', raise_exception=True) + self.filtered('binding_model_id').write({'binding_model_id': False}) + self.ir_act_server_ref.unlink() + return { + 'type': 'ir.actions.client', + 'tag': 'reload', + } + + @api.onchange('fields_ids') + def onchange_fields(self): + """this is used to find the fields of new models""" + self.fields_ids = [] + if self.fields_ids: + self.field_order = str(self.fields_ids._origin.ids) diff --git a/excel_report_designer/security/ir.model.access.csv b/excel_report_designer/security/ir.model.access.csv new file mode 100755 index 000000000..1f3b27909 --- /dev/null +++ b/excel_report_designer/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_excel_report_wizard,excel.report.wizards,model_excel_report_wizards,base.group_user,1,1,1,1 +access_report_excel,report.excel,model_report_excel,base.group_user,1,1,1,1 diff --git a/excel_report_designer/static/description/assets/cybro-icon.png b/excel_report_designer/static/description/assets/cybro-icon.png new file mode 100644 index 000000000..06e73e11d Binary files /dev/null and b/excel_report_designer/static/description/assets/cybro-icon.png differ diff --git a/excel_report_designer/static/description/assets/cybro-odoo.png b/excel_report_designer/static/description/assets/cybro-odoo.png new file mode 100644 index 000000000..ed02e07a4 Binary files /dev/null and b/excel_report_designer/static/description/assets/cybro-odoo.png differ diff --git a/excel_report_designer/static/description/assets/h2.png b/excel_report_designer/static/description/assets/h2.png new file mode 100644 index 000000000..0bfc4707d Binary files /dev/null and b/excel_report_designer/static/description/assets/h2.png differ diff --git a/excel_report_designer/static/description/assets/icons/arrows-repeat.svg b/excel_report_designer/static/description/assets/icons/arrows-repeat.svg new file mode 100644 index 000000000..1d7efabc5 --- /dev/null +++ b/excel_report_designer/static/description/assets/icons/arrows-repeat.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/excel_report_designer/static/description/assets/icons/banner-1.png b/excel_report_designer/static/description/assets/icons/banner-1.png new file mode 100644 index 000000000..c180db172 Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/banner-1.png differ diff --git a/excel_report_designer/static/description/assets/icons/banner-2.svg b/excel_report_designer/static/description/assets/icons/banner-2.svg new file mode 100644 index 000000000..e606d97d9 --- /dev/null +++ b/excel_report_designer/static/description/assets/icons/banner-2.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/excel_report_designer/static/description/assets/icons/banner-bg.png b/excel_report_designer/static/description/assets/icons/banner-bg.png new file mode 100644 index 000000000..a8238d3c0 Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/banner-bg.png differ diff --git a/excel_report_designer/static/description/assets/icons/banner-bg.svg b/excel_report_designer/static/description/assets/icons/banner-bg.svg new file mode 100644 index 000000000..b1378103e --- /dev/null +++ b/excel_report_designer/static/description/assets/icons/banner-bg.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/excel_report_designer/static/description/assets/icons/banner-call.svg b/excel_report_designer/static/description/assets/icons/banner-call.svg new file mode 100644 index 000000000..96c687e81 --- /dev/null +++ b/excel_report_designer/static/description/assets/icons/banner-call.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/excel_report_designer/static/description/assets/icons/banner-mail.svg b/excel_report_designer/static/description/assets/icons/banner-mail.svg new file mode 100644 index 000000000..cbf0d158d --- /dev/null +++ b/excel_report_designer/static/description/assets/icons/banner-mail.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/excel_report_designer/static/description/assets/icons/banner-pattern.svg b/excel_report_designer/static/description/assets/icons/banner-pattern.svg new file mode 100644 index 000000000..9c1c7e101 --- /dev/null +++ b/excel_report_designer/static/description/assets/icons/banner-pattern.svg @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/excel_report_designer/static/description/assets/icons/banner-promo.svg b/excel_report_designer/static/description/assets/icons/banner-promo.svg new file mode 100644 index 000000000..d52791b11 --- /dev/null +++ b/excel_report_designer/static/description/assets/icons/banner-promo.svg @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/excel_report_designer/static/description/assets/icons/brand-pair.svg b/excel_report_designer/static/description/assets/icons/brand-pair.svg new file mode 100644 index 000000000..d8db7fc1e --- /dev/null +++ b/excel_report_designer/static/description/assets/icons/brand-pair.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/excel_report_designer/static/description/assets/icons/capture (1).png b/excel_report_designer/static/description/assets/icons/capture (1).png new file mode 100755 index 000000000..8824deafc Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/capture (1).png differ diff --git a/excel_report_designer/static/description/assets/icons/check.png b/excel_report_designer/static/description/assets/icons/check.png new file mode 100644 index 000000000..c8e85f51d Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/check.png differ diff --git a/excel_report_designer/static/description/assets/icons/chevron.png b/excel_report_designer/static/description/assets/icons/chevron.png new file mode 100644 index 000000000..2089293d6 Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/chevron.png differ diff --git a/excel_report_designer/static/description/assets/icons/close-icon.svg b/excel_report_designer/static/description/assets/icons/close-icon.svg new file mode 100644 index 000000000..df8cce37a --- /dev/null +++ b/excel_report_designer/static/description/assets/icons/close-icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/excel_report_designer/static/description/assets/icons/cogs.png b/excel_report_designer/static/description/assets/icons/cogs.png new file mode 100644 index 000000000..95d0bad62 Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/cogs.png differ diff --git a/excel_report_designer/static/description/assets/icons/collabarate-icon.svg b/excel_report_designer/static/description/assets/icons/collabarate-icon.svg new file mode 100644 index 000000000..dd4e10518 --- /dev/null +++ b/excel_report_designer/static/description/assets/icons/collabarate-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/excel_report_designer/static/description/assets/icons/consultation.png b/excel_report_designer/static/description/assets/icons/consultation.png new file mode 100644 index 000000000..8319d4baa Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/consultation.png differ diff --git a/excel_report_designer/static/description/assets/icons/cybro-logo.png b/excel_report_designer/static/description/assets/icons/cybro-logo.png new file mode 100644 index 000000000..ff4b78220 Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/cybro-logo.png differ diff --git a/excel_report_designer/static/description/assets/icons/down.svg b/excel_report_designer/static/description/assets/icons/down.svg new file mode 100644 index 000000000..f21c36271 --- /dev/null +++ b/excel_report_designer/static/description/assets/icons/down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/excel_report_designer/static/description/assets/icons/ecom-black.png b/excel_report_designer/static/description/assets/icons/ecom-black.png new file mode 100644 index 000000000..a9385ff13 Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/ecom-black.png differ diff --git a/excel_report_designer/static/description/assets/icons/education-black.png b/excel_report_designer/static/description/assets/icons/education-black.png new file mode 100644 index 000000000..3eb09b27b Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/education-black.png differ diff --git a/excel_report_designer/static/description/assets/icons/faq.png b/excel_report_designer/static/description/assets/icons/faq.png new file mode 100644 index 000000000..4250b5b81 Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/faq.png differ diff --git a/excel_report_designer/static/description/assets/icons/feature-icon.svg b/excel_report_designer/static/description/assets/icons/feature-icon.svg new file mode 100644 index 000000000..fa0ea6850 --- /dev/null +++ b/excel_report_designer/static/description/assets/icons/feature-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/excel_report_designer/static/description/assets/icons/feature.png b/excel_report_designer/static/description/assets/icons/feature.png new file mode 100644 index 000000000..ac7a785c0 Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/feature.png differ diff --git a/excel_report_designer/static/description/assets/icons/gear.svg b/excel_report_designer/static/description/assets/icons/gear.svg new file mode 100644 index 000000000..0cc66b6ea --- /dev/null +++ b/excel_report_designer/static/description/assets/icons/gear.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/excel_report_designer/static/description/assets/icons/hero.gif b/excel_report_designer/static/description/assets/icons/hero.gif new file mode 100644 index 000000000..8f04ed4ef Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/hero.gif differ diff --git a/excel_report_designer/static/description/assets/icons/hire-odoo.svg b/excel_report_designer/static/description/assets/icons/hire-odoo.svg new file mode 100644 index 000000000..e1ac089b0 --- /dev/null +++ b/excel_report_designer/static/description/assets/icons/hire-odoo.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/excel_report_designer/static/description/assets/icons/hotel-black.png b/excel_report_designer/static/description/assets/icons/hotel-black.png new file mode 100644 index 000000000..130f613be Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/hotel-black.png differ diff --git a/excel_report_designer/static/description/assets/icons/img.png b/excel_report_designer/static/description/assets/icons/img.png new file mode 100755 index 000000000..70197f477 Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/img.png differ diff --git a/excel_report_designer/static/description/assets/icons/license.png b/excel_report_designer/static/description/assets/icons/license.png new file mode 100644 index 000000000..a5869797e Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/license.png differ diff --git a/excel_report_designer/static/description/assets/icons/life-ring-icon.svg b/excel_report_designer/static/description/assets/icons/life-ring-icon.svg new file mode 100644 index 000000000..3ae6e1d89 --- /dev/null +++ b/excel_report_designer/static/description/assets/icons/life-ring-icon.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/excel_report_designer/static/description/assets/icons/lifebuoy.png b/excel_report_designer/static/description/assets/icons/lifebuoy.png new file mode 100644 index 000000000..658d56ccc Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/lifebuoy.png differ diff --git a/excel_report_designer/static/description/assets/icons/mail.svg b/excel_report_designer/static/description/assets/icons/mail.svg new file mode 100644 index 000000000..1eedde695 --- /dev/null +++ b/excel_report_designer/static/description/assets/icons/mail.svg @@ -0,0 +1,3 @@ + + + diff --git a/excel_report_designer/static/description/assets/icons/manufacturing-black.png b/excel_report_designer/static/description/assets/icons/manufacturing-black.png new file mode 100644 index 000000000..697eb0e9f Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/manufacturing-black.png differ diff --git a/excel_report_designer/static/description/assets/icons/notes.png b/excel_report_designer/static/description/assets/icons/notes.png new file mode 100644 index 000000000..ee5e95404 Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/notes.png differ diff --git a/excel_report_designer/static/description/assets/icons/notification icon.svg b/excel_report_designer/static/description/assets/icons/notification icon.svg new file mode 100644 index 000000000..053189973 --- /dev/null +++ b/excel_report_designer/static/description/assets/icons/notification icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/excel_report_designer/static/description/assets/icons/odoo-consultancy.svg b/excel_report_designer/static/description/assets/icons/odoo-consultancy.svg new file mode 100644 index 000000000..e05f65bde --- /dev/null +++ b/excel_report_designer/static/description/assets/icons/odoo-consultancy.svg @@ -0,0 +1,4 @@ + + + + diff --git a/excel_report_designer/static/description/assets/icons/odoo-licencing.svg b/excel_report_designer/static/description/assets/icons/odoo-licencing.svg new file mode 100644 index 000000000..2606c88b0 --- /dev/null +++ b/excel_report_designer/static/description/assets/icons/odoo-licencing.svg @@ -0,0 +1,3 @@ + + + diff --git a/excel_report_designer/static/description/assets/icons/odoo-logo.png b/excel_report_designer/static/description/assets/icons/odoo-logo.png new file mode 100644 index 000000000..0e4d0eb5a Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/odoo-logo.png differ diff --git a/excel_report_designer/static/description/assets/icons/patter.svg b/excel_report_designer/static/description/assets/icons/patter.svg new file mode 100644 index 000000000..25c9c0a8f --- /dev/null +++ b/excel_report_designer/static/description/assets/icons/patter.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/excel_report_designer/static/description/assets/icons/pattern1.png b/excel_report_designer/static/description/assets/icons/pattern1.png new file mode 100644 index 000000000..09ab0fb2d Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/pattern1.png differ diff --git a/excel_report_designer/static/description/assets/icons/photo-capture.png b/excel_report_designer/static/description/assets/icons/photo-capture.png new file mode 100755 index 000000000..06c111758 Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/photo-capture.png differ diff --git a/excel_report_designer/static/description/assets/icons/pos-black.png b/excel_report_designer/static/description/assets/icons/pos-black.png new file mode 100644 index 000000000..97c0f90c1 Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/pos-black.png differ diff --git a/excel_report_designer/static/description/assets/icons/puzzle-piece-icon.svg b/excel_report_designer/static/description/assets/icons/puzzle-piece-icon.svg new file mode 100644 index 000000000..3e9ad9373 --- /dev/null +++ b/excel_report_designer/static/description/assets/icons/puzzle-piece-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/excel_report_designer/static/description/assets/icons/puzzle.png b/excel_report_designer/static/description/assets/icons/puzzle.png new file mode 100644 index 000000000..65cf854e7 Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/puzzle.png differ diff --git a/excel_report_designer/static/description/assets/icons/replace-icon.svg b/excel_report_designer/static/description/assets/icons/replace-icon.svg new file mode 100644 index 000000000..d0e3a7af1 --- /dev/null +++ b/excel_report_designer/static/description/assets/icons/replace-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/excel_report_designer/static/description/assets/icons/restaurant-black.png b/excel_report_designer/static/description/assets/icons/restaurant-black.png new file mode 100644 index 000000000..4a35eb939 Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/restaurant-black.png differ diff --git a/excel_report_designer/static/description/assets/icons/screenshot-main.png b/excel_report_designer/static/description/assets/icons/screenshot-main.png new file mode 100644 index 000000000..575f8e676 Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/screenshot-main.png differ diff --git a/excel_report_designer/static/description/assets/icons/screenshot.png b/excel_report_designer/static/description/assets/icons/screenshot.png new file mode 100644 index 000000000..cef272529 Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/screenshot.png differ diff --git a/excel_report_designer/static/description/assets/icons/service-black.png b/excel_report_designer/static/description/assets/icons/service-black.png new file mode 100644 index 000000000..301ab51cb Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/service-black.png differ diff --git a/excel_report_designer/static/description/assets/icons/skype-fill.svg b/excel_report_designer/static/description/assets/icons/skype-fill.svg new file mode 100644 index 000000000..c17423639 --- /dev/null +++ b/excel_report_designer/static/description/assets/icons/skype-fill.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/excel_report_designer/static/description/assets/icons/skype.png b/excel_report_designer/static/description/assets/icons/skype.png new file mode 100644 index 000000000..51b409fb3 Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/skype.png differ diff --git a/excel_report_designer/static/description/assets/icons/skype.svg b/excel_report_designer/static/description/assets/icons/skype.svg new file mode 100644 index 000000000..df3dad39b --- /dev/null +++ b/excel_report_designer/static/description/assets/icons/skype.svg @@ -0,0 +1,3 @@ + + + diff --git a/excel_report_designer/static/description/assets/icons/star-1.svg b/excel_report_designer/static/description/assets/icons/star-1.svg new file mode 100644 index 000000000..7e55ab162 --- /dev/null +++ b/excel_report_designer/static/description/assets/icons/star-1.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/excel_report_designer/static/description/assets/icons/star-2.svg b/excel_report_designer/static/description/assets/icons/star-2.svg new file mode 100644 index 000000000..5ae9f507a --- /dev/null +++ b/excel_report_designer/static/description/assets/icons/star-2.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/excel_report_designer/static/description/assets/icons/support.png b/excel_report_designer/static/description/assets/icons/support.png new file mode 100644 index 000000000..4f18b8b82 Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/support.png differ diff --git a/excel_report_designer/static/description/assets/icons/test-1 - Copy.png b/excel_report_designer/static/description/assets/icons/test-1 - Copy.png new file mode 100644 index 000000000..f6a902663 Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/test-1 - Copy.png differ diff --git a/excel_report_designer/static/description/assets/icons/test-1.png b/excel_report_designer/static/description/assets/icons/test-1.png new file mode 100644 index 000000000..0908add2b Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/test-1.png differ diff --git a/excel_report_designer/static/description/assets/icons/test-2.png b/excel_report_designer/static/description/assets/icons/test-2.png new file mode 100644 index 000000000..4671fe91e Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/test-2.png differ diff --git a/excel_report_designer/static/description/assets/icons/trading-black.png b/excel_report_designer/static/description/assets/icons/trading-black.png new file mode 100644 index 000000000..9398ba2f1 Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/trading-black.png differ diff --git a/excel_report_designer/static/description/assets/icons/training.png b/excel_report_designer/static/description/assets/icons/training.png new file mode 100644 index 000000000..884ca024d Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/training.png differ diff --git a/excel_report_designer/static/description/assets/icons/translate.svg b/excel_report_designer/static/description/assets/icons/translate.svg new file mode 100644 index 000000000..af9c8a1aa --- /dev/null +++ b/excel_report_designer/static/description/assets/icons/translate.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/excel_report_designer/static/description/assets/icons/update.png b/excel_report_designer/static/description/assets/icons/update.png new file mode 100644 index 000000000..ecbc5a01a Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/update.png differ diff --git a/excel_report_designer/static/description/assets/icons/user.png b/excel_report_designer/static/description/assets/icons/user.png new file mode 100644 index 000000000..6ffb23d9f Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/user.png differ diff --git a/excel_report_designer/static/description/assets/icons/video.png b/excel_report_designer/static/description/assets/icons/video.png new file mode 100644 index 000000000..576705b17 Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/video.png differ diff --git a/excel_report_designer/static/description/assets/icons/whatsapp.png b/excel_report_designer/static/description/assets/icons/whatsapp.png new file mode 100644 index 000000000..d513a5356 Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/whatsapp.png differ diff --git a/excel_report_designer/static/description/assets/icons/wrench-icon.svg b/excel_report_designer/static/description/assets/icons/wrench-icon.svg new file mode 100644 index 000000000..174b5a465 --- /dev/null +++ b/excel_report_designer/static/description/assets/icons/wrench-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/excel_report_designer/static/description/assets/icons/wrench.png b/excel_report_designer/static/description/assets/icons/wrench.png new file mode 100644 index 000000000..6c04dea0f Binary files /dev/null and b/excel_report_designer/static/description/assets/icons/wrench.png differ diff --git a/excel_report_designer/static/description/assets/misc/Cybrosys R.png b/excel_report_designer/static/description/assets/misc/Cybrosys R.png new file mode 100755 index 000000000..da4058087 Binary files /dev/null and b/excel_report_designer/static/description/assets/misc/Cybrosys R.png differ diff --git a/excel_report_designer/static/description/assets/misc/email.svg b/excel_report_designer/static/description/assets/misc/email.svg new file mode 100755 index 000000000..15291cdc3 --- /dev/null +++ b/excel_report_designer/static/description/assets/misc/email.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/excel_report_designer/static/description/assets/misc/phone.svg b/excel_report_designer/static/description/assets/misc/phone.svg new file mode 100755 index 000000000..b7bd7f251 --- /dev/null +++ b/excel_report_designer/static/description/assets/misc/phone.svg @@ -0,0 +1,3 @@ + + + diff --git a/excel_report_designer/static/description/assets/misc/star (1) 2.svg b/excel_report_designer/static/description/assets/misc/star (1) 2.svg new file mode 100755 index 000000000..5ae9f507a --- /dev/null +++ b/excel_report_designer/static/description/assets/misc/star (1) 2.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/excel_report_designer/static/description/assets/misc/support (1) 1.svg b/excel_report_designer/static/description/assets/misc/support (1) 1.svg new file mode 100755 index 000000000..7d37a8f30 --- /dev/null +++ b/excel_report_designer/static/description/assets/misc/support (1) 1.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/excel_report_designer/static/description/assets/misc/support-email.svg b/excel_report_designer/static/description/assets/misc/support-email.svg new file mode 100755 index 000000000..eb70370d6 --- /dev/null +++ b/excel_report_designer/static/description/assets/misc/support-email.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/excel_report_designer/static/description/assets/misc/tick-mark.svg b/excel_report_designer/static/description/assets/misc/tick-mark.svg new file mode 100755 index 000000000..2dbb40187 --- /dev/null +++ b/excel_report_designer/static/description/assets/misc/tick-mark.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/excel_report_designer/static/description/assets/misc/whatsapp 1.svg b/excel_report_designer/static/description/assets/misc/whatsapp 1.svg new file mode 100755 index 000000000..0bfaf8fc6 --- /dev/null +++ b/excel_report_designer/static/description/assets/misc/whatsapp 1.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/excel_report_designer/static/description/assets/misc/whatsapp.svg b/excel_report_designer/static/description/assets/misc/whatsapp.svg new file mode 100755 index 000000000..b618aea1d --- /dev/null +++ b/excel_report_designer/static/description/assets/misc/whatsapp.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/excel_report_designer/static/description/assets/modules/1.gif b/excel_report_designer/static/description/assets/modules/1.gif new file mode 100644 index 000000000..ae3a880a2 Binary files /dev/null and b/excel_report_designer/static/description/assets/modules/1.gif differ diff --git a/excel_report_designer/static/description/assets/modules/1.png b/excel_report_designer/static/description/assets/modules/1.png new file mode 100755 index 000000000..8f3314bb1 Binary files /dev/null and b/excel_report_designer/static/description/assets/modules/1.png differ diff --git a/excel_report_designer/static/description/assets/modules/2.gif b/excel_report_designer/static/description/assets/modules/2.gif new file mode 100644 index 000000000..d19e2b352 Binary files /dev/null and b/excel_report_designer/static/description/assets/modules/2.gif differ diff --git a/excel_report_designer/static/description/assets/modules/2.png b/excel_report_designer/static/description/assets/modules/2.png new file mode 100755 index 000000000..be6536482 Binary files /dev/null and b/excel_report_designer/static/description/assets/modules/2.png differ diff --git a/excel_report_designer/static/description/assets/modules/3.png b/excel_report_designer/static/description/assets/modules/3.png new file mode 100644 index 000000000..8513873ea Binary files /dev/null and b/excel_report_designer/static/description/assets/modules/3.png differ diff --git a/excel_report_designer/static/description/assets/modules/4.png b/excel_report_designer/static/description/assets/modules/4.png new file mode 100644 index 000000000..3bedf7981 Binary files /dev/null and b/excel_report_designer/static/description/assets/modules/4.png differ diff --git a/excel_report_designer/static/description/assets/modules/5.png b/excel_report_designer/static/description/assets/modules/5.png new file mode 100644 index 000000000..0e311ca87 Binary files /dev/null and b/excel_report_designer/static/description/assets/modules/5.png differ diff --git a/excel_report_designer/static/description/assets/modules/6.jpg b/excel_report_designer/static/description/assets/modules/6.jpg new file mode 100644 index 000000000..67c7f7062 Binary files /dev/null and b/excel_report_designer/static/description/assets/modules/6.jpg differ diff --git a/excel_report_designer/static/description/assets/modules/6.png b/excel_report_designer/static/description/assets/modules/6.png new file mode 100755 index 000000000..a7446f034 Binary files /dev/null and b/excel_report_designer/static/description/assets/modules/6.png differ diff --git a/excel_report_designer/static/description/assets/screenshots/excel_report_01.png b/excel_report_designer/static/description/assets/screenshots/excel_report_01.png new file mode 100644 index 000000000..d9211e9f5 Binary files /dev/null and b/excel_report_designer/static/description/assets/screenshots/excel_report_01.png differ diff --git a/excel_report_designer/static/description/assets/screenshots/excel_report_02.png b/excel_report_designer/static/description/assets/screenshots/excel_report_02.png new file mode 100644 index 000000000..80f92f4bf Binary files /dev/null and b/excel_report_designer/static/description/assets/screenshots/excel_report_02.png differ diff --git a/excel_report_designer/static/description/assets/screenshots/excel_report_03.png b/excel_report_designer/static/description/assets/screenshots/excel_report_03.png new file mode 100644 index 000000000..c9f1d7eb6 Binary files /dev/null and b/excel_report_designer/static/description/assets/screenshots/excel_report_03.png differ diff --git a/excel_report_designer/static/description/assets/screenshots/excel_report_04.png b/excel_report_designer/static/description/assets/screenshots/excel_report_04.png new file mode 100644 index 000000000..3c52516b4 Binary files /dev/null and b/excel_report_designer/static/description/assets/screenshots/excel_report_04.png differ diff --git a/excel_report_designer/static/description/assets/screenshots/excel_report_05.png b/excel_report_designer/static/description/assets/screenshots/excel_report_05.png new file mode 100644 index 000000000..66f3e8f3e Binary files /dev/null and b/excel_report_designer/static/description/assets/screenshots/excel_report_05.png differ diff --git a/excel_report_designer/static/description/assets/y18.jpg b/excel_report_designer/static/description/assets/y18.jpg new file mode 100644 index 000000000..eea1714f2 Binary files /dev/null and b/excel_report_designer/static/description/assets/y18.jpg differ diff --git a/excel_report_designer/static/description/banner.jpg b/excel_report_designer/static/description/banner.jpg new file mode 100644 index 000000000..71ff07ded Binary files /dev/null and b/excel_report_designer/static/description/banner.jpg differ diff --git a/excel_report_designer/static/description/icon.png b/excel_report_designer/static/description/icon.png new file mode 100644 index 000000000..3b2b1906b Binary files /dev/null and b/excel_report_designer/static/description/icon.png differ diff --git a/excel_report_designer/static/description/index.html b/excel_report_designer/static/description/index.html new file mode 100644 index 000000000..586fe0202 --- /dev/null +++ b/excel_report_designer/static/description/index.html @@ -0,0 +1,1045 @@ + + + + + + Excel Report Designer + + + + + + + + + + +
+
+ + + +
+
+ Community +
+
+ Enterprise +
+ + + + +
+
+ +
+
+
+
+

+ This Module Helps To Create Customised Excel Reports for Any Models. +

+

Excel Report Designer +

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

Key + Highlights

+
+
+
+
+ +
+
+ Fully configurable XLSX reports. +
+

+ Refers to Excel spreadsheet files (XLSX format) that can be extensively customized. Users have the flexibility to adjust data selection, formatting, layout, formulas, charts, and other elements to meet their specific reporting needs. +

+
+
+
+
+
+ +
+
+ Filter report data based on any date field +
+

+ This means selectively displaying information within a specific timeframe in a report, allowing users to focus on relevant data for analysis or decision-making. +

+
+
+
+
+
+ +
+
+ Custom report name +
+

+ This feature allows users to create personalized and easily identifiable names for their reports, enhancing organization and clarity when managing multiple reports. +

+
+
+
+
+
+ +
+
+ Reports menu under the action menu +
+

+ Users can likely find and access various reporting-related functionalities or options in this dedicated Reports menu within the broader Action menu. +

+
+
+
+
+ +
+
+
+ EXCEL REPORT DESIGNER +

+ Are you ready to make your business more + organized? +
Improve now! +

+ +
+
+ +
+
+
+ + + + +
+
+ +
+
+
+
+ acc_bg +
+ +
+
+
+
+

+ Report + + Configuration +

+
+
+

+ The reports can be configured and printed using the 'Excel Report Designer' menu at Settings. Select the desired model on which you want to create report, select the required fields and filter using any of the date field in the model. +

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

+ Print Report From The + + Configuration and Add Action. +

+
+
+

+ Print report from the configuration form and also add as a action menu. +

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

+ Print Report From + + Action Menu +

+
+
+

+ Print te report from the action menu of corresponding model after selecting the records. +

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

+ Confirmation + + + Wizard +

+
+
+

+ Confirmation wizard for printing the report. +

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

+ Printed + + + Report +

+
+
+

+ This is the printed xlsx report. +

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

+ Fully configurable XLSX reports

+
+ +
+
+
+
+
+
+ +
+

+ Filter report data based on any date field.

+
+
+
+
+
+
+
+ +
+

+ Custom Report Name

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

+ In the settings there will be a menu for excel report designer. From that menu we can configure the report according to the need. +

+
+
+ +
+ +
+

+ There is option to select any field of the corresponding model in the form of report configuration. We can select the fields. +

+
+
+ +
+ +
+

+ After configuring the report, there will be a button named 'Add action' in the form. By clicking it, the print option will be added the action menu of the corresponding model. +

+
+
+ +
+ +
+

+ In the report configuration form there will be a field to add the date filter. +

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

+ Latest Release 18.0.1.0.0 +

+ + 1st October, 2024 + +
+
+
+
+
+ Add +
+
+
+
    +
  • + Initial Commit +
  • + +
+
+
+
+
+
+
+
+
+
+ + + +
+

+ Related Products +

+ +
+ + +
+

+ Our Services

+ +
+ +
+
+ .... +
+
+ +
+ + +
+
+ + + + + + diff --git a/excel_report_designer/static/src/js/action_manager.js b/excel_report_designer/static/src/js/action_manager.js new file mode 100755 index 000000000..f68193258 --- /dev/null +++ b/excel_report_designer/static/src/js/action_manager.js @@ -0,0 +1,17 @@ +/** @odoo-module **/ +import { registry } from "@web/core/registry"; +import { BlockUI } from "@web/core/ui/block_ui"; +import { download } from "@web/core/network/download"; +//this is used to call the controller and also passes the report data. +registry.category("ir.actions.report handlers").add("xlsx", async function (action) { + console.log(action) + if (action.report_type === 'xlsx') { + BlockUI; + await download({ + url: '/xlsx_reports', + data: action.data, + complete: () => unblockUI, + error: (error) => this.call('crash_manager', 'rpc_error', error), + }); + } +}); diff --git a/excel_report_designer/views/report_excel.xml b/excel_report_designer/views/report_excel.xml new file mode 100755 index 000000000..212e8e199 --- /dev/null +++ b/excel_report_designer/views/report_excel.xml @@ -0,0 +1,81 @@ + + + + + report.excel.view.form + report.excel + 20 + +
+
+
+ + + +
+
+
+

+ + + +

+
+ + + + + The column order will be as selected in the below + table + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ + Select Report + report.excel + list,form + + + + +
diff --git a/excel_report_designer/wizards/__init__.py b/excel_report_designer/wizards/__init__.py new file mode 100644 index 000000000..bb8e1d213 --- /dev/null +++ b/excel_report_designer/wizards/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies (). +# Author: Cybrosys Techno Solutions () +# +# This program is free software: you can modify +# it under the terms of the GNU Affero General Public License (AGPL) as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# 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 Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +################################################################################ +from . import excel_report_wizards diff --git a/excel_report_designer/wizards/excel_report_wizards.py b/excel_report_designer/wizards/excel_report_wizards.py new file mode 100644 index 000000000..e249f71c9 --- /dev/null +++ b/excel_report_designer/wizards/excel_report_wizards.py @@ -0,0 +1,249 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies (). +# Author: Cybrosys Techno Solutions () +# +# This program is free software: you can modify +# it under the terms of the GNU Affero General Public License (AGPL) as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# 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 Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +################################################################################ +try: + from odoo.tools.misc import xlsxwriter +except ImportError: + import xlsxwriter +import datetime +import io +import json +from odoo import fields, models +from odoo.tools import json_default + + +class ExcelReportWizards(models.TransientModel): + """This is used to the wizard class""" + _name = "excel.report.wizards" + _description = "excel report wizard" + + def print_excel_report(self): + """this is used to do the report action""" + excel_report_id = self.env['report.excel'].browse( + self._context.get('excel')) + for rec in excel_report_id: + data = { + 'report_name': rec.name, + 'model_name': rec.model_id.model, + 'fields_name': rec.fields_ids.mapped('name'), + 'field_label': rec.fields_ids.mapped('field_description'), + 'date_field': rec.date_field.name, + 'date_name': rec.date_field.field_description, + 'start_date': rec.start_date, + 'end_date': rec.end_date, + 'field_order': rec.field_order, + 'active_model_id': self.env.context['active_ids'] + } + return { + 'type': 'ir.actions.report', + 'data': {'model': 'excel.report.wizards', + 'options': json.dumps(data, + default=json_default), + 'output_format': 'xlsx', + 'report_name': rec.name, + }, + 'report_type': 'xlsx', + } + + def get_xlsx_report(self, data, response): + """This is used to prin the report for selected records.""" + output = io.BytesIO() + workbook = xlsxwriter.Workbook(output, {'in_memory': True}) + sheet = workbook.add_worksheet() + # Formats + format1 = workbook.add_format( + {'font_size': 15, 'align': 'center', 'bold': True}) + format1.set_font_color('#000080') + format2 = workbook.add_format( + {'font_size': 11, 'bold': True, 'border': 1, 'bg_color': '#928E8E'}) + format4 = workbook.add_format( + {'font_size': 10, 'num_format': 'yyyy-m-d', 'align': 'center', + 'bold': True}) + format5 = workbook.add_format( + {'font_size': 10, 'border': 1, 'text_wrap': True}) + format6 = workbook.add_format({'font_size': 10, 'bold': True}) + format8 = workbook.add_format({'font_size': 10, 'border': 1}) + format9 = workbook.add_format( + {'font_size': 10, 'num_format': 'yyyy-m-d'}) + format10 = workbook.add_format( + {'font_size': 10, 'num_format': 'yyyy-m-d', 'border': 1}) + format2.set_align('center') + format4.set_align('right') + format6.set_align('right') + format8.set_align('left') + sheet.merge_range(1, 1, 1, len(data['field_label']) + 1, + data['report_name'], format1) + sheet.write(2, 0, "Date :", format4) + sheet.write(2, 1, fields.Datetime.today(), format4) + if data['date_field']: + sheet.write(3, 0, data['date_name'], format4) + if data['start_date']: + sheet.write(3, 1, "From:", format4) + sheet.write(3, 2, data['start_date'], format9) + else: + sheet.write(3, 2, "", format9) + if data['end_date']: + sheet.write(3, 3, "To:", format4) + sheet.write(3, 4, data['end_date'], format9) + else: + sheet.write(3, 4, "", format9) + sl_no = 1 + sheet.write(5, 1, "SL No", format2) + row_num = 5 + col_num = 2 + order = data['field_order'].strip('][').split(', ') + for field_id in order: + field_name = self.env['ir.model.fields'].browse( + int(field_id)).field_description + sheet.write(row_num, col_num, field_name, format2) + col_num += 1 + row_num += 1 + records = [] + if data['date_field']: + if data['start_date'] and data['end_date']: + records = self.env[data['model_name']].search([ + (data['date_field'], '>=', data['start_date']), + ('id', 'in', data['active_model_id']), + (data['date_field'], '<=', data['end_date'])]) + elif data['start_date'] and not data['end_date']: + records = self.env[data['model_name']].search([ + (data['date_field'], '>=', data['start_date']), + ('id', 'in', data['active_model_id'])]) + elif not data['start_date'] and data['end_date']: + records = self.env[data['model_name']].search([ + (data['date_field'], '<=', data['end_date']), + ('id', 'in', data['active_model_id'])]) + else: + records = self.env[data['model_name']].search( + [('id', 'in', data['active_model_id'])]) + new_table = [] + for record in records: + order = data['field_order'].strip('][').split(', ') + record_dict = {} + for field_id in order: + field = self.env['ir.model.fields'].browse(int(field_id)) + field_name = field.name + field_type = self.env['ir.model.fields'].browse( + int(field_id)).ttype + if field_type in ['many2many']: + one2many_values = ', '.join( + record[field_name].mapped('name')) + record_dict[field] = [one2many_values] + elif field_type in ['one2many']: + # if record[field_name]: + o2m_list = [] + for rec in record[field_name]: + if rec: + o2m_list.append(rec) + else: + o2m_list.append('') + record_dict[field] = o2m_list + else: + record_dict[field] = [record[field_name]] + new_table.append(record_dict) + for record in new_table: + col_num = 1 + sheet.write(row_num, col_num, sl_no, format5) + col_num += 1 + occupied_rows = max(len(value) for value in record.values()) + for field in record: + field_type = self.env['ir.model.fields'].browse( + int(field.id)).ttype + if not field_type in ['one2many', 'many2many']: + try: + if isinstance(record[field][0], datetime.date): + sheet.write(row_num, col_num, record[field][0], + format10) + elif isinstance(record[field][0], bool): + if not field: + sheet.write(row_num, col_num, " ", format5) + else: + sheet.write(row_num, col_num, "Yes", format5) + else: + sheet.write(row_num, col_num, record[field][0], + format5) + except Exception as e: + data = record[field][0].name_search() + if record[field][0]: + for item in data: + if item[0] == record[field][0].id: + sheet.write(row_num, col_num, + item[1], + format5) + break + else: + sheet.write(row_num, col_num, "", + format5) + elif field_type == 'one2many': + for i in range(occupied_rows): + if len(record[field]) > i: + try: + if isinstance(record[field][i], datetime.date): + sheet.write(row_num + i, col_num, + record[field][i], format10) + elif isinstance(record[field][i], bool): + if not field: + sheet.write(row_num + i, col_num, "NO", + format5) + else: + sheet.write(row_num + i, col_num, "Yes", + format5) + else: + sheet.write(row_num + i, col_num, + record[field][i], format5) + except Exception as e: + if record[field][i]: + sheet.write(row_num + i, col_num, + record[field][i].name_search()[0][ + 1], format5) + else: + sheet.write(row_num + i, col_num, "", + format5) + elif field_type == 'many2many': + if record[field]: + try: + if isinstance(record[field], datetime.date): + sheet.write(row_num, col_num, record[field][0], + format10) + elif isinstance(record[field], bool): + if not field: + sheet.write(row_num, col_num, " ", format5) + else: + sheet.write(row_num, col_num, "Yes", + format5) + else: + sheet.write(row_num, col_num, record[field][0], + format5) + except Exception as e: + if record[field][0]: + sheet.write(row_num, col_num, + record[field].name_search()[0][1], + format5) + else: + sheet.write(row_num, col_num, "", format5) + col_num += 1 + row_num += occupied_rows + sl_no += 1 + workbook.close() + output.seek(0) + response.stream.write(output.read()) + output.close() diff --git a/excel_report_designer/wizards/excel_report_wizards.xml b/excel_report_designer/wizards/excel_report_wizards.xml new file mode 100755 index 000000000..5d6b528c1 --- /dev/null +++ b/excel_report_designer/wizards/excel_report_wizards.xml @@ -0,0 +1,18 @@ + + + + + excel.report.wizards.view.form + excel.report.wizards + +
+

Do you want to print the report??

+ +
+
+
+