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.

160 lines
6.7 KiB

  1. # Copyright 2019 ACSONE SA/NV
  2. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
  3. from datetime import date
  4. from dateutil.relativedelta import relativedelta
  5. from odoo.addons.contract.tests.test_contract import TestContractBase
  6. from odoo.tools import mute_logger
  7. class TestContractLineForecastPeriod(TestContractBase):
  8. @mute_logger("odoo.addons.queue_job.models.base")
  9. def setUp(self):
  10. self.env = self.env(
  11. context=dict(self.env.context, test_queue_job_no_delay=True)
  12. )
  13. super(TestContractLineForecastPeriod, self).setUp()
  14. self.this_year = date.today().year
  15. self.line_vals["date_start"] = date.today()
  16. self.line_vals["recurring_next_date"] = date.today()
  17. self.acct_line = self.env["contract.line"].create(self.line_vals)
  18. @mute_logger("odoo.addons.queue_job.models.base")
  19. def test_forecast_period_creation(self):
  20. self.acct_line.write(
  21. {
  22. 'date_start': "{this_year}-01-01".format(
  23. this_year=self.this_year),
  24. 'recurring_next_date': "{this_year}-01-01".format(
  25. this_year=self.this_year),
  26. 'date_end': "{this_year}-12-31".format(
  27. this_year=self.this_year),
  28. 'recurring_rule_type': "monthly",
  29. 'recurring_invoicing_type': 'pre-paid',
  30. }
  31. )
  32. self.assertTrue(self.acct_line.forecast_period_ids)
  33. self.assertEqual(len(self.acct_line.forecast_period_ids), 12)
  34. @mute_logger("odoo.addons.queue_job.models.base")
  35. def test_forecast_period_on_contract_line_update_1(self):
  36. self.acct_line.write(
  37. {
  38. 'date_start': "{this_year}-01-01".format(
  39. this_year=self.this_year),
  40. 'recurring_next_date': "{this_year}-01-01".format(
  41. this_year=self.this_year),
  42. 'date_end': "{this_year}-12-31".format(
  43. this_year=self.this_year),
  44. 'recurring_rule_type': "yearly",
  45. 'recurring_invoicing_type': 'pre-paid',
  46. }
  47. )
  48. self.assertTrue(self.acct_line.forecast_period_ids)
  49. self.assertEqual(len(self.acct_line.forecast_period_ids), 1)
  50. @mute_logger("odoo.addons.queue_job.models.base")
  51. def test_forecast_period_on_contract_line_update_2(self):
  52. self.acct_line.write(
  53. {
  54. 'date_start': "{this_year}-01-01".format(
  55. this_year=self.this_year),
  56. 'recurring_next_date': "{this_year}-01-31".format(
  57. this_year=self.this_year),
  58. 'date_end': "{this_year}-06-05".format(
  59. this_year=self.this_year),
  60. 'recurring_rule_type': "monthlylastday",
  61. 'recurring_invoicing_type': 'pre-paid',
  62. }
  63. )
  64. self.assertTrue(self.acct_line.forecast_period_ids)
  65. self.assertEqual(len(self.acct_line.forecast_period_ids), 6)
  66. @mute_logger("odoo.addons.queue_job.models.base")
  67. def test_forecast_period_on_contract_line_update_3(self):
  68. self.assertEqual(self.acct_line.price_subtotal, 50)
  69. self.acct_line.write({"price_unit": 50})
  70. self.assertEqual(self.acct_line.price_subtotal, 25)
  71. self.assertEqual(
  72. self.acct_line.forecast_period_ids[0].price_subtotal, 25
  73. )
  74. @mute_logger("odoo.addons.queue_job.models.base")
  75. def test_forecast_period_on_contract_line_update_4(self):
  76. self.assertEqual(self.acct_line.price_subtotal, 50)
  77. self.acct_line.write({"discount": 0})
  78. self.assertEqual(self.acct_line.price_subtotal, 100)
  79. self.assertEqual(
  80. self.acct_line.forecast_period_ids[0].price_subtotal, 100
  81. )
  82. @mute_logger("odoo.addons.queue_job.models.base")
  83. def test_forecast_period_on_contract_line_update_5(self):
  84. self.acct_line.cancel()
  85. self.assertFalse(self.acct_line.forecast_period_ids)
  86. @mute_logger("odoo.addons.queue_job.models.base")
  87. def test_forecast_period_on_contract_line_update_6(self):
  88. self.acct_line.write(
  89. {
  90. 'date_start': "{this_year}-01-01".format(
  91. this_year=self.this_year),
  92. 'recurring_next_date': "{this_year}-01-01".format(
  93. this_year=self.this_year),
  94. 'date_end': "{this_year}-01-28".format(
  95. this_year=self.this_year),
  96. 'recurring_rule_type': "monthly",
  97. 'recurring_invoicing_type': 'pre-paid',
  98. }
  99. )
  100. self.assertTrue(self.acct_line.forecast_period_ids)
  101. self.assertEqual(len(self.acct_line.forecast_period_ids), 1)
  102. @mute_logger("odoo.addons.queue_job.models.base")
  103. def test_forecast_period_on_contract_line_update_6(self):
  104. self.acct_line.write(
  105. {
  106. 'date_start': "{this_year}-01-01".format(
  107. this_year=self.this_year),
  108. 'recurring_next_date': "{this_year}-02-01".format(
  109. this_year=self.this_year),
  110. 'date_end': "{this_year}-01-28".format(
  111. this_year=self.this_year),
  112. 'recurring_rule_type': "monthly",
  113. 'recurring_invoicing_type': 'post-paid',
  114. }
  115. )
  116. self.assertTrue(self.acct_line.forecast_period_ids)
  117. self.assertEqual(len(self.acct_line.forecast_period_ids), 1)
  118. @mute_logger("odoo.addons.queue_job.models.base")
  119. def test_forecast_period_on_contract_line_update_7(self):
  120. self.acct_line.write(
  121. {
  122. 'date_end': date.today() + relativedelta(months=3),
  123. 'recurring_rule_type': "monthlylastday",
  124. 'recurring_invoicing_type': 'pre-paid',
  125. 'is_auto_renew': True,
  126. }
  127. )
  128. self.acct_line._onchange_date_start()
  129. self.assertTrue(self.acct_line.forecast_period_ids)
  130. self.assertEqual(len(self.acct_line.forecast_period_ids), 13)
  131. @mute_logger("odoo.addons.queue_job.models.base")
  132. def test_forecast_period_on_contract_line_update_8(self):
  133. self.acct_line.write(
  134. {
  135. 'date_start': "{this_year}-01-14".format(
  136. this_year=self.this_year),
  137. 'recurring_next_date': "{this_year}-01-31".format(
  138. this_year=self.this_year),
  139. 'date_end': "{this_year}-01-14".format(
  140. this_year=self.this_year),
  141. 'recurring_rule_type': "monthlylastday",
  142. 'recurring_invoicing_type': 'post-paid',
  143. }
  144. )
  145. self.assertTrue(self.acct_line.forecast_period_ids)
  146. self.assertEqual(len(self.acct_line.forecast_period_ids), 1)