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.

148 lines
5.3 KiB

  1. # -*- coding: utf-8 -*-
  2. # © 2016 ACSONE SA/NV (<http://acsone.eu>)
  3. # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
  4. import openerp.tests.common as common
  5. from openerp.tools import test_reports
  6. class TestMisReportInstance(common.TransactionCase):
  7. """ Basic integration test to exercise mis.report.instance.
  8. We don't check the actual results here too much as computation correctness
  9. should be covered by lower level unit tests.
  10. """
  11. def setUp(self):
  12. super(TestMisReportInstance, self).setUp()
  13. partner_model_id = \
  14. self.env.ref('base.model_res_partner').id
  15. partner_create_date_field_id = \
  16. self.env.ref('base.field_res_partner_create_date').id
  17. partner_debit_field_id = \
  18. self.env.ref('account.field_res_partner_debit').id
  19. # create a report with 2 subkpis and one query
  20. self.report = self.env['mis.report'].create(dict(
  21. name='test report',
  22. subkpi_ids=[(0, 0, dict(
  23. name='sk1',
  24. description='subkpi 1',
  25. sequence=1,
  26. )), (0, 0, dict(
  27. name='sk2',
  28. description='subkpi 2',
  29. sequence=2,
  30. )),
  31. ],
  32. query_ids=[(0, 0, dict(
  33. name='partner',
  34. model_id=partner_model_id,
  35. field_ids=[(4, partner_debit_field_id, None)],
  36. date_field=partner_create_date_field_id,
  37. aggregate='sum',
  38. )),
  39. ],
  40. ))
  41. # kpi with accounting formulas
  42. self.env['mis.report.kpi'].create(dict(
  43. report_id=self.report.id,
  44. description='kpi 1',
  45. name='k1',
  46. multi=True,
  47. expression_ids=[(0, 0, dict(
  48. name='bale[200%]',
  49. subkpi_id=self.report.subkpi_ids[0].id,
  50. )), (0, 0, dict(
  51. name='balp[200%]',
  52. subkpi_id=self.report.subkpi_ids[1].id,
  53. )),
  54. ],
  55. ))
  56. # kpi with accounting formula and query
  57. self.env['mis.report.kpi'].create(dict(
  58. report_id=self.report.id,
  59. description='kpi 2',
  60. name='k2',
  61. multi=True,
  62. expression_ids=[(0, 0, dict(
  63. name='balp[200%]',
  64. subkpi_id=self.report.subkpi_ids[0].id,
  65. )), (0, 0, dict(
  66. name='partner.debit',
  67. subkpi_id=self.report.subkpi_ids[1].id,
  68. )),
  69. ],
  70. ))
  71. # kpi with a simple expression summing other multi-valued kpis
  72. self.env['mis.report.kpi'].create(dict(
  73. report_id=self.report.id,
  74. description='kpi 4',
  75. name='k4',
  76. multi=False,
  77. expression='k1 + k2 + k3',
  78. ))
  79. # kpi with 2 constants
  80. self.env['mis.report.kpi'].create(dict(
  81. report_id=self.report.id,
  82. description='kpi 3',
  83. name='k3',
  84. multi=True,
  85. expression_ids=[(0, 0, dict(
  86. name='AccountingNone',
  87. subkpi_id=self.report.subkpi_ids[0].id,
  88. )), (0, 0, dict(
  89. name='1.0',
  90. subkpi_id=self.report.subkpi_ids[1].id,
  91. )),
  92. ],
  93. ))
  94. # kpi with a NameError (x not defined)
  95. self.env['mis.report.kpi'].create(dict(
  96. report_id=self.report.id,
  97. description='kpi 5',
  98. name='k5',
  99. multi=True,
  100. expression_ids=[(0, 0, dict(
  101. name='x',
  102. subkpi_id=self.report.subkpi_ids[0].id,
  103. )), (0, 0, dict(
  104. name='1.0',
  105. subkpi_id=self.report.subkpi_ids[1].id,
  106. )),
  107. ],
  108. ))
  109. # create a report instance
  110. self.report_instance = self.env['mis.report.instance'].create(dict(
  111. name='test instance',
  112. report_id=self.report.id,
  113. company_id=self.env.ref('base.main_company').id,
  114. period_ids=[(0, 0, dict(
  115. name='p1',
  116. mode='relative',
  117. type='d',
  118. subkpi_ids=[(4, self.report.subkpi_ids[0].id, None)],
  119. )), (0, 0, dict(
  120. name='p2',
  121. mode='fix',
  122. manual_date_from='2014-01-01',
  123. manual_date_to='2014-12-31',
  124. )),
  125. ],
  126. ))
  127. self.report_instance.period_ids[1].comparison_column_ids = \
  128. [(4, self.report_instance.period_ids[0].id, None)]
  129. def test_json(self):
  130. self.report_instance.compute()
  131. def test_qweb(self):
  132. test_reports.try_report(self.env.cr, self.env.uid,
  133. 'mis_builder.report_mis_report_instance',
  134. [self.report_instance.id],
  135. report_type='qweb-pdf')
  136. def test_xlsx(self):
  137. test_reports.try_report(self.env.cr, self.env.uid,
  138. 'mis.report.instance.xlsx',
  139. [self.report_instance.id],
  140. report_type='xlsx')