GoodERP
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

130 líneas
5.5KB

  1. from odoo.tests.common import TransactionCase
  2. from odoo.addons.report_docx.report.report_docx import DataModelProxy
  3. from odoo.tools import misc
  4. import tempfile
  5. import shutil
  6. import datetime
  7. from odoo.addons.report_docx.report import report_helper
  8. from docxtpl import DocxTemplate
  9. class TestReportDocx(TransactionCase):
  10. def setUp(self):
  11. '''准备数据'''
  12. super(TestReportDocx, self).setUp()
  13. self.ir_actions = self.env.ref('sell.report_sell_order')
  14. # These tests exercise DOCX rendering; PDF conversion is not implicit.
  15. self.ir_actions.output_type = 'docx'
  16. self.sell_order = self.env.ref('sell.sell_order_1')
  17. self.report_docx_sell = self.ir_actions._get_report_from_name('sell.order')
  18. self.ir_actions_pdf = self.ir_actions.copy({'name': '销售订单PDF测试', 'report_name': 'sell.order.pdf', 'output_type': 'pdf'})
  19. self.report_pdf_sell = self.ir_actions_pdf._get_report_from_name('sell.order.pdf')
  20. def test_get_report_from_name(self):
  21. '''测试docx报表模板'''
  22. self.sell_order.note = '测试&和<>'
  23. self.report_docx_sell.render_docx([self.sell_order.id], [])
  24. def test_get_report_from_name_many2one(self):
  25. '''测试docx报表模板many2one字段中含有特殊字符&<>'''
  26. for line in self.sell_order.line_ids:
  27. line.goods_id.name = '鼠标测试&和<>'
  28. self.report_docx_sell.render_docx([self.sell_order.id], [])
  29. def test_get_report_from_name_pdf(self):
  30. '''测试docx报表模,输出类型为pdf'''
  31. # 测试create_source_docx
  32. # self.report_pdf_sell.create(
  33. # self.cr, self.uid, self.sell_order.id, self.ir_actions_pdf, self.env.context)
  34. def test_get_report_from_name_type_pdf(self):
  35. '''测试docx报表模,report_type 为pdf'''
  36. # 模板为pdf类型,测试create
  37. self.ir_actions_pdf.write({'output_type': 'pdf'})
  38. # self.report_pdf_sell.render_docx([self.sell_order.id], [])
  39. # 模板为docx类型,测试create
  40. self.report_docx_sell.render_docx([self.sell_order.id], [])
  41. # def test_get_report_from_name_no_r(self):
  42. # ''' 测试 执行 ir_report '''
  43. # # 测试 执行 ir_report 的 _get_report_from_name no r
  44. # with self.assertRaises(Exception):
  45. # self.report_pdf_sell_1 = self.ir_actions_pdf._get_report_from_name(
  46. # 'sell.order1')
  47. def test_get_docx_data(self):
  48. self.report_docx_sell.render_docx([self.sell_order.id], [])
  49. # def test_save_file(self):
  50. # doxc_file = self.report_docx_sell.render_docx([self.sell_order.id], [])
  51. # tempname = tempfile.mkdtemp()
  52. # shutil.copy(misc.file_open(
  53. # 'sell/template/sell.order.docx').name, tempname)
  54. # self.report_docx_sell._save_file(
  55. # tempname + "/sell.order.docx", doxc_file)
  56. def test_datamodelproxy(self):
  57. data = DataModelProxy([{"type": 'selection'}])
  58. data.__getitem__(0)
  59. data = DataModelProxy([])
  60. data.__getattr__(0)
  61. def test_compute_by_datetime(self):
  62. '''datetime打印处理'''
  63. obj = self.env['sell.order']
  64. data = DataModelProxy(obj)
  65. data._compute_by_datetime(obj._fields.get('create_date'), datetime.datetime.now())
  66. class TestReportHelper(TransactionCase):
  67. ''' 测试 ReportHelper '''
  68. # def test_picture(self):
  69. # ''' 测试 把图片的二进制数据(使用了base64编码)转化为一个docx.Document对象 '''
  70. # doc = DocxTemplate(misc.file_open(
  71. # 'sell/template/sell.order.docx').name)
  72. # # 读取图片的数据且使用base64编码
  73. # data_1 = open(misc.file_open(
  74. # 'core/static/description/logo.png').name, 'rb').read().encode('base64')
  75. # data = self.env['sell.order'].search([('name', '=', 'SO00001')])
  76. # ctx = {'obj': data, 'tpl': doc}
  77. # # not data
  78. # report_helper.picture(ctx, None)
  79. # # not width, height
  80. # report_helper.picture(ctx, data_1)
  81. # # width, height 分别为 'cm', 'mm','inchs','pt','emu','twips'
  82. # # align 分别为'left','center','center','middle'
  83. # report_helper.picture(ctx, data_1, width='122mm')
  84. # report_helper.picture(ctx, data_1, width='12cm',
  85. # height='12cm', align='left')
  86. # report_helper.picture(ctx, data_1, width='12inchs',
  87. # height='12inchs', align='left')
  88. # report_helper.picture(ctx, data_1, width='12pt',
  89. # height='12pt', align='center')
  90. # report_helper.picture(ctx, data_1, width='12emu',
  91. # height='12emu', align='right')
  92. # report_helper.picture(ctx, data_1, width='12twips',
  93. # height='12twips', align='middle')
  94. # # width, height 单位不写,为像素
  95. # report_helper.picture(ctx, data_1, width='12',
  96. # height='12', align='middle')
  97. # # width, height 不是 string 类型 : not isinstance(s, str)
  98. # report_helper.picture(ctx, data_1, width=12, height=12, align='middle')
  99. def test_get_env(self):
  100. ''' 测试 get_env 方法 '''
  101. doc = DocxTemplate(misc.file_open(
  102. 'sell/template/sell.order.docx').name)
  103. data = self.env['sell.order'].search([('name', '=', 'SO00001')])
  104. ctx = {'obj': data, 'tpl': doc}
  105. jinja_env = report_helper.get_env()
  106. doc.render(ctx, jinja_env)
上海开阖软件有限公司 沪ICP备12045867号-1