public async Task <ActionResult> Create(Pollster encuestador)
        {
            var user = await userManager.FindByNameAsync(User.Identity.Name);

            if (ModelState.IsValid)
            {
                //Si no define la coordinación (dependencia) encargada se usa la del usuario actual
                if (encuestador.IdResponsable == 0)
                {
                    encuestador.IdResponsable = user.IDDependencia;
                }

                //Usuario y fecha de creación
                encuestador.User         = user;
                encuestador.CreationDate = DateTime.Now;

                encuestador.Code = await GenerateCode(encuestador.DNI);

                db.Pollster.Add(encuestador);
                await db.SaveChangesAsync();

                return(RedirectToAction("Details", new { id = encuestador.Id }));
            }


            ResponsablesController controlResponsable = new ResponsablesController(db);

            var ids = controlResponsable.GetAllIdsFromResponsable(user.IDDependencia);

            ViewBag.Departamentos  = new SelectList(await db.Location.Where(n => n.IdLevel == 2).OrderBy(n => n.Name).ToListAsync(), "Id", "Name");
            ViewBag.Coordinaciones = new SelectList(await db.Responsable.Where(n => ids.Contains(n.Id) && n.Nombre.StartsWith("[CDR]")).OrderBy(n => n.Nombre).ToListAsync(), "Id", "Nombre", encuestador.IdResponsable);
            return(View(encuestador));
        }
        public async Task <ActionResult> Edit(int id)
        {
            ResponsablesController controlResponsable = new ResponsablesController(db);
            //Valida que el usuario tenga permisos sobre el encuestador
            var user = await userManager.FindByNameAsync(User.Identity.Name);

            var respRelacionado = await GetResponsablesbyIdParent(user.IDDependencia, 1, 3);

            var ids = controlResponsable.GetAllIdsFromResponsable(user.IDDependencia);

            Pollster encuestador = await db.Pollster.Where(n => n.Id == id && respRelacionado.Contains(n.IdResponsable)).FirstOrDefaultAsync();

            if (encuestador == null)
            {
                return(NotFound());
            }

            if (encuestador.Location != null)
            {
                encuestador.IdLocationParent = (int)encuestador.Location.IdParent;
            }
            ViewBag.Departamentos  = new SelectList(await db.Location.Where(n => n.IdLevel == 2).OrderBy(n => n.Name).ToListAsync(), "Id", "Name", encuestador.IdLocationParent);
            ViewBag.Municipios     = new SelectList(await db.Location.Where(n => n.IdLevel == 3 && n.IdParent == encuestador.IdLocationParent).OrderBy(n => n.Name).ToListAsync(), "Id", "Name", encuestador.IdLocation);
            ViewBag.Coordinaciones = new SelectList(await db.Responsable.Where(n => ids.Contains(n.Id) && n.Nombre.StartsWith("[CDR]")).OrderBy(n => n.Nombre).ToListAsync(), "Id", "Nombre", encuestador.IdResponsable);

            return(View(encuestador));
        }
        public async Task <ActionResult> Create()
        {
            ResponsablesController controlResponsable = new ResponsablesController(db);
            var user = await userManager.FindByNameAsync(User.Identity.Name);

            var ids = controlResponsable.GetAllIdsFromResponsable(user.IDDependencia);

            ViewBag.Departamentos  = new SelectList(await db.Location.Where(n => n.IdLevel == 2).OrderBy(n => n.Name).ToListAsync(), "Id", "Name");
            ViewBag.Coordinaciones = new SelectList(await db.Responsable.Where(n => ids.Contains(n.Id) && n.Nombre.StartsWith("[CDR]")).OrderBy(n => n.Nombre).ToListAsync(), "Id", "Nombre", ids.FirstOrDefault());
            return(View());
        }
        public async Task <ActionResult> Edit(Pollster encuestador)
        {
            var original = await db.Pollster.FindAsync(encuestador.Id);

            if (original == null)
            {
                ModelState.AddModelError(string.Empty, "Encuestador no registrado.");
            }
            if (ModelState.IsValid)
            {
                original.DNI         = encuestador.DNI;
                original.Name        = encuestador.Name;
                original.PhoneNumber = encuestador.PhoneNumber;
                original.Email       = encuestador.Email;
                if (encuestador.IdLocation > 0)
                {
                    original.IdLocation = encuestador.IdLocation;
                }
                if (encuestador.IdResponsable > 0)
                {
                    original.IdResponsable = encuestador.IdResponsable;
                }
                original.Code = await GenerateCode(original.DNI);

                db.Entry(original).State = EntityState.Modified;
                await db.SaveChangesAsync();

                return(RedirectToAction("Details", new { id = original.Id }));
            }
            ResponsablesController controlResponsable = new ResponsablesController(db);
            var user = await userManager.FindByNameAsync(User.Identity.Name);

            var ids = controlResponsable.GetAllIdsFromResponsable(user.IDDependencia);

            ViewBag.Departamentos  = new SelectList(await db.Location.Where(n => n.IdLevel == 2).OrderBy(n => n.Name).ToListAsync(), "Id", "Name", encuestador.IdLocation);
            ViewBag.Coordinaciones = new SelectList(await db.Responsable.Where(n => ids.Contains(n.Id) && n.Nombre.StartsWith("[CDR]")).OrderBy(n => n.Nombre).ToListAsync(), "Id", "Nombre", encuestador.IdResponsable);
            return(View(encuestador));
        }