Пример #1
0
        /// <summary>
        /// Obtiene la lista de errore de un sobre recibido
        /// </summary>
        /// <param name="docEntry"></param>
        /// <returns></returns>
        public List <ErrorValidarSobre> ObtenerErroresSobre(string docEntry)
        {
            List <ErrorValidarSobre> listaErrores = new List <ErrorValidarSobre>();
            ErrorValidarSobre        error        = null;
            string consulta = "";

            //Obtener objeto estadar de record set
            Recordset recSet = null;

            try
            {
                recSet = ProcConexion.Comp.GetBusinessObject(BoObjectTypes.BoRecordset);

                consulta = "SELECT U_Motivo, U_Glosa, U_Detalle FROM [@TFEESTCFER] WHERE U_ConsRec = '" + docEntry + "'";

                //Ejecutar consulta
                recSet.DoQuery(consulta);

                //Validar que se hayan obtenido resultado
                recSet.MoveFirst();

                if (recSet.RecordCount > 0)
                {
                    int i = 0;

                    while (i < recSet.RecordCount)
                    {
                        error = new ErrorValidarSobre();

                        error.CodigoRechazo  = recSet.Fields.Item("U_Motivo").Value + "";
                        error.DetalleRechazo = recSet.Fields.Item("U_Detalle").Value + "";
                        error.GlosaRechazo   = recSet.Fields.Item("U_Glosa").Value + "";
                        listaErrores.Add(error);
                        recSet.MoveNext();
                        i++;
                    }
                }
            }
            catch (Exception)
            {
            }
            finally
            {
                if (recSet != null)
                {
                    //Se libera de memoria el objeto recSet
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(recSet);
                    GC.Collect();
                }
            }

            return(listaErrores);
        }
Пример #2
0
        /// <summary>
        /// Valida que la cantidad Cfes especificados en la linea DGICFE:CantCFE
        /// corresponda con la cantidad de Cfes dentro del sobre
        /// </summary>
        /// <param name="documento"></param>
        /// <returns></returns>
        public bool validarCantidadCfe(XmlDocument documento, List <ErrorValidarSobre> listaErrores, string tag)
        {
            bool        salida = true;
            int         cantCfe = 0, cfesEncontrados = 0;
            XmlNodeList listaFacturas  = null;
            XmlNodeList listaTickets   = null;
            XmlNodeList listaRemito    = null;
            XmlNodeList listaResguardo = null;

            try
            {
                //Se obtiene el rucEmisor del sobre
                XmlNodeList cantCfeNL = documento.GetElementsByTagName("CantCFE");

                if (cantCfeNL.Count > 0)
                {
                    cantCfe = Convert.ToInt16(documento.GetElementsByTagName("CantCFE").Item(0).InnerText);
                    tag     = "";
                }
                else
                {
                    cantCfeNL = documento.GetElementsByTagName("DGICFE:CantCFE");

                    if (cantCfeNL.Count > 0)
                    {
                        cantCfe = Convert.ToInt16(documento.GetElementsByTagName("DGICFE:CantCFE").Item(0).InnerText);
                        tag     = "DGICFE:";
                    }

                    cantCfeNL = documento.GetElementsByTagName("cfe:CantCFE");

                    if (cantCfeNL.Count > 0)
                    {
                        cantCfe = Convert.ToInt16(documento.GetElementsByTagName("cfe:CantCFE").Item(0).InnerText);
                        tag     = "cfe:";
                    }
                }

                tag = "";
                if (contieneComprobantes(documento, tag + "eFact"))
                {
                    listaFacturas = documento.GetElementsByTagName(tag + "eFact");
                    foreach (XmlElement factura in listaFacturas)
                    {
                        cfesEncontrados++;
                    }
                }

                tag = "ns0:";
                if (contieneComprobantes(documento, tag + "eFact"))
                {
                    listaFacturas = documento.GetElementsByTagName(tag + "eFact");
                    foreach (XmlElement factura in listaFacturas)
                    {
                        cfesEncontrados++;
                    }
                }

                tag = "DGICFE:";
                if (contieneComprobantes(documento, tag + "eFact"))
                {
                    listaFacturas = documento.GetElementsByTagName(tag + "eFact");
                    foreach (XmlElement factura in listaFacturas)
                    {
                        cfesEncontrados++;
                    }
                }

                tag = "";
                if (contieneComprobantes(documento, tag + "eTck"))
                {
                    listaTickets = documento.GetElementsByTagName(tag + "eTck");
                    foreach (XmlElement ticket in listaTickets)
                    {
                        cfesEncontrados++;
                    }
                }

                tag = "ns0:";
                if (contieneComprobantes(documento, tag + "eTck"))
                {
                    listaTickets = documento.GetElementsByTagName(tag + "eTck");
                    foreach (XmlElement ticket in listaTickets)
                    {
                        cfesEncontrados++;
                    }
                }

                tag = "DGICFE:";
                if (contieneComprobantes(documento, tag + "eTck"))
                {
                    listaTickets = documento.GetElementsByTagName(tag + "eTck");
                    foreach (XmlElement ticket in listaTickets)
                    {
                        cfesEncontrados++;
                    }
                }

                tag = "";
                if (contieneComprobantes(documento, tag + "eRem"))
                {
                    listaRemito = documento.GetElementsByTagName(tag + "eRem");
                    foreach (XmlElement remito in listaRemito)
                    {
                        cfesEncontrados++;
                    }
                }

                tag = "ns0:";
                if (contieneComprobantes(documento, tag + "eRem"))
                {
                    listaRemito = documento.GetElementsByTagName(tag + "eRem");
                    foreach (XmlElement remito in listaRemito)
                    {
                        cfesEncontrados++;
                    }
                }

                tag = "DGICFE:";
                if (contieneComprobantes(documento, tag + "eRem"))
                {
                    listaRemito = documento.GetElementsByTagName(tag + "eRem");
                    foreach (XmlElement remito in listaRemito)
                    {
                        cfesEncontrados++;
                    }
                }

                tag = "";
                if (contieneComprobantes(documento, tag + "eResg"))
                {
                    listaResguardo = documento.GetElementsByTagName(tag + "eResg");
                    foreach (XmlElement resguardo in listaResguardo)
                    {
                        cfesEncontrados++;
                    }
                }

                tag = "ns0:";
                if (contieneComprobantes(documento, tag + "eResg"))
                {
                    listaResguardo = documento.GetElementsByTagName(tag + "eResg");
                    foreach (XmlElement resguardo in listaResguardo)
                    {
                        cfesEncontrados++;
                    }
                }

                tag = "DGICFE:";
                if (contieneComprobantes(documento, tag + "eResg"))
                {
                    listaResguardo = documento.GetElementsByTagName(tag + "eResg");
                    foreach (XmlElement resguardo in listaResguardo)
                    {
                        cfesEncontrados++;
                    }
                }

                if (cfesEncontrados != cantCfe)
                {
                    salida = false;
                    ErrorValidarSobre error = new ErrorValidarSobre();
                    error.CodigoRechazo  = Mensaje.errSobValCantCfeCod;
                    error.DetalleRechazo = Mensaje.errSobValCantCfeDetGlo;
                    error.GlosaRechazo   = Mensaje.errSobValCantCfeDetGlo;
                    listaErrores.Add(error);
                }
            }
            catch (Exception ex)
            {
                app.MessageBox("ValidarSobre/ValidarCantCfe/Error: " + ex.ToString());
                salida = false;
            }

            return(salida);
        }
Пример #3
0
        /// <summary>
        /// Valida el ruc del sobre contra los ruc de los comprobantes
        /// </summary>
        /// <param name="documento"></param>
        /// <returns></returns>
        public bool validarRucSobreContraComprobante(XmlDocument documento, List <ErrorValidarSobre> listaErrores, string tag)
        {
            string rucSobre = "";
            bool   salida   = true;

            try
            {
                //Se obtiene el rucEmisor del sobre
                //rucSobre = documento.GetElementsByTagName("DGICFE:RUCEmisor").Item(0).InnerText;
                XmlNodeList rucSobreXNL = documento.GetElementsByTagName("RUCEmisor");

                if (rucSobreXNL.Count > 0)
                {
                    rucSobre = documento.GetElementsByTagName("RUCEmisor").Item(0).InnerText;
                }
                else
                {
                    rucSobreXNL = documento.GetElementsByTagName("DGICFE:RUCEmisor");

                    if (rucSobreXNL.Count > 0)
                    {
                        rucSobre = documento.GetElementsByTagName("DGICFE:RUCEmisor").Item(0).InnerText;
                    }

                    rucSobreXNL = documento.GetElementsByTagName("cfe:RUCEmisor");

                    if (rucSobreXNL.Count > 0)
                    {
                        rucSobre = documento.GetElementsByTagName("cfe:RUCEmisor").Item(0).InnerText;
                    }
                }

                tag = "";

                XmlNodeList listaRucEmisores = documento.GetElementsByTagName(tag + "RUCEmisor");

                if (listaRucEmisores.Count == 0)
                {
                    listaRucEmisores = documento.GetElementsByTagName("ns0:RUCEmisor");
                }

                foreach (XmlElement rucEmisor in listaRucEmisores)
                {
                    if (!rucSobre.Equals(rucEmisor.InnerText))
                    {
                        ErrorValidarSobre error = new ErrorValidarSobre();
                        error.CodigoRechazo  = Mensaje.errSobValRucCod;
                        error.DetalleRechazo = Mensaje.errSobValRucDetGlo;
                        error.GlosaRechazo   = Mensaje.errSobValRucDetGlo;
                        listaErrores.Add(error);
                        salida = false;
                    }
                }
            }
            catch (Exception ex)
            {
                app.MessageBox("ValidarSobre/ValRucContrasobre/Error: " + ex.ToString());
                salida = false;
            }

            return(salida);
        }
Пример #4
0
        /// <summary>
        /// Metodo para realizar las validaciones de los comprobantes fiscales
        /// </summary>
        /// <returns></returns>
        public bool ValidarComprobanteFiscal(XmlDocument documento, int tipo, int numeroCFE, string serieCFE,
                                             int inicioCAE, int finCAE, string fechaFirma, string fechaCAE, int docEntry)
        {
            bool resultado = true, error = false;
            //Lista que contiene los errores
            List <ErrorValidarSobre> listaErrores = new List <ErrorValidarSobre>();

            List <string> listaCfe = ObtenerCFEs(documento);

            foreach (string cfe in listaCfe)
            {
                if (ValidarCFESeleccionado(tipo.ToString(), serieCFE, numeroCFE.ToString(), cfe))
                {
                    if (!ValidarXsdCFE(cfe))
                    {
                        //Se activa bandera de error
                        error = true;

                        //Agrega los errores encontrados en la validacion de los
                        foreach (string errorXsd in erroresEncontrados)
                        {
                            //Se crea objeto de error
                            ErrorValidarSobre errorValidar = new ErrorValidarSobre();
                            errorValidar.CodigoRechazo  = Mensaje.errCompValXsdCod;
                            errorValidar.DetalleRechazo = Mensaje.errCompValXsdDet;
                            errorValidar.GlosaRechazo   = errorXsd;

                            //Se agrega el error a la lista de errores
                            listaErrores.Add(errorValidar);
                        }
                    }
                }
            }

            if (!ValidarNumeroTipoCFE(tipo, numeroCFE))
            {
                //Se activa bandera de error
                error = true;

                ErrorValidarSobre errorValidar = new ErrorValidarSobre();
                errorValidar.CodigoRechazo  = Mensaje.errCompValNumCFECod;
                errorValidar.DetalleRechazo = Mensaje.errCompValNumCFEDetGlo;
                errorValidar.GlosaRechazo   = Mensaje.errCompValNumCFEDetGlo;

                //Se agrega el error a la lista de errores
                listaErrores.Add(errorValidar);
            }
            if (!ValidarNumeroCFEContraCAE(numeroCFE, inicioCAE, finCAE))
            {
                //Se activa bandera de error
                error = true;

                //Se crea objeto de error
                ErrorValidarSobre errorValidar = new ErrorValidarSobre();
                errorValidar.CodigoRechazo  = Mensaje.errCompValNumCAECFECod;
                errorValidar.DetalleRechazo = Mensaje.errCompValNumCAECFEDetGlo;
                errorValidar.GlosaRechazo   = Mensaje.errCompValNumCAECFEDetGlo;

                //Se agrega el error a la lista de errores
                listaErrores.Add(errorValidar);
            }
            //if (ValidarFimaElectronica(documento.InnerXml))
            //{
            //    //Se activa bandera de error
            //    error = true;

            //    //Se crea objeto de error
            //    ErrorValidarSobre errorValidar = new ErrorValidarSobre();
            //    errorValidar.CodigoRechazo = Mensaje.errCompValFirmaCod;
            //    errorValidar.DetalleRechazo = Mensaje.errCompValFirmaDetGlo;
            //    errorValidar.GlosaRechazo = Mensaje.errCompValFirmaDetGlo;

            //    //Se agrega el error a la lista de errores
            //    listaErrores.Add(errorValidar);
            //}
            if (ValidarFechaFirmaContraCAE(fechaFirma, fechaCAE))
            {
                //Se activa bandera de error
                error = true;

                //Se crea objeto de error
                ErrorValidarSobre errorValidar = new ErrorValidarSobre();

                errorValidar.CodigoRechazo  = Mensaje.errCompValFechaCAECod;
                errorValidar.DetalleRechazo = Mensaje.errCompValFechaCAEDetGlo;
                errorValidar.GlosaRechazo   = Mensaje.errCompValFechaCAEDetGlo;

                //Se agrega el error a la lista de errores
                listaErrores.Add(errorValidar);
            }

            if (error == true)
            {
                resultado = false;
                AlmacenarErrores(listaErrores, docEntry);
            }

            return(resultado);
        }
Пример #5
0
        /// <summary>
        /// Metodo para cargar sobres con facturas desde un archivo xml a la tabla TFESOBFAC y TFESOBFACDET
        /// </summary>
        /// <param name="rutaRespuesta"></param>
        public void GenerarXML(string rutaSobre, string nombreSobre, string correoEmisor)
        {
            string                      contenido = "", tag = "", tag2 = "DGICFE:", tag3 = "cfe:";
            bool                        dgiActivado = false, tag3Activado = false;
            ValidarSobre                validaSobre           = new ValidarSobre();
            ValidarCFE                  validaCfe             = new ValidarCFE();
            ManteUdoConsecutivo         manteUdoConsecutivo   = new ManteUdoConsecutivo();
            ManteUdoCertificadoRecibido manteUdoSobreRecibido = new ManteUdoCertificadoRecibido();

            try
            {
                XmlDocument documento = new XmlDocument();
                List <CertificadoRecibido> listaCertificadosRecibidos = new List <CertificadoRecibido>();
                CertificadoRecibido        certificadoRecibido;

                documento.Load(rutaSobre + nombreSobre);

                //Obtiene el contenido del xml en string
                contenido = documento.InnerXml;

                //Se obtiene el nodo princicpal
                XmlNodeList sobre = documento.GetElementsByTagName("DGICFE:EnvioCFE");

                if (sobre.Count == 0)
                {
                    sobre = documento.GetElementsByTagName("EnvioCFE_entreEmpresas");
                }

                if (sobre.Count == 0)
                {
                    sobre       = documento.GetElementsByTagName("DGICFE:EnvioCFE_entreEmpresas");
                    dgiActivado = true;
                }

                if (sobre.Count == 0)
                {
                    sobre        = documento.GetElementsByTagName("cfe:EnvioCFE_entreEmpresas");
                    dgiActivado  = true;
                    tag3Activado = true;
                }

                //Se valida el tipo de tag
                if (ValidarNSTag(documento))
                {
                    tag = "ns0:";
                }

                XmlNodeList caratula = documento.GetElementsByTagName("Caratula");

                if (caratula.Count == 0)
                {
                    caratula = documento.GetElementsByTagName(tag2 + "Caratula");
                }

                if (caratula.Count == 0)
                {
                    caratula = documento.GetElementsByTagName(tag3 + "Caratula");
                }

                foreach (XmlElement nodoCaratula in caratula)
                {
                    certificadoRecibido = new CertificadoRecibido();

                    if (!dgiActivado)
                    {
                        tag2 = "";
                    }


                    if (tag3Activado)
                    {
                        tag2 = tag3;
                        tag  = "";
                    }

                    //Se obtienen los datos de la caratula
                    certificadoRecibido.RucReceptor = nodoCaratula.GetElementsByTagName(tag2 + "RutReceptor")[0].InnerText;
                    certificadoRecibido.RucEmisor   = nodoCaratula.GetElementsByTagName(tag2 + "RUCEmisor")[0].InnerText;
                    certificadoRecibido.IdEmisor    = nodoCaratula.GetElementsByTagName(tag2 + "Idemisor")[0].InnerText;
                    certificadoRecibido.FechaSobre  = nodoCaratula.GetElementsByTagName(tag2 + "Fecha")[0].InnerText;
                    certificadoRecibido.CantCFE     = nodoCaratula.GetElementsByTagName(tag2 + "CantCFE")[0].InnerText;

                    XmlNodeList listaCfes = documento.GetElementsByTagName(tag + "CFE");
                    foreach (XmlElement nodoCfe in listaCfes)
                    {
                        certificadoRecibido.FechaFirma        = nodoCfe.GetElementsByTagName(tag + "TmstFirma")[0].InnerText;
                        certificadoRecibido.TipoCFE           = nodoCfe.GetElementsByTagName(tag + "TipoCFE")[0].InnerText;
                        certificadoRecibido.SerieComprobante  = nodoCfe.GetElementsByTagName(tag + "Serie")[0].InnerText;
                        certificadoRecibido.NumeroComprobante = nodoCfe.GetElementsByTagName(tag + "Nro")[0].InnerText;
                        certificadoRecibido.FechaEmision      = nodoCfe.GetElementsByTagName(tag + "FchEmis")[0].InnerText;
                        certificadoRecibido.RazonSocial       = nodoCfe.GetElementsByTagName(tag + "RznSoc")[0].InnerText;

                        //Datos del CAE
                        certificadoRecibido.DNroCAE = nodoCfe.GetElementsByTagName(tag + "DNro")[0].InnerText;
                        certificadoRecibido.HNroCAE = nodoCfe.GetElementsByTagName(tag + "HNro")[0].InnerText;
                        if (!certificadoRecibido.TipoCFE.Equals("182"))
                        {
                            if (!certificadoRecibido.TipoCFE.Equals("282"))
                            {
                                certificadoRecibido.FVenCAE = nodoCfe.GetElementsByTagName(tag + "FecVenc")[0].InnerText;
                            }
                        }

                        //Se inicializa una nueva lista para el detalle de la factura del sobre
                        certificadoRecibido.DetalleCertificadoRecibido = new List <DetCertificadoRecibido>();

                        string tipoMoneda = "";
                        foreach (XmlElement totales in nodoCfe.GetElementsByTagName(tag + "Totales"))
                        {
                            tipoMoneda = totales.GetElementsByTagName(tag + "TpoMoneda")[0].InnerText;
                        }

                        foreach (XmlElement detalle in nodoCfe.GetElementsByTagName(tag + "Detalle"))
                        {
                            //Se crea un elemento de detalle de factura
                            DetCertificadoRecibido detalleCertificadoRecibido;

                            foreach (XmlElement item in detalle.GetElementsByTagName(tag + "Item"))
                            {
                                detalleCertificadoRecibido = new DetCertificadoRecibido();
                                detalleCertificadoRecibido.NumeroComprobante = certificadoRecibido.NumeroComprobante;
                                detalleCertificadoRecibido.SerieComprobante  = certificadoRecibido.SerieComprobante;
                                detalleCertificadoRecibido.TipoCFE           = certificadoRecibido.TipoCFE;
                                detalleCertificadoRecibido.PrecioUnitario    = item.GetElementsByTagName(tag + "PrecioUnitario")[0].InnerText;
                                detalleCertificadoRecibido.MontoItem         = item.GetElementsByTagName(tag + "MontoItem")[0].InnerText;
                                detalleCertificadoRecibido.NombreItem        = item.GetElementsByTagName(tag + "NomItem")[0].InnerText;
                                string cantidad = item.GetElementsByTagName(tag + "Cantidad")[0].InnerText;
                                cantidad = cantidad.Replace(".", ",");
                                detalleCertificadoRecibido.Cantidad   = double.Parse(cantidad);
                                detalleCertificadoRecibido.TipoMoneda = tipoMoneda;

                                //Se agregan los detalles al sobre
                                certificadoRecibido.DetalleCertificadoRecibido.Add(detalleCertificadoRecibido);
                            }
                        }
                    }
                    listaCertificadosRecibidos.Add(certificadoRecibido);
                }

                ValidarSobre             valida       = new ValidarSobre();
                List <ErrorValidarSobre> listaErrores = new List <ErrorValidarSobre>();
                bool estadoSobre = true;

                if (!valida.validarRucSobreContraComprobante(documento, listaErrores, tag))
                {
                    estadoSobre = false;
                }

                if (!valida.validarCantidadCfe(documento, listaErrores, tag))
                {
                    estadoSobre = false;
                }

                //Valida el sobre con el XSD
                if (!valida.ValidarXsdSobre(contenido))
                {
                    estadoSobre = false;
                    foreach (string rechazo in ValidarSobre.erroresEncontrados)
                    {
                        ErrorValidarSobre error = new ErrorValidarSobre();
                        error.CodigoRechazo  = Mensaje.errSobValXsdCod;
                        error.DetalleRechazo = Mensaje.errSobValXsdDet;
                        error.GlosaRechazo   = rechazo;
                        listaErrores.Add(error);
                    }
                }

                if (estadoSobre)
                {
                    //Sobre validado

                    foreach (CertificadoRecibido certRecibido in listaCertificadosRecibidos)
                    {
                        certRecibido.IdConsecutio = "";

                        //Se insertan los datos en la tabla de la BD
                        manteUdoSobreRecibido.AlmacenarMaestro(certRecibido, correoEmisor, nombreSobre);
                    }
                }
                else
                {
                    //Sobre rechazado
                    if (listaCertificadosRecibidos.Count > 0)
                    {
                        GenerarACK("BS", listaCertificadosRecibidos[0], correoEmisor, listaErrores, nombreSobre);
                    }
                }
            }

            catch (Exception)
            {
                //SAPbouiCOM.Framework.Application.SBO_Application.MessageBox("RespuestaSobre/GenerarXml/Error:" + ex.ToString());
            }
        }