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