private DetalleValidacion ValidaLayout()
        {
            DetalleValidacion detallevalidacion = new DetalleValidacion();
            bool   Exito            = true;
            string ValoresInvalidos = "";

            if (dtArchivo.Columns.Count != layoutColumnas)
            {
                Exito            = false;
                ValoresInvalidos = "Se esperan 3 columnas.";
            }
            if (dtArchivo.Rows.Count == 0)
            {
                Exito            = false;
                ValoresInvalidos = ValoresInvalidos + "Se esperan al menos 2 filas.";
            }

            if (Exito)
            {
                detallevalidacion.CodigoError        = 0;
                detallevalidacion.Mensaje            = "EXITO";
                detallevalidacion.VerificacionValida = true;
            }
            else
            {
                detallevalidacion.CodigoError        = erLayOut_NoEsElEsperado;
                detallevalidacion.Mensaje            = "El layout no corresponde con el esperado. " + ValoresInvalidos;
                detallevalidacion.VerificacionValida = false;
            }

            return(detallevalidacion);
        }
        private DetalleValidacion ValidaFormatoExcel()
        {
            DetalleValidacion detallevalidacion = new DetalleValidacion();

            string contentType = "application/octetstream";
            string ext         = System.IO.Path.GetExtension(RutaArchivo + NombreArchivo).ToLower();

            Microsoft.Win32.RegistryKey registryKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(ext);
            if (registryKey != null && registryKey.GetValue("Content Type") != null)
            {
                contentType = registryKey.GetValue("Content Type").ToString();
            }

            //"application/vnd.ms-excel"
            //"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
            if (contentType == TipoMIME)
            {
                detallevalidacion.CodigoError        = 0;
                detallevalidacion.Mensaje            = "EXITO";
                detallevalidacion.VerificacionValida = true;
            }
            else
            {
                detallevalidacion.CodigoError        = erArchivo_NoEsExcel;
                detallevalidacion.Mensaje            = "Archivo invalido. No es un archivo de Excel valido.";
                detallevalidacion.VerificacionValida = false;
            }

            return(detallevalidacion);
        }
        private DetalleValidacion ValidaCuentaBancaria()
        {
            DetalleValidacion detallevalidacion = new DetalleValidacion();
            bool   Exito            = true;
            string ValoresInvalidos = "";
            int    RowNo            = 1;

            foreach (DataRow row in dtArchivo.Rows)
            {
                RowNo = RowNo + 1;
                if (Convert.ToString(row[colCta]).Trim() != string.Empty & Convert.ToString(row[colCta]).Trim() != CuentaBancaria.ToString())
                {
                    Exito            = false;
                    ValoresInvalidos = ValoresInvalidos + RowNo.ToString() + ", ";
                }
            }

            if (Exito)
            {
                detallevalidacion.CodigoError        = 0;
                detallevalidacion.Mensaje            = "EXITO";
                detallevalidacion.VerificacionValida = true;
            }
            else
            {
                detallevalidacion.CodigoError        = erCtaBan_EncontroCuentaDistinta;
                detallevalidacion.Mensaje            = "Se espera cuenta bancaria: " + CuentaBancaria.ToString() + ". Corrija la(s) fila(s): " + ValoresInvalidos;
                detallevalidacion.VerificacionValida = false;
            }

            return(detallevalidacion);
        }
        public DetalleValidacion ValidaParentezco()
        {
            Conciliacion.RunTime.App objApp = new Conciliacion.RunTime.App();

            DetalleValidacion detallevalidacion = new DetalleValidacion();
            string            Pedidoreferencia  = "";
            var ListaPedidoCliente = CrearListaGenerica(new { PedidoReferencia = "", Cliente = "" });

            ListaPedidoCliente.Clear();

            bool   ResultadoValidacion = true;
            string DetalleError        = "";

            if (dtArchivo.Rows.Count > 0)
            {
                foreach (DataRow row in dtArchivo.Rows)
                {
                    Pedidoreferencia = row[colDoc].ToString();
                    DataTable dtDetallePedido = objApp.Consultas.PedidoReferenciaDetalle(Pedidoreferencia);
                    if (dtDetallePedido.Rows.Count > 0)
                    {
                        ListaPedidoCliente.Add(new { PedidoReferencia = dtDetallePedido.Rows[0]["PedidoReferencia"].ToString().Trim(), Cliente = dtDetallePedido.Rows[0]["Cliente"].ToString().Trim() });
                    }
                }
            }
            DataTable dtClienteFamilia;

            if (ListaPedidoCliente.Count > 0)
            {
                dtClienteFamilia = objApp.Consultas.FamiliaresCliente(Convert.ToInt32(ListaPedidoCliente[0].Cliente));
                List <string> ListaFamilia = (from DataRow row in dtClienteFamilia.Rows select row["Cliente"].ToString()).Distinct().ToList();
                foreach (var Cliente in ListaPedidoCliente)
                {
                    if (!ListaFamilia.Exists(e => e.Contains(Cliente.Cliente)))
                    {
                        var ListaPedidos = ListaPedidoCliente.Where(x => x.Cliente == Cliente.Cliente).ToList();
                        ListaPedidos.ForEach(x => DetalleError += " \n " + x.PedidoReferencia.ToString().Trim() + " del cliente: " + x.Cliente.ToString().Trim() + ",");
                        ResultadoValidacion = false;
                    }
                }
            }

            if (ResultadoValidacion)
            {
                detallevalidacion.CodigoError        = 0;
                detallevalidacion.Mensaje            = "Todos los pedidos cargados corresponden a clientes emparentados.";
                detallevalidacion.VerificacionValida = true;
            }
            else
            {
                detallevalidacion.CodigoError        = 500;
                detallevalidacion.Mensaje            = "Los pedidos " + DetalleError + "\n no están emparentados y no serán cargados.";
                detallevalidacion.VerificacionValida = false;
            }

            return(detallevalidacion);
        }
        public bool ArchivoValido(string RutaArchivo, string NombreArchivo)
        {
            bool existe;
            DetalleValidacion ValidoExcel = new DetalleValidacion();

            existe = (NombreArchivo.Trim() != string.Empty & TipoMIME.Trim() != string.Empty & RutaArchivo.Trim() != string.Empty) & (File.Exists(RutaArchivo + NombreArchivo));

            if (existe)
            {
                ValidoExcel = ValidaFormatoExcel();
                return(ValidoExcel.CodigoError == 0);
            }
            else
            {
                return(false);
            }
        }
        private DetalleValidacion ValidaMonto()
        {
            DetalleValidacion detallevalidacion = new DetalleValidacion();
            bool   Exito            = true;
            string ValoresInvalidos = "";
            double Monto;
            int    rowNo = 1;

            foreach (DataRow row in dtArchivo.Rows)
            {
                rowNo = rowNo + 1;

                if (double.TryParse(row[colMon].ToString().Trim(), out Monto))
                {
                    Monto = Convert.ToDouble(string.Format("{0:C}", Monto).Replace("$", ""));
                    if (Monto <= 0)
                    {
                        Exito            = false;
                        ValoresInvalidos = ValoresInvalidos + rowNo + ", ";
                    }
                }
                else
                if (Convert.ToString(row[colMon]) != string.Empty)
                {
                    Exito            = false;
                    ValoresInvalidos = ValoresInvalidos + rowNo + ", ";
                }
            }

            if (Exito)
            {
                detallevalidacion.CodigoError        = 0;
                detallevalidacion.Mensaje            = "EXITO";
                detallevalidacion.VerificacionValida = true;
            }
            else
            {
                detallevalidacion.CodigoError        = erMonto_Invalido;
                detallevalidacion.Mensaje            = "Monto invalido. No es un valor numérico, es menor a $1 o excede dos decimales. Corrija los valores en la(s) fila(s): " + ValoresInvalidos;
                detallevalidacion.VerificacionValida = false;
            }
            return(detallevalidacion);
        }
        private DetalleValidacion ValidaEncabezado()
        {
            DetalleValidacion detallevalidacion = new DetalleValidacion();

            if (dtArchivo.Columns.Count >= 3
                &&
                string.Compare(GeneraMD5(strEncabezado), GeneraMD5(dtArchivo.Columns[0].ColumnName + dtArchivo.Columns[1].ColumnName + dtArchivo.Columns[2].ColumnName)) == 0)
            {
                detallevalidacion.CodigoError        = 0;
                detallevalidacion.Mensaje            = "EXITO";
                detallevalidacion.VerificacionValida = true;
            }
            else
            {
                detallevalidacion.CodigoError        = erEncabezado_Invalido;
                detallevalidacion.Mensaje            = "Encabezado invalido. Se espera: Documento Cuenta Monto en la primer fila";
                detallevalidacion.VerificacionValida = false;
            }

            return(detallevalidacion);
        }
        private DetalleValidacion ValidaDocumentoReferencia()
        {
            Conciliacion.RunTime.App objApp = new Conciliacion.RunTime.App();

            DetalleValidacion detallevalidacion = new DetalleValidacion();

            bool   Exito            = true;
            string ValoresInvalidos = "";
            int    rowNo            = 1;

            foreach (DataRow row in dtArchivo.Rows)
            {
                rowNo = rowNo + 1;

                //if ( ! Conciliacion.RunTime.App.Consultas.VerificaPedidoReferenciaExiste(row[colDoc].ToString()) )
                ReferenciaNoConciliadaPedido ReferenciaNoConciliada = objApp.Consultas.ConsultaPedidoReferenciaEspecificoCliente(Corporativo, Sucursal, 1, 1, 1, 1, row[colDoc].ToString());
                if (ReferenciaNoConciliada.Pedido == 0 || ReferenciaNoConciliada.CelulaPedido == 0 || ReferenciaNoConciliada.AñoPedido == 0)
                {
                    Exito            = false;
                    ValoresInvalidos = ValoresInvalidos + rowNo.ToString() + ", ";
                }
            }

            if (Exito)
            {
                detallevalidacion.CodigoError        = 0;
                detallevalidacion.Mensaje            = "EXITO";
                detallevalidacion.VerificacionValida = true;
            }
            else
            {
                detallevalidacion.CodigoError        = erDocRef_EncontroDocRefDistinto;
                detallevalidacion.Mensaje            = "No existe la Referencia Documento. Corrija la(s) fila(s): " + ValoresInvalidos;
                detallevalidacion.VerificacionValida = false;
            }

            return(detallevalidacion);
        }
        public DetalleValidacion ValidaLineaVacia()
        {
            DetalleValidacion detallevalidacion = new DetalleValidacion();
            bool   Exito            = true;
            string ValoresInvalidos = "";
            int    rowNo            = 1;

            foreach (DataRow row in dtArchivo.Rows)
            {
                rowNo = rowNo + 1;
                for (int colNo = 0; colNo <= layoutColumnas - 1; colNo++)
                {
                    if (Convert.ToString(row[colNo]) == string.Empty)
                    {
                        Exito            = false;
                        ValoresInvalidos = ValoresInvalidos + rowNo.ToString() + ", ";
                        break;
                    }
                }
            }

            if (Exito)
            {
                detallevalidacion.CodigoError        = 0;
                detallevalidacion.Mensaje            = "EXITO";
                detallevalidacion.VerificacionValida = true;
            }
            else
            {
                detallevalidacion.CodigoError        = erCelda_Vacia;
                detallevalidacion.Mensaje            = "Celda vacía. Una o mas celdas estan vacías. Corrija la(s) fila(s): " + ValoresInvalidos;
                detallevalidacion.VerificacionValida = false;
            }

            return(detallevalidacion);
        }