public static void XemCongThoiGianChuaKetLuong(List <cUserInfo> DSNV, DateTime ngayBD, DateTime ngayKT)
        {
            XmlConfigurator.Configure();
            if (DSNV.Count == 0)
            {
                return;
            }
            #region nạp dữ liệu từ database
            var       Arr_MaCC       = (from nv in DSNV select nv.MaCC).ToList(); // tạo mảng danh sách mã chấm công để viết chuỗi query : or.. or
            DataTable tableArrayMaCC = MyUtility.Array_To_DataTable("tableArrayMaCC", Arr_MaCC);
            var       tableCheck_A   = DAO5.LayTableCIO_A5(tableArrayMaCC, ngayBD, ngayKT);
            var       tableCheck_V   = DAO5.LayTableCIO_V5(tableArrayMaCC, ngayBD, ngayKT);
            var       tableXPVang    = DAO5.LayTableXPVang5(tableArrayMaCC, ngayBD, ngayKT);
            var       tableXNPC      = DAO5.LayTableXacNhanPhuCap(tableArrayMaCC, ngayBD, ngayKT, Duyet: true);
            var       tableNgayLe    = DAO5.DocNgayLe(ngayBD, ngayKT);
            #endregion

            #region transfer dữ liệu sang object
            foreach (var nv in DSNV)
            {
                var tempMaCC = nv.MaCC;
                nv.NgayCongBD_Bef2D = ngayBD;
                nv.NgayCongKT_Aft2D = ngayKT;
                LoadDSCheck_A5(tempMaCC, tableCheck_A, out nv.DS_Check_A);
                LoadDSCIO_V5(tempMaCC, tableCheck_V, out nv.DS_CIO_V);
                LoadDSXPVang_Le(tempMaCC, tableXPVang, tableNgayLe, nv.DSVang);
                LoadDSXNPC5(tempMaCC, tableXNPC, out nv.DSXNPC5);
                // khởi tạo danh sách ngày công
                KhoiTaoDSNgayCong(nv.DSNgayCong, ngayBD.AddDays(-2d), ngayKT.AddDays(2d));
            }

            #endregion
            #region xử lý
            var DS_Check_KoHopLe_AllNV = new List <cCheck>();
            var ds_raa3_vao1           = new List <cCheck>();
            foreach (var nv in DSNV)
            {
                List <cCheck> DS_Check_KoHopLe_1NV;
                LoaiBoCheckKoHopLe15(nv.DS_Check_A, out DS_Check_KoHopLe_1NV);                // loại bỏ check cùng loại trong 30ph, IO 30 phút
                DS_Check_KoHopLe_AllNV.AddRange(DS_Check_KoHopLe_1NV);                        // add vào ds ko hợp lệ của nhiều nhân viên để xóa sau
                GhepCIO_A2(nv.DS_Check_A, out nv.DS_CIO_A);
                XetCa_ListCIO_A3_5(nv.DS_CIO_A, nv.LichTrinhLV, ds_raa3_vao1, nv.DS_Check_A); // xét thuộc ThuocCa, update thuộc ngày công, tách ThuocCa 3&1 nếu có, rồi tính công//nv.MacDinhTinhPC50, //[140615_4]
                XetCa_ListCIO_V4_5(nv.DS_CIO_V);
                TronDS_CIO_A_V5(nv.DS_CIO_A, nv.DS_CIO_V, out nv.DSVaoRa);
                PhanPhoi_DSVaoRa6(nv.DSVaoRa, nv.DSNgayCong);
                PhanPhoi_DSVang7(nv.DSVang, nv.DSNgayCong);
                TinhCong_ListNgayCong8_5(nv.DSNgayCong);                //ver 4.0.0.4
                TinhPhuCap_ListNgayCong9_5(nv.DSNgayCong, nv.DSXNPC5);
            }
            if (DS_Check_KoHopLe_AllNV.Count > 0)
            {
                DAO5.LoaiGioLienQuan(DS_Check_KoHopLe_AllNV);
            }
            if (ds_raa3_vao1.Count > 0)
            {
                DAO5.ThemGio_ra3_vao1(ds_raa3_vao1);
            }
            #endregion
        }
        public static void XemCong_v08_2(List <cUserInfo> dsnv, DateTime ngayBD_Bef2D, DateTime ngayKT_Aft2D)
        {
            if (dsnv.Count == 0)
            {
                return;
            }
            #region nạp dữ liệu từ database
            var       Arr_MaCC       = (from nv in dsnv select nv.MaCC).ToList(); // tạo mảng danh sách mã nv chấm công
            DataTable tableArrayMaCC = MyUtility.Array_To_DataTable("tableArrayMaCC", Arr_MaCC);
            var       tableCheck_A   = DAO5.LayTableCIO_A5(tableArrayMaCC, ngayBD_Bef2D, ngayKT_Aft2D);
            var       tableCheck_V   = DAO5.LayTableCIO_V5(tableArrayMaCC, ngayBD_Bef2D, ngayKT_Aft2D);
            var       tableXPVang    = DAO5.LayTableXPVang5(tableArrayMaCC, ngayBD_Bef2D, ngayKT_Aft2D);
            var       tableXNPC      = DAO5.LayTableXacNhanPhuCap(tableArrayMaCC, ngayBD_Bef2D, ngayKT_Aft2D, Duyet: true);
            var       tableNgayLe    = DAO5.DocNgayLe(ngayBD_Bef2D, ngayKT_Aft2D);
            #endregion

            #region transfer dữ liệu sang object
            foreach (var nv in dsnv)
            {
                var tempMaCC = nv.MaCC;
                nv.NgayCongBD_Bef2D = ngayBD_Bef2D;
                nv.NgayCongKT_Aft2D = ngayKT_Aft2D;
                LoadDSCheck_A5(tempMaCC, tableCheck_A, out nv.DS_Check_A);
                LoadDSCIO_V5(tempMaCC, tableCheck_V, out nv.DS_CIO_V);
                LoadDSXPVang_Le(tempMaCC, tableXPVang, tableNgayLe, nv.DSVang);
                LoadDSXNPC50(tempMaCC, tableXNPC, nv.DSXNPhuCap50);
                // khởi tạo danh sách ngày công
                KhoiTaoDSNgayCong(nv.DSNgayCong, ngayBD_Bef2D, ngayKT_Aft2D);
            }

            #endregion
            #region xử lý
            //var DS_Check_KoHopLe_AllNV = new List<cCheck>();
            //var ds_raa3_vao1 = new List<cCheck>();
            //foreach (var nv in dsnv) {
            //	var DS_Check_KoHopLe_1NV = new List<cCheck>();
            //	LoaiBoCheckKoHopLe1(nv.DS_Check_A, ref DS_Check_KoHopLe_1NV);// loại bỏ check cùng loại trong 30ph, IO 30 phút
            //	DS_Check_KoHopLe_AllNV.AddRange(DS_Check_KoHopLe_1NV);// add vào ds ko hợp lệ của nhiều nhân viên để xóa sau
            //	GhepCIO_A2(nv.DS_Check_A, nv.DS_CIO_A);
            //	XetCa_ListCIO_A3(nv.DS_CIO_A, nv.LichTrinhLV, ds_raa3_vao1, nv.DS_Check_A);// xét thuộc ca, update thuộc ngày công, tách ca 3&1 nếu có, rồi tính công//nv.MacDinhTinhPC50, //[140615_4]
            //	XetCa_ListCIO_V4_5(nv.DS_CIO_V, nv.LichTrinhLV);
            //	TronDS_CIO_A_V5(nv.DS_CIO_A, nv.DS_CIO_V, nv.DSVaoRa);
            //	PhanPhoi_DSVaoRa6(nv.DSVaoRa, nv.DSNgayCong);
            //	PhanPhoi_DSVang7(nv.DSVang, nv.DSNgayCong);
            //	TinhCong_ListNgayCong8(nv.DSNgayCong, nv.StartNT, nv.EndddNT);//ver 4.0.0.4
            //	TinhPCTC_TrongListXNPCTC9(nv.DSXNPhuCap50, nv.DSNgayCong);
            //	TinhPCDB_TrongListXNPCDB10(nv.DSXNPhuCapDB, nv.DSNgayCong);
            //}
            //if (DS_Check_KoHopLe_AllNV.Count > 0) DAO.LoaiGioLienQuan(DS_Check_KoHopLe_AllNV);
            //if (ds_raa3_vao1.Count > 0) DAO.ThemGio_ra3_vao1(ds_raa3_vao1);
            #endregion
        }
        private void XuatBBKetCongThang(object sender, WaitWindowEventArgs e)
        {
            string saveFileName = (string)e.Arguments[0]; string tenNVLapBieu = (string)e.Arguments[1]; string tenTrgBP = (string)e.Arguments[2];

            #region lấy thông tin từ csdl và khỏi tạo  nv

            int[] listMaCC                  = (from nv in m_dsnv select nv.MaCC).ToArray();
            var   ngaydauthang              = MyUtility.FirstDayOfMonth(dtpThang.Value);
            var   ngaycuoithang             = MyUtility.LastDayOfMonth(dtpThang.Value);
            var   tableKetcongNgay          = DAO5.LayKetcongNgay(ngaydauthang, ngaycuoithang, DSNV: listMaCC);
            var   tableKetcongCa            = DAO5.LayKetcongCa(ngaydauthang, ngaycuoithang, DSNV: listMaCC);
            var   tableXPVang               = DAO5.LayTableXPVang(ngaydauthang, ngaycuoithang, listMaCC);
            var   tableNgayLe               = DAO5.DocNgayLe(ngaydauthang, ngaycuoithang);
            var   tableDSNVChiCongnhatThang = DAO5.LayTableCongNhat(ngaydauthang, DSNV: listMaCC);

            #endregion

            // xác định công chuẩn của tháng
            var soNgayChuNhat  = XL.DemSoNgayNghiChunhat(ngaydauthang, true, false);
            var congChuanThang = DateTime.DaysInMonth(ngaydauthang.Year, ngaydauthang.Month) - soNgayChuNhat;

            #region                    //load cong phu cap tung ngay cho tat ca nv, ke ca cong nhat, rieng truong hop cong nhat se xu ly ngay ben duoi
            List <cUserInfo> dsnv9 = new List <cUserInfo>();
            foreach (var nv in m_dsnv) // duyệt qua các nhân viên được check
            {
                cUserInfo nv9 = new cUserInfo {
                    MaCC         = nv.MaCC, MaNV = nv.MaNV, TenNV = nv.TenNV, ChucVu = nv.ChucVu, IDChucVu = nv.IDChucVu,
                    HeSo         = nv.HeSo, PhongBan = nv.PhongBan, IsUserEnabled = nv.IsUserEnabled, LichTrinhLV = nv.LichTrinhLV,
                    ThongKeThang = new ThongKeCong_PC(), DSNgayCong = new List <cNgayCong>(), DSVang = new List <cLoaiVang>()
                };
                for (DateTime indexNgay = ngaydauthang; indexNgay <= ngaycuoithang; indexNgay = indexNgay.AddDays(1d))
                {
                    XL.LoadNgayCong(nv9.MaCC, nv9.DSNgayCong, indexNgay, tableKetcongNgay, tableKetcongCa);
                }

                XL.LoadDSXPVang_Le(nv.MaCC, tableXPVang, tableNgayLe, nv.DSVang);
                XL.PhanPhoi_DSVang7(nv.DSVang, nv.DSNgayCong);

                XL.LoadThongtinLamViecCongNhat(nv9.MaCC, ref nv9.NgayBDCongnhat, ref nv9.NgayKTCongnhat, ref nv9.LoaiCN, nv9.DSNgayCong, tableDSNVChiCongnhatThang);
                dsnv9.Add(nv9);
            }

            foreach (var nv9 in dsnv9)
            {
                XL.ThongKeThang(ref nv9.ThongKeThang, nv9.DSNgayCong, nv9.NgayBDCongnhat, nv9.NgayKTCongnhat, nv9.LoaiCN);

                // tính công chờ việc: 1.nv công nhật ko cv. 2. nv mới chính thức thì chỉ giữ công cv khai báo
                if (nv9.NgayBDCongnhat != DateTime.MinValue)                 // nhân viên vừa làm chính thức vừa làm công nhật, công cv tự động = 0
                {
                    nv9.ThongKeThang.CongCV_Auto = 0f;
                }
                else                 // nhân viên chính thức
                {
                    nv9.ThongKeThang.CongCV_Auto = congChuanThang -
                                                   /*(nv9.ThongKeThang.Cong + nv9.ThongKeThang.Le + nv9.ThongKeThang.Phep +//ver4.0.0.0*/
                                                   (nv9.ThongKeThang.TongNgayLV + nv9.ThongKeThang.Le + nv9.ThongKeThang.Phep +                                               //ver4.0.0.1
                                                    nv9.ThongKeThang.BHXH + nv9.ThongKeThang.H_CT_PT
                                                    + nv9.ThongKeThang.PTDT + nv9.ThongKeThang.NghiRo + nv9.ThongKeThang.CongCV_KB);                                          //DANGLAM
                    if (nv9.ThongKeThang.CongCV_Auto < 0f)
                    {
                        nv9.ThongKeThang.CongCV_Auto = 0f;
                    }
                }
                nv9.ThongKeThang.CongCV = nv9.ThongKeThang.CongCV_Auto + nv9.ThongKeThang.CongCV_KB;
            }

            #endregion


            using (var p = new ExcelPackage()) {
                //2. xuat bb bang ket cong thang

                #region ghi sheet bang ket cong thang trinh ky

                p.Workbook.Worksheets.Add("BangKetCong");
                var ws = p.Workbook.Worksheets["BangKetCong"];
                ws.Name = "BangKetCong";                 //Setting Sheet's name
                XL.ExportSheetBangKetcongThang(ws, MyUtility.FirstDayOfMonth(dtpThang.Value), MyUtility.LastDayOfMonth(dtpThang.Value),
                                               dsnv9, tenNVLapBieu, tenTrgBP, XL2.PC30, XL2.PC50, XL2.PCTCC3, XL2.PC100, XL2.PC160, XL2.PC200, XL2.PC290);

                #endregion

                //3. xuat bb chi tiết kết công

                #region ghi sheet chi tiết kết công

                p.Workbook.Worksheets.Add("ChiTietKetCong");
                ws      = p.Workbook.Worksheets["ChiTietKetCong"];
                ws.Name = "ChiTietKetCong";                 //Setting Sheet's name
                XL.ExportSheetBangChiTietKetCong(ws, MyUtility.FirstDayOfMonth(dtpThang.Value), MyUtility.LastDayOfMonth(dtpThang.Value),
                                                 dsnv9, XL2.PC30, XL2.PC50, XL2.PCTCC3, XL2.PC100, XL2.PC160, XL2.PC200, XL2.PC290);

                #endregion

                Byte[] bytes = p.GetAsByteArray();
                XL.XuatFileExcel(saveFileName, bytes, "frmXuatBBCongPC XuatBBKetCongThang");
            }
        }
示例#4
0
        private void XuatBangChiTiet(object sender, WaitWindowEventArgs e)
        {
            string saveFileName = e.Arguments[0].ToString();

            var dsnv          = new List <cUserInfo>();
            var ngaydauthang  = MyUtility.FirstDayOfMonth(m_Thang);
            var ngaycuoithang = MyUtility.LastDayOfMonth(m_Thang);

            #region lấy dữ liệu kết lương để xuất

            var tableKetLuongThang        = DAO5.LayKetLuongThang(ngaydauthang);
            var tableThongsoKetluongThang = DAO5.LayThongsoKetluongThang(ngaydauthang);
            var tableDSNVChiCongnhatThang = DAO5.LayTableCongNhat(ngaydauthang);
            var tableTongLuongCongnhat    = SqlDataAccessHelper.ExecuteQueryString(
                @"select  CAST(SUM (SoNgayCong*DonGiaLuong) as float)  from DSNVChiCongNhatThang where Thang=@Thang",
                new string[] { "@Thang" }, new object[] { ngaydauthang });
            var tongLuongCongnhat  = (tableTongLuongCongnhat.Rows[0][0] != DBNull.Value) ? (double)tableTongLuongCongnhat.Rows[0][0] : 0d;
            var tongLuongDieuchinh = (from DataRow row in tableKetLuongThang.Rows
                                      let luongdieuchinh = (row["LuongDieuChinh"] != DBNull.Value)
                                                                                                                           ? (double)row["LuongDieuChinh"]
                                                                                                                           : 0d
                                                           select luongdieuchinh).Sum();
            var tableKetcongNgay = DAO5.LayKetcongNgay(ngaydauthang, ngaycuoithang);
            var tableKetcongCa   = DAO5.LayKetcongCa(ngaydauthang, ngaycuoithang);
            var tableXPVang      = DAO5.LayTableXPVang(ngaydauthang, ngaycuoithang);
            var tableNgayLe      = DAO5.DocNgayLe(ngaydauthang, ngaycuoithang);

            #endregion
            ChuanBiDuLieuXuatLuong(dsnv, ngaydauthang, ngaycuoithang, tableKetLuongThang, tableKetcongNgay, tableKetcongCa, tableXPVang, tableNgayLe, tableDSNVChiCongnhatThang);


            var      @continue = true;
            FileInfo template, fileResult;
            try {
                template = new FileInfo(Settings.Default.pathReportChiTietLuong);
            } catch (Exception ex) {
                if (ex is System.Security.SecurityException || ex is UnauthorizedAccessException)
                {
                    MessageBox.Show(string.Format(Resources.Text_KoCoQuyenTruyCapFileX, "mẫu xuất báo biểu"), Resources.Caption_Loi); return;
                }
                else if (ex is NotSupportedException || ex is PathTooLongException)
                {
                    MessageBox.Show(string.Format(Resources.Text_UnsupportedFile_PathTooLong, "mẫu xuất báo biểu"), Resources.Caption_Loi); return;
                }
                else
                {
                    MessageBox.Show(string.Format(Resources.Text_CoLoi), Resources.Caption_Loi); return;
                }
            }
            try {
                fileResult = new FileInfo(saveFileName);
            } catch (Exception ex) {
                if (ex is System.Security.SecurityException || ex is UnauthorizedAccessException)
                {
                    MessageBox.Show(string.Format(Resources.Text_KoCoQuyenTruyCapFileX, "mẫu xuất báo biểu"), Resources.Caption_Loi); return;
                }
                else if (ex is NotSupportedException || ex is PathTooLongException)
                {
                    MessageBox.Show(string.Format(Resources.Text_UnsupportedFile_PathTooLong, "mẫu xuất báo biểu"), Resources.Caption_Loi); return;
                }
                else
                {
                    MessageBox.Show(string.Format(Resources.Text_CoLoi), Resources.Caption_Loi); return;
                }
            }

            try {
                using (var packageResult = new ExcelPackage(template)) {
                    var workbook = packageResult.Workbook;
                    #region ghi sheet thong so

                    var ws = workbook.Worksheets["ThongSo"];
                    ws.Name = "ThongSo";                     //Setting Sheet's name
                    XL.ExportSheetThongSo1(ws, ngaydauthang, tableThongsoKetluongThang);
                    #endregion

                    #region ghi sheet chi tiết từng ngày công
                    ws      = workbook.Worksheets["BangChiTietNgayCong"];
                    ws.Name = "BangChiTietNgayCong";
                    XL.ExportSheetChiTietNgayCong1(ws, dsnv);

                    #endregion

                    var ws_Template = workbook.Worksheets["BangChiTietLuong"];
                    XL.ExportSheetChiTietLuong1(ws_Template, dsnv);

                    while (@continue)
                    {
                        try {
                            packageResult.SaveAs(fileResult);
                            @continue = false;
                        } catch (Exception ex) {
                            lg.Error(string.Format("[{0}]_[{1}]\n", this.Name, System.Reflection.MethodBase.GetCurrentMethod().Name), ex);
                            if (ex is IOException)
                            {
                                MessageBox.Show(Resources.Text_FileDangMoBoiUngDungKhac, Resources.Caption_Loi);
                                @continue = true;
                            }
                            else
                            {
                                MessageBox.Show(Resources.Text_CoLoi, Resources.Caption_Loi);
                                @continue = false;
                            }
                        }
                    }
                }
            } catch (Exception ex) {
                if (ex is System.Security.SecurityException || ex is UnauthorizedAccessException)
                {
                    MessageBox.Show(string.Format(Resources.Text_KoCoQuyenTruyCapFileX, "mẫu xuất báo biểu"), Resources.Caption_Loi); return;
                }
                else if (ex is NotSupportedException || ex is PathTooLongException)
                {
                    MessageBox.Show(string.Format(Resources.Text_UnsupportedFile_PathTooLong, "mẫu xuất báo biểu"), Resources.Caption_Loi); return;
                }
                else if (ex is IOException)
                {
                    MessageBox.Show(Resources.Text_FileDangMoBoiUngDungKhac, Resources.Caption_Loi); return;
                }
                else
                {
                    MessageBox.Show(Resources.Text_CoLoi, Resources.Caption_Loi);
                    return;
                }
            }
        }
示例#5
0
        private void XuatBBLuong(object sender, WaitWindowEventArgs e)
        {
            string tenNVLapBieu  = (string)e.Arguments[0];
            string saveFileName  = (string)e.Arguments[1];
            var    ngaydauthang  = MyUtility.FirstDayOfMonth(m_Thang);
            var    ngaycuoithang = MyUtility.LastDayOfMonth(m_Thang);
            //#region lấy dữ liệu kết lương để xuất

            var tableKetLuongThang        = DAO5.LayKetLuongThang(ngaydauthang);
            var tableThongsoKetluongThang = DAO5.LayThongsoKetluongThang(ngaydauthang);
            var tableDSNVChiCongnhatThang = DAO5.LayTableCongNhat(ngaydauthang);
            var tableTongLuongCongnhat    = SqlDataAccessHelper.ExecuteQueryString(
                @"select  CAST(SUM (SoNgayCong*DonGiaLuong) as float)  from DSNVChiCongNhatThang where Thang=@Thang",
                new string[] { "@Thang" }, new object[] { ngaydauthang });
            var tongLuongCongnhat  = (tableTongLuongCongnhat.Rows[0][0] != DBNull.Value) ? (double)tableTongLuongCongnhat.Rows[0][0] : 0d;
            var tongLuongDieuchinh = (from DataRow row in tableKetLuongThang.Rows
                                      let luongdieuchinh = (row["LuongDieuChinh"] != DBNull.Value)
                                                                                                                           ? (double)row["LuongDieuChinh"]
                                                                                                                           : 0d
                                                           select luongdieuchinh).Sum();
            var tableKetcongNgay = DAO5.LayKetcongNgay(ngaydauthang, ngaycuoithang);
            var tableKetcongCa   = DAO5.LayKetcongCa(ngaydauthang, ngaycuoithang);
            var tableXPVang      = DAO5.LayTableXPVang(ngaydauthang, ngaycuoithang);
            var tableNgayLe      = DAO5.DocNgayLe(ngaydauthang, ngaycuoithang);
            var dsnv             = new List <cUserInfo>();

            ChuanBiDuLieuXuatLuong(dsnv, ngaydauthang, ngaycuoithang, tableKetLuongThang, tableKetcongNgay, tableKetcongCa, tableXPVang, tableNgayLe, tableDSNVChiCongnhatThang);

            //#endregion

            //fortesting testing region [02]
            using (var p = new ExcelPackage()) {
                //1. xuat bb bang thong so san luong, don gia, he so pc
                #region lay thong so cac loai pc de ghi cot tieu de
                int pc30   = (int)tableThongsoKetluongThang.Rows[0]["HSPCDem"];
                int pc50   = (int)tableThongsoKetluongThang.Rows[0]["HSPCTangCuong"];
                int pctcc3 = (int)tableThongsoKetluongThang.Rows[0]["HSPCTangCuong_Dem"];
                int pc100  = (int)tableThongsoKetluongThang.Rows[0]["HSPC200"];
                int pc160  = (int)tableThongsoKetluongThang.Rows[0]["HSPC260"];
                int pc200  = (int)tableThongsoKetluongThang.Rows[0]["HSPC300"];
                int pc290  = (int)tableThongsoKetluongThang.Rows[0]["HSPC390"];
                #endregion
                //2. xuat bb bang ket cong thang
                #region ghi sheet bang ket cong thang trinh ky

                p.Workbook.Worksheets.Add("BangKetCong");
                var ws = p.Workbook.Worksheets["BangKetCong"];
                ws.Name = "BangKetCong";                 //Setting Sheet's name
                XL.ExportSheetBangKetcongThang(ws, ngaydauthang, ngaycuoithang, dsnv, string.Empty, string.Empty, pc30, pc50, pctcc3, pc100, pc160, pc200, pc290);

                #endregion
                //3. xuat bb chi tiết kết công
                #region ghi sheet chi tiết kết công

                p.Workbook.Worksheets.Add("ChiTietKetCong");
                ws      = p.Workbook.Worksheets["ChiTietKetCong"];
                ws.Name = "ChiTietKetCong";                 //Setting Sheet's name
                XL.ExportSheetBangChiTietKetCong(ws, ngaydauthang, ngaycuoithang, dsnv, pc30, pc50, pctcc3, pc100, pc160, pc200, pc290);

                #endregion
                //4. xuat bb bang luong cong nhat
                #region ghi sheet bang luong cong nhat

                p.Workbook.Worksheets.Add("BangLuongCongNhat");
                ws      = p.Workbook.Worksheets["BangLuongCongNhat"];
                ws.Name = "BangLuongCongNhat";
                XL.ExportSheetBangLuongCongNhat(ws, ngaydauthang, tableDSNVChiCongnhatThang);

                #endregion
                //5. xuat bb bang luong chinh thuc
                #region ghi sheet bảng lương

                p.Workbook.Worksheets.Add("BangLuong");
                ws      = p.Workbook.Worksheets["BangLuong"];
                ws.Name = "BangLuong";
                XL.ExportSheetBangLuong(ws, m_Thang, dsnv, tenNVLapBieu);

                #endregion
                //6. xuat bb bang tong hop so lieu giam doc ky duyet
                #region ghi sheet bảng tổng hợp số liệu

                p.Workbook.Worksheets.Add("BangTongHopChi");
                ws      = p.Workbook.Worksheets["BangTongHopChi"];
                ws.Name = "BangTongHopChi";
                XL.ExportSheetTongHopChi(ws, m_Thang, tableThongsoKetluongThang, tongLuongCongnhat, tongLuongDieuchinh);

                #endregion
                //7. xuat sheet thong ke sữa
                #region ghi sheet thống kê BD ĐH

                p.Workbook.Worksheets.Add("BangThongKeBoiDuongDocHai");
                ws      = p.Workbook.Worksheets["BangThongKeBoiDuongDocHai"];
                ws.Name = "BangThongKeBoiDuongDocHai";
                XL.ExportSheetBangThongKeSua(ws, ngaydauthang, ngaycuoithang, dsnv);

                #endregion


                Byte[] bytes = p.GetAsByteArray();
                XL.XuatFileExcel(saveFileName, bytes, "frm4LuuHSPC XuatBBLuong");
            }
        }
示例#6
0
        private void KetLuong(object sender, WaitWindowEventArgs e)
        {
            #region lấy thông tin từ csdl và khỏi tạo  nv

            var ngaydauthang              = MyUtility.FirstDayOfMonth(m_Thang);
            var ngaycuoithang             = MyUtility.LastDayOfMonth(m_Thang);
            var tableDSNVChiCongnhatThang = DAO5.LayTableCongNhat(ngaydauthang);
            var tableDSThuchiThang        = DAO5.LayDSThuchiThang(ngaydauthang);
            var tableKetcongNgay          = DAO5.LayKetcongNgay(ngaydauthang, ngaycuoithang);
            var tableKetcongCa            = DAO5.LayKetcongCa(ngaydauthang, ngaycuoithang);
            var tableXPVang = DAO5.LayTableXPVang(ngaydauthang, ngaycuoithang);
            var tableNgayLe = DAO5.DocNgayLe(ngaydauthang, ngaycuoithang);

            var dsnv       = new List <cUserInfo>();
            var dsphongban = new List <cPhongBan>();
            XL.KhoiTaoDSPhongBan(dsphongban);             // khởi tạo các phòng ban để cập nhật thông tin phòng ban cho nhân viên tính công
            XL.KhoiTaoDSNV_TinhLuong(dsnv, dsphongban);   // khởi tạo tất cả nhân viên tính công, bao gồm cả công nhật ngày(nv chính thức) và công nhật tháng

            #endregion

            #region             //load cong phu cap tung ngay cho tat ca nv, ke ca cong nhat, rieng truong hop cong nhat se xu ly ngay ben duoi

            foreach (var nv in dsnv)
            {
                nv.DSNgayCong = new List <cNgayCong>();
                nv.DSVang     = new List <cLoaiVang>();
                for (DateTime indexNgay = ngaydauthang; indexNgay <= ngaycuoithang; indexNgay = indexNgay.AddDays(1d))
                {
                    XL.LoadNgayCong(nv.MaCC, nv.DSNgayCong, indexNgay, tableKetcongNgay, tableKetcongCa);
                }
                XL.LoadDSXPVang_Le(nv.MaCC, tableXPVang, tableNgayLe, nv.DSVang);                //info trường hợp nhân viên công nhật sẽ được xử lý bên dưới
                XL.PhanPhoi_DSVang7(nv.DSVang, nv.DSNgayCong);

                XL.LoadThongtinLamViecCongNhat(nv.MaCC, ref nv.NgayBDCongnhat, ref nv.NgayKTCongnhat, ref nv.LoaiCN, nv.DSNgayCong, tableDSNVChiCongnhatThang);
            }


            #endregion

            //có được ds nhân viên với công, phụ cấp, các loại vắng, công ngày lễ --> bắt đầu tính lương
            #region lấy thông số để tính lương
            var sanluong01           = (int)(numSanLuong.Value);
            var dongia02             = (int)numDonGia.Value;
            var perTrichQuyLuong     = (int)numTrichQuyLuong.Value;
            var sanluongGiacongNoiBo = (int)numSanluongGiacongNoibo.Value;
            var dongiaGiacongNoiBo   = (int)numDongiaGiacongNoibo.Value;
            var sanluongGiacongNgoai = (int)numSanluongGiacongNgoai.Value;
            var dongiaGiacongNgoai   = (int)numDongiaGiacongNgoai.Value;
            var mucLuongToithieu     = (int)numLuongTT.Value;
            var donGiaBdCa3          = (int)numBoiDuongCa3.Value;
            var DinhMuccomtrua       = (int)numDinhMucComTrua.Value;

            double tongQuy100Per03 = Convert.ToDouble(sanluong01) * Convert.ToDouble(dongia02);
            double _80perQuy100_04 = tongQuy100Per03 * (perTrichQuyLuong / 100d);             // ko cần round vì 220*0.8=176 chẵn

            #endregion
            // xác định công chuẩn của tháng
            var congChuanThang = XL.TinhCongChuanCuaThang(ngaydauthang);
            #region             // thống kê công, phụ cấp hàng ngày của từng nhân viên chính thức
            //trường hợp nhân viên vừa công nhật vừa chính thức thì chỉ thống kê ngày công sau ngày kết thúc công nhật
            foreach (var nv in dsnv)
            {
                // thống kê công và phụ cấp từng nv
                XL.ThongKeThang(ref nv.ThongKeThang, nv.DSNgayCong, nv.NgayBDCongnhat, nv.NgayKTCongnhat, nv.LoaiCN);
                // tính công chờ việc: 1.nv công nhật ko cv. 2. nv mới chính thức thì chỉ giữ công cv khai báo
                if (nv.LoaiCN == LoaiCongNhat.NVCongNhat)                // nhân viên làm công nhật, công cv tự động, khai báo = 0
                {
                    nv.ThongKeThang.CongCV_Auto = 0f;
                    nv.ThongKeThang.CongCV_KB   = 0f;
                }
                else
                {
                    if (nv.LoaiCN == LoaiCongNhat.NVChinhThuc)                    // nhân viên chính thức
                    {
                        nv.ThongKeThang.CongCV_Auto = congChuanThang -
                                                      /*(nv.ThongKeThang.Cong + nv.ThongKeThang.Le + nv.ThongKeThang.Phep + //ver4.0.0.0*/
                                                      (nv.ThongKeThang.TongNgayLV + nv.ThongKeThang.Le + nv.ThongKeThang.Phep +                                                             //ver4.0.0.1
                                                       nv.ThongKeThang.BHXH + nv.ThongKeThang.H_CT_PT +
                                                       nv.ThongKeThang.PTDT + nv.ThongKeThang.NghiRo + nv.ThongKeThang.CongCV_KB);                                                          //DANGLAM
                        if (nv.ThongKeThang.CongCV_Auto < 0f)
                        {
                            nv.ThongKeThang.CongCV_Auto = 0f;
                        }
                    }
                    else                    // nhân viên chính thức vừa công nhật thì công cv_auto =0, công cv khai báo ko đổi
                    {
                        nv.ThongKeThang.CongCV_Auto = 0f;
                    }
                }
                nv.ThongKeThang.CongCV = nv.ThongKeThang.CongCV_Auto + nv.ThongKeThang.CongCV_KB;
            }

            #endregion

            #region             // tính lương công nhật cho các nhân viên làm công nhật và tổng lương công nhật

            double TongLuongCongNhat_AllNV = 0d;

            foreach (DataRow row in tableDSNVChiCongnhatThang.Rows.Cast <DataRow>())
            {
                // lấy thông tin
                var macc        = (int)row["UserEnrollNumber"];
                var dongiaLuong = (int)row["DonGiaLuong"];
                var soNgayCong  = (float)row["SoNgayCong"];
                var TamUng      = (double)row["TamUng"];
                // xác định nhân viên
                var nv = dsnv.Find(o => o.MaCC == macc);
                if (nv == null)
                {
                    continue;
                }
                nv.ThongKeThang.Cong_Congnhat = soNgayCong;
                nv.chiTietLuong.CongNhat      = soNgayCong * dongiaLuong;            //ko trừ tạm ứng, tạm ứng chỉ ở phần thực lãnh mới ghi
                TongLuongCongNhat_AllNV      += nv.chiTietLuong.CongNhat;
            }

            #endregion

            #region             //đọc danh sách thu chi cho từng nhân viên (lưu ý ko đọc phụ cấp của nhân viên công nhật

            foreach (DataRow row in tableDSThuchiThang.Rows.Cast <DataRow>())
            {
                var macc = (int)row["UserEnrollNumber"];
                // xác định nhân viên
                var nv = dsnv.Find(o => o.MaCC == macc);
                if (nv == null)
                {
                    continue;
                }
                nv.chiTietLuong.KhauTru.TamUng     = (double)row["TamUng"];
                nv.chiTietLuong.LuongDieuChinh     = (double)row["LuongDieuChinh"];
                nv.chiTietLuong.MucDongBHXH        = (float)row["MucDongBHXH"];
                nv.chiTietLuong.KhauTru.ThuChiKhac = (double)row["ThuChiKhac"];
            }

            #endregion

            #region             // tính lương cho nv chính thức

            double tong_qlcb_2 = 0d, tong_SPLamRa_B2_2 = 0d, tongQuyLuongCV = 0d, tongQuyLuongNghiDinhCP = 0d, tongChiKhacTuQuyLuong = 0d, tongQuyLuongSP = 0d;
            foreach (var nv in dsnv.Where(o => o.LoaiCN != LoaiCongNhat.NVCongNhat))
            {
                //if (Math.Abs(nv.ThongKeThang.Cong - 0f) < 0.01f) nv.ThongKeThang.CongCV = 0f; //fortesting nếu ko chấm công thì cũng ko có công cv
                XL.TinhLuongCoBan_CongVaPC_A202(nv.HeSo.LuongCB, mucLuongToithieu, nv.ThongKeThang.Cong, nv.ThongKeThang.PhuCaps._TongPC,
                                                nv.ThongKeThang.Phep, nv.ThongKeThang.H_CT_PT, nv.ThongKeThang.PTDT, nv.ThongKeThang.Le, nv.ThongKeThang.CongCV,                                                //DANGLAM
                                                out nv.chiTietLuong.LCB_Theo.CongThucTe, out nv.chiTietLuong.LCB_Theo.CheDoNghi, out nv.chiTietLuong.LCB_Theo.CongCV,
                                                out nv.chiTietLuong.LCB_Theo.PhuCap);
                tongQuyLuongCV         += nv.chiTietLuong.LCB_Theo.CongCV;
                tongQuyLuongNghiDinhCP += nv.chiTietLuong.LCB_Theo.TongCong_CD_CV_PC;

                XL.TinhBoiDuongQuaDemA512(nv.ThongKeThang.NgayQuaDem, donGiaBdCa3, out nv.chiTietLuong.BoiDuongQuaDem);
                tong_qlcb_2           += nv.chiTietLuong.LCB_Theo.TongCong_CD_CV_PC + nv.chiTietLuong.BoiDuongQuaDem + nv.chiTietLuong.LuongDieuChinh;       //info tong_qlcb_2 bao gồm lương cb 1nv, bồi dưỡng ca 3 1nv, lương tháng trước 1 nv
                tongChiKhacTuQuyLuong += nv.chiTietLuong.BoiDuongQuaDem + nv.chiTietLuong.KhauTru.ThuChiKhac;

                XL.TinhSPLamRa_CongVaPC_B102(nv.HeSo.LuongCV, nv.ThongKeThang.Cong, nv.ThongKeThang.PhuCaps._TongPC, nv.ThongKeThang.Phep, nv.ThongKeThang.H_CT_PT, nv.ThongKeThang.PTDT, nv.ThongKeThang.Le,                //DANGLAM
                                             out nv.chiTietLuong.SPLamRa_Theo.CongThucTe, out nv.chiTietLuong.SPLamRa_Theo.CheDoNghi, out nv.chiTietLuong.SPLamRa_Theo.PhuCap);
                tong_SPLamRa_B2_2 += nv.chiTietLuong.SPLamRa_Theo.TongSPLamRa;
                // tính khấu trừ BHXH
                nv.chiTietLuong.KhauTru.BHXH = Convert.ToDouble(nv.HeSo.BHXH_YT_TN * mucLuongToithieu * (nv.chiTietLuong.MucDongBHXH / 100f));
                // tính tiền cơm trưa
                var temp1 = DinhMuccomtrua - ((DinhMuccomtrua / congChuanThang) * nv.ThongKeThang.NghiRo);
                nv.chiTietLuong.TienComTrua = (temp1 >= 0d) ? temp1 : 0d;
            }
            var    chitienGiacongNoibo       = Convert.ToDouble(sanluongGiacongNoiBo) * Convert.ToDouble(dongiaGiacongNoiBo);
            var    chitienGiacongNgoai       = Convert.ToDouble(sanluongGiacongNgoai) * Convert.ToDouble(dongiaGiacongNgoai);
            var    tong_qlSP_A71_1_VaGiaCong = (_80perQuy100_04 + chitienGiacongNoibo + chitienGiacongNgoai) - tong_qlcb_2 - TongLuongCongNhat_AllNV;
            double giaTri_1SP_B3_1           = tong_qlSP_A71_1_VaGiaCong / tong_SPLamRa_B2_2;   // tính ra được 1 đơn vị sản phẩm có giá bao nhiêu
            //double tong0 = 0d, tong1 = 0d, tong2 = 0d, tong3 = 0d, tong4 = 0d, tong5 = 0d, tong6 = 0d, tong7 = 0d, tong8 = 0d, tong9 = 0d, tong10 = 0d, tong11 = 0d, tong12 = 0d, tong13 = 0d, tong14 = 0d, tong15 = 0d, tong16 = 0d, tong17 = 0d, tong18 = 0d, tong19 = 0d, tong20 = 0d, tong21 = 0d, tong22 = 0d, tong23 = 0d, tong24 = 0d, tong25 = 0d, tong26 = 0d, tong27 = 0d, tong28 = 0d, tong29 = 0d, tong30 = 0d, tong31 = 0d, tong32 = 0d, tong33 = 0d, tong34 = 0d, tong35 = 0d, tong36 = 0d;

            foreach (var nv in dsnv.Where(o => o.LoaiCN != LoaiCongNhat.NVCongNhat))
            {
                nv.chiTietLuong.LSP_Theo.CongThucTe = nv.chiTietLuong.SPLamRa_Theo.CongThucTe * giaTri_1SP_B3_1;
                nv.chiTietLuong.LSP_Theo.CheDoNghi  = nv.chiTietLuong.SPLamRa_Theo.CheDoNghi * giaTri_1SP_B3_1;
                nv.chiTietLuong.LSP_Theo.PhuCap     = nv.chiTietLuong.SPLamRa_Theo.PhuCap * giaTri_1SP_B3_1;
                tongQuyLuongSP += nv.chiTietLuong.LSP_Theo.TongCong_CD_PC;
                //fortesting region [03]
            }

            #endregion

            //fortesting testing region [01]
            #region             // cập nhật lương xuống csdl , trước khi cập nhật thì xoá lương cũ

            // cập nhật lương xuống csdl , trước khi cập nhật thì xoá lương cũ
            int kq1 = SqlDataAccessHelper.ExecNoneQueryString(
                "delete from KetLuongThang where Thang = @Thang", new string[] { "@Thang" }, new object[] { m_Thang });                 //INFO LOG DO KẾT LƯƠNG THÁNG THỰC HIỆN

            foreach (var nv in dsnv.Where(o => o.LoaiCN != LoaiCongNhat.NVCongNhat))
            {
                int kq = DAO5.InsKetLuongThang(m_Thang, nv);
                //if (kq == 0) MessageBox.Show("Xảy ra lỗi tại vị trí NV: " + nv.MaCC + nv.TenNV);//fortesting
            }

            // sau khi cập nhật lương từng nhân viên thì cập nhật thông số kết lương tháng
            int kq2 = DAO5.UpdInsThongsoKetluongThang(m_Thang,
                                                      XL2.PC30, XL2.PC50, XL2.PCTCC3, XL2.PC100, XL2.PC160, XL2.PC200, XL2.PC290,
                                                      sanluong01, dongia02, perTrichQuyLuong,
                                                      sanluongGiacongNoiBo, dongiaGiacongNoiBo, sanluongGiacongNgoai, dongiaGiacongNgoai,
                                                      mucLuongToithieu, donGiaBdCa3, DinhMuccomtrua,
                                                      tongQuyLuongCV, tongQuyLuongNghiDinhCP,
                                                      tongChiKhacTuQuyLuong, tongQuyLuongSP, giaTri_1SP_B3_1);

            //ghi log
            string noidung = string.Format("Kết lương tháng [{0}]", m_Thang.ToString("MM/yyyy"));
            DAO5.GhiNhatKyThaotac("Kết lương", noidung);

            #endregion
        }
示例#7
0
        private void XuatBBChamCong(object sender, WaitWindowEventArgs e)
        {
            string           filePath     = e.Arguments[0].ToString();
            string           tenNVLapBieu = e.Arguments[1].ToString();
            string           tenTrgBP     = e.Arguments[2].ToString();
            DateTime         thang        = (DateTime)e.Arguments[3];
            List <cPhongBan> dsphongban   = (List <cPhongBan>)e.Arguments[4];

            try              //general try catch
            {
                List <WarningMessage> warningMessages = new List <WarningMessage>();
                #region lấy thông tin từ csdl và khỏi tạo  nv

                DateTime ngaydauthang = MyUtility.FirstDayOfMonth(dtpThang.Value), ngaycuoithang = MyUtility.LastDayOfMonth(dtpThang.Value);
                var      tableKetcongNgay          = DAO5.LayKetcongNgay(ngaydauthang, ngaycuoithang);
                var      tableKetcongCa            = DAO5.LayKetcongCa(ngaydauthang, ngaycuoithang);
                var      tableXPVang               = DAO5.LayTableXPVang(ngaydauthang, ngaycuoithang);
                var      tableNgayLe               = DAO5.DocNgayLe(ngaydauthang, ngaycuoithang);
                var      tableDSNVChiCongnhatThang = DAO5.LayTableCongNhat(ngaydauthang);

                var dsnv = new List <cUserInfo>();
                XL.KhoiTaoDSNV_ChamCong(dsnv, (from p in dsphongban select p.ID).ToList(), dsphongban);                 // khởi tạo tất cả nhân viên tính công, bao gồm cả công nhật ngày(nv chính thức) và công nhật tháng

                /*
                 *                      List<cPhongBan> dsphongban = new List<cPhongBan>();
                 *                      // đưa về root node trước khi thực hiện
                 *                      var root = treePhongBan.TopNode;
                 *                      GetTopLevelNode(ref root);// mỗi lần duyệt node sẽ làm root node chuyển về parent của node cuối nên phải trả về node gốc để duyệt từ đầu
                 *                      while (root.PrevNode != null) root = root.PrevNode;
                 *                      GetNode_DuocThaotac_CheckKetcong(root, dsphongban);
                 */

                #endregion
                // xác định công chuẩn của tháng
                var congChuanThang = XL.TinhCongChuanCuaThang(ngaydauthang);

                #region                 //load cong phu cap tung ngay cho tat ca nv, ke ca cong nhat, rieng truong hop cong nhat se xu ly ngay ben duoi

                try {
                    foreach (var nv in dsnv)
                    {
                        nv.ThongKeThang = new ThongKeCong_PC();
                        nv.DSNgayCong   = new List <cNgayCong>();
                        nv.DSVang       = new List <cLoaiVang>();
                        for (DateTime indexNgay = ngaydauthang; indexNgay <= ngaycuoithang; indexNgay = indexNgay.AddDays(1d))
                        {
                            XL.LoadNgayCong(nv.MaCC, nv.DSNgayCong, indexNgay, tableKetcongNgay, tableKetcongCa);
                        }
                        //load ds xp vắng
                        //XL.LoadDSXPVang(nv.MaCC, nv.DSNgayCong, tableXPVang);
                        //XL.LoadNgayLe(nv.DSNgayCong, tableNgayLe);
                        XL.LoadDSXPVang_Le(nv.MaCC, tableXPVang, tableNgayLe, nv.DSVang);                        //info trường hợp nhân viên công nhật sẽ được xử lý bên dưới
                        XL.PhanPhoi_DSVang7(nv.DSVang, nv.DSNgayCong);
                        XL.LoadThongtinLamViecCongNhat(nv.MaCC, ref nv.NgayBDCongnhat, ref nv.NgayKTCongnhat, ref nv.LoaiCN, nv.DSNgayCong, tableDSNVChiCongnhatThang);
                    }

                    var soNgayChuNhat = XL.DemSoNgayNghiChunhat(ngaydauthang, true, false);
                    var soNgayThu7    = XL.DemSoNgayNghiChunhat(ngaydauthang, false, true);                 //v 4.0.0.1
                    foreach (var nv in dsnv)
                    {
                        XL.ThongKeThang(ref nv.ThongKeThang, nv.DSNgayCong, nv.NgayBDCongnhat, nv.NgayKTCongnhat, nv.LoaiCN);
                        // tính công chờ việc: 1.nv công nhật ko cv. 2. nv mới chính thức thì chỉ giữ công cv khai báo
                        if (nv.LoaiCN == LoaiCongNhat.NVCongNhat)                        // nhân viên làm công nhật, công cv tự động, khai báo = 0
                        {
                            nv.ThongKeThang.CongCV_Auto = 0f;
                            nv.ThongKeThang.CongCV_KB   = 0f;
                        }
                        else
                        {
                            if (nv.LoaiCN == LoaiCongNhat.NVChinhThuc)                            // nhân viên chính thức
                            {
                                nv.ThongKeThang.CongCV_Auto = congChuanThang -
                                                              /*(nv.ThongKeThang.Cong + nv.ThongKeThang.Le + nv.ThongKeThang.Phep +//ver4.0.0.0*/
                                                              (nv.ThongKeThang.TongNgayLV + nv.ThongKeThang.Le + nv.ThongKeThang.Phep +                                                            //ver4.0.0.1
                                                               nv.ThongKeThang.BHXH + nv.ThongKeThang.H_CT_PT
                                                               + nv.ThongKeThang.PTDT + nv.ThongKeThang.NghiRo + nv.ThongKeThang.CongCV_KB);                                                       //DANGLAM
                                if (nv.ThongKeThang.CongCV_Auto < 0f)
                                {
                                    nv.ThongKeThang.CongCV_Auto = 0f;
                                }
                            }
                            else                            // nhân viên chính thức vừa công nhật thì công cv_auto =0, công cv khai báo ko đổi
                            {
                                nv.ThongKeThang.CongCV_Auto = 0f;
                            }
                        }
                        nv.ThongKeThang.CongCV = nv.ThongKeThang.CongCV_Auto + nv.ThongKeThang.CongCV_KB;
                        if (XL.KiemTraDieuKienCongCVAuto_VuotNguong(nv.ThongKeThang.CongCV_Auto, soNgayThu7, soNgayChuNhat))
                        {
                            warningMessages.Add(
                                new WarningMessage {
                                MaCC    = nv.MaCC, MaNV = nv.MaNV, TenNV = nv.TenNV,
                                NoiDung = string.Format(
                                    "Có số công chờ việc được tính tự động [{0}] công theo quy định vượt quá [{1}] ngày chủ nhật trong tháng.",
                                    nv.ThongKeThang.CongCV_Auto.ToString("#0.0#"), soNgayChuNhat)
                            });
                        }
                    }
                } catch (Exception ex) {
                    lg.Error(string.Format("[{0}]_[{1}]\n", this.Name, System.Reflection.MethodBase.GetCurrentMethod().Name), ex);
                }

                #endregion


                using (var p = new ExcelPackage()) {
                    //2. xuat bb bang ket cong thang
                    #region ghi sheet bang ket cong thang trinh ky

                    p.Workbook.Worksheets.Add("BangKetCong");
                    var ws = p.Workbook.Worksheets["BangKetCong"];
                    ws.Name = "BangKetCong";                                                                                                                  //Setting Sheet's name
                    XL.ExportSheetBangKetcongThang(ws, MyUtility.FirstDayOfMonth(dtpThang.Value), MyUtility.LastDayOfMonth(dtpThang.Value),
                                                   dsnv, tenNVLapBieu, tenTrgBP, XL2.PC30, XL2.PC50, XL2.PCTCC3, XL2.PC100, XL2.PC160, XL2.PC200, XL2.PC290); //info dsnv kết công bộ phận gồm cả nv công nhật, chính thức, vừa chính thức vừa công nhật  khác với bảng lương

                    #endregion
                    //3. xuat bb chi tiết kết công
                    #region ghi sheet chi tiết kết công

                    p.Workbook.Worksheets.Add("ChiTietKetCong");
                    ws      = p.Workbook.Worksheets["ChiTietKetCong"];
                    ws.Name = "ChiTietKetCong";                     //Setting Sheet's name
                    XL.ExportSheetBangChiTietKetCong(ws, MyUtility.FirstDayOfMonth(dtpThang.Value), MyUtility.LastDayOfMonth(dtpThang.Value),
                                                     dsnv, XL2.PC30, XL2.PC50, XL2.PCTCC3, XL2.PC100, XL2.PC160, XL2.PC200, XL2.PC290);

                    #endregion
                    //4. xuất bb lưu ý nếu có
                    if (warningMessages.Count > 0)
                    {
                        p.Workbook.Worksheets.Add("LUUY");
                        ws      = p.Workbook.Worksheets["LUUY"];
                        ws.Name = "LuuY";                         //Setting Sheet's name
                        ws.Cells.Style.Font.Name = "Times New Roman";
                        ws.Cells.Style.Font.Size = 12;
                        int top = 1, left = 1;
                        int ir = top, ic = left;
                        XL.FormatCell_T(ws, ref ir, ref ic, "Mã NV", plusCol: 1);
                        XL.FormatCell_T(ws, ref ir, ref ic, "Tên NV", plusCol: 1);
                        XL.FormatCell_T(ws, ref ir, ref ic, "Nội dung lưu ý", plusCol: 1, plusRow: 1);
                        foreach (WarningMessage message in warningMessages)
                        {
                            ic = left;
                            XL.FormatCell_W(ws, ref ir, ref ic, message.MaNV, colWidth: (int)L.MANV, plusCol: 1);
                            XL.FormatCell_W(ws, ref ir, ref ic, message.TenNV, colWidth: (int)L.HOTEN, plusCol: 1);
                            XL.FormatCell_W(ws, ref ir, ref ic, message.NoiDung, colWidth: 60, plusCol: 1, plusRow: 1);
                        }
                    }
                    Byte[] bytes = p.GetAsByteArray();
                    XL.XuatFileExcel(filePath, bytes, "frm_KetCongBoPhan XuatBBChamCong ");
                }

                if (warningMessages.Count > 0)
                {
                    MessageBox.Show("Vui lòng xem lại các cảnh báo của quá trình kết công trong sheet lưu ý.", Resources.Caption_ThongBao);
                }
            } catch (Exception ex)              //general try catch
            {
                lg.Error(string.Format("[{0}]_[{1}]\n", this.Name, System.Reflection.MethodBase.GetCurrentMethod().Name), ex);
                MessageBox.Show(Resources.Text_CoLoi, Resources.Caption_Loi);
            }
        }