[IMP] : black, isort, prettier
parent
7521e19465
commit
0cb075863b
|
@ -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"],
|
||||
}
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2019 Ecosoft Co., Ltd.
|
||||
License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).-->
|
||||
<odoo>
|
||||
|
||||
<act_window id="action_sale_oder_export_xlsx"
|
||||
<act_window
|
||||
id="action_sale_oder_export_xlsx"
|
||||
name="Export Excel"
|
||||
res_model="export.xlsx.wizard"
|
||||
src_model="sale.order"
|
||||
|
@ -14,8 +14,10 @@
|
|||
'template_domain': [('res_model', '=', 'sale.order'),
|
||||
('fname', '=', 'sale_order.xlsx'),
|
||||
('gname', '=', False)],
|
||||
}"/>
|
||||
<act_window id="action_sale_oder_import_xlsx"
|
||||
}"
|
||||
/>
|
||||
<act_window
|
||||
id="action_sale_oder_import_xlsx"
|
||||
name="Import Excel"
|
||||
res_model="import.xlsx.wizard"
|
||||
src_model="sale.order"
|
||||
|
@ -27,6 +29,6 @@
|
|||
('gname', '=', False)],
|
||||
'template_context': {},
|
||||
'template_import_states': [],
|
||||
}"/>
|
||||
|
||||
}"
|
||||
/>
|
||||
</odoo>
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2019 Ecosoft Co., Ltd.
|
||||
License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).-->
|
||||
<odoo>
|
||||
|
||||
<record id="sale_order_xlsx_template" model="xlsx.template">
|
||||
<field name="res_model">sale.order</field>
|
||||
<field name="fname">sale_order.xlsx</field>
|
||||
|
@ -44,9 +43,7 @@
|
|||
}
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<function model="xlsx.template" name="load_xlsx_template">
|
||||
<value eval="[ref('sale_order_xlsx_template')]"/>
|
||||
<value eval="[ref('sale_order_xlsx_template')]" />
|
||||
</function>
|
||||
|
||||
</odoo>
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2019 Ecosoft Co., Ltd.
|
||||
License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).-->
|
||||
<odoo>
|
||||
|
||||
<record id="action_import_sale_order" model="ir.actions.act_window">
|
||||
<field name="name">Sample Import Sale Order</field>
|
||||
<field name="res_model">import.xlsx.wizard</field>
|
||||
|
@ -16,10 +15,10 @@
|
|||
('gname', '=', False)], }
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_import_sale_order"
|
||||
<menuitem
|
||||
id="menu_import_sale_order"
|
||||
parent="excel_import_export.menu_excel_import_export"
|
||||
action="action_import_sale_order"
|
||||
sequence="30"/>
|
||||
|
||||
sequence="30"
|
||||
/>
|
||||
</odoo>
|
||||
|
|
|
@ -1,15 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2019 Ecosoft Co., Ltd.
|
||||
License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).-->
|
||||
<odoo>
|
||||
|
||||
<record id="import_sale_order_xlsx_template" model="xlsx.template">
|
||||
<field name="res_model">sale.order</field>
|
||||
<field name="fname">import_sale_order.xlsx</field>
|
||||
<field name="name">Import Sale Order Template</field>
|
||||
<field name="description">Sample Import Sales Order Tempalte for testing</field>
|
||||
<field name="redirect_action" ref="sale.action_orders"/>
|
||||
<field name="redirect_action" ref="sale.action_orders" />
|
||||
<field name="input_instruction">
|
||||
{
|
||||
'__IMPORT__': {
|
||||
|
@ -30,9 +29,7 @@
|
|||
}
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<function model="xlsx.template" name="load_xlsx_template">
|
||||
<value eval="[ref('import_sale_order_xlsx_template')]"/>
|
||||
<value eval="[ref('import_sale_order_xlsx_template')]" />
|
||||
</function>
|
||||
|
||||
</odoo>
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<odoo>
|
||||
<report id='action_report_partner_excel'
|
||||
string='Partner List (.xlsx)'
|
||||
model='report.partner.list'
|
||||
name='partner_list.xlsx'
|
||||
file='partner_list'
|
||||
report_type='excel'
|
||||
<report
|
||||
id='action_report_partner_excel'
|
||||
string='Partner List (.xlsx)'
|
||||
model='report.partner.list'
|
||||
name='partner_list.xlsx'
|
||||
file='partner_list'
|
||||
report_type='excel'
|
||||
/>
|
||||
</odoo>
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<odoo>
|
||||
|
||||
<record id="partner_list_wizard" model="ir.ui.view">
|
||||
<field name="name">partner.list.wizard</field>
|
||||
<field name="model">report.partner.list</field>
|
||||
|
@ -8,24 +7,25 @@
|
|||
<form>
|
||||
<group>
|
||||
<group>
|
||||
<field name="partner_ids" widget="many2many_tags"/>
|
||||
<field name="partner_ids" widget="many2many_tags" />
|
||||
</group>
|
||||
<group>
|
||||
<field name="customer"/>
|
||||
<field name="supplier"/>
|
||||
<field name="customer" />
|
||||
<field name="supplier" />
|
||||
</group>
|
||||
</group>
|
||||
<footer>
|
||||
<button name='%(excel_import_export_demo.action_report_partner_excel)d'
|
||||
type='action' string='Execute'
|
||||
class='oe_highlight'/>
|
||||
<button special='cancel'
|
||||
string='Cancel'/>
|
||||
<button
|
||||
name='%(excel_import_export_demo.action_report_partner_excel)d'
|
||||
type='action'
|
||||
string='Execute'
|
||||
class='oe_highlight'
|
||||
/>
|
||||
<button special='cancel' string='Cancel' />
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id='action_report_partner_list' model='ir.actions.act_window'>
|
||||
<field name='name'>Partner List Report</field>
|
||||
<field name='res_model'>report.partner.list</field>
|
||||
|
@ -33,11 +33,10 @@
|
|||
<field name='view_mode'>form</field>
|
||||
<field name='target'>new</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_report_partner_list"
|
||||
<menuitem
|
||||
id="menu_report_partner_list"
|
||||
parent="sale.menu_sale_report"
|
||||
action="action_report_partner_list"
|
||||
name="Partner List Report"
|
||||
/>
|
||||
|
||||
</odoo>
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo>
|
||||
|
||||
<record id="partner_list_xlsx_template" model="xlsx.template">
|
||||
<field name="res_model">report.partner.list</field>
|
||||
<field name="fname">partner_list.xlsx</field>
|
||||
<field name="name">Partner List Report Template</field>
|
||||
<field name="description">Sample Partner List Report Template for testing</field>
|
||||
<field
|
||||
name="description"
|
||||
>Sample Partner List Report Template for testing</field>
|
||||
<field name="input_instruction">
|
||||
{
|
||||
'__EXPORT__': {
|
||||
|
@ -21,9 +22,7 @@
|
|||
}
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<function model="xlsx.template" name="load_xlsx_template">
|
||||
<value eval="[ref('partner_list_xlsx_template')]"/>
|
||||
<value eval="[ref('partner_list_xlsx_template')]" />
|
||||
</function>
|
||||
|
||||
</odoo>
|
||||
|
|
|
@ -1,13 +1,12 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<odoo>
|
||||
|
||||
<report id='action_report_saleorder_excel'
|
||||
string='Quotation / Order (.xlsx)'
|
||||
model='sale.order'
|
||||
name='sale_order_form.xlsx'
|
||||
file='sale_order'
|
||||
print_report_name="(object.state in ('draft', 'sent') and 'Quotation - %s' % (object.name)) or 'Order - %s' % (object.name)"
|
||||
report_type='excel'
|
||||
<report
|
||||
id='action_report_saleorder_excel'
|
||||
string='Quotation / Order (.xlsx)'
|
||||
model='sale.order'
|
||||
name='sale_order_form.xlsx'
|
||||
file='sale_order'
|
||||
print_report_name="(object.state in ('draft', 'sent') and 'Quotation - %s' % (object.name)) or 'Order - %s' % (object.name)"
|
||||
report_type='excel'
|
||||
/>
|
||||
|
||||
</odoo>
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo>
|
||||
|
||||
<record id="sale_order_excel_template" model="xlsx.template">
|
||||
<field name="res_model">sale.order</field>
|
||||
<field name="fname">sale_order_form.xlsx</field>
|
||||
|
@ -28,9 +27,7 @@
|
|||
}
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<function model="xlsx.template" name="load_xlsx_template">
|
||||
<value eval="[ref('sale_order_excel_template')]"/>
|
||||
<value eval="[ref('sale_order_excel_template')]" />
|
||||
</function>
|
||||
|
||||
</odoo>
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -1,25 +1,23 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2019 Ecosoft Co., Ltd.
|
||||
License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).-->
|
||||
<odoo>
|
||||
|
||||
<record id="report_sale_order" model="ir.ui.view">
|
||||
<field name="name">report.sale.order</field>
|
||||
<field name="model">report.sale.order</field>
|
||||
<field name="inherit_id" ref="excel_import_export.xlsx_report_view"/>
|
||||
<field name="inherit_id" ref="excel_import_export.xlsx_report_view" />
|
||||
<field name="mode">primary</field>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//group[@name='criteria']" position="inside">
|
||||
<group>
|
||||
<field name="partner_id"/>
|
||||
<field name="partner_id" />
|
||||
</group>
|
||||
<group>
|
||||
</group>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_report_sale_order" model="ir.actions.act_window">
|
||||
<field name="name">Sample Sales Report</field>
|
||||
<field name="res_model">report.sale.order</field>
|
||||
|
@ -32,10 +30,10 @@
|
|||
('gname', '=', False)]}
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_report_sale_order"
|
||||
<menuitem
|
||||
id="menu_report_sale_order"
|
||||
parent="excel_import_export.menu_excel_import_export"
|
||||
action="action_report_sale_order"
|
||||
sequence="20"/>
|
||||
|
||||
sequence="20"
|
||||
/>
|
||||
</odoo>
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2019 Ecosoft Co., Ltd.
|
||||
License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).-->
|
||||
<odoo>
|
||||
|
||||
<record id="report_sale_order_template" model="xlsx.template">
|
||||
<field name="res_model">report.sale.order</field>
|
||||
<field name="fname">report_sale_order.xlsx</field>
|
||||
|
@ -28,9 +27,7 @@
|
|||
}
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<function model="xlsx.template" name="load_xlsx_template">
|
||||
<value eval="[ref('report_sale_order_template')]"/>
|
||||
<value eval="[ref('report_sale_order_template')]" />
|
||||
</function>
|
||||
|
||||
</odoo>
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
)
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue