Publicidad

miércoles, 16 de mayo de 2018

Creación Metodos Automatizados en Odoo (Cron) v 11

Creación de nuestro primer Metodo Planificado


Una caracteristica dentro de la API de Odoo es el uso de un Cron, el cual te permite generar una planificacion en la ejecución de un Metodo, de forma dinamica, diaria, semanal, mensual, cada X periodo de tiempo, etc.

Este tipo de Metodos los podemos encontrar en el apartado de Planificacion en la Configuración Tecnica.


Lo primero que debemos hacer es  decidir en que Clase de Odoo pondremos nuestro metodo, por ejemplo creare un metodo que valide el vencimiento de las facturas y envie un correo al administrador con los Folios de estas.

Heredamos Facturas

class AccountInvoice(models.Model):
    _name = 'account.invoice'
    _inherit ='account.invoice'

Creamos nuestro Metodo

class AccountInvoice(models.Model):
    _name = 'account.invoice'
    _inherit ='account.invoice'

    @api.model
    def revision_due_invoices(self, id=None):
        print "### Revisando las Facturas Vencidas"

Creamos el Registro de Automatización (Objedo ir.cron)

Para la creación utilizaremos un registro en nuestro XML

<data noupdate="1">

    <record forcecreate="True" id="revision_due_invoices_v1" model="ir.cron">
           <field name="name">Revision de Facturas Vencidas</field>
           <field eval="True" name="active" />
           <field name="user_id" ref="base.user_root" />
           <field name="interval_number">24</field>
           <field name="interval_type">hours</field>
           <field name="numbercall">-1</field>
           <field ref="model_account_invoice" name="model_id" />
            <field name="state">code</field>
           <field name="code">model.revision_due_invoices()</field>
           <field eval="False" name="doall"/>
           <field name="function">True</field>

        </record>


</data>

Podemos Observar que la Ejecucion Sera Cada 24 Horas con Ciclos Ilimitados.



Para la revisión de las Facturas Vencidas utilizaremos el campo llamado due_invoice:

    @api.model
    def revision_due_invoices(self, id=None):
        print "### Revisando las Facturas Vencidas"
        date_act = fields.Datetime.now()
        invoice_due_ids = self.search([('due_invoice','<=',date_act),
        ('state','=','open')])
        if invoice_due_ids:
            # Folios de Facturas Vencidas
            ref_list_due = [x.name for x in invoice_due_ids]


El Metodo completo quedaria como el siguiente:

    @api.model
    def revision_due_invoices(self, id=None):
        print "### Revisando las Facturas Vencidas"
        date_act = fields.Datetime.now()
        invoice_due_ids = self.search([('due_invoice','<=',date_act),
        ('state','=','open')])
        if invoice_due_ids:
            # Folios de Facturas Vencidas
            ref_list_due = [x.number for x in invoice_due_ids]
            from odoo import SUPERUSER_ID
            user_admin = self.env.['res.user'].browse(SUPERUSER_ID)
            my_user = self.env.user
            mail_from = my_user.partner_id.email
            mail_to = user_admin.partner_id.email

            mail_vals = {
                    'subject': 'Notificacion de Facturas Vencidas %s' % date_act,
                    'author_id': my_user.id,
                    'email_from': mail_from,
                    'email_to': mail_to,
                    'message_type':'email',
                    'body_html': 'En la Fecha %s se encontraron las \
                    siguientes Facturas Vencidas %s' % (date_act, str(ref_list_due)) ,
                        }
            mail_id = self.env.['mail.mail'].create(mail_vals)
            mail_id.send()


No se olviden dejar sus comentarios.




2 comentarios:

  1. Excelente, muy bueno.
    Muchas gracias por el tiempo que dedicas a compartir tu conocimiento.

    ResponderEliminar
  2. en esta sentencia he detectado un error:
    mail_id = self.env.['mail.mail'].create(mail_vals)
    Corregida sería :
    mail_id = self.env['mail.mail'].create(mail_vals)
    Un saludo.

    ResponderEliminar