parser.py 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. # -*- coding: utf-8 -*-
  2. # License, author and contributors information in:
  3. # __openerp__.py file at the root folder of this module.
  4. from functools import partial
  5. from openerp.osv import osv
  6. from openerp import exceptions, _
  7. from reportlab.graphics.barcode import createBarcodeDrawing
  8. class PartnerReport(osv.AbstractModel):
  9. _name = 'report.repair_workorder_mejorado.partner_report'
  10. def get_total(self, cr, uid, workorder, context=None):
  11. total = 0
  12. for line_consumed in workorder.consumed_ids:
  13. total += line_consumed.quantity * line_consumed.price_unit
  14. return total
  15. def render_html(self, cr, uid, ids, data=None, context=None):
  16. report_obj = self.pool['report']
  17. repair_workorder_obj = self.pool['repair.workorderimproved']
  18. report = report_obj._get_report_from_name(
  19. cr, uid, 'repair_workorder_mejorado.partner_report')
  20. selected_orders = repair_workorder_obj.browse(
  21. cr, uid, ids, context=context)
  22. docargs = {
  23. 'doc_ids': ids,
  24. 'doc_model': report.model,
  25. 'docs': selected_orders,
  26. 'get_total': partial(
  27. self.get_total, cr, uid, context=context),
  28. 'printBarcode': partial(
  29. self.printBarcode, cr, uid, context=context),
  30. }
  31. return report_obj.render(
  32. cr, uid, ids, 'repair_workorder_mejorado.partner_report',
  33. docargs, context=context)
  34. def printBarcode(self, cr, uid, value, width, height, context=None):
  35. try:
  36. width, height = int(width), int(height)
  37. barcode = createBarcodeDrawing(
  38. 'EAN13', value=value, format='png', width=width, height=height)
  39. barcode = barcode.asString('png')
  40. barcode = barcode.encode('base64', 'strict')
  41. except (ValueError, AttributeError):
  42. raise exceptions.Warning(_('Cannot convert into barcode.'))
  43. return barcode
  44. class CompanyReport(osv.AbstractModel):
  45. _name = 'report.repair_workorder_mejorado.company_report'
  46. def get_total(self, cr, uid, workorder, context=None):
  47. total = 0
  48. for line_consumed in workorder.consumed_ids:
  49. total += line_consumed.quantity * line_consumed.price_unit
  50. return total
  51. def render_html(self, cr, uid, ids, data=None, context=None):
  52. report_obj = self.pool['report']
  53. repair_workorder_obj = self.pool['repair.workorderimproved']
  54. report = report_obj._get_report_from_name(
  55. cr, uid, 'repair_workorder_mejorado.company_report')
  56. selected_orders = repair_workorder_obj.browse(
  57. cr, uid, ids, context=context)
  58. docargs = {
  59. 'doc_ids': ids,
  60. 'doc_model': report.model,
  61. 'docs': selected_orders,
  62. 'get_total': partial(
  63. self.get_total, cr, uid, context=context),
  64. 'printBarcode': partial(
  65. self.printBarcode, cr, uid, context=context),
  66. }
  67. return report_obj.render(
  68. cr, uid, ids, 'repair_workorder_mejorado.company_report',
  69. docargs, context=context)
  70. def printBarcode(self, cr, uid, value, width, height, context=None):
  71. try:
  72. width, height = int(width), int(height)
  73. barcode = createBarcodeDrawing(
  74. 'EAN13', value=value, format='png', width=width, height=height)
  75. barcode = barcode.asString('png')
  76. barcode = barcode.encode('base64', 'strict')
  77. except (ValueError, AttributeError):
  78. raise exceptions.Warning(_('Cannot convert into barcode.'))
  79. return barcode