Example #1
0
        /// <summary>
        /// Obstará stáhnutí a zpracování hiearchie pracovišť celé univerzity ze služby GetHiearchiePracovist
        /// </summary>
        /// <param name="data">Objekt databáze kam se data zařadí</param>
        /// <param name="serializer">NewtonSoft JSON serializer pro deserializaci staženého souboru</param>
        private static void Handle_Hiearchie(STAG_Classes.STAG_Database data, JsonSerializer serializer)
        {
            // Stahnuti souboru
            var path = FolderPath_rootFolder + @"\hiearchie.json";

            Download_HierarchiePracovist(path);

            // Deserializace
            List <STAG_Classes.Pracoviste> hiearchie = null;

            using (StreamReader file = File.OpenText(path))
                hiearchie = ((List <STAG_Classes.Hierarchie>)serializer.Deserialize(file, typeof(List <STAG_Classes.Hierarchie>)))[0].Pracoviste.ToList();

            // Poresim hiearchii do slovniku

            foreach (var pracoviste in from lvl2 in hiearchie where lvl2.Level == 2 select lvl2)
            {
                // Podrzim si jmeno lvl2 pracoviste
                var nadrazene = pracoviste.Zkratka;

                // Vytvorim slovnik pr jeho podradne pracoviste
                var tmp = new Dictionary <string, STAG_Classes.Pracoviste>();

                // Pridam vsechny pracoviste, ktery ho maji jako nadradne (hledam lvl3)
                foreach (var podradne in from lvl3 in hiearchie where lvl3.NadrazenePracoviste == nadrazene select lvl3)
                {
                    tmp.Add(podradne.Zkratka, podradne);
                }

                // Pridam cele pracoviste s jeho podrazenymi pracovisti
                data.HiearchiePracovist.Add(pracoviste.Zkratka, tmp);
            }
        }
Example #2
0
        /// <summary>
        /// Vytvorid objekt se STAG Daty
        /// </summary>
        /// <param name="fakulta">Fakulta pro kterou delame analyzu</param>
        /// <param name="staguser">Stag přihlášení uživatele pro přístup k webovým službám</param>
        /// <param name="stagpass">Stag heslo uzivatele</param>
        /// <returns>Objek t s nactenymi daty ze STAG</returns>
        public static STAG_Classes.STAG_Database GetData(string fakulta, string staguser, string stagpass)
        {
            STAG_Classes.STAG_Database data       = new STAG_Classes.STAG_Database(fakulta);
            JsonSerializer             serializer = new JsonSerializer();

            // Priprava REST klienta
            auth   = new Auth(staguser, stagpass);
            puller = new RestPuller(auth);

            // Priprava adresaru (kdyz existuji, nic se nedeje)
            PrepareFolders();

            // Stahne a poresi hiearchii pracovist
            Handle_Hiearchie(data, serializer);


            // Stahne seznam studentu pro @fakulta
            Handle_StudentByFakulta(fakulta, data, serializer);

            // Stahne predmety fakulty + deserializuje (pokud existuje, nestahuje)
            Handle_PredmetyByFakulta(fakulta, data, serializer);

            // Stahne rozvrh kazdeho studenta fakulty + deserializuje (pokud existuje, nestahuje) + poresi reference + stahne chybejici predmety
            Handle_StudentsRoak(data, serializer);

            // Stahne podrobnosti ke vsem ucitelum + deserializuje (pokud existuje, nestahuje) + poresi reference
            Handle_UcitelByRoak(data, serializer);


            // !!!  Někam sem dej breakpoint a prohlídni si co je v data
            return(data);
        }
Example #3
0
        /// <summary>
        /// Bstará zprávně zařazení a přidání referencí mezi rozvrhovou akcí a souvisejícími objekty
        /// </summary>
        /// <param name="data">Objekt databáze kam se data zařadí</param>
        /// <param name="student">Objekt studenta jehož se rozvrhová akce týká</param>
        /// <param name="roak">Zpracovávaná akce studenta</param>
        /// <param name="serializer">NewtonSoft JSON serializer pro deserializaci staženého souboru</param>
        private static void Handle_Roak(STAG_Classes.STAG_Database data, STAG_Classes.Student student, STAG_Classes.RozvrhovaAkce roak, JsonSerializer serializer)
        {
            // Zajistím aby mi nechyběl předmět této rozvrhové akce
            // Zkontroluji, jestli už znám katedru toho předmětu
            if (!data.PredmetyPodleKateder.ContainsKey(roak.Katedra))
            {
                // Zatim neznam ~ neni z me fakultu... musim stahnout (nebyl obsažen v predmetyByFakultaFullInfo)
                Handle_PredmetInfo(roak.Katedra, roak.Predmet, data, serializer);
            }
            // Zkontroluji, jestli už ten předmět znám
            if (!data.PredmetyPodleKateder[roak.Katedra].ContainsKey(roak.Predmet))
            {
                // Nezman predmet... musim stahnout
                Handle_PredmetInfo(roak.Katedra, roak.Predmet, data, serializer);
            }

            // vvvvv   REFERENCE   vvvvvv

            // Ulozim si akci a ridam reference student => roak
            if (!data.Akce.ContainsKey(roak.RoakIdno))
            {
                data.Akce.Add(roak.RoakIdno, roak);

                // Pridam reference roak <=> predmet
                data.PredmetyPodleKateder[roak.Katedra][roak.Predmet].VsechnyAkce.Add(roak);
                roak.PredmetRef = data.PredmetyPodleKateder[roak.Katedra][roak.Predmet];
            }

            // Přidám akci do rozvrhu studenta
            student.Rozvrh.Add(data.Akce[roak.RoakIdno]);
            // Pro zajímavost zjišťuji kolik studentů skutečně ukazuje na tuto akci (porovnání obsazenosti vs. referencí)
            data.Akce[roak.RoakIdno].referenceCount++;
        }
Example #4
0
        // Metody na zpracovani stahovanych souboru
        #region Handle Methods
        /// <summary>
        /// Obstará stáhnutí a následné zpracování souboru predmetyByFakultaFullInfo.json
        /// </summary>
        /// <param name="fakulta">Aktuálně analyzovaná fakulta</param>
        /// <param name="data">Objekt databáze kam se data zařadí</param>
        /// <param name="serializer">NewtonSoft JSON serializer pro deserializaci staženého souboru</param>
        /// <remarks>Soubor se pojmenuje např. jako predmetyFakultaPRF.json</remarks>
        private static void Handle_PredmetyByFakulta(string fakulta, STAG_Classes.STAG_Database data, JsonSerializer serializer)
        {
            // Stahnuti json souboru
            string pathpredmety = FolderPath_rootFolder + @"\" + "predmetyFakulta" + fakulta + ".json";

            Download_PredmetyByFakultaFullInfo(fakulta, pathpredmety);

            // Deserializace
            STAG_Classes.PredmetResponse tmppr = null;
            using (StreamReader file = File.OpenText(pathpredmety))
                tmppr = ((List <STAG_Classes.PredmetResponse>)serializer.Deserialize(file, typeof(List <STAG_Classes.PredmetResponse>)))[0];

            // Kazdy predmet si ulozim a zaradim
            foreach (var pr in tmppr.PredmetInfo)
            {
                // Existuje uz katedra s timhle kodem? Kdyz ne, pridam
                if (!data.PredmetyPodleKateder.ContainsKey(pr.Katedra))
                {
                    data.PredmetyPodleKateder.Add(pr.Katedra, new Dictionary <string, STAG_Classes.Predmet>());
                }

                // Pridam predmet
                if (!data.PredmetyPodleKateder[pr.Katedra].ContainsKey(pr.Zkratka))
                {
                    data.PredmetyPodleKateder[pr.Katedra].Add(pr.Zkratka, pr);
                }
            }
        }
Example #5
0
        /// <summary>
        /// Obstará stáhnutí a následné zpracování rozvrhů pro každého studenta fakulty
        /// </summary>
        /// <param name="data">Objekt databáze kam se data zařadí</param>
        /// <param name="serializer">NewtonSoft JSON serializer pro deserializaci staženého souboru</param>
        /// <remarks>Soubor se pojmenuje jako OsobniCisloStudenta.json</remarks>
        private static void Handle_StudentsRoak(STAG_Classes.STAG_Database data, JsonSerializer serializer)
        {
            // Pro každého studenta fakulty...
            foreach (var student in data.Students)
            {
                // Pokud ještě není stažený rozvrh studenta, stáhnu ho
                string tmppath = FolderPath_rozvrhyByStudent + @"\" + student.OsCislo + ".json";
                Download_RozvrhByStudent(student.OsCislo, tmppath);

                // Sem si ulozim rozvrhove akce studenta
                List <STAG_Classes.RozvrhovaAkce> tmp = null;
                // Deserializace (mohou nastat komplikace pokud se tam vyskytnou nějakcí divní studenti )
                try
                {
                    using (StreamReader file = File.OpenText(tmppath))
                        tmp = ((List <STAG_Classes.RozvrhByStudentResponse>)serializer.Deserialize(file, typeof(List <STAG_Classes.RozvrhByStudentResponse>)))[0].RozvrhovaAkce.ToList();
                }
                catch (Exception)
                {
                    // Pokud narazim na nejaky divny soubor, preskocim
                    continue;
                }
                // Každou rozvrhovou akci zpracuji (přidám reference ad.)
                foreach (var roak in tmp)
                {
                    Handle_Roak(data, student, roak, serializer);
                }
            }
        }
Example #6
0
        /// <summary>
        /// Obstará stáhnutí a následné zpracování souboru UcitelInfo(by ucit id).json
        /// </summary>
        /// <param name="data">Objekt databáze kam se data zařadí</param>
        /// <param name="serializer">NewtonSoft JSON serializer pro deserializaci staženého souboru</param>
        /// <remarks>Soubor se pojmenuje jako UcitelID.json</remarks>
        private static void Handle_UcitelByRoak(STAG_Classes.STAG_Database data, JsonSerializer serializer)
        {
            // Pro každou akci ze studentských rozvrhů...
            foreach (var akce in data.Akce)
            {
                // Pro každého učitele z akce...
                foreach (var ucitelID in akce.Value.VsichniUciteleUcitIdno)
                {
                    // Pokud toho učitele ještě neznám -> stáhnu a zařadím
                    if (!data.Ucitele.ContainsKey(ucitelID))
                    {
                        // Stazeni ucitele
                        string tmppath = FolderPath_uciteleByID + @"\" + ucitelID.ToString() + ".json";
                        Download_UcitelInfo(ucitelID.ToString(), tmppath);
                        // Deserializace
                        STAG_Classes.Ucitel tmp = null;
                        using (StreamReader file = File.OpenText(tmppath))
                            tmp = ((List <STAG_Classes.Ucitel>)serializer.Deserialize(file, typeof(List <STAG_Classes.Ucitel>)))[0];
                        // Pridani do slovniku všech učitelů
                        data.Ucitele.Add(ucitelID, tmp);
                    }

                    // Pridani reference    akce <=> učitel
                    akce.Value.VsichniUcitele.Add(data.Ucitele[ucitelID]);
                    data.Ucitele[ucitelID].referenceCount++;
                }
            }
        }
Example #7
0
        /// <summary>
        /// Obstará stáhnutí a následné zpracování souboru studentiByFakulta.json
        /// </summary>
        /// <param name="fakulta">Aktuálně analyzovaná fakulta</param>
        /// <param name="data">Objekt databáze kam se data zařadí</param>
        /// <param name="serializer">NewtonSoft JSON serializer pro deserializaci staženého souboru</param>
        /// <remarks> Obstará stažený seznamu všech a vytvoří z nich seznam v databázi. Stahuje všechny - studující, nestudující i přerušenné studenty.
        /// Soubor se bude jmenovat např. StudentyByFakltaPRF.json</remarks>
        private static void Handle_StudentByFakulta(string fakulta, STAG_Classes.STAG_Database data, JsonSerializer serializer)
        {
            string studentspath = FolderPath_rootFolder + @"\StudentiByFakulta" + fakulta + ".json";

            Download_StudentsByFakulta(fakulta, studentspath);
            using (StreamReader file = File.OpenText(studentspath)) //Deserializace
                data.Students = ((List <STAG_Classes.StudentiResponse>)serializer.Deserialize(file, typeof(List <STAG_Classes.StudentiResponse>)))[0].Student.ToList();
        }
        /// <summary>
        /// Provede analyzu zateze na vyuku.
        /// </summary>
        /// <param name="data"></param>
        /// <param name="method"></param>
        public static void Analyzuj(this STAG_Classes.STAG_Database data, Method method)
        {
            // volba metody
            switch (method)
            {
            case Method.Hloupa_metoda:
                Fandova_hloupa_metoda(data);
                break;

            case Method.Normalni_metoda:
                Normalni_metoda(data);
                break;
            }
        }
Example #9
0
        /// <summary>
        /// Obstará stažení a zařazení předmětu ze souboru PredmetInfo.json
        /// </summary>
        /// <param name="katedra">Zkratka pracoviště předmětu (např. KI)</param>
        /// <param name="zkratka">Zkratka (kód) předmětu (např AVD)</param>
        /// <param name="data">Objekt databáze kam se data zařadí</param>
        /// <param name="serializer">NewtonSoft JSON serializer pro deserializaci staženého souboru</param>
        /// <remarks>Soubor se pojmenuje jako KatedraKod.json</remarks>
        private static void Handle_PredmetInfo(string katedra, string zkratka, STAG_Classes.STAG_Database data, JsonSerializer serializer)
        {
            // Stahnu predmet kdy jeste neni
            var path = FolderPath_PredmetCizi + @"\" + string.Format("{0}{1}.json", katedra, zkratka);

            Download_PredmetyByZkratka(katedra, zkratka, path);

            // Deserializace
            STAG_Classes.Predmet tmppr = null;
            using (StreamReader file = File.OpenText(path))
                tmppr = ((List <STAG_Classes.Predmet>)serializer.Deserialize(file, typeof(List <STAG_Classes.Predmet>)))[0];

            // Predmet si ulozim
            // Existuje uz katedra s timhle kodem? Kdyz ne, pridam
            if (!data.PredmetyPodleKateder.ContainsKey(tmppr.Katedra))
            {
                data.PredmetyPodleKateder.Add(tmppr.Katedra, new Dictionary <string, STAG_Classes.Predmet>());
            }
            // Pridam predmet
            if (!data.PredmetyPodleKateder[tmppr.Katedra].ContainsKey(tmppr.Zkratka))
            {
                data.PredmetyPodleKateder[tmppr.Katedra].Add(tmppr.Zkratka, tmppr);
            }
        }
        /// <summary>
        /// Nacitani dotazniku s ATYP predmety
        /// </summary>
        /// <param name="data"></param>
        /// <param name="path"></param>
        public static void NacistDotazniAtypPredmety(this STAG_Classes.STAG_Database data, string path)
        {
            List <Tuple <string, string> > chybnePredmety = new List <Tuple <string, string> >();

            Debug.WriteLine("otevírám soubor " + path);
            FileInfo file = new FileInfo(path);

            using (ExcelPackage package = new ExcelPackage(file))
            {
                STAG_Classes.Predmet predmet;
                ExcelWorksheets      worksheets = package.Workbook.Worksheets;
                int    row = 2; // Soubor zacneme cist od druheho radku. Na prvnim radku jsou popisky sloupců
                object kodPredmetu;
                foreach (var worksheet in worksheets)
                {
                    while ((kodPredmetu = worksheet.Cells[row, 1].Value) != null)
                    {
                        //nacteni kodu predmetu
                        var kp = kodPredmetu.ToString().Split('/');
                        // typ akce pr/cv/se/null  ..... null je jenom v případě expertů z KBI
                        var typ = worksheet.Cells[row, 3].Value as string;

                        try
                        {
                            // pokus o nalezeni predmetu
                            predmet = data.PredmetyPodleKateder[kp[0]][kp[1]];
                        }
                        catch
                        {
                            throw new Exception(String.Format("Predmet {0}/{1} neexistuje", kp[0], kp[1]));
                        }

                        switch (typ)
                        {
                        case "Př":
                            predmet.HodinZaSemestrPr = Convert.ToInt32(worksheet.Cells[row, 5].Value);
                            if (worksheet.Cells[row, 6].Value != null)
                            {
                                predmet.VelikostSkupinyPr = Convert.ToInt32(worksheet.Cells[row, 6].Value);
                            }
                            predmet.IsAtypical = true;
                            break;

                        case "Cv":
                            predmet.HodinZaSemestrCv = Convert.ToInt32(worksheet.Cells[row, 5].Value);
                            if (worksheet.Cells[row, 6].Value != null)
                            {
                                predmet.VelikostSkupinyCv = Convert.ToInt32(worksheet.Cells[row, 6].Value);
                            }
                            predmet.IsAtypical = true;
                            break;

                        case "Se":
                            predmet.HodinZaSemestrSe = Convert.ToInt32(worksheet.Cells[row, 5].Value);
                            if (worksheet.Cells[row, 6].Value != null)
                            {
                                predmet.VelikostSkupinySe = Convert.ToInt32(worksheet.Cells[row, 6].Value);
                            }
                            predmet.IsAtypical = true;
                            break;

                        default:
                            /*
                             *
                             * // následující řádky kódu tu jsou hlavně proto, že KBI neumí vyplnit dotazník!!!
                             *
                             *
                             */
                            var  neco       = (from akce in predmet.VsechnyAkce select akce.TypAkceZkr).ToList(); // vytvoreni seznamu vsech typu rozvrhovych akci predmetu
                            bool stejneAkce = true;

                            if (neco.Count > 1)
                            {       // kontrola jestli jsou vsechny akce stejneho typu
                                for (int i = 1; i < neco.Count; i++)
                                {
                                    if (neco[i - 1] != neco[i] /*&& neco[i] != "" && neco[i-1] != ""*/)
                                    {
                                        stejneAkce = false;
                                        break;
                                    }
                                }
                            }
                            // pokud jsou vsechny akce stejneho typu provede se ulozeni dat z dotazniku ....... :( nemám rád KBI
                            if (stejneAkce)
                            {
                                Debug.Write(string.Format("[Chyba ve vstupnim souboru] {0}/{1} =>  pocet akci -> {2}", kp[0], kp[1], predmet.VsechnyAkce.Count()));
                                Debug.WriteLine("  Povedlo se opravit");
                                switch (neco[0])
                                {
                                case "Př":
                                    predmet.HodinZaSemestrPr = Convert.ToInt32(worksheet.Cells[row, 5].Value);
                                    if (worksheet.Cells[row, 6].Value != null)
                                    {
                                        predmet.VelikostSkupinyPr = Convert.ToInt32(worksheet.Cells[row, 6].Value);
                                    }
                                    predmet.IsAtypical = true;
                                    break;

                                case "Cv":
                                    predmet.HodinZaSemestrCv = Convert.ToInt32(worksheet.Cells[row, 5].Value);
                                    if (worksheet.Cells[row, 6].Value != null)
                                    {
                                        predmet.VelikostSkupinyCv = Convert.ToInt32(worksheet.Cells[row, 6].Value);
                                    }
                                    predmet.IsAtypical = true;
                                    break;

                                case "Se":
                                    predmet.HodinZaSemestrSe = Convert.ToInt32(worksheet.Cells[row, 5].Value);
                                    if (worksheet.Cells[row, 6].Value != null)
                                    {
                                        predmet.VelikostSkupinySe = Convert.ToInt32(worksheet.Cells[row, 6].Value);
                                    }
                                    predmet.IsAtypical = true;
                                    break;

                                default: throw new Exception("WTF!");
                                }
                            }
                            else
                            {
                                // pokud nejsou tak ..............
                                Debug.Write(string.Format("[Chyba ve vstupnim souboru] {0}/{1} =>  pocet akci -> {2}", kp[0], kp[1], predmet.VsechnyAkce.Count()));
                                Debug.WriteLine(" Nepovedlo se opravit");
                                chybnePredmety.Add(new Tuple <string, string>(kp[0], kp[1]));
                            }
                            break;
                        }
                        row++;
                    }
                }
            }
            if (chybnePredmety.Count != 0)
            {
                throw new STAG_Exception_InvalidTypeOfCourses(chybnePredmety);
            }
        }
        /// <summary>
        /// Tato metoda souluží k vygenerování dotazníku s podílem katedry na vyučovaném predmetu
        /// </summary>
        /// <param name="data"></param>
        /// <param name="path">nazev souboru ktery vytvorime</param>
        public static void GenerovatDotaznikKatedramXLS(this STAG_Classes.STAG_Database data, string path)
        {
            Debug.WriteLine("Generovani dotazniku ......");
            Debug.WriteLine("Probiha hledani predmetu");
            List <PredmetVDotazniku>   spolecnePredmety = new List <PredmetVDotazniku>();
            List <STAG_Classes.Ucitel> neco             = new List <STAG_Classes.Ucitel>();

            // TODO

            // projdeme vsechny katedry
            foreach (var katedra in data.PredmetyPodleKateder)
            {
                // u kazde katedry projdeme vsechny predmety
                foreach (var predmet in katedra.Value)
                {
                    PredmetVDotazniku pr = null;
                    PredmetVDotazniku cv = null;
                    PredmetVDotazniku se = null;
                    // u kazdeho predmetu projdeme vsechny rozvrhove akce
                    // vyucujici zjistujeme z akci a ne z predmetu (zapocitavame pouze ucitele kteri predmet opravdu vyucuji)
                    foreach (var akce in predmet.Value.VsechnyAkce)
                    {
                        //seznam vsech ucitelu dane akce ktery vyhovuji podminkam ( nejsou zamestnanci katedry ktery predmet patri)
                        neco = (from ucitel in akce.VsichniUcitele where !(ucitel.Katedra == predmet.Value.Katedra || (ucitel.PracovisteDalsi != null && ucitel.PracovisteDalsi.ToString().Split(',').Contains(predmet.Value.Katedra))) select ucitel).ToList();

                        if (neco.Count != 0)
                        {
                            //kontrolujeme duplicity
                            switch (akce.TypAkceZkr)
                            {
                            case "Př":
                                ZkontrolujAkci(neco, predmet, ref pr, akce);
                                break;

                            case "Cv":
                                ZkontrolujAkci(neco, predmet, ref cv, akce);
                                break;

                            case "Se":
                                ZkontrolujAkci(neco, predmet, ref se, akce);
                                break;

                            default: throw new Exception("Nenalezen typ akce");
                            }
                            Debug.Write(string.Format("{0}/{1} => {2} \n", predmet.Value.Katedra, predmet.Value.Zkratka, akce.TypAkceZkr));
                        }
                    }
                    //pridani problemovych predmetu do seznamu
                    if (pr != null)
                    {
                        spolecnePredmety.Add(pr);
                    }
                    if (cv != null)
                    {
                        spolecnePredmety.Add(cv);
                    }
                    if (se != null)
                    {
                        spolecnePredmety.Add(se);
                    }
                }
            }
            Debug.WriteLine("Probiha vytvareni souboru");
            // generování excel souboru
            FileInfo file = new FileInfo(path);

            if (file.Exists)
            {
                file.Delete();
                file = new FileInfo(path);
            }
            using (ExcelPackage package = new ExcelPackage(file))
            {
                ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Predmety");

                worksheet.Cells[1, 1].Value         = "podíl pracoviště učitele \n(v procentech)";
                worksheet.Cells[1, 2].Value         = "pracoviště učitelů";
                worksheet.Cells[1, 3].Value         = "jména učitelů pracoviště";
                worksheet.Cells[1, 4].Value         = "kód";
                worksheet.Cells[1, 5].Value         = "název předmětu";
                worksheet.Cells[1, 6].Value         = "typ";
                worksheet.Cells[1, 7].Value         = "Semestr";
                worksheet.Cells["A1:G1"].AutoFilter = true;

                // seznam vsech kateder na fakulte
                var katedry = data.HiearchiePracovist[data.Fakulta];

                // kontrola validace zadávaných dat
                var validace = worksheet.DataValidations.AddIntegerValidation("A:A" /*string.Format("A2:A{0}", spolecnePredmety.Count + 2)*/);
                validace.ErrorStyle       = ExcelDataValidationWarningStyle.stop;
                validace.PromptTitle      = "Sem napiš % podíl na výuce";
                validace.Prompt           = "Hodnota musí být od 0 do 100";
                validace.ShowInputMessage = true;
                validace.ErrorTitle       = "Vložil/a si neplatnou hodnotu";
                validace.Error            = "Hodnota musí být od 0 do 100.\nPokud omylem píšeš do špatné buňky tak vyplň nějaký platný údaj pak klikni na buňku a zmáčkni klávesu delete  ";
                validace.ShowErrorMessage = true;
                validace.Operator         = ExcelDataValidationOperator.between;
                validace.Formula.Value    = 0;
                validace.Formula2.Value   = 100;


                StringBuilder sb;
                int           j = 2;
                for (int i = 2; i < spolecnePredmety.Count + 2; i++)
                {
                    foreach (var ucitele in spolecnePredmety[i - 2].ucitele)
                    {
                        sb = new StringBuilder();
                        // vypsani 0 tam kde katedra ucitele nepatri mezi katedry PRF nebo je to UMC
                        if (!katedry.ContainsKey(ucitele.Key) || (ucitele.Key == "UMC" && data.Fakulta == "PRF"))
                        {
                            worksheet.Cells[j, 1].Value = 0;
                        }
                        //vypsani katedry
                        worksheet.Cells[j, 2].Value = ucitele.Key;
                        foreach (var ucitel in ucitele.Value)
                        {
                            sb.Append(string.Format("{0} {1}, ", ucitel.Prijmeni, ucitel.Jmeno));
                        }
                        worksheet.Cells[j, 3].Value = sb.ToString();
                        worksheet.Cells[j, 4].Value = string.Format("{0}/{1}", spolecnePredmety[i - 2].predmet.Katedra, spolecnePredmety[i - 2].predmet.Zkratka);
                        worksheet.Cells[j, 5].Value = spolecnePredmety[i - 2].predmet.Nazev;
                        worksheet.Cells[j, 6].Value = spolecnePredmety[i - 2].typAkce;
                        worksheet.Cells[j, 7].Value = spolecnePredmety[i - 2].predmet.VyukaZS && spolecnePredmety[i - 2].predmet.VyukaLS ? "ZS/LS" : spolecnePredmety[i - 2].predmet.VyukaZS ? "ZS" : "LS";
                        j++;
                    }
                }
                worksheet.Cells.AutoFitColumns(5);
                package.Save();
            }
            Debug.WriteLine("Dotaznik " + path + " vytvoren!");
        }
        // Dodelat metody pro generovani dotazniku kvuli ATYP předmětům
        #region vytvareni dotazniku ATYP
        public static void GenerovatDotaznikAtypXLS(this STAG_Classes.STAG_Database data, string path)
        {
            List <STAG_Classes.Predmet> podezrelePredmety = new List <Predmet>();

            foreach (var katedra in data.PredmetyPodleKateder)
            {
                foreach (var predmet in katedra.Value)
                {
                    if (predmet.Value.VsechnyAkce.Count > 0)
                    {
                        if (predmet.Value.JednotkaCviceni != "HOD/TYD" && predmet.Value.JednotkaCviceni != "HOD/SEM" && predmet.Value.JednotkaCviceni != "DNU/SEM")
                        {
                            if (!podezrelePredmety.Contains(predmet.Value))
                            {
                                podezrelePredmety.Add(predmet.Value);
                            }
                        }
                        if (predmet.Value.JednotkaPrednasky != "HOD/TYD" && predmet.Value.JednotkaPrednasky != "HOD/SEM" && predmet.Value.JednotkaPrednasky != "DNU/SEM")
                        {
                            if (!podezrelePredmety.Contains(predmet.Value))
                            {
                                podezrelePredmety.Add(predmet.Value);
                            }
                        }
                        if (predmet.Value.JednotkaSeminare != "HOD/TYD" && predmet.Value.JednotkaSeminare != "HOD/SEM" && predmet.Value.JednotkaSeminare != "DNU/SEM")
                        {
                            if (!podezrelePredmety.Contains(predmet.Value))
                            {
                                podezrelePredmety.Add(predmet.Value);
                            }
                        }
                    }
                }
            }
            Debug.WriteLine("neco");
            FileInfo file = new FileInfo(path);

            if (file.Exists)
            {
                file.Delete();
                file = new FileInfo(path);
            }
            using (ExcelPackage package = new ExcelPackage(file))
            {
                ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Predmety");

                worksheet.Cells[1, 1].Value         = "kód";
                worksheet.Cells[1, 2].Value         = "Název předmětu";
                worksheet.Cells[1, 3].Value         = "typ";
                worksheet.Cells[1, 4].Value         = "kód";
                worksheet.Cells[1, 5].Value         = "Rozdah hodin ve STAGu";
                worksheet.Cells[1, 6].Value         = "skutečný rozsah v HOD/SEM";
                worksheet.Cells[1, 7].Value         = "maximální velikost skupiny";
                worksheet.Cells["A1:G1"].AutoFilter = true;


                for (int i = 2; i < podezrelePredmety.Count + 2; i++)
                {
                    worksheet.Cells[i, 1].Value = string.Format("{0}/{1}", podezrelePredmety[i - 2].Katedra, podezrelePredmety[i - 2].Zkratka);
                    worksheet.Cells[i, 2].Value = podezrelePredmety[i - 2].Nazev;
                }
                package.Save();
            }
        }
        /// <summary>
        /// Nacitani podilu kateder na vyucovanem predmetu z dotazniku
        /// </summary>
        /// <param name="data"></param>
        /// <param name="path"></param>
        public static void NacistDotaznikKatedramXLS(this STAG_Classes.STAG_Database data, string path)
        {
            // TODO
            // Nacte dotaznik, zkontroluje, upravi data
            Debug.WriteLine("otevírám soubor " + path);
            FileInfo file = new FileInfo(path);

            using (ExcelPackage package = new ExcelPackage(file))
            {
                STAG_Classes.Predmet predmet;
                ExcelWorksheets      worksheets = package.Workbook.Worksheets;
                int    row = 2; // Soubor zacneme cist od druheho radku. Na prvnim radku jsou popisky sloupců
                object cellData;
                List <Tuple <string, string> > ucitele;
                // projede vsechny listy v  xlsx souboru
                foreach (var worksheet in worksheets)
                {
                    // projde vsechny radky kde hodnota bunky v prvnim sloupci != null
                    while ((cellData = worksheet.Cells[row, 1].Value) != null)
                    {
                        // ziskani jmen ucitelu z dotazniku
                        var jmenaUcitelu = worksheet.Cells[row, 3].Value.ToString();
                        ucitele = ZiskejJmenaUcitelu(jmenaUcitelu);

                        //ziskani kodu predmetu z dotazniku
                        var kodPredmetu = worksheet.Cells[row, 4].Value.ToString().Split('/');
                        // nalezeni predmetu, pokud předmět neexistuje vyhodí vyjímku
                        try
                        {
                            predmet = data.PredmetyPodleKateder[kodPredmetu[0]][kodPredmetu[1]];
                        }
                        catch
                        {
                            throw new Exception(String.Format("Predmet {0}/{1} neexistuje", kodPredmetu[0], kodPredmetu[1]));
                        }
                        // sloupec ve kterem je typ predmetu pr/cv/se
                        string typ = worksheet.Cells[row, 6].Value.ToString().ToLower();

                        var katedraVyucujiciho = worksheet.Cells[row, 2].Value.ToString();
                        if (typ == "př")
                        {
                            // pokud slovnik neexistuje tak ho vytvorim
                            if (predmet.PodilKatedryPrednaska == null)
                            {
                                predmet.PodilKatedryPrednaska = new Dictionary <string, double>();
                            }
                            // pridani podilu katedry do slovniku

                            if (predmet.PodilKatedryPrednaska.ContainsKey(katedraVyucujiciho))
                            {
                                predmet.PodilKatedryPrednaska[katedraVyucujiciho] += Convert.ToInt32(worksheet.Cells[row, 1].Value) / 100.0;
                            }
                            else
                            {
                                predmet.PodilKatedryPrednaska.Add(katedraVyucujiciho, Convert.ToInt32(worksheet.Cells[row, 1].Value) / 100.0);
                            }
                        }
                        else
                        {
                            if (typ == "cv")
                            {
                                if (predmet.PodilKatedryCviceni == null)
                                {
                                    predmet.PodilKatedryCviceni = new Dictionary <string, double>();
                                }
                                if (predmet.PodilKatedryCviceni.ContainsKey(katedraVyucujiciho))
                                {
                                    predmet.PodilKatedryCviceni[katedraVyucujiciho] += Convert.ToInt32(worksheet.Cells[row, 1].Value) / 100.0;
                                }
                                else
                                {
                                    predmet.PodilKatedryCviceni.Add(katedraVyucujiciho, Convert.ToInt32(worksheet.Cells[row, 1].Value) / 100.0);
                                }
                            }
                            else
                            {
                                if (typ == "se")
                                {
                                    if (predmet.PodilKatedrySeminar == null)
                                    {
                                        predmet.PodilKatedrySeminar = new Dictionary <string, double>();
                                    }
                                    if (predmet.PodilKatedrySeminar.ContainsKey(katedraVyucujiciho))
                                    {
                                        predmet.PodilKatedrySeminar[katedraVyucujiciho] += Convert.ToInt32(worksheet.Cells[row, 1].Value) / 100.0;
                                    }
                                    else
                                    {
                                        predmet.PodilKatedrySeminar.Add(katedraVyucujiciho, Convert.ToInt32(worksheet.Cells[row, 1].Value) / 100.0);
                                    }
                                }
                                else
                                {
                                    throw new Exception("Neni uvedena informace zda jde o Př/Se/Cv");
                                }
                            }
                        }
                        row++;
                    }
                }
                Debug.WriteLine("Nacteni dotazniku hotovo");
            }
            Debug.WriteLine("Doplneni podilu kateder");
            double podil = 0;

            foreach (var katedra in data.PredmetyPodleKateder)
            {
                foreach (var predmet in katedra.Value)
                {
                    podil = 0;
                    // podil katedry na prednasce
                    var podilKatedry = predmet.Value.PodilKatedryPrednaska;
                    DoplnPodilKatedry(ref podil, predmet, ref podilKatedry);
                    predmet.Value.PodilKatedryPrednaska = podilKatedry;

                    // podil katedry na cviceni
                    podilKatedry = predmet.Value.PodilKatedryCviceni;
                    DoplnPodilKatedry(ref podil, predmet, ref podilKatedry);
                    predmet.Value.PodilKatedryCviceni = podilKatedry;
                    // podil katedry na cviceni
                    podilKatedry = predmet.Value.PodilKatedrySeminar;
                    DoplnPodilKatedry(ref podil, predmet, ref podilKatedry);
                    predmet.Value.PodilKatedrySeminar = podilKatedry;

                    //myslim ze nazev metody je dostatecny
                    DoplnPocetHodinZaSemestr(predmet.Value);
                }
            }
            Debug.WriteLine("Doplneni hotovo");
        }
Example #14
0
        public static void GenerovatPrehledXLS(this STAG_Classes.STAG_Database data, string path)
        {
            // Kramář W.I.P.

            FileInfo file = new FileInfo(path);

            if (file.Exists)
            {
                file.Delete();
            }

            using (var excel = new ExcelPackage(file))
            {
                ExcelWorksheet sheet;
                for (int j = 0; j < 3; j++)
                {
                    if (j == 0)
                    {
                        sheet = excel.Workbook.Worksheets.Add("ZS");
                    }
                    else
                    if (j == 1)
                    {
                        sheet = excel.Workbook.Worksheets.Add("LS");
                    }
                    else
                    {
                        sheet = excel.Workbook.Worksheets.Add("ZS+LS");
                    }

                    sheet.Cells[1, 1].Value = "Osobni cislo";
                    sheet.Cells[1, 2].Value = "Rocnik";
                    sheet.Cells[1, 3].Value = "St. program";
                    sheet.Cells[1, 4].Value = "Forma";


                    var katedry = data.HiearchiePracovist[data.Fakulta];
                    for (int i = 0; i < katedry.Count; i++)
                    {
                        sheet.Cells[1, i + 5].Value = katedry.Keys.ElementAt(i);
                    }
                    sheet.Cells[1, katedry.Count + 5].Value = "jiná";
                    // st.program
                    // forma
                    // foreach (katedry)
                    // debug - vsechny predmety studenta

                    int row = 2;
                    Dictionary <string, double> podiKatedry;
                    foreach (var student in data.Students)
                    {
                        sheet.Cells[row, 1].Value = student.OsCislo;
                        sheet.Cells[row, 2].Value = student.Rocnik;
                        sheet.Cells[row, 3].Value = student.KodSp;
                        sheet.Cells[row, 4].Value = student.FormaSp;
                        if (j == 0)
                        {
                            podiKatedry = student.PodilKatedryZS;
                        }
                        else
                        if (j == 1)
                        {
                            podiKatedry = student.PodilKatedryLS;
                        }
                        else
                        {
                            podiKatedry = student.PodilKatedry;
                        }

                        for (int i = 0; i < katedry.Count; i++)
                        {
                            if (podiKatedry.ContainsKey(katedry.Keys.ElementAt(i)))
                            {
                                sheet.Cells[row, i + 5].Value = Math.Round(podiKatedry[katedry.Keys.ElementAt(i)], 2);
                            }
                            else
                            {
                                sheet.Cells[row, i + 5].Value = 0;
                            }
                        }
                        sheet.Cells[row, katedry.Count + 5].Value = (from x in podiKatedry where !katedry.Keys.Contains(x.Key) select x.Value).Sum();
                        row++;
                    }
                    for (int i = 1; i <= 4; i++)
                    {
                        ExcelColumn col = sheet.Column(i);
                        col.AutoFit();
                        col.Style.HorizontalAlignment = ExcelHorizontalAlignment.Left;
                    }
                }
                excel.Save();
            }
        }
Example #15
0
        /// <summary>
        /// Vygenerovani prehledu zateze ziskane analyzou SRA.
        /// Vystupem je xlsx soubor.
        /// </summary>
        /// <param name="data"></param>
        /// <param name="name">Nazev souboru bez pripony!</param>
        public static void GenerovatSRAPrehledXLS(this STAG_Classes.STAG_Database data, string name)
        {
            FileInfo file;
            int      number = 2;

            if ((file = new FileInfo(name + ".xlsx")).Exists)
            {
                while ((file = new FileInfo(name + number + ".xlsx")).Exists)
                {
                    number++;
                }
            }

            using (var excel = new ExcelPackage(file))
            {
                ExcelWorksheet sheet;

                var    deprts = data.HiearchiePracovist[data.Fakulta];
                double per;
                int    row = 2;
                int    col = 5;

                sheet = excel.Workbook.Worksheets.Add("sheet");
                sheet.Cells[1, 1].Value = "Osobni cislo";
                sheet.Cells[1, 2].Value = "Rocnik";
                sheet.Cells[1, 3].Value = "St. program";
                sheet.Cells[1, 4].Value = "Forma";
                foreach (var dep in deprts)
                {
                    sheet.Cells[1, col++].Value = dep.Key;
                }
                sheet.Cells[1, col].Value = "jiná";

                foreach (var student in data.zatezNaStudenta.GetAll())
                {
                    sheet.Cells[row, 1].Value = student.Item1.OsCislo;
                    sheet.Cells[row, 2].Value = student.Item1.Rocnik;
                    sheet.Cells[row, 3].Value = student.Item1.KodSp;
                    sheet.Cells[row, 4].Value = student.Item1.FormaSp;
                    col = 5;
                    foreach (var dep in deprts)
                    {
                        if (student.Item2.TryGetValue(dep.Key, out per))
                        {
                            sheet.Cells[row, col++].Value = per;
                        }
                        else
                        {
                            sheet.Cells[row, col++].Value = 0;
                        }
                    }
                    sheet.Cells[row, col].Value = (from cizi in student.Item2 where !deprts.Keys.Contains(cizi.Key) select cizi.Value).Sum();
                    row++;
                }
                for (int i = 1; i <= 4; i++)
                {
                    ExcelColumn coll = sheet.Column(i);
                    coll.AutoFit();
                    coll.Style.HorizontalAlignment = ExcelHorizontalAlignment.Left;
                }
                excel.Save();
            }
        }