예제 #1
0
        public static void UpdateMatriz(int idCentro)
        {
            var db = new edayRoomEntities();
            var centro = db.Centroes.Single(c => c.id == idCentro);
            var matriz = db.mudVsPsuvs.Single(c => c.id_centro == centro.unique_id);

            var mesas = (from m in db.Mesas
                         where m.id_centro == centro.id
                               && m.Totalizacions.Any()
                         select m);

            var votantesContados = mesas.Any()?mesas.Sum(m => m.votantes):0;
            var totales = (from m in db.Mesas
                          from t in db.Totalizacions
                          where m.id_centro == centro.id &&
                                t.id_mesa == m.id
                          select t).GroupBy(t=>t.RelacionCandidatoPartidoCoalicion.Candidato.nombre).
                          Select(k=>new{k.Key,valor = k.Sum(m=>m.valor)});
            int totalCapriles = totales.Any() ? totales.Single(t => t.Key.Contains("Capriles")).valor:0;
            int totalChavez = totales.Any() ? totales.Single(t => t.Key.Contains("Jaua")).valor:0;
            int abstencion = 0;
            totalCapriles = totalCapriles * (centro.votantes??0) / votantesContados;
            totalChavez = totalChavez*(centro.votantes??0)/votantesContados;
            abstencion = (centro.votantes ?? 0) - (totalCapriles + totalChavez);

            matriz.mud_actual = totalCapriles;
            matriz.psuv_actual = totalChavez;
            matriz.abstencion = abstencion;
            db.SaveChanges();
        }
예제 #2
0
        public string CrearCandidato(string nombre, string coalicion, string partido, string color, string colorpartido, string colorcoalicion)
        {
            var db = new edayRoomEntities();
            var rel = new RelacionCandidatoPartidoCoalicion();
            db.RelacionCandidatoPartidoCoalicions.AddObject(rel);
            Candidato candidato = db.Candidatoes.SingleOrDefault(c => c.nombre.ToLower() == nombre.ToLower());
            if (candidato == null)
            {
                candidato = new Candidato {nombre = nombre, color = color};
                db.Candidatoes.AddObject(candidato);
            }
            Partido partidoObj = db.Partidoes.SingleOrDefault(c => c.nombre.ToLower() == partido.ToLower());
            if (partidoObj == null)
            {
                partidoObj = new Partido {nombre = partido, color=colorpartido};
                db.Partidoes.AddObject(partidoObj);
            }

            Coalicion coalicionObj = db.Coalicions.SingleOrDefault(c => c.nombre.ToLower() == coalicion.ToLower());
            if (coalicionObj == null)
            {
                coalicionObj = new Coalicion {nombre = coalicion, color = colorcoalicion};
                db.Coalicions.AddObject(coalicionObj);
            }

            partidoObj.RelacionCandidatoPartidoCoalicions.Add(rel);
            coalicionObj.RelacionCandidatoPartidoCoalicions.Add(rel);
            candidato.RelacionCandidatoPartidoCoalicions.Add(rel);

            db.SaveChanges();
            return new JavaScriptSerializer().Serialize("");
        }
예제 #3
0
        public string ActualizarAlertaTotalizacion(TotalizacionContact contacto, string mensaje)
        {
            var db = new edayRoomEntities();
            var user = db.users.Single(u => u.username == User.Identity.Name);
            TotalizacionAlerta alerta = (from a in db.TotalizacionAlertas
                                         where a.id == contacto.BlockingAlert.Id
                                         select a).Single();

            if (!string.IsNullOrWhiteSpace(mensaje))
            {
                var alertMessage = new TotalizacionAlertaMessage { fecha = DateTime.Now, mensaje = mensaje, id_usuario=user.id };
                alerta.TotalizacionAlertaMessages.Add(alertMessage);
            }

            db.SaveChanges();
            IQueryable<TotalizacionContactAlertMessage> mensajesAlerta = (from a in alerta.TotalizacionAlertaMessages
                                                                          orderby a.fecha descending
                                                                          select new TotalizacionContactAlertMessage
                                                                                     {
                                                                                         Id = a.id,
                                                                                         Fecha = a.fecha,
                                                                                         Message = a.mensaje
                                                                                     }).AsQueryable();

            return new JavaScriptSerializer().Serialize("");
        }
예제 #4
0
 public ActionResult UpdateSettings(Setting setting)
 {
     using (var db = new edayRoomEntities())
     {
         db.Settings.Attach(setting);
         db.ObjectStateManager.ChangeObjectState(setting, EntityState.Modified);
         db.SaveChanges();
     }
     return RedirectToAction("Index");
 }
예제 #5
0
 public string EditTestigoMovilizacion(int tid, string name, string number)
 {
     var db = new edayRoomEntities();
     var testigo = db.Movilizadors.SingleOrDefault(m => m.id == tid);
     if(testigo != null)
     {
         testigo.nombre = name;
         testigo.numero = number;
         db.SaveChanges();
         return "Testigo editado";
     }
     return "Error";
 }
예제 #6
0
 public string DeleteCandidato(int id)
 {
     var db = new edayRoomEntities();
     Candidato candidato = (from c in db.Candidatoes
                            where c.id == id
                            select c).SingleOrDefault();
     if (candidato != null)
     {
         db.Candidatoes.DeleteObject(candidato);
     }
     db.SaveChanges();
     return "Deleted";
 }
예제 #7
0
        public string EditTestigoParticipacion(int tid, string name, string number)
        {
            var db = new edayRoomEntities();
            var testigo = db.Testigoes.SingleOrDefault(t => t.id == tid);

            if (testigo != null)
            {
                testigo.numero = number;
                testigo.nombre = name;
                db.SaveChanges();
                return "Testigo Editado";
            }
            return "Falla editando";
        }
예제 #8
0
        public string ActualizarAlertaParticipacion(ParticipacionContact contacto, string mensaje)
        {
            var db = new edayRoomEntities();
            var user = db.users.Single(u => u.username == User.Identity.Name);
            ParticipacionAlerta alerta = (from a in db.ParticipacionAlertas
                                          where a.id == contacto.BlockingAlert.Id
                                          select a).Single();

            if (!string.IsNullOrWhiteSpace(mensaje))
            {
                var alertMessage = new ParticipacionAlertaMessage { fecha = DateTime.Now, mensaje = mensaje, id_usuario = user.id };
                alerta.ParticipacionAlertaMessages.Add(alertMessage);
            }

            db.SaveChanges();

            return new JavaScriptSerializer().Serialize("success");
        }
예제 #9
0
 public string EditAlerta(Alerta alerta)
 {
     if (ModelState.IsValid)
     {
         var db = new edayRoomEntities();
         db.Alertas.Attach(alerta);
         db.ObjectStateManager.ChangeObjectState(alerta, EntityState.Modified);
         db.SaveChanges();
     }
     return "";
 }
예제 #10
0
        public string AlertaTotalizacion(TotalizacionContact contacto, int valor, string mensaje)
        {
            var db = new edayRoomEntities();
            var user = db.users.Single(u => u.username == User.Identity.Name);

            #region Registro la alerta

            var alerta = new TotalizacionAlerta
                             {
                                 activa = true,
                                 fecha = DateTime.Now,
                                 id_mesa = contacto.MesaId,
                                 id_testigoTotalizacion = contacto.IdTestigo,
                                 id_alerta = valor,
                                 id_usuario = user.id
                             };
            db.TotalizacionAlertas.AddObject(alerta);

            var messages = new List<TotalizacionAlertaMessage>();
            if (!string.IsNullOrWhiteSpace(mensaje))
            {
                var alertMessage = new TotalizacionAlertaMessage { fecha = DateTime.Now, mensaje = mensaje , id_usuario = user.id};
                alerta.TotalizacionAlertaMessages.Add(alertMessage);
                messages.Add(alertMessage);
            }

            #endregion

            #region  Retraso de Timeline

            Alerta objetoAlerta = db.Alertas.Single(a => a.id == valor);

            if (objetoAlerta.regresivo)
            {
                var oldTimelines =
                  (from pt in db.TotalizacionTimelines
                   where
                       pt.activa && pt.id_mesa == contacto.MesaId
                   //pt.id == contacto.MovilizacionTimelineId
                   select pt);
                foreach (var oldTimeline in oldTimelines)
                {
                    oldTimeline.activa = false;
                }

                //TotalizacionTimeline oldTimeline =
                //    (from pt in db.TotalizacionTimelines where pt.id == contacto.TotalizacionTimelineId select pt).
                //        Single();
                //oldTimeline.activa = false;
                DateTime newDate = DateTime.Now.AddMinutes(objetoAlerta.tiempo);
                var newTimeline = new TotalizacionTimeline
                                      {
                                          id_mesa = contacto.MesaId,
                                          //id_parent = oldTimeline.id,
                                          fecha = newDate,
                                          activa = true
                                      };
                db.TotalizacionTimelines.AddObject(newTimeline);
            }

            #endregion

            db.SaveChanges();

            // VERIFICAR SI HAY QUE HACER TRIGGER DE ALGUNA ALERTA
            var existingAlerts = from a in db.TotalizacionAlertas
                                                            where a.id_mesa == contacto.MesaId &&
                                                                  a.id_alerta == valor && a.activa
                                                            select a;
            int alertCount = existingAlerts.Count();
            int maxRepeats = existingAlerts.First().Alerta.maxRepeats ?? 0;
            if (maxRepeats != 0)
            {
                if (alertCount == maxRepeats)
                {
                    //LLEGUE AL LIMITE, hago el trigger de la alerta
                    Alerta newAlerta = existingAlerts.First().Alerta.AlertaAsociada;
                    var alertaAuto = new TotalizacionAlerta
                                         {
                                             activa = true,
                                             fecha = DateTime.Now,
                                             id_mesa = contacto.MesaId,
                                             id_testigoTotalizacion = contacto.IdTestigo,
                                             id_alerta = newAlerta.id,
                                             id_usuario = user.id
                                         };
                    db.TotalizacionAlertas.AddObject(alertaAuto);

                    var alertMessage = new TotalizacionAlertaMessage { fecha = DateTime.Now, mensaje = "Alerta generada por sistema", id_usuario = user.id };
                    alertaAuto.TotalizacionAlertaMessages.Add(alertMessage);
                }
            }
            db.SaveChanges();

            //var newContacto = TotalizacionContact.GetTotalizacionContact(contacto.IdTestigo);
            return new JavaScriptSerializer().Serialize("");
        }
예제 #11
0
        public bool Save()
        {
            using (var db = new edayRoomEntities())
            {
                var testigo = new Testigo
                                  {
                                      id_mesa = IdMesa,
                                      nombre = Nombre,
                                      numero = Numero,
                                      activo = Activo
                                  };

                db.Testigoes.AddObject(testigo);
                db.SaveChanges();
                Id = testigo.id;
                return true;
            }
        }
예제 #12
0
        public bool Save()
        {
            using (var db = new edayRoomEntities())
            {
                bool returnValue = true;
                Mesa mesa = (from m in db.Mesas
                             where m.id_centro == IdCentro
                                   && m.uniqueId == UniqueId
                             select m).SingleOrDefault();
                if (mesa == null)
                {
                    mesa = new Mesa
                               {
                                   id_centro = IdCentro,
                                   numero = Numero,
                                   uniqueId = UniqueId,
                                   votantes = Votantes
                               };
                    db.Mesas.AddObject(mesa);
                    mesa.ParticipacionTimelines.Add(new ParticipacionTimeline
                                                        {
                                                            activa = true,
                                                            fecha = DateTime.Now,
                                                        });

                    mesa.Participacions.Add(new Participacion
                                                {
                                                    conteo = 0,
                                                    active = true,
                                                    cola = 0,
                                                    fecha = DateTime.Now,
                                                    id_testigo = null
                                                });

                    db.SaveChanges();
                }
                else
                {
                    returnValue = false;
                }

                Id = mesa.id;

                return returnValue;
            }
        }
예제 #13
0
        public string EditCandidato(int relid, string nombre, string partido, string coalicion, string color, string colorpartido, string colorcoalicion)
        {
            var db = new edayRoomEntities();
            RelacionCandidatoPartidoCoalicion rel =
                db.RelacionCandidatoPartidoCoalicions.SingleOrDefault(r => r.id == relid);

            #region check candidato

            if (rel != null)
            {
                Candidato candidato = db.Candidatoes.SingleOrDefault(c => c.nombre.ToLower() == nombre.ToLower());
                //Chequeo si tengo que editar directamente al candidato o crear uno nuevo
                if (rel.Candidato.RelacionCandidatoPartidoCoalicions.Count() > 1)
                {
                    //Creo nuevo candidato
                    if (rel.Candidato.nombre != nombre || rel.Candidato.color != color)
                    {
                        if (candidato == null)
                        {
                            candidato = new Candidato {nombre = nombre};
                            db.Candidatoes.AddObject(candidato);
                        }
                        candidato.color = color;
                        rel.id_candidato = candidato.id;
                    }
                }
                else
                {
                    if (rel.Candidato.nombre.ToLower() != nombre.ToLower() || rel.Candidato.color != color)
                        if (candidato == null || rel.Candidato.nombre.ToLower() == nombre.ToLower())
                        {
                            //Edito candidato existente
                            rel.Candidato.nombre = nombre;
                            rel.Candidato.color = color;
                        }
                        else
                        {
                            db.Candidatoes.DeleteObject(rel.Candidato);
                            rel.id_candidato = candidato.id;
                        }
                }

                #endregion

                #region check partido

                Partido partidoObj = db.Partidoes.SingleOrDefault(p => p.nombre.ToLower().Trim() == partido.ToLower().Trim());
                //Chequeo si tengo que editar directamente al candidato o crear uno nuevo
                if (rel.Partido.RelacionCandidatoPartidoCoalicions.Count() > 1)
                {
                    //Creo nuevo candidato
                    if (rel.Partido.nombre != partido || rel.Partido.color != colorpartido)
                    {
                        if (partidoObj == null)
                        {
                            partidoObj = new Partido {nombre = partido};
                            db.Partidoes.AddObject(partidoObj);
                        }
                        partidoObj.color = colorpartido;
                        rel.id_partido = partidoObj.id;
                    }
                }
                else
                {
                    if (rel.Partido.nombre != partido || rel.Partido.color != colorpartido)
                    {
                        if (partidoObj == null || rel.Partido.nombre == partido)
                        {
                            rel.Partido.nombre = partido;
                            rel.Partido.color = colorpartido;
                        }
                        else
                        {
                            db.Partidoes.DeleteObject(rel.Partido);
                            rel.id_partido = partidoObj.id;
                        }
                    }
                }

                #endregion

                #region check coalicion

                //Chequeo si tengo que editar directamente al candidato o crear uno nuevo
                Coalicion coalicionObj = db.Coalicions.SingleOrDefault(c => c.nombre.ToLower() == coalicion.ToLower());

                if (rel.Coalicion.RelacionCandidatoPartidoCoalicions.Count() > 1)
                {
                    //Creo nuevo candidato
                    if (rel.Coalicion.nombre != coalicion || rel.Coalicion.color != colorcoalicion)
                    {
                        if (coalicionObj == null)
                        {
                            coalicionObj = new Coalicion {nombre = coalicion};
                            db.Coalicions.AddObject(coalicionObj);
                        }
                        coalicionObj.color = colorcoalicion;
                        rel.id_coalicion = coalicionObj.id;
                    }
                }
                else
                {
                    //Busco si el nuevo nombre tiene algun match
                    //Edito candidato existente
                    if (rel.Coalicion.nombre != coalicion || rel.Coalicion.color != colorcoalicion)
                    {
                        if (coalicionObj == null || rel.Coalicion.nombre == coalicion)
                        {
                            rel.Coalicion.nombre = coalicion;
                            rel.Coalicion.color = colorcoalicion;
                        }
                        else
                        {
                            db.Coalicions.DeleteObject(rel.Coalicion);
                            rel.id_coalicion = coalicionObj.id;
                        }
                    }
                }

                #endregion
            }
            db.SaveChanges();

            return "";
        }
예제 #14
0
        public string CancelarAlertaTotalizacion(TotalizacionContact contacto, string mensaje)
        {
            var db = new edayRoomEntities();
            TotalizacionAlerta alerta = (from a in db.TotalizacionAlertas
                                         where a.id == contacto.BlockingAlert.Id
                                         select a).Single();

            alerta.activa = false;
            db.SaveChanges();
            return new JavaScriptSerializer().Serialize("");
        }
예제 #15
0
        public ActionResult SetupUsers()
        {
            HttpPostedFileBase fileUpload = Request.Files[0];
            var users = new List<EdayRoomUser>();

            if (fileUpload != null)
            {
                fileUpload.SaveAs(Server.MapPath("~/temp/" + fileUpload.FileName));
                var fi = new FileInfo(Server.MapPath("~/temp/" + fileUpload.FileName));
                var fiOut = new FileInfo(
                    Path.Combine(
                        Server.MapPath(ConfigurationManager.AppSettings["userFilesDirectory"]),
                        string.Format("{0}_" + fileUpload.FileName,
                                      DateTime.Now.ToString("yyyy_MM_dd_hh_mm_ss"))));
                var db = new edayRoomEntities();
                List<string> existingUsers = (from u in db.users
                                              select u.username).ToList();
                var package = new ExcelPackage(fi);
                ExcelWorksheet worksheet = package.Workbook.Worksheets[1];
                worksheet.Cells[1, 3].Value = "usuario";
                worksheet.Cells[1, 4].Value = "password";
                for (int i = 2; i <= worksheet.Dimension.End.Row; i++)
                {
                    var nombre = (string) worksheet.Cells[i, 1].Value;
                    var apellido = (string) worksheet.Cells[i, 2].Value;
                    var u = new EdayRoomUser
                                {
                                    Name =
                                        nombre + " " +
                                        apellido,
                                    Password = PasswordManagement.GenerateRandomPassword(6),
                                };
                    u.Username = u.Name.Replace(" ", ".").ToLower();
                    int uid = 1;
                    if (existingUsers.Any(us => us == u.Username))
                    {
                        string original = u.Username;
                        while (true)
                        {
                            u.Username = original + "." + uid;
                            if (existingUsers.All(us => us != u.Username))
                            {
                                break;
                            }
                            uid++;
                        }
                    }
                    existingUsers.Add(u.Username);
                    worksheet.Cells[i, 3].Value = u.Username;
                    worksheet.Cells[i, 4].Value = u.Password;
                    users.Add(u);
                    string salt = "";
                    string passwordHash = PasswordManagement.GeneratePasswordHash(u.Password, out salt);

                    db.users.AddObject(new user
                                           {
                                               nombre = nombre,
                                               apellido = apellido,
                                               username = u.Username,
                                               salt = salt,
                                               hash = passwordHash
                                           });
                }

                db.UserFiles.AddObject(new UserFile
                                           {
                                               fileName = fiOut.Name
                                           });

                db.SaveChanges();

                package.SaveAs(fiOut);
            }
            var errores = new List<string> {"error " + fileUpload.FileName};

            return GetAllUsers(errores, users);
        }
예제 #16
0
        public string TogglePauseUser(int userId)
        {
            var db = new edayRoomEntities();
            var user = db.users.Single(u => u.id == userId);
            user.paused = !user.paused;

            if (user.paused)
            {
                var usersInGroup = db.users.Where(u => u.participacion && u.grupo == user.grupo && u.id != user.id && !u.paused).ToList();
                var groupCount = usersInGroup.Count;
                var assignedParticipacion = db.AsignacionParticipacions.Where(ap => ap.id_user == user.id).ToList();
                var roundRobin = 0;
                foreach (var ap in assignedParticipacion)
                {
                    db.AsignacionParticipacions.AddObject(new AsignacionParticipacion
                                                              {
                                                                  id_mesa = ap.id_mesa,
                                                                  id_original_user = ap.id_original_user ?? user.id,
                                                                  isReplacement = true,
                                                                  id_user = usersInGroup[roundRobin % groupCount].id
                                                              });
                    roundRobin++;
                }
            }
            else
            {

                var assignedParticipacion = db.AsignacionParticipacions.Where(ap => ap.id_original_user == user.id && ap.isReplacement).ToList();
                foreach (var ap in assignedParticipacion)
                {
                    db.AsignacionParticipacions.DeleteObject(ap);
                }
            }

            db.SaveChanges();
            return user.paused.ToString(CultureInfo.InvariantCulture);
        }
예제 #17
0
        public string AlertaParticipacion(ParticipacionContact contacto, int valor, string mensaje)
        {
            var db = new edayRoomEntities();
            var mesa = db.Mesas.Single(m => m.id == contacto.IdMesa);
            var user = db.users.Single(u => u.username == User.Identity.Name);
            #region Registro la alerta

            var alerta = new ParticipacionAlerta
                             {
                                 activa = true,
                                 comentario =
                                     string.Format("<li><b>{1}</b> - {0}</li>", mensaje, DateTime.Now.ToString("HH:mm")),
                                 fecha = DateTime.Now,
                                 id_mesa = contacto.IdMesa,
                                 id_testigo = contacto.IdTestigo,
                                 id_alerta = valor,
                                 id_usuario = user.id
                             };

            db.ParticipacionAlertas.AddObject(alerta);

            var messages = new List<ParticipacionAlertaMessage>();
            if (!string.IsNullOrWhiteSpace(mensaje))
            {
                var alertMessage = new ParticipacionAlertaMessage { fecha = DateTime.Now, mensaje = mensaje, id_usuario = user.id };
                alerta.ParticipacionAlertaMessages.Add(alertMessage);
                messages.Add(alertMessage);
            }

            #endregion

            #region  Retraso de Timeline

            Alerta objetoAlerta = db.Alertas.Single(a => a.id == valor);
            if (objetoAlerta.blocking){
                mesa.alertBlocked = true;
                mesa.blockingAlertId = objetoAlerta.id;
            }
            if (objetoAlerta.regresivo)
            {

                var oldTimelines =
                    (from pt in db.ParticipacionTimelines
                     where
                         pt.activa && pt.id_mesa == contacto.IdMesa
                     //pt.id == contacto.MovilizacionTimelineId
                     select pt);
                foreach (var oldTimeline in oldTimelines)
                {
                    oldTimeline.activa = false;
                }
                //ParticipacionTimeline oldTimeline =
                //    (from pt in db.ParticipacionTimelines where pt.id == contacto.ParticipacionTimelineId select pt).
                //        Single();
                //oldTimeline.activa = false;
                DateTime newDate = DateTime.Now.AddMinutes(objetoAlerta.tiempo);
                var newTimeline = new ParticipacionTimeline { id_mesa = contacto.IdMesa, fecha = newDate, activa = true };
                db.ParticipacionTimelines.AddObject(newTimeline);
            }

            #endregion

            db.SaveChanges();

            // VERIFICAR SI HAY QUE HACER TRIGGER DE ALGUNA ALERTA
            var existingAlerts = from a in db.ParticipacionAlertas
                                 where a.id_mesa == contacto.IdMesa &&
                                       a.id_alerta == valor && a.activa
                                 select a;
            var alertCount = existingAlerts.Count();
            var maxRepeats = existingAlerts.First().Alerta.maxRepeats ?? 0;
            if (maxRepeats != 0)
            {
                if (alertCount == maxRepeats)
                {
                    //LLEGUE AL LIMITE, hago el trigger de la alerta
                    var newAlerta = existingAlerts.First().Alerta.AlertaAsociada;
                    var alertaAuto = new ParticipacionAlerta
                                         {
                                             activa = true,
                                             comentario =
                                                 string.Format("<li><b>{1}</b> - {0}</li>",
                                                               "ALERTA GENERADA AUTOMATICAMENTE",
                                                               DateTime.Now.ToString("HH:mm")),
                                             fecha = DateTime.Now,
                                             id_mesa = contacto.IdMesa,
                                             id_testigo = contacto.IdTestigo,
                                             id_alerta = newAlerta.id,
                                             id_usuario = user.id
                                         };
                    db.ParticipacionAlertas.AddObject(alertaAuto);
                    if (newAlerta.blocking){
                        mesa.alertBlocked = true;
                        mesa.blockingAlertId = newAlerta.id;
                    }
                    var alertMessage = new ParticipacionAlertaMessage { fecha = DateTime.Now, mensaje = "Alerta generada por sistema", id_usuario = user.id };
                    alertaAuto.ParticipacionAlertaMessages.Add(alertMessage);
                }
            }
            db.SaveChanges();
            return new JavaScriptSerializer().Serialize("success");
        }
예제 #18
0
        public void AddMessageToAlert(int idAlerta, string modulo, string message)
        {
            var db = new edayRoomEntities();
            var user = db.users.Single(u => u.username == User.Identity.Name);

            switch (modulo)
            {
                case "Participación":
                case "Participaci&#243;n":
                    db.ParticipacionAlertaMessages.AddObject(new ParticipacionAlertaMessage
                                                                 {
                                                                     id_usuario = user.id,
                                                                     mensaje = message,
                                                                     fecha = DateTime.Now,
                                                                     alerta_id = idAlerta
                                                                 });
                    break;
                case "Movilización":
                case "Movilizaci&#243;n":
                    db.MovilizacionAlertaMessages.AddObject(new MovilizacionAlertaMessage()
                                                                {
                                                                    id_usuario = user.id,
                                                                    mensaje = message,
                                                                    fecha = DateTime.Now,
                                                                    alerta_id = idAlerta
                                                                });

                    break;
                case "Exit Poll":
                    db.ExitPollAlertaMessages.AddObject(new ExitPollAlertaMessage()
                                                            {
                                                                id_usuario = user.id,
                                                                mensaje = message,
                                                                fecha = DateTime.Now,
                                                                alerta_id = idAlerta
                                                            });

                    break;
                case "Conteo Rapido":
                    db.QuickCountAlertaMessages.AddObject(new QuickCountAlertaMessage()
                                                              {
                                                                  id_usuario = user.id,
                                                                  mensaje = message,
                                                                  fecha = DateTime.Now,
                                                                  alerta_id = idAlerta
                                                              });

                    break;
                case "Totalización":
                    db.TotalizacionAlertaMessages.AddObject(new TotalizacionAlertaMessage()
                                                                {
                                                                    id_usuario = user.id,
                                                                    mensaje = message,
                                                                    fecha = DateTime.Now,
                                                                    alerta_id = idAlerta
                                                                });

                    break;
            }
            db.SaveChanges();
        }
예제 #19
0
 public string DeleteAlerta(int id)
 {
     var db = new edayRoomEntities();
     Alerta alerta = (from a in db.Alertas
                      where a.id == id
                      select a).SingleOrDefault();
     if (alerta != null)
     {
         db.Alertas.DeleteObject(alerta);
     }
     db.SaveChanges();
     return "Deleted";
 }
예제 #20
0
 public string CrearAlerta(Alerta alerta)
 {
     var db = new edayRoomEntities();
     db.Alertas.AddObject(alerta);
     db.SaveChanges();
     return new JavaScriptSerializer().Serialize("");
 }
예제 #21
0
        public string UpdateTotalizacion(TotalizacionContact contacto, CandidatoValueIncoming[] valores)
        {
            var db = new edayRoomEntities();

            TotalizacionTimeline oldTimeline = (from pt in db.TotalizacionTimelines
                                                where pt.id == contacto.TotalizacionTimelineId
                                                select pt).Single();
            oldTimeline.activa = false;
            db.SaveChanges();

            foreach (CandidatoValueIncoming v in valores)
            {
                var ep = new Totalizacion
                             {
                                 id_candidato = int.Parse(v.name.Replace("candidato-", "")),
                                 id_mesa = contacto.MesaId,
                                 valor = v.value
                             };
                db.Totalizacions.AddObject(ep);
                ep.TotalizacionTimelines.Add(oldTimeline);
            }

            IQueryable<TotalizacionAlerta> alertas = from a in db.TotalizacionAlertas
                                                     where a.activa && !a.Alerta.blocking
                                                           && a.id_mesa == contacto.MesaId
                                                     select a;
            foreach (TotalizacionAlerta a in alertas)
            {
                a.activa = false;
            }

            var centro = db.Centroes.Single(c => c.id == contacto.CentroId);
            centro.totalizado = true;

            db.SaveChanges();
            //MatrizDeSustitucion.UpdateMatriz(contacto.CentroId);

            return new JavaScriptSerializer().Serialize("");
        }
예제 #22
0
        public string UpdateSingleTotalizacion(int totalizacionId, int value)
        {
            var db = new edayRoomEntities();

            Totalizacion totalizacion = (from t in db.Totalizacions
                                         where t.ID == totalizacionId
                                         select t).Single();

            totalizacion.valor = value;
            db.SaveChanges();

            MatrizDeSustitucion.UpdateMatriz(totalizacion.Mesa.Centro.id);

            return new JavaScriptSerializer().Serialize("");
        }
예제 #23
0
        public string CancelarAlertaParticipacion(ParticipacionContact contacto, string mensaje)
        {
            var db = new edayRoomEntities();
            var mesa = db.Mesas.Single(m => m.id == contacto.IdMesa);
            var alerta = (from a in db.ParticipacionAlertas
                                          where
                                          a.Alerta.id == mesa.blockingAlertId &&
                                          a.activa
                                          select a).Single();

            mesa.alertBlocked = false;
            mesa.blockingAlertId = null;
            alerta.activa = false;
            alerta.comentario =
                string.Format("<li> <b>{1}</b> - {0} </li>", "Alerta Cancelada", DateTime.Now.ToString("HH:mm")) +
                alerta.comentario;
            db.SaveChanges();

            return new JavaScriptSerializer().Serialize("success");
        }
예제 #24
0
        public ActionResult CancelAlert(int idAlerta, string modulo)
        {
            var db = new edayRoomEntities();

            switch (modulo)
            {
                case "Participación":
                    db.ParticipacionAlertas.Single(pa => pa.id == idAlerta).activa = false;
                    break;
                case "Movilización":
                    db.MovilizacionAlertas.Single(pa => pa.id == idAlerta).activa = false;
                    break;
                case "Exit Poll":
                    db.ExitPollAlertas.Single(pa => pa.id == idAlerta).activa = false;
                    break;
                case "QuickCount":
                    db.QuickCountAlertas.Single(pa => pa.id == idAlerta).activa = false;
                    break;
                case "Totalización":
                    db.TotalizacionAlertas.Single(pa => pa.id == idAlerta).activa = false;
                    break;
            }
            db.SaveChanges();
            return RedirectToAction("ListAlertas");
        }
예제 #25
0
        public string CerrarMesa(ParticipacionContact contacto)
        {
            var db = new edayRoomEntities();

            var mesa = db.Mesas.Single(m => m.id == contacto.IdMesa);
            mesa.abierta = false;
            mesa.cerrada = true;
            db.SaveChanges();
            return new JavaScriptSerializer().Serialize(db.SaveChanges());
        }
예제 #26
0
        public string UpdateSingleParticipacion(int participacionId, int valor, int cola)
        {
            using (var db = new edayRoomEntities())
            {
                Participacion participacion = db.Participacions.SingleOrDefault(p => p.id == participacionId);

                if (participacion != null)
                {
                    var mesa = participacion.Mesa;
                    mesa.participacion = mesa.participacion == participacion.conteo ? valor : Math.Max(mesa.participacion, valor);
                    participacion.conteo = valor;
                    participacion.cola = cola;

                    var centro = mesa.Centro;
                    var mesasActivas = centro.Mesas1.Where(m => m.participacion != 0).ToArray();
                    var votosRegistrados = mesasActivas.Sum(m => m.participacion);
                    var votantesEnMesa = mesasActivas.Sum(m => m.votantes);
                    var proyeccionCentro = centro.votantes * votosRegistrados / votantesEnMesa;
                    centro.participacionContada = votosRegistrados;
                    centro.participacionProyectada = proyeccionCentro;

                }
                db.SaveChanges();
                return new JavaScriptSerializer().Serialize("");
            }
        }
예제 #27
0
        public string UpdateParticipacion(ParticipacionContact contacto, int valor, int cola = 0)
        {
            var db = new edayRoomEntities();
            var user = db.users.Single(u => u.username == User.Identity.Name);

            //Reseteo los timelines
            var oldTimelines =
                    (from pt in db.ParticipacionTimelines
                     where
                         pt.activa && pt.id_mesa == contacto.IdMesa
                     select pt);
            foreach (var oldTimeline in oldTimelines)
            {
                oldTimeline.activa = false;
            }

            //Guardar valor en timeline
            var newDate = contacto.QuickCountActive ? DateTime.Now.AddMinutes(45) : DateTime.Now.AddMinutes(60);
            var newTimeline = new ParticipacionTimeline { id_mesa = contacto.IdMesa, fecha = newDate, activa = true };
            db.ParticipacionTimelines.AddObject(newTimeline);
            var newParticipacion = new Participacion
            {
                fecha = DateTime.Now,
                hora = DateTime.Now.Hour,
                min10 = DateTime.Now.Minute/10,
                min30 = DateTime.Now.Minute/30,
                conteo = valor,
                id_mesa = contacto.IdMesa,
                id_testigo = contacto.IdTestigo,
                cola = cola,
                active = true,
                id_parent = null,
                id_user = user.id
            };

            //Guardo los datos a nivel de mesa
            var mesa = db.Mesas.Single(m => m.id == contacto.IdMesa);
            mesa.participacion = valor;
            mesa.lastContact = DateTime.Now;
            mesa.nextContact = newDate;
            mesa.abierta = true;

            //Proyeccion de resutados a centro
            var centro = mesa.Centro;
            var mesasActivas = centro.Mesas1.Where(m => m.participacion != 0).ToArray();
            var votosRegistrados = mesasActivas.Sum(m => m.participacion);
            var votantesEnMesa = mesasActivas.Sum(m => m.votantes);
            var proyeccionCentro = centro.votantes * votosRegistrados / votantesEnMesa;

            centro.lastParticipacionContact = DateTime.Now;
            centro.participacionContada = votosRegistrados;
            centro.participacionProyectada = proyeccionCentro;

            //Participacion oldParticipacion = db.Participacions.Single(p => p.id == contacto.LastParticipacionId);
            //oldParticipacion.active = false;

            db.Participacions.AddObject(newParticipacion);

            IQueryable<ParticipacionAlerta> alertas = from a in db.ParticipacionAlertas
                                                      where a.activa && !a.Alerta.blocking
                                                            && a.id_mesa == contacto.IdMesa
                                                      select a;

            foreach (ParticipacionAlerta a in alertas)
            {
                a.activa = false;
            }

            db.SaveChanges();
            return new JavaScriptSerializer().Serialize("");
        }
예제 #28
0
        public string UpdateQuickCount(TotalizacionContact contacto, CandidatoValueIncoming[] valores)
        {
            var db = new edayRoomEntities();
            var user = db.users.Single(u => u.username == User.Identity.Name);

            QuickCountTimeline oldTimeline = (from pt in db.QuickCountTimelines
                                              where pt.id == contacto.TotalizacionTimelineId
                                              select pt).Single();
            oldTimeline.activa = false;
            db.SaveChanges();

            IQueryable<Totalizacion> totalizaciones = db.Totalizacions.Where(t => t.id_mesa == contacto.MesaId);
            foreach (CandidatoValueIncoming v in valores)
            {
                int idCandidato = int.Parse(v.name.Replace("candidato-", ""));
                Totalizacion totalizacion = totalizaciones.SingleOrDefault(t => t.id_candidato == idCandidato);
                if (totalizacion == null)
                {
                    totalizacion = new Totalizacion
                                       {
                                           id_candidato = idCandidato,
                                           id_mesa = contacto.MesaId,
                                           valor = v.value,
                                           id_user = user.id
                                       };
                    db.Totalizacions.AddObject(totalizacion);
                }
                totalizacion.QuickCountTimelines.Add(oldTimeline);
            }

            var centro = db.Centroes.Single(c => c.id == contacto.CentroId);
            centro.totalizado = true;
            IQueryable<QuickCountAlerta> alertas = from a in db.QuickCountAlertas
                                                   where a.activa && !a.Alerta.blocking
                                                         && a.id_centro == contacto.CentroId
                                                   select a;
            foreach (QuickCountAlerta a in alertas)
            {
                a.activa = false;
            }

            //contacto.CentroId

            db.SaveChanges();
            MatrizDeSustitucion.UpdateMatriz(contacto.CentroId);
            return new JavaScriptSerializer().Serialize("");
        }
예제 #29
0
        public string LoadUsuarios()
        {
            HttpPostedFileBase fileUpload = Request.Files[0];
            var users = new List<EdayRoomUser>();

            if (fileUpload != null)
            {
                fileUpload.SaveAs(Server.MapPath("~/temp/" + fileUpload.FileName));
                var fi = new FileInfo(Server.MapPath("~/temp/" + fileUpload.FileName));
                var fiOut = new FileInfo(
                    Path.Combine(
                        Server.MapPath(ConfigurationManager.AppSettings["userFilesDirectory"]),
                        string.Format("{0}_" + fileUpload.FileName,
                                      DateTime.Now.ToString("yyyy_MM_dd_hh_mm_ss"))));
                var db = new edayRoomEntities();
                List<string> existingUsers = (from u in db.users
                                              select u.username).ToList();
                var package = new ExcelPackage(fi);
                var passwordPackage = new ExcelPackage();

                ExcelWorksheet worksheet = package.Workbook.Worksheets[1];
                passwordPackage.Workbook.Worksheets.Add("Passwords");
                ExcelWorksheet passwordWorksheet = passwordPackage.Workbook.Worksheets["Passwords"];
                passwordWorksheet.Cells[1, 1].Value = "Nombre";
                passwordWorksheet.Cells[1, 3].Value = "Apellido";
                passwordWorksheet.Cells[1, 3].Value = "usuario";
                passwordWorksheet.Cells[1, 4].Value = "password";

                for (int i = 2; i <= worksheet.Dimension.End.Row; i++)
                {
                    var nombre = (string) worksheet.Cells[i, 1].Value;
                    string apellido = worksheet.Cells[i, 2].Value == null ? "" : worksheet.Cells[i, 2].Value.ToString();
                    string grupo = (string) worksheet.Cells[i, 3].Value ?? "";
                    bool admin = ((string) worksheet.Cells[i, 4].Value).ToLower() == "si";
                    bool supervisor = ((string)worksheet.Cells[i, 5].Value).ToLower() == "si";
                    bool leader = ((string)worksheet.Cells[i, 6].Value).ToLower() == "si";
                    bool participacion = ((string) worksheet.Cells[i, 7].Value).ToLower() == "si";
                    bool movilizacion = ((string) worksheet.Cells[i, 8].Value).ToLower() == "si";
                    bool exitpolls = ((string) worksheet.Cells[i, 9].Value).ToLower() == "si";
                    bool quickcount = ((string) worksheet.Cells[i, 10].Value).ToLower() == "si";
                    bool totalizacion = ((string) worksheet.Cells[i, 11].Value).ToLower() == "si";
                    bool dashboard = ((string)worksheet.Cells[i, 12].Value).ToLower() == "si";
                    bool alertas = ((string)worksheet.Cells[i, 13].Value).ToLower() == "si";
                    var password = (worksheet.Cells[i, 14].Value == null ? "" : worksheet.Cells[i, 14].Value.ToString());
                    var u = new EdayRoomUser
                                {
                                    Name = nombre + " " + apellido,
                                    Password =
                                        string.IsNullOrWhiteSpace(password)
                                            ? PasswordManagement.GenerateRandomPassword(6)
                                            : password,
                                    Group = grupo,
                                    Admin = admin,
                                    Leader = leader,
                                    Participacion = participacion,
                                    Movilizacion = movilizacion,
                                    ExitPolls = exitpolls,
                                    QuickCount = quickcount,
                                    Totalizacion = totalizacion,
                                    Dashboard = dashboard
                                };
                    u.Username = nombre.Trim().Split(' ').First().ToLower() + "." + apellido.Trim().Split(' ').First().ToLower();
                    byte[] b = Encoding.GetEncoding(1251).GetBytes(u.Username);
                    u.Username = Encoding.ASCII.GetString(b);
                    int uid = 1;
                    if (existingUsers.Any(us => us == u.Username))
                    {
                        string original = u.Username;
                        while (true)
                        {
                            u.Username = original + "." + uid;
                            if (existingUsers.All(us => us != u.Username))
                            {
                                break;
                            }
                            uid++;
                        }
                    }
                    existingUsers.Add(u.Username);
                    worksheet.Cells[i, 3].Value = u.Username;
                    worksheet.Cells[i, 4].Value = u.Password;
                    users.Add(u);
                    string salt = "";
                    string passwordHash = u.Password;//PasswordManagement.GeneratePasswordHash(u.Password, out salt);

                    db.users.AddObject(new user
                                           {
                                               nombre = nombre,
                                               apellido = apellido,
                                               username = u.Username,
                                               salt = salt,
                                               hash = passwordHash,
                                               grupo = grupo,
                                               admin = admin,
                                               leader = leader,
                                               participacion = participacion,
                                               movilizacion = movilizacion,
                                               exitpolls = exitpolls,
                                               quickcount = quickcount,
                                               totalizacion = totalizacion,
                                               dashboard = dashboard,
                                               supervisor = supervisor,
                                               alertas = alertas
                                           });
                }

                db.UserFiles.AddObject(new UserFile
                                           {
                                               fileName = fiOut.Name
                                           });

                db.SaveChanges();

                package.SaveAs(fiOut);

                var errores = new List<string> {"error " + fileUpload.FileName};
            }
            return "YEAH";
        }
예제 #30
0
        public string AlertaMovilizacion(MovilizacionContact contacto, int valor, string mensaje)
        {
            var db = new edayRoomEntities();
            var centro = db.Centroes.Single(c => c.id == contacto.IdCentro);
            var user = db.users.Single(u => u.username == User.Identity.Name);
            #region Registro la alerta

            var alerta = new MovilizacionAlerta
                             {
                                 activa = true,
                                 fecha = DateTime.Now,
                                 id_centro = contacto.IdCentro,
                                 id_movilizador = contacto.IdTestigo,
                                 id_alerta = valor,
                                 id_usuario = user.id
                             };
            db.MovilizacionAlertas.AddObject(alerta);

            var messages = new List<MovilizacionAlertaMessage>();
            if (!string.IsNullOrWhiteSpace(mensaje))
            {
                var alertMessage = new MovilizacionAlertaMessage { fecha = DateTime.Now, mensaje = mensaje, id_usuario = user.id };
                alerta.MovilizacionAlertaMessages.Add(alertMessage);
                messages.Add(alertMessage);
            }

            #endregion

            #region  Retraso de Timeline

            Alerta objetoAlerta = db.Alertas.Single(a => a.id == valor);
            if (objetoAlerta.blocking){
                centro.alertBlocked = true;
                centro.blockingAlertId = objetoAlerta.id;
            }
            if (objetoAlerta.regresivo)
            {

                //MovilizacionTimeline oldTimeline =
                //    (from pt in db.MovilizacionTimelines where
                //         pt.id == contacto.MovilizacionTimelineId select pt).
                //        Single();

                //oldTimeline.activa = false;

                //Cancelo todos los timelines activos y resolvemos este peo
                var oldTimelines =
                    (from pt in db.MovilizacionTimelines
                     where
                         pt.activa && pt.id_centro == contacto.IdCentro
                         //pt.id == contacto.MovilizacionTimelineId
                     select pt);
                foreach (var oldTimeline in oldTimelines)
                {
                    oldTimeline.activa = false;
                }

                DateTime newDate = DateTime.Now.AddMinutes(objetoAlerta.tiempo);
                var newTimeline = new MovilizacionTimeline { id_centro = contacto.IdCentro, fecha = newDate, activa = true };
                db.MovilizacionTimelines.AddObject(newTimeline);
            }

            #endregion

            db.SaveChanges();

            // VERIFICAR SI HAY QUE HACER TRIGGER DE ALGUNA ALERTA
            IQueryable<MovilizacionAlerta> existingAlerts = from a in db.MovilizacionAlertas
                                                            where a.id_centro == contacto.IdCentro &&
                                                                  a.id_alerta == valor && a.activa
                                                            select a;
            var alertCount = existingAlerts.Count();
            var maxRepeats = existingAlerts.First().Alerta.maxRepeats ?? 0;
            if (maxRepeats != 0)
            {
                if (alertCount == maxRepeats)
                {
                    //LLEGUE AL LIMITE, hago el trigger de la alerta
                    var newAlerta = existingAlerts.First().Alerta.AlertaAsociada;

                    var alertaAuto = new MovilizacionAlerta
                                         {
                                             activa = true,
                                             fecha = DateTime.Now,
                                             id_centro = contacto.IdCentro,
                                             id_movilizador = contacto.IdTestigo,
                                             id_alerta = newAlerta.id,
                                             id_usuario = user.id
                                         };
                    db.MovilizacionAlertas.AddObject(alertaAuto);

                    if (newAlerta.blocking){
                        centro.alertBlocked = true;
                        centro.blockingAlertId = newAlerta.id;
                    }

                    var alertMessage = new MovilizacionAlertaMessage { fecha = DateTime.Now, mensaje = "Alerta generada por sistema", id_usuario=user.id };
                    alertaAuto.MovilizacionAlertaMessages.Add(alertMessage);
                }
            }
            db.SaveChanges();
            return new JavaScriptSerializer().Serialize("");
        }