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.

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