feat(solucion_factible): soporte para cancelacion CFDI 3.3

En la cancelacion de CFDIs se regresa la respuesta del PAC usando el objeto `PacCancelAnswer` con
el estatus de cancelacion del CFDI
parent db1ec308
...@@ -12,6 +12,9 @@ from openerp import api, fields, models, tools ...@@ -12,6 +12,9 @@ from openerp import api, fields, models, tools
from openerp.tools.translate import _ from openerp.tools.translate import _
from ..models import exceptions as pac_exceptions from ..models import exceptions as pac_exceptions
from ..lib.pac_answer import PacCancelAnswer
from SOAPpy.Errors import HTTPError, UnknownTypeError, UnderflowError,\
RecursionError
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
...@@ -78,22 +81,28 @@ class ParamsPac(models.Model): ...@@ -78,22 +81,28 @@ class ParamsPac(models.Model):
wsdl_client.soapproxy.config.dumpSOAPIn = 0 wsdl_client.soapproxy.config.dumpSOAPIn = 0
wsdl_client.soapproxy.config.debug = 0 wsdl_client.soapproxy.config.debug = 0
wsdl_client.soapproxy.config.dict_encoding = 'UTF-8' wsdl_client.soapproxy.config.dict_encoding = 'UTF-8'
result = wsdl_client.cancelarAsincrono(*params) try:
result = wsdl_client.cancelarAsincrono(*params)
except (
HTTPError, UnknownTypeError, UnderflowError, RecursionError
) as e:
logger.info(e)
status_cancel = result['status'] or '' status_cancel = result['status'] or ''
mensaje_cancel = result['mensaje'] or '' mensaje_cancel = result['mensaje'] or ''
cancel_answer = PacCancelAnswer(uuid, status_cancel, status_cancel)
# Something went wrong and raise exception # Something went wrong and raise exception
if status_cancel in pac_exceptions.cancel_error_list: if cancel_answer.estatus in pac_exceptions.cancel_error_list:
raise pac_exceptions.CancelError( raise pac_exceptions.CancelError(
code=status_cancel, message=mensaje_cancel, code=cancel_answer, message=mensaje_cancel,
) )
# Cancel process was unsuccessful # Cancel process was unsuccessful
elif status_cancel not in '200': elif cancel_answer.estatus not in '200':
raise Exception( raise Exception(
' '.join(['Code', status_cancel, mensaje_cancel]), ' '.join(['Code', status_cancel, mensaje_cancel]),
) )
# If code result is 200 then all was okay # If code result is 200 then all was okay
else: else:
return True return cancel_answer
def _upload_ws_file(self, fdata=None): def _upload_ws_file(self, fdata=None):
""" """
......
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