コード例 #1
0
        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.
             */
        }