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.

99 lines
3.1 KiB

  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 PartnerExportXlsx(models.AbstractModel):
  6. _name = 'report.report_xlsx_helper_demo.partner_export_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. wanted_list = [
  49. 'name', 'number_of_contacts', 'is_customer',
  50. 'is_customer_formula']
  51. ws_params = {
  52. 'ws_name': 'Partners',
  53. 'generate_ws_method': '_partner_report',
  54. 'title': 'Partners',
  55. 'wanted_list': wanted_list,
  56. 'col_specs': partner_template,
  57. }
  58. return [ws_params]
  59. def _partner_report(self, workbook, ws, ws_params, data, partners):
  60. ws.set_portrait()
  61. ws.fit_to_pages(1, 0)
  62. ws.set_header(self.xls_headers['standard'])
  63. ws.set_footer(self.xls_footers['standard'])
  64. self._set_column_width(ws, ws_params)
  65. row_pos = 0
  66. if len(partners) == 1:
  67. ws_params['title'] = partners.name
  68. row_pos = self._write_ws_title(ws, row_pos, ws_params)
  69. row_pos = self._write_line(
  70. ws, row_pos, ws_params, col_specs_section='header',
  71. default_format=self.format_theader_yellow_left)
  72. ws.freeze_panes(row_pos, 0)
  73. wl = ws_params['wanted_list']
  74. for partner in partners:
  75. is_customer_pos = 'is_customer' in wl and \
  76. wl.index('is_customer')
  77. is_customer_cell = self._rowcol_to_cell(
  78. row_pos, is_customer_pos)
  79. customer_formula = 'IF({},"Y", "N")'.format(is_customer_cell)
  80. row_pos = self._write_line(
  81. ws, row_pos, ws_params, col_specs_section='data',
  82. render_space={
  83. 'partner': partner,
  84. 'customer_formula': customer_formula,
  85. },
  86. default_format=self.format_tcell_left)