Как создать отчет с пользовательскими данными и использовать эти данные в отчете QWEB? - PullRequest
0 голосов
/ 02 июля 2019

Я хочу передать данные в отчет qweb и распечатать эти данные в отчете.

код питона:

pdf = self.env['report'].sudo().get_pdf(self.ids, report_name, data={'test_variable': 'test_passed'})

шаблон отчета:

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <data>
        <report id="my_module.report_id" model="my_module.report_model" string="Some Model Report" report_type="qweb-pdf" name="my_module.daily_report" file="my_module.daily_report_file" menu="False"/>
        <template id="my_module.daily_report">
            <t t-call="report.html_container">
                <t t-call="report.internal_layout">
                    <div class="page">
                        <div class="header">
                            <h4>HEADER</h4>
                            <-- i want to see "test_passed" value below -->
                            <span t-esc="data.test_variable"/>

                        </div>
                    </div>
                </t>
            </t>
        </template>
    </data>
</odoo>

Когда я создаю PDF, я не вижу значения переменной.

1 Ответ

0 голосов
/ 03 июля 2019

Попробуйте передать данные, используя этот код

from odoo import models, api

class ReportClassName(models.AbstractModel):
   _name = 'report.module_name.report_name'

   @api.model
   def render_html(self, docids, data=None):
      docargs = {
       'doc_ids': self.ids,
       'doc_model': self.model,
       'data': data,
      }
     return self.env['report'].render('module_name.report_name', docargs)

Вы можете передавать данные как данные, используя этот специальный report.py для отчета, и вызывать его

<t t-esc="data"/>

в шаблоне для просмотра данных в отчете qweb. Пожалуйста, используйте эту ссылку для создания пользовательского отчета с использованием файлов py и xml.

В odoo11 или odoo 12 вы можете использовать get_report_values ​​вместо render_html

@api.model
def get_report_values(self, docids, data=None): 
    docs = self.env['model.name'].browse(docids)
    return {
         'doc_ids': docids,
         'doc_model': 'model.name',
         'docs': docs,
         'lines': self.some_func(docs),
         'data': data,
    }

Если данные - это некая функция, вызовите эту функцию в строках и строках ['field'], чтобы получить данные в формате pdf

...