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()
Excelente, muy bueno.
ResponderBorrarMuchas gracias por el tiempo que dedicas a compartir tu conocimiento.
Es un placer y un gusto pode ayudarlos.
Borraren esta sentencia he detectado un error:
ResponderBorrarmail_id = self.env.['mail.mail'].create(mail_vals)
Corregida sería :
mail_id = self.env['mail.mail'].create(mail_vals)
Un saludo.
Cierto, gracias por la corrección
BorrarClaro y conciso. Gracias.
ResponderBorrarA ti por comentar y dejar una satisfacción al saber que te sirvio de algo.
Borrar