You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

130 lines
4.9 KiB

# 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,
})