public ActionResult Administrar(int idSolicitud) { EMPLEADO empleado = this.empleado(); SOLICITUD solicitud = db.SOLICITUDs.Find(idSolicitud); PROCESO_ANALISTA procesoAnalista = solicitud.PROCESO_ANALISTA.Single(pa => pa.empleado_id == empleado.id_empleado); List <ANALISIS_EMPLEADO> analisis = db.ANALISIS_EMPLEADO.Where(ae => ae.DETALLE_SOLICITUD.id_solicitud == idSolicitud && ae.id_empleado == empleado.id_empleado).ToList(); var reportesFinalizados = true; foreach (ANALISIS_EMPLEADO analisi in analisis) { if (analisi.REPORTEs.Count() == 0) { reportesFinalizados = false; } } ViewBag.Analisis = analisis; ViewBag.ProcesoAnalista = procesoAnalista; ViewBag.reportesFinalizados = reportesFinalizados; return(View(solicitud)); }
public ActionResult IniciarProceso(int idSolicitud) { var username = User.Identity.GetUserName(); AppUser user = UserManager.FindByName(username); EMPLEADO empleado = db.EMPLEADOes.First(e => e.id_aspnet_user == user.Id); SOLICITUD solicitud = db.SOLICITUDs.Find(idSolicitud); if (solicitud.PROCESO_ANALISTA.Count(pa => pa.empleado_id == empleado.id_empleado) != 1) { return(View("Error", new string[] { "Permiso denegado" })); } PROCESO_ANALISTA procesoAnalista = solicitud.PROCESO_ANALISTA.Single(pa => pa.empleado_id == empleado.id_empleado); procesoAnalista.fecha_inicio = DateTime.Now; procesoAnalista.id_estado_proceso_analista = 2; db.SaveChanges(); // enviar notificacion Notificacion notificacion = new Notificacion(empleado.id_empleado, "Ha iniciado el analisis de la solicitud " + solicitud.no_referencia, "", Url.Action("Detalle", "Solicitud", new { id = idSolicitud })); notificacion.setReceptor(); notificacion.send(); return(RedirectToAction("Administrar", "Analisis", new { idSolicitud = idSolicitud })); }
public void crearDetalleSolicitud(SOLICITUD Solicitud, List <EmpleadoSeleccion> empleadosSeleccion) { List <DETALLE_SOLICITUD> detallesList = new List <DETALLE_SOLICITUD>(); foreach (EmpleadoSeleccion empleadoSeleccion in empleadosSeleccion) { List <Int32> analisisList = empleadoSeleccion.analisis; for (var i = 0; i < analisisList.Count(); i++) { ANALISI analisis = db.ANALISIS.Find(analisisList[i]); DETALLE_SOLICITUD detalleSolicitud = new DETALLE_SOLICITUD() { id_solicitud = Solicitud.id_solicitud, id_analisis = analisis.id_analisis }; db.DETALLE_SOLICITUD.Add(detalleSolicitud); db.SaveChanges(); ANALISIS_EMPLEADO analisisEmpleado = new ANALISIS_EMPLEADO() { id_detalle_solicitud = detalleSolicitud.id_detalle_solicitud, id_empleado = empleadoSeleccion.idEmpleado }; db.ANALISIS_EMPLEADO.Add(analisisEmpleado); db.SaveChanges(); } if (analisisList.Count() > 0) { PROCESO_ANALISTA procesoAnalista = new PROCESO_ANALISTA { solicitud_id = Solicitud.id_solicitud, empleado_id = empleadoSeleccion.idEmpleado, cantidad_analisis = (byte)analisisList.Count() }; db.PROCESO_ANALISTA.Add(procesoAnalista); } db.SaveChanges(); } }
public ActionResult Lista(int idAnalisisEmpleado) { EMPLEADO empleado = this.empleado(); ANALISIS_EMPLEADO analisisEmpleado = db.ANALISIS_EMPLEADO.Find(idAnalisisEmpleado); PROCESO_ANALISTA procesoAnalista = db.PROCESO_ANALISTA.Where(pa => pa.solicitud_id == analisisEmpleado.DETALLE_SOLICITUD.SOLICITUD.id_solicitud && pa.empleado_id == empleado.id_empleado).First(); List <ANALISIS_REACTIVO> analsisReactivoList = analisisEmpleado.ANALISIS_REACTIVO.ToList(); ViewBag.AnalisisEmpleado = analisisEmpleado; ViewBag.ProcesoAnalista = procesoAnalista; return(PartialView(analsisReactivoList)); }
public ActionResult Get(int procesoId) { PROCESO_ANALISTA procesoAnalista = db.PROCESO_ANALISTA.Find(procesoId); EMPLEADO empleado = procesoAnalista.EMPLEADO; IEnumerable <REPORTE> reportes = db.REPORTEs.Where(r => r.ANALISIS_EMPLEADO.DETALLE_SOLICITUD.SOLICITUD.id_solicitud == procesoAnalista.SOLICITUD.id_solicitud && r.ANALISIS_EMPLEADO.EMPLEADO.id_empleado == empleado.id_empleado ).ToList(); ViewBag.empleado = empleado; ViewBag.procesoAnalista = procesoAnalista; return(PartialView(reportes)); }
public ActionResult EnviarResultado(int idSolicitud) { object result; EMPLEADO empleado = this.empleado(); SOLICITUD solicitud = db.SOLICITUDs.Find(idSolicitud); PROCESO_ANALISTA procesoAnalista = db.PROCESO_ANALISTA.Single(pa => pa.empleado_id == empleado.id_empleado && pa.solicitud_id == solicitud.id_solicitud); procesoAnalista.fecha_fin = DateTime.Now; procesoAnalista.id_estado_proceso_analista = 3; db.SaveChanges(); var reportesCompletos = true; foreach (PROCESO_ANALISTA procesosAnalista in solicitud.PROCESO_ANALISTA) { if (procesosAnalista.id_estado_proceso_analista != 3) { reportesCompletos = false; } } // enviar notificacion Notificacion notificacion = new Notificacion(empleado.id_empleado, "Analisis de solicitud " + solicitud.no_referencia + " finalizados.", "Se finalizaron los analisis y ingresaron los resultados.", Url.Action("Detalle", "Solicitud", new { id = solicitud.id_solicitud })); notificacion.setReceptor(); notificacion.send(); if (reportesCompletos) { solicitud.id_estado_proceso = 4; } db.SaveChanges(); if (reportesCompletos) { // enviar notificacion Notificacion notificacionCompleto = new Notificacion(empleado.id_empleado, "Reportes de solicitud " + solicitud.no_referencia + " finalizados.", "Se finalizaron todos los reportes y fueron enviados.", Url.Action("Detalle", "Solicitud", new { id = solicitud.id_solicitud })); notificacionCompleto.setReceptor(); notificacionCompleto.send(); } result = new { valid = true }; return(Json(result)); }
public ActionResult AbrirProcesoAnalistaCorreccion(int idProcesoAnalista, string comentario) { try { PROCESO_ANALISTA procesoAnalista = db.PROCESO_ANALISTA.Find(idProcesoAnalista); procesoAnalista.SOLICITUD.id_estado = 2; // en proceso procesoAnalista.id_estado_proceso_analista = 5; // Correccion procesoAnalista.fecha_fin = null; EMPLEADO empleado = this.empleado(); // TODO Agregar informacion de correccion // TODO Notify // enviar notificacion Notificacion notificacion = new Notificacion(empleado.id_empleado, "Los resultados de solicitud " + procesoAnalista.SOLICITUD.no_referencia + " fueron abiertos para correccion.", comentario, Url.Action("Administrar", "Analisis", new { idSolicitud = procesoAnalista.SOLICITUD.id_solicitud })); notificacion.setReceptor(procesoAnalista.EMPLEADO.id_empleado); notificacion.send(); db.SaveChanges(); return(Json(new { valid = true })); } catch (DbEntityValidationException dbEx) { foreach (var validationErrors in dbEx.EntityValidationErrors) { foreach (var validationError in validationErrors.ValidationErrors) { Trace.TraceInformation("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage); } } } catch (Exception e) { Console.Write(e.Message); } return(Json(new { valid = false })); }
public ActionResult GuardarAsignacion() { Stream req = Request.InputStream; req.Seek(0, System.IO.SeekOrigin.Begin); string json = new StreamReader(req).ReadToEnd(); var dbTransaction = db.Database.BeginTransaction(); Object result; try { EMPLEADO empleado = this.empleado(); JObject input = (JObject)JsonConvert.DeserializeObject(json); int idSolicitud = input.GetValue("idSolicitud").ToObject <int>(); var empleados = input.GetValue("empleados"); SOLICITUD solicitud = db.SOLICITUDs.Find(idSolicitud); List <EmpleadoSeleccion> empleadosSeleccion = getEmpleadosSeleccion(empleados); List <int> analisisSolicitud = new List <int>(); foreach (EmpleadoSeleccion empleadoSeleccion in empleadosSeleccion) { List <Int32> analisisList = empleadoSeleccion.analisis; for (var i = 0; i < analisisList.Count(); i++) { analisisSolicitud.Add(analisisList[i]); ANALISI analisis = db.ANALISIS.Find(analisisList[i]); IEnumerable <DETALLE_SOLICITUD> detalles = solicitud.DETALLE_SOLICITUD; DETALLE_SOLICITUD detalleSolicitud; if (detalles.Where(d => d.id_analisis == analisis.id_analisis).Count() == 1) { detalleSolicitud = detalles.Where(d => d.id_analisis == analisis.id_analisis).First(); } else { detalleSolicitud = new DETALLE_SOLICITUD() { id_solicitud = solicitud.id_solicitud, id_analisis = analisis.id_analisis }; db.DETALLE_SOLICITUD.Add(detalleSolicitud); db.SaveChanges(); } ANALISIS_EMPLEADO analisisEmpleado; if (detalleSolicitud.ANALISIS_EMPLEADO.Count() == 1) { analisisEmpleado = detalleSolicitud.ANALISIS_EMPLEADO.First(); analisisEmpleado.id_empleado = empleadoSeleccion.idEmpleado; } else { analisisEmpleado = new ANALISIS_EMPLEADO() { id_detalle_solicitud = detalleSolicitud.id_detalle_solicitud, id_empleado = empleadoSeleccion.idEmpleado }; db.ANALISIS_EMPLEADO.Add(analisisEmpleado); db.SaveChanges(); } } if (analisisList.Count() > 0) { PROCESO_ANALISTA procesoAnalista; if (db.PROCESO_ANALISTA.Where(pa => pa.empleado_id == empleadoSeleccion.idEmpleado).Count() > 1) { procesoAnalista = db.PROCESO_ANALISTA.Where(pa => pa.empleado_id == empleadoSeleccion.idEmpleado).First(); procesoAnalista.cantidad_analisis = (byte)analisisList.Count(); } else { procesoAnalista = new PROCESO_ANALISTA { solicitud_id = solicitud.id_solicitud, empleado_id = empleadoSeleccion.idEmpleado, cantidad_analisis = (byte)analisisList.Count() }; db.PROCESO_ANALISTA.Add(procesoAnalista); } db.SaveChanges(); } List <DETALLE_SOLICITUD> detallesToRemove = db.DETALLE_SOLICITUD.Where(ds => ds.id_solicitud == solicitud.id_solicitud && !analisisSolicitud.Contains(ds.id_analisis)).ToList(); foreach (DETALLE_SOLICITUD detalleToRemove in detallesToRemove) { db.DETALLE_SOLICITUD.Remove(detalleToRemove); } db.SaveChanges(); } dbTransaction.Commit(); result = new { isValid = true, id = solicitud.id_solicitud }; } catch (Exception e) { dbTransaction.Rollback(); var msg = e.Message; result = new { isValid = false, msg = msg }; } return(Json(result)); }
public ActionResult Revisar(int procesoId, string accion) { Object result; PROCESO_ANALISTA procesoAnalista = db.PROCESO_ANALISTA.Find(procesoId); SOLICITUD solicitud = procesoAnalista.SOLICITUD; try { if (accion == "aprobar") { // si es diferente de reportado if (procesoAnalista.id_estado_proceso_analista != 3) { throw new Exception("No es posible aprobar los resultado por el estado del proceso"); } procesoAnalista.id_estado_proceso_analista = 4; // finalizado db.SaveChanges(); bool todosFinalizados = true; foreach (PROCESO_ANALISTA procesoAnalistaSolicitud in solicitud.PROCESO_ANALISTA.ToList()) { // si es diferente de finalizado y cerrado if (procesoAnalistaSolicitud.id_estado_proceso_analista != 4 && procesoAnalistaSolicitud.id_estado_proceso_analista != 6) { todosFinalizados = false; } } // si todos los procesos estan finalizados if (todosFinalizados) { solicitud.id_estado_proceso = 4; // reportes completos solicitud.id_estado = 3; // finalizado solicitud.fecha_finalizacion = DateTime.Now; } db.SaveChanges(); EMPLEADO empleadoAnalista = db.EMPLEADOes.Find(procesoAnalista.EMPLEADO.id_empleado); EMPLEADO empleado = this.empleado(); // enviar notificacion Notificacion notificacion = new Notificacion(empleado.id_empleado, "Los resultados para solicitud " + solicitud.no_referencia + " fueron aprobados.", "Aprobados", Url.Action("Administrar", "Analisis", new { idSolicitud = solicitud.id_solicitud })); notificacion.setReceptor(empleadoAnalista.id_empleado); notificacion.send(); var msg = "El reporte de " + procesoAnalista.EMPLEADO.nombre_empleado + " se aprobo con exito."; if (todosFinalizados) { msg += " El proceso ha finalizado, ahora puede generar un informe con todos los resultados"; } result = new { valid = true, msg = msg }; } else { // finalizado y generado if (procesoAnalista.id_estado_proceso_analista == 4 && procesoAnalista.SOLICITUD.informe_generado == 1) { throw new Exception("El informe ya fue generado, para modificar los resultados debe de estar en un estado de 'Correccion'"); } if (solicitud.id_estado_proceso == 6) { procesoAnalista.id_estado_proceso_analista = 5; // estado correccion } else { procesoAnalista.id_estado_proceso_analista = 2; // estado iniciado } procesoAnalista.fecha_fin = null; // si el estado del proceso es reportes completos entonces set a iniciado if (solicitud.id_estado_proceso == 4) { solicitud.id_estado_proceso = 3; } // si es estado de la solicitud es finalizada entonces set a proceso if (solicitud.id_estado == 3) { solicitud.id_estado = 2; } db.SaveChanges(); EMPLEADO empleadoAnalista = db.EMPLEADOes.Find(procesoAnalista.EMPLEADO.id_empleado); EMPLEADO empleado = this.empleado(); // enviar notificacion Notificacion notificacion = new Notificacion(empleado.id_empleado, "Los resultados para solicitud " + solicitud.no_referencia + " fueron rechazados.", "Rechazados", Url.Action("Administrar", "Analisis", new { idSolicitud = solicitud.id_solicitud })); notificacion.setReceptor(empleadoAnalista.id_empleado); notificacion.send(); result = new { valid = true, msg = "El reporte de " + procesoAnalista.EMPLEADO.nombre_empleado + " se ha denegado. Se le ha notificado y el proceso abierto para hacer las correcciones necesarias." }; } } catch (Exception e) { result = new { valid = false, msg = e }; } return(Json(result)); }