|
- # 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 TestReconcileOrder(TransactionCase):
-
- def setUp(self):
- super(TestReconcileOrder, self).setUp()
- # 给core.comm收一笔款
- self.money_get_40000 = self.env.ref(
- 'money.get_40000').money_order_done()
- self.get_invoice = self.env['money.invoice'].create({'partner_id': self.env.ref('core.jd').id,
- 'name': 'invoice/201600661', 'date': "2016-02-20",
- 'category_id': self.env.ref('money.core_category_sale').id,
- 'amount': 300.0,
- 'reconciled': 0,
- 'to_reconcile': 300.0})
- self.pay_invoice = self.env['money.invoice'].create({'name': 'pay_invoice', 'date': "2016-02-20",
- 'partner_id': self.env.ref('core.lenovo').id,
- 'category_id': self.env.ref('money.core_category_purchase').id,
- 'amount': 600.0,
- 'reconciled': 0,
- 'to_reconcile': 600.0})
-
- def test_money_invoice_done(self):
- # money.invoice 没有设置科目 银行账户没设置科目
- self.get_invoice.partner_id.receivable = 0
- c_category_id = self.get_invoice.partner_id.c_category_id.id
- self.get_invoice.partner_id.s_category_id = self.env.ref('core.supplier_category_1').id
- self.get_invoice.category_id.account_id = False
- self.get_invoice.partner_id.c_category_id = c_category_id
- with self.assertRaises(UserError):
- # 结算单类别找不到科目
- self.get_invoice.money_invoice_done()
-
- def test_adv_pay_to_get(self):
- '''测试核销单: 预收冲应收'''
- reconcile = self.env.ref('money.reconcile_adv_pay_to_get')
- reconcile.partner_id = self.env.ref('core.jd').id
- reconcile.onchange_partner_id()
- reconcile.advance_payment_ids.this_reconcile = 300.0
- reconcile.receivable_source_ids[0].this_reconcile = 300.0
- reconcile.reconcile_order_done()
-
- def test_adv_get_to_pay(self):
- '''测试核销单: 预付冲应付'''
- self.env.ref('money.pay_2000').money_order_done()
- reconcile = self.env.ref('money.reconcile_adv_get_to_pay')
- reconcile.partner_id = self.env.ref('core.lenovo').id
- reconcile.onchange_partner_id()
- reconcile.advance_payment_ids.this_reconcile = 600.0
- reconcile.payable_source_ids[0].this_reconcile = 700.0
- # 核销金额不能大于未核销金额。\n核销金额:700 未核销金额:600
- with self.assertRaises(UserError):
- reconcile.reconcile_order_done()
-
- reconcile.payable_source_ids[0].this_reconcile = 600.0
- reconcile.reconcile_order_done()
-
- def test_get_to_pay(self):
- '''测试核销单: 应收冲应付'''
- self.env.ref('money.pay_2000').money_order_done()
- self.get_invoice.partner_id = self.env.ref('core.lenovo').id
- reconcile = self.env.ref('money.reconcile_get_to_pay')
- reconcile.partner_id = self.env.ref('core.lenovo').id
- reconcile.onchange_partner_id()
- reconcile.payable_source_ids[0].this_reconcile = 300.0
- reconcile.reconcile_order_done()
-
- def test_get_to_get(self):
- '''测试核销单: 应收转应收'''
- reconcile = self.env.ref('money.reconcile_get_to_get')
- reconcile.partner_id = self.env.ref('core.jd').id
- reconcile.onchange_partner_id()
- reconcile.receivable_source_ids.this_reconcile = 300.0
- reconcile.reconcile_order_done()
-
- def test_pay_to_pay(self):
- '''测试核销单: 应付转应付'''
- self.get_invoice.partner_id = self.env.ref('core.lenovo').id
- reconcile = self.env.ref('money.reconcile_pay_to_pay')
- reconcile.partner_id = self.env.ref('core.lenovo').id
- reconcile.onchange_partner_id()
- reconcile.payable_source_ids[0].this_reconcile = 600.0
- reconcile.reconcile_order_done()
-
- def test_reconcile_order(self):
- '''核销单审核reconcile_order_done()'''
- reconcile = self.env.ref('money.reconcile_adv_pay_to_get')
- reconcile.partner_id = self.env.ref('core.jd').id
- reconcile.onchange_partner_id()
- # 核销金额不能大于未核销金额
- reconcile.advance_payment_ids.to_reconcile = 200.0
- with self.assertRaises(UserError):
- reconcile.reconcile_order_done()
- reconcile.receivable_source_ids.to_reconcile = 200.0
- with self.assertRaises(UserError):
- reconcile.reconcile_order_done()
- reconcile.advance_payment_ids.to_reconcile = 300.0
- reconcile.receivable_source_ids.to_reconcile = 300.0
- reconcile.advance_payment_ids.this_reconcile = 300.0
- reconcile.receivable_source_ids.this_reconcile = 300.0
- reconcile.reconcile_order_done()
- # 确认核销单为已审核状态
- self.assertEqual(reconcile.state, 'done')
- # 已审核的核销单应该不可删除
- with self.assertRaises(UserError):
- reconcile.unlink()
- # 未审核的核销单可删除
- self.env.ref('money.pay_2000').money_order_done()
- reconcile = self.env.ref('money.reconcile_get_to_pay')
- reconcile.partner_id = self.env.ref('core.lenovo').id
- reconcile.unlink()
- # 核销金额必须相同
- reconcile_adv_get_to_pay = self.env.ref(
- 'money.reconcile_adv_get_to_pay')
- reconcile_adv_get_to_pay.partner_id = self.env.ref('core.lenovo').id
- reconcile_adv_get_to_pay.onchange_partner_id()
- with self.assertRaises(UserError):
- reconcile_adv_get_to_pay.reconcile_order_done()
- # 预收预付时,本次核销金额不能大于未核销金额
- reconcile_adv_get_to_pay.advance_payment_ids.this_reconcile = 900.0
- with self.assertRaises(UserError):
- reconcile_adv_get_to_pay.reconcile_order_done()
- # 状态为‘done’,再次执行reconcile_order_done(),执行continue
- reconcile_pay_to_pay_done = self.env['reconcile.order'].create({'partner_id': self.env.ref('core.lenovo').id, 'date': "2016-02-20",
- 'to_partner_id': self.env.ref('core.yixun').id,
- 'business_type': 'pay_to_pay',
- 'name': 'TO20160010',
- 'state': 'done'})
- with self.assertRaises(UserError):
- reconcile_pay_to_pay_done.reconcile_order_done()
-
- def test_reconcile_order_draft_adv_pay_to_get(self):
- ''' Test: reconcile_order_draft: adv_pay_to_get '''
- # 预收冲应收
- reconcile = self.env.ref('money.reconcile_adv_pay_to_get')
- reconcile.partner_id = self.env.ref('core.jd').id
- reconcile.onchange_partner_id()
- reconcile.advance_payment_ids.to_reconcile = 300.0
- reconcile.advance_payment_ids.this_reconcile = 300.0
- reconcile.reconcile_order_done()
- reconcile.reconcile_order_draft()
-
- # 核销单已撤销,不能再次撤销 报错
- with self.assertRaises(UserError):
- reconcile.reconcile_order_draft()
-
- def test_reconcile_order_draft_adv_get_to_pay(self):
- ''' Test: reconcile_order_draft: adv_get_to_pay '''
- self.env.ref('money.pay_2000').money_order_done()
- # 预付冲应付
- reconcile = self.env.ref('money.reconcile_adv_get_to_pay')
- reconcile.partner_id = self.env.ref('core.lenovo').id
- reconcile.onchange_partner_id()
- reconcile.advance_payment_ids.to_reconcile = 600.0
- reconcile.advance_payment_ids.this_reconcile = 600.0
- reconcile.reconcile_order_done()
- reconcile.reconcile_order_draft()
-
- # 反核销时,金额不相同 报错
- reconcile.reconcile_order_done()
- with self.assertRaises(UserError):
- reconcile.payable_source_ids.this_reconcile = 666.0
- reconcile.reconcile_order_draft()
-
- def test_reconcile_order_draft_pay_to_pay(self):
- ''' Test: reconcile_order_draft: pay_to_pay '''
- # 应收转应收
- reconcile = self.env.ref('money.reconcile_pay_to_pay')
- reconcile.partner_id = self.env.ref('core.lenovo').id
- reconcile.onchange_partner_id()
- reconcile.payable_source_ids.to_reconcile = 300.0
- reconcile.payable_source_ids.this_reconcile = 300.0
- reconcile.reconcile_order_done()
- reconcile.reconcile_order_draft()
-
- # 业务伙伴和转入往来单位不能相同 报错
- reconcile.reconcile_order_done()
- with self.assertRaises(UserError):
- reconcile.to_partner_id = self.env.ref('core.lenovo').id
- reconcile.onchange_partner_id()
- reconcile.reconcile_order_draft()
-
- def test_onchange_partner_id(self):
- '''核销单onchange_partner_id()'''
- # onchange_partner_id改变partner_id
- self.partner_id = self.env.ref('core.jd').id
- self.env['reconcile.order'].onchange_partner_id()
- self.assertEqual(self.partner_id, self.env.ref('core.jd').id)
- # onchange_partner_id改变为空
- self.partner_id = False
- self.env['reconcile.order'].onchange_partner_id()
- self.assertEqual(self.partner_id, False)
- # 转入转出客户相同,执行if
- reconcile_pay_to_pay_partner_same = self.env['reconcile.order'].create({'partner_id': self.env.ref('core.lenovo').id,
- 'to_partner_id': self.env.ref('core.lenovo').id,
- 'business_type': 'pay_to_pay',
- 'name': 'TO20160009', 'date': "2016-02-20",
- 'note': 'ywp pay to pay'})
- with self.assertRaises(UserError):
- reconcile_pay_to_pay_partner_same.reconcile_order_done()
-
- self.env.ref('money.reconcile_get_to_get').reconcile_order_done()
|