private void btnLuu_Click(object sender, EventArgs e)
        {
            if (XL2.KiemtraKetnoiCSDL() == false)
            {
                return;
            }

            string maNV  = tbMaNV.Text;
            string hoten = tbHoTenNV.Text.TrimEnd('?', '.', ',');

            string[] words    = hoten.Split(' ');
            string   ten      = (words.Last(item => item != string.Empty));
            int      gioitinh = (radNam.Checked) ? 0 : 1;
            int      maCC;

            if (int.TryParse(tbMaCC.Text, out maCC) == false)
            {
                ACMessageBox.Show("Mã chấm công phải là số hợp lệ.", Resources.Caption_Loi, 2000);
                return;
            }
            string   tenCC = tbUserEnrollName.Text;
            string   mathetu = tbMaTheTu.Text;
            DateTime ngayvaolam = dtpNgayVaoLam.Value.Date;
            int      idchucvu = (int)cbChucVu.SelectedValue;
            int      idphong = (int)cbPhongBan.SelectedValue;
            string   tenphong = (cbPhongBan.SelectedItem != null) ? cbPhongBan.SelectedItem.ToString() : cbPhongBan.SelectedText;
            int      idlichtrinh = (int)cbLichTrinh.SelectedValue;
            string   tenLichTrinh = (cbLichTrinh.SelectedItem != null) ? cbLichTrinh.SelectedItem.ToString() : cbLichTrinh.SelectedText;
            float    hslcb, hslcv, hsbhxhcongthem;

            if (float.TryParse(tbHSLCB.Text, out hslcb) == false ||
                float.TryParse(tbHSLCV.Text, out hslcv) == false ||
                float.TryParse(tbHSBHXHCongThem.Text, out hsbhxhcongthem) == false)
            {
                ACMessageBox.Show(Resources.Text_HeSoLCB_CV_BHXH_ChuaHopLe, Resources.Caption_Loi, 2000);
                return;
            }
            bool userEnabled = checkUserEnabled.Checked;

            if (mode == 1)
            {
                var tableKiemTraTonTai = SqlDataAccessHelper.ExecuteQueryString(
                    "select * from UserInfo where UserEnrollNumber = @UserEnrollNumber",
                    new string[] { "@UserFullCode", "@UserEnrollNumber" },
                    new object[] { maNV, maCC });
                if (tableKiemTraTonTai.Rows.Count > 0)
                {
                    ACMessageBox.Show("Mã nhân viên hoặc mã chấm công đã tồn tại trong CSDL. Vui lòng chọn mã khác.", Resources.Caption_Loi, 2000);
                    return;
                }
            }
            #region xác nhận trước khi lưu
            if (MessageBox.Show(Resources.Text_XacNhanLuuThongTinNV, Resources.Caption_XacNhan, MessageBoxButtons.OKCancel) == DialogResult.Cancel)
            {
                return;
            }
            #endregion

            #region execute query

            int kq1 = SqlDataAccessHelper.ExecNoneQueryString(
                @" UPDATE UserInfo Set 
								UserFullCode = @UserFullCode, UserFullName = @UserFullName, UserLastName = @UserLastName, UserEnrollName = @UserEnrollName,
								  UserCardNo = @UserCardNo, UserHireDay = @UserHireDay, UserIDTitle = @IDChucVu, UserSex = @UserSex, 
								  UserEnabled = @UserEnabled, UserIDD = @UserIDD, SchID = @SchID, 
								  HeSoLuongCB = @HeSoLuongCB, HeSoLuongSP = @HeSoLuongSP, HSBHCongThem = @HSBHCongThem

								where UserEnrollNumber = @UserEnrollNumber

							if ( @@ROWCOUNT = 0 )  
							INSERT INTO UserInfo (  UserFullCode,  UserFullName,  UserLastName,  UserEnrollNumber,  UserEnrollName,
									UserCardNo,  UserHireDay,  UserIDTitle,  UserSex,  UserPrivilege,  UserEnabled,
									UserIDD,  SchID,  HeSoLuongCB,  HeSoLuongSP,  HSBHCongThem,  
									PushCardID,  UserPW, UserGroup, UserTZ) 
							VALUES (  @UserFullCode,  @UserFullName,  @UserLastName,  @UserEnrollNumber,  @UserEnrollName,
									  @UserCardNo,  @UserHireDay,  @IDChucVu,  @UserSex,  @UserPrivilege,  @UserEnabled,
									  @UserIDD,  @SchID,  @HeSoLuongCB,  @HeSoLuongSP,  @HSBHCongThem,  
									  @PushCardID,  @UserPW, @UserGroup, @UserTZ )"                                    ,
                new string[] {
                "@UserFullCode", "@UserFullName", "@UserLastName", "@UserEnrollNumber", "@UserEnrollName",
                "@UserCardNo", "@UserHireDay", "@IDChucVu", "@UserSex",
                "@UserEnabled", "@UserIDD", "@SchID",
                "@HeSoLuongCB", "@HeSoLuongSP", "@HSBHCongThem",
                "@UserPrivilege", "@PushCardID", "@UserPW", "@UserGroup", "@UserTZ"
            },
                new object[] {
                maNV, hoten, ten, maCC, tenCC,
                mathetu, ngayvaolam, idchucvu, gioitinh,
                userEnabled, idphong, idlichtrinh,
                hslcb, hslcv, hsbhxhcongthem,
                0, "[0000000000]", string.Empty, 1, "0000000000000000",
            });
            string noidung =
                @"Lưu thông tin nhân viên có mã chấm công [{0}], mã nhân viên [{1}], hệ số lương cơ bản [{2}], hệ số lương sản phẩm [{3}], hệ số bảo hiểm cộng thêm cho lãnh đạo [{4}], tình trạng hoạt động [{5}], phòng ban [{6}], lịch trình [{7}]";
            DAO5.GhiNhatKyThaotac("Lưu thông tin nhân viên", string.Format(noidung,
                                                                           maCC, maNV, hslcb.ToString("0.00"), hslcv.ToString("0.00"), hsbhxhcongthem.ToString("0.00"), userEnabled, tenphong, tenLichTrinh), maCC: maCC);

            #endregion
            if (checkLamCongnhat.Enabled && checkLamCongnhat.Checked)
            {
                var ngayBD        = dtpNgayBDCongnhat.Value.Date;
                var ngayKT        = dtpNgayKTCongnhat.Value.Date;
                var laNVChinhthuc = checkNVChinhThuc.Checked;
                if (ngayBD > ngayKT)                 // hoán vị ngày bắt đầu kết thúc nếu bị ngược
                {
                    var temp = ngayBD;
                    ngayKT = ngayBD;
                    ngayBD = temp;
                }
                //thực hiện tách nếu làm công nhật ngày bd và kt là nhiều tháng liên tiếp
                List <DateTime> arrNgayBD, arrNgayKT;
                XL2.TachThang(ngayBD, ngayKT, out arrNgayBD, out arrNgayKT);
                for (int i = 0; i < arrNgayBD.Count; i++)
                {
                    int kq2 = DAO5.UpdIns_ThuChiNVCongNhat(new DateTime(arrNgayBD[i].Year, arrNgayBD[i].Month, 1), maCC, idphong, tenphong, arrNgayBD[i], arrNgayKT[i], 0, 0d, laNVChinhthuc);
                    if (kq2 == 0)
                    {
                        MessageBox.Show(Resources.Text_CoLoi);
                        break;
                    }
                }
            }

            if (kq1 == 0)
            {
                MessageBox.Show(Resources.Text_CoLoi, Resources.Caption_Loi);
            }
            else
            {
                IsReload = true;
                if (mode == 1)
                {
                    ACMessageBox.Show("Thêm nhân viên thành công.", Resources.Caption_ThongBao, 2000);
                    MyUtility.ClearControlText(tbMaNV, tbHoTenNV, tbMaCC, tbUserEnrollName);
                    radNam.Checked            = true;
                    tbMaTheTu.Text            = "0000000000";
                    tbHSLCB.Text              = "000";
                    tbHSLCV.Text              = "000";
                    tbHSBHXHCongThem.Text     = "000";
                    cbChucVu.SelectedIndex    = 0;
                    cbPhongBan.SelectedIndex  = 0;
                    cbLichTrinh.SelectedIndex = 0;
                    checkUserEnabled.Checked  = true;
                }
                else
                {
                    Close();
                }
            }
        }