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