public async Task <ActionResult> Edit(int id)
        {
            var user = await userManager.FindByNameAsync(User.Identity.Name);

            var encuestadorControl = new EncuestadorController(db, userManager, _env);
            var respRelacionado    = await encuestadorControl.GetResponsablesbyIdParent(user.IDDependencia, 1, 3);

            var formalizacion = await db.Formalization.Where(n => n.Id == id && respRelacionado.Contains(n.IdResponsable)).FirstOrDefaultAsync();

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

            var permisoCancelar = User.HasClaim(c => (c.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/Formalizacion.Cancelar" && c.Value == "1"));

            if (formalizacion.Estado != Formalization.ESTADO_BORRADOR && !permisoCancelar)
            {
                return(RedirectToAction("Details", new { id = formalizacion.Id }));
            }

            string error = (string)HttpContext.Session.GetComplex <string>("error");

            if (error != "")
            {
                ViewBag.error = error;
                HttpContext.Session.Remove("error");
            }

            ViewBag.Coordinaciones = new SelectList(await db.Responsable.Where(n => n.Nombre.StartsWith("[CDR]")).OrderBy(n => n.Nombre).ToListAsync(), "Id", "Nombre", formalizacion.IdResponsable);

            var estados = new Dictionary <int, string> {
                { Formalization.ESTADO_BORRADOR, "Borrador" },
                { Formalization.ESTADO_COMPLETO, "Completo" },
                { Formalization.ESTADO_CANCELADO, "Cancelado" },
                { Formalization.ESTADO_IMPRESO, "Impreso" },
                { Formalization.ESTADO_CARNET_VIGENTE, "Carnet vigente" }
            };

            ViewBag.Estados = new SelectList(estados, "Key", "Value", formalizacion.Estado);

            ViewBag.Formalizacion = formalizacion;
            var postModel = new FormalizacionPostModel()
            {
                Id               = formalizacion.Id,
                AreaPesca        = formalizacion.AreaPesca,
                ArtesPesca       = formalizacion.ArtesPesca,
                Cedula           = formalizacion.Cedula,
                Estado           = formalizacion.Estado,
                IdResponsable    = formalizacion.IdResponsable,
                Name             = formalizacion.Name,
                NombreAsociacion = formalizacion.NombreAsociacion
            };

            return(View(postModel));
        }
        public async Task <ActionResult> Edit(FormalizacionPostModel formalizacion)
        {
            var original = await db.Formalization.FindAsync(formalizacion.Id);

            if (original == null)
            {
                ModelState.AddModelError(string.Empty, "Formalización no registrada.");
            }
            if (ModelState.IsValid)
            {
                var permisoEditar = User.HasClaim(c => (c.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/Formalizacion.Editar" && c.Value == "1"));
                if (permisoEditar)
                {
                    original.Name             = formalizacion.Name;
                    original.Cedula           = formalizacion.Cedula;
                    original.NombreAsociacion = formalizacion.NombreAsociacion;
                    original.AreaPesca        = formalizacion.AreaPesca;
                    original.ArtesPesca       = formalizacion.ArtesPesca;
                }
                if (formalizacion.Estado > 0)
                {
                    original.Estado = formalizacion.Estado;
                }
                if (formalizacion.IdResponsable > 0)
                {
                    original.IdResponsable = formalizacion.IdResponsable;
                }

                var anterior = await db.Formalization.AsNoTracking().Where(n => n.Id == formalizacion.Id).FirstOrDefaultAsync();

                var user = await userManager.FindByNameAsync(User.Identity.Name);

                original.LastEditDate   = DateTime.Now;
                original.LastEditByUser = user;

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



                var log      = new Logger(db);
                var registro = new RegistroLog {
                    Usuario = User.Identity.Name, Accion = "Edit", Modelo = "Formalization", ValAnterior = anterior, ValNuevo = original
                };
                await log.Registrar(registro, typeof(Formalization), formalizacion.Id);

                HttpContext.Session.SetComplex("error", "Los datos fueron actualizados correctamente.");

                return(RedirectToAction("Edit", new { id = formalizacion.Id }));
            }

            ViewBag.Coordinaciones = new SelectList(await db.Responsable.Where(n => n.Nombre.StartsWith("[CDR]")).OrderBy(n => n.Nombre).ToListAsync(), "Id", "Nombre", formalizacion.IdResponsable);

            var estados = new Dictionary <int, string> {
                { Formalization.ESTADO_BORRADOR, "Borrador" },
                { Formalization.ESTADO_COMPLETO, "Completo" },
                { Formalization.ESTADO_CANCELADO, "Cancelado" },
                { Formalization.ESTADO_IMPRESO, "Impreso" },
                { Formalization.ESTADO_CARNET_VIGENTE, "Carnet vigente" }
            };

            ViewBag.Estados = new SelectList(estados, "Key", "Value", formalizacion.Estado);

            ViewBag.Formalizacion = formalizacion;
            var postModel = new FormalizacionPostModel()
            {
                Id               = formalizacion.Id,
                AreaPesca        = formalizacion.AreaPesca,
                ArtesPesca       = formalizacion.ArtesPesca,
                Cedula           = formalizacion.Cedula,
                Estado           = formalizacion.Estado,
                IdResponsable    = formalizacion.IdResponsable,
                Name             = formalizacion.Name,
                NombreAsociacion = formalizacion.NombreAsociacion
            };

            return(View(postModel));
        }