//<ZAKŁADKA: Przeglądanie obecności>

        /// <summary> Wyszukuje obecności na podstawie ustawionych parametrów w zakładce Przeglądanie obecności </summary>
        private void btn_szukaj_obecnosci_Click(object sender, EventArgs e)
        {
            List <Przedmiot> przedmioty = databaseController.ListPrzedmiot_Zalogowanego(conjuring, wykladowca);
            List <Obecnosc>  studenci = databaseController.GetObecnosc(conjuring, connection);
            Przedmiot        przedmiot = null;
            Student          student = null;
            DateTime         data, data_od, data_do;

            //Przygotowanie daty w zakresie której będzie sprawdzana obecność
            data    = cb_data_przegladanie.Value;
            data_od = new DateTime(data.Year, data.Month, data.Day, 0, 0, 0, 0);
            data_do = new DateTime(data.Year, data.Month, data.Day, 23, 59, 59, 0);

            //Przygotowanie obiektu studenta do sprawdzenia
            if (cb_student_przegladanie.Text != "")
            {
                string index_str = cb_student_przegladanie.Text;
                index_str = index_str.Split('(', ')')[1];
                int Index = Convert.ToInt32(index_str);
                student = conjuring.Student.Where(o => (o.Indeks == Index)).FirstOrDefault();
            }
            //Przygotowanie obiektu przedmiotu do sprawdzenia
            if (cb_przedmiot_przegladanie.Text != "")
            {
                przedmiot = conjuring.Przedmiot.Where(o => (o.Nazwa == cb_przedmiot_przegladanie.Text)).FirstOrDefault();
            }

            //Rozpatrzenie wszystkich przypadków podania parametrów:
            if (cb_przedmiot_przegladanie.Text == "" && cb_student_przegladanie.Text == "")
            {
                MessageBox.Show("Wprowadź wartość do co najmniej jednego pola!", "Uwaga!");
            }

            else if (cb_przedmiot_przegladanie.Text != "" && cb_uwzglednij_date.Checked == false && cb_student_przegladanie.Text == "")
            {
                dgv_lista_obecnosci.DataSource = databaseController.Lista_Obecnosci(conjuring, connection, przedmiot, wykladowca);
            }
            else if (cb_przedmiot_przegladanie.Text != "" && cb_uwzglednij_date.Checked == true && cb_student_przegladanie.Text == "")
            {
                dgv_lista_obecnosci.DataSource = databaseController.Lista_Obecnosci(conjuring, connection, przedmiot, data_od, data_do, wykladowca);
            }
            else if (cb_przedmiot_przegladanie.Text != "" && cb_uwzglednij_date.Checked == false && cb_student_przegladanie.Text != "")
            {
                dgv_lista_obecnosci.DataSource = databaseController.Lista_Obecnosci(conjuring, connection, przedmiot, student, wykladowca);
            }
            else if (cb_przedmiot_przegladanie.Text != "" && cb_uwzglednij_date.Checked == true && cb_student_przegladanie.Text != "")
            {
                dgv_lista_obecnosci.DataSource = databaseController.Lista_Obecnosci(conjuring, connection, przedmiot, data_od, data_do, student, wykladowca);
            }
            else if (cb_przedmiot_przegladanie.Text == "" && cb_uwzglednij_date.Checked == false && cb_student_przegladanie.Text != "")
            {
                dgv_lista_obecnosci.DataSource = databaseController.Lista_Obecnosci(conjuring, connection, student, wykladowca);
            }
            else if (cb_przedmiot_przegladanie.Text == "" && cb_uwzglednij_date.Checked == true && cb_student_przegladanie.Text != "")
            {
                dgv_lista_obecnosci.DataSource = databaseController.Lista_Obecnosci(conjuring, connection, data_od, data_do, student, wykladowca);
            }
        }
        //</ZAKŁADKA: Sprawdzanie obecności>

        //<ZAKŁADKA: Edytor zajęć>

        /// <summary>Dodawanie nowego obiektu zajęć do bazy danych</summary>
        private void btn_dodaj_zajęcia_Click(object sender, EventArgs e)
        {
            DateTime data    = Convert.ToDateTime(dateTime_pierwsze_zajecia.Value);
            string   minuty  = Convert.ToString(data.Minute);
            string   godziny = Convert.ToString(data.Hour);

            if (minuty.Length < 2)
            {
                minuty = "0" + minuty;
            }
            if (godziny.Length < 2)
            {
                godziny = "0" + godziny;
            }

            Przedmiot przedmiot = conjuring.Przedmiot.Where(o => (o.Nazwa == cb_zajecia.Text)).FirstOrDefault();

            String sala_zczytane = cb_sala.Text;
            Char   delimiter     = '-';

            String[] substrings        = sala_zczytane.Split(delimiter);
            string   pom1              = substrings[0];
            string   pom2              = substrings[1];
            Sala     sala              = conjuring.Sala.Where(o => (o.Numer == pom1 && o.Budynek == pom2)).FirstOrDefault();
            bool     tydzien           = false;
            string   tydzien_zczyatane = cb_czestosc.Text;

            if (tydzien_zczyatane == "Co tydzien")
            {
                tydzien = false;
            }
            else if (tydzien_zczyatane == "Co dwa tygodnie")
            {
                tydzien = true;
            }

            databaseController.InsertZajecia(conjuring, connection, wykladowca, przedmiot, sala, data, tydzien);
            Refresh_dvg_zajecia();
            RefreshComboboxes_PrzegladanieObecnosci();
        }
        //Dodawanie nowego przedmiotu
        public void InsertPrzedmiot(TheConjuring_dbEntities1 conjuring, SqlConnection connection, String nazwa)
        {
            connection.Open();
            var query = conjuring.Przedmiot.Where(o => (o.Nazwa == nazwa)).FirstOrDefault();

            if (query != null)
            {
                MessageBox.Show("Taki przedmiot już istnieje w bazie");
                connection.Close();
                return;
            }

            Przedmiot przedmiot = new Przedmiot
            {
                Nazwa = nazwa
            };

            conjuring.Przedmiot.Add(przedmiot);
            conjuring.SaveChanges();
            connection.Close();
            MessageBox.Show("Dodano poprawnie przedmiot - " + nazwa);
        }
        public DataTable Lista_Obecnosci(TheConjuring_dbEntities1 conjuring, SqlConnection connection, Przedmiot przed, DateTime data_od, DateTime data_do, Student student, Wykladowca wyk)
        {
            DataTable dt = new DataTable();

            dt.Columns.Add("Przedmiot");
            dt.Columns.Add("Student");
            dt.Columns.Add("Data");
            dt.Columns.Add("Spóźniony");
            dt.Columns.Add("Notatka");

            var qTyp = (from p in conjuring.Przedmiot
                        join z in conjuring.Zajecia on p.Id_Przedmiotu equals z.Id_Przedmiotu
                        join zp in conjuring.Zajecia_pojedyncze on z.Id_Zajec equals zp.Id_Zajec
                        join o in conjuring.Obecnosc on zp.Id_Zajec_pojedynczych equals o.Id_Zajec_pojedynczych
                        join s in conjuring.Student on o.Indeks equals s.Indeks
                        where z.Id_Wykladowcy == wyk.Id_Wykladowcy && p.Id_Przedmiotu == przed.Id_Przedmiotu && zp.Data_zajec > data_od && zp.Data_zajec < data_do && s.Indeks == student.Indeks
                        select new { Przedmiot_ = p.Nazwa, Student_ = s.Imie + " " + s.Nazwisko, Data_ = zp.Data_zajec, Spoznienie_ = o.Spoznienie, Notatka_ = o.notatka }).Distinct().ToList();

            foreach (var s in qTyp)
            {
                DataRow new_row = dt.NewRow();
                new_row["Przedmiot"] = s.Przedmiot_;
                new_row["Student"]   = s.Student_;
                new_row["Data"]      = s.Data_;
                new_row["Spóźniony"] = s.Spoznienie_;
                new_row["Notatka"]   = s.Notatka_;
                dt.Rows.Add(new_row);
            }
            return(dt);
        }
        //Dodawanie nowych zajęć
        public void InsertZajecia(TheConjuring_dbEntities1 conjuring, SqlConnection connection, Wykladowca wykladowca, Przedmiot przedmiot, Sala sala, DateTime data, bool tydzien)
        {
            connection.Open();
            var query = conjuring.Zajecia.Where(o => (o.Id_Przedmiotu == przedmiot.Id_Przedmiotu && o.Id_Sali == sala.Id_Sali && o.Id_Wykladowcy == wykladowca.Id_Wykladowcy && o.Tydzien == tydzien && o.Czas == data)).FirstOrDefault();

            if (query != null)
            {
                MessageBox.Show("Takie zajecia juz istnieja w bazie");
                connection.Close();
                return;
            }

            Zajecia zajecia = new Zajecia()
            {
                Id_Przedmiotu = przedmiot.Id_Przedmiotu,
                Id_Sali       = sala.Id_Sali,
                Czas          = data,
                Tydzien       = tydzien,
                Id_Wykladowcy = wykladowca.Id_Wykladowcy
            };

            conjuring.Zajecia.Add(zajecia);
            conjuring.SaveChanges();
            connection.Close();
            MessageBox.Show("Dodano poprawnie zajecia przedmiot - " + przedmiot.Nazwa + " w sali " + sala.Numer + " w budynku " + sala.Budynek);

            this.InsertZajeciaPojedyncze(conjuring, connection, zajecia);
        }