diff --git a/source/app/controllers/util.py b/source/app/controllers/util.py index 097a546..859a409 100644 --- a/source/app/controllers/util.py +++ b/source/app/controllers/util.py @@ -1313,6 +1313,15 @@ def upload_file(rfc, opt, file_obj): return {'status': 'error', 'ok': False} +def _get_pem_from_pfx(cert): + tmp_p12 = save_temp(cert.p12) + args = "openssl pkcs12 -in '{}' -clcerts -nodes -nocerts " \ + "-passin pass:'{}' | openssl rsa".format(tmp_p12, _get_md5(cert.rfc)) + result = _call(args) + _kill(tmp_p12) + return result.encode() + + def cancel_xml(auth, uuid, certificado): from .pac import Finkok as PAC @@ -1328,7 +1337,7 @@ def cancel_xml(auth, uuid, certificado): data = {'ok': True, 'msg': msg, 'row': {'estatus': 'Cancelada'}} pac = PAC(auth) result = pac.cancel_xml(certificado.rfc, str(uuid).upper(), - certificado.cer_pem.encode(), certificado.key_enc.encode()) + certificado.cer_pem.encode(), _get_pem_from_pfx(certificado)) if result: codes = {None: '', 'Could not get UUID Text': 'UUID no encontrado', diff --git a/source/app/models/main.py b/source/app/models/main.py index bbcdb9a..a03f6ff 100644 --- a/source/app/models/main.py +++ b/source/app/models/main.py @@ -2292,6 +2292,11 @@ class Facturas(BaseModel): auth = Emisor.get_auth() certificado = Certificado.select()[0] obj = Facturas.get(Facturas.id==id) + + if obj.version == '3.2': + msg = 'No es posible cancelar CFDI 3.2' + return {'ok': False, 'msg': msg} + data, result = util.cancel_xml(auth, obj.uuid, certificado) if data['ok']: obj.estatus = 'Cancelada' diff --git a/source/app/settings.py b/source/app/settings.py index df168c1..1c96b5f 100644 --- a/source/app/settings.py +++ b/source/app/settings.py @@ -117,4 +117,4 @@ IMPUESTOS = { DEFAULT_SAT_PRODUCTO = '01010101' DIR_FACTURAS = 'facturas' USAR_TOKEN = False -CANCEL_SIGNATURE = True \ No newline at end of file +CANCEL_SIGNATURE = False \ No newline at end of file