private static void ZkontrolujAkci(List <STAG_Classes.Ucitel> neco, KeyValuePair <string, STAG_Classes.Predmet> predmet, ref PredmetVDotazniku predmetVDotazniku, STAG_Classes.RozvrhovaAkce akce) { if (predmetVDotazniku == null) { predmetVDotazniku = new PredmetVDotazniku() { predmet = predmet.Value, typAkce = akce.TypAkceZkr, ucitele = new Dictionary <string, List <Ucitel> >() }; } foreach (var ucitel in neco) { if (!(predmetVDotazniku.ucitele.ContainsKey(ucitel.Katedra) && predmetVDotazniku.ucitele[ucitel.Katedra].Contains(ucitel))) { predmetVDotazniku.AddUcitel(ucitel); } } }
/// <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!"); }