/// <summary> /// Obtiene la estructura de todo el proyecto, incluyendo las actividades que la involucran, y las asignaciones. /// </summary> /// <param name="lista"></param> /// <param name="sub"></param> /// <param name="nivel"></param> /// <returns></returns> public static List <ClaseExpGantt> ObtenerEstructuraSubproyectosConActividades(List <ClaseExpGantt> lista, SUBPROYECTO sub, int nivel) { List <SUBPROYECTO> listaSubproyectos = ObtenerSubproyectosHijos(subpro: sub); List <Actividad_proyecto> actividades = ControladorActividades.ObtenerActividadesProyectoDeSubproyecto(sub); ClaseExpGantt estructura = new ClaseExpGantt() { subproyecto = sub, nivel = nivel }; lista.Add(estructura); nivel = nivel + 1; foreach (var actividad in actividades) { Detalle_recurso tarea = ControladorTareas.ObtenerPorActividad(actividad); ClaseExpGantt ExpoActivida = new ClaseExpGantt() { actividadProy = actividad, nivel = nivel, tarea = tarea, subproyecto = null, actividad = ControladorActividades.ObtenerActividad(actividad), usuario = tarea != null?ControladorUsuarios.ObtenerUsuario(tarea.id_usuario.Value) : null }; lista.Add(ExpoActivida); } foreach (SUBPROYECTO subpro in listaSubproyectos) { ObtenerEstructuraSubproyectosConActividades(lista, subpro, nivel); } return(lista); }
public static bool EliminarSubproyecto(SUBPROYECTO subproyecto) { var lista = new List <Tuple <SUBPROYECTO, int> >(); var subpHijos = ObtenerEstructuraSubproyectos(lista, subproyecto, 1); foreach (var subp in subpHijos) { List <Actividad_proyecto> actividades = ControladorActividades.ObtenerActividadesProyectoDeSubproyecto(subp.Item1); foreach (var item in actividades) { if (ControladorActividades.TieneHorasLogueadas(item)) { return(false); } } } foreach (var subp in subpHijos) { List <Actividad_proyecto> actividades = ControladorActividades.ObtenerActividadesProyectoDeSubproyecto(subp.Item1); foreach (var item in actividades) { ControladorActividades.EliminarActividad(item); } SubproyectoBD.EliminarSubproyecto(subp.Item1); } return(true); }
/// <summary> /// Actualiza la hora del subproyecto para que la suma sea igual a las horas de las actividades /// incluyendo los subproyectos hijos. /// </summary> /// <param name="subproyecto">Subproyecto a actualizar, incluyendo sus hijos</param> /// <returns></returns> public static decimal ActualizarHorasSubproyecto(SUBPROYECTO subproyecto) { List <SUBPROYECTO> subproyectos = ObtenerSubproyectosHijos(subproyecto); List <Actividad_proyecto> actividades = ControladorActividades.ObtenerActividadesProyectoDeSubproyecto(subproyecto); List <SUBPROYECTO> hijos; decimal total = 0; //Función recursiva para calcular las horas de los subproyectos hijos foreach (var subpro in subproyectos) { total += ActualizarHorasSubproyecto(subpro); } //Recorre las actividades y suma sus horas foreach (var item in actividades) { item.cantidad_hora = (decimal)ControladorActividades.ObtenerHorasTotalesActividad(item); ControladorActividades.ActualizarActividadProyecto(item); total += (decimal)ControladorActividades.ObtenerHorasTotalesActividad(item); } subproyecto.horas_estimadas = total; ActualizarSubproyecto(subproyecto); return(total); }
public static bool AsignarSubproyecto(SUBPROYECTO subproyecto, double cantidad_horas_solapamiento) { bool salida = true; if (subproyecto != null && subproyecto.asignacion_automatica) { ControladorActividades.ActualizarOrdenActividades(subproyecto); List <Actividad_proyecto> actividades = ControladorActividades.ObtenerActividadesProyectoDeSubproyecto(subproyecto).OrderBy(x => x.orden).ToList(); Proyecto proyecto = ControladorProyecto.ObtenerPorID(subproyecto.id_proyecto.Value); if (!proyecto.activo.Value) { return(false); } foreach (var actividad in actividades) { if (!ControladorActividades.EstaCompletada(actividad) && ObtenerPorActividad(actividad) == null) { if (!AsignarActividadProyecto(actividad, cantidad_horas_solapamiento)) { //La actividad no pudo ser asignada salida = false; } } else if (ObtenerPorActividad(actividad) != null) { //TODO si la actividad ya esta logueada, verificar el tema de las horas, calcular hora fin, etc } } return(salida); } return(salida); /* * Consideraciones: * - El subproyecto tiene que tener los miembros asignados, o el proyecto. * - El proyecto tiene que estar activo * - Las actividades no tienen que estar completadas (recordar que pasa con el primer control) * - Las actividades no tienen que tener una tarea asignada, ya que los correspondtientes fueron borrados, sino * hay que respetar la tarea a ese usuario o esta forzada. * - Solo los usuarios miembros para esa actividad pueden realizarla * - Primero las actividades mas largas * - Ordenar la lista de usuarios por el que tiene menos calificaciones primero. * - Tener en cuenta que a futuro se agregan prioridades. * * Como ordenar por fecha?. SI erdeno la lista por usuarios, pero otro que está mas alto en la lista * puede empezarlo antes. */ }
/// <summary> /// Obtiene las horas minimas de un subproyecto, esto es la suma de todas las actividades hijas, indirectamente. /// </summary> /// <param name="subpro"></param> /// <returns></returns> public static double ObtenerHorasMinimasSubproyecto(SUBPROYECTO subpro) { double total = 0; List <SUBPROYECTO> lisSubpro = ObtenerSubproyectosHijos(subpro); List <Actividad_proyecto> actividades = ControladorActividades.ObtenerActividadesProyectoDeSubproyecto(subpro); //Función recursiva para calcular las horas de los subproyectos hijos foreach (var sub in lisSubpro) { total += ObtenerHorasMinimasSubproyecto(sub); } //Recorre las actividades y suma sus horas asignadas foreach (var act in actividades) { total += ControladorActividades.ObtenerHorasAsignadas(act); } return(total); }
internal static void ActualizarHorasProyectosActivos() { List <Proyecto> proyectos_activos = ObtenerProyectosActivos(); decimal totalProy = 0; decimal totalSub = 0; foreach (var proyecto in proyectos_activos) { totalProy = 0; List <SUBPROYECTO> subproyectos = ObtenerSubproyectosHijos(proyecto); foreach (var subpro in subproyectos) { List <SUBPROYECTO> subproyectosHijos = ControladorSubproyecto.ObtenerSubproyectosHijos(subpro); List <Actividad_proyecto> actividades = ControladorActividades.ObtenerActividadesProyectoDeSubproyecto(subpro); List <SUBPROYECTO> hijos; totalSub = 0; //Función recursiva para calcular las horas de los subproyectos hijos foreach (var sub in subproyectosHijos) { totalSub += ControladorSubproyecto.ActualizarHorasSubproyecto(sub); } //Recorre las actividades y suma sus horas foreach (var item in actividades) { item.cantidad_hora = (decimal)ControladorActividades.ObtenerHorasTotalesActividad(item); ControladorActividades.ActualizarActividadProyecto(item); totalSub += (decimal)ControladorActividades.ObtenerHorasTotalesActividad(item); } totalProy += totalSub; subpro.horas_estimadas = totalSub; ControladorSubproyecto.ActualizarSubproyecto(subpro); } proyecto.total_hora = totalProy; Update(proyecto); } }