/// <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); }
/// <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); }