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