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.

102 lines
3.3 KiB

  1. # -*- coding: utf-8 -*-
  2. # © 2016 Savoir-faire Linux
  3. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
  4. from datetime import datetime
  5. from dateutil.relativedelta import relativedelta
  6. from openerp import fields
  7. from openerp.tests import common
  8. to_string = fields.Date.to_string
  9. class TestAccountMoveLine(common.TransactionCase):
  10. def setUp(self):
  11. super(TestAccountMoveLine, self).setUp()
  12. self.date_1 = datetime.now()
  13. self.date_2 = datetime.now() + relativedelta(days=1)
  14. self.account_expense = self.env['account.account'].search([
  15. ('type', '=', 'other'),
  16. ], limit=1)
  17. self.account_receivable = self.env['account.account'].search([
  18. ('type', '=', 'receivable'),
  19. ], limit=1)
  20. self.journal = self.env['account.journal'].search([
  21. ('type', '=', 'bank'),
  22. ], limit=1)
  23. self.period_1 = self.env['account.period'].find(self.date_1)
  24. self.period_2 = self.env['account.period'].find(self.date_2)
  25. self.move_1 = self.env['account.move'].create({
  26. 'name': '/',
  27. 'journal_id': self.journal.id,
  28. 'date': self.date_1,
  29. 'period_id': self.period_1.id,
  30. 'line_id': [
  31. (0, 0, {
  32. 'name': '/',
  33. 'account_id': self.account_receivable.id,
  34. 'debit': 100,
  35. }),
  36. (0, 0, {
  37. 'name': '/',
  38. 'account_id': self.account_expense.id,
  39. 'credit': 100,
  40. }),
  41. ]
  42. })
  43. self.line_1 = self.move_1.line_id.sorted(lambda l: l.id)[0]
  44. def create_payment_move(self, amount):
  45. return self.env['account.move'].create({
  46. 'name': '/',
  47. 'journal_id': self.journal.id,
  48. 'date': self.date_2,
  49. 'period_id': self.period_2.id,
  50. 'line_id': [
  51. (0, 0, {
  52. 'name': '/',
  53. 'account_id': self.account_receivable.id,
  54. 'credit': amount,
  55. }),
  56. (0, 0, {
  57. 'name': '/',
  58. 'account_id': self.account_expense.id,
  59. 'debit': amount,
  60. }),
  61. ]
  62. })
  63. def test_01_last_rec_date(self):
  64. self.move_2 = self.create_payment_move(100)
  65. self.line_2 = self.move_2.line_id.sorted(lambda l: l.id)[0]
  66. self.reconcile = self.env['account.move.reconcile'].create({
  67. 'name': 'A999',
  68. 'type': 'auto',
  69. 'line_id': [(4, self.line_1.id), (4, self.line_2.id)]
  70. })
  71. self.assertEqual(self.line_1.last_rec_date, to_string(self.date_2))
  72. def test_02_last_rec_date_with_partial_reconcile(self):
  73. self.move_2 = self.create_payment_move(50)
  74. self.line_2 = self.move_2.line_id.sorted(lambda l: l.id)[0]
  75. self.move_3 = self.create_payment_move(50)
  76. self.line_3 = self.move_3.line_id.sorted(lambda l: l.id)[0]
  77. self.reconcile = self.env['account.move.reconcile'].create({
  78. 'name': 'A999',
  79. 'type': 'auto',
  80. 'line_partial_ids': [
  81. (4, self.line_1.id), (4, self.line_2.id), (4, self.line_3.id)
  82. ]
  83. })
  84. self.assertEqual(self.line_1.last_rec_date, to_string(self.date_2))