示例#1
0
        private bool cantidadRegSubsis(int idEvento, string nomSubsis, int cantidadTransaccion)
        {
            bool aceptado                 = false;
            int  cantidadRegistrada       = cantidadTransaccion;
            SubsistemaEventoDAL dalSubSis = new SubsistemaEventoDAL();
            int cantidadAceptada          = dalSubSis.cantidadAceptada(idEvento, nomSubsis);

            if (cantidadRegistrada <= cantidadAceptada)
            {
                aceptado = true;
            }

            return(aceptado);
        }
示例#2
0
        ///<summary>
        ///Realizar Registro masivo a traves de una transacción con un DataTable
        /// </summary>
        public string registroMasivo(int idEvento, string idTR, DataTable dt)
        {
            string mensaje = "Listo";
            bool   error   = false;
            bool   fallaMT = false;
            MesaParticipanteDAL    mpDAL          = new MesaParticipanteDAL();
            CampoEventoDAL         cEventoDAL     = new CampoEventoDAL();
            SubsistemaEventoDAL    dal            = new SubsistemaEventoDAL();
            MunicipioEventoDAL     muniEDAL       = new MunicipioEventoDAL();
            MunicipioBL            muniBL         = new MunicipioBL();
            FuncionParticipanteDAL funcDAL        = new FuncionParticipanteDAL();
            List <string[, ]>      listaFolioIdMT = new List <string[, ]>();
            string        idMTLista       = "";
            List <string> listSubsistemas = new List <string>();
            List <string> listEscuelasCCT = new List <string>();

            try
            {
                using (var db = new SeguimientoPermanenciaEntities())
                {
                    //using System.Data.Entity; to use DbContextTransaction
                    using (DbContextTransaction transaction = db.Database.BeginTransaction())
                    {
                        try
                        {
                            //Comenzar con la inserción de participantes
                            //Si la cantidad de participantes asignadas por el admin se supera hacer roolback, NOTIFICAR
                            //Validar los tipos de datos a insetar, datos incompatibles; hacer roolback, NOTIFICAR

                            //Obtener datosde DataTable



                            foreach (DataRow row in dt.Rows)//Recorrer renglones de DataTable
                            {
                                tblRegistroEvento newRegEvento = new tblRegistroEvento();

                                List <string> idMesaTrabajoParticipante = new List <string>();
                                newRegEvento.idEvento       = idEvento;
                                newRegEvento.idTipoRegistro = idTR;

                                foreach (DataColumn col in dt.Columns)//Recorrer las columnas del renglon en DataTable
                                {
                                    //Llenar la lista con los id de la mesa de trabajo si el campo Mesa de trabajo esta habilitado
                                    if (cEventoDAL.campoHabilitado(idEvento, "mesaTrabajo") == true)
                                    {
                                        if (col.ColumnName.Contains("Mesa de trabajo") == true) //Si la columna contiene Mesa de trabajo
                                        {
                                            string participa = row[col.ColumnName].ToString();  //Obtener el valor del renglon NO o SI
                                            if (participa == "SI")
                                            {
                                                string   nombreMT = col.ColumnName;
                                                string[] splitCol = nombreMT.Split('-');
                                                if (splitCol.Length != 0)
                                                {
                                                    nombreMT = splitCol[1].Trim();
                                                }
                                                //Obtener el id con el nombre de la mesa de trabajo
                                                MesaEventoDAL mesaDAL = new MesaEventoDAL();
                                                idMesaTrabajoParticipante.Add(mesaDAL.getIDmesaXnombreYevento(idEvento, nombreMT).ToString());
                                            }
                                        }
                                    }
                                    //
                                    switch (col.ColumnName)
                                    {
                                    case "CCT":

                                        if (cEventoDAL.campoHabilitado(idEvento, "CCT") == true)
                                        {
                                            if (existeEscuelaCCT(idEvento, row["CCT"].ToString()) == false)
                                            {
                                                mensaje = "CCT invalida para el registro al evento.";
                                                error   = true;
                                            }
                                            else
                                            {
                                                newRegEvento.CCT = row["CCT"].ToString();
                                                listEscuelasCCT.Add(row["CCT"].ToString());
                                            }
                                        }

                                        break;

                                    case "nombrePlantel":
                                        if (cEventoDAL.campoHabilitado(idEvento, "nombrePlantel") == true)
                                        {
                                            newRegEvento.nombrePlantel = row["nombrePlantel"].ToString();
                                        }
                                        break;

                                    case "municipio":
                                        //Validar los municipios permitidos con la tabla tblmunicipioEvento
                                        if (cEventoDAL.campoHabilitado(idEvento, "municipio") == true)
                                        {
                                            int idMuni = muniBL.idMunicipio(row["municipio"].ToString());
                                            if (muniEDAL.existeMuniEvento(idEvento, idMuni) == true)
                                            {
                                                newRegEvento.municipio = row["municipio"].ToString();
                                            }
                                            else
                                            {
                                                mensaje = "El evento no esta destinado al municipio " + row["municipio"].ToString();
                                                error   = true;
                                            }
                                        }
                                        break;

                                    case "regionSEG":
                                        if (cEventoDAL.campoHabilitado(idEvento, "regionSEG") == true)
                                        {
                                            newRegEvento.regionSEG = row["regionSEG"].ToString();
                                        }
                                        break;

                                    case "nivel":
                                        if (cEventoDAL.campoHabilitado(idEvento, "nivel") == true)
                                        {
                                            newRegEvento.nivel = row["nivel"].ToString();
                                        }
                                        break;

                                    case "instiSubsis":
                                        if (cEventoDAL.campoHabilitado(idEvento, "instiSubsis") == true)
                                        {
                                            if (dal.existeSubSis(idEvento, row["instiSubsis"].ToString()) == false)
                                            {
                                                mensaje = "Subsistema incorrecto, no puede realizar el registro.";
                                                error   = true;
                                            }
                                            else
                                            {
                                                newRegEvento.instiSubsis = row["instiSubsis"].ToString();
                                                listSubsistemas.Add(row["instiSubsis"].ToString());
                                            }
                                        }
                                        break;

                                    case "CURP":     //Validar CURP, no valido rolback, error==true,mensaje
                                        if (cEventoDAL.campoHabilitado(idEvento, "CURP") == true)
                                        {
                                            if (validarCURP(row["CURP"].ToString()) == true)
                                            {
                                                newRegEvento.CURP = row["CURP"].ToString();
                                            }
                                            else
                                            {
                                                error   = true;
                                                mensaje = "CURP no corresponde con la estructura.";
                                            }
                                        }
                                        break;

                                    case "nombre":
                                        if (cEventoDAL.campoHabilitado(idEvento, "nombre") == true)
                                        {
                                            newRegEvento.nombre = row["nombre"].ToString();
                                        }
                                        break;

                                    case "apellidoPat":
                                        if (cEventoDAL.campoHabilitado(idEvento, "apellidoPat") == true)
                                        {
                                            newRegEvento.apellidoPat = row["apellidoPat"].ToString();
                                        }
                                        break;

                                    case "apellidoMat":
                                        if (cEventoDAL.campoHabilitado(idEvento, "apellidoMat") == true)
                                        {
                                            newRegEvento.apellidoMat = row["apellidoMat"].ToString();
                                        }
                                        break;

                                    case "correoElectronico":     //Validar email, no valido rolback, error==true,mensaje
                                        if (cEventoDAL.campoHabilitado(idEvento, "correoElectronico") == true)
                                        {
                                            Regex erEmail = new Regex(@".+\.[a-z]{2,}");
                                            if (erEmail.IsMatch(row["correoElectronico"].ToString()) == true)
                                            {
                                                newRegEvento.correoElectronico = row["correoElectronico"].ToString();
                                            }
                                            else
                                            {
                                                error   = true;
                                                mensaje = "Correo eléctronico invalido.";
                                            }
                                        }
                                        break;

                                    case "telefono":     //Validar teléfono, no valido rolback, error==true,mensaje
                                        if (cEventoDAL.campoHabilitado(idEvento, "telefono") == true)
                                        {
                                            Regex erTel = new Regex(@"^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$");
                                            if (erTel.IsMatch(row["telefono"].ToString()) == true)
                                            {
                                                newRegEvento.telefono = row["telefono"].ToString();
                                            }
                                            else
                                            {
                                                error   = true;
                                                mensaje = "Télefono invalido.";
                                            }
                                        }
                                        break;

                                    case "sexo":
                                        if (cEventoDAL.campoHabilitado(idEvento, "sexo") == true)
                                        {
                                            newRegEvento.sexo = row["sexo"].ToString();
                                        }
                                        break;

                                    case "funcion":
                                        //Validar funcion con tabla tblFuncionParticipante
                                        if (cEventoDAL.campoHabilitado(idEvento, "funcion") == true)
                                        {
                                            if (funcDAL.existeFuncion(idEvento, row["funcion"].ToString()) == true)
                                            {
                                                newRegEvento.funcion = row["funcion"].ToString();
                                            }
                                            else
                                            {
                                                error   = true;
                                                mensaje = "El evento no es para " + row["funcion"].ToString();
                                            }
                                        }

                                        break;
                                    }
                                    if (error == true)
                                    {
                                        break;
                                    }
                                }
                                //Al final del renglon se guarda el registro.
                                if (error == true)
                                {
                                    break;
                                }
                                db.tblRegistroEvento.Add(newRegEvento);
                                db.SaveChanges();

                                //Validar que la mesa de trabajo este habilitada para el evento


                                //Aqui validar INSERT Masivo de Registro a la MESA de trabajo
                                //obtener el folio

                                if (cEventoDAL.campoHabilitado(idEvento, "mesaTrabajo") == true)
                                {
                                    int folio = newRegEvento.folio;
                                    if (idMesaTrabajoParticipante.Count > 0)//Si la lista con los ID de la Mesa de trabajo no esta vacia
                                    {
                                        idMTLista = string.Join(",", idMesaTrabajoParticipante.ToArray());

                                        listaFolioIdMT.Add(new string[, ] {
                                            { folio.ToString(), idMTLista }
                                        });
                                        //if (mpDAL.agregarMesaParticipanteMasivo(folio, idMesaTrabajoParticipante) == false)
                                        //{
                                        //    error = true;
                                        //    string idMTLista = "";
                                        //    foreach (var idlista in idMesaTrabajoParticipante)
                                        //    {
                                        //        idMTLista = idMTLista + " " + idlista;
                                        //    }
                                        //    mensaje = "folio " + folio + " Elementos Lista idMT: "+idMTLista;
                                        //}
                                    }
                                    else
                                    {//Solo se guarda el folio y un sting vacio
                                        listaFolioIdMT.Add(new string[, ] {
                                            { folio.ToString(), "" }
                                        });
                                    }
                                }

                                //if (listaIDmesa.Count > 0)
                                //{
                                //    int folio = newRegEvento.folio;
                                //    if (mpDAL.agregarMesaParticipanteMasivo(folio, listaIDmesa) == false)
                                //    {
                                //        error = true;
                                //        mensaje = "Error en la inscripción a las mesas de trabajo";
                                //    }
                                //}


                                if (error == true)
                                {
                                    break;
                                }
                            }
                            if (error == false)
                            {
                                //validar listSubSis y listEscuelaCCT capacidad antes de commit
                                bool aceptaSubsis     = true;
                                bool aceptaCCTescuela = true;
                                foreach (var item in listSubsistemas.GroupBy(x => x))
                                {
                                    //Console.WriteLine(item.Key + " encontrado " + item.Count());
                                    string nomSubsis = item.Key;
                                    model.listaRegistroEvento = (from re in db.tblRegistroEvento where re.idEvento == idEvento && re.instiSubsis == nomSubsis select re).ToList();
                                    int cant = model.listaRegistroEvento.Count;
                                    int cantidadRegistrada = cant;//+ item.Count()
                                    aceptaSubsis = cantidadRegSubsis(idEvento, item.Key, cantidadRegistrada);
                                    //mensaje = cant.ToString() + " " + item.Count().ToString() + " ";
                                    if (aceptaSubsis == false)
                                    {
                                        break;
                                    }
                                }

                                foreach (var item in listEscuelasCCT.GroupBy(x => x))
                                {
                                    //Console.WriteLine(item.Key + " encontrado " + item.Count());
                                    string escuelaCCT = item.Key;
                                    model.listaRegistroEvento = (from re in db.tblRegistroEvento where re.idEvento == idEvento && re.CCT == escuelaCCT select re).ToList();
                                    int cant = model.listaRegistroEvento.Count;
                                    int cantidadRegistrada = cant;//+ item.Count()
                                    aceptaCCTescuela = cantidadRegEscuelaCCT(idEvento, item.Key, cantidadRegistrada);
                                    //mensaje = cant.ToString() + " " + item.Count().ToString() + " ";
                                    if (aceptaCCTescuela == false)
                                    {
                                        break;
                                    }
                                }

                                if (aceptaSubsis == true && aceptaCCTescuela == true)
                                {
                                    transaction.Commit();
                                    if (cEventoDAL.campoHabilitado(idEvento, "mesaTrabajo") == true)
                                    {
                                        if (mpDAL.agregarMesaParticipanteMasivo(listaFolioIdMT, idEvento) == false)//==false
                                        {
                                            //Seccion para eliminar los folios
                                            foreach (var folio in listaFolioIdMT)
                                            {
                                                using (var dbfolio = new SeguimientoPermanenciaEntities())
                                                {
                                                    int folioActual   = int.Parse(folio[0, 0]);
                                                    var EliminarFolio = (from r in dbfolio.tblRegistroEvento where r.folio == folioActual select r).First <tblRegistroEvento>();
                                                    dbfolio.tblRegistroEvento.Remove(EliminarFolio);
                                                    dbfolio.SaveChanges();
                                                }
                                            }
                                            fallaMT = true;
                                            error   = true;
                                            mensaje = "Error en la inscripción a las mesas de trabajo";

                                            //break;
                                        }
                                    }
                                }
                                else
                                {
                                    transaction.Rollback();
                                    string campo = "";
                                    if (aceptaSubsis == false)
                                    {
                                        campo = "SubSistemas";
                                    }
                                    else
                                    {
                                        campo = "Escuela";
                                    }
                                    mensaje = "Ya no se aceptan más registros para el " + campo + " seleccionado.";
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            transaction.Rollback();
                            mensaje = "Error " + ex.Message;
                        }
                        if (error == true && fallaMT == false)
                        {
                            transaction.Rollback();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                mensaje = "Error " + ex.Message;
            }



            return(mensaje);
        }