Пример #1
0
        /// <summary>
        /// Metodo para obtener informacion de la firma digital
        /// </summary>
        public void ObtenerFirmaDigital()
        {
            ManteUdoCertificadoDigital manteUdoFirma = new ManteUdoCertificadoDigital();

            Certificado certificado = manteUdoFirma.Consultar();

            RUTA_CERTIFICADO  = certificado.RutaCertificado;
            CLAVE_CERTIFICADO = certificado.Clave;
        }
Пример #2
0
        /// <summary>
        /// Metodo para obtener informacion de la firma digital
        /// </summary>
        public void ObtenerFirmaDigital()
        {
            ManteUdoCertificadoDigital manteUdoFirma = new ManteUdoCertificadoDigital();

            Certificado certificado = manteUdoFirma.Consultar();

            if (certificado != null)
            {
                RUTA_CERTIFICADO  = certificado.RutaCertificado;
                CLAVE_CERTIFICADO = certificado.Clave;
            }
            else
            {
                app.MessageBox(Mensaje.warNoConfigFirmaDigital);
            }
        }
Пример #3
0
        /// <summary>
        /// Metodo para obtener informacion de la firma digital
        /// </summary>
        public bool ObtenerFirmaDigital()
        {
            ManteUdoCertificadoDigital manteUdoFirma = new ManteUdoCertificadoDigital();

            Certificado certificado = manteUdoFirma.Consultar();

            if (certificado != null)
            {
                RUTA_CERTIFICADO  = certificado.RutaCertificado;
                CLAVE_CERTIFICADO = certificado.Clave;

                return(true);
            }
            else
            {
                return(false);
            }
        }
Пример #4
0
        /// <summary>
        /// Ajustar el formulario
        /// </summary>
        protected override void AjustarFormulario(string formUID)
        {
            ManteUdoCertificadoDigital mantenimiento = new ManteUdoCertificadoDigital();

            try
            {
                //Se obtiene datos del certificado, si existen
                Certificado certificado = mantenimiento.Consultar();
                if (certificado != null)
                {
                    //Se asigna la ruta del certificado
                    ((EditText)SAPbouiCOM.Framework.Application.SBO_Application.Forms.Item("frmCerDig").Items.Item("txtRuta").Specific).Value = certificado.RutaCertificado;
                }
            }
            catch (Exception)
            {
            }
        }
Пример #5
0
        /// <summary>
        /// Retorna el string del certificado indicado.
        /// </summary>
        /// <param name="ubicacionCertificado"></param>
        /// <returns></returns>
        public static string ObtenerCadenaCertificado()
        {
            string resultado = "";

            try
            {
                ManteUdoCertificadoDigital mante = new ManteUdoCertificadoDigital();

                Certificado certificado = mante.Consultar();

                X509Certificate2 objCert = new X509Certificate2(certificado.RutaCertificado, certificado.Clave);
                resultado = Convert.ToBase64String(objCert.GetRawCertData());
            }
            catch (Exception ex)
            {
                resultado = ex.Message;
            }

            return(resultado);
        }
Пример #6
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);
        }
Пример #7
0
        public XmlDocument refirmarDocumentos(XmlDocument XmlDocument)
        {
            string nombre = String.Empty;

            ManteUdoCertificadoDigital cerDigital = new ManteUdoCertificadoDigital();

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

            DateTime fecha      = DateTime.Now;
            string   fechaFirma = fecha.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ssK");

            string strRutReceptor, strFecha, strFechaFirma, strInfoCertificado, strFechaEmision, strCodSucursal;

            XmlDocument documento = new XmlDocument();

            strRutReceptor     = "DGICFE:RutReceptor";
            strFecha           = "DGICFE:Fecha";
            strInfoCertificado = "DGICFE:X509Certificate";
            strFechaFirma      = "ns1:TmstFirma";
            strFechaEmision    = "ns1:FchEmis";
            strCodSucursal     = "ns1:CdgDGISucur";

            nombre = String.Empty;

            documento = new XmlDocument();
            documento.PreserveWhitespace = true;
            documento = XmlDocument;

            FirmaDigital firma           = new FirmaDigital();
            string       infoCertificado = ProcTransformacion.ObtenerCadenaCertificado();

            XmlNode nodoCertificado = documento.GetElementsByTagName(strInfoCertificado).Item(0);

            nodoCertificado.InnerXml = infoCertificado;
            // End Caratula /

            // Begin CFE /
            XmlNode nodoFechaFirma = documento.GetElementsByTagName(strFechaFirma).Item(0);

            nodoFechaFirma.InnerXml = fechaFirma;

            // End CFE /

            #region CFE_FIRMA
            // Elimino el nodo Firma del template
            XmlNode nodoFirma = documento.GetElementsByTagName("Signature").Item(0);
            documento.GetElementsByTagName("ns1:CFE").Item(0).RemoveChild(nodoFirma);

            //Crea nuevo documento con el CFE para firmar
            XmlDocument docFirma = new XmlDocument();
            docFirma.PreserveWhitespace = true;

            XmlNode cfe   = documento.DocumentElement.GetElementsByTagName("ns1:CFE").Item(0);
            XmlNode nuevo = docFirma.ImportNode(cfe, true);
            docFirma.AppendChild(nuevo);

            try
            {
                // Create a new CspParameters object to specify
                // a key container.
                CspParameters cspParams = new CspParameters();
                cspParams.KeyContainerName = rutaCertificado;

                // Create a new RSA signing key and save it in the container.
                RSACryptoServiceProvider rsaKey = new RSACryptoServiceProvider(cspParams);

                // Obtengo cadena certificado /
                byte[] pfxBlob = File.ReadAllBytes(rutaCertificado);

                // Sign the XML document.
                firma.SignXml(docFirma, pfxBlob, rsaKey, clave);


                // Elimino el CFE del template //
                documento.DocumentElement.RemoveChild(cfe);

                // Agrego el CFE firmado //
                XmlNode cfeFirmado = docFirma.GetElementsByTagName("ns1:CFE").Item(0);
                nuevo = documento.ImportNode(cfeFirmado, true);
                documento.DocumentElement.AppendChild(nuevo);
                #endregion CFE_FIRMA
            }
            catch (Exception e)
            {
            }


            return(documento);
        }
Пример #8
0
        /// <summary>
        /// Firma el ACK generado
        /// </summary>
        /// <param name="nombreAlmacenClaves"></param>
        /// <param name="numeroCertificado"></param>
        /// <returns></returns>
        public bool FirmarACK(string nombreACKsf, string nombreACKf)
        {
            string rutaCertificado = "", passCertificado = "";
            bool   resultado = true;

            try
            {
                ManteUdoCertificadoDigital cerDigital = new ManteUdoCertificadoDigital();

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

                //Crea un nuevo objeto CspParameters para especificar el contenedor del certificado
                CspParameters cspParams = new CspParameters();
                cspParams.KeyContainerName = rutaCertificado;

                //Crea un nuevo RSA.
                RSACryptoServiceProvider rsaKey = new RSACryptoServiceProvider(cspParams);

                //Crea un nuevo documento xml
                XmlDocument xmlDocumento = new XmlDocument();

                //Carga el xml no firmado.
                xmlDocumento.PreserveWhitespace = true;

                xmlDocumento.Load(nombreACKsf);


                //CENTENARIO BUENO
                //xmlDocumento.LoadXml("<?xml version=\"1.0\"?><ACKSobre xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" version=\"1.0\" xmlns=\"http://cfe.dgi.gub.uy\"><Caratula><RUCReceptor>210308350014</RUCReceptor><RUCEmisor>219999830019</RUCEmisor><IDRespuesta>100</IDRespuesta><NomArch>sob_219999830019_20141211_2.xml</NomArch><FecHRecibido>2014-12-11T09:57:16.4132781-02:00</FecHRecibido><IDEmisor>2</IDEmisor><IDReceptor>100</IDReceptor><CantidadCFE>8</CantidadCFE><Tmst>2014-12-11T09:58:26.4133782-02:00</Tmst></Caratula><Detalle><Estado>AS</Estado><ParamConsulta><Token>8iLdRqMvLC3m/5dxX3sjsFuQ9qs4vkVUVZl6QqDE0/5rgMl/rs8CSUoPSDeG4QhL5S3OP+6fCHJMDIQwIJlXlQ==</Token><Fechahora>2014-12-11T09:59:16.4132781-02:00</Fechahora></ParamConsulta></Detalle></ACKSobre>");

                //CENTENARIO MALO
                // xmlDocumento.LoadXml("<?xml version=\"1.0\"?><ACKSobre xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" version=\"1.0\" xmlns=\"http://cfe.dgi.gub.uy\"><Caratula><RUCReceptor>210308350014</RUCReceptor><RUCEmisor>219999830019</RUCEmisor><IDRespuesta>101</IDRespuesta><NomArch>sob_219999830019_20141211_1.xml</NomArch><FecHRecibido>2014-12-11T09:57:43.5371631-02:00</FecHRecibido><IDEmisor>1</IDEmisor><IDReceptor>101</IDReceptor><CantidadCFE>15</CantidadCFE><Tmst>2014-12-11T09:57:43.5371631-02:00</Tmst></Caratula><Detalle><Estado>BS</Estado><MotivosRechazo><Motivo>S05</Motivo><Glosa>No coinciden cantidad CFE de carátula y contenido</Glosa></MotivosRechazo></Detalle></ACKSobre>");

                //LUSA BUENO
                //xmlDocumento.LoadXml("<?xml version=\"1.0\"?><ACKSobre xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" version=\"1.0\" xmlns=\"http://cfe.dgi.gub.uy\"><Caratula><RUCReceptor>210160990017</RUCReceptor><RUCEmisor>219999830019</RUCEmisor><IDRespuesta>35</IDRespuesta><NomArch>sob_219999830019_20141218_2.xml</NomArch><FecHRecibido>2014-12-18T15:08:46.4642461-02:00</FecHRecibido><IDEmisor>2</IDEmisor><IDReceptor>35</IDReceptor><CantidadCFE>8</CantidadCFE><Tmst>2014-12-18T15:08:50.4642461-02:00</Tmst></Caratula><Detalle><Estado>AS</Estado><ParamConsulta><Token>hmbh5ghNyOIEQ95B9oJtE9Tjsys=</Token><Fechahora>2014-12-18T15:08:52.4642461-02:00</Fechahora></ParamConsulta></Detalle></ACKSobre>");

                //LUSA MALO
                //xmlDocumento.LoadXml("<?xml version=\"1.0\"?><ACKSobre xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" version=\"1.0\" xmlns=\"http://cfe.dgi.gub.uy\"><Caratula><RUCReceptor>210160990017</RUCReceptor><RUCEmisor>219999830019</RUCEmisor><IDRespuesta>34</IDRespuesta><NomArch>sob_219999830019_20141218_1.xml</NomArch><FecHRecibido>2014-12-18T15:08:52.7576766-02:00</FecHRecibido><IDEmisor>1</IDEmisor><IDReceptor>34</IDReceptor><CantidadCFE>5</CantidadCFE><Tmst>2014-12-18T15:08:54.4642461-02:00</Tmst></Caratula><Detalle><Estado>BS</Estado><MotivosRechazo><Motivo>S05</Motivo><Glosa>No coinciden cantidad CFE de carátula y contenido</Glosa></MotivosRechazo></Detalle></ACKSobre>");

                byte[] pfxBlob = File.ReadAllBytes(rutaCertificado);

                //Firma el documento
                ProcTransformacion.SignXml(xmlDocumento, pfxBlob, passCertificado);

                //Guarda el certificado firmado
                xmlDocumento.Save(nombreACKf);

                //BUENO
                //xmlDocumento.Save(@"C:\Users\greivinsalas\Desktop\M_35_Sob_219999830019_20141218_2.xml");

                //MALO
                // xmlDocumento.Save(@"C:\Users\greivinsalas\Desktop\M_34_Sob_219999830019_20141218_1.xml");
            }
            catch (Exception)
            {
                resultado = false;
            }

            return(resultado);
        }