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.

94 lines
2.9 KiB

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. class TestPartnerXlsx(models.AbstractModel):
  6. _name = 'report.report_xlsx_helper.test_partner_xlsx'
  7. _inherit = 'report.report_xlsx.abstract'
  8. def _get_ws_params(self, wb, data, partners):
  9. partner_template = {
  10. 'name': {
  11. 'header': {
  12. 'value': 'Name',
  13. },
  14. 'data': {
  15. 'value': self._render("partner.name"),
  16. },
  17. 'width': 20,
  18. },
  19. 'number_of_contacts': {
  20. 'header': {
  21. 'value': '# Contacts',
  22. },
  23. 'data': {
  24. 'value': self._render("len(partner.child_ids)"),
  25. },
  26. 'width': 10,
  27. },
  28. 'is_customer': {
  29. 'header': {
  30. 'value': 'Customer',
  31. },
  32. 'data': {
  33. 'value': self._render("partner.customer"),
  34. },
  35. 'width': 10,
  36. },
  37. 'is_customer_formula': {
  38. 'header': {
  39. 'value': 'Customer Y/N ?',
  40. },
  41. 'data': {
  42. 'type': 'formula',
  43. 'value': self._render("customer_formula"),
  44. },
  45. 'width': 14,
  46. },
  47. }
  48. ws_params = {
  49. 'ws_name': 'Partners',
  50. 'generate_ws_method': '_partner_report',
  51. 'title': 'Partners',
  52. 'wanted_list': [k for k in partner_template],
  53. 'col_specs': partner_template,
  54. }
  55. return [ws_params]
  56. def _partner_report(self, workbook, ws, ws_params, data, partners):
  57. ws.set_portrait()
  58. ws.fit_to_pages(1, 0)
  59. ws.set_header(self.xls_headers['standard'])
  60. ws.set_footer(self.xls_footers['standard'])
  61. self._set_column_width(ws, ws_params)
  62. row_pos = 0
  63. row_pos = self._write_ws_title(ws, row_pos, ws_params)
  64. row_pos = self._write_line(
  65. ws, row_pos, ws_params, col_specs_section='header',
  66. default_format=self.format_theader_yellow_left)
  67. ws.freeze_panes(row_pos, 0)
  68. wl = ws_params['wanted_list']
  69. for partner in partners:
  70. is_customer_pos = 'is_customer' in wl and \
  71. wl.index('is_customer')
  72. is_customer_cell = self._rowcol_to_cell(
  73. row_pos, is_customer_pos)
  74. customer_formula = 'IF({},"Y", "N")'.format(is_customer_cell)
  75. row_pos = self._write_line(
  76. ws, row_pos, ws_params, col_specs_section='data',
  77. render_space={
  78. 'partner': partner,
  79. 'customer_formula': customer_formula,
  80. },
  81. default_format=self.format_tcell_left)