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.

61 lines
2.1 KiB

  1. # Copyright 2019 Creu Blanca
  2. # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
  3. from io import StringIO
  4. from odoo import models
  5. import logging
  6. _logger = logging.getLogger(__name__)
  7. try:
  8. import csv
  9. except ImportError:
  10. _logger.debug('Can not import csvwriter`.')
  11. class ReportCSVAbstract(models.AbstractModel):
  12. _name = 'report.report_csv.abstract'
  13. _description = 'Abstract Model for CSV reports'
  14. def _get_objs_for_report(self, docids, data):
  15. """
  16. Returns objects for csv report. From WebUI these
  17. are either as docids taken from context.active_ids or
  18. in the case of wizard are in data. Manual calls may rely
  19. on regular context, setting docids, or setting data.
  20. :param docids: list of integers, typically provided by
  21. qwebactionmanager for regular Models.
  22. :param data: dictionary of data, if present typically provided
  23. by qwebactionmanager for TransientModels.
  24. :param ids: list of integers, provided by overrides.
  25. :return: recordset of active model for ids.
  26. """
  27. if docids:
  28. ids = docids
  29. elif data and 'context' in data:
  30. ids = data["context"].get('active_ids', [])
  31. else:
  32. ids = self.env.context.get('active_ids', [])
  33. return self.env[self.env.context.get('active_model')].browse(ids)
  34. def create_csv_report(self, docids, data):
  35. objs = self._get_objs_for_report(docids, data)
  36. file_data = StringIO()
  37. file = csv.DictWriter(file_data, **self.csv_report_options())
  38. self.generate_csv_report(file, data, objs)
  39. file_data.seek(0)
  40. return file_data.read(), 'csv'
  41. def csv_report_options(self):
  42. """
  43. :return: dictionary of parameters. At least return 'fieldnames', but
  44. you can optionally return parameters that define the export format.
  45. Valid parameters include 'delimiter', 'quotechar', 'escapechar',
  46. 'doublequote', 'skipinitialspace', 'lineterminator', 'quoting'.
  47. """
  48. return {'fieldnames': []}
  49. def generate_csv_report(self, file, data, objs):
  50. raise NotImplementedError()