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

  1. # Copyright 2009-2018 Noviat.
  2. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
  3. from odoo import models
  4. class PartnerExportXlsx(models.AbstractModel):
  5. _name = 'report.report_xlsx_helper_demo.partner_export_xlsx'
  6. _inherit = 'report.report_xlsx.abstract'
  7. def _get_ws_params(self, wb, data, partners):
  8. partner_template = {
  9. 'name': {
  10. 'header': {
  11. 'value': 'Name',
  12. },
  13. 'data': {
  14. 'value': self._render("partner.name"),
  15. },
  16. 'width': 20,
  17. },
  18. 'number_of_contacts': {
  19. 'header': {
  20. 'value': '# Contacts',
  21. },
  22. 'data': {
  23. 'value': self._render("len(partner.child_ids)"),
  24. },
  25. 'width': 10,
  26. },
  27. 'is_customer': {
  28. 'header': {
  29. 'value': 'Customer',
  30. },
  31. 'data': {
  32. 'value': self._render("partner.customer"),
  33. },
  34. 'width': 10,
  35. },
  36. 'is_customer_formula': {
  37. 'header': {
  38. 'value': 'Customer Y/N ?',
  39. },
  40. 'data': {
  41. 'type': 'formula',
  42. 'value': self._render("customer_formula"),
  43. },
  44. 'width': 14,
  45. },
  46. }
  47. wanted_list = [
  48. 'name', 'number_of_contacts', 'is_customer',
  49. 'is_customer_formula']
  50. ws_params = {
  51. 'ws_name': 'Partners',
  52. 'generate_ws_method': '_partner_report',
  53. 'title': 'Partners',
  54. 'wanted_list': wanted_list,
  55. 'col_specs': partner_template,
  56. }
  57. return [ws_params]
  58. def _partner_report(self, workbook, ws, ws_params, data, partners):
  59. ws.set_portrait()
  60. ws.fit_to_pages(1, 0)
  61. ws.set_header(self.xls_headers['standard'])
  62. ws.set_footer(self.xls_footers['standard'])
  63. self._set_column_width(ws, ws_params)
  64. row_pos = 0
  65. if len(partners) == 1:
  66. ws_params['title'] = partners.name
  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)