from lxml import etree
from requests import Session
from zeep import Client
from zeep.plugins import HistoryPlugin
from zeep.transports import Transport

"""Funcion para cancelar"""
history = HistoryPlugin()
session = Session()
transport = Transport(session=session)
url_cancel = "https://demo-facturacion.finkok.com/servicios/soap/cancel.wsdl"
cliente = Client(wsdl=url_cancel, plugins=[history], transport=transport)

cliente.set_ns_prefix("soapenv", "http://schemas.xmlsoap.org/soap/envelope/")
cliente.set_ns_prefix("can", "http://facturacion.finkok.com/cancel")
cliente.set_ns_prefix("apps", "apps.services.soap.core.views")



# NOTE cancelado con motivo 01
uuid = "FA3C0C6E-22E7-5259-B1B4-ADED0AAEE524"
folio_sustitucion = "CEE32469-A577-5672-A504-B08631E1426C"

# NOTE cancelado con motivo 02
#uuid = "FDE798C2-4B38-564D-96FE-AF26927B1EC5"

# NOTE cancelado con motivo 03
# uuid = "2321EE26-A14F-5584-8F35-759646B19A24"

# NOTE cancelado con motivo 04
#uuid = ""

#uuid=""
#folio_sustitucion=""

# Comprobante emitido con errores de relación
#motivo_cancelacion = "01"

# Comprobante emitido con errores sin relación
#motivo_cancelacion = "02"

# No se llevó acabo la operación
motivo_cancelacion = "03"

# Operación nominativa relacionada en una factura global
#motivo_cancelacion = "04"

uuids_factory = cliente.get_type("apps:UUID")
uuids_obj = uuids_factory(uuid, folio_sustitucion, motivo_cancelacion)

uuids_array_factory = cliente.get_type("apps:UUIDArray")
uuids_array_obj = uuids_array_factory([uuids_obj])

username = "facturacion@hbues.net"
password = "@EnumaElish90#."
taxpayer_id = "IVD920810GU2"
serial = "30001000000500003434"

cancel_response = cliente.service.sign_cancel(
    uuids_array_obj, username, password, taxpayer_id, serial, False
)
# Get SOAP Resquest
request = etree.tostring(history.last_sent["envelope"])
req_file = open("request_file.xml_03", "w")
req_file.write(request.decode("UTF-8"))
req_file.close()

# Get SOAP Response
response = etree.tostring(history.last_received["envelope"])
res_file = open("response_file.xml_03", "w")
res_file.write(response.decode("UTF-8"))
res_file.close()

print(cancel_response)
