public ActionResult Create(Incidente incidente)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    //Cambiar correo de notificacion a la configuracion de notificaciones
                    incidente.FechaAlta = DateTime.Now;
                    incidente.FechaIncidente = new DateTime(incidente.TmpFechaIncidente.Year,
                                                            incidente.TmpFechaIncidente.Month, incidente.TmpFechaIncidente.Day,
                                                            incidente.TmpHoraIncidente.Hour, incidente.TmpHoraIncidente.Minute,
                                                            0);
                    incidente.UsuarioAlta = 1;//Convert.ToInt32(Session["userNameId"]);
                    if (incidente.ZonaId == 0)
                        incidente.ZonaId = null;
                    if (incidente.InstalacionId == 0)
                        incidente.InstalacionId = null;

                    db.Incidentes.Add(incidente);
                    db.SaveChanges();
                    SendNotifications(incidente);

                    return Json(new object[] { true, "saved" });
                }
                catch (DbEntityValidationException ex)
                {
                    foreach (var validationErrors in ex.EntityValidationErrors)
                    {
                        foreach (var validationError in validationErrors.ValidationErrors)
                        {
                            Trace.TraceInformation("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage);
                        }
                    }
                }
            }
            else
            {
                string errorResult = string.Empty;
                foreach (var key in ModelState.Values)
                {
                    foreach (var error in key.Errors)
                    {
                        errorResult += error.ErrorMessage + "|";
                    }
                }
                errorResult = errorResult.Substring(0, errorResult.Length - 1);

                return Json(new object[] { false, errorResult });
            }
            return View(incidente);
        }
        public bool SendNotifications(Incidente incidente)
        {
            var sb = new StringBuilder();
            var res = false;
            var userId = 1;//(int) Session["userNameId"];
            var empresasId = (from empresa in db.relUsuarioEmpresa where empresa.UsuarioId == userId select empresa);

            var emails = (from email in db.AlertasIncidente
                          //join e in db.relUsuarioEmpresa on email.EmpresaId equals e.EmpresaId
                          where email.TipoIncidenteId.Equals(incidente.TipoIncidenteId) //&& e.UsuarioId == userId
                          select email);
            var mensaje = string.Empty;

            var TipoIncidente = db.TiposIncidente.FirstOrDefault(e => e.Id == incidente.TipoIncidenteId);

            foreach (var alerta in emails)
            {
                var nomEmpresa = (db.Empresas.FirstOrDefault(e => e.Id == incidente.EmpresaId));
                var Estado = (db.Estados.FirstOrDefault(e => e.Id == incidente.EstadoId));
                var ciudad = (db.Ciudades.FirstOrDefault(c => c.Id == incidente.CiudadId));
                var zona = (db.Zonas.FirstOrDefault(z => z.Id == incidente.ZonaId));

                var mail = new ServiceMailer();
                var message = new Email();
                var email = alerta.Emails.Split(";".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).ToList();
                email.ForEach(e=> message.To.Add(e));
                message.Subject = "Alerta de incidente.";
                mensaje += "Fecha y hora del incidente: " + incidente.FechaIncidente + "\r\n";
                mensaje += "Tipo de Incidente: " + TipoIncidente.Nombre + "\r\n";
                mensaje += "Empresa: " + nomEmpresa.Nombre + "\r\n";
                mensaje += string.Format("Ubicación: Estado: {0}, Ciudad: {1}, Colonia: {2}, Calle: {3}, Entre calles: {4}", Estado.Nombre, ciudad.Nombre, incidente.Colonia,
                                    incidente.Calle, incidente.EntreCalles) + "\r\n";
                mensaje += string.Format("Zona: {0}", incidente.ZonaId != null ? zona.Nombre : "No definida");
                message.Body = mensaje;
                foreach (var empresa in empresasId)
                {
                    if (alerta.RecibirMiEmpresa && empresa.EmpresaId == alerta.EmpresaId)
                    {
                        res = mail.SendMail(message);
                    }

                    if (alerta.RecibirOtrasEmpresas && alerta.EmpresaId != empresa.EmpresaId)
                    {
                        res = mail.SendMail(message);
                    }
                }
            }

            return res;
        }
 public ActionResult Edit(Incidente incidente)
 {
     if (ModelState.IsValid)
     {
         db.Entry(incidente).State = EntityState.Modified;
         db.SaveChanges();
         return RedirectToAction("Index");
     }
     return View(incidente);
 }