Exemple #1
0
        public IHttpActionResult GetCadenaOriginal([FromBody] RequestCadenaOriginal request)
        {
            string CadenaOriginal = String.Empty;

            try
            {
                byte[]       bytesCertificado = Convert.FromBase64String(request.cert);
                byte[]       bytesLlave       = Convert.FromBase64String(request.key);
                FirmaDigital Firma            = new FirmaDigital(bytesCertificado, bytesLlave, request.password);
                CadenaOriginal = String.Format("{0}|{1}|{2}|{3}", Firma.GetDatosNombre(), Firma.GetDatosRfc(),
                                               Firma.GetDatosSerie(), Firma.GetDatosAutoridad());
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
            return(Ok(CadenaOriginal));
        }
Exemple #2
0
        /// <summary>
        /// Metodo para crear un pdf para los documentos fiscales
        /// </summary>
        /// <returns></returns>
        #region Proceso_WebService
        //public bool CrearPDF(string tabla, DatosPDF datosPDF, List<ResguardoPdf> resguardoPdf, string TablaCabezal)
        #endregion Proceso_WebService
        public bool CrearPDF(string tabla, DatosPDF datosPDF, List <ResguardoPdf> resguardoPdf, string TablaCabezal, string origenFE = null)
        {
            bool resultado  = false;
            int  opcFactura = 0;

            //Nombre del archivo sin extension y ruta
            nombreCompuesto = infoComprobante.TipoCFEInt + infoComprobante.SerieComprobante +
                              infoComprobante.NumeroComprobante;


            if (FrmEstadoContingencia.estadoContingencia.Equals("Y"))
            {
                //Nombre de Archivos con ruta para proceso de firma electronica
                archivoSinFirmar = RutasCarpetas.RutaCarpetaContingenciaComprobantes + nombreCompuesto + "sf.pdf";
                archivoFirmado   = RutasCarpetas.RutaCarpetaContingenciaComprobantes + nombreCompuesto + ".pdf";
            }
            else
            {
                //Nombre de Archivos con ruta para proceso de firma electronica
                archivoSinFirmar = RutasCarpetas.RutaCarpetaComprobantes + nombreCompuesto + "sf.pdf";
                archivoFirmado   = RutasCarpetas.RutaCarpetaComprobantes + nombreCompuesto + ".pdf";
            }

            ManteUdoLogo mante = new ManteUdoLogo();

            rutaLogo = mante.Consultar(true);
            bool estadoAdenda = false;

            try
            {
                //Muestra cursor de espera
                Cursor.Current = Cursors.WaitCursor;
                Document comprobante = new Document(PageSize.A4, 10, 10, 100, 160);      //centenario
                // Document comprobante = new Document(PageSize.A4, 10, 10, 230, 110);                //saint

                //Se crea el archivo que va contener el Pdf
                StreamWriter fac = File.CreateText(archivoSinFirmar);
                fac.Close();

                FileStream docCreado = new FileStream(archivoSinFirmar, FileMode.Open
                                                      , FileAccess.Write);

                //Se crea una instancia para escribir el contenido del pdf en el archivo fisico
                PdfWriter writer = PdfWriter.GetInstance(comprobante, docCreado);

                #region Encabezado y Pie de Pagina

                string domicilioFiscalEmisor = ObtenerDomicilioFiscalEmisor();

                //Se envia la informacion contenida en el encabezado de las paginas
                writer.PageEvent = new ZonasCFE.EventosPagina(infoComprobante, infoCAE, domicilioFiscalEmisor,
                                                              rutaLogo, datosPDF.DocNum); //, datosPDF);//saint

                #endregion Encabezado y Pie de Pagina

                //Se abre el documento pdf a crear
                comprobante.Open();

                ZonasCFE.CuerpoComprobante cuerpoComprobante = new ZonasCFE.CuerpoComprobante();

                bool ticket = ComprobarTicket(infoComprobante.TipoCFEInt);

                #region Receptor

                //Genera la zona de informacion del receptor de la factura
                comprobante = cuerpoComprobante.Receptor(infoComprobante, comprobante, writer, ticket,
                                                         datosPDF);

                #endregion Receptor

                #region Detalle Producto o Servicio

                if (infoComprobante.TipoCFEInt != 182 && infoComprobante.TipoCFEInt != 282)
                {
                    //Verificar el si la factura es para productos o servicios
                    if (infoComprobante.TipoDocumentoSAP.ToString().Equals("Servicio"))
                    {
                        opcFactura = 1;
                    }

                    //Comprueba si hay que agregar la adenda
                    if (Adenda())
                    {
                        estadoAdenda = true;
                    }

                    ///Genera el detalle de productos para la factura;
                    comprobante = cuerpoComprobante.DetalleMercaderia(comprobante, opcFactura, kilosComprobante,
                                                                      tabla, datosPDF, infoComprobante, TablaCabezal);
                }
                else
                {
                    List <ResguardoPdf> listaResguardo = new List <ResguardoPdf>();


                    foreach (ResguardoPdf facturaResguardo in resguardoPdf)
                    {
                        facturaResguardo.FechaFactura = infoComprobante.FechaComprobante;

                        if (datosPDF.DescuentoGeneral > 0)
                        {
                            facturaResguardo.MontoImponible = (double.Parse(facturaResguardo.MontoImponible) - datosPDF.DescuentoGeneral).ToString();
                        }
                        else if (datosPDF.DescuentoExtranjero > 0)
                        {
                            facturaResguardo.MontoImponible = (double.Parse(facturaResguardo.MontoImponible) - datosPDF.DescuentoExtranjero).ToString();
                        }

                        listaResguardo.Add(facturaResguardo);
                    }

                    comprobante = cuerpoComprobante.DetalleResguardo(comprobante, listaResguardo, infoComprobante.FechaComprobante);
                }


                #endregion Detalle Producto o Servicio

                //Se cierran los documentos utilizados
                comprobante.Close();
                docCreado.Close();

                //Firma digitalmente al documento creado
                FirmaDigital firma = new FirmaDigital();

                ManteUdoCertificadoDigital cerDigital = new ManteUdoCertificadoDigital();

                //Se obtiene informacion del certificado digital
                string rutaCertificado = cerDigital.ObtenerRutaCertificado();
                string passCertificado = cerDigital.ObtenerPassCertificado();

                if (rutaCertificado.Equals("") || passCertificado.Equals(""))
                {
                    errorCertificado = true;
                }
                else
                {
                    if (firma.infoCertificado(archivoSinFirmar, archivoFirmado, rutaCertificado, passCertificado))
                    {
                        //Valida que exista la ruta a borrar
                        if (!archivoSinFirmar.Equals(""))
                        {
                            //Borra el archivo pdf sin la firma electronica
                            System.IO.File.Delete(PDFs.archivoSinFirmar);
                        }

                        if (!FrmEstadoContingencia.estadoContingencia.Equals("Y"))
                        {
                            AccionesFueraHilo acciones = new AccionesFueraHilo();

                            #region Proceso_WebService
                            //acciones.Imprimir(archivoFirmado);
                            if (origenFE == null)
                            {
                                acciones.Imprimir(archivoFirmado);
                            }
                            else
                            {
                                string copiaArchivo = archivoFirmado.Replace(RutasCarpetas.RutaCarpetaComprobantes, RutasCarpetas.RutaCarpetaImpresion);
                                System.IO.File.Copy(archivoFirmado, copiaArchivo, false);
                                Program.colaImpresion.Enqueue(copiaArchivo);
                            }
                            #endregion Proceso_WebService

                            DatosCorreo datosCorreo = new DatosCorreo();
                            datosCorreo.CorreoReceptor  = infoComprobante.CorreoReceptor;
                            datosCorreo.EstadoAdenda    = estadoAdenda;
                            datosCorreo.NombreCompuesto = nombreCompuesto;
                            acciones.EjecutarCorreo(datosCorreo);
                            resultado = true;
                        }
                        else
                        {
                            resultado = true;
                        }
                    }
                    else
                    {
                        errorFirma = true;
                    }
                }
            }
            catch (Exception ex)
            {
                SAPbouiCOM.Framework.Application.SBO_Application.MessageBox("ERROR: CrearPDF/ " + ex.ToString());
            }
            finally
            {
                //Se quita el cursor de espera
                Cursor.Current = Cursors.AppStarting;
            }

            return(resultado);
        }
Exemple #3
0
        /// <summary>
        /// Metodo que genera el Acuse de Recibo
        /// </summary>
        public string GenerarACK(string estado, CertificadoRecibido sobreRecibido, string correoEmisor, List <ErrorValidarSobre> listaErrores, string nombreSobre)
        {
            ValidarSobre validaSobre = new ValidarSobre();

            //Se crea objeto de tipo Consecutivo
            Consecutivo   consecutivo = new Consecutivo();
            XmlTextWriter writer = null;
            string        nombreACK = "", nombreACKF = "";
            DateTime      fechaActual;

            try
            {
                //Genera el idReceptor para el ACK
                consecutivo.IdReceptor = validaSobre.generarIdReceptor();
                //Genera el TokenBinario para el ACK
                consecutivo.Token = validaSobre.generarTokenBinario(consecutivo.IdReceptor);

                ManteUdoConsecutivo manteConsecutivo = new ManteUdoConsecutivo();
                //Inserta en la tabla TFECONS el nuevo registro de consecutivo
                manteConsecutivo.Almacenar(consecutivo);

                //Obtiene la fecha actual
                fechaActual = DateTime.Now;
                //Formatea fecha de modo: YYYYMMDD
                string fechaFormateada = String.Format("{0:yyyyMMdd}", fechaActual);

                //Nombre del ACK segun formato de DGI
                nombreACK = "M_" + consecutivo.IdReceptor + "_Sob_" + sobreRecibido.RucEmisor + "_" + fechaFormateada + "_" + sobreRecibido.IdEmisor + "sf" + ".xml";
                //Nombre del ACK firmado digitalmente
                nombreACKF = "M_" + consecutivo.IdReceptor + "_Sob_" + sobreRecibido.RucEmisor + "_" + fechaFormateada + "_" + sobreRecibido.IdEmisor + ".xml";

                writer            = new XmlTextWriter(RutasCarpetas.RutaCarpetaAcuseRecibidoSobre + nombreACK, Encoding.UTF8);
                writer.Formatting = Formatting.Indented;

                //Empieza el documento ACKSOBRE
                writer.WriteStartDocument();

                //Agrega el primer elemento y el namespace
                writer.WriteStartElement("ACKSobre");
                writer.WriteAttributeString("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
                writer.WriteAttributeString("xmlns:xsd", "http://www.w3.org/2001/XMLSchema");
                writer.WriteAttributeString("version", "1.0");
                writer.WriteAttributeString("xmlns", "http://cfe.dgi.gub.uy");

                //Empieza el Tag de Caratula
                writer.WriteStartElement("Caratula");
                writer.WriteElementString("RUCReceptor", sobreRecibido.RucReceptor);
                writer.WriteElementString("RUCEmisor", sobreRecibido.RucEmisor);
                writer.WriteElementString("IDRespuesta", consecutivo.IdReceptor);
                writer.WriteElementString("NomArch", nombreSobre.ToLower());
                writer.WriteElementString("FecHRecibido", sobreRecibido.FechaSobre);
                writer.WriteElementString("IDEmisor", sobreRecibido.IdEmisor);
                writer.WriteElementString("IDReceptor", consecutivo.IdReceptor);
                writer.WriteElementString("CantidadCFE", sobreRecibido.CantCFE);
                writer.WriteElementString("Tmst", sobreRecibido.FechaEmision);

                //Termina el Tag de Caratula
                writer.WriteEndElement();

                //Empieza el Tag de Detalle
                writer.WriteStartElement("Detalle");
                writer.WriteElementString("Estado", estado);
                //Caso sobre rechazado
                if (estado.Equals("BS"))
                {
                    //Empieza el Tag de MotivosRechazo
                    writer.WriteStartElement("MotivosRechazo");
                    foreach (ErrorValidarSobre error in listaErrores)
                    {
                        writer.WriteElementString("Motivo", error.CodigoRechazo);
                        writer.WriteElementString("Glosa", error.GlosaRechazo);
                    }
                    //Termina el Tag de MotivosRechazo
                    writer.WriteEndElement();
                }
                //Caso sobre Aceptado
                else if (estado.Equals("AS"))
                {
                    //Empieza el Tag de ParamConsulta
                    writer.WriteStartElement("ParamConsulta");
                    writer.WriteElementString("Token", consecutivo.Token);

                    fechaFormateada = String.Format("{0:yyyy-MM-dd H:mm:ss}", fechaActual);

                    writer.WriteElementString("Fechahora", fechaFormateada);

                    //Termina el Tag de ParamConsulta
                    writer.WriteEndElement();
                }
                //Termina el Tag de Detalle
                writer.WriteEndElement();

                //Termina el Tag de ACKSobre
                writer.WriteEndElement();

                //Termina el documento SOBREACK
                writer.WriteEndDocument();

                //Envia el contenido al documento
                writer.Flush();

                //Cierra el documento
                writer.Close();

                FirmaDigital firma = new FirmaDigital();

                //Procede a intentar firmar el xml del ACK
                if (firma.FirmarACK(RutasCarpetas.RutaCarpetaAcuseRecibidoSobre + nombreACK,
                                    RutasCarpetas.RutaCarpetaAcuseRecibidoSobre + nombreACKF))
                {
                    if (!nombreACK.Equals(""))
                    {
                        //Borra el ACK generado
                        System.IO.File.Delete(RutasCarpetas.RutaCarpetaAcuseRecibidoSobre + nombreACK);

                        //Instancia para obtener datos de cuenta de correo electronico
                        ManteUdoCorreos mante  = new ManteUdoCorreos();
                        Correo          correo = mante.Consultar();

                        string[] adjuntos = new string[1];
                        adjuntos[0] = RutasCarpetas.RutaCarpetaAcuseRecibidoSobre + nombreACKF;

                        if (correo != null)
                        {
                            ///Envia correo con una cuenta de gmail
                            Mail mail = new Mail(correoEmisor, correo.Cuenta, Mensaje.cACKAsunto,
                                                 Mensaje.cACKMensaje, Mensaje.pdfServidorGmail, correo.Cuenta, correo.Clave, adjuntos, 587);
                            mail.enviarCorreoGmail();
                        }
                    }
                }
                else
                {
                    //Borra el ACK firmado
                    System.IO.File.Delete(RutasCarpetas.RutaCarpetaAcuseRecibidoSobre + nombreACK);
                }
            }
            catch (Exception)
            {
                if (!nombreACK.Equals(""))
                {
                    //Borra el ACK generado
                    System.IO.File.Delete(RutasCarpetas.RutaCarpetaAcuseRecibidoSobre + nombreACK);
                }

                //SAPbouiCOM.Framework.Application.SBO_Application.MessageBox("RespuestaSobre/Error: " + ex.ToString());
            }
            finally
            {
                //Cierre de documento
                writer.Close();
            }

            return(consecutivo.IdReceptor);
        }
Exemple #4
0
        /// <summary>
        /// Consume el web service
        /// </summary>
        /// <param name="parametros"></param>
        /// <returns></returns>
        public string Consumir(object parametros, out ControlSobres controlSobres, Boolean SuperUser)
        {
            string respuesta = "";

            WebServiceDGIMasivo      webServiceDgi            = new WebServiceDGIMasivo(parametros);
            ParametrosJobWsDGIMasivo parametrosJobWsDGIMasivo = parametros as ParametrosJobWsDGIMasivo;

            XmlDocument           xmlDocumento          = new XmlDocument();
            ManteUdoControlSobres manteUdoControlSobres = new ManteUdoControlSobres();

            controlSobres = new ControlSobres();

            try
            {
                if (SuperUser)
                {
                    FTP ftp = new FTP();


                    if (ftp.descargarArchivos(parametrosJobWsDGIMasivo.NombreSobre + ".xml", RutasCarpetas.RutaCarpetaSobresDgi, 0))
                    {
                    }
                    else if (ftp.descargarArchivos(parametrosJobWsDGIMasivo.NombreSobre + ".xml", RutasCarpetas.RutaCarpetaContingenciaSobresDgi, 5))
                    {
                    }
                }

                if (File.Exists((RutasCarpetas.RutaCarpetaSobresDgi + "\\" + parametrosJobWsDGIMasivo.NombreSobre + ".xml")))
                {
                    xmlDocumento.Load(RutasCarpetas.RutaCarpetaSobresDgi + "\\" + parametrosJobWsDGIMasivo.NombreSobre + ".xml");
                }
                else if (File.Exists((RutasCarpetas.RutaCarpetaContingenciaSobresDgi + "\\" + parametrosJobWsDGIMasivo.NombreSobre + ".xml")))
                {
                    xmlDocumento.Load(RutasCarpetas.RutaCarpetaContingenciaSobresDgi + "\\" + parametrosJobWsDGIMasivo.NombreSobre + ".xml");
                }



                controlSobres.Tipo       = parametrosJobWsDGIMasivo.Tipo + "";
                controlSobres.Serie      = parametrosJobWsDGIMasivo.Serie;
                controlSobres.Numero     = parametrosJobWsDGIMasivo.Numero + "";
                controlSobres.Estado     = "Enviado";
                controlSobres.UsuarioSap = ProcConexion.Comp.UserName;
                controlSobres            = manteUdoControlSobres.ObtenerDocEntry(controlSobres);
                manteUdoControlSobres.Actualizar(controlSobres);
                manteUdoControlSobres.ActualizarFirmaElectronica(controlSobres);


                // RE firmo el documento con la fecha del Envio
                FirmaDigital firma = new FirmaDigital();
                xmlDocumento = firma.refirmarDocumentos(xmlDocumento);


                // Envio el documento re firmado.
                respuesta = webServiceDgi.WSDGI.SendWSDGI(xmlDocumento.InnerXml, clsWSDGI.WsMethod.Envelope);

                if (!respuesta.Equals(""))
                {
                    respuesta = respuesta.Replace("<IDEmisor>0</IDEmisor>", "<IDEmisor>" + xmlDocumento.GetElementsByTagName("DGICFE:Idemisor").Item(0).InnerText + "</IDEmisor>");
                    //manteUdoControlSobres.Eliminar(controlSobres);
                }
            }
            catch (Exception)
            {
                if (controlSobres.Tipo != "" && controlSobres.Numero != "0" && controlSobres.Serie != "")
                {
                    controlSobres.Estado = "Pendiente";
                }

                else
                {
                    controlSobres.Estado = "NoAplica";
                }

                manteUdoControlSobres.Actualizar(controlSobres);
                respuesta = "";
            }

            finally
            {
                if (webServiceDgi != null)
                {
                    //Libera de memoria el objeto factura
                    GC.SuppressFinalize(webServiceDgi);
                    GC.Collect();
                }


                if (parametrosJobWsDGIMasivo != null)
                {
                    //Libera de memoria el objeto factura
                    GC.SuppressFinalize(parametrosJobWsDGIMasivo);
                    GC.Collect();
                }

                if (xmlDocumento != null)
                {
                    //Libera de memoria el objeto factura
                    GC.SuppressFinalize(xmlDocumento);
                    GC.Collect();
                }

                if (manteUdoControlSobres != null)
                {
                    //Libera de memoria el objeto factura
                    GC.SuppressFinalize(manteUdoControlSobres);
                    GC.Collect();
                }


                if (controlSobres != null)
                {
                    //Libera de memoria el objeto factura
                    GC.SuppressFinalize(controlSobres);
                    GC.Collect();
                }
            }

            return(respuesta);
        }