示例#1
0
        /// <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);
        }
示例#2
0
        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);
        }
示例#3
0
        /// <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.
             */
        }
示例#5
0
        /// <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);
        }
示例#6
0
        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);
            }
        }