odoo:使用向导打印qweb报告

时间:2016-12-29 09:35:40

标签: python-2.7 odoo-8

我有两个报告cout_materiel_facture_detail_report.xml(详细报告)和cout_materiel_facture_report.xml(简单报告),并有一个向导,用户输入一些数据并选择是否要打印简单报告或详细报告。这是向导的课程:

class CoutMaterielFactureWizard(models.TransientModel):
_name = 'gc.cout_materiel_facture_wizard'

directeur_parc_id = fields.Many2one('hr.employee', string='Directeur Parc')

procedure = fields.Char(string='Procedure')
version = fields.Char(string='Verion')
date_realisation = fields.Date(string='Date realisation')

# is_landscape = fields.Boolean(string='Mode paysage?')
is_detail = fields.Boolean(string='Version simplifiee?')

@api.multi
def do_toggle_print(self):
    cout_materiel = self.env['gc.cout_materiel'].browse(self._context.get('active_id', False))
    cout_materiel.write({
        'directeur_parc_id': self.directeur_parc_id.id
    })
    # Print the simple report
    if not self.is_detail:

        return {
            'type': 'ir.actions.report.xml',
            'name': 'gestion_cout.cout_materiel_facture_report_template',
            'report_name': 'gestion_cout.cout_materiel_facture_report_template',
        }
    # Print the detailed report
    else:
        sql = "SELECT  SUM(h_sup)+SUM(h_exp),SUM(h_im),count(*),SUM(total), famille FROM gc_cout_materiel_line where " \
              "cout_materiel_id =%s group by famille "
        self.env.cr.execute(sql, (cout_materiel.id,))
        results = self.env.cr.fetchall()
        if len(results) > 0:
            line_ids = []
            for nbht, nbhim, qte, prix_total, famille in results:
                line_ids.append((0, 0, {
                    'famille': famille,
                    'type': 'VA',
                    'qte': qte,
                    'nbr_heures': nbht,
                    'nbr_heures_im': nbhim,
                    'nbr_jours': 28,
                    'prix_unitaire': 'VA',
                    'prix_total': prix_total,
                        }))
            self.env['gc.cout_materiel_facture_temp'].create({
                'chantier_name': cout_materiel.chantier_id.name,
                'mois_name': cout_materiel.mois_id.name,
                'num_annexe': cout_materiel.num_annexe,
                'expediteur': cout_materiel.expediteur,
                'destinateur': cout_materiel.destinateur,
                'application_date': cout_materiel.application_date,
                'date_realisation': self.date_realisation,
                'directeur_parc_name': self.directeur_parc_id.name,
                'procedure': self.procedure,
                'version': self.version,
                'prix_total_global': cout_materiel.total_global,
                'line_ids': line_ids,
            })
        return {
            'type': 'ir.actions.report.xml',
            'name': 'gestion_cout.gc_cout_materiel_facture_detail_report_template',
            'report_name': 'gestion_cout.gc_cout_materiel_facture_detail_report_template',
        }

But i get this error after i hit the print button

我检查了数据库,发现两个报告都存在。

有任何帮助吗?请!!

1 个答案:

答案 0 :(得分:0)

最后我设法解决了我的问题!! 这是我做的:

  • 我在向导模型中创建了一个方法,该方法返回我要打印的对象列表,并将向导链接到qweb报告。
  • 然后我在t-foreach循环中使用object.my_mehtod()从qweb报告中调用该方法,其中 object 表示向导。

通过这种方式,我可以创建复杂的报告并轻松打印。可以使用此方法从多个表中获取数据并组织数据并将其作为列表返回。

我希望它会对某人有所帮助。

最好的问候!!