public ActionResult Edit([Bind(Include = "Id,Titulo,Descripcion,TipoNovedad_Id,TipoNovedad,UsuariosNotificados,ArchivosModulo,DescripcionEstado,Estado,FechaCreacion,FechaActualizacion,idUsuario")]
                                 Novedad novedad, string[] UsuariosNotificar)
        {
            if (novedad.ArchivosModulo == null)
            {
                novedad.ArchivosModulo = new List <ArchivoModulo>().ToArray();
            }

            Usuario usuario = usuarioRepository.Get(novedad.idUsuario.Value).FirstOrDefault();

            novedad.Usuario             = usuario;
            ViewBag.TipoNovedades       = tipoNovedadRepository.GetFiltered(x => x.Estado == true).ToList();
            novedad.UsuariosNotificados = GetNovedadUsuariosFromArray(UsuariosNotificar);
            if (!ModelState.IsValid)
            {
                return(View(novedad));
            }

            try
            {
                //Guardo la Novedad
                novedadRepository.Modify(novedad, this.User.UserID);

                //Guardo los usuarios a notificar nuevos
                List <MailDestinatario> mailDestinatarios = new List <MailDestinatario>();
                foreach (NovedadUsuarios novedadUsuario in novedad.UsuariosNotificados)
                {
                    MailDestinatario emailDest = new MailDestinatario();
                    emailDest.Destinatario     = novedadUsuario.Usuario.NombreApellido;
                    emailDest.DestinatarioMail = novedadUsuario.Usuario.Email;
                    emailDest.Hilo             = true;

                    mailDestinatarios.Add(emailDest);

                    novedadUsuario.Novedad_Id = novedad.Id;
                    if (!novedadUsuariosRepository.GetFiltered(x => x.Novedad_Id == novedadUsuario.Novedad_Id && x.Usuario_Id == novedadUsuario.Usuario_Id).Any())
                    {
                        novedadUsuariosRepository.Add(novedadUsuario, this.User.UserID);
                    }
                }
                //Elimino los usuarios a notificar que ya no estan en el listado
                List <NovedadUsuarios> novedadUsuariosBd = novedadUsuariosRepository.GetFiltered(x => x.Novedad_Id == novedad.Id).ToList();
                foreach (NovedadUsuarios novedadUsuario in novedadUsuariosBd)
                {
                    if (!novedad.UsuariosNotificados.Where(x => x.Novedad_Id == novedadUsuario.Novedad_Id && x.Usuario_Id == novedadUsuario.Usuario_Id).Any())
                    {
                        novedadUsuariosRepository.RemoveFromDataBase(novedadUsuario, this.User.UserID);
                    }
                }

                if (novedad.ArchivosModulo != null)
                {
                    foreach (ArchivoModulo archivoModulo in novedad.ArchivosModulo)
                    {
                        if ((archivoRepository.GetFiltered(x => x.Id == archivoModulo.Id && x.Estado == true).Any() == false) && archivoModulo.Deleted != true)
                        {
                            AltaArchivosModulo(archivoModulo, novedad.Id.ToString());
                        }

                        if (archivoModulo.Deleted == true)
                        {
                            archivoRepository.Remove(archivoModulo, this.User.UserID);
                        }
                    }
                }

                Mail mail = new Mail();
                mail.Asunto = "Novdedad N° " + novedad.Id.ToString() + " Modificada";
                mail.Cuerpo = ArmarCuerpoMail(novedad);
                Usuario currentUser = usuarioRepository.Get(this.User.UserID).First();
                mail.Remitente       = currentUser.Email;
                mail.NombreRemitente = currentUser.UserName + " (" + currentUser.Email + ")";


                SendEmails(mail, mailDestinatarios, novedad.ArchivosModulo.ToList());

                SetMessage(SUCCESS, " Guardado.");
            }
            catch (Exception ex)
            {
                SetMessage(ERROR, " Error al guardar la Novedad: " + ex.Message);
            }

            return(Index());
        }
        public ActionResult Create([Bind(Include = "Titulo,Descripcion,TipoNovedad_Id,TipoNovedad,UsuariosNotificados,ArchivosModulo")] Novedad novedad, string[] UsuariosNotificar)
        {
            if (novedad.ArchivosModulo == null)
            {
                novedad.ArchivosModulo = new List <ArchivoModulo>().ToArray();
            }

            ViewBag.TipoNovedades       = tipoNovedadRepository.GetFiltered(x => x.Estado == true).ToList();
            novedad.UsuariosNotificados = GetNovedadUsuariosFromArray(UsuariosNotificar);
            if (!ModelState.IsValid)
            {
                return(View(novedad));
            }

            try
            {
                //Guardo la Novedad
                novedadRepository.Add(novedad, this.User.UserID);

                //Guardo los usuarios a notificar pasandoles el Id de la novedad en Novedad_Id
                List <MailDestinatario> mailDestinatarios = new List <MailDestinatario>();
                foreach (NovedadUsuarios novedadUsuario in novedad.UsuariosNotificados)
                {
                    MailDestinatario emailDest = new MailDestinatario();
                    emailDest.Destinatario     = novedadUsuario.Usuario.NombreApellido;
                    emailDest.DestinatarioMail = novedadUsuario.Usuario.Email;
                    emailDest.Hilo             = true;

                    mailDestinatarios.Add(emailDest);

                    novedadUsuario.Novedad_Id = novedad.Id;
                    novedadUsuariosRepository.Add(novedadUsuario, this.User.UserID);
                }

                if (novedad.ArchivosModulo != null)
                {
                    foreach (ArchivoModulo newArchivo in novedad.ArchivosModulo)
                    {
                        if (newArchivo.Deleted == false)
                        {
                            AltaArchivosModulo(newArchivo, novedad.Id.ToString());
                        }
                    }
                }

                Mail mail = new Mail();
                mail.Asunto = "Novedad N° " + novedad.Id.ToString() + " Creada";
                mail.Cuerpo = ArmarCuerpoMail(novedad);
                Usuario currentUser = usuarioRepository.Get(this.User.UserID).First();
                mail.Remitente       = currentUser.Email;
                mail.NombreRemitente = currentUser.UserName + " (" + currentUser.Email + ")";


                SendEmails(mail, mailDestinatarios, novedad.ArchivosModulo.ToList());

                SetMessage(SUCCESS, " Guardado.");
            }
            catch (Exception ex)
            {
                SetMessage(ERROR, " Error al guardar la Novedad: " + ex.Message);
            }

            return(Index());
        }