Search code examples
pythonmodelodooodoo-8

send an email and raise message error when an error occurs in odoo v8


I want to get an email when ther is an error and raise a mesage error.

    from openerp import models, fields, api, _
    from openerp.exceptions import ValidationError
    from datetime import datetime

So, to send and email, I created the template in this function :

    @api.model
    def email_template(self):
       template_obj = self.env['email.template']
       model = self.env['ir.model'].search([('model', '=', 'sync.synchro.partner')])[0]
       company= self.env['res.company'].search([])[0]
       body_html = '''Synchronization Error'''
       synchronise_erreur_template = {
                               'model_id': model.id,
                               'name': 'Erreur Technique',
                               'subject' : 'Erreur produite lors de Synchronisation des contacts',
                               'body_html': body_html,
                               'email_from' : company.email or '${object.employee_id.work_email}',
                               'email_to' : '[email protected]',
                                }

And I call it when an error occurs

    @api.multi
    def schedule_synchro(self):
        remote_partners = self.env['res.partner']
        template_obj = self.pool['email.template']
        records = self.env['sync.synchro.partner'].search([])
        for record in records :
            if record.model_name == 'partners':
                try: 
                    remote_partners.export2remote([record.local_id])
                    record.unlink()
                except (Warning) as exc:
                    template_obj.send_mail(self.env.cr, self.env.uid,
                         synchro_partner.synchronise_erreur_template.id, 
                         synchro_partner.id, force_send=True,context=self.env.context)
                    raise except_orm('Couldn t Transfer partner to remote database')

But even when an error occurs, I don't get an E-mail or a message error


Solution

  • I found a solution

        @api.model
        def email_template(self):
                template_obj = self.env['email.template']
                model = self.env['ir.model'].search([('model', '=', 'sync.synchro.partner')])[0]
                company= self.env['res.company'].search([])[0]
                body_html =  u""" <html><h1>Erreur de Synchronisation</h1>
                <p>This error was raised ...</p></html> """
                synchronise_catogory_erreur_template = {
                    'model_id': model.id,
                    'name': 'Erreur Technique',
                    'subject' : 'Erreur produite lors de Synchronisation',
                    'body_html': body_html,
                    'email_from' : company.email or '${object.employee_id.work_email}',
                    'email_to' : '[email protected]',
                    }
                template_exists = template_obj.search([('subject','=',"Erreur produite lors de Synchronisation")])
                if not template_exists :
                    template_record = template_obj.create(synchronise_erreur_template)
                else :
                    template_record = template_exists[0]
                return template_record
    

    and I call it here :

        @api.multi
        def schedule_synchro(self):
                template_record = self.email_template()
                template_obj = self.pool['email.template']
                ......
                for record in records:
                    if record.model_name == 'partners':
                        try: 
                            .....
                        except Exception as exc:
                            template_obj.send_mail(self.env.cr, self.env.uid,
                                template_record.id, 
                                record.id, force_send=True,context=self.env.context)
                            raise Warning("Couldn t Transfer partner category to remote database \n")