private DataTable ThongKeCong_PC_Phep(DateTime ngayBD, DateTime ngayKT, DataTable TableUserIDD, List <int> dsExcludeMaCC, List <int> dsNhiemVuDangChon)
        {
            /* 1. chia thành các đoạn thời gian, xác định rõ đoạn nào đã kết công, đoạn nào chưa kết công
             * 2. thống kê các đoạn đã kết công
             * 3. thống kê các đoạn chưa kết công
             * 4. tổng hợp
             */
            //tbd nhớ kiểm tra khoảng thời gian tìm kiếm quá xa nhau thì báo vì dữ liệu quá nhiều sẽ gây lỗi
            List <List <DateTime> > arrDoanThoigian;

            ChiaDoanThoiGian(ngayBD, ngayKT, out arrDoanThoigian);
            List <List <DateTime> > arrDoanTGDaKetCong;
            List <List <DateTime> > arrDoanTGChuaKetCong;

            TachKC_ChuaKC(arrDoanThoigian, out arrDoanTGChuaKetCong, out arrDoanTGDaKetCong);

            DataTable        tableNhanVien = this.LayDSNhanVien(TableUserIDD, dsExcludeMaCC, dsNhiemVuDangChon);
            List <cUserInfo> listNhanVien  = new List <cUserInfo>();

            foreach (DataRow row in tableNhanVien.Rows)
            {
                cUserInfo nhanvien = new cUserInfo {
                    MaCC  = (int)row["UserEnrollNumber"],
                    MaNV  = row["UserFullCode"].ToString(),
                    TenNV = row["UserFullName"].ToString(),
                };
                XL.GetLichTrinhNV(nhanvien, row["SchID"] != DBNull.Value ? (int)row["SchID"] : (int?)null);
                listNhanVien.Add(nhanvien);
            }
            DataTable tableThongKe = this.ThongKe(listNhanVien, arrDoanTGChuaKetCong, arrDoanTGDaKetCong);

            return(tableThongKe);
        }
        private void treePhongBan_AfterSelect(object sender, TreeViewEventArgs e)
        {
            #region mỗi lần chọn node thì lấy ID node hiện tại và tất cả node con

            m_listIDPhongBan.Clear();
            e.Node.Expand();
            TreeNode topnode = XL.TopNode(e.Node);             //đưa về root để thực hiện từ trên xuống
            if (topnode != null)
            {
                XL.GetIDNodeAndChildNode1(e.Node, ref m_listIDPhongBan);                              // chỉ lấy các phòng ban được phép,
            }
            else
            {
                var temp = ((DataRow)e.Node.Tag);
                if ((int)temp["IsYes"] == 1)
                {
                    m_listIDPhongBan.Add((int)temp["ID"]);
                }
            }

            #endregion

            #region kiểm tra kết nối csdl , nếu mất kết nối thì đóng

            if (SqlDataAccessHelper.TestConnection(SqlDataAccessHelper.ConnectionString) == false)
            {
                ACMessageBox.Show(Resources.Text_MatKetNoiCSDL, Resources.Caption_Loi, 4000);
                Close();
                return;
            }

            #endregion
            DataTable tableMaPhong  = MyUtility.Array_To_DataTable("ArrUserIDD", m_listIDPhongBan);
            DataTable tableNhanVien = SqlDataAccessHelper.ExecSPQuery(SPName.UserInfo_DocDSNVThaoTac.ToString(), new SqlParameter("@ArrUserIDD", SqlDbType.Structured)
            {
                Value = tableMaPhong
            });
            List <cUserInfo> listNhanVien = new List <cUserInfo>();
            foreach (DataRow row in tableNhanVien.Rows)
            {
                cUserInfo nhanvien = new cUserInfo {
                    MaCC  = (int)row["UserEnrollNumber"],
                    MaNV  = row["UserFullCode"].ToString(),
                    TenNV = row["UserFullName"].ToString(),
                };
                XL.GetLichTrinhNV(nhanvien, row["SchID"] != DBNull.Value ? (int)row["SchID"] : (int?)null);
                listNhanVien.Add(nhanvien);
            }

            XL.TaoTableDSNV(m_DSNV, m_Bang_DSNV);

            #region tạo datasourcr cho autocomplete

            var Source = new AutoCompleteStringCollection();
            Source.AddRange((from nv in m_DSNV select nv.TenNV.ToUpperInvariant()).ToArray());
            tbSearch.AutoCompleteSource       = AutoCompleteSource.CustomSource;
            tbSearch.AutoCompleteMode         = AutoCompleteMode.SuggestAppend;
            tbSearch.AutoCompleteCustomSource = Source;

            #endregion

            dgrdDSNVTrgPhg.DataSource = m_Bang_DSNV;
            m_Bang_TongHopXemCong.Rows.Clear();
            m_Bang_GioKDQD.Rows.Clear();
            m_Bang_GioThieuCheck.Rows.Clear();
            m_Bang_ThK_TreSom.Rows.Clear();

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

            /* 1. lấy dsnv check, lấy tháng
             *
             */
            string strChecked_ArrMaCC = checkedDSNV.EditValue.ToString();

            if (string.IsNullOrEmpty(strChecked_ArrMaCC))
            {
                ACMessageBox.Show(Resources.Text_ChuaChonNV, Resources.Caption_ThongBao, 2000); return;
            }
            List <int> arrMaCC = new List <int>();

            strChecked_ArrMaCC.Split(new char[] { ',' }).ToList().ForEach(item => arrMaCC.Add(int.Parse(item)));

            List <cUserInfo> listNhanVien = new List <cUserInfo>();
            DataTable        tableDSNV    = checkedDSNV.Properties.DataSource as DataTable;

            if (tableDSNV == null)
            {
                return;
            }
            foreach (int maCC in arrMaCC)
            {
                DataRow[] row      = tableDSNV.Select("UserEnrollNumber=" + maCC);
                cUserInfo nhanvien = new cUserInfo {
                    MaCC  = (int)row[0]["UserEnrollNumber"],
                    MaNV  = row[0]["UserFullCode"].ToString(),
                    TenNV = row[0]["UserFullName"].ToString(),
                };
                XL.GetLichTrinhNV(nhanvien, row[0]["SchID"] != DBNull.Value ? (int)row[0]["SchID"] : (int?)null);
                listNhanVien.Add(nhanvien);
            }
            DateTime ngaybd = MyUtility.FirstDayOfMonth(dateNavigator1.DateTime);
            DateTime ngaykt = MyUtility.LastDayOfMonth(ngaybd);

            XL.XemCongThoiGianChuaKetLuong(listNhanVien, ngaybd, ngaykt);
            int soTH_ThieuChamCong,
                soTH_KoNhanDienCa,
                soTH_OLaiChuaXN,
                soTH_VaoTreRaSom,
                soTH_VaoRaEdited,
                soTH_DaXN,
                soTH_DaXN_LamThem,
                soTH_ChoPhepTreSom,
                soTH_VaoTre_RaSom_CoLamBu,
                soTH_XinPhepVang;

            this.GhiNhanThongBao(listNhanVien, ngaybd, ngaykt,
                                 out soTH_ThieuChamCong, out soTH_KoNhanDienCa, out soTH_OLaiChuaXN, out soTH_VaoTreRaSom,
                                 out soTH_VaoRaEdited, out soTH_DaXN, out soTH_DaXN_LamThem, out soTH_ChoPhepTreSom, out soTH_VaoTre_RaSom_CoLamBu,
                                 out soTH_XinPhepVang);
            lbThieuChamCong.Text    = string.Format(Resources.LabelText_ThieuChamCong, soTH_ThieuChamCong);
            lbKhongNhanDienCa.Text  = string.Format(Resources.LabelText_KoNhanDienCa, soTH_KoNhanDienCa);
            lbOLaiChuaXN.Text       = string.Format(Resources.LabelText_OLaiChuaXN, soTH_OLaiChuaXN);
            lbVaoTreRaSom.Text      = string.Format(Resources.LabelText_VaoTreRaSom, soTH_VaoTreRaSom);
            lbVaoRaBiChinhSua.Text  = string.Format(Resources.LabelText_VaoRaBiChinhSua, soTH_VaoRaEdited);
            lbDaXacNhanCa.Text      = string.Format(Resources.LabelText_DaXacNhanCa, soTH_DaXN);
            lbDaXacNhanLamThem.Text = string.Format(Resources.LabelText_DaXacNhanLamThemGio, soTH_DaXN_LamThem);
            lbChoPhepTreSom.Text    = string.Format(Resources.LabelText_ChoPhepTreSom, soTH_ChoPhepTreSom);
            lbTreSomCoLamBu.Text    = string.Format(Resources.LabelText_TreSomCoLamBu, soTH_VaoTre_RaSom_CoLamBu); lbXinPhepVang.Text = string.Format(Resources.LabelText_XinPhepVang, soTH_XinPhepVang);
            DataTable table = tao();

            populatedata(listNhanVien, table);
            //dataGridView1.DataSource = table;
            gridControl1.DataSource = table;
            lbThieuChamCong.Tag     = listNhanVien;
        }