//<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(); } }
//---------------------------------------------------------------------------// //-----------------------------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)); }
/* * 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(); } } } } } }