Exemplo n.º 1
0
 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);
         }
     }
 }
Exemplo n.º 2
0
        /// <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!");
        }