diff --git a/excel_import_export_demo/README.rst b/excel_import_export_demo/README.rst new file mode 100644 index 000000000..17d98a14a --- /dev/null +++ b/excel_import_export_demo/README.rst @@ -0,0 +1,112 @@ +======================== +Excel Import/Export Demo +======================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge2| image:: https://img.shields.io/badge/github-OCA%2Fserver--tools-lightgray.png?logo=github + :target: https://github.com/OCA/server-tools/tree/12-add-excel_import_export/excel_import_export_demo + :alt: OCA/server-tools +.. |badge3| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/server-tools-12-add-excel_import_export/server-tools-12-add-excel_import_export-excel_import_export_demo + :alt: Translate me on Weblate +.. |badge4| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/149/12-add-excel_import_export + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| + +This module provide some example use case for excel_import_export + +1. Import/Export Sales Order (import_export_sale_order) +2. Import New Sales Orders (import_sale_orders) +3. Sales Orders Report (report_sale_order) + +**Table of contents** + +.. contents:: + :local: + +Installation +============ + +To install this module, you need to install **excel_import_export** + +Then, simply install **excel_import_export_demo**. + +Usage +===== + +**Use Case 1:** Export/Import Excel on existing document + +To test this use case, go to any Sales Order and use Export Excel or Import Excel in action menu. + +**Use Case 2:** Import Excel Files + +To test this use case, go to Settings > Excel Import/Export > Sample Import Sales Order + +**Use Case 3:** Create Excel Report + +To test this use case, go to Settings > Excel Import/Export > Sample Sales Report + +Changelog +========= + +12.0.1.0.0 (2019-02-24) +~~~~~~~~~~~~~~~~~~~~~~~ + +* Start of the history + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Ecosoft + +Contributors +~~~~~~~~~~~~ + +* Kitti Upariphutthiphong. (http://ecosoft.co.th) + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-kittiu| image:: https://github.com/kittiu.png?size=40px + :target: https://github.com/kittiu + :alt: kittiu + +Current `maintainer `__: + +|maintainer-kittiu| + +This module is part of the `OCA/server-tools `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/excel_import_export_demo/__init__.py b/excel_import_export_demo/__init__.py new file mode 100644 index 000000000..1334da2f4 --- /dev/null +++ b/excel_import_export_demo/__init__.py @@ -0,0 +1,5 @@ +# Copyright 2019 Ecosoft Co., Ltd (http://ecosoft.co.th/) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) + +from . import import_export_sale_order +from . import report_sale_order diff --git a/excel_import_export_demo/__manifest__.py b/excel_import_export_demo/__manifest__.py new file mode 100644 index 000000000..9463f279f --- /dev/null +++ b/excel_import_export_demo/__manifest__.py @@ -0,0 +1,22 @@ +# Copyright 2019 Ecosoft Co., Ltd (http://ecosoft.co.th/) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) + +{'name': 'Excel Import/Export Demo', + 'version': '12.0.1.0.0', + 'author': 'Ecosoft,Odoo Community Association (OCA)', + 'license': 'AGPL-3', + 'website': 'https://github.com/OCA/server-tools/', + 'category': 'Tools', + 'depends': ['excel_import_export', + 'sale_management'], + 'data': ['import_export_sale_order/actions.xml', + 'import_export_sale_order/templates.xml', + 'report_sale_order/report_sale_order.xml', + 'report_sale_order/templates.xml', + 'import_sale_orders/menu_action.xml', + 'import_sale_orders/templates.xml', + ], + 'installable': True, + 'development_status': 'alpha', + 'maintainers': ['kittiu'], + } diff --git a/excel_import_export_demo/import_export_sale_order/actions.xml b/excel_import_export_demo/import_export_sale_order/actions.xml new file mode 100644 index 000000000..bbff83122 --- /dev/null +++ b/excel_import_export_demo/import_export_sale_order/actions.xml @@ -0,0 +1,32 @@ + + + + + + + + diff --git a/excel_import_export_demo/import_export_sale_order/sale_order.xlsx b/excel_import_export_demo/import_export_sale_order/sale_order.xlsx new file mode 100644 index 000000000..18618688b Binary files /dev/null and b/excel_import_export_demo/import_export_sale_order/sale_order.xlsx differ diff --git a/excel_import_export_demo/import_export_sale_order/templates.xml b/excel_import_export_demo/import_export_sale_order/templates.xml new file mode 100644 index 000000000..e7f1255ba --- /dev/null +++ b/excel_import_export_demo/import_export_sale_order/templates.xml @@ -0,0 +1,52 @@ + + + + + + sale.order + sale_order.xlsx + Sale Order Template + Sample Sales Order Tempalte for testing + + { + '__EXPORT__': { + 'sale_order': { + '_HEAD_': { + 'B2': 'partner_id.display_name${value or ""}#{align=left;style=text}', + 'B3': 'name${value or ""}#{align=left;style=text}', + }, + 'order_line': { + 'A6': 'product_id.display_name${value or ""}#{style=text}', + 'B6': 'name${value or ""}#{style=text}', + 'C6': 'product_uom_qty${value or 0}#{style=number}', + 'D6': 'product_uom.name${value or ""}#{style=text}', + 'E6': 'price_unit${value or 0}#{style=number}', + 'F6': 'tax_id${value and ",".join([x.display_name for x in value]) or ""}', + 'G6': 'price_subtotal${value or 0}#{style=number}', + } + } + }, + '__IMPORT__': { + 'sale_order': { + '_NODEL_order_line': { + 'A6': 'product_id', + 'B6': 'name', + 'C6': 'product_uom_qty', + 'D6': 'product_uom', + 'E6': 'price_unit', + 'F6': 'tax_id', + } + } + }, + # '__POST_IMPORT__': '${object.post_import_do_something()}', + } + + + + + + + + diff --git a/excel_import_export_demo/import_sale_orders/import_sale_order.xlsx b/excel_import_export_demo/import_sale_orders/import_sale_order.xlsx new file mode 100644 index 000000000..18618688b Binary files /dev/null and b/excel_import_export_demo/import_sale_orders/import_sale_order.xlsx differ diff --git a/excel_import_export_demo/import_sale_orders/menu_action.xml b/excel_import_export_demo/import_sale_orders/menu_action.xml new file mode 100644 index 000000000..2eed76e3b --- /dev/null +++ b/excel_import_export_demo/import_sale_orders/menu_action.xml @@ -0,0 +1,25 @@ + + + + + + Sample Import Sale Order + import.xlsx.wizard + form + form + new + { + 'template_domain': [('res_model', '=', 'sale.order'), + ('fname', '=', 'import_sale_order.xlsx'), + ('gname', '=', False)], } + + + + + + diff --git a/excel_import_export_demo/import_sale_orders/templates.xml b/excel_import_export_demo/import_sale_orders/templates.xml new file mode 100644 index 000000000..b5fad027c --- /dev/null +++ b/excel_import_export_demo/import_sale_orders/templates.xml @@ -0,0 +1,38 @@ + + + + + + sale.order + import_sale_order.xlsx + Import Sale Order Template + Sample Import Sales Order Tempalte for testing + + + { + '__IMPORT__': { + 'sale_order': { + '_HEAD_': { + 'B2': 'partner_id', + }, + 'order_line': { + 'A6': 'product_id', + 'B6': 'name', + 'C6': 'product_uom_qty', + 'D6': 'product_uom', + 'E6': 'price_unit', + 'F6': 'tax_id', + } + } + }, + } + + + + + + + + diff --git a/excel_import_export_demo/readme/CONTRIBUTORS.rst b/excel_import_export_demo/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..9c7a518b1 --- /dev/null +++ b/excel_import_export_demo/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Kitti Upariphutthiphong. (http://ecosoft.co.th) diff --git a/excel_import_export_demo/readme/DESCRIPTION.rst b/excel_import_export_demo/readme/DESCRIPTION.rst new file mode 100644 index 000000000..e1c00d558 --- /dev/null +++ b/excel_import_export_demo/readme/DESCRIPTION.rst @@ -0,0 +1,5 @@ +This module provide some example use case for excel_import_export + +1. Import/Export Sales Order (import_export_sale_order) +2. Import New Sales Orders (import_sale_orders) +3. Sales Orders Report (report_sale_order) diff --git a/excel_import_export_demo/readme/HISTORY.rst b/excel_import_export_demo/readme/HISTORY.rst new file mode 100644 index 000000000..b8d1b41b6 --- /dev/null +++ b/excel_import_export_demo/readme/HISTORY.rst @@ -0,0 +1,4 @@ +12.0.1.0.0 (2019-02-24) +~~~~~~~~~~~~~~~~~~~~~~~ + +* Start of the history diff --git a/excel_import_export_demo/readme/INSTALL.rst b/excel_import_export_demo/readme/INSTALL.rst new file mode 100644 index 000000000..d428d7850 --- /dev/null +++ b/excel_import_export_demo/readme/INSTALL.rst @@ -0,0 +1,3 @@ +To install this module, you need to install **excel_import_export** + +Then, simply install **excel_import_export_demo**. diff --git a/excel_import_export_demo/readme/USAGE.rst b/excel_import_export_demo/readme/USAGE.rst new file mode 100644 index 000000000..cdf6bdeff --- /dev/null +++ b/excel_import_export_demo/readme/USAGE.rst @@ -0,0 +1,11 @@ +**Use Case 1:** Export/Import Excel on existing document + +To test this use case, go to any Sales Order and use Export Excel or Import Excel in action menu. + +**Use Case 2:** Import Excel Files + +To test this use case, go to Settings > Excel Import/Export > Sample Import Sales Order + +**Use Case 3:** Create Excel Report + +To test this use case, go to Settings > Excel Import/Export > Sample Sales Report diff --git a/excel_import_export_demo/report_sale_order/__init__.py b/excel_import_export_demo/report_sale_order/__init__.py new file mode 100644 index 000000000..03a1b8b20 --- /dev/null +++ b/excel_import_export_demo/report_sale_order/__init__.py @@ -0,0 +1,4 @@ +# Copyright 2019 Ecosoft Co., Ltd (http://ecosoft.co.th/) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) + +from . import report_sale_order diff --git a/excel_import_export_demo/report_sale_order/report_sale_order.py b/excel_import_export_demo/report_sale_order/report_sale_order.py new file mode 100644 index 000000000..215748968 --- /dev/null +++ b/excel_import_export_demo/report_sale_order/report_sale_order.py @@ -0,0 +1,35 @@ +# Copyright 2019 Ecosoft Co., Ltd (http://ecosoft.co.th/) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) + +from openerp import models, fields, api + + +class ReportSaleOrder(models.TransientModel): + _name = 'report.sale.order' + _description = 'Wizard for report.sale.order' + _inherit = 'xlsx.report' + + # Search Criteria + partner_id = fields.Many2one( + 'res.partner', + string='Partner', + ) + # Report Result, sale.order + results = fields.Many2many( + 'sale.order', + string='Results', + compute='_compute_results', + help='Use compute fields, so there is nothing stored in database', + ) + + @api.multi + def _compute_results(self): + """ On the wizard, result will be computed and added to results line + before export to excel, by using xlsx.export + """ + self.ensure_one() + Result = self.env['sale.order'] + domain = [] + if self.partner_id: + domain += [('partner_id', '=', self.partner_id.id)] + self.results = Result.search(domain) diff --git a/excel_import_export_demo/report_sale_order/report_sale_order.xlsx b/excel_import_export_demo/report_sale_order/report_sale_order.xlsx new file mode 100644 index 000000000..6e5cf8fa6 Binary files /dev/null and b/excel_import_export_demo/report_sale_order/report_sale_order.xlsx differ diff --git a/excel_import_export_demo/report_sale_order/report_sale_order.xml b/excel_import_export_demo/report_sale_order/report_sale_order.xml new file mode 100644 index 000000000..92b1a147d --- /dev/null +++ b/excel_import_export_demo/report_sale_order/report_sale_order.xml @@ -0,0 +1,41 @@ + + + + + + report.sale.order + report.sale.order + + primary + + + + + + + + + + + + + Sample Sales Report + report.sale.order + form + form + new + + {'template_domain': [('res_model', '=', 'report.sale.order'), + ('fname', '=', 'report_sale_order.xlsx'), + ('gname', '=', False)]} + + + + + + diff --git a/excel_import_export_demo/report_sale_order/templates.xml b/excel_import_export_demo/report_sale_order/templates.xml new file mode 100644 index 000000000..45ee33c6d --- /dev/null +++ b/excel_import_export_demo/report_sale_order/templates.xml @@ -0,0 +1,36 @@ + + + + + + report.sale.order + report_sale_order.xlsx + Report Sale Order Template + Sample Report Sales Order Tempalte for testing + + { + '__EXPORT__': { + 1: { + '_HEAD_': { + 'B2': 'partner_id.display_name${value or ""}#{align=left;style=text}', + }, + 'results': { + 'A5': 'name${value or ""}#{style=text}', + 'B5': 'confirmation_date${value or ""}#{style=date}', + 'C5': 'amount_untaxed${value or 0}#{style=number}@{sum}', + 'D5': 'amount_tax${value or 0}#{style=number}@{sum}', + 'E5': 'amount_total${value or 0}#{style=number}@{sum}', + }, + }, + }, + } + + + + + + + + diff --git a/excel_import_export_demo/static/description/index.html b/excel_import_export_demo/static/description/index.html new file mode 100644 index 000000000..5ac32b4e4 --- /dev/null +++ b/excel_import_export_demo/static/description/index.html @@ -0,0 +1,455 @@ + + + + + + +Excel Import/Export Demo + + + +
+

Excel Import/Export Demo

+ + +

License: AGPL-3 OCA/server-tools Translate me on Weblate Try me on Runbot

+

This module provide some example use case for excel_import_export

+
    +
  1. Import/Export Sales Order (import_export_sale_order)
  2. +
  3. Import New Sales Orders (import_sale_orders)
  4. +
  5. Sales Orders Report (report_sale_order)
  6. +
+

Table of contents

+ +
+

Installation

+

To install this module, you need to install excel_import_export

+

Then, simply install excel_import_export_demo.

+
+
+

Usage

+

Use Case 1: Export/Import Excel on existing document

+

To test this use case, go to any Sales Order and use Export Excel or Import Excel in action menu.

+

Use Case 2: Import Excel Files

+

To test this use case, go to Settings > Excel Import/Export > Sample Import Sales Order

+

Use Case 3: Create Excel Report

+

To test this use case, go to Settings > Excel Import/Export > Sample Sales Report

+
+
+

Changelog

+
+

12.0.1.0.0 (2019-02-24)

+
    +
  • Start of the history
  • +
+
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Ecosoft
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

Current maintainer:

+

kittiu

+

This module is part of the OCA/server-tools project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/excel_import_export_demo/tests/__init__.py b/excel_import_export_demo/tests/__init__.py new file mode 100644 index 000000000..44c33f918 --- /dev/null +++ b/excel_import_export_demo/tests/__init__.py @@ -0,0 +1,5 @@ +# Copyright 2019 Ecosoft Co., Ltd (http://ecosoft.co.th/) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) +from . import test_xlsx_template +from . import test_xlsx_import_export +from . import test_xlsx_report diff --git a/excel_import_export_demo/tests/sale_order.xlsx b/excel_import_export_demo/tests/sale_order.xlsx new file mode 100644 index 000000000..18618688b Binary files /dev/null and b/excel_import_export_demo/tests/sale_order.xlsx differ diff --git a/excel_import_export_demo/tests/test_common.py b/excel_import_export_demo/tests/test_common.py new file mode 100644 index 000000000..2235ef78f --- /dev/null +++ b/excel_import_export_demo/tests/test_common.py @@ -0,0 +1,130 @@ +# Copyright 2019 Ecosoft Co., Ltd (http://ecosoft.co.th/) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) +from odoo.tests.common import SingleTransactionCase + + +class TestExcelImportExport(SingleTransactionCase): + + @classmethod + def setUpClass(cls): + super(TestExcelImportExport, cls).setUpClass() + + @classmethod + def setUpXLSXTemplate(cls): + cls.template_obj = cls.env['xlsx.template'] + # Create xlsx.template using input_instruction + input_instruction = { + '__EXPORT__': { + 'sale_order': { + '_HEAD_': { + 'B2': 'partner_id.display_name${value or ""}' + '#{align=left;style=text}', + 'B3': 'name${value or ""}#{align=left;style=text}', + }, + 'order_line': { + 'A6': 'product_id.display_name${value or ""}' + '#{style=text}', + 'B6': 'name${value or ""}#{style=text}', + 'C6': 'product_uom_qty${value or 0}#{style=number}', + 'D6': 'product_uom.name${value or ""}#{style=text}', + 'E6': 'price_unit${value or 0}#{style=number}', + 'F6': 'tax_id${value and ","' + '.join([x.display_name for x in value]) or ""}', + 'G6': 'price_subtotal${value or 0}#{style=number}', + } + } + }, + '__IMPORT__': { + 'sale_order': { + 'order_line': { + 'A6': 'product_id', + 'B6': 'name', + 'C6': 'product_uom_qty', + 'D6': 'product_uom', + 'E6': 'price_unit', + 'F6': 'tax_id', + } + } + }, + # '__POST_IMPORT__': '${object.post_import_do_something()}', + } + vals = { + 'res_model': 'sale.order', + 'fname': 'sale_order.xlsx', + 'name': 'Sale Order Template', + 'description': 'Sample Sales Order Tempalte for testing', + 'input_instruction': str(input_instruction), + } + cls.sample_template = cls.template_obj.create(vals) + + @classmethod + def setUpSaleOrder(cls): + cls.setUpPrepSaleOrder() + # Create a Sales Order + product_line = { + 'name': cls.product_order.name, + 'product_id': cls.product_order.id, + 'product_uom_qty': 2, + 'product_uom': cls.product_order.uom_id.id, + 'price_unit': cls.product_order.list_price, + 'tax_id': False, + } + cls.sale_order = cls.env['sale.order'].create({ + 'partner_id': cls.partner.id, + 'order_line': [(0, 0, product_line), (0, 0, product_line)], + }) + + @classmethod + def setUpManySaleOrder(cls): + cls.setUpPrepSaleOrder() + # Create a Sales Order + product_line = { + 'name': cls.product_order.name, + 'product_id': cls.product_order.id, + 'product_uom_qty': 2, + 'product_uom': cls.product_order.uom_id.id, + 'price_unit': cls.product_order.list_price, + 'tax_id': False, + } + for i in range(10): + cls.env['sale.order'].create({ + 'partner_id': cls.partner.id, + 'order_line': [(0, 0, product_line), (0, 0, product_line)], + }) + + @classmethod + def setUpPrepSaleOrder(cls): + categ_ids = cls.env['res.partner.category'].search([]).ids + cls.partner = cls.env['res.partner'].create({ + 'name': 'Test Partner', + 'category_id': [(6, 0, categ_ids)], + }) + # Create a Product + user_type_income = \ + cls.env.ref('account.data_account_type_direct_costs') + cls.account_income_product = cls.env['account.account'].create({ + 'code': 'INCOME_PROD111', + 'name': 'Icome - Test Account', + 'user_type_id': user_type_income.id, + }) + # Create category + cls.product_category = cls.env['product.category'].create({ + 'name': 'Product Category with Income account', + 'property_account_income_categ_id': cls.account_income_product.id + }) + # Products + uom_unit = cls.env.ref('uom.product_uom_unit') + cls.product_order = cls.env['product.product'].create({ + 'name': "Test Product", + 'standard_price': 235.0, + 'list_price': 280.0, + 'type': 'consu', + 'uom_id': uom_unit.id, + 'uom_po_id': uom_unit.id, + 'invoice_policy': 'order', + 'expense_policy': 'no', + 'default_code': 'PROD_ORDER', + 'service_type': 'manual', + 'taxes_id': False, + 'categ_id': cls.product_category.id, + }) diff --git a/excel_import_export_demo/tests/test_xlsx_import_export.py b/excel_import_export_demo/tests/test_xlsx_import_export.py new file mode 100644 index 000000000..64fb18525 --- /dev/null +++ b/excel_import_export_demo/tests/test_xlsx_import_export.py @@ -0,0 +1,48 @@ +# Copyright 2019 Ecosoft Co., Ltd (http://ecosoft.co.th/) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) +from .test_common import TestExcelImportExport +from odoo.tests.common import Form + + +class TestXLSXImportExport(TestExcelImportExport): + + @classmethod + def setUpClass(cls): + super(TestExcelImportExport, cls).setUpClass() + + def test_xlsx_export_import(self): + """ Test Export Excel from Sales Order """ + # Create Sales Order + self.setUpSaleOrder() + # ----------- EXPORT --------------- + ctx = {'active_model': 'sale.order', + 'active_id': self.sale_order.id, + 'template_domain': [('res_model', '=', 'sale.order'), + ('fname', '=', 'sale_order.xlsx'), + ('gname', '=', False)], } + f = Form(self.env['export.xlsx.wizard'].with_context(ctx)) + export_wizard = f.save() + # Test whether it loads correct template + self.assertEqual(export_wizard.template_id, + self.env.ref('excel_import_export_demo.' + 'sale_order_xlsx_template')) + # Export excel + export_wizard.action_export() + self.assertTrue(export_wizard.data) + self.export_file = export_wizard.data + + # ----------- IMPORT --------------- + ctx = {'active_model': 'sale.order', + 'active_id': self.sale_order.id, + 'template_domain': [('res_model', '=', 'sale.order'), + ('fname', '=', 'sale_order.xlsx'), + ('gname', '=', False)], } + with Form(self.env['import.xlsx.wizard'].with_context(ctx)) as f: + f.import_file = self.export_file + import_wizard = f.save() + # Test whether it loads correct template + self.assertEqual(import_wizard.template_id, + self.env.ref('excel_import_export_demo.' + 'sale_order_xlsx_template')) + # Import Excel + import_wizard.action_import() diff --git a/excel_import_export_demo/tests/test_xlsx_report.py b/excel_import_export_demo/tests/test_xlsx_report.py new file mode 100644 index 000000000..22ba2db9c --- /dev/null +++ b/excel_import_export_demo/tests/test_xlsx_report.py @@ -0,0 +1,29 @@ +# Copyright 2019 Ecosoft Co., Ltd (http://ecosoft.co.th/) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) +from .test_common import TestExcelImportExport +from odoo.tests.common import Form + + +class TestXLSXReport(TestExcelImportExport): + + @classmethod + def setUpClass(cls): + super(TestXLSXReport, cls).setUpClass() + + def test_xlsx_report(self): + """ Test Report from Sales Order """ + # Create Many Sales Orders + self.setUpManySaleOrder() + ctx = {'template_domain': [('res_model', '=', 'report.sale.order'), + ('fname', '=', 'report_sale_order.xlsx'), + ('gname', '=', False)], } + with Form(self.env['report.sale.order'].with_context(ctx)) as f: + f.partner_id = self.partner + report_wizard = f.save() + # Test whether it loads correct template + self.assertEqual(report_wizard.template_id, + self.env.ref('excel_import_export_demo.' + 'report_sale_order_template')) + # Report excel + report_wizard.report_xlsx() + self.assertTrue(report_wizard.data) diff --git a/excel_import_export_demo/tests/test_xlsx_template.py b/excel_import_export_demo/tests/test_xlsx_template.py new file mode 100644 index 000000000..730605c18 --- /dev/null +++ b/excel_import_export_demo/tests/test_xlsx_template.py @@ -0,0 +1,62 @@ +# Copyright 2019 Ecosoft Co., Ltd (http://ecosoft.co.th/) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) +from ast import literal_eval +from .test_common import TestExcelImportExport + + +class TestXLSXTemplate(TestExcelImportExport): + + @classmethod + def setUpClass(cls): + super(TestExcelImportExport, cls).setUpClass() + + def test_xlsx_tempalte(self): + """ Test XLSX Tempalte input and output instruction """ + self.setUpXLSXTemplate() + instruction_dict = literal_eval(self.sample_template.instruction) + self.assertDictEqual( + instruction_dict, + { + '__EXPORT__': { + 'sale_order': { + '_HEAD_': { + 'B2': 'partner_id.display_name${value or ""}' + '#{align=left;style=text}#??', + 'B3': 'name${value or ""}' + '#{align=left;style=text}#??'}, + 'order_line': { + 'A6': 'product_id.display_name${value or ""}' + '#{style=text}#??', + 'B6': 'name${value or ""}#{style=text}#??', + 'C6': 'product_uom_qty${value or 0}' + '#{style=number}#??', + 'D6': 'product_uom.name${value or ""}' + '#{style=text}#??', + 'E6': 'price_unit${value or 0}#{style=number}#??', + 'F6': 'tax_id${value and ",".join([x.display_name ' + 'for x in value]) or ""}#{}#??', + 'G6': 'price_subtotal${value or 0}' + '#{style=number}#??' + } + } + }, + '__IMPORT__': { + 'sale_order': { + 'order_line': { + 'A6': 'product_id', + 'B6': 'name', + 'C6': 'product_uom_qty', + 'D6': 'product_uom', + 'E6': 'price_unit', + 'F6': 'tax_id', + } + } + }, + '__POST_IMPORT__': False + } + ) + # Finally load excel file into this new template + self.assertFalse(self.sample_template.datas) # Not yet loaded + self.template_obj.load_xlsx_template([self.sample_template.id], + addon='excel_import_export_demo') + self.assertTrue(self.sample_template.datas) # Loaded successfully