GoodERP
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.

208 lines
11KB

  1. # Copyright 2016 上海开阖软件有限公司 (http://www.osbzr.com)
  2. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
  3. from odoo.tests.common import TransactionCase
  4. from odoo.exceptions import UserError
  5. class TestReconcileOrder(TransactionCase):
  6. def setUp(self):
  7. super(TestReconcileOrder, self).setUp()
  8. # 给core.comm收一笔款
  9. self.money_get_40000 = self.env.ref(
  10. 'money.get_40000').money_order_done()
  11. self.get_invoice = self.env['money.invoice'].create({'partner_id': self.env.ref('core.jd').id,
  12. 'name': 'invoice/201600661', 'date': "2016-02-20",
  13. 'category_id': self.env.ref('money.core_category_sale').id,
  14. 'amount': 300.0,
  15. 'reconciled': 0,
  16. 'to_reconcile': 300.0})
  17. self.pay_invoice = self.env['money.invoice'].create({'name': 'pay_invoice', 'date': "2016-02-20",
  18. 'partner_id': self.env.ref('core.lenovo').id,
  19. 'category_id': self.env.ref('money.core_category_purchase').id,
  20. 'amount': 600.0,
  21. 'reconciled': 0,
  22. 'to_reconcile': 600.0})
  23. def test_money_invoice_done(self):
  24. # money.invoice 没有设置科目 银行账户没设置科目
  25. self.get_invoice.partner_id.receivable = 0
  26. c_category_id = self.get_invoice.partner_id.c_category_id.id
  27. self.get_invoice.partner_id.s_category_id = self.env.ref('core.supplier_category_1').id
  28. self.get_invoice.category_id.account_id = False
  29. self.get_invoice.partner_id.c_category_id = c_category_id
  30. with self.assertRaises(UserError):
  31. # 结算单类别找不到科目
  32. self.get_invoice.money_invoice_done()
  33. def test_adv_pay_to_get(self):
  34. '''测试核销单: 预收冲应收'''
  35. reconcile = self.env.ref('money.reconcile_adv_pay_to_get')
  36. reconcile.partner_id = self.env.ref('core.jd').id
  37. reconcile.onchange_partner_id()
  38. reconcile.advance_payment_ids.this_reconcile = 300.0
  39. reconcile.receivable_source_ids[0].this_reconcile = 300.0
  40. reconcile.reconcile_order_done()
  41. def test_adv_get_to_pay(self):
  42. '''测试核销单: 预付冲应付'''
  43. self.env.ref('money.pay_2000').money_order_done()
  44. reconcile = self.env.ref('money.reconcile_adv_get_to_pay')
  45. reconcile.partner_id = self.env.ref('core.lenovo').id
  46. reconcile.onchange_partner_id()
  47. reconcile.advance_payment_ids.this_reconcile = 600.0
  48. reconcile.payable_source_ids[0].this_reconcile = 700.0
  49. # 核销金额不能大于未核销金额。\n核销金额:700 未核销金额:600
  50. with self.assertRaises(UserError):
  51. reconcile.reconcile_order_done()
  52. reconcile.payable_source_ids[0].this_reconcile = 600.0
  53. reconcile.reconcile_order_done()
  54. def test_get_to_pay(self):
  55. '''测试核销单: 应收冲应付'''
  56. self.env.ref('money.pay_2000').money_order_done()
  57. self.get_invoice.partner_id = self.env.ref('core.lenovo').id
  58. reconcile = self.env.ref('money.reconcile_get_to_pay')
  59. reconcile.partner_id = self.env.ref('core.lenovo').id
  60. reconcile.onchange_partner_id()
  61. reconcile.payable_source_ids[0].this_reconcile = 300.0
  62. reconcile.reconcile_order_done()
  63. def test_get_to_get(self):
  64. '''测试核销单: 应收转应收'''
  65. reconcile = self.env.ref('money.reconcile_get_to_get')
  66. reconcile.partner_id = self.env.ref('core.jd').id
  67. reconcile.onchange_partner_id()
  68. reconcile.receivable_source_ids.this_reconcile = 300.0
  69. reconcile.reconcile_order_done()
  70. def test_pay_to_pay(self):
  71. '''测试核销单: 应付转应付'''
  72. self.get_invoice.partner_id = self.env.ref('core.lenovo').id
  73. reconcile = self.env.ref('money.reconcile_pay_to_pay')
  74. reconcile.partner_id = self.env.ref('core.lenovo').id
  75. reconcile.onchange_partner_id()
  76. reconcile.payable_source_ids[0].this_reconcile = 600.0
  77. reconcile.reconcile_order_done()
  78. def test_reconcile_order(self):
  79. '''核销单审核reconcile_order_done()'''
  80. reconcile = self.env.ref('money.reconcile_adv_pay_to_get')
  81. reconcile.partner_id = self.env.ref('core.jd').id
  82. reconcile.onchange_partner_id()
  83. # 核销金额不能大于未核销金额
  84. reconcile.advance_payment_ids.to_reconcile = 200.0
  85. with self.assertRaises(UserError):
  86. reconcile.reconcile_order_done()
  87. reconcile.receivable_source_ids.to_reconcile = 200.0
  88. with self.assertRaises(UserError):
  89. reconcile.reconcile_order_done()
  90. reconcile.advance_payment_ids.to_reconcile = 300.0
  91. reconcile.receivable_source_ids.to_reconcile = 300.0
  92. reconcile.advance_payment_ids.this_reconcile = 300.0
  93. reconcile.receivable_source_ids.this_reconcile = 300.0
  94. reconcile.reconcile_order_done()
  95. # 确认核销单为已审核状态
  96. self.assertEqual(reconcile.state, 'done')
  97. # 已审核的核销单应该不可删除
  98. with self.assertRaises(UserError):
  99. reconcile.unlink()
  100. # 未审核的核销单可删除
  101. self.env.ref('money.pay_2000').money_order_done()
  102. reconcile = self.env.ref('money.reconcile_get_to_pay')
  103. reconcile.partner_id = self.env.ref('core.lenovo').id
  104. reconcile.unlink()
  105. # 核销金额必须相同
  106. reconcile_adv_get_to_pay = self.env.ref(
  107. 'money.reconcile_adv_get_to_pay')
  108. reconcile_adv_get_to_pay.partner_id = self.env.ref('core.lenovo').id
  109. reconcile_adv_get_to_pay.onchange_partner_id()
  110. with self.assertRaises(UserError):
  111. reconcile_adv_get_to_pay.reconcile_order_done()
  112. # 预收预付时,本次核销金额不能大于未核销金额
  113. reconcile_adv_get_to_pay.advance_payment_ids.this_reconcile = 900.0
  114. with self.assertRaises(UserError):
  115. reconcile_adv_get_to_pay.reconcile_order_done()
  116. # 状态为‘done’,再次执行reconcile_order_done(),执行continue
  117. reconcile_pay_to_pay_done = self.env['reconcile.order'].create({'partner_id': self.env.ref('core.lenovo').id, 'date': "2016-02-20",
  118. 'to_partner_id': self.env.ref('core.yixun').id,
  119. 'business_type': 'pay_to_pay',
  120. 'name': 'TO20160010',
  121. 'state': 'done'})
  122. with self.assertRaises(UserError):
  123. reconcile_pay_to_pay_done.reconcile_order_done()
  124. def test_reconcile_order_draft_adv_pay_to_get(self):
  125. ''' Test: reconcile_order_draft: adv_pay_to_get '''
  126. # 预收冲应收
  127. reconcile = self.env.ref('money.reconcile_adv_pay_to_get')
  128. reconcile.partner_id = self.env.ref('core.jd').id
  129. reconcile.onchange_partner_id()
  130. reconcile.advance_payment_ids.to_reconcile = 300.0
  131. reconcile.advance_payment_ids.this_reconcile = 300.0
  132. reconcile.reconcile_order_done()
  133. reconcile.reconcile_order_draft()
  134. # 核销单已撤销,不能再次撤销 报错
  135. with self.assertRaises(UserError):
  136. reconcile.reconcile_order_draft()
  137. def test_reconcile_order_draft_adv_get_to_pay(self):
  138. ''' Test: reconcile_order_draft: adv_get_to_pay '''
  139. self.env.ref('money.pay_2000').money_order_done()
  140. # 预付冲应付
  141. reconcile = self.env.ref('money.reconcile_adv_get_to_pay')
  142. reconcile.partner_id = self.env.ref('core.lenovo').id
  143. reconcile.onchange_partner_id()
  144. reconcile.advance_payment_ids.to_reconcile = 600.0
  145. reconcile.advance_payment_ids.this_reconcile = 600.0
  146. reconcile.reconcile_order_done()
  147. reconcile.reconcile_order_draft()
  148. # 反核销时,金额不相同 报错
  149. reconcile.reconcile_order_done()
  150. with self.assertRaises(UserError):
  151. reconcile.payable_source_ids.this_reconcile = 666.0
  152. reconcile.reconcile_order_draft()
  153. def test_reconcile_order_draft_pay_to_pay(self):
  154. ''' Test: reconcile_order_draft: pay_to_pay '''
  155. # 应收转应收
  156. reconcile = self.env.ref('money.reconcile_pay_to_pay')
  157. reconcile.partner_id = self.env.ref('core.lenovo').id
  158. reconcile.onchange_partner_id()
  159. reconcile.payable_source_ids.to_reconcile = 300.0
  160. reconcile.payable_source_ids.this_reconcile = 300.0
  161. reconcile.reconcile_order_done()
  162. reconcile.reconcile_order_draft()
  163. # 业务伙伴和转入往来单位不能相同 报错
  164. reconcile.reconcile_order_done()
  165. with self.assertRaises(UserError):
  166. reconcile.to_partner_id = self.env.ref('core.lenovo').id
  167. reconcile.onchange_partner_id()
  168. reconcile.reconcile_order_draft()
  169. def test_onchange_partner_id(self):
  170. '''核销单onchange_partner_id()'''
  171. # onchange_partner_id改变partner_id
  172. self.partner_id = self.env.ref('core.jd').id
  173. self.env['reconcile.order'].onchange_partner_id()
  174. self.assertEqual(self.partner_id, self.env.ref('core.jd').id)
  175. # onchange_partner_id改变为空
  176. self.partner_id = False
  177. self.env['reconcile.order'].onchange_partner_id()
  178. self.assertEqual(self.partner_id, False)
  179. # 转入转出客户相同,执行if
  180. reconcile_pay_to_pay_partner_same = self.env['reconcile.order'].create({'partner_id': self.env.ref('core.lenovo').id,
  181. 'to_partner_id': self.env.ref('core.lenovo').id,
  182. 'business_type': 'pay_to_pay',
  183. 'name': 'TO20160009', 'date': "2016-02-20",
  184. 'note': 'ywp pay to pay'})
  185. with self.assertRaises(UserError):
  186. reconcile_pay_to_pay_partner_same.reconcile_order_done()
  187. self.env.ref('money.reconcile_get_to_get').reconcile_order_done()
上海开阖软件有限公司 沪ICP备12045867号-1