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.

786 lines
36KB

  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, ValidationError
  5. class TestMoneyOrder(TransactionCase):
  6. '''测试收付款'''
  7. def test_money_order_unlink(self):
  8. '''测试收付款单删除'''
  9. self.env.ref('money.get_40000').money_order_done()
  10. # 审核后不能删除
  11. with self.assertRaises(UserError):
  12. self.env.ref('money.get_40000').unlink()
  13. # 未审核,可以删除
  14. self.env.ref('money.pay_2000').unlink()
  15. def test_money_order_draft(self):
  16. ''' 测试收付款反审核 '''
  17. last_balance = self.env.ref('core.comm').balance
  18. jd_receivable = self.env.ref('core.jd').receivable
  19. lenovo_payable = self.env.ref('core.lenovo').payable
  20. # 先收款后付款。收款账户余额增加,业务伙伴应收款减少;
  21. # 付款账户余额减少,业务伙伴应付款减少
  22. self.env.ref('money.get_40000').money_order_done()
  23. self.assertEqual(
  24. self.env.ref('core.jd').receivable,
  25. jd_receivable - 40000)
  26. self.env.ref('money.pay_2000').money_order_done()
  27. self.assertEqual(
  28. self.env.ref('core.comm').balance,
  29. last_balance + 40000 - 2000)
  30. self.assertEqual(
  31. self.env.ref('core.lenovo').payable,
  32. lenovo_payable - 2000)
  33. # 余额不足不能反审核
  34. with self.assertRaises(UserError):
  35. self.env.ref('money.get_40000').money_order_draft()
  36. # 反审核付款'money.pay_2000',账户余额增加,业务伙伴应付款增加
  37. self.env.ref('money.pay_2000').money_order_draft()
  38. self.assertEqual(
  39. self.env.ref('core.comm').balance,
  40. last_balance + 40000 - 2000 + 2000)
  41. self.assertEqual(
  42. self.env.ref('core.lenovo').payable,
  43. lenovo_payable - 2000 + 2000)
  44. # 不可重复撤销
  45. with self.assertRaises(UserError):
  46. self.env.ref('money.pay_2000').money_order_draft()
  47. def test_money_order_draft_voucher_done(self):
  48. ''' 测试收付款反审核 :审核后的凭证先反审核再删除 '''
  49. self.env.ref('money.get_40000').money_order_done()
  50. self.env.ref('money.get_40000').money_order_draft()
  51. def test_money_order_draft_foreign_currency(self):
  52. ''' 测试收付款反审核时 单据行与当前用户公司的 currency 不一致的情况 '''
  53. # get
  54. self.env.ref('money.get_line_1').currency_id = self.env.ref(
  55. 'base.USD').id
  56. self.env.user.company_id.currency_id = self.env.ref('base.CNY').id
  57. self.env.ref('money.get_40000').money_order_done()
  58. self.env.ref('money.get_40000').money_order_draft()
  59. # pay
  60. self.env.ref('money.pay_line_1').currency_id = self.env.ref(
  61. 'base.USD').id
  62. self.env.ref('money.get_40000').money_order_done() # 先做收款以便付款足够支付
  63. self.env.ref('money.pay_2000').money_order_done()
  64. self.env.ref('money.pay_2000').money_order_draft()
  65. def test_money_order_draft_has_reconcile_order(self):
  66. ''' Test: 反审核时,核销金额不为0,不能反审核 '''
  67. self.env.ref('money.get_40000').money_order_done()
  68. adv_pay_to_get = self.env.ref('money.reconcile_adv_pay_to_get')
  69. adv_pay_to_get.partner_id = self.env.ref('core.jd')
  70. self.env['money.invoice'].create({
  71. 'partner_id': self.env.ref('core.jd').id, 'date': "2016-02-20",
  72. 'name': 'invoice/2016001',
  73. 'category_id': self.env.ref('money.core_category_sale').id,
  74. 'amount': 40000.0,
  75. 'reconciled': 0,
  76. 'to_reconcile': 40000.0,
  77. 'date_due': '2016-09-07'})
  78. adv_pay_to_get.onchange_partner_id()
  79. adv_pay_to_get.reconcile_order_done()
  80. with self.assertRaises(UserError):
  81. self.env.ref('money.get_40000').money_order_draft()
  82. def test_money_order_onchange(self):
  83. '''测试收付款onchange'''
  84. # onchange_date 'get','pay'
  85. self.env.ref('money.get_40000').with_context({'type': 'get'}) \
  86. .onchange_date()
  87. self.env.ref('money.pay_2000').with_context({'type': 'pay'}) \
  88. .onchange_date()
  89. # onchange_partner_id 执行self.env.context.get('type') == 'get'
  90. self.env.ref('money.get_40000').with_context({'type': 'get'}) \
  91. .onchange_partner_id()
  92. # onchange_partner_id 执行self.env.context.get('type') == 'pay'
  93. self.env.ref('money.pay_2000').with_context({'type': 'pay'}) \
  94. .onchange_partner_id()
  95. # onchange_partner_id 执行partner_id为空,return
  96. self.partner_id = False
  97. self.env['money.order'].onchange_partner_id()
  98. # onchange_partner_id 存在 money_invoice 的情况
  99. self.env.ref('money.get_40000').money_order_done()
  100. self.env['money.invoice'].create({
  101. 'partner_id': self.env.ref('core.jd').id, 'date': "2016-02-20",
  102. 'name': 'invoice/2016001',
  103. 'category_id': self.env.ref('money.core_category_sale').id,
  104. 'amount': 200.0,
  105. 'reconciled': 0,
  106. 'to_reconcile': 200.0,
  107. 'date_due': '2016-09-07'})
  108. self.env['money.order'].with_context({'type': 'get'}) \
  109. .create({
  110. 'partner_id': self.env.ref('core.jd').id,
  111. 'name': 'GET/20161017', 'date': "2016-02-20",
  112. 'line_ids': [(0, 0, {
  113. 'bank_id': self.env.ref('core.comm').id,
  114. 'amount': 200.0})]
  115. }).onchange_partner_id()
  116. def test_money_order_done(self):
  117. ''' 测试收付款审核 '''
  118. # 余额不足不能付款
  119. with self.assertRaises(UserError):
  120. self.env.ref('money.pay_2000').money_order_done()
  121. # 收款
  122. self.env.ref('money.get_40000').money_order_done()
  123. # 执行money_order_draft 遍历source_ids的操作
  124. invoice = self.env['money.invoice'].with_context({'type': 'income'}).create({
  125. 'partner_id': self.env.ref('core.jd').id, 'date': "2016-02-20",
  126. 'name': 'invoice/2016001',
  127. 'amount': 200.0,
  128. 'reconciled': 0,
  129. 'to_reconcile': 200.0,
  130. 'date_due': '2016-09-07'})
  131. money = self.env['money.order'].with_context({'type': 'get'}) \
  132. .create({
  133. 'partner_id': self.env.ref('core.jd').id,
  134. 'name': 'GET/2016001', 'date': "2016-02-20",
  135. 'note': 'zxy note',
  136. 'line_ids': [(0, 0, {
  137. 'bank_id': self.env.ref('core.comm').id,
  138. 'amount': 200.0, 'note': 'money note'})],
  139. 'source_ids': [(0, 0, {
  140. 'name': invoice.id,
  141. 'category_id': self.env.ref('money.core_category_sale').id,
  142. 'date': '2016-04-07',
  143. 'amount': 200.0,
  144. 'reconciled': 0,
  145. 'to_reconcile': 200.0,
  146. 'this_reconcile': 200.0,
  147. 'date_due': '2016-09-07'})],
  148. 'type': 'get'})
  149. money.money_order_done()
  150. money.money_order_draft()
  151. # to_reconcile < this_concile, 执行'本次核销金额不能大于未核销金额'
  152. money.source_ids.to_reconcile = 100.0
  153. with self.assertRaises(UserError):
  154. money.money_order_done()
  155. self.partner_id = self.env.ref('core.jd')
  156. # 执行'核销金额不能大于付款金额'
  157. money.line_ids.amount = 10.0
  158. with self.assertRaises(UserError):
  159. money.money_order_done()
  160. # 清空一级客户类别的科目,审核时报错
  161. self.env.ref('core.customer_category_1').account_id = False
  162. with self.assertRaises(UserError):
  163. self.env.ref('money.get_40000').money_order_done()
  164. # 清空本地供应商类别的科目,审核时报错
  165. self.env.ref('core.supplier_category_1').account_id = False
  166. with self.assertRaises(UserError):
  167. self.env.ref('money.pay_2000').money_order_done()
  168. def test_money_order_done_no_partner_account(self):
  169. ''' 测试收款审核选定的客户没有指定科目 '''
  170. # 收款
  171. self.env.ref('core.customer_category_1').account_id = False
  172. with self.assertRaises(UserError):
  173. self.env.ref('money.get_40000').money_order_done()
  174. def test_get_category_id(self):
  175. ''' 测试 _get_category_id 不存在 context.get('type')'''
  176. self.env.user.company_id.draft_invoice = True
  177. invoice = self.env['money.invoice'].create({'date': "2016-02-20",
  178. 'partner_id': self.env.ref('core.jd').id,
  179. 'name': 'invoice/2016001',
  180. 'date_due': '2016-09-07'})
  181. # 测试 invoice name_get has order
  182. invoice.with_context({'order': '20170807'}).name_get()
  183. '''
  184. def test_money_order_create_raise_exists_error(self):
  185. # 同一业务伙伴存在两个未审核的付款单,报错
  186. with self.assertRaises(UserError):
  187. self.env['money.order'].with_context({'type': 'get'}) \
  188. .create({
  189. 'partner_id': self.env.ref('core.jd').id,
  190. 'name': 'GET/201600111',
  191. 'date': "2016-02-20",
  192. 'type': 'get'
  193. })
  194. with self.assertRaises(UserError):
  195. self.env.ref('money.pay_2000').partner_id = self.env.ref(
  196. 'core.jd').id
  197. '''
  198. def test_money_order_done_get_voucher(self):
  199. ''' 测试收付款审核时 单据行与当前用户公司的 currency 不一致的情况 '''
  200. # get
  201. self.env.ref('money.get_line_1').currency_id = self.env.ref(
  202. 'base.USD').id
  203. self.env.user.company_id.currency_id = self.env.ref('base.CNY').id
  204. self.env.ref('money.get_40000').money_order_done()
  205. # pay
  206. self.env.ref('money.pay_line_1').currency_id = self.env.ref(
  207. 'base.USD').id
  208. self.env.ref('money.pay_2000').money_order_done()
  209. def test_money_order_voucher(self):
  210. invoice = self.env['money.invoice'].create({
  211. 'partner_id': self.env.ref('core.jd').id, 'date': "2016-02-20",
  212. 'name': 'invoice/2016001',
  213. 'category_id': self.env.ref('money.core_category_sale').id,
  214. 'amount': 200.0,
  215. 'reconciled': 0,
  216. 'to_reconcile': 200.0,
  217. 'date_due': '2016-09-07'})
  218. # 把业务伙伴未审核的收付款单审核
  219. self.env.ref('money.get_40000').money_order_done()
  220. self.env.ref('money.pay_2000').money_order_done()
  221. # get 存在结算单行
  222. money1 = self.env['money.order'].with_context({'type': 'get'}) \
  223. .create({
  224. 'partner_id': self.env.ref('core.jd').id,
  225. 'name': 'GET/20161017', 'date': "2016-02-20",
  226. 'line_ids': [(0, 0, {
  227. 'bank_id': self.env.ref('core.comm').id,
  228. 'amount': 200.0})],
  229. 'source_ids': [(0, 0, {
  230. 'name': invoice.id,
  231. 'category_id': self.env.ref('money.core_category_sale').id,
  232. 'date': '2016-02-20',
  233. 'amount': 210.0,
  234. 'reconciled': 0,
  235. 'to_reconcile': 210.0,
  236. 'this_reconcile': 210.0,
  237. 'date_due': '2016-09-07'})],
  238. 'type': 'get'})
  239. money1.discount_account_id = self.env.ref(
  240. 'finance.small_business_chart5603001').id
  241. money1.discount_amount = 10
  242. money1.money_order_done()
  243. # pay
  244. invoice.partner_id = self.env.ref('core.lenovo').id
  245. money2 = self.env['money.order'].with_context({'type': 'pay'}) \
  246. .create({
  247. 'partner_id': self.env.ref('core.lenovo').id,
  248. 'name': 'PAY/2016001', 'date': "2016-02-20",
  249. 'note': 'note',
  250. 'line_ids': [(0, 0, {
  251. 'bank_id': self.env.ref('core.comm').id,
  252. 'amount': 220.0, 'note': 'money note'})],
  253. 'source_ids': [(0, 0, {
  254. 'name': invoice.id,
  255. 'category_id': self.env.ref('money.core_category_purchase').id,
  256. 'date': '2016-02-20',
  257. 'amount': 210.0,
  258. 'reconciled': 0,
  259. 'to_reconcile': 210.0,
  260. 'this_reconcile': 210.0,
  261. 'date_due': '2016-09-07'})],
  262. 'type': 'pay'})
  263. money2.discount_account_id = self.env.ref(
  264. 'finance.small_business_chart5603002').id
  265. money2.discount_amount = 10
  266. money2.money_order_done()
  267. # 重置 结算单行 上的本次核销金额:已审核的单据不能执行这个操作
  268. with self.assertRaises(ValueError):
  269. money2.write_off_reset()
  270. # 重置 结算单行 上的本次核销金额
  271. money2.money_order_draft()
  272. money2.write_off_reset()
  273. def test_money_order_without_source_no_bank_account(self):
  274. '''测试 不带结算单明细行的收款单银行账户不存在 account_id 的情况'''
  275. self.env.ref('money.get_line_1').bank_id.account_id = False
  276. with self.assertRaises(UserError):
  277. self.env.ref('money.get_40000').money_order_done()
  278. self.env.ref('money.pay_line_1').bank_id.account_id = False
  279. with self.assertRaises(UserError):
  280. self.env.ref('money.pay_2000').money_order_done()
  281. def test_money_order_withsource_no_bank_account(self):
  282. '''测试 带结算单明细行的收款单银行账户不存在 account_id 的情况'''
  283. self.env.ref('money.get_40000').money_order_done()
  284. temp_bank = self.env['bank.account'].create({'name': 'temporary bank',
  285. 'currency_id': self.env.ref('base.CNY').id,
  286. 'account_id': False})
  287. invoice = self.env['money.invoice'].create({
  288. 'partner_id': self.env.ref('core.jd').id, 'date': "2016-02-20",
  289. 'name': 'invoice/201610171',
  290. 'category_id': self.env.ref('money.core_category_sale').id,
  291. 'amount': 200.0,
  292. 'reconciled': 0,
  293. 'to_reconcile': 200.0,
  294. 'date_due': '2016-09-07'})
  295. get_money = self.env['money.order'].with_context({'type': 'get'}) \
  296. .create({'partner_id': self.env.ref('core.jd').id,
  297. 'name': 'GET/2016001', 'date': "2016-02-20",
  298. 'line_ids': [(0, 0, {
  299. 'bank_id': temp_bank.id,
  300. 'amount': 200.0})],
  301. 'source_ids': [(0, 0, {'name': invoice.id,
  302. 'category_id': self.env.ref('money.core_category_purchase').id,
  303. 'date': '2016-02-20', 'amount': 200.0,
  304. 'reconciled': 0, 'to_reconcile': 200.0,
  305. 'this_reconcile': 200.0, 'date_due': '2016-09-07'})],
  306. 'type': 'get'})
  307. # get 银行账户没设置科目 有结算单行
  308. with self.assertRaises(UserError):
  309. get_money.money_order_done()
  310. self.env.ref('money.pay_2000').money_order_done()
  311. invoice.partner_id = self.env.ref('core.lenovo').id
  312. pay_money = self.env['money.order'].with_context({'type': 'pay'}) \
  313. .create({'partner_id': self.env.ref('core.lenovo').id,
  314. 'name': 'PAY/2016001', 'date': "2016-02-20",
  315. 'line_ids': [(0, 0, {
  316. 'bank_id': temp_bank.id,
  317. 'amount': 200.0, 'note': 'money note'})],
  318. 'source_ids': [(0, 0, {'name': invoice.id,
  319. 'category_id': self.env.ref('money.core_category_purchase').id,
  320. 'date': '2016-02-20', 'amount': 200.0, 'reconciled': 0,
  321. 'to_reconcile': 200.0, 'this_reconcile': 200.0, 'date_due': '2016-09-07'})],
  322. 'type': 'pay'})
  323. # pay 银行账户没设置科目 有结算单行
  324. with self.assertRaises(UserError):
  325. pay_money.money_order_done()
  326. # self.env.ref('money.get_40000').money_order_done()
  327. pay_money.line_ids[0].bank_id = self.env.ref('core.comm').id
  328. pay_money_source = pay_money.source_ids and pay_money.source_ids[0] or False
  329. if pay_money_source:
  330. pay_money_source.this_reconcile = 0
  331. pay_money.money_order_done()
  332. # core action_cancel. money order state done
  333. # with self.assertRaises(UserError):
  334. # pay_money.action_cancel()
  335. # core action_cancel. money order state draft
  336. # pay_money.money_order_draft()
  337. # pay_money.action_cancel()
  338. '''
  339. def test_compute_currency_id(self):
  340. #测试 结算帐户与业务伙伴币别不一致 报错
  341. self.env.ref('money.get_40000').currency_id = self.env.ref(
  342. 'base.USD').id
  343. with self.assertRaises(ValidationError):
  344. self.env.ref('money.get_line_1').bank_id = self.env.ref(
  345. 'core.alipay').id
  346. '''
  347. class TestOtherMoneyOrder(TransactionCase):
  348. '''测试其他收支单'''
  349. def test_other_money_order_unlink(self):
  350. '''测试其他收支单删除'''
  351. self.env.ref('money.other_get_60').other_money_done()
  352. # 审核状态不可删除
  353. with self.assertRaises(UserError):
  354. self.env.ref('money.other_get_60').unlink()
  355. # 未审核可以删除
  356. self.env.ref('money.other_pay_9000').unlink()
  357. def test_other_money_order_draft(self):
  358. ''' 测试其他收入支出反审核'''
  359. self.env.ref('money.get_40000').money_order_done()
  360. self.env.ref('money.other_pay_1000').other_money_done()
  361. self.env.ref('money.other_get_60').other_money_done()
  362. # 反审核
  363. self.env.ref('money.other_pay_1000').other_money_draft()
  364. # 反审核:收款退款余额不足,不能付款
  365. self.env.ref('money.other_get_60').line_ids.amount = 45000
  366. with self.assertRaises(UserError):
  367. self.env.ref('money.other_get_60').other_money_draft()
  368. def test_other_money_order(self):
  369. ''' 测试其他收入支出 '''
  370. self.env.ref('money.other_get_60').other_money_done()
  371. # 审核:余额不足,不能付款
  372. with self.assertRaises(UserError):
  373. self.env.ref('money.other_pay_9000').other_money_done()
  374. # 审核:转出账户收一笔款
  375. self.env.ref('money.get_40000').money_order_done()
  376. self.env.ref('money.other_pay_1000').other_money_done()
  377. # onchange_date 同时执行create时的type=other_get
  378. invoice = self.env['money.invoice'].create({
  379. 'name': 'invoice', 'date': "2016-02-20",
  380. 'partner_id': self.env.ref('core.jd').id,
  381. 'category_id': self.env.ref('money.core_category_sale').id,
  382. 'amount': 10.0,
  383. 'reconciled': 0})
  384. other = self.env['other.money.order'] \
  385. .with_context({'type': 'other_get'}) \
  386. .create({
  387. 'partner_id': self.env.ref('core.jd').id, 'date': "2016-02-20",
  388. 'bank_id': self.env.ref('core.comm').id,
  389. 'line_ids': [(0, 0, {
  390. 'category_id': self.env.ref('money.core_category_sale').id,
  391. 'amount': 10.0})]})
  392. other.onchange_date()
  393. other.other_money_done()
  394. other.other_money_draft()
  395. # onchange_date 执行type=other_pay
  396. invoice.partner_id = self.env.ref('core.lenovo').id,
  397. other = self.env['other.money.order'] \
  398. .with_context({'type': 'other_pay'}) \
  399. .create({
  400. 'partner_id': self.env.ref('core.lenovo').id,
  401. 'bank_id': self.env.ref('core.comm').id})
  402. other.onchange_date()
  403. # 测试其他收支单金额<0,执行if报错
  404. other = self.env['other.money.order'].create({
  405. 'partner_id': self.env.ref('core.jd').id,
  406. 'bank_id': self.env.ref('core.comm').id,
  407. 'type': 'other_get'})
  408. self.env['other.money.order.line'].create({
  409. 'other_money_id': other.id,
  410. 'category_id': self.env.ref('money.core_category_sale').id,
  411. 'amount': -10.0})
  412. with self.assertRaises(UserError):
  413. other.other_money_done()
  414. # other_get 没有设置科目 银行账户没设置科目
  415. other.line_ids[0].amount = 10
  416. other.line_ids[0].category_id.account_id = False
  417. with self.assertRaises(UserError):
  418. other.other_money_done()
  419. # other_pay 没有设置科目 银行账户没设置科目
  420. other = self.env['other.money.order'] \
  421. .with_context({'type': 'other_get'}) \
  422. .create({
  423. 'partner_id': self.env.ref('core.jd').id, 'date': "2016-02-20",
  424. 'bank_id': self.env.ref('core.comm').id,
  425. 'line_ids': [(0, 0, {
  426. 'category_id': self.env.ref('money.core_category_sale').id,
  427. 'amount': 10.0})]})
  428. other.line_ids[0].category_id.account_id = False
  429. with self.assertRaises(UserError):
  430. other.other_money_done()
  431. def test_other_money_order_no_bank_account(self):
  432. ''' 其他收支单审核,bank 的 account 不存在 '''
  433. other_get = self.env.ref('money.other_get_60')
  434. other_get.bank_id.account_id = False
  435. with self.assertRaises(UserError):
  436. other_get.other_money_done()
  437. def test_other_money_order_has_tax(self):
  438. ''' 测试其他收入支出 税存在 生成凭证的情况 '''
  439. self.env.ref('money.other_get_line_1').tax_amount = 10.0
  440. self.env.ref('money.other_get_60').other_money_done()
  441. self.env.ref('money.get_40000').money_order_done()
  442. self.env.ref('money.other_pay_line_2').tax_amount = 10.0
  443. self.env.ref('money.other_pay_1000').other_money_done()
  444. def test_other_money_order_no_company_account(self):
  445. ''' 测试其他收入支出 税存在 公司进项税科目、销项税科目 不存在 生成凭证的情况 '''
  446. self.env.ref('money.other_get_line_1').tax_amount = 10.0
  447. self.env.user.company_id.output_tax_account = False
  448. with self.assertRaises(UserError):
  449. self.env.ref('money.other_get_60').other_money_done()
  450. self.env.ref('money.get_40000').money_order_done()
  451. self.env.ref('money.other_pay_line_2').tax_amount = 10.0
  452. self.env.user.company_id.import_tax_account = False
  453. with self.assertRaises(UserError):
  454. self.env.ref('money.other_pay_1000').other_money_done()
  455. def test_onchange_partner_id(self):
  456. """更改业务伙伴,自动填入收款人、开户行和银行帐号"""
  457. order = self.env.ref('money.other_pay_1000')
  458. partner = self.env.ref('core.lenovo')
  459. partner.bank_name = u'建设银行'
  460. partner.bank_num = u'6000000222222'
  461. # 当选择了供应商联想时
  462. order.partner_id = partner
  463. order.onchange_partner_id()
  464. self.assertEqual(order.receiver, u'联想')
  465. self.assertEqual(order.bank_name, u'建设银行')
  466. self.assertEqual(order.bank_num, u'6000000222222')
  467. class TestOtherMoneyOrderLine(TransactionCase):
  468. ''' 测试其他收支单明细 '''
  469. def setUp(self):
  470. '''准备数据'''
  471. super(TestOtherMoneyOrderLine, self).setUp()
  472. self.get_order = self.env.ref(
  473. 'money.other_get_60').with_context({'type': 'other_get'})
  474. self.pay_order = self.env.ref(
  475. 'money.other_pay_1000').with_context({'type': 'other_pay'})
  476. self.service_1 = self.env.ref('core.service_1')
  477. def test_onchange_service(self):
  478. ''' 测试选择了服务的onchange '''
  479. # 其他收入单
  480. for line in self.get_order.line_ids:
  481. line.service = self.service_1 # 咨询服务
  482. line.with_context({'order_type': 'other_get'}).onchange_service()
  483. self.assertTrue(line.category_id.id ==
  484. self.service_1.get_categ_id.id)
  485. self.assertTrue(line.amount == 500)
  486. # 其他支出单
  487. for line in self.pay_order.line_ids:
  488. line.service = self.service_1 # 咨询服务
  489. line.with_context({'order_type': 'other_pay'}).onchange_service()
  490. self.assertTrue(line.category_id.id ==
  491. self.service_1.pay_categ_id.id)
  492. self.assertTrue(line.amount == 500)
  493. def test_onchange_tax_amount(self):
  494. '''当订单行的金额、税率改变时,改变税额'''
  495. # 其他收入单
  496. for line in self.get_order.line_ids:
  497. line.service = self.service_1 # 咨询服务
  498. line.amount = 1000
  499. line.tax_rate = 17
  500. line.onchange_tax_amount()
  501. self.assertTrue(line.tax_amount == 170)
  502. def test_other_money_line_no_category_account(self):
  503. ''' 其他收支单审核,订单行分类 的 account 不存在 '''
  504. other_pay = self.env['other.money.order'] \
  505. .with_context({'type': 'other_pay'}) \
  506. .create({
  507. 'partner_id': self.env.ref('core.lenovo').id, 'date': "2016-02-20",
  508. 'bank_id': self.env.ref('core.comm').id,
  509. 'line_ids': [(0, 0, {
  510. 'category_id': self.env.ref('core.cat_consult').id,
  511. 'amount': 10.0})]})
  512. self.env.ref('core.comm').account_id = self.env.ref(
  513. 'finance.account_bank').id
  514. other_pay.line_ids[0].category_id.account_id = False
  515. self.env.ref('money.get_40000').money_order_done()
  516. with self.assertRaises(UserError):
  517. other_pay.other_money_done()
  518. # 其他收支单审核,订单的 is_init 为 True
  519. other_pay.line_ids[0].category_id.account_id = self.env.ref(
  520. 'finance.bs_9').id
  521. other_pay.is_init = True
  522. other_pay.other_money_done()
  523. class TestMoneyTransferOrder(TransactionCase):
  524. '''测试其他资金转账单'''
  525. def test_money_transfer_order_unlink(self):
  526. '''测试资金转账单删除'''
  527. self.env.ref('money.get_40000').money_order_done()
  528. self.env.ref('money.transfer_300').money_transfer_done()
  529. # 已审核的转账单不能删除
  530. with self.assertRaises(UserError):
  531. self.env.ref('money.transfer_300').unlink()
  532. # 未审核的转账单可以删除
  533. self.env.ref('money.transfer_400').unlink()
  534. def test_money_transfer_order_draft(self):
  535. '''测试资金转账单反审核'''
  536. self.env.ref('money.get_40000').money_order_done()
  537. self.env.ref('money.transfer_300').money_transfer_done()
  538. # 反审核
  539. self.env.ref('money.transfer_300').money_transfer_draft()
  540. # 转入账户余额不足,不能反审核
  541. self.env.ref('core.alipay').balance = \
  542. self.env.ref('core.alipay').balance - 100
  543. with self.assertRaises(UserError):
  544. self.env.ref('money.transfer_400').money_transfer_draft()
  545. def test_transfer_order_draft_in_bank_currency(self):
  546. '''测试 资金转账单 反审核 转入账户存在 币别'''
  547. self.env.ref('base.USD').active = True
  548. self.env.ref(
  549. 'finance.account_bank').currency_id = self.env.user.company_id.currency_id.id
  550. self.env.ref('finance.account_cash').currency_id = self.env.ref(
  551. 'base.USD').id
  552. self.env.ref('core.alipay').account_id = self.env.ref(
  553. 'finance.account_cash').id
  554. self.env.ref('money.get_40000').money_order_done()
  555. self.env.ref('money.transfer_line_1').currency_amount = 100
  556. self.env.ref('money.transfer_300').money_transfer_done()
  557. # 正常 反审核
  558. self.env.ref('money.transfer_300').money_transfer_draft()
  559. # 转入账户余额不足,不能反审核
  560. self.env.ref('money.transfer_line_2').currency_amount = 200
  561. with self.assertRaises(UserError):
  562. self.env.ref('money.transfer_400').money_transfer_draft()
  563. def test_transfer_order_draft_in_bank_no_currency(self):
  564. '''测试 资金转账单 反审核 转入账户不存在 币别'''
  565. self.env.ref('base.USD').active = True
  566. self.env.ref(
  567. 'finance.account_bank').currency_id = self.env.user.company_id.currency_id.id
  568. self.env.ref('money.get_40000').money_order_done()
  569. self.env.ref('money.transfer_line_1').currency_amount = 100
  570. self.env.ref(
  571. 'finance.account_bank').currency_id = self.env.ref('base.USD').id
  572. self.env.ref('money.transfer_300').money_transfer_done()
  573. # 正常 反审核
  574. self.env.ref('money.transfer_300').money_transfer_draft()
  575. # 转入账户余额不足,不能反审核
  576. self.env.ref('money.transfer_line_2').currency_amount = 200
  577. self.env.ref('money.transfer_400').money_transfer_done()
  578. self.env.ref('finance.account_bank').currency_id = False
  579. self.env.ref('core.alipay').balance = \
  580. self.env.ref('core.alipay').balance - 600
  581. with self.assertRaises(UserError):
  582. self.env.ref('money.transfer_400').money_transfer_draft()
  583. def test_money_transfer_order(self):
  584. ''' 测试转账单审核 '''
  585. comm_balance = self.env.ref('core.comm').balance
  586. money_transfer_300 = self.env.ref('money.transfer_300')
  587. with self.assertRaises(UserError):
  588. # 转出账户余额不足
  589. money_transfer_300.money_transfer_done()
  590. # 转出账户收一笔款
  591. self.env.ref('money.get_40000').money_order_done()
  592. # 审核
  593. money_transfer_300.money_transfer_done()
  594. self.assertEqual(
  595. self.env.ref('core.comm').balance,
  596. comm_balance + 40000 - 300)
  597. self.assertEqual(
  598. self.env.ref('core.alipay').balance,
  599. comm_balance + 300)
  600. # line_ids不存在,则审核报错
  601. transfer_order = self.env['money.transfer.order']
  602. transfer_no_line = transfer_order.create({'note': 'no line'})
  603. with self.assertRaises(UserError):
  604. transfer_no_line.money_transfer_done()
  605. # 转出转入账户相同,则审核报错
  606. money_transfer_300.line_ids.out_bank_id = \
  607. self.env.ref('core.alipay').id
  608. with self.assertRaises(UserError):
  609. money_transfer_300.money_transfer_done()
  610. # 转出金额<0,则审核报错
  611. money_transfer_300.line_ids.out_bank_id = self.env.ref('core.comm').id
  612. money_transfer_300.line_ids.amount = -10.0
  613. with self.assertRaises(UserError):
  614. money_transfer_300.money_transfer_done()
  615. # 转出金额=0,则审核报错
  616. money_transfer_300.line_ids.out_bank_id = self.env.ref('core.comm').id
  617. money_transfer_300.line_ids.amount = 0
  618. with self.assertRaises(UserError):
  619. money_transfer_300.money_transfer_done()
  620. def test_inCurrency_notEqual_company_curreny(self):
  621. '''测试 资金转账单 转入账户与公司币别不一致 '''
  622. self.env.ref('base.USD').active = True
  623. self.env.ref('money.get_40000').money_order_done()
  624. self.env.ref('money.transfer_line_1').out_bank_id.account_id = self.env.ref(
  625. 'finance.account_cash').id
  626. self.env.ref('money.transfer_line_1').in_bank_id.account_id.currency_id = self.env.ref(
  627. 'base.USD').id
  628. self.env.ref('money.transfer_line_1').currency_amount = 233.75
  629. self.env.ref('money.transfer_300').money_transfer_done()
  630. def test_outCurrency_notEqual_company_curreny(self):
  631. '''测试 资金转账单 转出账户与公司币别不一致 '''
  632. self.env.ref('base.USD').active = True
  633. # 转出账户余额不足
  634. self.env.ref('money.transfer_line_1').out_bank_id.account_id.currency_id = self.env.ref(
  635. 'base.USD').id
  636. self.env.ref('money.transfer_line_1').currency_amount = 233.75
  637. with self.assertRaises(UserError):
  638. self.env.ref('money.transfer_300').money_transfer_done()
  639. # 转入账户与公司币别一致 : in_currency_id == company_currency_id
  640. self.env.ref('money.get_40000').partner_id.c_category_id.account_id.currency_id = self.env.ref(
  641. 'base.USD').id
  642. self.env.ref('money.get_40000').money_order_done()
  643. self.env.ref('money.transfer_line_1').in_bank_id.account_id = self.env.ref(
  644. 'finance.account_cash').id
  645. self.env.ref('money.transfer_300').money_transfer_done()
  646. # 系统支持相同外币转外币
  647. self.env.ref('money.transfer_300').money_transfer_draft()
  648. self.env.ref('money.transfer_line_1').out_bank_id.account_id.currency_id = self.env.ref(
  649. 'base.USD').id
  650. self.env.ref('money.transfer_line_1').in_bank_id.account_id.currency_id = self.env.ref(
  651. 'base.USD').id
  652. self.env.ref('money.transfer_300').money_transfer_done()
  653. def test_outCurrency_inCurrency_notEqual_company_curreny(self):
  654. '''测试 资金转账单 转出账户或者转入账户与公司币别不一致并且外币金额为0 报错'''
  655. self.env.ref('base.USD').active = True
  656. self.env.ref('money.transfer_line_1').in_bank_id.account_id = self.env.ref(
  657. 'finance.account_cash').id
  658. self.env.ref('money.transfer_line_1').out_bank_id.account_id.currency_id = self.env.ref(
  659. 'base.USD').id
  660. self.env.ref('money.transfer_line_1').in_bank_id.account_id.currency_id = self.env.ref(
  661. 'base.CNY').id
  662. self.env.user.company_id.currency_id = self.env.ref('base.CNY').id
  663. with self.assertRaises(UserError):
  664. self.env.ref('money.transfer_300').money_transfer_done()
  665. def test_compute_transfer_amount(self):
  666. '''计算转账总金额'''
  667. transfer = self.env.ref('money.transfer_300')
  668. self.assertEqual(transfer.transfer_amount, 300)
  669. class TestPartner(TransactionCase):
  670. def test_partner(self):
  671. ''' 客户、供应商对账单 和 银行帐'''
  672. self.env.ref('core.jd').with_context({'is_customer_view':True}).partner_statements()
  673. self.env.ref('core.lenovo').partner_statements()
  674. self.env.ref('core.comm').bank_statements()
  675. def test_partner_set_init(self):
  676. '''测试客户期初'''
  677. customer = self.env.ref('core.jd')
  678. customer.receivable_init = 1234567
  679. self.assertEqual(customer.receivable, customer.receivable_init)
  680. # 测试 客户 如果有前期初值,删掉已前的单据 的 if 判断
  681. customer._set_receivable_init()
  682. vendor = self.env.ref('core.lenovo')
  683. vendor.payable_init = 23456789
  684. self.assertEqual(vendor.payable, vendor.payable_init)
  685. # 测试 供应商如果有前期初值,删掉已前的单据 的 if 判断
  686. vendor._set_payable_init()
  687. def test_bank_set_init(self):
  688. '''测试资金期初'''
  689. bank = self.env.ref('core.comm')
  690. # 资金没有设置期初,else判断
  691. bank._set_init_balance()
  692. self.assertEqual(bank.balance, 0)
  693. balance = bank.balance
  694. bank.init_balance = 1111
  695. self.assertEqual(bank.balance, bank.init_balance + balance)
  696. # 测试 资金如果有前期初值,删掉已前的单据 的 if 判断
  697. bank._set_init_balance()
  698. # 期初由1111改为0,删掉其他收入单
  699. bank.init_balance = 0
  700. self.assertEqual(bank.balance, 0)
  701. # 初始化期间已结账,设置账户期初时报错
  702. start_date = self.env.user.company_id.start_date
  703. start_date_period_id = self.env['finance.period'].search_period(start_date)
  704. start_date_period_id.is_closed = True
  705. with self.assertRaises(UserError):
  706. bank.init_balance = 11
上海开阖软件有限公司 沪ICP备12045867号-1