add odoo erp

This commit is contained in:
Valentin Romero
2026-06-30 22:08:52 -03:00
parent 03294769a4
commit 42bc368be5
8 changed files with 668 additions and 0 deletions
@@ -0,0 +1 @@
from . import account_move
@@ -0,0 +1,75 @@
from odoo import models, _
import requests
import json
import logging
_logger = logging.getLogger(__name__)
class AccountMove(models.Model):
_inherit = "account.move"
def _send_payment_status_webhook(self):
"""Send webhook notification when payment status changes"""
for record in self:
states = {
"not_paid": "PENDING",
"paid": "PAID",
"cancel": "CANCELED",
}
if not record.ref or len(record.ref) == 0:
_logger.warning(
f"Skipping webhook for invoice with empty reference (ID: {record.id})"
)
continue
if not record.payment_state or len(record.payment_state) == 0:
_logger.warning(
f"Skipping webhook for invoice {record.ref} with empty payment state"
)
continue
if not record.payment_state in states.keys():
_logger.warning(
f"Skipping webhook for invoice {record.ref} with unsupported payment state {record.payment_state}"
)
continue
data = {
"invoiceId": record.ref,
"status": states.get(record.payment_state, "UNKNOWN"),
}
webhook_url = (
self.env["ir.config_parameter"]
.sudo()
.get_param("account.api.invoice.state.webhook")
)
try:
headers = {"Content-Type": "application/json"}
response = requests.post(
webhook_url, data=json.dumps(data), headers=headers, timeout=30
)
if response.status_code == 200:
_logger.info(
f"Notificación de pago enviada exitosamente para factura {record.ref}"
)
else:
_logger.warning(
f"Error al enviar notificación de pago para factura {record.ref}. Status code: {response.status_code}"
)
except requests.exceptions.RequestException as e:
_logger.error(
f"Error al enviar notificación de pago para factura {record.ref}: {str(e)}"
)
except Exception as e:
_logger.error(
f"Error inesperado al procesar notificación de pago para factura {record.ref}: {str(e)}"
)
def _compute_payment_state(self):
super()._compute_payment_state()
for record in self:
record._send_payment_status_webhook()