136 lines
5.0 KiB
Python
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,
|
|
}
|
|
)
|