2016-12-29 2 views
0

У меня есть два отчета cout_materiel_facture_detail_report.xml (подробный отчет) и cout_materiel_facture_report.xml (простой отчет) и есть мастер, в котором пользователь вводит некоторые данные и выбирает, хочет ли он печатать простые отчет или подробный. Вот класс волшебника:odoo: print qweb report using wizard

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

Я проверил базу данных и обнаружили, оба отчета присутствуют там.

Любая помощь? пожалуйста!!

ответ

0

Наконец-то мне удалось решить мою проблему !! Вот что я сделал:

  • Я создал метод в модели мастера, который возвращает список объектов, которые я whant для печати и связанных мастера к отчету о Qweb.
  • Затем я вызвал метод из отчета qweb, используя object.my_mehtod() в цикле t-foreach, где объект представляет мастер.

С этим способом я могу создавать сложные отчеты и печатать их легко. Этот метод можно использовать для получения данных из нескольких таблиц и организации данных и их повторного включения в список.

Я надеюсь, что это поможет кому-то.

С уважением!