コード例 #1
0
        private void AddModuleToUE(Module m, Semestre s)
        {
            UE u = s.getUE(m.idUE);

            //On regarde si on a déjà cet UE
            if (u == null)
            {
                u = new UE(m.idUE);
            }

            u.modules.Add(m);
            s.listUE.Add(u);
        }
コード例 #2
0
        private void buildNotes(string notesXml)
        {
            System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); //creation d'une instance xml
            doc.LoadXml(notesXml);                                     //chargement de la variable

            //Structure de l'xml renvoyé par l'API: Liste de sites ayant chacun un attribut "id" et un innerText correspondand au nom du campus
            foreach (System.Xml.XmlNode note in doc.FirstChild.ChildNodes)
            {
                /*
                 * Structure standard d'un élément Note dans le retour de l'API :
                 * <marks>
                 *  <id>
                 *      <studentArelId>17779</studentArelId>
                 *      <programmeId>6488</programmeId>
                 *      <semestreId>262</semestreId>
                 *      <moduleId>18</moduleId>
                 *      <ueId>823</ueId>
                 *      <epreuveId>3890</epreuveId>
                 *  </id>
                 *  <label>Analyse Financiere</label>
                 *  <moduleName>ING2</moduleName>
                 *  <mark>0.0</mark>
                 *  <coefficient>1.0</coefficient>
                 *  <testName>Examen 1ère session</testName>
                 *  <typeEpreuve>Examen</typeEpreuve>
                 * </marks>
                 */

                //TODO: A refaire avec node.GetElementsByTagName
                Note n = new Note();
                n.id        = Int32.Parse(note.ChildNodes[0].ChildNodes[5].InnerText);
                n.labelNote = note.ChildNodes[5].InnerText;
                n.value     = float.Parse(note.ChildNodes[3].InnerText, System.Globalization.CultureInfo.InvariantCulture);
                n.coef      = float.Parse(note.ChildNodes[4].InnerText, System.Globalization.CultureInfo.InvariantCulture);

                string moduleId   = note.ChildNodes[0].ChildNodes[3].InnerText;
                string semestreId = note.ChildNodes[0].ChildNodes[2].InnerText;
                Module m          = null;

                //Est-ce qu'on a déjà croisé ce module ?
                //On utilise moduleId+semestreId en clé pour ne pas qu'un module concatène les notes des 2 semestres à la fois
                if (modules.ContainsKey(moduleId + semestreId))
                {
                    m = (Module)modules[moduleId + semestreId];
                    modules.Remove(moduleId + semestreId);
                }
                else
                {
                    //On crée le module
                    m             = new Module();
                    m.id          = moduleId;
                    m.labelModule = note.ChildNodes[1].InnerText;
                    m.notes       = new List <Note>();
                    m.idSemestre  = semestreId;
                    m.idUE        = note.ChildNodes[0].ChildNodes[4].InnerText;
                }

                //On ajoute la note au module avant de le restocker dans le dictionnaire
                m.notes.Add(n);
                modules.Add(moduleId + semestreId, m);
            }

            //On a récupéré tous les modules, chacun ayant toutes les notes le concernant
            //On sépare maintenant par UE et par Semestre. Y'aurait sûrement moyen de faire ça en LINQ mais je m'y connais pas assez haha mdr
            //Chaque dictionnaire de semestre contient une clé par UE. Cette clé contient la liste des modules de l'UE.
            foreach (String key in modules.Keys)
            {
                Module m = modules[key];

                if (ueSem1.id == null) //Premier arrivé premier servi
                {
                    ueSem1.id = m.idSemestre;
                }

                if (m.idSemestre == ueSem1.id)
                {
                    //On ajoute dans le semestre 1, semestre 2 sinon
                    AddModuleToUE(m, ueSem1);
                }
                else
                {
                    AddModuleToUE(m, ueSem2);
                    ueSem2.id = m.idSemestre;
                }
            }

            //Comparer les IDSemestre des deux dicos pour voir lequel est le vrai semestre 1 (IDSem1 < IDSem2)
            //Sauf si un des 2 est null auquel cas seul l'autre est Semestre 1
            if (ueSem1.id == null || ueSem2.id == null)
            {
                if (ueSem1.id == null)
                {
                    ueSem1 = ueSem2;
                }

                if (ueSem2.id == null)
                {
                    ueSem2 = ueSem1;
                }

                //On vire le pivot du semestre 2
                pivotSem2.Visibility = Visibility.Collapsed;

                //Si le semestre 1 est vide aussi, il n'y a juste pas de notes -> On affiche le splashscreen associé.
                if (ueSem1.id == null)
                {
                    NoNoteSplash.Visibility = Visibility.Visible;
                }
            }
            else
            if (Int32.Parse(ueSem2.id) < Int32.Parse(ueSem1.id)) //Si les semestres étaient inversés, on les remet à l'endroit.
            {
                Semestre tmp = ueSem1;
                ueSem1 = ueSem2;
                ueSem2 = tmp;
            }

            ueSem1.sortUEs();
            //ueSem2.sortUEs();

            if (NoNoteSplash.Visibility != Visibility.Visible)
            {
                semestresPivot.Visibility = Visibility.Visible;
            }

            //Fiou, enfin fini. Le XAML s'occupe de construire la vue des notes via data binding.
            this.Bindings.Update();
            UpdateLayout();
        }