Commit 28cb9a66 authored by agb80's avatar agb80

fix(ir.attachment.facturae.mx): corrige el proceso de actualización del estado del CFDI

Cuando un CFDI no se cancelaba de manera inmediata se quedaba en estado pendiente de cancelar y
nunca cambiaba por errores en la lógica
parent c63990b9
......@@ -558,10 +558,13 @@ class IrAttachmentFacturaeMx(models.Model):
@api.multi
def action_consult_cancellation_status(self):
"""Consult current cfdi cancel status on SAT"""
consult_answer = None
self.ensure_one()
consult_answer = None
pacs = self.get_pacs()
if self.state in ["waiting", "cancel"]:
consult_answer = self.consult_cfdi_cancellation_status_sat()
consult_answer = pacs.consult_cfdi_cancellation_status(uuid=self.uuid)
if consult_answer:
self.cancel_cfdi()
elif consult_answer is None:
......@@ -837,12 +840,6 @@ class IrAttachmentFacturaeMx(models.Model):
# Call function which connects with PACs
return params_pacs.cancel_cfdi(uuid=self.uuid)
@api.multi
def consult_cfdi_cancellation_status_sat(self):
self.ensure_one()
params_pacs = self.get_pacs()
return params_pacs.consult_cfdi_cancellation_status(uuid=self.uuid)
@api.model
def get_pacs(self):
"""get all setup PACs in journal"""
......
......@@ -9,7 +9,7 @@ from openerp.tools.translate import _
from . import exceptions
logger = logging.getLogger(__name__)
_logger = logging.getLogger(__name__)
class ParamsPac(models.Model):
......@@ -26,6 +26,11 @@ class ParamsPac(models.Model):
"""function to inherit from custom PAC module"""
return {}
@classmethod
def get_driver_fc_status(self):
"""function to inherit from custom PAC module"""
return {}
@classmethod
def _get_pac_type(cls):
# From module of PAC inherit this function and add new available PAC
......@@ -101,12 +106,12 @@ class ParamsPac(models.Model):
# If all PACs would fail this variable will recollect
# all error in order to display them at the end
pacs_errors = []
# Get all possible drivers to perform action
functions = getattr(self, action)()
message_error = ""
for param_pac in self:
# Get all possible drivers to perform action
function = getattr(param_pac, action)()
try:
result = function[param_pac.pac_type](data)
result = functions[param_pac.pac_type](data)
# This kind of exception means that
# nevertheless you try with all PACs in the world
# CFDI would be failed
......@@ -114,7 +119,7 @@ class ParamsPac(models.Model):
exceptions.ValidationError, exceptions.PrimarySectorError,
exceptions.CancelError
) as error:
logger.debug(_(repr(error)))
_logger.debug(_(repr(error)))
raise UserError(
_(repr(error)),
)
......@@ -127,7 +132,7 @@ class ParamsPac(models.Model):
[param_pac.name, repr(error)],
)
pacs_errors.append(message_error.encode("UTF-8") + "\n")
logger.info(
_logger.info(
message_error.encode("UTF-8"),
)
continue
......@@ -174,7 +179,8 @@ class ParamsPac(models.Model):
"""
self.check_pacs()
cancel_estatus = self.fire_connection(uuid, "get_driver_fc_cancel")
return cancel_estatus.check_cancel_status()
result = cancel_estatus.check_cancel_status()
return result
@api.multi
def consult_cfdi_cancellation_status(self, uuid):
......@@ -183,8 +189,9 @@ class ParamsPac(models.Model):
:type uuid: string
"""
self.check_pacs()
consult_estatus = self.fire_connection(uuid, "get_driver_fc_consult")
return consult_estatus.check_cancel_status()
_logger.info("Consulting status for uuid: %s" % uuid)
result = self.fire_connection(uuid, "get_driver_fc_status")
return result
@api.multi
def check_pacs(self):
......
......@@ -63,9 +63,9 @@ class ParamsPac(models.Model):
factura_mx_type__fc.update({"pac_facturalo": self.cancel_xpd_cfdi})
return factura_mx_type__fc
def get_driver_fc_consult(self):
def get_driver_fc_status(self):
""" Implement driver for consult cfdi's"""
factura_mx_type__fc = super(ParamsPac, self).get_driver_fc_cancel()
factura_mx_type__fc = super(ParamsPac, self).get_driver_fc_status()
if factura_mx_type__fc is None:
factura_mx_type__fc = {}
factura_mx_type__fc.update({"pac_facturalo": self.consult_xpd_cfdi})
......@@ -230,7 +230,7 @@ class ParamsPac(models.Model):
estatus_cancelacion = resultado["a:EstatusCancelacion"]
estado_cfdi = resultado["a:Estado"]
consult_answer = PacConsultAnswer(uuid, estado_cfdi, estatus_cancelacion)
return consult_answer
return consult_answer.check_cancel_status()
@api.model
def cancel_xpd_cfdi(self, uuid):
......
......@@ -83,11 +83,11 @@ class ParamsPac(models.Model):
factura_mx_type__fc.update({"pac_finkok": self.cancel_cfdi_finkok})
return factura_mx_type__fc
def get_driver_fc_consult(self):
def get_driver_fc_status(self):
"""
Implement driver for consult CFDIs
"""
factura_mx_type__fc = super(ParamsPac, self).get_driver_fc_cancel()
factura_mx_type__fc = super(ParamsPac, self).get_driver_fc_status()
if factura_mx_type__fc is None:
factura_mx_type__fc = {}
factura_mx_type__fc.update({"pac_finkok": self.consult_cfdi_finkok_2})
......@@ -216,18 +216,17 @@ class ParamsPac(models.Model):
password = self.password.encode("utf-8")
emisor = cfdi.rfc_emisor.encode("utf-8")
receptor = cfdi.rfc_receptor.encode("utf-8")
# uuid = cfdi.uuid.encode("utf-8")
total = cfdi.total
client = Client(self.url_webservice_cancel, cache=None)
res = client.service.get_sat_status(
username, password, emisor, receptor, uuid, total
)
_logger.info(res)
_logger.debug("Finkok answer for cfdi status: %s" % res)
folio = res.sat
estatus_cancelacion = folio["EstatusCancelacion"] or ""
estado_cfdi = folio["Estado"]
consult_answer = PacConsultAnswer(uuid, estado_cfdi, estatus_cancelacion)
return consult_answer
return consult_answer.check_cancel_status()
def consult_cfdi_finkok(self, uuid):
""" Consul the cfdi status
......@@ -293,4 +292,4 @@ class ParamsPac(models.Model):
estatus_cancelacion = resultado["a:EstatusCancelacion"]
estado_cfdi = resultado["a:Estado"]
consult_answer = PacConsultAnswer(uuid, estado_cfdi, estatus_cancelacion)
return consult_answer
return consult_answer.check_cancel_status()
......@@ -64,8 +64,8 @@ class ParamsPac(models.Model):
factura_mx_type__fc.update({"pac_sf": self.sf_cancel})
return factura_mx_type__fc
def get_driver_fc_consult(self):
factura_mx_type__fc = super(ParamsPac, self).get_driver_fc_cancel()
def get_driver_fc_status(self):
factura_mx_type__fc = super(ParamsPac, self).get_driver_fc_status()
if factura_mx_type__fc is None:
factura_mx_type__fc = {}
factura_mx_type__fc.update({"pac_sf": self.sf_consult})
......@@ -372,4 +372,4 @@ class ParamsPac(models.Model):
elif status_cancelacion in "702":
estado_cfdi = "No encontrado"
consult_answer = PacConsultAnswer(uuid, estado_cfdi, status_cancelacion)
return consult_answer
return consult_answer.check_cancel_status()
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment