public async Task <ActionResult> Edit(RequestUserDataForm data) { var original = await db.RequestUser.FindAsync(data.Id); if (original == null) { ModelState.AddModelError(string.Empty, "Solicitud no registrada."); } if (ModelState.IsValid) { //Agrega los cambios de formulario original.Response = data.Response; original.State = data.State; //Agrega metadatos del usuario actual var adminUser = await userManager.FindByNameAsync(User.Identity.Name); original.AdminName = adminUser.Nombre + " " + adminUser.Apellido; original.ValidationDate = DateTime.Now; //Cambia las alertyas original.AlertAdmin = false; original.AlertUser = true; db.Entry(original).State = EntityState.Modified; await db.SaveChangesAsync(); return(RedirectToAction("IndexAdmin")); } var estados = new Dictionary <int, string> { { RequestUser.ESTADO_NUEVA, "Nuevo" }, { RequestUser.ESTADO_EN_PROCESO, "En proceso" }, { RequestUser.ESTADO_SOLUCIONADA, "Terminado" }, { RequestUser.ESTADO_CANCELADA, "Cancelado" }, }; ViewBag.Estados = new SelectList(estados, "Key", "Value", data.State); ViewBag.Solicitud = original; var user = await userManager.FindByIdAsync(original.IdUser); ViewBag.User = user; Formalization formalizacion = null; if (original.FormalizationId > 0) { formalizacion = await db.Formalization.FindAsync(original.FormalizationId); } ViewBag.Formalizacion = formalizacion; return(View(data)); }
public async Task <ActionResult> Create(int id = 0) { Formalization formalizacion = null; if (id > 0) { formalizacion = await db.Formalization.FindAsync(id); } ViewBag.Formalizacion = formalizacion; return(View()); }
public async Task <ActionResult> Details(int id) { var user = await userManager.FindByNameAsync(User.Identity.Name); var solicitud = await db.RequestUser.Where(n => n.Id == id && n.IdUser == user.Id).FirstOrDefaultAsync(); if (solicitud == null) { return(NotFound()); } Formalization formalizacion = null; if (solicitud.FormalizationId > 0) { formalizacion = await db.Formalization.FindAsync(solicitud.FormalizationId); } ViewBag.Formalizacion = formalizacion; return(View(solicitud)); }
public async Task <ActionResult> Edit(int id) { var solicitud = await db.RequestUser.FindAsync(id); if (solicitud == null) { return(NotFound()); } var dataForm = new RequestUserDataForm { Id = solicitud.Id, Response = solicitud.Response, State = solicitud.State }; var estados = new Dictionary <int, string> { { RequestUser.ESTADO_NUEVA, "Nuevo" }, { RequestUser.ESTADO_EN_PROCESO, "En proceso" }, { RequestUser.ESTADO_SOLUCIONADA, "Completo" }, { RequestUser.ESTADO_CANCELADA, "Cancelado" }, }; ViewBag.Estados = new SelectList(estados, "Key", "Value", solicitud.State); ViewBag.Solicitud = solicitud; var user = await userManager.FindByIdAsync(solicitud.IdUser); ViewBag.User = user; Formalization formalizacion = null; if (solicitud.FormalizationId > 0) { formalizacion = await db.Formalization.FindAsync(solicitud.FormalizationId); } ViewBag.Formalizacion = formalizacion; return(View(dataForm)); }
public async Task <RespuestaAccion> LoadFormalizacion(string idKobo, string identity = null) { var r = new RespuestaAccion(); var previo = await db.Formalization.Where(n => n.IdKobo == idKobo).FirstOrDefaultAsync(); if (previo != null) { r.Url = "Formalizacion/Edit/" + previo.Id; r.Success = true; return(r); } //Carga los datos de conexión desde la configuración var config = await db.Configuracion.FirstOrDefaultAsync(); var configFormalizacion = await db.FormalizationConfig.Where(n => n.Group == 1 && n.Field != "" && n.Value != "").ToListAsync(); var fields = JsonConvert.SerializeObject(configFormalizacion.Select(n => n.Value).ToArray()); var query = JsonConvert.SerializeObject(new { _id = idKobo }); var url = config.KoboKpiUrl + "/assets/" + config.KoboAssetUid + "/submissions/?format=json" + "&query=" + HttpUtility.UrlEncode(query) + "&fields=" + HttpUtility.UrlEncode(fields); dynamic result = null; try { //Consulta la información var client = new HttpClient(); client.DefaultRequestHeaders.Add("Authorization", "Token " + config.KoboApiToken); HttpResponseMessage response = await client.GetAsync(url); response.EnsureSuccessStatusCode(); string responseBody = await response.Content.ReadAsStringAsync(); dynamic data = JsonConvert.DeserializeObject(responseBody); //Valida que se cargaran resultados if (data == null) { r.Message = "ERROR: No fue posible recuperar la información"; return(r); } result = data[0]; } catch (HttpRequestException e) { r.Message = e.Message; return(r); } if (result != null) { var username = identity != null ? identity : User.Identity.Name; var user = await userManager.FindByNameAsync(username); var responsable = user.IDDependencia; //Mapea los resultados var formalizacion = new Formalization() { Estado = Formalization.ESTADO_BORRADOR, CreateDate = DateTime.Now, LastEditDate = DateTime.Now, IdResponsable = responsable, IdCreateByUser = user.Id, IdLastEditByUser = user.Id }; //folder para los adjunto var _path = Path.Combine(_env.ContentRootPath, "Storage", "Formalizacion", idKobo); var _relative = Path.Combine("Formalizacion", idKobo); var remoteUri = config.KoboAttachment + config.KoboUsername + "/attachments/"; if (!Directory.Exists(_path)) { Directory.CreateDirectory(_path); } var imageErrors = false; //variables de formalizacion var artes = await db.FormalizationVariable.Where(n => n.Group == "Arte") .ToDictionaryAsync(n => n.Key, n => n.Value); var zonas = await db.FormalizationVariable.Where(n => n.Group == "Zona") .ToDictionaryAsync(n => n.Key, n => n.Value); var configZonas = await db.FormalizationConfig.Where(n => n.Group == 2 && n.Field != "" && n.Value != "").ToListAsync(); var czTipo = configZonas.Where(n => n.Field == "zonaTipo").Select(n => n.Value).FirstOrDefault(); var czNombre = configZonas.Where(n => n.Field == "zonaNombre").Select(n => n.Value).FirstOrDefault(); var map = configFormalizacion.ToDictionary(n => n.Field, n => n.Value); var oType = typeof(Formalization); foreach (var oProperty in oType.GetProperties()) { var name = oProperty.Name; var value = ""; if (map.ContainsKey(name)) { var fieldName = map[name]; if (name == "AreaPesca") { var arrZona = result[fieldName]; if (arrZona != null) { var listResult = new List <string>(); foreach (var a in arrZona) { var zonaAux = ""; var tipoZona = (String)a[czTipo]; zonaAux = tipoZona != null && tipoZona != "" ? GetValueForVariables(tipoZona, zonas) + " " : ""; var nombreZona = (String)a[czNombre]; zonaAux += nombreZona != null && nombreZona != "" ? "'" + nombreZona + "'" : ""; if (zonaAux != "") { listResult.Add(zonaAux); } } value = listResult.Count > 0 ? String.Join(", ", listResult) : ""; } } else if (name == "ArtesPesca") { var auxValue = (String)result[fieldName]; if (auxValue != null & auxValue != "") { var idsList = auxValue.Split(' ').ToList(); var listResult = new List <string>(); foreach (var idArte in idsList) { listResult.Add(GetValueForVariables(idArte, artes)); } value = listResult.Count > 0 ? String.Join(", ", listResult) : ""; } } else { value = (String)result[fieldName]; //Si es una campo de imagen descarga el adjunto if (name.StartsWith("Img") && value != null && value != "") { var filePath = DownloadFile(remoteUri, value, _path, _relative, config.KoboApiToken); if (filePath == "") { imageErrors = true; break; } value = filePath; } } oProperty.SetValue(formalizacion, value == null ? "" : value, null); } } //Valida los adjuntos if (imageErrors) { r.Message = "ERROR: El servidor esta bloqueado, intente más tarde."; return(r); } //Consulta la dependencia del encuestador if (formalizacion.Encuestador != null && formalizacion.Encuestador != "") { int numId = Int32.Parse(formalizacion.Encuestador); var encuestador = await db.Pollster.Where(n => n.DNI == numId).FirstOrDefaultAsync(); formalizacion.IdResponsable = encuestador != null ? encuestador.IdResponsable : responsable; } var log = new Logger(db); try { //Departamento var municipio = await db.Location.Where(n => n.Code2 == formalizacion.Municipio).FirstOrDefaultAsync(); if (municipio != null) { formalizacion.Municipio = municipio.Name; formalizacion.Departamento = municipio.LocationParent != null ? municipio.LocationParent.Name : formalizacion.Departamento; } //Validación formalización previo a guardar previo = await db.Formalization.Where(n => n.IdKobo == idKobo).FirstOrDefaultAsync(); if (previo != null) { r.Url = "Formalizacion/Edit/" + previo.Id; r.Success = true; return(r); } //Guarda la formalización db.Formalization.Add(formalizacion); await db.SaveChangesAsync(); r.Url = "Formalizacion/Edit/" + formalizacion.Id; r.Success = true; var registro = new RegistroLog { Usuario = identity, Accion = "Create", Modelo = "Formalization", ValNuevo = formalizacion }; await log.Registrar(registro, typeof(Formalization), formalizacion.Id); } catch (Exception e) { r.Message = e.InnerException.Message; return(r); } } else { r.Message = "ERROR: No se encuentran resultados."; return(r); } return(r); }