Beispiel #1
0
        public static SUBPROYECTO UpdateSubproyecto(SUBPROYECTO subproyecto)
        {
            using (var bd = new DescarEntity())
            {
                var sub = (from s in bd.SUBPROYECTOes
                           where s.id_subproyecto == subproyecto.id_subproyecto
                           select s).Single();

                sub.asignacion_automatica         = subproyecto.asignacion_automatica;
                sub.fecha_fin_estimada            = subproyecto.fecha_fin_estimada;
                sub.fecha_fin_real                = subproyecto.fecha_fin_real;
                sub.fecha_inicio_estimada         = subproyecto.fecha_inicio_estimada;
                sub.fecha_inicio_real             = subproyecto.fecha_inicio_real;
                sub.forzada_fecha_fin_estimada    = subproyecto.forzada_fecha_fin_estimada;
                sub.forzada_fecha_inicio_estimada = subproyecto.forzada_fecha_inicio_estimada;
                sub.genera_ot                = subproyecto.genera_ot;
                sub.horas_estimadas          = subproyecto.horas_estimadas;
                sub.id_estado_proyecto       = subproyecto.id_estado_proyecto;
                sub.id_hora_tipo_subproyecto = subproyecto.id_hora_tipo_subproyecto;
                sub.id_prioridad             = subproyecto.id_prioridad;
                sub.id_proyecto              = subproyecto.id_proyecto;
                sub.id_proyecto_padre_viejo  = subproyecto.id_proyecto_padre_viejo;
                sub.id_proyecto_viejo        = subproyecto.id_proyecto_viejo;
                sub.id_subproyecto_padre     = subproyecto.id_subproyecto_padre;
                sub.id_tipo_subproyecto      = subproyecto.id_tipo_subproyecto;
                sub.nombre             = subproyecto.nombre;
                sub.observaciones      = subproyecto.observaciones;
                sub.orden              = subproyecto.orden;
                sub.ot                 = subproyecto.ot;
                sub.ot_cliente         = subproyecto.ot_cliente;
                sub.horas_orden_compra = subproyecto.horas_orden_compra;
                bd.SaveChanges();
            }
            return(subproyecto);
        }
Beispiel #2
0
        /// <summary>
        /// Busca por OT del subproyecto
        /// </summary>
        /// <param name="ot"></param>
        /// <returns></returns>
        public static SUBPROYECTO BuscarPorOT(int ot, int idUsuario, bool validarMiembro)
        {
            SUBPROYECTO subp = null;

            using (var bd = new DescarEntity())
            {
                if (!validarMiembro)
                {
                    var sub = (from s in bd.SUBPROYECTOes
                               join orden in bd.ORDEN_TRABAJO on s.ot.Value equals orden.id_orden_trabajo
                               where orden.nro_orden_trabajo == ot
                               select s);
                    subp = sub.Any() ? sub.First() : null;
                }
                else
                {
                    var sub = (from s in bd.SUBPROYECTOes
                               join up in bd.Usuario_Proyecto on s.id_proyecto equals up.id_proyecto
                               join orden in bd.ORDEN_TRABAJO on s.ot.Value equals orden.id_orden_trabajo
                               where orden.nro_orden_trabajo == ot
                               & up.id_usuario == idUsuario
                               select s);

                    subp = sub.Any() ? sub.First() : null;
                }

                return(subp);
            }
        }
Beispiel #3
0
        public static SUBPROYECTO BuscarPorOTCliente(string ot, int idUsuario, bool validarMiembro)
        {
            SUBPROYECTO subp = null;

            using (var bd = new DescarEntity())
            {
                if (!validarMiembro)
                {
                    var sub = (from s in bd.SUBPROYECTOes
                               where s.ot_cliente.Contains(ot)
                               select s);
                    subp = sub.Any() ? sub.First() : null;
                }
                else
                {
                    var sub = (from s in bd.SUBPROYECTOes
                               join up in bd.Usuario_Proyecto on s.id_proyecto equals up.id_proyecto
                               where s.ot_cliente.Contains(ot)
                               & up.id_usuario == idUsuario
                               select s);

                    subp = sub.Any() ? sub.First() : null;
                }

                return(subp);
            }
        }
Beispiel #4
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);
        }
Beispiel #5
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);
        }
Beispiel #6
0
        public static List <AvanceSubproyecto> ObtenerAvanceConcepto(SUBPROYECTO subpr, Tipo_actividad tipo_actividad)
        {
            using (var bd = new DescarEntity())
            {
                var sub = (from s in bd.SUBPROYECTOes
                           join ap in bd.Actividad_proyecto on s.id_subproyecto equals ap.id_subproyecto
                           join a in bd.Actividads on ap.id_actividad equals a.id_actividad
                           join mv in bd.Movimiento_voz on ap.id_actividad_proyecto equals mv.id_actividad_proyecto
                           join u_prod in bd.USUARIOs on mv.id_usuario_1 equals u_prod.id_usuario
                           join u_ctrl in bd.USUARIOs on mv.id_usuario_2 equals u_ctrl.id_usuario
                           join u_corr in bd.USUARIOs on mv.id_usuario_3 equals u_corr.id_usuario
                           where s.id_subproyecto == subpr.id_subproyecto
                           & a.id_tipo_actividad == tipo_actividad.id_tipo_actividad
                           select new AvanceSubproyecto()
                {
                    subproyecto = s,
                    completado = mv.completado.Value,
                    completado_control = mv.control_1.Value,
                    completado_correccion_1 = mv.control_corr_1.Value,
                    completado_produccion = mv.control_prod.Value,
                    responsableCalidad = u_ctrl,
                    responsableProduccion = u_prod,
                    actividad_proyecto = ap,
                    responsableCorreccion = u_corr
                });

                return(sub.ToList());
            }
        }
        private void GenerarEstructuraCATIA(Product product, int id_proyecto, int id_subproyecto, bool esProyecto)
        {
            var controladorSubproyecto = new ControladorSubproyecto();
            var controladorProyecto    = new ControladorProyecto();
            var subproyectosHijos      = new List <SUBPROYECTO>();

            //Verifica que la raiz del arbol sea un proyecto, o un subroyecto, y si es este ultimo
            //verifica si es unidad o no.
            if (esProyecto)
            {
                if (id_subproyecto != null & id_subproyecto > 1)
                {
                    SUBPROYECTO subproyecto = ControladorSubproyecto.BuscarPorId(id_subproyecto);
                    {
                        product = CreateProduct(null, subproyecto.nombre);
                    }
                }
                else
                {
                    Proyecto proyecto = ControladorProyecto.ObtenerPorID(id_proyecto);
                    product = CreateProduct(null, ((Proyecto)proyecto).nombre_proyecto);
                }
            }


            subproyectosHijos = ControladorSubproyecto.ObtenerPorProyecto(id_proyecto, id_subproyecto);
            if (subproyectosHijos.Count > 0)
            {
                foreach (var subproyecto in subproyectosHijos)
                {
                    Product prod = CreateProduct(product, subproyecto.nombre);
                    GenerarEstructuraCATIA(prod, id_proyecto, subproyecto.id_subproyecto, false);
                }
            }
        }
Beispiel #8
0
 public static TIPO_SUBPROYECTO ObtenerTipoSubproyecto(SUBPROYECTO subproyecto)
 {
     using (var bd = new DescarEntity())
     {
         var sub = (from s in bd.TIPO_SUBPROYECTO
                    where s.id_tipo_subproyecto == subproyecto.id_tipo_subproyecto
                    select s);
         return(sub.Any() ? sub.Single() : null);
     }
 }
Beispiel #9
0
 public static List <Actividad_proyecto> ObtenerActividades(SUBPROYECTO subproyecto)
 {
     using (var bd = new DescarEntity())
     {
         var sub = (from s in bd.Actividad_proyecto
                    where s.id_subproyecto == subproyecto.id_subproyecto
                    select s);
         return(sub.Any() ? sub.ToList().OrderBy(x => x.orden).ToList() : new List <Actividad_proyecto>());
     }
 }
Beispiel #10
0
 public static SUBPROYECTO ObtenerSubproyectoPadre(SUBPROYECTO subpro)
 {
     using (var bd = new DescarEntity())
     {
         var sub = (from s in bd.SUBPROYECTOes
                    where s.id_subproyecto == subpro.id_subproyecto_padre
                    select s);
         return(sub.Any() ? sub.Single() : null);
     }
 }
Beispiel #11
0
 public static List <SUBPROYECTO> ObtenerSubproyectosHijos(SUBPROYECTO subpro)
 {
     using (var bd = new DescarEntity())
     {
         var sub = (from s in bd.SUBPROYECTOes
                    where s.id_subproyecto_padre == subpro.id_subproyecto &&
                    s.id_proyecto == subpro.id_proyecto
                    select s);
         return(sub.OrderBy(x => x.orden).ToList());
     }
 }
Beispiel #12
0
        /// <summary>
        /// Actualiza el valor de asignacion automatica al subproyecto indicado y sus hijos.
        /// </summary>
        /// <param name="subproyecto"></param>
        /// <param name="nuevoValor"></param>
        public static void ActualizarAsignacionAutomatica(SUBPROYECTO subproyecto, bool nuevoValor)
        {
            SUBPROYECTO        sub      = subproyecto;
            List <SUBPROYECTO> subHijos = ObtenerSubproyectosHijos(sub);

            foreach (var item in subHijos)
            {
                SubproyectoBD.ActualizarAsignacionAutomatica(item, nuevoValor);
                ActualizarAsignacionAutomatica(item, nuevoValor);
            }
        }
Beispiel #13
0
        public static void EliminarSubproyecto(SUBPROYECTO item1)
        {
            using (var bd = new DescarEntity())
            {
                var sub = (from ap in bd.SUBPROYECTOes
                           where ap.id_subproyecto == item1.id_subproyecto
                           select ap);

                bd.SUBPROYECTOes.RemoveRange(sub);
                bd.SaveChanges();
            }
        }
Beispiel #14
0
        public static List <USUARIO> ObtenerMiembrosDirectos(SUBPROYECTO subproyecto)
        {
            using (var bd = new DescarEntity())
            {
                var subs = (from s in bd.USUARIOs
                            join us in bd.Usuario_Proyecto on s.id_usuario equals us.id_usuario
                            where us.id_subproyecto == subproyecto.id_subproyecto
                            select s);

                return(subs.ToList());
            }
        }
Beispiel #15
0
 public static void ActualizarHorasOrdenCompraHijos(SUBPROYECTO subpr)
 {
     if (subpr.horas_orden_compra.HasValue)
     {
         List <SUBPROYECTO> hijos = ObtenerSubproyectosHijos(subpr);
         foreach (var item in hijos)
         {
             item.horas_orden_compra = (decimal)CalcularHorasOrdenCompra(item);
             ActualizarSubproyecto(item);
         }
     }
 }
        public static List <Actividad> ObtenerActividadesDeSubproyecto(SUBPROYECTO subpro)
        {
            using (var bd = new DescarEntity())
            {
                var act = (from ap in bd.Actividad_proyecto
                           join a in bd.Actividads on ap.id_actividad equals a.id_actividad
                           where ap.id_subproyecto == subpro.id_subproyecto
                           select a);

                return(act.ToList());
            }
        }
        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.
             */
        }
Beispiel #18
0
        /// <summary>
        /// Para que sean compatibles el orden que se usaba anteriormente de numeros impares al nuevo por 1,2,3,4..
        /// </summary>
        /// <param name="sub"></param>
        public static void ActualizarOrdenActividades(SUBPROYECTO sub)
        {
            List <Actividad_proyecto> actividades = ObtenerActividadesProyectoDeSubproyecto(sub).OrderBy(x => x.orden).ToList();

            foreach (var act in actividades)
            {
                if (act.orden != actividades.IndexOf(act) + 1)
                {
                    act.orden = actividades.IndexOf(act) + 1;
                    ControladorActividades.ActualizarActividadProyecto(act);
                }
            }
        }
Beispiel #19
0
        /// <summary>
        /// Comprobar metodo
        /// </summary>
        /// <param name="subproyecto"></param>
        /// <returns></returns>
        public static List <USUARIO> ObtenerMiembrosDirectosOrdenMenorCalificaciones(SUBPROYECTO subproyecto)
        {
            using (var bd = new DescarEntity())
            {
                var subs = (from s in bd.USUARIOs
                            join us in bd.Usuario_Proyecto on s.id_usuario equals us.id_usuario
                            join tau in bd.Tipo_Actividad_usuario on us.id_usuario equals tau.id_usuario
                            where us.id_subproyecto == subproyecto.id_subproyecto
                            select s);

                return(subs.ToList().GroupBy(x => x.id_usuario).OrderByDescending(x => x.Count()).ToList().Select(x => x.First()).ToList());
            }
        }
Beispiel #20
0
        public static void EliminarDetalleRecursoSubproyecto(SUBPROYECTO subproyecto)
        {
            using (var bd = new DescarEntity())
            {
                var act = (from mv in bd.Detalle_recurso
                           join ap in bd.Actividad_proyecto on mv.id_actividad_proyecto equals ap.id_actividad_proyecto
                           where ap.id_subproyecto == subproyecto.id_subproyecto
                           select mv);

                bd.Detalle_recurso.RemoveRange(act);
                bd.SaveChanges();
            }
        }
Beispiel #21
0
        public static SUBPROYECTO ActualizarAsignacionAutomatica(SUBPROYECTO subproyecto, bool nuevo_valor)
        {
            using (var bd = new DescarEntity())
            {
                var sub = (from s in bd.SUBPROYECTOes
                           where s.id_subproyecto == subproyecto.id_subproyecto
                           select s).Single();

                sub.asignacion_automatica = nuevo_valor;
                bd.SaveChanges();
            }
            return(subproyecto);
        }
Beispiel #22
0
        public static Actividad_proyecto ObtenerActividaHijaDeTipo(SUBPROYECTO subproyecto, Tipo_actividad tipo)
        {
            using (var bd = new DescarEntity())
            {
                var sub = (from ap in bd.Actividad_proyecto
                           join a in bd.Actividads on ap.id_actividad equals a.id_actividad
                           where ap.id_subproyecto == subproyecto.id_subproyecto
                           & a.id_tipo_actividad == tipo.id_tipo_actividad
                           select ap);

                return(sub.Any() ? sub.First() : null);
            }
        }
        public static Actividad_proyecto ObtenerActividadPorTipoActividad(SUBPROYECTO subpr, Tipo_actividad tipo_actividad)
        {
            using (var bd = new DescarEntity())
            {
                var sub = (from s in bd.SUBPROYECTOes
                           join ap in bd.Actividad_proyecto on s.id_subproyecto equals ap.id_subproyecto
                           join a in bd.Actividads on ap.id_actividad equals a.id_actividad
                           where s.id_subproyecto == subpr.id_subproyecto
                           & a.id_tipo_actividad == tipo_actividad.id_tipo_actividad
                           select ap);

                return(sub.Any() ? sub.First() : null);
            }
        }
Beispiel #24
0
        /// <summary>
        /// Devuelve el nombre del subproyecto segun ubicacion en el arbol
        /// </summary>
        /// <param name="subpro"></param>
        /// <returns></returns>
        public static String ObtenerPathSubproyecto(SUBPROYECTO subpro)
        {
            SUBPROYECTO   subp_padre = ObtenerSubproyectoPadre(subpro);
            List <String> path       = new List <string>();

            path.Add(subpro.nombre);

            while (subp_padre != null)
            {
                path.Add(subp_padre.nombre);
                subp_padre = ObtenerSubproyectoPadre(subp_padre);
            }

            path.Reverse();
            return(string.Join(" / ", path));
        }
Beispiel #25
0
        /// <summary>
        /// Solo para UNIDADES!
        /// Calcula las horas asignadas a ese subproyecto, en base al presupuesto asignado al dispositivo
        /// </summary>
        /// <param name="subproyecto"></param>
        /// <returns></returns>
        public static decimal?CalcularHorasOrdenCompra(SUBPROYECTO subproyecto)
        {
            SUBPROYECTO subPadre = ObtenerSubproyectoPadre(subproyecto);

            if (subPadre != null)
            {
                if (subPadre.horas_orden_compra.HasValue)
                {
                    return((decimal)ObtenerHorasMinimasSubproyecto(subPadre) > 0 ? Convert.ToDecimal(subPadre.horas_orden_compra.Value * (decimal)ObtenerHorasMinimasSubproyecto(subproyecto) / (decimal)ObtenerHorasMinimasSubproyecto(subPadre)) : 0);
                }
                else
                {
                    return((decimal)ObtenerHorasMinimasSubproyecto(subproyecto));
                }
            }
            return(null);
        }
Beispiel #26
0
        private void CrearActividad(SUBPROYECTO Subproyecto, int idTipoActividad, string nombre, int orden)
        {
            //TODO controlar duplicaciones
            var actAux = ControladorActividades.InsertarActividad(
                new Entidades.Actividad(
                    ControladorActividades.ObtenerTipoActividad(idTipoActividad).criticidad,
                    idTipoActividad,
                    nombre,
                    1));
            var actpro = ControladorActividades.InsertarActividadProyecto(new Actividad_proyecto(
                                                                              _proyAux.id_proyecto,
                                                                              actAux.id_actividad,
                                                                              fecha_inicio: DateTime.Now,
                                                                              fecha_fin_previsto: DateTime.Now,
                                                                              fecha_fin_real: DateTime.Now,
                                                                              cantidad_hora: 0,//Se actualiza después
                                                                              objetivo: "",
                                                                              prioridad: 1,
                                                                              complejidad: 1,
                                                                              avance: 0,
                                                                              observacion: "",
                                                                              orden: orden,
                                                                              id_controlador_1: 8,
                                                                              id_controlador_2: 8,
                                                                              nro: 0,
                                                                              id_cliente: _proyAux.id_cliente.HasValue ? _proyAux.id_cliente.Value : 0,
                                                                              id_subproyecto: Subproyecto.id_subproyecto,
                                                                              horas: 0,
                                                                              id_estado_proyecto: 0,
                                                                              porcentaje_avance: 0,
                                                                              fecha_inicio_real: DateTime.Now,
                                                                              asignada: false,
                                                                              id_cadista: 0,
                                                                              id_prioridad: 1,
                                                                              id_control: 0,
                                                                              id_proveedor: 0,
                                                                              forzada_fecha_fin: false,
                                                                              forzada_fecha_inicio: false,
                                                                              no_conformidad: false,
                                                                              motivo_no_conformidad: "",
                                                                              asignable: true));

            //ControladorTareas.VerificarAsignacionAutomatica(actpro);
        }
Beispiel #27
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);
        }
Beispiel #28
0
        /// <summary>
        /// Busca un subproyecto por el siguiente orden: <para/>
        /// OT, OT Cliente, Nombre. Si validaMiembro es true, valida que el usuario indicado
        /// sea miembro del mismo, de lo contrario no devuelve.
        /// </summary>
        /// <param name="texto"></param>
        /// <returns></returns>
        public static SUBPROYECTO Buscar(string texto, int idUsuario, bool validaMiembro)
        {
            SUBPROYECTO sub = null;
            int         ot  = 0;

            if (Int32.TryParse(texto, out ot))
            {
                sub = BuscarPorOT(ot, idUsuario, validaMiembro);
            }
            //Busca por OT cliente
            if (sub == null)
            {
                sub = BuscarPorOTCliente(texto, idUsuario, validaMiembro);
            }
            //Busca por el nombre
            if (sub == null)
            {
                sub = BuscarPorNombre(texto, idUsuario, validaMiembro);
            }
            return(sub);
        }
        public static DateTime?CalcularFechaFinSubproyecto(SUBPROYECTO subproyecto)
        {
            List <ClaseExpGantt> exp = new List <ClaseExpGantt>();

            ControladorSubproyecto.ObtenerEstructuraSubproyectosConActividades(exp, subproyecto, 1);
            List <DateTime?> fecha = new List <DateTime?>();

            foreach (var item in exp)
            {
                if (item.actividad != null)
                {
                    Detalle_recurso tarea = ObtenerPorActividad(item.actividadProy);
                    if (tarea != null && tarea.fecha_fin.HasValue)
                    {
                        fecha.Add(tarea.fecha_fin.Value);
                    }
                }
            }

            fecha.Sort((a, b) => a.Value.CompareTo(b.Value));
            return(fecha.Count > 0 ? fecha.ElementAt(fecha.Count - 1) : subproyecto.fecha_inicio_estimada.Value);
        }
Beispiel #30
0
        /// <summary>
        /// Obtiene la lista de miembros a un subproyecto. Esto es indirectamente, es decir
        /// si el subproyecto no tiene asignados miembros explicitamente, se buscará en el nivel del arbol
        /// hacia arriba
        /// </summary>
        /// <param name="subproyecto">El subproyecto a buscar sus miembros</param>
        /// <returns>Lista de miembros que pueden trabajar en ese subproyecto</returns>
        public static List <USUARIO> ObtenerMiembrosIndirectos(SUBPROYECTO subproyecto)
        {
            List <USUARIO> miembros = ObtenerMiembrosDirectos(subproyecto);
            SUBPROYECTO    subp_padre;

            if (miembros.Count > 0)
            {
                return(miembros);
            }
            else
            {
                subp_padre = ObtenerSubproyectoPadre(subproyecto);
                if (subp_padre != null)
                {
                    return(ObtenerMiembrosIndirectos(subp_padre));
                }
                else
                {
                    return(ControladorProyecto.ObtenerMiembros(ControladorProyecto.ObtenerPorID(subproyecto.id_proyecto.Value)));
                }
            }
        }