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"); } }
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; } } }
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"); } }
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 }
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); } }