Пример #1
0
        /// <summary>
        /// Cuidado con esto!!.. Va a verificar que todos los proyectos y usuarios tengan asignados el calendario
        /// Descar, y para los usuarios, crea un calendario propio.
        /// </summary>
        public static void ActualizarCalendariosUsuariosYProyectos()
        {
            List <USUARIO> usuarios = ControladorUsuarios.ObtenerTodosUsuarios();

            foreach (var item in usuarios)
            {
                if (item.id_calendario_laboral == 1 || item.id_calendario_laboral == null)
                {
                    Calendario_Laboral calendario = new Calendario_Laboral()
                    {
                        es_calendario_base  = false,
                        id_calendario_padre = 1,
                        nombre_calendario   = item.FullName
                    };
                    calendario = ControladorCalendario.Insertar(calendario);
                    item.id_calendario_laboral = calendario.id_calendario_laboral;
                    ControladorUsuarios.Actualizar(item);
                }
            }


            List <Proyecto> proyectos = ControladorProyecto.ObtenerProyectos();

            foreach (var item in proyectos)
            {
                if (item.id_calendario_laboral_base == null)
                {
                    item.id_calendario_laboral_base = 1;
                    ControladorProyecto.Update(item);
                }
            }
        }
Пример #2
0
        /// <summary>
        /// Agrega una tarea en la base de datos para el usuario seleccionado.
        /// Se asigna con estado Pendiente.
        /// Si el usuaro ya tiene ese
        /// </summary>
        /// <param name="idActividadProyectoSolicitar"></param>
        /// <param name="idUsuario"></param>
        /// <returns></returns>
        public static Detalle_recurso RequerirTarea(int idActividadProyectoSolicitar, int idUsuario)
        {
            Detalle_recurso tarea = new Detalle_recurso();

            tarea.id_actividad_proyecto = idActividadProyectoSolicitar;
            tarea.forzada              = false;
            tarea.id_usuario           = idUsuario;
            tarea.motivo               = "solicitud";
            tarea.tipo                 = "";
            tarea.porcentaje_avance    = 0;
            tarea.realizada            = false;
            tarea.cantidad_hora        = Convert.ToDecimal(ControladorActividades.ObtenerHorasTotalesActividad(ControladorActividades.ObtenerActividadProyecto(idActividadProyectoSolicitar)));
            tarea.id_estado            = ObtenerEstadoPorNombre("Pendiente").IdEstadoTarea;
            tarea.fecha_inicio         = DateTime.Now;
            tarea.fecha_fin            = ControladorCalendario.CalcularFechaFin(ControladorActividades.ObtenerActividadProyecto(idActividadProyectoSolicitar), ControladorUsuarios.ObtenerUsuario(idUsuario), tarea.fecha_inicio.Value, ControladorActividades.ObtenerHorasTotalesActividad(ControladorActividades.ObtenerActividadProyecto(idActividadProyectoSolicitar)));
            tarea.duracion_cadista     = (decimal)ControladorActividades.ObtenerHorasOrdenCompraParaCadista(ControladorActividades.ObtenerActividadProyecto(idActividadProyectoSolicitar));
            tarea.fecha_inicio_cadista = tarea.fecha_inicio;
            tarea.fecha_fin_cadista    = tarea.fecha_fin;


            if (ControladorTareas.EstaAsignadaAUsuario(idActividadProyectoSolicitar, idUsuario) == null)
            {
                return(Insertar(tarea));
            }
            return(null);
        }
Пример #3
0
        /// <summary>
        /// Completar
        /// </summary>
        /// <param name="actividad"></param>
        /// <returns></returns>
        public static bool AsignarActividadProyecto(Actividad_proyecto actividad, double cantidad_horas_solapamiento)
        {
            List <Tuple <USUARIO, decimal> > miembros_habilitados = ControladorSubproyecto.ObtenerMiemrosHabilitadosParaAsignar(actividad);

            DateTime fecha_inicio;
            DateTime fecha_fin;
            double   tiempo_trabajado, tiempo_total;

            tiempo_total     = ControladorActividades.ObtenerHorasTotalesActividad(actividad);
            tiempo_trabajado = 0;//ControladorActividades.ObtenerHorasConsumidas(actividad);
            //Modificar este metodo para que verifique fecha inicio mayor a la actual.
            fecha_inicio = ControladorActividades.ObtenerFechaInicioMinima(actividad);
            //Devuelve la fecha fin ideal
            fecha_fin = ControladorCalendario.ObtenerFechaFinMinima(actividad, fecha_inicio).Value;

            List <Tuple <Tuple <USUARIO, decimal>, Tuple <DateTime, DateTime> > > listaPorFechaFin;
            List <Tuple <Tuple <USUARIO, decimal>, Tuple <DateTime, DateTime> > > listaPorCalifi;

            List <Tuple <Tuple <USUARIO, decimal>, Tuple <DateTime, DateTime> > > listaOrdenada = new List <Tuple <Tuple <USUARIO, decimal>, Tuple <DateTime, DateTime> > >();

            if (!ControladorActividades.EstaCompletada(actividad))
            {
                foreach (var miem in miembros_habilitados)
                {
                    DateTime fecha             = ObtenerFechaInicioMinimaUsuario(miem.Item1, fecha_inicio, tiempo_total - tiempo_trabajado, actividad, fecha_fin);
                    DateTime?fecha_fin_usuario = ControladorCalendario.CalcularFechaFin(actividad, miem.Item1, fecha, null);

                    listaOrdenada.Add(new Tuple <Tuple <USUARIO, decimal>, Tuple <DateTime, DateTime> >(miem, new Tuple <DateTime, DateTime>(fecha, fecha_fin_usuario.Value)));
                }

                if (listaOrdenada.Count > 0)
                {
                    //Ordena la lista primero por fecha de fin, luego por calificaciones, el que tiene mas primero.
                    listaOrdenada    = listaOrdenada.OrderBy(x => x.Item2.Item2).ThenByDescending(x => x.Item1.Item2).ToList();
                    listaPorFechaFin = listaOrdenada.OrderBy(x => x.Item2.Item2).ToList();
                    listaPorCalifi   = listaOrdenada.OrderByDescending(x => x.Item1.Item2).ToList();

                    if (listaOrdenada.ElementAt(0).Item2.Item2.Subtract(listaPorCalifi.ElementAt(0).Item2.Item2).TotalHours <= cantidad_horas_solapamiento)
                    {
                        AsignarActividad(actividad, listaPorCalifi.ElementAt(0).Item1.Item1, listaPorCalifi.ElementAt(0).Item2.Item1, listaPorCalifi.ElementAt(0).Item2.Item2);
                    }
                    else
                    {
                        AsignarActividad(actividad, listaOrdenada.ElementAt(0).Item1.Item1, listaOrdenada.ElementAt(0).Item2.Item1, listaOrdenada.ElementAt(0).Item2.Item2);
                    }


                    return(true);
                }
                return(false);
            }
            return(false);
        }
        /// <summary>
        /// Inserta un nuevo usuario en la base de datos, y crea el calendario para el mismo,
        /// con calendario base indicado. Éste calendario se actualiza con el nuevo id.
        /// </summary>
        /// <param name="usuario"></param>
        /// <returns></returns>
        public static USUARIO InsertarYcreaCalendario(USUARIO usuario)
        {
            Calendario_Laboral calendario = new Calendario_Laboral()
            {
                es_calendario_base  = false,
                id_calendario_padre = usuario.id_calendario_laboral,
                nombre_calendario   = usuario.FullName
            };

            calendario = ControladorCalendario.Insertar(calendario);
            usuario.id_calendario_laboral = calendario.id_calendario_laboral;
            return(UsuariosBD.Insertar(usuario));
        }
Пример #5
0
        public static DateTime ObtenerFechaInicioMinimaUsuario(USUARIO usuario, DateTime fecha, double tiempo, Actividad_proyecto actividad, DateTime fecha_fin)
        {
            //Obtener una lista de los miembros, y ver todas las asignaciones que tiene,
            //buscar los detalles con fechas de inicio mayor a la fecha de parametro
            //y hacer una simulación para ver donde ese usuario tendría a esa tarea
            //Para cada miembro hacer lo mismo, y dársela al que inicia lo mas temprano posible
            List <Detalle_recurso> listaTareasUsuario = ObtenerTareasPorUsuario(usuario.id_usuario).Where(x => x.fecha_fin >= fecha).OrderBy(x => x.fecha_inicio).ToList();

            List <Detalle_recurso> listaFinal = new List <Detalle_recurso>();

            //listaFinal.AddRange(tareasArrancaAntesYTerminaDespues);
            listaFinal.AddRange(listaTareasUsuario);
            //listaFinal.AddRange(tareasArrancaAntesyTerminaEnMedio);
            listaFinal = listaFinal.OrderBy(x => x.fecha_fin.Value).ToList();

            //Para calcular la fecha inicio
            List <Detalle_recurso> listaFechaInicio = listaFinal.OrderBy(x => x.fecha_inicio.Value).ToList();

            double horas_disponibles = 0;

            if (listaFinal.Count > 0)
            {
                //Puede ser que la primer fecha asignada al usuario sea mas tarde,
                //permitiendo que entre la fecha de parametro y la primera fecha asignada pueda asignarse una
                // tarea
                if (listaFechaInicio.ElementAt(0).fecha_inicio > fecha)
                {
                    horas_disponibles = ControladorCalendario.CalcularTiempoEntreFechas(ControladorCalendario.ObtenerCalendario(usuario.id_calendario_laboral.Value), listaFechaInicio.ElementAt(0).fecha_inicio.Value, fecha) / 60;
                    if (horas_disponibles >= tiempo)
                    {
                        return(fecha);
                    }
                }

                listaFinal = listaFinal.OrderBy(x => x.fecha_fin.Value).ToList();
                for (int i = 1; i < listaFinal.Count; i++)
                {
                    horas_disponibles = ControladorCalendario.CalcularTiempoEntreFechas(ControladorCalendario.ObtenerCalendario(usuario.id_calendario_laboral.Value), listaFinal.ElementAt(i - 1).fecha_fin.Value, listaFinal.ElementAt(i).fecha_inicio.Value) / 60;
                    if (horas_disponibles >= tiempo)
                    {
                        return(listaFinal.ElementAt(i - 1).fecha_fin.Value);
                    }
                }

                return(listaFinal.ElementAt(listaFinal.Count - 1).fecha_fin.Value);
            }


            return(fecha);
        }
Пример #6
0
        public static DateTime ObtenerFechaInicioMinima(Actividad_proyecto actividad)
        {
            //Si la actividad es Concepto, le fecha minima de inicio es la fecha del proyecto
            //Si la actividad es Preparacion, la fecha minima de inicio es la fecha del proyecto
            //mas el tiempo de concepto, pero si el concepto ya esta asignado, que la fecha minima de inicio sea la fecha
            //fin de concepto.. Lo mismo para preparacion.
            String      tipo_actividad = ControladorActividades.ObtenerTipoActividad(actividad).descripcion.ToLower();
            SUBPROYECTO sub            = ControladorSubproyecto.BuscarPorId(actividad.id_subproyecto.Value);

            List <Detalle_recurso> tareas = new List <Detalle_recurso>();
            DateTime fecha;

            Actividad_proyecto act_anterior = ControladorActividades.ObtenerActividadAnterior(actividad);

            if (act_anterior != null)
            {
                double tiempo_actividad;

                //Suma los tiempos del
                var act_anterior_aux = act_anterior;
                tiempo_actividad = 0;
                do
                {
                    tiempo_actividad = ObtenerHorasTotalesActividad(act_anterior_aux);
                    act_anterior_aux = ControladorActividades.ObtenerActividadAnterior(act_anterior_aux);
                } while (act_anterior_aux != null);

                tareas = obtenerTareasDeActividad(act_anterior);

                if (tareas.Count == 0)
                {
                    //No esta asignada, se asigna a la fecha de proyecto + tiempo_actividad
                    fecha = ControladorCalendario.CalcularFechaFinDesdeProyecto(actividad, tiempo_actividad).Value;
                }
                else
                {
                    //Está asignada, se asigna a la fecha fin de la asignacion de actividad anterior.
                    tareas = tareas.OrderByDescending(x => x.fecha_fin).ToList();
                    fecha  = tareas.First().fecha_fin.Value;
                }
            }
            else
            {
                fecha = ControladorProyecto.ObtenerPorID(actividad.id_proyecto.Value).fecha_inicio.Value;
            }

            //if (tipo_actividad.Contains("prep") || (tipo_actividad.Contains("deta")))
            //{
            //    List<AvanceSubproyecto> avance;
            //    double tiempo_actividad;

            //    if (tipo_actividad.Contains("deta"))
            //    {
            //        tiempo_actividad = ObtenerHorasTotalesActividad(ObtenerActividadPorTipoActividad(sub,acti_concepto)) + ObtenerHorasTotalesActividad(ObtenerActividadPorTipoActividad(sub, acti_prepa));
            //        tareas = obtenerTareasDeActividad(ObtenerActividadPorTipoActividad(sub, acti_prepa));
            //    }
            //    else
            //    {
            //        tiempo_actividad = ObtenerHorasTotalesActividad(ObtenerActividadPorTipoActividad(sub, acti_concepto));
            //        tareas = obtenerTareasDeActividad(ObtenerActividadPorTipoActividad(sub, acti_concepto));
            //    }

            //    if (tareas.Count == 0)
            //    {
            //        //No esta asignada, se asigna a la fecha de proyecto + tiempo_actividad
            //        fecha = ControladorCalendario.CalcularFechaFinDesdeProyecto(actividad, tiempo_actividad).Value;
            //    }else
            //    {
            //        //Está asignada, se asigna a la fecha fin de la asignacion de actividad anterior.
            //        tareas = tareas.OrderByDescending(x => x.fecha_fin).ToList();
            //        fecha = tareas.First().fecha_fin.Value;
            //    }

            //}
            //else //Es concepto, o cualquier otro tipo de actividad, inicia cuando lo hace el proyecto.
            //{
            //    fecha = ControladorProyecto.ObtenerPorID(actividad.id_proyecto.Value).fecha_inicio.Value;
            //}

            return(fecha < DateTime.Now ? DateTime.Now : fecha);
        }