//<summary> : This method is in charge to set the new leader to an especific project
        //<param>   : cedula_empleadoFK : Represents the identifier of the leader.
        //<param>   : idPK              : Represente the identifier of the project involved.
        //<param>   : rol               : Represents the role of the employee, in this case always be "Leader"
        //<return>  : None
        public void SetLeaderToProject(string cedula_empleadoFK, int idPK, string rol)
        {
            if (cedula_empleadoFK != "")
            {
                var TrabajaEn = new TrabajaEn {
                    cedula_empleadoFK = cedula_empleadoFK,
                    id_proyectoFK     = idPK,
                    rol = rol
                };
                var employee = db.Empleadoes.Find(cedula_empleadoFK);
                employee.disponibilidad = employee.disponibilidad.Replace("Disponible", "Ocupado");

                db.TrabajaEns.Add(TrabajaEn);

                db.SaveChanges( );
            }
        }
        //Metodo para llenar los viewbag de edit con los datos de los lideres
        //Recibe un Proyecto proyecto, con los datos para realizar las busquedas
        private void CargarDatosLiderEdit(Proyecto proyecto)
        {
            //Busca la cedula lider actual del proyecto
            TrabajaEn cedulaLiderA = db.TrabajaEn.Where(p => p.idProyectoFK == proyecto.idProyectoAID && p.rol == "Lider" && p.estado == "Activo").FirstOrDefault();

            ViewBag.liderActual = null;

            if (cedulaLiderA != null)
            {
                ViewBag.liderActual = cedulaLiderA.Empleado;
                //Selecciona todos los empelados que esten disponible y que sean Lider (Menos el lider actual)
                ViewBag.lider = db.Empleado.Where(p => p.idEmpleadoPK != cedulaLiderA.Empleado.idEmpleadoPK && p.estado == "Disponible" && p.tipoTrabajo == "Lider").ToList();
            }
            else
            {
                ViewBag.lider = db.Empleado.Where(p => p.estado == "Disponible" && p.tipoTrabajo == "Lider").ToList();
            }
        }
Exemple #3
0
        //---------------------------------------------------------------------------//
        //-----------------------------Rutinas del controlador-----------------------//

        /*
         * Efecto: Agrega un integrante nuevo al equipo
         * Requiere: un id de proyecto, id de empleado y rol válidos.
         * Modifica: El empleado que se integra al equipo y la tabla TrabajaEn.
         * Retorna: Devuelve un JSON con el flag de éxito y el mensaje por desplegar en la vista.
         */
        public JsonResult AgregarIntegrante(int idProyecto, string idEmpleado, string rolEmpleado)
        {
            //System.Diagnostics.Debug.WriteLine(idProyecto + " " + idEmpleado + " " + rolEmpleado);
            Empleado empleado = db.Empleado.Find(idEmpleado);
            dynamic  ret;

            switch (empleado.tipoTrabajo)
            {
            case "Lider":
            {
                //Declara el parámetro de retorno para el procedimiento de la base y lo castea.
                ObjectParameter output = new ObjectParameter("liderFlag", typeof(Int32));
                db.USP_EquipoCheckLider(idProyecto, output);
                int numLider = (int)output.Value;

                //Equipo sin lider, puede ser añadido
                if (numLider == 0)
                {
                    empleado.estado = "Ocupado";

                    //Revisa si el empleado no existe dentro del proyecto de manera inactiva
                    TrabajaEn checkInactivo = db.TrabajaEn.Find(idProyecto, idEmpleado);
                    if (checkInactivo == null)
                    {
                        TrabajaEn trabaja = new TrabajaEn();
                        trabaja.idProyectoFK     = idProyecto;
                        trabaja.idEmpleadoFK     = empleado.idEmpleadoPK;
                        trabaja.rol              = rolEmpleado;
                        trabaja.estado           = "Activo";
                        db.Entry(empleado).State = EntityState.Modified;
                        db.TrabajaEn.Add(trabaja);
                    }
                    //Ya fue parte del equipo, lo marca como activo en vez de insertar.
                    else
                    {
                        checkInactivo.estado = "Activo";
                    }


                    db.SaveChanges();
                    ret = new
                    {
                        flag = 1,
                        msg  = "Se ha agregado el líder exitosamente al equipo."
                    };
                }
                // El equipo ya tiene lider, no puede ser agregado otro.
                else
                {
                    ret = new
                    {
                        flag = -1,
                        msg  = "No puede haber más de un líder en el equipo."
                    };
                    return(Json(ret, JsonRequestBehavior.AllowGet));
                }
                break;
            }

            case "Tester":
            {
                //Declara el parámetro de retorno para el procedimiento de la base y lo castea.
                ObjectParameter output = new ObjectParameter("testers", typeof(Int32));
                db.USP_EquipoCheckTesters(idProyecto, output);
                int numTesters = (int)output.Value;
                System.Diagnostics.Debug.WriteLine("CANTIDAD TESTERS: " + numTesters);

                //Hay menos testers que el máximo, puede ser agregado.
                if (numTesters < 5)
                {
                    empleado.estado = "Ocupado";

                    //Revisa si el empleado no existe dentro del proyecto de manera inactiva
                    TrabajaEn checkInactivo = db.TrabajaEn.Find(idProyecto, idEmpleado);
                    if (checkInactivo == null)
                    {
                        TrabajaEn trabaja = new TrabajaEn();
                        trabaja.idProyectoFK     = idProyecto;
                        trabaja.idEmpleadoFK     = empleado.idEmpleadoPK;
                        trabaja.rol              = rolEmpleado;
                        trabaja.estado           = "Activo";
                        db.Entry(empleado).State = EntityState.Modified;
                        db.TrabajaEn.Add(trabaja);
                    }
                    //Ya fue parte del equipo, lo marca como activo en vez de insertar.
                    else
                    {
                        checkInactivo.estado = "Activo";
                    }


                    db.SaveChanges();
                    ret = new
                    {
                        flag = 1,
                        msg  = "Se ha agregado el tester exitosamente al equipo."
                    };
                }
                //Ya no se pueden agregar mas testers al equipo
                else
                {
                    ret = new
                    {
                        flag = -1,
                        msg  = "No se pueden agregar más testers al equipo."
                    };
                }
            }
            break;

            default:
                ret = new
                {
                    flag = -1,
                    msg  = "No se ha podido agregar el integrante al equipo."
                };
                break;
            }
            return(Json(ret, JsonRequestBehavior.AllowGet));
        }
Exemple #4
0
        /*
         * Efecto: Elimina a un integrante del equipo asociado a un proyecto específico.
         * Requiere: un id de proyecto, id de empleado y rol válidos.
         * Modifica: El empleado que se integra al equipo y la tabla TrabajaEn.
         * Retorna: Devuelve un JSON con el flag de éxito y el mensaje por desplegar en la vista.
         */
        public JsonResult QuitarIntegrante(int idProyecto, string idEmpleado, string rolEmpleado)
        {
            Empleado  empleado = db.Empleado.Find(idEmpleado);
            Proyecto  proyecto = db.Proyecto.Find(idProyecto);
            TrabajaEn trabaja  = db.TrabajaEn.Find(idProyecto, idEmpleado);
            dynamic   ret;


            //Si el proyecto está activo guarda el empleado para cuestión de historial pero lo pone inactivo.
            if (proyecto.estado == "Activo")
            {
                //Es lider
                if (empleado.tipoTrabajo == "Lider")
                {
                    ret = new
                    {
                        flag = -1,
                        msg  = "No se puede sacar al líder de un proyecto activo."
                    };
                }

                //Es un tester, revisar reqs
                else
                {
                    //Declara la variable de retorno para el procedimiento de la base y lo castea.
                    ObjectParameter output = new ObjectParameter("reqs", typeof(Int32));
                    db.USP_ContarRequerimientosTester(idEmpleado, output);
                    int reqs = (int)output.Value;

                    //No tiene requerimientos asignados, puede ser eliminado
                    if (reqs == 0)
                    {
                        empleado.estado          = "Disponible";
                        db.Entry(empleado).State = EntityState.Modified;

                        trabaja.estado          = "Inactivo";
                        db.Entry(trabaja).State = EntityState.Modified;

                        ret = new
                        {
                            flag = 1,
                            msg  = "Se ha sacado exitosamente al tester del equipo."
                        };
                        db.SaveChanges();
                    }
                    else //Tiene reqs
                    {
                        ret = new
                        {
                            flag = -1,
                            msg  = "No se puede sacar a un empleado con requerimientos activos asignados."
                        };
                    }
                }
            }
            //Proyecto no activo, lo borra del equipo.
            else
            {
                //Es lider, se elimina de proyecto no activo
                if (empleado.tipoTrabajo == "Lider")
                {
                    db.TrabajaEn.Remove(trabaja);
                    empleado.estado          = "Disponible";
                    db.Entry(empleado).State = EntityState.Modified;
                    ret = new
                    {
                        flag = 1,
                        msg  = "Se ha sacado exitosamente al líder del equipo."
                    };
                    db.SaveChanges();
                }
                //Es tester, se revisan los requerimientos.
                else
                {
                    ObjectParameter output = new ObjectParameter("reqs", typeof(Int32));
                    db.USP_ContarRequerimientosTester(idEmpleado, output);
                    int reqs = (int)output.Value;

                    //No tiene requerimientos asignados, puede ser eliminado
                    if (reqs == 0)
                    {
                        db.TrabajaEn.Remove(trabaja);
                        empleado.estado          = "Disponible";
                        db.Entry(empleado).State = EntityState.Modified;
                        ret = new
                        {
                            flag = 1,
                            msg  = "Se ha sacado exitosamente al tester del equipo."
                        };
                        db.SaveChanges();
                    }
                    //Tiene requerimientos, no puede ser eliminado.
                    else
                    {
                        ret = new
                        {
                            flag = -1,
                            msg  = "No se puede sacar a un empleado con requerimientos activos asignados."
                        };
                    }
                }
            }
            return(Json(ret, JsonRequestBehavior.AllowGet));
        }
        //Metodo que actualiza el lider de un proyecto
        //Recibe Proyecto proyecto, con los datos del proyecto
        //       string cedulaLider, llave primaria del nuevo lider
        //       string cedulaLiderActual, llave primaria del lider actual
        public void ActualizarTrabajaEN(Proyecto proyecto, string cedulaLider, string cedulaLiderActual)
        {
            int inProyectoAID = proyecto.idProyectoAID;

            //Si 0selecciona un nuevo lider o eliminar al actual. Hay que actualizar datos
            if (!String.IsNullOrEmpty(cedulaLider))
            {
                //Si no existe un lider
                if (String.IsNullOrEmpty(cedulaLiderActual))
                {
                    //Se selecciono un nuevo lider
                    if (cedulaLider != "-1")
                    {
                        //Verifica si el empleado ya trabajo en el proyecto
                        TrabajaEn lider = db.TrabajaEn.Find(inProyectoAID, cedulaLider);
                        if (lider == null)//Si aun no ha trabajado lo agrega
                        {
                            TrabajaEn trabaja = new TrabajaEn();
                            trabaja.idEmpleadoFK = cedulaLider;
                            trabaja.idProyectoFK = inProyectoAID;
                            trabaja.estado       = "Activo";
                            trabaja.rol          = "Lider";

                            db.TrabajaEn.Add(trabaja);
                            db.SaveChanges();
                        }
                        else //Si ya trabajo, actualiza el estado
                        {
                            lider.estado          = "Activo";
                            db.Entry(lider).State = EntityState.Modified;
                        }



                        //Actualiza el estado del empleado a trabajando
                        Empleado empleado2 = db.Empleado.Find(cedulaLider);
                        empleado2.estado          = "Trabajando";
                        db.Entry(empleado2).State = EntityState.Modified;
                        db.SaveChanges();
                    }
                }
                //Ya existe un lider
                else
                {
                    //hay que cambiar al lider
                    if (cedulaLider != cedulaLiderActual)
                    {
                        //Si aun no empieza el proyecto cambie el lider
                        if (proyecto.estado == "Preparación")
                        {
                            //Elimina el empleado anterior
                            db.TrabajaEn.Remove(db.TrabajaEn.Find(inProyectoAID, cedulaLiderActual));
                            db.SaveChanges();

                            //Actualiza los datos del empleado
                            Empleado empleado = db.Empleado.Find(cedulaLiderActual);
                            empleado.estado          = "Disponible";
                            db.Entry(empleado).State = EntityState.Modified;
                            db.SaveChanges();


                            //Se selecciono un nuevo lider
                            if (cedulaLider != "-1")
                            {
                                //Agrega un nuevo Empleado
                                TrabajaEn trabaja = new TrabajaEn();
                                trabaja.idEmpleadoFK = cedulaLider;
                                trabaja.idProyectoFK = inProyectoAID;
                                trabaja.estado       = "Activo";
                                trabaja.rol          = "Lider";

                                db.TrabajaEn.Add(trabaja);
                                db.SaveChanges();


                                Empleado empleado2 = db.Empleado.Find(cedulaLider);
                                empleado2.estado          = "Trabajando";
                                db.Entry(empleado2).State = EntityState.Modified;
                                db.SaveChanges();
                            }
                        }
                        //Si el proyecto ya esta activo, se guarda el lider actual con estado "Inactivo"
                        else
                        {
                            //Actualiza los datos del empleado en la tabla TrabajaEn
                            TrabajaEn liderAnterior = db.TrabajaEn.Find(inProyectoAID, cedulaLiderActual);
                            liderAnterior.estado          = "Inactivo";
                            db.Entry(liderAnterior).State = EntityState.Modified;
                            db.SaveChanges();

                            //Actualiza los datos del empleado en la tabla de empleados
                            Empleado empleado = db.Empleado.Find(cedulaLiderActual);
                            empleado.estado          = "Disponible";
                            db.Entry(empleado).State = EntityState.Modified;
                            db.SaveChanges();


                            //Se selecciono un nuevo lider
                            if (cedulaLider != "-1")
                            {
                                //Agrega un nuevo Empleado
                                //Verifica si el empleado ya trabajo en el proyecto
                                TrabajaEn lider = db.TrabajaEn.Find(inProyectoAID, cedulaLider);
                                if (lider == null)//Si aun no ha trabajado lo agrega
                                {
                                    TrabajaEn trabaja = new TrabajaEn();
                                    trabaja.idEmpleadoFK = cedulaLider;
                                    trabaja.idProyectoFK = inProyectoAID;
                                    trabaja.estado       = "Activo";
                                    trabaja.rol          = "Lider";

                                    db.TrabajaEn.Add(trabaja);
                                    db.SaveChanges();
                                }
                                else //Si ya trabajo, actualiza el estado
                                {
                                    lider.estado          = "Activo";
                                    db.Entry(lider).State = EntityState.Modified;
                                }

                                //Actualiza el estado del empleado a trabajando
                                Empleado empleado2 = db.Empleado.Find(cedulaLider);
                                empleado2.estado          = "Ocupado";
                                db.Entry(empleado2).State = EntityState.Modified;
                                db.SaveChanges();
                            }
                        }
                    }
                }
            }
        }