<?php
class SiatFacturacion{
    var $token="apikey: TokenApi eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJNQVJHQSBGTE9SRVMiLCJjb2RpZ29TaXN0ZW1hIjoiNzcxMkU0QkIxNkRBQ0M4MTQyRjJERUUiLCJuaXQiOiJINHNJQUFBQUFBQUFBRE15TmpReE1qYzJNTFFBQUFYYll2OEtBQUFBIiwiaWQiOjczNjkyNSwiZXhwIjoxNzQyOTE4NDU4LCJpYXQiOjE3MTEzOTY4MjgsIm5pdERlbGVnYWRvIjoyMzE0MjczMDE4LCJzdWJzaXN0ZW1hIjoiU0ZFIn0.j7neh8_a_U-YS-frt0E3DAbrkE6fVd5B1i-pwUAZZWBviwFrsG2UusfRlCCvxPSZwKI8iB0D6kAu4IgpJMr4Bw";
    var $dir="ServicioFacturacionCompraVenta?wsdl";
    public function __construct()
    {
        
    }

    

    public function recepcionFactura($datosgenerales,$archivo,$fechaEnvio,$hashArchivo){
        $wsdl=$datosgenerales['ambiente']['enlace'].$this->dir;

        $codigoAmbiente = $datosgenerales['sistema']['ambiente'];
        $codigoDocumentoSector = 1;
        $codigoEmision = 1;
        $codigoModalidad = $datosgenerales['sistema']['modalidad'];
        $codigoPuntoVenta=$datosgenerales['puntoventa']['codigoPuntoVenta'];
        $codigoSistema=$datosgenerales['sistema']['codigo'];
        $codigoSucursal = $datosgenerales['puntoventa']['codigoSucursal'];
        $cufd = $_SESSION['scufd'];
        $cuis = $_SESSION['scuis'];
        $nit=$datosgenerales['empresa']['nit'];
        $tipoFacturaDocumento = 1;
        $archivo = $archivo;
        $fechaEnvio = $fechaEnvio;
        $hashArchivo = $hashArchivo;

        $params = array("SolicitudServicioRecepcionFactura" => 
        array(
            "codigoAmbiente" => $codigoAmbiente,
            "codigoDocumentoSector" => $codigoDocumentoSector,
            "codigoEmision" => $codigoEmision,
            "codigoModalidad" => $codigoModalidad,
            "codigoPuntoVenta" => $codigoPuntoVenta,
            "codigoSistema" => $codigoSistema,
            "codigoSucursal" => $codigoSucursal,
            "cufd" => $cufd,
            "cuis" => $cuis,
            "nit" => $nit,
            "tipoFacturaDocumento" => $tipoFacturaDocumento,
            "archivo" => $archivo,
            "fechaEnvio" => $fechaEnvio,
            "hashArchivo" => $hashArchivo
        ));

        $options = array(
            'http' => array(
                'header' => "apikey: TokenApi ".$datosgenerales['empresa']['token'],
                'timeout' => 5
            )
        );

        $context = stream_context_create($options);

        try {
            $client = new \SoapClient($wsdl,[
                'stream_context' => $context,
                'cache_wsdl' => WSDL_CACHE_NONE,
                'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | SOAP_COMPRESSION_DEFLATE,
            ]);
            $result = $client->recepcionFactura($params);
        } catch (SoapFault $fault) {
            $result = array(
                'mensaje' => "El Servicio de Impuestos Nacionales se encuentra sin Conexión. \n Comuniquese con Soporte Técnico para emitir facturas fuera de línea"
            );
            print_r(json_encode($result));
            exit();
        }
        return $result;
    }

    public function anulacionFactura($datosgenerales,$cuf){
        $wsdl=$datosgenerales['ambiente']['enlace'].$this->dir;

        $codigoAmbiente = $datosgenerales['sistema']['ambiente'];
        $codigoDocumentoSector = 1;
        $codigoEmision = 1;
        $codigoModalidad = $datosgenerales['sistema']['modalidad'];
        $codigoPuntoVenta=$datosgenerales['puntoventa']['codigoPuntoVenta'];
        $codigoSistema=$datosgenerales['sistema']['codigo'];
        $codigoSucursal = $datosgenerales['puntoventa']['codigoSucursal'];
        $cufd = $_SESSION['scufd'];
        $cuis = $_SESSION['scuis'];
        $nit=$datosgenerales['empresa']['nit'];
        $tipoFacturaDocumento = 1;
        $codigoMotivo = 1;
        $cuf = $cuf;

        $params = array("SolicitudServicioAnulacionFactura" => 
        array(
            "codigoAmbiente" => $codigoAmbiente,
            "codigoDocumentoSector" => $codigoDocumentoSector,
            "codigoEmision" => $codigoEmision,
            "codigoModalidad" => $codigoModalidad,
            "codigoPuntoVenta" => $codigoPuntoVenta,
            "codigoSistema" => $codigoSistema,
            "codigoSucursal" => $codigoSucursal,
            "cufd" => $cufd,
            "cuis" => $cuis,
            "nit" => $nit,
            "tipoFacturaDocumento" => $tipoFacturaDocumento,
            "codigoMotivo" => $codigoMotivo,
            "cuf" => $cuf
        ));

        $options = array(
            'http' => array(
                'header' => "apikey: TokenApi ".$datosgenerales['empresa']['token'],
                'timeout' => 5
            )
        );

        $context = stream_context_create($options);

        try {
            $client = new \SoapClient($wsdl,[
                'stream_context' => $context,
                'cache_wsdl' => WSDL_CACHE_NONE,
                'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | SOAP_COMPRESSION_DEFLATE,
            ]);
            $result = $client->anulacionFactura($params);
        } catch (SoapFault $fault) {
            $result = $fault;
        }
        return $result;
    }


    public function reversionAnulacionFactura($datosgenerales,$cuf){
        $wsdl=$datosgenerales['ambiente']['enlace'].$this->dir;

        $codigoAmbiente = $datosgenerales['sistema']['ambiente'];
        $codigoDocumentoSector = 1;
        $codigoEmision = 1;
        $codigoModalidad = $datosgenerales['sistema']['modalidad'];
        $codigoPuntoVenta=$datosgenerales['puntoventa']['codigoPuntoVenta'];
        $codigoSistema=$datosgenerales['sistema']['codigo'];
        $codigoSucursal = $datosgenerales['puntoventa']['codigoSucursal'];
        $cufd = $_SESSION['scufd'];
        $cuis = $_SESSION['scuis'];
        $nit=$datosgenerales['empresa']['nit'];
        $tipoFacturaDocumento = 1;
        $cuf = $cuf;

        $params = array("SolicitudServicioReversionAnulacionFactura" => 
        array(
            "codigoAmbiente" => $codigoAmbiente,
            "codigoDocumentoSector" => $codigoDocumentoSector,
            "codigoEmision" => $codigoEmision,
            "codigoModalidad" => $codigoModalidad,
            "codigoPuntoVenta" => $codigoPuntoVenta,
            "codigoSistema" => $codigoSistema,
            "codigoSucursal" => $codigoSucursal,
            "cufd" => $cufd,
            "cuis" => $cuis,
            "nit" => $nit,
            "tipoFacturaDocumento" => $tipoFacturaDocumento,
            "cuf" => $cuf
        ));

        $options = array(
            'http' => array(
                'header' => "apikey: TokenApi ".$datosgenerales['empresa']['token'],
                'timeout' => 5
            )
        );

        $context = stream_context_create($options);

        try {
            $client = new \SoapClient($wsdl,[
                'stream_context' => $context,
                'cache_wsdl' => WSDL_CACHE_NONE,
                'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | SOAP_COMPRESSION_DEFLATE,
            ]);
            $result = $client->reversionAnulacionFactura($params);
        } catch (SoapFault $fault) {
            $result = $fault;
        }
        return $result;
    }



    public function recepcionPaqueteFactura($datosgenerales,$archivo,$fechaEnvio,$hashArchivo,$cantidad,$codigoEvento,$cafc){
        $wsdl=$datosgenerales['ambiente']['enlace'].$this->dir;
        //$descripcion="CORTE DEL SERVICIO DE INTERNET";
        $codigoAmbiente = $datosgenerales['sistema']['ambiente'];
        $codigoDocumentoSector = 1;
        $codigoEmision = 2;
        $codigoModalidad = $datosgenerales['sistema']['modalidad'];
        $codigoPuntoVenta=$datosgenerales['puntoventa']['codigoPuntoVenta'];
        $codigoSistema=$datosgenerales['sistema']['codigo'];
        $codigoSucursal = $datosgenerales['puntoventa']['codigoSucursal'];
        $cufd = $_SESSION['scufd'];
        $cuis = $_SESSION['scuis'];
        $nit=$datosgenerales['empresa']['nit'];
        $tipoFacturaDocumento = 1;
        $archivo = $archivo;
        $fechaEnvio = $fechaEnvio;
        $hashArchivo = $hashArchivo;
        $cantidadFacturas=$cantidad;
        $cafc=$cafc;
        $codigoEvento=$codigoEvento;
        $params = array("SolicitudServicioRecepcionPaquete" => 
        array(
            //"descripcion" => $descripcion,
            "codigoAmbiente" => $codigoAmbiente,
            "codigoDocumentoSector" => $codigoDocumentoSector,
            "codigoEmision" => $codigoEmision,
            "codigoModalidad" => $codigoModalidad,
            "codigoPuntoVenta" => $codigoPuntoVenta,
            "codigoSistema" => $codigoSistema,
            "codigoSucursal" => $codigoSucursal,
            "cufd" => $cufd,
            "cuis" => $cuis,
            "nit" => $nit,
            "tipoFacturaDocumento" => $tipoFacturaDocumento,
            "archivo" => $archivo,
            "fechaEnvio" => $fechaEnvio,
            "hashArchivo" => $hashArchivo,
            "cafc"=>$cafc,
            "cantidadFacturas" => $cantidadFacturas,
            "codigoEvento" => $codigoEvento
            
        ));

        $options = array(
            'http' => array(
                'header' => $this->token,
                'timeout' => 5
            )
        );

        $context = stream_context_create($options);

        try {
            $client = new \SoapClient($wsdl,[
                'stream_context' => $context,
                'cache_wsdl' => WSDL_CACHE_NONE,
                'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | SOAP_COMPRESSION_DEFLATE,
            ]);
            $result = $client->recepcionPaqueteFactura($params);
        } catch (SoapFault $fault) {
            $result = $fault;
        }
        return $result;
    }




    public function validacionRecepcionPaqueteFactura($datosgenerales,$codigoRecepcion){
        $wsdl=$datosgenerales['ambiente']['enlace'].$this->dir;
        $codigoAmbiente = $datosgenerales['sistema']['ambiente'];
        $codigoDocumentoSector = 1;
        $codigoEmision = 2;
        $codigoModalidad = $datosgenerales['sistema']['modalidad'];
        $codigoPuntoVenta=$datosgenerales['puntoventa']['codigoPuntoVenta'];
        $codigoSistema=$datosgenerales['sistema']['codigo'];
        $codigoSucursal = $datosgenerales['puntoventa']['codigoSucursal'];
        $cufd = $_SESSION['scufd'];
        $cuis = $_SESSION['scuis'];
        $nit=$datosgenerales['empresa']['nit'];
        $tipoFacturaDocumento = 1;
        $codigoRecepcion= $codigoRecepcion;
        $params = array("SolicitudServicioValidacionRecepcionPaquete" => 
        array(
            "codigoAmbiente" => $codigoAmbiente,
            "codigoDocumentoSector" => $codigoDocumentoSector,
            "codigoEmision" => $codigoEmision,
            "codigoModalidad" => $codigoModalidad,
            "codigoPuntoVenta" => $codigoPuntoVenta,
            "codigoSistema" => $codigoSistema,
            "codigoSucursal" => $codigoSucursal,
            "cufd" => $cufd,
            "cuis" => $cuis,
            "nit" => $nit,
            "tipoFacturaDocumento" => $tipoFacturaDocumento,
            "codigoRecepcion" => $codigoRecepcion
            
        ));

        $options = array(
            'http' => array(
                'header' => $this->token,
                'timeout' => 5
            )
        );

        $context = stream_context_create($options);

        try {
            $client = new \SoapClient($wsdl,[
                'stream_context' => $context,
                'cache_wsdl' => WSDL_CACHE_NONE,
                'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | SOAP_COMPRESSION_DEFLATE,
            ]);
            $result = $client->validacionRecepcionPaqueteFactura($params);
        } catch (SoapFault $fault) {
            $result = $fault;
        }
        return $result;
    }










   
    public function registroEventoSignificativo($codigoMotivoEvento,$cufdEvento,$fechaHoraFinEvento,$fechaHoraInicioEvento){
        $descripcion=["CORTE DEL SERVICIO DE INTERNET",
        "INACCESIBILIDAD AL SERVICIO WEB DE LA ADMINISTRACIÓN TRIBUTARIA",
        "INGRESO A ZONAS SIN INTERNET POR DESPLIEGUE DE PUNTO DE VENTA EN VEHICULOS AUTOMOTORES",
        "VENTA EN LUGARES SIN INTERNET",
        "VIRUS INFORMÁTICO O FALLA DE SOFTWARE",
        "CAMBIO DE INFRAESTRUCTURA DEL SISTEMA O FALLA DE HARDWARE",
        "CORTE DE SUMINISTRO DE ENERGIA ELECTRICA"];
        $wsdl = "https://pilotosiatservicios.impuestos.gob.bo/v2/FacturacionOperaciones?wsdl";
        $codigoAmbiente = 2;
        $codigoMotivoEvento=$codigoMotivoEvento;
        $codigoPuntoVenta=0;
        $codigoSistema = "7712E4BB16DACC8142F2DEE";
        $codigoSucursal = 0;
        $cufd= $_SESSION['scufd'];
        $cufdEvento=$cufdEvento;
        $cuis = $_SESSION['scuis'];
        $desc=$descripcion[$codigoMotivoEvento-1];
        $fechaHoraFinEvento=$fechaHoraFinEvento;
        $fechaHoraInicioEvento=(string)$fechaHoraInicioEvento;
        $nit = "2314273018";
        $params = array("SolicitudEventoSignificativo" =>
        array(
            "codigoAmbiente" => $codigoAmbiente,
            "codigoMotivoEvento" => $codigoMotivoEvento,
            "codigoPuntoVenta" => $codigoPuntoVenta,
            "codigoSistema" => $codigoSistema,
            "codigoSucursal" => $codigoSucursal,
            "cufd" => $cufd,
            "cufdEvento" => $cufdEvento,
            "cuis" => $cuis,
            "descripcion" => $desc,
            "fechaHoraFinEvento" => $fechaHoraFinEvento,
            "fechaHoraInicioEvento" => $fechaHoraInicioEvento,
            "nit" => $nit
        ));

        $options = array(
            'http' => array(
                'header' => $this->token,
                'timeout' => 5
            )
        );

        $context = stream_context_create($options);

        try {
            $client = new \SoapClient($wsdl,[
                'stream_context' => $context,
                'cache_wsdl' => WSDL_CACHE_NONE,
                'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | SOAP_COMPRESSION_DEFLATE,
            ]);
            $result = $client->registroEventoSignificativo($params);
        } catch (SoapFault $fault) {
            $result = false;
        }
        return $result;
    }

     /////////////////////////////////////////////////////////////////////////////
    ////////////////////////////EXTRAS///////////////////////////////////////////
    
    
    /////////////////////////////////////////////////////////////
    public function verificarNit($nitEnviado){
        $wsdl = "https://pilotosiatservicios.impuestos.gob.bo/v2/FacturacionCodigos?wsdl";
        $codigoAmbiente = 2;
        $codigoModalidad = 1;
        $codigoSistema = "7712E4BB16DACC8142F2DEE";
        $codigoSucursal = 0;
        $cuis = $_SESSION['scuis'];
        $nit = "2314273018";
        $nitParaVerificacion = $nitEnviado;
        $params = array("SolicitudVerificarNit" => 
        array(
            "codigoAmbiente" => $codigoAmbiente,
            "codigoModalidad" => $codigoModalidad,
            "codigoSistema" => $codigoSistema,
            "codigoSucursal" => $codigoSucursal,
            "cuis" => $cuis,
            "nit" => $nit,
            "nitParaVerificacion" => $nitParaVerificacion,
        ));

        $options = array(
            'http' => array(
                'header' => $this->token,
                'timeout' => 5
            )
        );

        $context = stream_context_create($options);

        try {
            $client = new \SoapClient($wsdl,[
                'stream_context' => $context,
                'cache_wsdl' => WSDL_CACHE_NONE,
                'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | SOAP_COMPRESSION_DEFLATE,
            ]);
            $result = $client->verificarNit($params);
        } catch (SoapFault $fault) {
            $result = $fault;
        }
        return $result;
    }

}
?>