Beispiel #1
0
        private void btnSubmit_Click(object sender, EventArgs e)
        {
            try
            {
                if (checkEmptyBox())
                {
                    con = new SqlConnection(cs);
                    con.Open();

                    string ct = "SELECT CMND FROM KHACH_HANG WHERE CMND=@find";
                    cmd            = new SqlCommand(ct);
                    cmd.Connection = con;
                    cmd.Parameters.Add(new SqlParameter("@find", System.Data.SqlDbType.NVarChar, 15, "CMND")).Value = txtCMND.Text;
                    rdr = cmd.ExecuteReader();

                    if (rdr.Read())
                    {
                        MessageBox.Show("Đã có khách hàng này ", "Input error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        DialogResult dialogResult = MessageBox.Show("Bạn có muốn cập nhật thông tin cho khách hàng ?", "Information", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

                        if (dialogResult == DialogResult.Yes)
                        {
                            update_Guest();
                            rdr.Close();
                            return;
                        }
                        else
                        {
                            rdr.Close();
                            return;
                        }
                    }
                    else
                    {
                        checkin_Guest();

                        txtLastName.Text    = "";
                        txtFirstName.Text   = "";
                        txtCMND.Text        = "";
                        txtAddress.Text     = "";
                        txtNationality.Text = "";
                        txtEmail.Text       = "";

                        con.Close();

                        GuestListForm glf = GuestListForm.Instance();
                        glf.load_GuestList();
                    }
                }
                else
                {
                    return;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
Beispiel #2
0
 protected internal static GuestListForm Instance()
 {
     if (_instance == null)
     {
         _instance = new GuestListForm();
     }
     return(_instance);
 }
Beispiel #3
0
 private void btnGuestList_Click(object sender, EventArgs e)
 {
     if (!panel3.Controls.Contains(GuestListForm.Instance()))
     {
         panel3.Controls.Add(GuestListForm._instance);
         GuestListForm._instance.Dock = DockStyle.Fill;
         GuestListForm._instance.BringToFront();
         GuestListForm._instance.Visible = true;
         GuestListForm._instance.load_GuestList();
     }
     else
     {
         GuestListForm._instance.BringToFront();
         GuestListForm._instance.Visible = true;
         GuestListForm._instance.load_GuestList();
     }
 }
Beispiel #4
0
        private void btnSubmit_Click(object sender, EventArgs e)
        {
            if (!checkEmpty()) //ĐẦY ĐỦ
            {
                int x = checkCMND();
                if (x != 0) //KT CMND KH NÀY CÓ ĐANG Checkin =>>không có CHECKIN HOẶC ĐÃ CHECKOUT, hoặc k có trng db
                {
                    if (x == 1)
                    {
                        if (!checkNumOfPeople())
                        {
                            if (checkRes() == 0)
                            {
                                updateGuest();
                                reservation();
                                update_Room();
                                MessageBox.Show("Đặt trước thành công", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);

                                txtLastName.Text    = "";
                                txtFirstName.Text   = "";
                                txtCMND.Text        = "";
                                txtNumOfPeople.Text = "";

                                ReservationListForm.Instance().load_ReservationList();
                                RoomListForm.Instance().load_RoomList();
                                GuestListForm.Instance().load_GuestList();
                                this.Hide();
                            }
                            else
                            {
                                MessageBox.Show("Khách hàng này đã đặt trước", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                return;
                            }
                        }
                        else
                        {
                            MessageBox.Show("Vượt quá số người quy định", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            return;
                        }
                    }
                    else
                    {
                        if (!checkNumOfPeople())
                        {
                            if (checkRes() == 0)
                            {
                                insertGuest();
                                reservation();
                                update_Room();
                                MessageBox.Show("Đặt trước thành công", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);

                                txtLastName.Text    = "";
                                txtFirstName.Text   = "";
                                txtCMND.Text        = "";
                                txtNumOfPeople.Text = "";

                                ReservationListForm.Instance().load_ReservationList();
                                RoomListForm.Instance().load_RoomList();
                                GuestListForm.Instance().load_GuestList();

                                this.Hide();
                            }
                            else
                            {
                                MessageBox.Show("Khách hàng này đã đặt trước", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                return;
                            }
                        }
                        else
                        {
                            MessageBox.Show("Vượt quá số người quy định", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            return;
                        }
                    }
                }
                else
                {
                    MessageBox.Show("Khách hàng này đã Checkin", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
            }
            else //CHƯA ĐIỀN ĐẦY ĐỦ Ô TRỐNG
            {
                return;
            }
        }
Beispiel #5
0
        private void Transact()
        {
            tran = null;
            using (con = new SqlConnection(cs))
            {
                con.Open();
                using (tran = con.BeginTransaction(IsolationLevel.Serializable))
                {
                    //Thread.Sleep(5000);
                    try
                    {
                        //TÌM KHÁCH HÀNG TRONG DB
                        string cmnd    = "";
                        string stateKH = "";
                        cmd = new SqlCommand("SELECT CMND,TrangThai FROM KHACH_HANG WHERE CMND = @cmnd", con, tran);
                        cmd.Parameters.AddWithValue("@cmnd", txtCMND.Text.Trim());
                        rdr = cmd.ExecuteReader();
                        if (rdr.Read())
                        {
                            cmnd    = rdr["CMND"].ToString();
                            stateKH = rdr["TrangThai"].ToString();
                        }
                        rdr.Close();
                        //KHÔNG CÓ KHÁCH HÀNG TRONG DB
                        if (cmnd.Equals(""))
                        {
                            //THÊM THÔNG TIN KHÁCH HÀNG VÀO DB
                            cmd = new SqlCommand("INSERT INTO KHACH_HANG(HoDem,Ten,CMND,TrangThai) VALUES(@hodem,@ten,@cmnd,@trangthaikh)", con, tran);
                            cmd.Parameters.AddWithValue("@hodem", txtLastName.Text.Trim());
                            cmd.Parameters.AddWithValue("@ten", txtFirstName.Text.Trim());
                            cmd.Parameters.AddWithValue("@cmnd", txtCMND.Text.Trim());
                            cmd.Parameters.AddWithValue("@trangthaikh", "Checkin");
                            tran.Save("insertGuest");
                            cmd.ExecuteNonQuery();
                        }
                        else //CÓ KHÁCH HÀNG TRONG DB
                        {
                            //KIỂM TRA XEM KHÁCH HÀNG CÓ ĐANG CHECKIN
                            if (stateKH.Equals("Checkin")) //CÓ
                            {
                                MessageBox.Show("Khách hàng này đang Checkin", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                tran.Rollback();
                                return;
                            }
                            else if (stateKH.Equals("Reserve")) //KHÁCH HÀNG CÓ ĐẶT TRƯỚC
                            {
                                //CẬP NHẬT TRẠNG THÁI SANG CHECKIN,
                                cmd = new SqlCommand("UPDATE KHACH_HANG SET TrangThai=@trangthaikh WHERE CMND=@cmnd", con, tran);
                                cmd.Parameters.AddWithValue("@trangthaikh", "Checkin");
                                cmd.Parameters.AddWithValue("@cmnd", txtCMND.Text.Trim());
                                tran.Save("updateGuestState");
                                cmd.ExecuteNonQuery();
                                //CẬP NHẬT DS ĐẶT TRƯỚC SANG ĐÃ CHECKIN,
                                cmd = new SqlCommand("UPDATE DAT_TRUOC SET TrangThai=@trangthaidt WHERE CMND=@cmnd AND MaPhong=@maphong", con, tran);
                                cmd.Parameters.AddWithValue("@maphong", lblRoom.Text);
                                cmd.Parameters.AddWithValue("@cmnd", txtCMND.Text.Trim());
                                cmd.Parameters.AddWithValue("@trangthaidt", "Checkin");
                                tran.Save("updateReserve");
                                cmd.ExecuteNonQuery();
                            }
                            else //KHÔNG
                            {
                                //CẬP NHẬT TRẠNG THÁI SANG CHECKIN
                                cmd = new SqlCommand("UPDATE KHACH_HANG SET TrangThai=@trangthaikh WHERE CMND =@cmnd", con, tran);
                                cmd.Parameters.AddWithValue("@cmnd", txtCMND.Text.Trim());
                                cmd.Parameters.AddWithValue("@trangthaikh", "Checkin");
                                tran.Save("updateGuest");
                                cmd.ExecuteNonQuery();
                            }
                        }
                        //KIỂM TRA PHÒNG
                        cmd = new SqlCommand("SELECT GioiHan,SoNguoiHienCo,TinhTrang FROM PHONG WHERE MaPhong=@maphong", con, tran);
                        cmd.Parameters.AddWithValue("@maphong", lblRoom.Text);
                        rdr = cmd.ExecuteReader();
                        int    gioihan   = 0;
                        int    snhienco  = 0;
                        int    sndangki  = (int)Val(txtPeopleCount.Text.Trim());
                        string stateRoom = "";
                        if (rdr.Read())
                        {
                            gioihan   = (int)Val(rdr["GioiHan"].ToString());
                            snhienco  = (int)Val(rdr["SoNguoiHienCo"].ToString());
                            stateRoom = rdr["TinhTrang"].ToString();
                        }
                        else
                        {
                            MessageBox.Show("Không tìm được phòng này");
                            tran.Rollback();
                            return;
                        }
                        rdr.Close();
                        //SO SÁNH SỐ NGƯỜI ĐĂNG KÍ VỚI SỐ NGƯỜI GIỚI HẠN
                        if (gioihan == snhienco)
                        {
                            MessageBox.Show("Phòng đầy!!!,Xin chọn phòng khác");
                            tran.Rollback();
                            return;
                        }
                        else if (snhienco + sndangki > gioihan)
                        {
                            MessageBox.Show("Đăng kí vượt quá số người qui định " + ((sndangki + snhienco) - gioihan) + " người." + ",Xin chọn phòng khác");
                            tran.Rollback();
                            return;
                        }
                        //KIỂM TRA NGƯỜI CHECKIN CHÍNH, LƯU VÀO HOÁ ĐƠN, LƯU GIAO DỊCH
                        if (snhienco == 0 && (stateRoom.Equals("Trống") || stateRoom.Equals("Đặt trước")))
                        {
                            string idkh = "";
                            //TÌM KHÁCH HÀNG
                            cmd = new SqlCommand("SELECT CMND FROM KHACH_HANG WHERE CMND=@cmnd", con, tran);
                            cmd.Parameters.AddWithValue("@cmnd", txtCMND.Text.Trim());
                            rdr = cmd.ExecuteReader();
                            while (rdr.Read())
                            {
                                idkh = rdr["CMND"].ToString();
                            }
                            rdr.Close();
                            if (idkh.Equals(""))
                            {
                                MessageBox.Show("Xảy ra lỗi...,Xin thử lại");
                                tran.Rollback();
                                return;
                            }
                            ////KIỂM TRA NGƯỜI DÙNG CÓ ĐANG ĐĂNG NHẬP
                            //cmd = new SqlCommand("SELECT TrangThai FROM NGUOI_DUNG WHERE idND=@find", con, tran);
                            //cmd.Parameters.AddWithValue("@find", HomeForm.Instance().lblIDUser.Text);
                            //rdr = cmd.ExecuteReader();
                            //if (rdr.Read())
                            //{
                            //    if (rdr["TrangThai"].Equals("0"))
                            //    {
                            //        this.Hide();
                            //        LoginForm login = new LoginForm();
                            //        login.Show();
                            //        tran.Rollback();
                            //        return;
                            //    }
                            //}
                            //rdr.Close();
                            //TẠO HOÁ ĐƠN
                            cmd = new SqlCommand("INSERT INTO HOA_DON(idND,CMND,MaPhong,NgayLap) VALUES(@idnd,@cmnd,@maphong,@ngaylap)", con, tran);
                            cmd.Parameters.AddWithValue("@idnd", HomeForm.Instance().lblIDUser.Text);
                            cmd.Parameters.AddWithValue("@cmnd", txtCMND.Text.Trim());
                            cmd.Parameters.AddWithValue("@maphong", lblRoom.Text);
                            cmd.Parameters.AddWithValue("@ngaylap", datetime);

                            tran.Save("insertHD");
                            cmd.ExecuteNonQuery();

                            //LẤY ID HD, TẠO CTHD
                            string idhd = "";
                            cmd.CommandText = "SELECT idHD FROM HOA_DON WHERE MaPhong=@maphong AND CMND=@cmnd ORDER BY NgayLap DESC";
                            //cmd.Parameters.AddWithValue("@idkh", idkh);
                            //cmd.Parameters.AddWithValue("@trangthaihd", 0);
                            rdr = cmd.ExecuteReader();
                            if (rdr.Read())
                            {
                                idhd = rdr["idHD"].ToString();
                            }
                            rdr.Close();
                            if (idhd.Equals(""))
                            {
                                MessageBox.Show("Xảy ra lỗi...,Xin thử lại");
                                tran.Rollback();
                                return;
                            }
                            cmd.CommandText = "INSERT INTO CT_HOA_DON(idHD,SoNgay,SoNguoi,NgayDangKi,TraTruoc) VALUES(@idhd,@songay,@songuoi,@ngaydangki,@tratruoc)";
                            cmd.Parameters.AddWithValue("@idhd", idhd);
                            cmd.Parameters.AddWithValue("@songuoi", (int)Val(txtPeopleCount.Text));
                            cmd.Parameters.AddWithValue("@songay", (int)Val(txtNumOfDay.Text));
                            cmd.Parameters.AddWithValue("@ngaydangki", datetime);
                            cmd.Parameters.AddWithValue("@tratruoc", decimal.Parse(txtAdvance.Text));
                            tran.Save("insertCTHD");
                            cmd.ExecuteNonQuery();

                            //TẠO GIAO DỊCH
                            cmd.CommandText = "INSERT INTO GIAO_DICH(LoaiDK,CMND,MaPhong,NgayDangKi,SoNguoi,TrangThai) VALUES(@loaidk,@cmnd,@maphong,@ngaydangki,@songuoi,@trangthaigd)";
                            cmd.Parameters.AddWithValue("@loaidk", 0); //0-người đăng kí chính
                            cmd.Parameters.AddWithValue("@trangthaigd", "Active");
                            //cmd.Parameters.AddWithValue("@cmnd", txtCMND.Text.Trim());
                            tran.Save("insertGD");
                            cmd.ExecuteNonQuery();

                            //CẬP NHẬT TÌNH TRẠNG PHÒNG
                            cmd.CommandText = "UPDATE PHONG SET TinhTrang=@tinhtrangphong,SoNguoiHienCo+=@snhienco WHERE MaPhong=@maphong";
                            cmd.Parameters.AddWithValue("@tinhtrangphong", "Đang sử dụng"); //0-người đăng kí chính
                            cmd.Parameters.AddWithValue("@snhienco", 1);
                            tran.Save("updateRoom");
                            cmd.ExecuteNonQuery();
                        }
                        //NGƯỜI PHỤ, KHÔNG LƯU HOÁ ĐƠN, CẬP NHẬT PHÒNG, CẬP NHẬT GIAO DỊCH
                        else
                        {
                            string CMND = "";
                            //TÌM KHÁCH HÀNG
                            cmd = new SqlCommand("SELECT CMND FROM KHACH_HANG WHERE CMND=@cmnd", con, tran);
                            cmd.Parameters.AddWithValue("@cmnd", txtCMND.Text.Trim());
                            rdr = cmd.ExecuteReader();
                            while (rdr.Read())
                            {
                                CMND = rdr["CMND"].ToString();
                            }
                            rdr.Close();
                            if (CMND.Equals(""))
                            {
                                MessageBox.Show("Xảy ra lỗi...,Xin thử lại");
                                tran.Rollback();
                                return;
                            }
                            //TẠO GIAO DỊCH
                            cmd.CommandText = "INSERT INTO GIAO_DICH(LoaiDK,CMND,MaPhong,NgayDangKi,SoNguoi,TrangThai) VALUES(@loaidk,@cmnd,@maphong,@ngaydangki,@songuoi,@trangthaigd)";
                            cmd.Parameters.AddWithValue("@loaidk", 1); //1-người đăng kí phụ
                            cmd.Parameters.AddWithValue("@trangthaigd", "Active");
                            cmd.Parameters.AddWithValue("@maphong", lblRoom.Text);
                            cmd.Parameters.AddWithValue("@ngaydangki", datetime);
                            cmd.Parameters.AddWithValue("@songuoi", 1);
                            tran.Save("insertGD");
                            cmd.ExecuteNonQuery();

                            //CẬP NHẬT TÌNH TRẠNG PHÒNG
                            cmd.CommandText = "UPDATE PHONG SET TinhTrang=@tinhtrangphong,SoNguoiHienCo+=@snhienco WHERE MaPhong=@maphong";
                            cmd.Parameters.AddWithValue("@tinhtrangphong", "Đang sử dụng"); //0-người đăng kí chính
                            cmd.Parameters.AddWithValue("@snhienco", 1);
                            tran.Save("updateRoom");
                            cmd.ExecuteNonQuery();
                        }
                        tran.Commit();
                        MessageBox.Show("CHECKIN thành công.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Commit exeption type: " + ex.GetType());
                        MessageBox.Show("Commit exeption type: " + ex.StackTrace);
                        MessageBox.Show("Message :" + ex.Message);
                        try
                        {
                            if (tran != null)
                            {
                                tran.Rollback();
                            }
                        }
                        catch (Exception ex2)
                        {
                            MessageBox.Show("Rollback exeption type :" + ex2.GetType());
                            MessageBox.Show("Message :" + ex2.Message);
                        }
                    }
                    finally
                    {
                        con.Close();
                        lblCurrentPeopleCount.Text = loadCurrentPeople();
                        ReservationListForm.Instance().load_ReservationList();
                        GuestListForm.Instance().load_GuestList();
                        RoomListForm.Instance().load_RoomList();
                    }
                }
            }
        }
Beispiel #6
0
        private void listView1_DoubleClick(object sender, EventArgs e)
        {
            int temp = checkStatus(this.listView1.SelectedItems[0].SubItems[7].Text.ToString());

            //0-Đang đặt 1-HUỶ 2-Đã Checkin
            if (temp == 0)
            {
                DialogResult dr = MessageBox.Show("Bạn có muốn CHECKIN ?", "Information", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
                if (dr == DialogResult.Yes)
                {
                    HomeForm    hf = HomeForm.Instance();
                    CheckinForm cf = CheckinForm.Instance();
                    if (!hf.panel3.Controls.Contains(cf))
                    {
                        hf.panel3.Controls.Add(cf);
                        cf.Dock = DockStyle.Fill;
                        cf.BringToFront();
                        cf.Visible = true;

                        getRoomData(listView1.SelectedItems[0].SubItems[4].Text.ToString());

                        cf.lblRoom.Text               = listView1.SelectedItems[0].SubItems[4].Text.ToString();
                        cf.txtCMND.Text               = listView1.SelectedItems[0].SubItems[3].Text.ToString();
                        cf.txtLastName.Text           = listView1.SelectedItems[0].SubItems[1].Text.ToString();
                        cf.txtFirstName.Text          = listView1.SelectedItems[0].SubItems[2].Text.ToString();
                        cf.lblOccupancy.Text          = tempRoomOccu.ToString();
                        cf.lblCurrentPeopleCount.Text = tempRoomCurr.ToString();
                        cf.lblRoomType.Text           = tempRoomType;

                        this.Hide();
                    }
                    else
                    {
                        cf.BringToFront();
                        cf.Visible = true;


                        getRoomData(listView1.SelectedItems[0].SubItems[4].Text.ToString());
                        cf.lblRoom.Text               = listView1.SelectedItems[0].SubItems[4].Text.ToString();
                        cf.txtCMND.Text               = listView1.SelectedItems[0].SubItems[3].Text.ToString();
                        cf.txtLastName.Text           = listView1.SelectedItems[0].SubItems[1].Text.ToString();
                        cf.txtFirstName.Text          = listView1.SelectedItems[0].SubItems[2].Text.ToString();
                        cf.lblOccupancy.Text          = tempRoomOccu.ToString();
                        cf.lblCurrentPeopleCount.Text = tempRoomCurr.ToString();
                        cf.lblRoomType.Text           = tempRoomType;

                        this.Hide();
                    }
                }
                else if (dr == DialogResult.No)
                {
                    DialogResult dialog = MessageBox.Show("Bạn muốn HUỶ?", "Information", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
                    if (dialog == DialogResult.Yes)
                    {
                        cancel_Reservation(listView1.SelectedItems[0].SubItems[4].Text.ToString(), listView1.SelectedItems[0].SubItems[3].Text.ToString());
                        RoomListForm.Instance().load_RoomList();
                        load_ReservationList();
                        GuestListForm.Instance().load_GuestList();
                    }
                    else
                    {
                        return;
                    }
                }
                else
                {
                    return;
                }
            }
            else if (temp == 1) //HUỶ
            {
                MessageBox.Show("Khách hàng đã huỷ ", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else // Đã checkin
            {
                MessageBox.Show("Khách hàng đã CHECKIN ", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
Beispiel #7
0
 private void btnUpdate_Click(object sender, EventArgs e)
 {
     update_Guest();
     GuestListForm.Instance().load_GuestList();
     CheckOutForm.Instance().load_All();
 }
Beispiel #8
0
        private void Transaction()
        {
            using (con = new SqlConnection(cs))
            {
                con.Open();
                using (tran = con.BeginTransaction(IsolationLevel.Serializable))
                {
                    try
                    {
                        int flag = 0;

                        //KIỂM TRA TÌNH TRẠNG KHÁCH HÀNG
                        cmd = new SqlCommand("SELECT CMND,TrangThai FROM KHACH_HANG WHERE CMND = @cmnd", con, tran);
                        cmd.Parameters.AddWithValue("@cmnd", lblCMND.Text);
                        rdr = cmd.ExecuteReader();
                        string stateKH = "";
                        string cmnd    = "";
                        while (rdr.Read())
                        {
                            stateKH = rdr["TrangThai"].ToString();
                            cmnd    = rdr["CMND"].ToString();
                        }
                        rdr.Close();

                        if (stateKH.Equals("") || stateKH.Equals("Checkout") || stateKH.Equals("Reserve"))
                        {
                            flag = 1;
                        }
                        //KIỂM TRA TÌNH TRẠNG PHÒNG
                        cmd = new SqlCommand("SELECT TinhTrang FROM PHONG WHERE MaPhong = @maphong", con, tran);
                        cmd.Parameters.AddWithValue("@maphong", lblRoom.Text);
                        rdr = cmd.ExecuteReader();
                        string stateRoom = "";
                        while (rdr.Read())
                        {
                            stateRoom = rdr["TinhTrang"].ToString();
                        }
                        rdr.Close();
                        if (stateRoom.Equals("") || stateRoom.Equals("Đặt trước") || stateRoom.Equals("Trống"))
                        {
                            flag = 1;
                        }
                        //KIỂM TRA GIAO_DỊCH
                        cmd = new SqlCommand("  ", con, tran);
                        cmd.Parameters.AddWithValue("@maphong", lblRoom.Text);
                        cmd.Parameters.AddWithValue("@trangthai", "Active");
                        rdr = cmd.ExecuteReader();
                        string        stateGD  = "";
                        List <string> listCMND = new List <string>();
                        while (rdr.Read())
                        {
                            stateGD = rdr["TrangThai"].ToString();
                            listCMND.Add(rdr["CMND"].ToString());
                        }
                        rdr.Close();
                        if (stateGD.Equals(""))
                        {
                            flag = 1;
                        }
                        //KIỂM TRA HOÁ ĐƠN
                        cmd = new SqlCommand("SELECT idHD,NgayLap FROM HOA_DON WHERE CMND = @cmnd AND MaPhong=@maphong ORDER BY NgayLap DESC", con, tran);
                        cmd.Parameters.AddWithValue("@maphong", lblRoom.Text);
                        cmd.Parameters.AddWithValue("@cmnd", cmnd);
                        rdr = cmd.ExecuteReader();
                        string   idHD   = "";
                        DateTime ngaydk = DateTime.Now;

                        if (rdr.Read())
                        {
                            idHD   = rdr["idHD"].ToString();
                            ngaydk = Convert.ToDateTime(rdr["NgayLap"].ToString());
                        }

                        rdr.Close();
                        tran.Save("updateGuest");

                        foreach (string item in listCMND)
                        {
                            cmd = new SqlCommand("UPDATE KHACH_HANG SET TrangThai=@trangthai WHERE CMND=@cmnd", con, tran);
                            cmd.Parameters.AddWithValue("@trangthai", "Checkout");
                            cmd.Parameters.AddWithValue("@cmnd", item);
                            cmd.ExecuteNonQuery();
                        }
                        //KIỂM TRA DS_DICH VU
                        cmd = new SqlCommand("SELECT A.Gia,B.SoLuong,B.idDSDV FROM DICH_VU A,DS_DICH_VU B WHERE A.idDV=B.idDV AND idHD=@idhd", con, tran);
                        cmd.Parameters.AddWithValue("@idhd", idHD);
                        rdr = cmd.ExecuteReader();
                        decimal       totalDV  = 0;
                        List <string> listDSDV = new List <string>();
                        while (rdr.Read())
                        {
                            totalDV += (decimal)Val(rdr["Gia"].ToString()) * (decimal)Val(rdr["SoLuong"].ToString());
                            listDSDV.Add(rdr["idDSDV"].ToString());
                        }
                        rdr.Close();
                        //TRẠNG THÁI
                        if (flag == 1)
                        {
                            MessageBox.Show("Đã checkout!!!", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            this.Hide();
                            return;
                        }
                        //LẤY TIỀN TRẢ TRƯỚC TỪ CT_HOA_DON
                        decimal tratruoc = 0;
                        cmd = new SqlCommand("SELECT TraTruoc FROM CT_HOA_DON WHERE idHD=@idhd", con, tran);
                        cmd.Parameters.AddWithValue("@idhd", idHD);
                        rdr = cmd.ExecuteReader();
                        while (rdr.Read())
                        {
                            tratruoc = decimal.Parse(rdr["TraTruoc"].ToString());
                        }
                        rdr.Close();

                        //TÍNH TIỀN

                        decimal total   = ((calculate_Roomprice(ngaydk, DateTime.Now, lblRoomType.Text, 80000, 20000) + totalDV) - tratruoc);
                        decimal cash    = Convert.ToDecimal(txtCASH.Text);
                        decimal changes = cash - total;

                        if (total < 0)
                        {
                            txtChanges.Text = total.ToString(numberformat);
                        }

                        if (changes < 0)
                        {
                            MessageBox.Show("Không đủ tiền!!!,\n" + total.ToString(numberformat), "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            return;
                        }
                        else
                        {
                            txtChanges.Text = changes.ToString(numberformat);
                        }
                        //TÍNH SỐ NGÀY THỰC TẾ
                        TimeSpan ts     = DateTime.Now.Subtract(ngaydk);
                        decimal  songay = Convert.ToDecimal(ts.Days);
                        //CẬP NHẬT DANH SÁCH ĐẶT TRƯỚC
                        cmd = new SqlCommand("UPDATE DAT_TRUOC SET TrangThai=@trangthai WHERE MaPhong=@maphong AND CMND=@cmnd", con, tran);
                        cmd.Parameters.AddWithValue("@trangthai", "Checkout");
                        cmd.Parameters.AddWithValue("@maphong", lblRoom.Text);
                        cmd.Parameters.AddWithValue("@cmnd", lblCMND.Text);
                        tran.Save("updateReserve");
                        cmd.ExecuteNonQuery();
                        //CẬP NHẬT PHÒNG
                        cmd = new SqlCommand("UPDATE PHONG SET TinhTrang=@trangthai,SoNguoiHienCo=@snhc WHERE MaPhong=@maphong", con, tran);
                        cmd.Parameters.AddWithValue("@trangthai", "Trống");
                        cmd.Parameters.AddWithValue("@maphong", lblRoom.Text);
                        cmd.Parameters.AddWithValue("@snhc", 0);
                        tran.Save("updateRoom");
                        cmd.ExecuteNonQuery();
                        //CẬP NHẬT GIAO DỊCH
                        foreach (string item in listCMND)
                        {
                            cmd = new SqlCommand("UPDATE GIAO_DICH SET TrangThai=@afterState,NgayTra=@ngaytra WHERE CMND=@cmnd AND MaPhong=@maphong AND TrangThai=@firstState", con, tran);
                            cmd.Parameters.AddWithValue("@afterState", "");
                            cmd.Parameters.AddWithValue("@firstState", "Active");
                            cmd.Parameters.AddWithValue("@cmnd", item);
                            cmd.Parameters.AddWithValue("@maphong", lblRoom.Text);
                            cmd.Parameters.AddWithValue("@ngaytra", DateTime.Now);
                            cmd.ExecuteNonQuery();
                        }
                        tran.Save("updateGD");


                        //CẬP NHẬT HOÁ ĐƠN
                        //cmd = new SqlCommand("UPDATE HOA_DON SET NgayTra=@ngaytra WHERE MaPhong=@maphong AND CMND=@cmnd AND idHD=@idHD", con, tran);
                        //cmd.Parameters.AddWithValue("@afterState", "1");
                        //cmd.Parameters.AddWithValue("@total", total);
                        //cmd.Parameters.AddWithValue("@maphong", lblRoom.Text);
                        //cmd.Parameters.AddWithValue("@cmnd", cmnd);
                        //cmd.Parameters.AddWithValue("@idhd", idHD);
                        //cmd.Parameters.AddWithValue("@sn", songay);
                        //cmd.Parameters.AddWithValue("@ngaytra", DateTime.Now);
                        //tran.Save("updateHD");
                        //cmd.ExecuteNonQuery();

                        //CẬP NHẬT CT_HOÁ ĐƠN
                        cmd = new SqlCommand("UPDATE CT_HOA_DON SET NgayTra=@ngaytra,TongTien=@total,TienDichVu=@tiendv,SoNgay=@sn WHERE idHD=@idHD", con, tran);
                        cmd.Parameters.AddWithValue("@tiendv", totalDV);
                        cmd.Parameters.AddWithValue("@total", total);
                        cmd.Parameters.AddWithValue("@sn", songay);
                        cmd.Parameters.AddWithValue("@idhd", idHD);
                        cmd.Parameters.AddWithValue("@ngaytra", DateTime.Now);

                        tran.Save("updateCTHD");
                        cmd.ExecuteNonQuery();

                        //CẬP NHẬT DANH SÁCH DỊCH VỤ
                        tran.Save("deleteDSDV");
                        foreach (string item in listDSDV)
                        {
                            cmd = new SqlCommand("DELETE DS_DICH_VU WHERE idDSDV=@idds", con, tran);
                            cmd.Parameters.AddWithValue("@idds", item);
                            cmd.ExecuteNonQuery();
                        }
                        listCMND.Clear();
                        listDSDV.Clear();
                        tran.Commit();
                        MessageBox.Show("Trả phòng thành công");
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Commit exeption type: " + ex.GetType());
                        MessageBox.Show("Stack trade: " + ex.StackTrace);
                        MessageBox.Show("Message :" + ex.Message);
                        try
                        {
                            if (tran != null)
                            {
                                tran.Rollback();
                            }
                        }
                        catch (Exception ex2)
                        {
                            MessageBox.Show("Rollback exeption type :" + ex2.GetType());
                            MessageBox.Show("Message :" + ex2.Message);
                        }
                    }
                    finally
                    {
                        con.Close();

                        ReservationListForm.Instance().load_ReservationList();
                        GuestListForm.Instance().load_GuestList();
                        RoomListForm.Instance().load_RoomList();
                    }
                }
            }
        }