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. */ }