diff --git a/facho/cli.py b/facho/cli.py index 399c679..7cf4382 100644 --- a/facho/cli.py +++ b/facho/cli.py @@ -312,6 +312,26 @@ def generate_nomina(private_key, passphrase, scriptname, ssl=True, sign=False, u else: DIANWrite(xml, output) +@click.command() +@click.option('--private-key', required=True) +@click.option('--public-key', required=True) +@click.option('--habilitacion/--produccion', default=False) +@click.option('--password') +@click.argument('filename', required=True) +@click.argument('zipfile', type=click.Path(exists=True)) +def soap_send_nomina_sync(private_key, public_key, habilitacion, password, filename, zipfile): + from facho.fe.client import dian + + client = dian.DianSignatureClient(private_key, public_key, password=password) + req = dian.SendNominaSync + if habilitacion: + req = dian.Habilitacion.SendNominaSync + resp = client.request(req( + filename, + open(zipfile, 'rb').read() + )) + print(resp) + @click.command() @click.option('--private-key', type=click.Path(exists=True)) @click.option('--passphrase') @@ -347,7 +367,8 @@ main.add_command(soap_get_status) main.add_command(soap_get_status_zip) main.add_command(soap_get_numbering_range) main.add_command(generate_invoice) -main.add_command(generate_nomina) main.add_command(validate_invoice) main.add_command(sign_xml) main.add_command(sign_verify_xml) +main.add_command(generate_nomina) +main.add_command(soap_send_nomina_sync) diff --git a/facho/fe/client/dian.py b/facho/fe/client/dian.py index d7c90a5..cd6feca 100644 --- a/facho/fe/client/dian.py +++ b/facho/fe/client/dian.py @@ -175,7 +175,21 @@ class GetStatusZip(SOAPService): def build_response(self, as_dict): return GetStatusResponse.fromdict(as_dict[0]) +@dataclass +class SendNominaSync(SOAPService): + fileName: str + contentFile: bytes + def get_wsdl(self): + return 'https://vpfe.dian.gov.co/WcfDianCustomerServices.svc?wsdl' + + def get_service(self): + return 'SendNominaSync' + + def build_response(self, as_dict): + return as_dict + + class Habilitacion: WSDL = 'https://vpfe-hab.dian.gov.co/WcfDianCustomerServices.svc?wsdl' @@ -203,6 +217,9 @@ class Habilitacion: def get_wsdl(self): return Habilitacion.WSDL + class SendNominaSync(SendNominaSync): + def get_wsdl(self): + return Habilitacion.WSDL class DianGateway: