|  | # Copyright 2016 上海开阖软件有限公司 (http://www.osbzr.com)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo.tests.common import TransactionCase
from odoo.exceptions import UserError
class TestSupplierStatements(TransactionCase):
    '''测试供应商对账单'''
    def setUp(self):
        '''供应商对账单向导及数据'''
        super(TestSupplierStatements, self).setUp()
        # 业务伙伴对账单向导: else self._context.get('default_supplier')
        objStatements = self.env['partner.statements.report.wizard']
        self.statement = objStatements.create({
            'partner_id': self.env.ref('core.lenovo').id,
            'from_date': '2016-01-01',
            'to_date': '2016-11-01'}).with_context({'default_supplier': True})
        # 供应商期初余额,查看原始单据应报错
        self.env.ref('core.lenovo').payable_init = 1000
        partner = self.env['partner'].search(
            [('id', '=', self.env.ref('core.lenovo').id)])
        # 创建付款记录
        money_get = self.env.ref('money.get_40000')
        money_get.money_order_done()
        money_order = self.env.ref('money.pay_2000')
        money_order.money_order_done()
        # 给buy_order_1中的商品“键盘”的分类设置科目
        self.env.ref('core.goods_category_1').account_id = self.env.ref(
            'finance.account_goods').id
        # 创建采购入库单记录
        buy_order = self.env.ref('buy.buy_order_1')
        buy_order.bank_account_id = False
        buy_order.buy_order_done()
        objReceipt = self.env['buy.receipt']
        receipt = objReceipt.search([('order_id', '=', buy_order.id)])
        receipt.buy_receipt_done()
        # 创建采购退货单记录
        buy_return = self.env.ref('buy.buy_return_order_1')
        buy_return.bank_account_id = False
        buy_return.buy_order_done()
        receipt_return = objReceipt.search([('order_id', '=', buy_return.id)])
        receipt_return.buy_receipt_done()
    def test_supplier_statements_wizard(self):
        '''供应商对账单向导'''
        # 测试'结束日期不能小于开始日期!'
        self.statement.from_date = '2016-11-03'
        with self.assertRaises(UserError):
            self.statement.partner_statements_without_goods()
        with self.assertRaises(UserError):
            self.statement.partner_statements_with_goods()
        # 测试from_date的默认值是否是公司启用日期
        objStatements = self.env['partner.statements.report.wizard']
        statement_date = objStatements.create({
            'partner_id': self.env.ref('core.lenovo').id,
            'to_date': '2016-11-03'}).with_context({'default_supplier': True})
        self.assertEqual(
            statement_date.from_date,
            self.env.user.company_id.start_date
        )
    def test_supplier_statements_find_source(self):
        '''查看供应商对账单明细'''
        # 查看不带商品明细源单
        self.statement.partner_statements_without_goods()
        supplier_statement = self.env['supplier.statements.report'].search([])
        supplier_statement_init = self.env['supplier.statements.report'].search([('move_id', '=', False),
                                                                                 ('amount', '!=', 0)])
        # 如果对账单中是期初余额行,点击查看按钮应报错
        with self.assertRaises(UserError):
            supplier_statement_init.find_source_order()
        for report in list(set(supplier_statement) - set(supplier_statement_init)):
            report.find_source_order()
        # 查看带商品明细源单
        self.statement.partner_statements_with_goods()
        objGoods = self.env['supplier.statements.report.with.goods']
        supplier_statement_goods = objGoods.search([('name', '!=', False)])
        supplier_statement_goods_init = objGoods.search([('move_id', '=', False),
                                                         ('amount', '!=', 0)])
        if supplier_statement_goods_init:
            # 如果对账单中是期初余额行,点击查看按钮应报错
            with self.assertRaises(UserError):
                supplier_statement_goods_init.find_source_order()
        for report in list(set(supplier_statement_goods) - set(supplier_statement_goods_init)):
            self.assertNotEqual(str(report.balance_amount), 'kaihe11')
            report.find_source_order()
class TestPartner(TransactionCase):
    def test_action_view_buy_history(self):
        """ 测试 供应商采购记录(最近一年)"""
        supplier_lenovo = self.env.ref('core.lenovo')
        supplier_lenovo.action_view_buy_history()
        # 测试 时间间隔大于1年的 if
        self.env.user.company_id.start_date = '2016-01-01'
        supplier_lenovo.action_view_buy_history()
 |