示例#1
0
        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));
        }
示例#2
0
        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 }));
        }
示例#3
0
        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();
            }
        }
示例#4
0
        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));
        }
示例#5
0
        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));
        }
示例#6
0
        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));
        }
示例#7
0
        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 }));
        }
示例#8
0
        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));
        }
示例#9
0
        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));
        }