Ejemplo n.º 1
0
        public async Task<ActionResult> ParticipantesMover(ParticipantesMoverVm participantesMover) {
          
            List<Participante> participantes = new List<Participante>();
            List<int> participantesId = new List<int>();
            int grupoDestId = 0;
            string[] participantesIDs;


            string grupoDestStrId = "";
            string[] values = Request.Form.GetValues("grupoDestID");
            if (values != null)
            {
                var notEmptyValues = values.Where(x => !string.IsNullOrEmpty(x));
                if (notEmptyValues.Count() == 1)
                    grupoDestStrId = notEmptyValues.First();
                else
                    grupoDestStrId = notEmptyValues.Last();
            }

            string participantesStrIDs = Request.QueryString["participantes"];

            if (grupoDestStrId != null && participantesStrIDs != null) {
                grupoDestId = Convert.ToInt32(grupoDestStrId);
                participantesIDs = participantesStrIDs!= null? participantesStrIDs.Split(',') : new string[]{"0"};
                foreach (var p in participantesIDs)
                {
                    int idParticipante = Convert.ToInt32(p);
                    Participante participante = await db.Participantes.FindAsync(idParticipante);
                    if (participante != null)
                    {
                         participantes.Add(participante);
                    }
                }
            }
            
            Grupo grupoSrc = await db.Grupoes.FindAsync(participantesMover.grupoSrcID);
            Grupo grupoDest = await db.Grupoes.FindAsync(grupoDestId);
            //Borra el participante del grupo actual
            if (grupoDest != null && grupoSrc != null & grupoSrc.ID != grupoDest.ID && participantesMover != null)
            {
                foreach (var participante in participantes)
                {
                    participante.grupos.Remove(grupoSrc);
                    participante.grupos.Add(grupoDest);

                    int ausenciasCount = participante.ausencias.Count();
                    if (ausenciasCount > 0) {
                        List<Ausencia> ausencias =  participante.ausencias.ToList();
                        List<Calendario> calendarios = grupoDest.calendarios.ToList();
                        foreach(var ausencia in ausencias){                            
                            foreach (var calendario in calendarios.Where(e => e.eventos.Any(t => t.TallerID == ausencia.Evento.TallerID))) {
                                Ausencia ausenciaNew = new Ausencia();
                                ausenciaNew.Participante = participante;
                                ausenciaNew.participanteID = participante.ID;
                                ausenciaNew.eventoID = calendario.eventos.Where(t => t.TallerID == ausencia.Evento.TallerID).SingleOrDefault().ID;
                                bool isRepeatedAusencia =  await db.Ausencias.Select(x => new{x.participanteID, x.eventoID}).Where(p => p.participanteID == ausenciaNew.participanteID).AnyAsync(e => e.eventoID == ausenciaNew.eventoID);
                                if (!isRepeatedAusencia) {
                                    participante.ausencias.Add(ausenciaNew);
                                }                                
                            }
                            db.Ausencias.Remove(ausencia);
                            db.SaveChanges();
                        }
                    }

                    await db.SaveChangesAsync();
                }
            }
            else {
                ParticipantesMoverVm partcipantesMover = new ParticipantesMoverVm();
                ModelState.AddModelError("Error", "Ha ocurrido un error");
                //return PartialView(partcipantesMover);
            }
            
            return RedirectToAction("Details", "Grupo", new { id = grupoSrc.ID, diplomadoID = grupoSrc.DiplomadoID });
        }
Ejemplo n.º 2
0
        public async Task<ActionResult> ParticipantesMover(int grupoSrc, int[] participantes ) {
            ParticipantesMoverVm partcipantesMover = new ParticipantesMoverVm();
            partcipantesMover.grupoSrcID = grupoSrc;
            Grupo grupo = await db.Grupoes.FindAsync(grupoSrc);
            partcipantesMover.nombreGrupo =  grupo.nombre;
            var participantesTemp = await db.Participantes.AsNoTracking().Where(g => g.grupos.Any(x => x.ID == grupoSrc)).Where(p => participantes.Contains(p.ID)).ToListAsync();

            partcipantesMover.participantes = new List<ParticipanteVm>();
            foreach(var p in participantesTemp){
                partcipantesMover.participantes.Add(new ParticipanteVm { ID = p.ID, cedula = p.cedula, nombre= p.nombre });
            }
            var grupoElegir = db.Grupoes.AsNoTracking().Where(d => d.DiplomadoID == grupo.DiplomadoID).Select(x => new { x.ID, x.DiplomadoID, x.nombre });
            ViewBag.grupoDestID = new SelectList(grupoElegir, "ID", "nombre");

            return PartialView(partcipantesMover);
        }