Exemplo n.º 1
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(""));
        }
Exemplo n.º 2
0
 public Alerta(MovilizacionAlerta a)
 {
     Modulo = Modulo.Movilizacion;
     InicializarAlerta(a.MovilizacionAlertaMessages, a);
 }