GoodERP
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.

128 lines
5.3KB

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