/// <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); } }
/// <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); }
/// <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++; }
// 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); } } }
/// <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); } } }
/// <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++; } } }
/// <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; } }
/// <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"); }
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(); } }
/// <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(); } }