Exemplo n.º 1
0
        public void EnviarComprobante(En_Comprobante comprobante)
        {
            long           idComprobante = comprobante.IdComprobante;
            Ad_Archivo     adArchivo     = new Ad_Archivo();
            Ad_Comprobante adComprobante = new Ad_Comprobante();
            En_Archivo     archivo       = adArchivo.ObtenerArchivoComprobante(idComprobante);
            string         nombre        = archivo.Nombre;

            byte[] contenido                = archivo.Contenido;
            string carpetaTemporal          = adArchivo.ObtenerRutaTemporal("TempENVIO");
            string carpetaArchivo           = Path.GetFileNameWithoutExtension(nombre);
            string rutaCarpetaXML           = Path.Combine(carpetaTemporal, carpetaArchivo);
            string rutaArchivoXML           = Path.Combine(rutaCarpetaXML, nombre);
            string rutaArchivoZIP           = string.Concat(rutaCarpetaXML, ".zip");
            string nombreArchivoZIP         = Path.GetFileName(rutaArchivoZIP);
            string nombreArchivoZipResponse = string.Concat("R-", nombreArchivoZIP);
            string rutaZipResponse          = Path.Combine(carpetaTemporal, nombreArchivoZipResponse);

            CrearCarpeta(rutaCarpetaXML);
            CrearArchivo(rutaArchivoXML, contenido);
            Comprimir(rutaArchivoZIP, rutaCarpetaXML);
            EliminarCarpeta(rutaCarpetaXML);

            ServicePointManager.ServerCertificateValidationCallback = (snder, cert, chain, error) => true;

            byte[] archivoZip = File.ReadAllBytes(rutaArchivoZIP);
            wsSUNAT.sendBillRequest   sendBill    = new wsSUNAT.sendBillRequest();
            wsSUNAT.billServiceClient billService = new wsSUNAT.billServiceClient();

            try
            {
                billService.Open();
                byte[] archivoResponse = billService.sendBill(nombreArchivoZIP, archivoZip, "");
                adComprobante.InsertarCdrPendiente(idComprobante, archivoResponse);
                billService.Close();
                log.Info(string.Format("El comprobante {0}-{1} de la empresa emisora con ruc: {2} se procesó correctamente.",
                                       comprobante.TipoComprobante, comprobante.SerieNumero, comprobante.RucEmisor));
            }
            catch (FaultException ex)
            {
                if (billService.State == CommunicationState.Opened)
                {
                    billService.Close();
                }
                string codigo           = ex.Code.Name.ToLower().Replace("client.", "");
                string mensaje          = ex.Message.ToString();
                int    reintento        = adComprobante.QuitarPendienteEnvio(idComprobante, codigo);
                string mensajeReintento = (reintento == 1) ? "Se dejará de reintentar el envío de éste comprobante." : "";

                log.Error(string.Format("El comprobante {0}-{1} de la empresa emisora con ruc: {2} obtuvo el código de error \"{3}\" con mensaje \"{4}\". {5}",
                                        comprobante.TipoComprobante, comprobante.SerieNumero, comprobante.RucEmisor, codigo, mensaje, mensajeReintento));
            }

            EliminarArchivo(rutaZipResponse);
            EliminarArchivo(rutaArchivoZIP);
        }