/*/public static List<Objetos.Recurso> obtener_recursos(string ruta_archivo) * { * List<Objetos.Recurso> recursos = new List<Objetos.Recurso>(); * using(var reader = new StreamReader(ruta_archivo)) * { * while (!reader.EndOfStream) * { * var line = reader.ReadLine(); * line = line.Replace("\"", ""); * var values = line.Split(';'); * * Objetos.Recurso recurso = new Objetos.Recurso(); * recurso.nombre = values[0]; * recurso.tipo = values[1]; * recurso.seniority_ios = values[2]; * recurso.seniority_android = values[3]; * string costo = values[4].Replace('$', ' ').Trim(); * Int32.TryParse(costo, out recurso.costo); * * if (recurso.nombre == "Daniela") * { * recurso.tiempo_disponlible = 6; * } * else * { * recurso.tiempo_disponlible = 8; * } * * recursos.Add(recurso); * } * } * return recursos; * }*/ /* public static List<Objetos.estimacion> obtener_estimacion(string ruta_archivo) * { * List<Objetos.estimacion> estimaciones = new List<Objetos.estimacion>(); * using (var reader = new StreamReader(ruta_archivo)) * { * while (!reader.EndOfStream) * { * var line = reader.ReadLine(); * line = line.Replace("\"", ""); * var values = line.Split(';'); * * Objetos.estimacion estimacion = new Objetos.estimacion(); * estimacion.tarea = values[0]; * estimacion.descripcion = values[1]; * Int32.TryParse(values[2], out estimacion.horas); * * estimacion.precedencias = values[3].Split(','); * for (int i = 0; i < estimacion.precedencias.Length; i++) * { * estimacion.precedencias[i] = estimacion.precedencias[i].Trim(); * } * * estimaciones.Add(estimacion); * } * } * return estimaciones; * }*/ public static Objetos.Proyecto obtener_proyecto(string ruta_archivo, string id) { Objetos.Proyecto proyecto = new Objetos.Proyecto(); proyecto.tareas = new List <Objetos.Tarea>(); proyecto.id = id; using (var reader = new StreamReader(ruta_archivo)) { while (!reader.EndOfStream) { var line = reader.ReadLine(); line = line.Replace("\"", ""); var values = line.Split(';'); Objetos.Tarea tarea = new Objetos.Tarea(); tarea.id = values[0]; tarea.descripcion = values[1]; int duracion; Int32.TryParse(values[2], out duracion); tarea.duracion = duracion; tarea.hs_rest = duracion; tarea.precedencias = values[3].Split(','); for (int i = 0; i < tarea.precedencias.Length; i++) { tarea.precedencias[i] = tarea.precedencias[i].Trim(); } proyecto.tareas.Add(tarea); } } return(proyecto); }
static void Main(string[] args) { Objetos.Lista_recursos recursos = new Objetos.Lista_recursos(); recursos.lista = recursos.obtener_lista_recursos(@"/home/ivan/Documentos/GIT/Planificacion/Datos/Recursos.csv"); string ios_id = "iOS"; string android_id = "Android"; Objetos.Proyecto ios = obtener_proyecto(@"/home/ivan/Documentos/GIT/Planificacion/Datos/iOS.csv", ios_id); Objetos.Proyecto android = obtener_proyecto(@"/home/ivan/Documentos/GIT/Planificacion/Datos/Android.csv", android_id); //Estimar proyecto ios int dia_proyecto = 0; //Ordenar lista de recursos por seniority senior, ssr, jr recursos.lista = recursos.lista.OrderByDescending(o => o.seniority_ios).ToList(); //Ordenar lista de recursos por seniority senior, ssr, jr recursos.lista = recursos.lista.OrderByDescending(o => o.seniority_android).ToList(); /* * Console.WriteLine(ios_id); * while (true) * { * //Crear dia * dia_proyecto += 1; * Console.WriteLine("Dia {0}", dia_proyecto); * inicializar_tiempo_recursos(recursos); * inicializar_tareas(ios.tareas); * //Ver que tareas se pueden hacer hoy * List<Objetos.Tarea> tareas_hoy = new List<Objetos.Tarea>(); * tareas_hoy = obtener_tareas_hoy(ios.tareas); * if (tareas_hoy.Count == 0) * { * break; * } * //Asignar tareas * //Buscar un recurso que tenga hs disponibles * for (int i = 0; i < tareas_hoy.Count; i++) * { * for (int j = 0; j < recursos.lista.Count; j++) * { * if (recursos.lista[j].tiempo_disponlible > 0) * { * tareas_hoy[i].asignar(recursos.lista[j], ios_id, dia_proyecto); * } * if (tareas_hoy[i].fecha_fin != 0 || tareas_hoy[i].asignados.lista.Count > 1) //Verifica que se haya terminado la tarea para pasar a la siguiente * { * break; * } * } * //Reemplazar las tareas que se procesaron hoy * var indice = ios.tareas.IndexOf(ios.tareas.Where(w => w.id == tareas_hoy[i].id).First()); * if (indice != -1) * { * ios.tareas[indice] = tareas_hoy[i]; * } * } * } * * /* Android */ //Estimar proyecto dia_proyecto = 0; Console.WriteLine(android_id); while (true) { //Crear dia dia_proyecto += 1; Console.WriteLine("Dia {0}", dia_proyecto); inicializar_tiempo_recursos(recursos); inicializar_tareas(android.tareas); //Ver que tareas se pueden hacer hoy List <Objetos.Tarea> tareas_hoy = new List <Objetos.Tarea>(); tareas_hoy = obtener_tareas_hoy(android.tareas); if (tareas_hoy.Count == 0) { break; } //Asignar tareas //Buscar un recurso que tenga hs disponibles for (int i = 0; i < tareas_hoy.Count; i++) { for (int j = 0; j < recursos.lista.Count; j++) { if (recursos.lista[j].tiempo_disponlible > 0) { tareas_hoy[i].asignar(recursos.lista[j], android_id, dia_proyecto); } if (tareas_hoy[i].fecha_fin != 0 || tareas_hoy[i].asignados.lista.Count > 1) //Verifica que se haya terminado la tarea para pasar a la siguiente { break; } } //Reemplazar las tareas que se procesaron hoy var indice = android.tareas.IndexOf(android.tareas.Where(w => w.id == tareas_hoy[i].id).First()); if (indice != -1) { android.tareas[indice] = tareas_hoy[i]; } } } /*-------------------------------------------------------- */ /*AMBOS */ //Estimar proyecto dia_proyecto = 0; //Ordenar lista de recursos por seniority senior, ssr, jr recursos.lista = recursos.lista.OrderByDescending(o => o.seniority_android).ThenBy(o => o.seniority_ios).ToList(); Console.WriteLine("/*-------------AMBOS-------------*/"); while (true) { //Crear dia dia_proyecto += 1; Console.WriteLine("Dia {0}", dia_proyecto); inicializar_tiempo_recursos(recursos); inicializar_tareas(android.tareas); //Ver que tareas se pueden hacer hoy List <Objetos.Tarea> tareas_hoy = new List <Objetos.Tarea>(); tareas_hoy = obtener_tareas_hoy(android.tareas); tareas_hoy.AddRange(obtener_tareas_hoy(ios.tareas)); if (tareas_hoy.Count == 0) { break; } //Asignar tareas //Buscar un recurso que tenga hs disponibles for (int i = 0; i < tareas_hoy.Count; i++) { for (int j = 0; j < recursos.lista.Count; j++) { if (recursos.lista[j].tiempo_disponlible > 0) { tareas_hoy[i].asignar(recursos.lista[j], "ambos", dia_proyecto); } if (tareas_hoy[i].fecha_fin != 0 || tareas_hoy[i].asignados.lista.Count > 1) //Verifica que se haya terminado la tarea para pasar a la siguiente { break; } } //Reemplazar las tareas que se procesaron hoy var indice = android.tareas.IndexOf(android.tareas.Where(w => w.id == tareas_hoy[i].id).Where(w => w.duracion == tareas_hoy[i].duracion).Where(w => w.precedencias == tareas_hoy[i].precedencias).FirstOrDefault()); if (indice != -1) { android.tareas[indice] = tareas_hoy[i]; } //Reemplazar las tareas que se procesaron hoy indice = ios.tareas.IndexOf(ios.tareas.Where(w => w.id == tareas_hoy[i].id).Where(w => w.duracion == tareas_hoy[i].duracion).Where(w => w.precedencias == tareas_hoy[i].precedencias).FirstOrDefault()); if (indice != -1) { ios.tareas[indice] = tareas_hoy[i]; } } } /*-------------------------------------------------------- */ //Grabar CSV /* * string linea = ""; * foreach (var tarea in ios.tareas) * { * linea = tarea.id +";"+ tarea.duracion +";"+ tarea.fecha_ini +";"+ tarea.fecha_fin; * foreach (var persona in tarea.asignados.lista) * { * linea = linea +";"+ persona.nombre; * } * Console.WriteLine(linea); * } */ }