public bool Validate()
        {
            validCells = new Dictionary <ESQUEMA, bool>();
            foreach (ESQUEMA item in Enum.GetValues(typeof(ESQUEMA)))
            {
                validCells[item] = true;
            }

            DateTime aux;
            int      int_aux;
            double   double_aux;

            validCells[ESQUEMA.CVE_SEDE]         = (Sede.Length <= 5) && sedes.Contains(Sede);
            validCells[ESQUEMA.PERIODO]          = (Periodo.Length <= 10) && periodos.Contains(Periodo);
            validCells[ESQUEMA.ESQUEMADEPAGODES] = true;
            //validCells[ESQUEMA.CVE_CONTRATO] = (ClaveContrato.Length <= 5) && contratos.Contains(ClaveContrato); // anteriormente se valida la longitud, pero ahora que sólo se considera la descripción, ya no más LENGTH
            validCells[ESQUEMA.CVE_CONTRATO]    = contratos.Contains(ClaveContrato);
            validCells[ESQUEMA.FECHAINICIO]     = DateTime.TryParse(FechaInicio, out aux);
            validCells[ESQUEMA.FECHAFIN]        = DateTime.TryParse(FechaFin, out aux);
            validCells[ESQUEMA.NOSEMANAS]       = double.TryParse(NumSemanas, out double_aux);
            validCells[ESQUEMA.NOPAGOS]         = int.TryParse(NumPagos, out int_aux);
            validCells[ESQUEMA.BLOQUEOCONTRATO] = (BloqueoContrato == "0" || BloqueoContrato == "1");

            // Conceptos
            validCells[ESQUEMA.CONCEPTO] = (Concepto.Length <= 25) && conceptos.Keys.Contains(Concepto.ToUpper());
            if (validCells[ESQUEMA.CONCEPTO])
            {
                Concepto = conceptos[Concepto.ToUpper()];                // Se busca el concepto con MAYUSCULAS, y se reasigna con MAYUSCULAS y minusculas.
            }
            validCells[ESQUEMA.FECHAPAGO]   = DateTime.TryParse(FechaPago, out aux);
            validCells[ESQUEMA.FECHARECIBO] = DateTime.TryParse(FechaRecibo, out aux);

            // Esquemas
            DUPLICADO          = false;
            CONCEPTO_DUPLICADO = false;
            if (EsquemaDePago.Length <= 15 && validCells[ESQUEMA.CVE_SEDE] && validCells[ESQUEMA.PERIODO] /* && validCells[ESQUEMA.CVE_NIVEL]*/)
            {
                validCells[ESQUEMA.ESQUEMADEPAGO] = true;
                try
                {
                    string nombre_esquema = EsquemaDePago.ToUpper();

                    if (__esquemas.Keys.Contains(Sede) &&
                        __esquemas[Sede].Keys.Contains(Periodo) &&
                        __esquemas[Sede][Periodo].Keys.Contains(nombre_esquema))
                    {
                        EsquemaDePago = __esquemas[Sede][Periodo][nombre_esquema].ESQUEMADEPAGO;
                        DUPLICADO     = true;

                        if (__esquemas[Sede][Periodo][nombre_esquema].conceptos.Keys.Contains(Concepto.ToUpper()))
                        {
                            CONCEPTO_DUPLICADO = true;
                        }
                    }
                }
                catch (Exception) { }
            }
            else
            {
                validCells[ESQUEMA.ESQUEMADEPAGO] = false;
            }

            // Se busca algun error.
            foreach (ESQUEMA item in Enum.GetValues(typeof(ESQUEMA)))
            {
                if (validCells[item] == false)
                {
                    return(false);
                }
            }
            return(true);
        }
        public void cargaListas()
        {
            ResultSet res;
            //
            // SEDES
            //
            string sqlSedes = "SELECT CVE_SEDE FROM SEDES";

            if (!(sqlSedes == string.Empty && sqlSedes == null))
            {
                sqlSedes += " where cve_sede = '" + SedeX + "'";
            }

            res   = db.getTable(sqlSedes);
            sedes = new List <string>();
            while (res.Next())
            {
                sedes.Add(res.Get("CVE_SEDE"));
            }
            sedes.Sort(delegate(string str1, string str2)
            {
                return(str1.CompareTo(str2));
            });

            //
            // PERIODOS
            //
            res      = db.getTable("SELECT PERIODO FROM PERIODOS");
            periodos = new List <string>();
            while (res.Next())
            {
                periodos.Add(res.Get("PERIODO"));
            }

            //
            // CONCEPTOS
            //
            res       = db.getTable("SELECT DISTINCT(CONCEPTO) FROM CONCEPTOSDEPAGO ORDER BY CONCEPTO");
            conceptos = new Dictionary <string, string>();
            while (res.Next())
            {
                conceptos.Add(res.Get("CONCEPTO").ToUpper(), res.Get("CONCEPTO"));
            }

            //res = db.getTable("SELECT ID_ESQUEMA, CVE_SEDE, PERIODO, CVE_NIVEL, ESQUEMADEPAGO FROM ESQUEMASDEPAGO ORDER BY CVE_SEDE ASC, PERIODO ASC, CVE_NIVEL ASC, ESQUEMADEPAGO");
            res = db.getTable(@"SELECT E.ID_ESQUEMA, E.CVE_SEDE, E.PERIODO, E.ESQUEMADEPAGO, R.CONCEPTO, R.FECHA_RECIBO, R.FECHADEPAGO FROM ESQUEMASDEPAGO E, ESQUEMASDEPAGOFECHAS R WHERE R.ID_ESQUEMA = E.ID_ESQUEMA ");

            __esquemas = new Dictionary <string, Dictionary <string, Dictionary <string, Esquema> > >();
            while (res.Next())
            {
                Sede          = res.Get("CVE_SEDE");
                Periodo       = res.Get("PERIODO");
                EsquemaDePago = res.Get("ESQUEMADEPAGO");
                Concepto      = res.Get("CONCEPTO");

                if (__esquemas.Keys.Contains(Sede) == false)
                {
                    __esquemas.Add(Sede, new Dictionary <string, Dictionary <string, Esquema> >());
                }

                if (__esquemas[Sede].Keys.Contains(Periodo) == false)
                {
                    __esquemas[Sede].Add(Periodo, new Dictionary <string, Esquema>());
                }

                if (__esquemas[Sede][Periodo].Keys.Contains(EsquemaDePago.ToUpper()) == false)
                {
                    __esquemas[Sede][Periodo].Add(EsquemaDePago.ToUpper(), new Esquema(EsquemaDePago));
                }

                if (__esquemas[Sede][Periodo][EsquemaDePago.ToUpper()].conceptos.Keys.Contains(Concepto.ToUpper()) == false)
                {
                    __esquemas[Sede][Periodo][EsquemaDePago.ToUpper()].conceptos.Add(Concepto.ToUpper(), Concepto);
                }
            }
            //
            // CONTRATOS
            //
            //res = db.getTable("SELECT CVE_CONTRATO FROM FORMATOCONTRATOS");
            //contratos = new List<string>();
            //while (res.Next())
            //	contratos.Add(res.Get("CVE_CONTRATO"));
            res       = db.getTable("SELECT CONTRATO FROM FORMATOCONTRATOS");
            contratos = new List <string>();
            while (res.Next())
            {
                contratos.Add(res.Get("CONTRATO"));
            }
        }