예제 #1
0
        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;
        }
예제 #2
0
 public void setUp()
 {
     system = new GTDSystem();
 }