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.

74 lines
2.3 KiB

6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
  1. # Copyright 2009-2019 Noviat.
  2. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
  3. from odoo import models
  4. # TODO:
  5. # make PR to move this class as well as the report_xlsx test class
  6. # to the tests folder (requires dynamic update Odoo registry when
  7. # running unit tests.
  8. class TestPartnerXlsx(models.AbstractModel):
  9. _name = "report.report_xlsx_helper.test_partner_xlsx"
  10. _inherit = "report.report_xlsx.abstract"
  11. _description = "Test Partner XLSX Report"
  12. def _get_ws_params(self, wb, data, partners):
  13. partner_template = {
  14. "name": {
  15. "header": {"value": "Name"},
  16. "data": {"value": self._render("partner.name")},
  17. "width": 20,
  18. },
  19. "number_of_contacts": {
  20. "header": {"value": "# Contacts"},
  21. "data": {"value": self._render("len(partner.child_ids)")},
  22. "width": 10,
  23. },
  24. "date": {
  25. "header": {"value": "Date"},
  26. "data": {"value": self._render("partner.date")},
  27. "width": 13,
  28. },
  29. }
  30. ws_params = {
  31. "ws_name": "Partners",
  32. "generate_ws_method": "_partner_report",
  33. "title": "Partners",
  34. "wanted_list": [k for k in partner_template],
  35. "col_specs": partner_template,
  36. }
  37. return [ws_params]
  38. def _partner_report(self, workbook, ws, ws_params, data, partners):
  39. ws.set_portrait()
  40. ws.fit_to_pages(1, 0)
  41. ws.set_header(self.xls_headers["standard"])
  42. ws.set_footer(self.xls_footers["standard"])
  43. self._set_column_width(ws, ws_params)
  44. row_pos = 0
  45. row_pos = self._write_ws_title(ws, row_pos, ws_params)
  46. row_pos = self._write_line(
  47. ws,
  48. row_pos,
  49. ws_params,
  50. col_specs_section="header",
  51. default_format=self.format_theader_yellow_left,
  52. )
  53. ws.freeze_panes(row_pos, 0)
  54. for partner in partners:
  55. row_pos = self._write_line(
  56. ws,
  57. row_pos,
  58. ws_params,
  59. col_specs_section="data",
  60. render_space={"partner": partner},
  61. default_format=self.format_tcell_left,
  62. )