add odoo erp
This commit is contained in:
@@ -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()
|
||||
Reference in New Issue
Block a user