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 ActionResult Create(PRODUCTO producto) { var dbTransaction = db.Database.BeginTransaction(); var msg = ""; Object result; try { EMPLEADO empleado = this.empleado(); this.setCatalogos(producto, this.Request); db.PRODUCTOes.Add(producto); db.SaveChanges(); var cantidad = Request.Form["existencia"]; for (var i = 0; i < Int32.Parse(cantidad); i++) { var existencia = new EXISTENCIA_PRODUCTO(); existencia.cantidad = producto.presentacion_cantidad; existencia.id_producto = producto.id_producto; existencia.estado = "cerrado"; db.EXISTENCIA_PRODUCTO.Add(existencia); db.SaveChanges(); } foreach (EMPLEADO empleadoAnalista in db.EMPLEADOes.Where(e => e.id_tipo_empleado == 2).ToList()) { REACTIVO reactivo = db.REACTIVOes.Find(producto.id_reactivo); // enviar notificacion Notificacion notificacion = new Notificacion(empleado.id_empleado, "Ha ingresado producto a inventario.", "Se ingresó " + reactivo.nombre + ". Para mas detalles vea la pagina de inventario", Url.Action("Index", "Producto")); notificacion.setReceptor(empleadoAnalista.id_empleado); notificacion.send(); } dbTransaction.Commit(); result = new { valid = true }; } catch (Exception e) { Console.Write(e); msg = e.Message; dbTransaction.Rollback(); result = new { valid = false, msg = msg }; } return(Json(result)); }
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 IniciarAnalisis(int idSolicitud) { SOLICITUD solicitud = db.SOLICITUDs.Find(idSolicitud); EMPLEADO empleado = this.empleado(); if (solicitud.DETALLE_SOLICITUD.First().ANALISIS_EMPLEADO.FirstOrDefault() == null) { return(Json(new { valid = false, msg = "No se han asignado trabajos a los analistas" })); } if (solicitud.VISITAs.Count() == 0) { return(Json(new { valid = false, msg = "La solicitud no tiene informacion de visita" })); } solicitud.id_estado_proceso = estadoIniciado; solicitud.fecha_inicio = DateTime.Now; List <PROCESO_ANALISTA> procesosAnalistas = db.PROCESO_ANALISTA.Where(pa => pa.solicitud_id == idSolicitud).ToList(); foreach (PROCESO_ANALISTA procesoAnalista in procesosAnalistas) { procesoAnalista.fecha_asignacion = DateTime.Now; procesoAnalista.id_estado_proceso_analista = estadoProcesoAnalistaAsignado; EMPLEADO empleadoReceptor = procesoAnalista.EMPLEADO; // enviar notificacion Notificacion notificacion = new Notificacion(empleado.id_empleado, "Se ha asignado trabajo para la solicitud " + solicitud.no_referencia + ".", "-", Url.Action("Administrar", "Analisis", new { idSolicitud = solicitud.id_solicitud })); notificacion.setReceptor(empleadoReceptor.id_empleado); notificacion.send(); } db.SaveChanges(); return(Json(new { valid = true })); }
public ActionResult Salida() { 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); var productos = input.GetValue("productos"); foreach (JObject element in productos) { int productId = element.GetValue("id").ToObject <int>(); var salida = element.GetValue("salida").ToObject <string>(); PRODUCTO producto = db.PRODUCTOes.Find(productId); if (salida == "") { throw new Exception("Por favor llene todos los campos de salida"); } decimal cantidad = db.EXISTENCIA_PRODUCTO.Where(ep => ep.id_producto == productId && ep.estado != "terminado").Sum(ep => ep.cantidad); decimal salidaDecimal = decimal.Parse(salida); if (salidaDecimal > cantidad) { throw new Exception("El cantidad de salida para el reactivo " + producto.REACTIVO.nombre + " es mayor que la existencia"); } Boolean notificacionAlerta = false; if (((cantidad - salidaDecimal) / cantidad) * 100 < producto.minimo_porcentaje) { notificacionAlerta = true; } DateTime fechaSalida = DateTime.Now; foreach (EXISTENCIA_PRODUCTO existencia in producto.EXISTENCIA_PRODUCTO.Where(ep => ep.estado == "abierto")) { decimal cantidadSalida; var cantidadExistencia = existencia.cantidad; if (salidaDecimal >= cantidadExistencia) { cantidadSalida = cantidadExistencia; salidaDecimal -= cantidadExistencia; existencia.cantidad = 0; existencia.estado = "terminado"; } else { cantidadSalida = salidaDecimal; salidaDecimal = 0; existencia.cantidad -= cantidadSalida; existencia.estado = "abierto"; } SALIDA_EXISTENCIA salidaExistencia = new SALIDA_EXISTENCIA() { cantidad_existencia = cantidadSalida, cantidad_salida = cantidadSalida, fecha_salida = fechaSalida, id_empleado = empleado.id_empleado, id_existencia_producto = existencia.id_existencia_producto, id_unidad = existencia.PRODUCTO.UNIDAD.id_unidad, id_reactivo = existencia.PRODUCTO.id_reactivo }; db.SALIDA_EXISTENCIA.Add(salidaExistencia); if (salidaDecimal == 0) { break; } } foreach (EXISTENCIA_PRODUCTO existencia in producto.EXISTENCIA_PRODUCTO.Where(ep => ep.estado == "cerrado")) { decimal cantidadSalida; var cantidadExistencia = existencia.cantidad; if (salidaDecimal >= cantidadExistencia) { cantidadSalida = cantidadExistencia; salidaDecimal -= cantidadExistencia; existencia.cantidad = 0; existencia.estado = "terminado"; } else { cantidadSalida = salidaDecimal; salidaDecimal = 0; existencia.cantidad -= cantidadSalida; existencia.estado = "abierto"; } SALIDA_EXISTENCIA salidaExistencia = new SALIDA_EXISTENCIA() { cantidad_existencia = cantidadSalida, cantidad_salida = cantidadSalida, fecha_salida = fechaSalida, id_empleado = empleado.id_empleado, id_existencia_producto = existencia.id_existencia_producto, id_unidad = existencia.PRODUCTO.UNIDAD.id_unidad, id_reactivo = existencia.PRODUCTO.id_reactivo }; db.SALIDA_EXISTENCIA.Add(salidaExistencia); if (salidaDecimal == 0) { break; } } if (notificacionAlerta) { // enviar notificacion Notificacion notificacionA = new Notificacion(empleado.id_empleado, "Ha dejado en alerta un producto del reactivo: " + producto.REACTIVO.nombre + ".", "Para mas detalles vea las salidas de inventario", Url.Action("reporteSalida", "Producto")); notificacionA.setReceptor(); notificacionA.send(); } } db.SaveChanges(); // enviar notificacion Notificacion notificacion = new Notificacion(empleado.id_empleado, "Ha efectuado una salida de inventario.", "Para mas detalles vea las salidas de inventario", Url.Action("reporteSalida", "Producto")); notificacion.setReceptor(); notificacion.send(); dbTransaction.Commit(); result = new { isValid = true }; } 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)); }