private void btnThiThu_Click(object sender, EventArgs e)
 {
     if (dgvTTKyThiThu.SelectedRows.Count > 0)
     {
         int madt = int.Parse(dgvTTKyThiThu.SelectedRows[0].Cells["maDT"].Value.ToString());
         int makt = int.Parse(dgvTTKyThiThu.SelectedRows[0].Cells["maKT"].Value.ToString());
         btGanNhat                 = qlttn.BuoiThis.Where(bt => bt.maKT == makt && bt.maDT == madt).FirstOrDefault();
         btGanNhat.NgayGioThi      = DateTime.Now;
         ktGanNhat                 = btGanNhat.KyThi;
         tabControl1.SelectedIndex = 0;
         SetUpThi();
     }
     else
     {
         MessageBox.Show("Hãy chọn một đề thi", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
     }
 }
 private void loadDgvLichThi()
 {
     btGanNhat = qlttn.BuoiThis.Where(bt => bt.KyThi.LoaiKT == "ThiThiet" &&
                                      bt.BaiLams.Where(bl => bl.maHS == hs.maHS && bl.DiemSo == -1).Count() > 0 &&
                                      (bt.NgayGioThi > DateTime.Now ||
                                       (DateTime.Now >= bt.NgayGioThi && DateTime.Now <= bt.NgayGioThi + bt.DeThi.ThoiGianLamBai))).FirstOrDefault();
     if (btGanNhat != null)
     {
         ktGanNhat            = btGanNhat.KyThi;
         bsLichThi.DataSource = ktGanNhat.BuoiThis.Select(bt => new
         {
             bt.KyThi.TenKT,
             bt.DeThi.MonHoc.tenMH,
             bt.NgayGioThi,
             bt.DeThi.ThoiGianLamBai
         }).ToList();
         dgvLichThi.DataSource = bsLichThi;
         dgvLichThi.Columns["TenKT"].HeaderText          = "Kỳ thi";
         dgvLichThi.Columns["tenMH"].HeaderText          = "Môn thi";
         dgvLichThi.Columns["NgayGioThi"].HeaderText     = "Thời gian bắt đầu";
         dgvLichThi.Columns["ThoiGianLamBai"].HeaderText = "Thời gian làm bài";
     }
 }
        public frmThemKT(frmGiaoVien frmgv, GiaoVien GV, string maKhoi, string LoaiKT)
        {
            frmgv.Enabled = false;
            this.GV       = GV;
            this.maKhoi   = maKhoi;
            this.LoaiKT   = LoaiKT;
            InitializeComponent();
            setQlkt();
            LoadQLKTDgvDeThi();
            LoadQLKTDgvHocSinh();


            this.FormClosing += (s, e) =>
            {
                frmgv.Enabled = true;
            };
            btnThemKT.Click += (s, e) =>
            {
                if (string.IsNullOrWhiteSpace(txtTenKT.Text))
                {
                    MessageBox.Show("Không được để trống tên kỳ thi", "Cảnh báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
                if (dtpNgayThi.Value < DateTime.Now)
                {
                    MessageBox.Show("Ngày giờ thi phải lớn hơn ngày giờ hiện tại", "Cảnh báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                List <string> dsHocSinh = new List <string>();
                // sau cái vòng lặp này thì sẽ lấy ra được danh sách học sinh thi
                foreach (DataGridViewRow row in dgvHS.Rows)
                {
                    var cell = row.Cells["Chon"] as DataGridViewCheckBoxCell;
                    if (cell.Value == cell.TrueValue)
                    {
                        dsHocSinh.Add(row.Cells["maHS"].Value.ToString());
                    }
                }
                if (dsHocSinh.Count == 0)
                {
                    MessageBox.Show($"Mời bạn chọn các thí sinh (lưu ý chọn các thí sinh không bận thi vào thời gian {dtpNgayThi.Value}", "Thông báo",
                                    MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }

                List <int> dsMaDT = new List <int>();
                foreach (DataGridViewRow row in dgvDT.Rows)
                {
                    var cell = row.Cells["Chon"] as DataGridViewCheckBoxCell;
                    if (cell.Value == cell.TrueValue && row.Cells["maMH"].Value.ToString() == GV.maMH)
                    {
                        dsMaDT.Add(int.Parse(row.Cells["maDT"].Value.ToString()));
                    }
                }

                if (dsMaDT.Count == 0)
                {
                    MessageBox.Show("Hãy chọn một đề thi của bộ môn mà bạn đang phụ trách cho kỳ thi", "Cảnh báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
                using (var qlttn = new QLTTNDataContext())
                {
                    qlttn.KyThis.InsertOnSubmit(new KyThi
                    {
                        TenKT  = txtTenKT.Text,
                        maKhoi = this.maKhoi,
                        maGV   = GV.maGV
                    });
                    qlttn.SubmitChanges();
                    int maktVuaThem = (int)qlttn.ExecuteQuery <decimal>("select IDENT_CURRENT('dbo.KyThi')").FirstOrDefault();

                    if (LoaiKT == "ThiThiet")
                    {
                        qlttn.KyThis.Where(kt => kt.maKT == maktVuaThem).FirstOrDefault().LoaiKT = "ThiThiet";
                        BuoiThi bt = new BuoiThi()
                        {
                            maKT       = maktVuaThem,
                            maDT       = dsMaDT[0],
                            NgayGioThi = dtpNgayThi.Value
                        };
                        qlttn.BuoiThis.InsertOnSubmit(bt);

                        foreach (var hs in dsHocSinh)
                        {
                            qlttn.BaiLams.InsertOnSubmit(new BaiLam
                            {
                                maHS   = hs,
                                maDT   = bt.maDT,
                                maKT   = maktVuaThem,
                                DiemSo = -1
                            });
                        }
                        qlttn.SubmitChanges();
                        frmgv.LoadQLKTDgvKyThi();
                    }
                    else if (LoaiKT == "ThiThu")
                    {
                        qlttn.KyThis.Where(kt => kt.maKT == maktVuaThem).FirstOrDefault().LoaiKT = "ThiThu";
                        foreach (var madt in dsMaDT)
                        {
                            BuoiThi bt = new BuoiThi()
                            {
                                maKT       = maktVuaThem,
                                maDT       = madt,
                                NgayGioThi = dtpNgayThi.Value
                            };
                            qlttn.BuoiThis.InsertOnSubmit(bt);

                            foreach (var hs in dsHocSinh)
                            {
                                qlttn.BaiLams.InsertOnSubmit(new BaiLam
                                {
                                    maHS   = hs,
                                    maDT   = bt.maDT,
                                    maKT   = maktVuaThem,
                                    DiemSo = -1
                                });
                            }
                        }

                        qlttn.SubmitChanges();
                        frmgv.LoadQLKTOTDgvKyThi();
                    }
                }

                MessageBox.Show("Thêm kỳ thi thành công", "Thông báo");
                this.Close();
            };
        }
        public frmHocSinh(frmLogin frmlogin, HocSinh hs)
        {
            this.frmlogin = frmlogin;
            this.hs       = qlttn.HocSinhs.Where(hs1 => hs1.maHS == hs.maHS).FirstOrDefault();
            InitializeComponent();
            btGanNhat = qlttn.BuoiThis.Where(bt => bt.KyThi.LoaiKT == "ThiThiet" &&
                                             bt.BaiLams.Where(bl => bl.maHS == hs.maHS && bl.DiemSo == -1).Count() > 0 &&
                                             (bt.NgayGioThi > DateTime.Now ||
                                              (DateTime.Now >= bt.NgayGioThi && DateTime.Now <= bt.NgayGioThi + bt.DeThi.ThoiGianLamBai)))
                        .OrderBy(bt => bt.NgayGioThi)
                        .FirstOrDefault();
            if (btGanNhat != null)
            {
                ktGanNhat = btGanNhat.KyThi;
                bl        = btGanNhat.BaiLams.Where(bl => bl.maHS == hs.maHS).FirstOrDefault();
                SetUpThi();
            }
            else
            {
                MessageBox.Show("Chào mừng bạn đến với ứng dụng thi trắc nghiệm", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                ShowChildControl(tabControl1.TabPages[0], false);
                tabControl1.SelectedIndex = 1;
            }
            btnXuatBangDiem.Click += btnXuatBangDiem_Click;
            btnNopBai.Click       += BtnNopBai_Click;

            this.FormClosing += (s, e) =>
            {
                frmlogin.Show();
            };

            tabControl1.SelectedIndexChanged += (s, e) =>
            {
                if (tabControl1.SelectedIndex == 1)
                {
                    loadThongTinHocSinh();
                    loadCbKyThis();
                    loadDgvDaThi();
                    loadDgvLichThi();
                }
                else if (tabControl1.SelectedIndex == 2)
                {
                    loadCbKyThiThu();
                    loadDgvKyThiThu();
                }
            };
            btnLogout.Click               += btnLogout_Click;
            btnThiThu.Click               += btnThiThu_Click;
            txtHoTenHS.Validating         += Txt_Validating;
            txtNgaySinh.Validating        += Txt_Validating;
            txtMatKhauCu.Validating       += Txt_Validating;
            txtMatKhauMoi.Validating      += Txt_Validating;
            cbKyThis.SelectedIndexChanged += cbKyThis_SelectedIndexChanged;
            txtNgaySinh.Validating        += (s, e) =>
            {
                try
                {
                    epMain.SetError(txtNgaySinh, "");
                    var ns = DateTime.Parse(txtNgaySinh.Text);
                }
                catch (Exception exec)
                {
                    epMain.SetError(txtNgaySinh, "Hãy nhập đúng ngày sinh");
                    txtNgaySinh.Focus();
                    return;
                }
            };
            btnCapNhat.Click += BtnCapNhat_Click;
            cbKyThiThu.SelectedIndexChanged += CbKyThiThu_SelectedIndexChanged;
            btnSavePass.Click   += BtnSavePass_Click;
            btnChangePass.Click += BtnChangePass_Click;
            Load += FrmHocSinh_Load;
            txtMatKhauMoi.Hide();
            lblPassNew.Hide();
        }
        public frmSuaKT(frmGiaoVien frmgv, GiaoVien GV, int makt, string maKhoi, BindingSource bsKyThi)
        {
            frmgv.Enabled = false;
            this.GV       = GV;
            this.maKhoi   = maKhoi;
            this.makt     = makt;

            KTCCN = QLTTN.KyThis.Where(kt => kt.maKT == makt).FirstOrDefault();
            BT    = QLTTN.BuoiThis.Where(BT => BT.maKT == makt && BT.DeThi.maMH == GV.maMH).FirstOrDefault();
            if (BT != null)
            {
                DSHS = QLTTN.BaiLams.Where(bl => bl.maKT == BT.maKT && bl.maDT == BT.maDT).
                       Select(hs => new QLTTNDataContext.MyHocSinh
                {
                    maHS     = hs.maHS,
                    HoTen    = hs.HocSinh.HoTen,
                    maKhoi   = hs.HocSinh.maKhoi,
                    maLop    = hs.HocSinh.maLop,
                    NgaySinh = (DateTime)hs.HocSinh.NgaySinh
                }).
                       ToList();
                DT = QLTTN.KyThis.Where(kt => kt.maKT == this.makt).FirstOrDefault()
                     .BuoiThis.Where(BT => BT.DeThi.maMH == GV.maMH)
                     .Select(BT => new QLTTNDataContext.MyDeThi
                {
                    maDT           = BT.maDT,
                    maGV           = BT.DeThi.maGV,
                    maKhoi         = BT.DeThi.maKhoi,
                    maMH           = BT.DeThi.maMH,
                    TenDT          = BT.DeThi.TenDT,
                    ThoiGianLamBai = (TimeSpan)BT.DeThi.ThoiGianLamBai
                }).FirstOrDefault();
            }


            InitializeComponent();

            Load += (s, e) =>
            {
                SetQLKT();
                LoadQLKTDgvDeThi();
                LoadQLKTDgvHocSinh();
                txtTenKT.DataBindings.Add("Text", bsKyThi, "TenKT", true, DataSourceUpdateMode.Never);
                lblLoaiKT.DataBindings.Add("Text", bsKyThi, "LoaiKT", true, DataSourceUpdateMode.Never);
                lblMaKhoi.Text = maKhoi;
            };

            this.FormClosing += (s, e) =>
            {
                frmgv.Enabled = true;
            };
            btnSuaKT.Click += (s, e) =>
            {
                if (string.IsNullOrWhiteSpace(txtTenKT.Text))
                {
                    MessageBox.Show("Không được để trống tên kỳ thi", "Cảnh báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
                if (dtpNgayThi.Value < DateTime.Now)
                {
                    MessageBox.Show("Ngày giờ thi phải lớn hơn ngày giờ hiện tại", "Cảnh báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                foreach (DataGridViewRow row in dgvHS.Rows)
                {
                    var cell = row.Cells["Chon"] as DataGridViewCheckBoxCell;
                    if (cell.Value == cell.TrueValue)
                    {
                        DSMaHSDuocChon.Add(row.Cells["maHS"].Value.ToString());
                    }
                }
                if (DSMaHSDuocChon.Count == 0)
                {
                    MessageBox.Show($"Mời bạn chọn các thí sinh (lưu ý chọn các thí sinh không bận thi vào thời gian {dtpNgayThi.Value}", "Thông báo",
                                    MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }

                List <int> dsMaDT = new List <int>();
                foreach (DataGridViewRow row in dgvDT.Rows)
                {
                    var cell = row.Cells["Chon"] as DataGridViewCheckBoxCell;
                    if (cell.Value == cell.TrueValue && row.Cells["maMH"].Value.ToString() == GV.maMH)
                    {
                        dsMaDT.Add(int.Parse(row.Cells["maDT"].Value.ToString()));
                    }
                }
                if (dsMaDT.Count == 0)
                {
                    MessageBox.Show("Hãy chọn một đề thi của bộ môn mà bạn đang phụ trách cho kỳ thi", "Cảnh báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                try
                {
                    var KTCCN = QLTTN.KyThis.Where(kythi => kythi.maKT == makt).FirstOrDefault();
                    KTCCN.TenKT = txtTenKT.Text;

                    if (KTCCN.LoaiKT == "ThiThiet")
                    {
                        if (BT != null)
                        {
                            QLTTN.BaiLams.DeleteAllOnSubmit(BT.BaiLams);
                            QLTTN.BuoiThis.DeleteOnSubmit(BT);
                            QLTTN.SubmitChanges();
                        }
                        BT = new BuoiThi
                        {
                            maKT       = KTCCN.maKT,
                            maDT       = dsMaDT[0],
                            NgayGioThi = dtpNgayThi.Value
                        };

                        if (dsMaDT.Count > 0)
                        {
                            // tạo buổi thi mới
                            QLTTN.BuoiThis.InsertOnSubmit(BT);

                            // thêm các thí sinh vào buổi thi mới này
                            foreach (var mahs in DSMaHSDuocChon)
                            {
                                QLTTN.BaiLams.InsertOnSubmit(new BaiLam
                                {
                                    maKT   = KTCCN.maKT,
                                    maDT   = dsMaDT[0],
                                    maHS   = mahs,
                                    DiemSo = -1
                                });
                            }
                        }
                    }
                    else if (KTCCN.LoaiKT == "ThiThu")
                    {
                        foreach (var BT in KTCCN.BuoiThis)
                        {
                            QLTTN.BaiLams.DeleteAllOnSubmit(BT.BaiLams);
                            QLTTN.BuoiThis.DeleteOnSubmit(BT);
                            QLTTN.SubmitChanges();
                        }

                        foreach (var madt in dsMaDT)
                        {
                            BuoiThi BT = new BuoiThi()
                            {
                                maKT       = KTCCN.maKT,
                                maDT       = madt,
                                NgayGioThi = dtpNgayThi.Value
                            };
                            QLTTN.BuoiThis.InsertOnSubmit(BT);
                            QLTTN.SubmitChanges();

                            foreach (var hs in DSHS)
                            {
                                QLTTN.BaiLams.InsertOnSubmit(new BaiLam
                                {
                                    maHS   = hs.maHS,
                                    maDT   = BT.maDT,
                                    maKT   = KTCCN.maKT,
                                    DiemSo = -1
                                });
                            }
                        }
                    }

                    QLTTN.SubmitChanges();
                    frmgv.LoadQLKTOTDgvKyThi();
                    MessageBox.Show("Cập nhật thành công", "Thông báo");
                    this.Close();
                }
                catch (Exception exc)
                {
                    MessageBox.Show($"KHÔNG THỂ CẬP NHẬT KỲ THI ĐÃ DIỄN RA {Environment.NewLine}{exc.Message}", "Thông báo từ btnCapNhatKT", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return;
                }
            };
        }