public IGTDSystem makeSystem(IUser owner) { GTDSystem sys = new GTDSystem(owner); IDictionary<int, ISingleTask> taskMap = new Dictionary<int, ISingleTask>(); IDictionary<int, IProject> projectMap = new Dictionary<int, IProject>(); //IDictionary<int, IStaticList> listMap = new Dictionary<int, IStaticList>(); DataClassesDataContext db = dbProvider.Database; int usrid = dbProvider.IdManager.GetId(owner); foreach (Tasks t in db.Tasks.Where(item => item.Owner == usrid)) { ISingleTask st = new DBSingleTask(t, dbProvider); taskMap.Add(t.Id, st); } IDictionary<string, IStaticList> defaultListsMap = new Dictionary<string, IStaticList>(); string[] names = new string[] {"Inbox", "Waiting", "Someday"}; foreach (var name in names) { IEnumerable<Lists> listResults = db.Lists.Where(list => list.Title == name && list.Owner == usrid); if (listResults.Count() == 0) { // si la requete est vide, il n'y a pas de liste avec ce nom, donc aucune tache dedans defaultListsMap.Add(name, makeContext(name, "", owner)); } else { defaultListsMap.Add(name, createDBStaticList(listResults.First(), taskMap)); } } // Mise en place des tâches dans la Inbox sys.Inbox = defaultListsMap["Inbox"]; // Mise en place des tâches dans Waiting sys.Waiting = defaultListsMap["Waiting"]; // Mise en place des tâches dans Someday sys.Someday = defaultListsMap["Someday"]; // Mise en place Contexts foreach (Lists list in db.Lists.Where(x => !names.Contains(x.Title) && x.Owner == usrid)) { IStaticList stl = createDBStaticList(list, taskMap); sys.Contexts.Add(stl); } foreach (Projects project in db.Projects.Where(item => item.Owner == usrid)) { IProject p = new DBProject(project, dbProvider); projectMap.Add(project.Id, p); sys.Projects.Add(p); } foreach (Projects_Tasks pt in db.Projects_Tasks.Where(item => item.Owner == usrid).OrderBy(item => item.Task_order)) projectMap[pt.Project_id].AddTask(taskMap[pt.Task_id]); //selection des orphelins var orphans = db.Tasks.Where(item => item.Lists_Tasks.Count == 0).Select(item => taskMap[item.Id]); //ajout dans la inbox foreach (ISingleTask orphan in orphans) sys.Inbox.AddTask(orphan); return sys; }
public void setUp() { system = new GTDSystem(); }