OCA reporting engine fork for dev and update.
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.

98 lines
3.1 KiB

6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
  1. # -*- coding: utf-8 -*-
  2. # Copyright 2009-2018 Noviat.
  3. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
  4. from odoo import models
  5. # TODO:
  6. # make PR to move this class as well as the report_xlsx test class
  7. # to the tests folder (requires dynamic update Odoo registry when
  8. # running unit tests.
  9. class TestPartnerXlsx(models.AbstractModel):
  10. _name = 'report.report_xlsx_helper.test_partner_xlsx'
  11. _inherit = 'report.report_xlsx.abstract'
  12. def _get_ws_params(self, wb, data, partners):
  13. partner_template = {
  14. 'name': {
  15. 'header': {
  16. 'value': 'Name',
  17. },
  18. 'data': {
  19. 'value': self._render("partner.name"),
  20. },
  21. 'width': 20,
  22. },
  23. 'number_of_contacts': {
  24. 'header': {
  25. 'value': '# Contacts',
  26. },
  27. 'data': {
  28. 'value': self._render("len(partner.child_ids)"),
  29. },
  30. 'width': 10,
  31. },
  32. 'is_customer': {
  33. 'header': {
  34. 'value': 'Customer',
  35. },
  36. 'data': {
  37. 'value': self._render("partner.customer"),
  38. },
  39. 'width': 10,
  40. },
  41. 'is_customer_formula': {
  42. 'header': {
  43. 'value': 'Customer Y/N ?',
  44. },
  45. 'data': {
  46. 'type': 'formula',
  47. 'value': self._render("customer_formula"),
  48. },
  49. 'width': 14,
  50. },
  51. }
  52. ws_params = {
  53. 'ws_name': 'Partners',
  54. 'generate_ws_method': '_partner_report',
  55. 'title': 'Partners',
  56. 'wanted_list': [k for k in partner_template],
  57. 'col_specs': partner_template,
  58. }
  59. return [ws_params]
  60. def _partner_report(self, workbook, ws, ws_params, data, partners):
  61. ws.set_portrait()
  62. ws.fit_to_pages(1, 0)
  63. ws.set_header(self.xls_headers['standard'])
  64. ws.set_footer(self.xls_footers['standard'])
  65. self._set_column_width(ws, ws_params)
  66. row_pos = 0
  67. row_pos = self._write_ws_title(ws, row_pos, ws_params)
  68. row_pos = self._write_line(
  69. ws, row_pos, ws_params, col_specs_section='header',
  70. default_format=self.format_theader_yellow_left)
  71. ws.freeze_panes(row_pos, 0)
  72. wl = ws_params['wanted_list']
  73. for partner in partners:
  74. is_customer_pos = 'is_customer' in wl and \
  75. wl.index('is_customer')
  76. is_customer_cell = self._rowcol_to_cell(
  77. row_pos, is_customer_pos)
  78. customer_formula = 'IF({},"Y", "N")'.format(is_customer_cell)
  79. row_pos = self._write_line(
  80. ws, row_pos, ws_params, col_specs_section='data',
  81. render_space={
  82. 'partner': partner,
  83. 'customer_formula': customer_formula,
  84. },
  85. default_format=self.format_tcell_left)