server-tools/excel_import_export_demo/tests/test_common.py

136 lines
5.0 KiB
Python

# 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 Template 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
cls.account_income_product = cls.env["account.account"].create(
{
"code": "PROD111",
"name": "Income - Test Account",
"account_type": "expense_direct_cost",
}
)
# 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,
}
)