Auto pago de facturas en Odoo

2 de agosto de 2023 por
Gustavo Orrillo
| Sin comentarios aún
 

Un requerimiento solicitado con frecuencia por los usuarios es registrar facturas de gastos y que las mismas se encuentren pagadas automaticamente al ser validadas. Es para el registro de gastos menores; supongamos el pago de taxis, combustibles, facturas... la lista es interminable. Para ello desarrollamos el módulo bill_autopay, el cual se instala sin ningún requerimiento previo.

Como funciona el módulo? Al registrarse la factura de compras el usuario encontrará en el tab "Other info" un campo extra, autopay journal. Ahí puede seleccionar el método de pago de la factura.



Al confirmarse la factura de proveedores, se creará un pago el cual conciliará la factura.



Los principios usados en este módulo se pueden usar para otras aplicaciones. Como por ejemplo, registro de los egresos de las facturas ingresadas por medio de los archivos del IVA Digital (lo cual explicamos en otro post).

Anexo técnico


El módulo hace tres cosas interesantes. La primera es extender el método action_post del modelo account.move, de este modo invocamos la funcionalidad necesitada cada vez que se confirma una factura.

def action_post(self):
		​res = super(AccountMove, self).action_post()
		​...
		​return res


Después el módulo crea un pago y lo postea: 

vals_payment = {
​'partner_id': rec.partner_id.id,
​'journal_id': rec.autopay_journal_id.id,
'date': str(date.today()),
​'payment_type': 'outbound',
​'partner_type': 'supplier', ​'amount': rec.amount_total,
​'ref': rec.display_name, } payment_id = self.env['account.payment'].create(vals_payment) payment_id.action_post()

Y por último, determina las líneas a conciliar de la factura y del pago, y las concilia. De esa manera se marca como pagada una factura. Que es lo que describimos en el post " Como funciona la conciliación de facturas con pagos en Odoo".

aml_obj = self.env['account.move.line']
for move_line in rec.line_ids:
​​if move_line.account_id.account_type == 'liability_payable':
​aml_obj += move_line
for move_line in payment_id.line_ids:
​if move_line.account_id.account_type == 'liability_payable':
​aml_obj += move_line
aml_obj.reconcile()  



Gustavo Orrillo 2 de agosto de 2023
Compartir
Archivar
Identificarse dejar un comentario