diff --git a/excel_import_export_demo/__manifest__.py b/excel_import_export_demo/__manifest__.py index 6f2c47433..03b5f8412 100644 --- a/excel_import_export_demo/__manifest__.py +++ b/excel_import_export_demo/__manifest__.py @@ -1,28 +1,29 @@ # 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/Report 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', - # Use report action - 'report_action/sale_order/report.xml', - 'report_action/sale_order/templates.xml', - 'report_action/partner_list/report.xml', - 'report_action/partner_list/templates.xml', - 'report_action/partner_list/report_partner_list.xml', - ], - 'installable': True, - 'development_status': 'alpha', - 'maintainers': ['kittiu'], - } +{ + "name": "Excel Import/Export/Report 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", + # Use report action + "report_action/sale_order/report.xml", + "report_action/sale_order/templates.xml", + "report_action/partner_list/report.xml", + "report_action/partner_list/templates.xml", + "report_action/partner_list/report_partner_list.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 index bbff83122..8c67e720d 100644 --- a/excel_import_export_demo/import_export_sale_order/actions.xml +++ b/excel_import_export_demo/import_export_sale_order/actions.xml @@ -1,10 +1,10 @@ - + - - - + }" + /> diff --git a/excel_import_export_demo/import_export_sale_order/templates.xml b/excel_import_export_demo/import_export_sale_order/templates.xml index e7f1255ba..eec0666d8 100644 --- a/excel_import_export_demo/import_export_sale_order/templates.xml +++ b/excel_import_export_demo/import_export_sale_order/templates.xml @@ -1,9 +1,8 @@ - + - sale.order sale_order.xlsx @@ -44,9 +43,7 @@ } - - + - diff --git a/excel_import_export_demo/import_sale_orders/menu_action.xml b/excel_import_export_demo/import_sale_orders/menu_action.xml index 2eed76e3b..4c0c0e994 100644 --- a/excel_import_export_demo/import_sale_orders/menu_action.xml +++ b/excel_import_export_demo/import_sale_orders/menu_action.xml @@ -1,9 +1,8 @@ - + - Sample Import Sale Order import.xlsx.wizard @@ -16,10 +15,10 @@ ('gname', '=', False)], } - - - + sequence="30" + /> diff --git a/excel_import_export_demo/import_sale_orders/templates.xml b/excel_import_export_demo/import_sale_orders/templates.xml index b5fad027c..b5a192bc0 100644 --- a/excel_import_export_demo/import_sale_orders/templates.xml +++ b/excel_import_export_demo/import_sale_orders/templates.xml @@ -1,15 +1,14 @@ - + - sale.order import_sale_order.xlsx Import Sale Order Template Sample Import Sales Order Tempalte for testing - + { '__IMPORT__': { @@ -30,9 +29,7 @@ } - - + - diff --git a/excel_import_export_demo/report_action/partner_list/report.xml b/excel_import_export_demo/report_action/partner_list/report.xml index 71d2286c1..f87f252a3 100644 --- a/excel_import_export_demo/report_action/partner_list/report.xml +++ b/excel_import_export_demo/report_action/partner_list/report.xml @@ -1,10 +1,11 @@ - diff --git a/excel_import_export_demo/report_action/partner_list/report_partner_list.py b/excel_import_export_demo/report_action/partner_list/report_partner_list.py index ac248ac4d..c15e49942 100644 --- a/excel_import_export_demo/report_action/partner_list/report_partner_list.py +++ b/excel_import_export_demo/report_action/partner_list/report_partner_list.py @@ -1,27 +1,21 @@ # Copyright 2019 Ecosoft Co., Ltd (http://ecosoft.co.th/) # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html) -from odoo import models, fields, api +from odoo import api, fields, models class ReportPartnerList(models.TransientModel): - _name = 'report.partner.list' - _description = 'Wizard for report.partner.list' + _name = "report.partner.list" + _description = "Wizard for report.partner.list" - partner_ids = fields.Many2many( - comodel_name='res.partner', - ) - supplier = fields.Boolean( - default=True, - ) - customer = fields.Boolean( - default=True, - ) + partner_ids = fields.Many2many(comodel_name="res.partner",) + supplier = fields.Boolean(default=True,) + customer = fields.Boolean(default=True,) results = fields.Many2many( - 'res.partner', - string='Results', - compute='_compute_results', - help='Use compute fields, so there is nothing store in database', + "res.partner", + string="Results", + compute="_compute_results", + help="Use compute fields, so there is nothing store in database", ) @api.multi @@ -30,8 +24,11 @@ class ReportPartnerList(models.TransientModel): before export to excel by report_excel action """ self.ensure_one() - domain = ['|', ('supplier', '=', self.supplier), - ('customer', '=', self.customer)] + domain = [ + "|", + ("supplier", "=", self.supplier), + ("customer", "=", self.customer), + ] if self.partner_ids: - domain.append(('id', 'in', self.partner_ids.ids)) - self.results = self.env['res.partner'].search(domain, order='id') + domain.append(("id", "in", self.partner_ids.ids)) + self.results = self.env["res.partner"].search(domain, order="id") diff --git a/excel_import_export_demo/report_action/partner_list/report_partner_list.xml b/excel_import_export_demo/report_action/partner_list/report_partner_list.xml index 48720dd99..15871159e 100644 --- a/excel_import_export_demo/report_action/partner_list/report_partner_list.xml +++ b/excel_import_export_demo/report_action/partner_list/report_partner_list.xml @@ -1,6 +1,5 @@ - partner.list.wizard report.partner.list @@ -8,24 +7,25 @@
- + - - + +
-
- Partner List Report report.partner.list @@ -33,11 +33,10 @@ form new - - -
diff --git a/excel_import_export_demo/report_action/partner_list/templates.xml b/excel_import_export_demo/report_action/partner_list/templates.xml index f716c8f32..8aa05e526 100644 --- a/excel_import_export_demo/report_action/partner_list/templates.xml +++ b/excel_import_export_demo/report_action/partner_list/templates.xml @@ -1,11 +1,12 @@ - + - report.partner.list partner_list.xlsx Partner List Report Template - Sample Partner List Report Template for testing + Sample Partner List Report Template for testing { '__EXPORT__': { @@ -21,9 +22,7 @@ } - - + - diff --git a/excel_import_export_demo/report_action/sale_order/report.xml b/excel_import_export_demo/report_action/sale_order/report.xml index 38301b657..806286ceb 100644 --- a/excel_import_export_demo/report_action/sale_order/report.xml +++ b/excel_import_export_demo/report_action/sale_order/report.xml @@ -1,13 +1,12 @@ - - - diff --git a/excel_import_export_demo/report_action/sale_order/templates.xml b/excel_import_export_demo/report_action/sale_order/templates.xml index c46a64a59..fc2d21d85 100644 --- a/excel_import_export_demo/report_action/sale_order/templates.xml +++ b/excel_import_export_demo/report_action/sale_order/templates.xml @@ -1,6 +1,5 @@ - + - sale.order sale_order_form.xlsx @@ -28,9 +27,7 @@ } - - + - 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 index 215748968..a9ddf7583 100644 --- a/excel_import_export_demo/report_sale_order/report_sale_order.py +++ b/excel_import_export_demo/report_sale_order/report_sale_order.py @@ -1,25 +1,22 @@ # 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 +from openerp import api, fields, models class ReportSaleOrder(models.TransientModel): - _name = 'report.sale.order' - _description = 'Wizard for report.sale.order' - _inherit = 'xlsx.report' + _name = "report.sale.order" + _description = "Wizard for report.sale.order" + _inherit = "xlsx.report" # Search Criteria - partner_id = fields.Many2one( - 'res.partner', - string='Partner', - ) + 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', + "sale.order", + string="Results", + compute="_compute_results", + help="Use compute fields, so there is nothing stored in database", ) @api.multi @@ -28,8 +25,8 @@ class ReportSaleOrder(models.TransientModel): before export to excel, by using xlsx.export """ self.ensure_one() - Result = self.env['sale.order'] + Result = self.env["sale.order"] domain = [] if self.partner_id: - domain += [('partner_id', '=', self.partner_id.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.xml b/excel_import_export_demo/report_sale_order/report_sale_order.xml index 92b1a147d..85c6b8c3f 100644 --- a/excel_import_export_demo/report_sale_order/report_sale_order.xml +++ b/excel_import_export_demo/report_sale_order/report_sale_order.xml @@ -1,25 +1,23 @@ - + - report.sale.order report.sale.order - + primary - + - Sample Sales Report report.sale.order @@ -32,10 +30,10 @@ ('gname', '=', False)]} - - - + sequence="20" + /> diff --git a/excel_import_export_demo/report_sale_order/templates.xml b/excel_import_export_demo/report_sale_order/templates.xml index 45ee33c6d..bec041b09 100644 --- a/excel_import_export_demo/report_sale_order/templates.xml +++ b/excel_import_export_demo/report_sale_order/templates.xml @@ -1,9 +1,8 @@ - + - report.sale.order report_sale_order.xlsx @@ -28,9 +27,7 @@ } - - + - diff --git a/excel_import_export_demo/tests/test_common.py b/excel_import_export_demo/tests/test_common.py index 2235ef78f..f86386a0a 100644 --- a/excel_import_export_demo/tests/test_common.py +++ b/excel_import_export_demo/tests/test_common.py @@ -4,56 +4,54 @@ 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'] + 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}', + "__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}", }, - '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', + "__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), + "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) @@ -62,69 +60,77 @@ class TestExcelImportExport(SingleTransactionCase): 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, + "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)], - }) + 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, + "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)], - }) + 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)], - }) + 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, - }) + 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 - }) + 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, - }) + 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 index 8a6aa158a..1c0c278e6 100644 --- a/excel_import_export_demo/tests/test_xlsx_import_export.py +++ b/excel_import_export_demo/tests/test_xlsx_import_export.py @@ -1,11 +1,11 @@ # 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 +from .test_common import TestExcelImportExport + class TestXLSXImportExport(TestExcelImportExport): - @classmethod def setUpClass(cls): super(TestExcelImportExport, cls).setUpClass() @@ -15,38 +15,48 @@ class TestXLSXImportExport(TestExcelImportExport): # 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)) + 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')) + 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)], - 'template_context': {'state': 'draft'}, } - with Form(self.env['import.xlsx.wizard'].with_context(ctx)) as f: + ctx = { + "active_model": "sale.order", + "active_id": self.sale_order.id, + "template_domain": [ + ("res_model", "=", "sale.order"), + ("fname", "=", "sale_order.xlsx"), + ("gname", "=", False), + ], + "template_context": {"state": "draft"}, + } + with Form(self.env["import.xlsx.wizard"].with_context(ctx)) as f: f.import_file = self.export_file import_wizard = f.save() # Test sample template import_wizard.get_import_sample() self.assertTrue(import_wizard.datas) # Test whether it loads correct template - self.assertEqual(import_wizard.template_id, - self.env.ref('excel_import_export_demo.' - 'sale_order_xlsx_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 index 22ba2db9c..86d23d337 100644 --- a/excel_import_export_demo/tests/test_xlsx_report.py +++ b/excel_import_export_demo/tests/test_xlsx_report.py @@ -1,11 +1,11 @@ # 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 +from .test_common import TestExcelImportExport + class TestXLSXReport(TestExcelImportExport): - @classmethod def setUpClass(cls): super(TestXLSXReport, cls).setUpClass() @@ -14,16 +14,21 @@ class TestXLSXReport(TestExcelImportExport): """ 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: + 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')) + 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 index 730605c18..8c269a977 100644 --- a/excel_import_export_demo/tests/test_xlsx_template.py +++ b/excel_import_export_demo/tests/test_xlsx_template.py @@ -1,11 +1,11 @@ # 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() @@ -17,46 +17,44 @@ class TestXLSXTemplate(TestExcelImportExport): 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}#??' + "__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", } } }, - '__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 - } + "__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.template_obj.load_xlsx_template( + [self.sample_template.id], addon="excel_import_export_demo" + ) self.assertTrue(self.sample_template.datas) # Loaded successfully