예제 #1
0
        public bool SalaZajeta(Rezerwacja rezerwacja)
        {
            // Informacje danej Rezerwacji
            Przedmiot   przedmiotR   = Db.Przedmiot.FirstOrDefault(p => p.przedmiotId == rezerwacja.przedmiotId);
            Sala        sala         = Db.Sala.FirstOrDefault(s => s.salaId == rezerwacja.salaId);
            Cyklicznosc cyklicznoscR = Db.Cyklicznosc.FirstOrDefault(c => c.cyklicznoscId == rezerwacja.cyklicznoscId);

            // Przedmioty prowadzone przez wykladowce
            List <Sala> listaSal = uni.ReadAllT(new Sala()).Where(s => s.salaId == sala.salaId).ToList();
            // Wszystkie cykle w dniu nowej rezerwacji
            List <Cyklicznosc> listaCyklicznosci = uni.ReadAllT(new Cyklicznosc()).Where(c => c.od_ktorego_dnia == cyklicznoscR.od_ktorego_dnia).ToList();
            // Lista rezerwacji dla wykladowcy
            List <Rezerwacja> listaRezerwacji = uni.ReadAllT(new Rezerwacja()).Where(
                r => listaCyklicznosci.Any(c => c.cyklicznoscId == r.cyklicznoscId) &&
                listaSal.Any(s => s.salaId == r.salaId)
                ).ToList();

            foreach (var rezer in listaRezerwacji)
            {
                // Info pojedynczej rezerwacji z listy
                Przedmiot   przed = uni.ReadAllT(new Przedmiot()).FirstOrDefault(p => p.przedmiotId == rezer.przedmiotId);
                Cyklicznosc cykl  = uni.ReadAllT(new Cyklicznosc()).FirstOrDefault(c => c.cyklicznoscId == rezer.cyklicznoscId);

                var poczR  = Convert.ToDateTime(cykl.od_ktorej_godziny);
                var konR   = Convert.ToDateTime(cykl.od_ktorej_godziny).AddMinutes(przed.czas_trwania);
                var poczNR = Convert.ToDateTime(cyklicznoscR.od_ktorej_godziny);
                var konNR  = Convert.ToDateTime(cyklicznoscR.od_ktorej_godziny).AddMinutes(przedmiotR.czas_trwania);

                if (poczNR.Ticks >= poczR.Ticks && poczNR.Ticks <= konR.Ticks - 1 || konNR.Ticks >= poczR.Ticks && konNR.Ticks <= konR.Ticks - 1)
                {
                    return(false);
                }
            }
            return(true);
        }
예제 #2
0
        public bool CzyKonfliktRezerwacji(Rezerwacja rezerwacja)
        {
            Przedmiot   przedmiot   = Db.Przedmiot.FirstOrDefault(p => p.przedmiotId == rezerwacja.przedmiotId);
            Kierunek    kierunek    = Db.Kierunek.FirstOrDefault(k => k.kierunekId == przedmiot.kierunekId);
            Grupa       grupa       = Db.Grupa.FirstOrDefault(g => g.grupaId == rezerwacja.grupaId);
            Cyklicznosc cyklicznosc = Db.Cyklicznosc.FirstOrDefault(c => c.cyklicznoscId == rezerwacja.cyklicznoscId);

            CultureInfo culture = new CultureInfo("pt-BR"); // dzien/miesiac/rok

            ViewPlanZajec view = new ViewPlanZajec(kierunek.nazwa_kierunku, przedmiot.semestr_studiow, grupa.grupy);

            view.ZnajdzRezerwacje(uni);
            view.PodzielRezerwacje(uni);
            view.Uzupelanieniedanych(uni);

            int dzientygodnia = (int)Convert.ToDateTime(cyklicznosc.od_ktorego_dnia, culture).DayOfWeek;

            // Niedziela jako ostatni dzien tygodnia (a nie 1) + inne dni przesuwane
            if (dzientygodnia == 0)
            {
                dzientygodnia = 6;
            }
            else
            {
                dzientygodnia--;
            }

            foreach (Dictionary <string, string> danerezerwacji in view.RezerwacjeDniaDane[dzientygodnia])
            {
                if (danerezerwacji["nazwa"] != "Przerwa") // jezeli blok nie jest przerwa
                {
                    var test  = (Convert.ToDateTime(cyklicznosc.od_ktorej_godziny) - Convert.ToDateTime(danerezerwacji["od_ktorej_godziny"])).TotalMinutes;
                    var test2 = (Convert.ToDateTime(danerezerwacji["od_ktorej_godziny"]) - Convert.ToDateTime(cyklicznosc.od_ktorej_godziny)).TotalMinutes;
                    if (
                        (Convert.ToDateTime(cyklicznosc.od_ktorej_godziny) - Convert.ToDateTime(danerezerwacji["od_ktorej_godziny"])).TotalMinutes < Convert.ToInt32(danerezerwacji["czas_trwania"]) && // Jezeli nowa rezerwacja pozniej niz istniejaca
                        (Convert.ToDateTime(danerezerwacji["od_ktorej_godziny"]) - Convert.ToDateTime(cyklicznosc.od_ktorej_godziny)).TotalMinutes < Convert.ToInt32(przedmiot.czas_trwania)            // Jezeli nowa rezerwacja wczesniej niz istniejaca
                        )
                    {
                        return(false);
                    }
                }
            }
            return(true);
        }
예제 #3
0
        /// <summary>
        /// Metoda pobiera szczegolowe informacje o wyselekcjonowanych wczesniej rezerwacjach.
        /// Uwzglednia rowniez dodawanie przerw pomiedzy rezerwacjami
        /// </summary>
        /// <typeparam name="IUniversalRepositoryTypeOf">Interfejs dla klasy obslugujacej komunikacje z baza danych</typeparam>
        /// <param name="uni">Jako parametr wchodzi obiekt klasy obslugujacy komunikacje z baza danych</param>
        /// <returns>Uzupelnia wlasciwosc klasy</returns>
        public void Uzupelanieniedanych(IUniversalRepositoryTypeOf uni)
        {
            RezerwacjeDniaDane = new List <List <Dictionary <string, string> > >();

            foreach (var rezerwacje in RezerwacjeDnia)
            {
                int i = 0;
                List <Dictionary <string, string> > DaneDnia = new List <Dictionary <string, string> >();
                foreach (var rezerwacja in rezerwacje)
                {
                    Dictionary <string, string> dictionary = new Dictionary <string, string>();

                    // Sortowanie Cyklicznosci w danym dniu ~ Sortowanie od najwczesniejszej do najpozniejszej godziny -> bo wtedy nie zle przerwy
                    var cykl = uni.ReadAllT(new Cyklicznosc()).First(c => c.cyklicznoscId == rezerwacja.cyklicznoscId);
                    var grup = uni.ReadAllT(new Grupa()).First(c => c.grupaId == rezerwacja.grupaId);
                    var prze = uni.ReadAllT(new Przedmiot()).First(c => c.przedmiotId == rezerwacja.przedmiotId);
                    var sala = uni.ReadAllT(new Sala()).First(c => c.salaId == rezerwacja.salaId);
                    var wykl = uni.ReadAllT(new Wykladowca()).First(c => c.wykladowcaId == prze.wykladowcaId);

                    //Jezeli 1 zajecia nie zaczynaja sie o 8 rano
                    if (cykl.od_ktorej_godziny != "8:00" && rezerwacje[0] == rezerwacja)
                    {
                        Dictionary <string, string> dictionary3 = new Dictionary <string, string>();
                        Cyklicznosc cykl2 = new Cyklicznosc();
                        cykl2.od_ktorej_godziny = "8:00";
                        // Wysokosc
                        int ile_przerwy = (int)(Convert.ToDateTime(cykl.od_ktorej_godziny) - Convert.ToDateTime(cykl2.od_ktorej_godziny)).TotalMinutes;
                        var wys2        = Convert.ToString(ile_przerwy * 2) + "px";
                        dictionary3.Add("wysokosc", wys2);

                        // Nazwa bloku
                        dictionary3.Add("nazwa", "Przerwa");
                        // Od godziny
                        dictionary3["od_ktorej_godziny"] = "8:00";
                        // Do godziny
                        dictionary3.Add("do_ktorej_godziny", cykl.od_ktorej_godziny);
                        // Info
                        dictionary3.Add("info", "Przerwa");
                        // Kolor tesktu
                        dictionary3.Add("tekst", "#548cbc");
                        // Kolor tla
                        dictionary3.Add("tlo", "white");
                        // Rodzaj zajec - aby klucz nie byl pusty
                        dictionary3.Add("rodzaj_zajec", "");

                        DaneDnia.Add(dictionary3);
                    }

                    foreach (var prop in prze.GetType().GetProperties())
                    {
                        dictionary.Add(prop.Name, prze.GetType().GetProperty(prop.Name).GetValue(prze).ToString());
                    }

                    foreach (var prop in grup.GetType().GetProperties())
                    {
                        dictionary.Add(prop.Name, grup.GetType().GetProperty(prop.Name).GetValue(grup).ToString());
                    }

                    foreach (var prop in cykl.GetType().GetProperties())
                    {
                        dictionary.Add(prop.Name, cykl.GetType().GetProperty(prop.Name).GetValue(cykl).ToString());
                    }

                    foreach (var prop in sala.GetType().GetProperties())
                    {
                        dictionary.Add(prop.Name, sala.GetType().GetProperty(prop.Name).GetValue(sala).ToString());
                    }

                    foreach (var prop in wykl.GetType().GetProperties())
                    {
                        try { dictionary.Add(prop.Name, wykl.GetType().GetProperty(prop.Name).GetValue(wykl).ToString()); } catch (Exception) { }
                    }

                    // Wysokosc pudla
                    var wys = Convert.ToString(Convert.ToInt32(dictionary["czas_trwania"]) * 2) + "px";
                    dictionary.Add("wysokosc", wys);

                    // Do godziny
                    var do_ktorej = Convert.ToDateTime(dictionary["od_ktorej_godziny"]).AddMinutes(Convert.ToInt32(dictionary["czas_trwania"])).ToString("HH:mm");
                    dictionary.Add("do_ktorej_godziny", do_ktorej);

                    // Kolor tla
                    dictionary.Add("tlo", "#548cbc");

                    // Kolor tekstu
                    dictionary.Add("tekst", "white");

                    // Tabela z informacjami
                    string info = String.Format("<table style='border: solid 1px #e2e2e2'>" +
                                                $"<tr style='border: solid 1px #e2e2e2'><td style='padding: 3px'>Nazwa przedmiotu</td><td style='padding: 3px'>{dictionary["nazwa"]}</td></tr>" +
                                                $"<tr style='border: solid 1px #e2e2e2'><td style='padding: 3px'>Czas rozpoczecia:</td><td style='padding: 3px'>{dictionary["od_ktorej_godziny"]}</td></tr>" +
                                                $"<tr style='border: solid 1px #e2e2e2'><td style='padding: 3px'>Czas trwania:</td><td style='padding: 3px'>{dictionary["czas_trwania"]}</td></tr>" +
                                                $"<tr style='border: solid 1px #e2e2e2'><td style='padding: 3px'>Co ile tygodni:</td><td style='padding: 3px'>{dictionary["co_ile_tygodni"]}</td></tr>" +
                                                $"<tr style='border: solid 1px #e2e2e2'><td style='padding: 3px'>Miejsce:</td><td style='padding: 3px'>{dictionary["skrot_informacji"]}</td></tr>" +
                                                $"<tr style='border: solid 1px #e2e2e2'><td style='padding: 3px'>Rodzaj przedmiotu:</td><td style='padding: 3px'>{dictionary["rodzaj_przedmiotu"]}</td></tr>" +
                                                $"<tr style='border: solid 1px #e2e2e2'><td style='padding: 3px'>Rodzaj zajec:</td><td style='padding: 3px'>{dictionary["rodzaj_zajec"]}</td></tr>" +
                                                $"<tr style='border: solid 1px #e2e2e2'><td style='padding: 3px'>Wykladowca:</td><td style='padding: 3px'>{dictionary["imie"]} {dictionary["nazwisko"]}</td></tr>" +
                                                "</table>");
                    dictionary.Add("info", info);

                    DaneDnia.Add(dictionary);

                    // Dodanie Przerwy
                    if (rezerwacja != rezerwacje.Last())
                    {
                        Dictionary <string, string> dictionary2 = new Dictionary <string, string>();

                        var cykl2 = uni.ReadAllT(new Cyklicznosc()).First(c => c.cyklicznoscId == rezerwacje[i + 1].cyklicznoscId);
                        i++;

                        foreach (var prop in cykl2.GetType().GetProperties())
                        {
                            dictionary2.Add(prop.Name, cykl2.GetType().GetProperty(prop.Name).GetValue(cykl2).ToString());
                        }

                        // Nazwa bloku
                        dictionary2.Add("nazwa", "Przerwa");

                        // Wysokosc
                        int ile_przerwy = (
                            (Convert.ToDateTime(dictionary2["od_ktorej_godziny"]) - Convert.ToDateTime(dictionary["do_ktorej_godziny"])).Minutes +
                            ((Convert.ToDateTime(dictionary2["od_ktorej_godziny"]) - Convert.ToDateTime(dictionary["do_ktorej_godziny"])).Hours * 60)
                            );
                        var wys2 = Convert.ToString(ile_przerwy * 2) + "px";
                        dictionary2.Add("wysokosc", wys2);

                        // Od godziny
                        dictionary2["od_ktorej_godziny"] = dictionary["do_ktorej_godziny"];

                        // Do godziny
                        var do_ktorej2 = Convert.ToDateTime(dictionary2["od_ktorej_godziny"]).AddMinutes(ile_przerwy).ToShortTimeString().Split(" ")[0];
                        dictionary2.Add("do_ktorej_godziny", do_ktorej2);

                        // Info
                        dictionary2.Add("info", "Przerwa");

                        // Kolor tesktu
                        dictionary2.Add("tekst", "#548cbc");

                        // Kolor tla
                        dictionary2.Add("tlo", "white");

                        // Rodzaj zajec - aby klucz nie byl pusty
                        dictionary2.Add("rodzaj_zajec", "");

                        DaneDnia.Add(dictionary2);
                    }
                }
                RezerwacjeDniaDane.Add(DaneDnia);
            }
        }