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.

75 lines
2.4 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
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. from .report_xlsx_format import FORMATS, XLS_HEADERS
  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. _description = "Test Partner XLSX Report"
  13. def _get_ws_params(self, wb, data, partners):
  14. partner_template = {
  15. "name": {
  16. "header": {"value": "Name"},
  17. "data": {"value": self._render("partner.name")},
  18. "width": 20,
  19. },
  20. "number_of_contacts": {
  21. "header": {"value": "# Contacts"},
  22. "data": {"value": self._render("len(partner.child_ids)")},
  23. "width": 10,
  24. },
  25. "date": {
  26. "header": {"value": "Date"},
  27. "data": {"value": self._render("partner.date")},
  28. "width": 13,
  29. },
  30. }
  31. ws_params = {
  32. "ws_name": "Partners",
  33. "generate_ws_method": "_partner_report",
  34. "title": "Partners",
  35. "wanted_list": [k for k in partner_template],
  36. "col_specs": partner_template,
  37. }
  38. return [ws_params]
  39. def _partner_report(self, workbook, ws, ws_params, data, partners):
  40. ws.set_portrait()
  41. ws.fit_to_pages(1, 0)
  42. ws.set_header(XLS_HEADERS["xls_headers"]["standard"])
  43. ws.set_footer(XLS_HEADERS["xls_footers"]["standard"])
  44. self._set_column_width(ws, ws_params)
  45. row_pos = 0
  46. row_pos = self._write_ws_title(ws, row_pos, ws_params)
  47. row_pos = self._write_line(
  48. ws,
  49. row_pos,
  50. ws_params,
  51. col_specs_section="header",
  52. default_format=FORMATS["format_theader_yellow_left"],
  53. )
  54. ws.freeze_panes(row_pos, 0)
  55. for partner in partners:
  56. row_pos = self._write_line(
  57. ws,
  58. row_pos,
  59. ws_params,
  60. col_specs_section="data",
  61. render_space={"partner": partner},
  62. default_format=FORMATS["format_tcell_left"],
  63. )