public TinhLuongHelper(dsTinhLuong ds, DateTime tuNgay, DateTime denNgay, string EmployeeID) { this._ds = ds; _soNgayCongTrongThang = Ham.DemNgayCong(tuNgay, denNgay) > 26 ? 26 : Ham.DemNgayCong(tuNgay, denNgay); kyLuong_TuNgay = tuNgay; kyLuong_DenNgay = denNgay; luongMoi = GetLuongMoi(EmployeeID); luongCu = GetLuongCu(EmployeeID, luongMoi); if (luongCu != null && luongCu.EndDate < tuNgay) { luongCu = null; } if (luongMoi == null) { var kq1 = _ds.p_tinhLuong_GetAllKetQuaQuetThe.FirstOrDefault(i => i.EmployeeID == EmployeeID); if (kq1 == null) { var db1 = new iHRM.Core.Business.DbObject.dcDatabaseDataContext(Provider.ConnectionString); var e = db1.tblEmployees.FirstOrDefault(i => i.EmployeeID == EmployeeID); if (e != null) { _Luong1Ngay = (e.BasicSalary ?? 0) / _soNgayCongTrongThang; } } else { _Luong1Ngay = (DbHelper.DrGetDouble(kq1, "BasicSalary")) / _soNgayCongTrongThang; } } else { _Luong1Ngay = (DbHelper.DrGetDouble(luongMoi, "BasicSalary")) / _soNgayCongTrongThang; } _LuongCBCu = DbHelper.DrGetDouble(luongCu, "BasicSalary"); _LuongPCCu = DbHelper.DrGetDouble(luongCu, "BasicSalary_Ins"); _LuongCBMoi = DbHelper.DrGetDouble(luongMoi, "BasicSalary"); _LuongPCMoi = DbHelper.DrGetDouble(luongMoi, "BasicSalary_Ins"); }
public void doAnalyza(DateTime tuNgay, DateTime denNgay, string empID, string depID, int group1ID, bool chkLamTron) { TinhLuong logic = new TinhLuong(); dsTinhLuong ds = new dsTinhLuong(); int soNgayCongThucTeTrongThang = Ham.DemNgayCong(tuNgay, denNgay); try { //reg progress... lp.SetTitle("Đang lấy dữ liệu.."); lp.OutMessage("Lấy dữ liệu ----------------------------------------------------------------------------------"); #region get data ds = new dsTinhLuong(); DateTime cMonth = new DateTime(tuNgay.Year, tuNgay.Month, 1); Provider.LoadData(ds, ds.tbCaLam_TinhTangCa.TableName); lp.OutMessage("Ca làm việc (tính tăng ca): " + ds.tbCaLam_TinhTangCa.Rows.Count); Provider.LoadData(ds, ds.tblRef_Allowance.TableName); lp.OutMessage("Phụ cấp Allowance: " + ds.tblRef_Allowance.Rows.Count); Provider.LoadDataByProc(ds, ds.tblEmpSalary.TableName, "p_tinhLuong_GetLuongCoBan", new SqlParameter("tuNgay", tuNgay), new SqlParameter("denNgay", denNgay)); lp.OutMessage("Lương cơ bản: " + ds.tblEmpSalary.Rows.Count); //tuNgay.AddDays(-1) Sinh ngày 17 là k đc nhận thưởng con thơ nữa. Provider.LoadDataByProc(ds, ds.tblEmpChild.TableName, "p_tinhLuong_GetChilds", new SqlParameter("tuNgay", tuNgay), new SqlParameter("denNgay", denNgay)); lp.OutMessage("Con thơ: " + ds.tblEmpChild.Rows.Count); Provider.LoadDataByProc(ds, ds.tbDangKyVangMat.TableName, "p_duLieuQuetThe_GetAllDangKyVangMat_CoThe", new SqlParameter("tuNgay", tuNgay), new SqlParameter("denNgay", denNgay)); lp.OutMessage("Đăng ký vắng mặt: " + ds.tbDangKyVangMat.Rows.Count); Provider.LoadData(ds, ds.tbBangLuongCalc.TableName); lp.OutMessage("Công thức tính lương: " + ds.tbBangLuongCalc.Rows.Count); if (!string.IsNullOrWhiteSpace(empID)) { Provider.LoadDataByProc(ds, ds.tbThamSoTinhLuong.TableName, "p_tinhLuong_GetThamSoTinhLuong_WithEmp", new SqlParameter("thang", cMonth), new SqlParameter("empID", empID)); Provider.LoadDataByProc(ds, ds.p_tinhLuong_GetAllKetQuaQuetThe.TableName, "p_tinhLuong_GetAllKetQuaQuetThe_WithEmp", new SqlParameter("tuNgay", tuNgay), new SqlParameter("denNgay", denNgay), new SqlParameter("empID", empID)); Provider.LoadDataByProc(ds, ds.tblEmpAllowanceFix.TableName, "p_tinhLuong_GetPCCD_WithEmp", new SqlParameter("empID", empID)); lp.OutMessage(">>> " + Lng.Luong_AnalyzeData.resetBL + " (" + empID + ") " + logic.ResetBangLuong_withEmp(cMonth, empID)); } else if (!string.IsNullOrWhiteSpace(depID)) { Provider.LoadDataByProc(ds, ds.tbThamSoTinhLuong.TableName, "p_tinhLuong_GetThamSoTinhLuong_WithDept", new SqlParameter("thang", cMonth), new SqlParameter("maTapThe", depID)); Provider.LoadDataByProc(ds, ds.p_tinhLuong_GetAllKetQuaQuetThe.TableName, "p_tinhLuong_GetAllKetQuaQuetThe_WithDept", new SqlParameter("tuNgay", tuNgay), new SqlParameter("denNgay", denNgay), new SqlParameter("maTapThe", depID)); Provider.LoadDataByProc(ds, ds.tblEmpAllowanceFix.TableName, "p_tinhLuong_GetPCCD_WithDept", new SqlParameter("maTapThe", depID)); lp.OutMessage(">>> " + Lng.Luong_AnalyzeData.resetBL + " (" + depID + ") " + logic.ResetBangLuong_withDep(cMonth, depID)); } else if (group1ID > 0) { Provider.LoadDataByProc(ds, ds.tbThamSoTinhLuong.TableName, "p_tinhLuong_GetThamSoTinhLuong_WithGroup1", new SqlParameter("thang", cMonth), new SqlParameter("group1ID", group1ID)); Provider.LoadDataByProc(ds, ds.p_tinhLuong_GetAllKetQuaQuetThe.TableName, "p_tinhLuong_GetAllKetQuaQuetThe_WithGroup1", new SqlParameter("tuNgay", tuNgay), new SqlParameter("denNgay", denNgay), new SqlParameter("group1ID", group1ID)); Provider.LoadDataByProc(ds, ds.tblEmpAllowanceFix.TableName, "p_tinhLuong_GetPCCD_WithGroup1", new SqlParameter("group1ID", group1ID)); lp.OutMessage(">>> " + Lng.Luong_AnalyzeData.resetBL + " (Group1: " + group1ID + ") " + logic.ResetBangLuong_withGroup1(cMonth, group1ID)); } else { Provider.LoadDataByProc(ds, ds.tbThamSoTinhLuong.TableName, "p_tinhLuong_GetThamSoTinhLuong", new SqlParameter("thang", cMonth)); Provider.LoadDataByProc(ds, ds.p_tinhLuong_GetAllKetQuaQuetThe.TableName, "p_tinhLuong_GetAllKetQuaQuetThe", new SqlParameter("tuNgay", tuNgay), new SqlParameter("denNgay", denNgay)); Provider.LoadDataByProc(ds, ds.tblEmpAllowanceFix.TableName, "p_tinhLuong_GetPCCD"); lp.OutMessage(Lng.Luong_AnalyzeData.resetBL + logic.ResetBangLuong(cMonth)); } lp.OutMessage("Tham số tính lương: " + ds.tbThamSoTinhLuong.Rows.Count); lp.OutMessage(Lng.Luong_AnalyzeData.ketquaCC + ds.p_tinhLuong_GetAllKetQuaQuetThe.Rows.Count); lp.OutMessage("Phụ cấp cố định: " + ds.tblEmpAllowanceFix.Rows.Count); #endregion var lstEmp = ds.p_tinhLuong_GetAllKetQuaQuetThe.Select(i => i.EmployeeID).Distinct(); lp.MaxValue = lstEmp.Count(); lp.CurrentValue = 0; foreach (string eID in lstEmp) { try { var kqs = ds.p_tinhLuong_GetAllKetQuaQuetThe.Where(i => i.EmployeeID == eID).ToList(); var r = ds.tbBangLuongThang.NewtbBangLuongThangRow(); r.laBangLuongCu = false; r.id = Guid.NewGuid(); var r2 = ds.tbBangLuongThang.NewtbBangLuongThangRow(); r2.laBangLuongCu = true; r2.id = Guid.NewGuid(); var e1 = kqs[0]; #region tính lương TinhLuongHelper hp = new TinhLuongHelper(ds, tuNgay, denNgay, e1.EmployeeID); r.thang = r2.thang = cMonth; r.empoyeeID = r2.empoyeeID = eID; if (hp.luongMoi == null && hp.luongCu == null) { hp.luongMoi = ds.tblEmpSalary.Where(i => i.EmployeeID == e1.EmployeeID).OrderByDescending(i => i.DateChange).FirstOrDefault(); } r.luongCB = hp.luongMoi == null ? (e1["BasicSalary"] == DBNull.Value ? 0 : e1.BasicSalary) : hp.luongMoi.BasicSalary; r.luongPC = hp.luongMoi == null ? (e1["RegularAllowance"] == DBNull.Value ? 0 : e1.RegularAllowance) : hp.luongMoi.BasicSalary_Ins; r2.luongCB = (hp.luongCu == null) ? 0 : hp.luongCu.BasicSalary; r2.luongPC = (hp.luongCu == null) ? 0 : hp.luongCu.BasicSalary_Ins; r.ngaycong_bt = r.tienNC_bt = r.ngaycong_phep = r.tienNC_phep = r.ngaycong_phepNam = r.tienNC_phepNam = r.ngaycong_lt = r.tienNC_lt = r.ngaycong_cn = r.tienNC_cn = r.tongNgayCong = r.tienNgayCong = r.thuongLamCa = r.thuongBuaToi = r.ngayCong_Dem = 0; r.tgTangCa_bt = r.tienTangCa_bt = r.tgTangCa_cn = r.tienTangCa_cn = r.tgTangCa_lt = r.tienTangCa_lt = r.tongThoiGianTangCa = r.tienTangCa = r.tgTangCa_Dem = 0; r2.ngaycong_bt = r2.tienNC_bt = r2.ngaycong_phep = r2.tienNC_phep = r2.ngaycong_phepNam = r2.tienNC_phepNam = r2.ngaycong_lt = r2.tienNC_lt = r2.ngaycong_cn = r2.tienNC_cn = r2.tongNgayCong = r2.tienNgayCong = r2.thuongLamCa = r2.thuongBuaToi = r2.ngayCong_Dem = 0; r2.tgTangCa_bt = r2.tienTangCa_bt = r2.tgTangCa_cn = r2.tienTangCa_cn = r2.tgTangCa_lt = r2.tienTangCa_lt = r2.tongThoiGianTangCa = r2.tienTangCa = r2.tgTangCa_Dem = 0; r.tongLuongTG = r2.tongLuongTG = r.PhuCapTrachNhiem = r2.PhuCapTrachNhiem = 0; r.tongTgTangCa_cn_gio = r2.tongTgTangCa_cn_gio = 0; r.luongSP = r.luongTangCaSP = r.luongSP_tong = 0; for (int i = 1; i < 21; i++) { r["Calc" + i] = 0; r2["Calc" + i] = 0; r["PC" + i] = 0; r2["PC" + i] = 0; } double f; foreach (var kq in kqs) { hp.Set_KQQT(kq); #region tinh ngay cong theo luong moi r.ngaycong_bt += hp.TinhNgayCong(1); r.tienNC_bt += hp.TinhTienNgayCong(1); r.ngaycong_phep += hp.TinhNgayCong(2); r.tienNC_phep += hp.TinhTienNgayCong(2); f = hp.TinhNgayCong(5); r.ngaycong_phepNam += f; r.tienNC_phepNam += hp.TinhTienNgayCong(5); r.ngaycong_lt += hp.TinhNgayCong(3); r.tienNC_lt += hp.TinhTienNgayCong(3); f = hp.TinhNgayCong(4); r.ngaycong_cn += f; r.tongTgTangCa_cn_gio += f * kq.soTiengTinhCa; r.tienNC_cn += hp.TinhTienNgayCong(4); #endregion #region tinh tang ca theo luong moi var f1 = hp.TinhTienTangCa(1); r.tgTangCa_bt += hp.TinhGioTangCa(1); r.tienTangCa_bt += hp.TinhTienTangCa(1); f = hp.TinhGioTangCa(2); r.tgTangCa_cn += f; r.tongTgTangCa_cn_gio += f; r.tienTangCa_cn += hp.TinhTienTangCa(2); r.tgTangCa_lt += hp.TinhGioTangCa(3); r.tienTangCa_lt += hp.TinhTienTangCa(3); #endregion if (hp.luongCu != null) { #region tinh ngay cong theo luong cu r2.ngaycong_bt += hp.TinhNgayCong(1, true); r2.tienNC_bt += hp.TinhTienNgayCong(1, true); r2.ngaycong_phep += hp.TinhNgayCong(2, true); r2.tienNC_phep += hp.TinhTienNgayCong(2, true); r2.ngaycong_phepNam += hp.TinhNgayCong(5, true); r2.tienNC_phepNam += hp.TinhTienNgayCong(5, true); r2.ngaycong_lt += hp.TinhNgayCong(3, true); r2.tienNC_lt += hp.TinhTienNgayCong(3, true); f = hp.TinhNgayCong(4, true); r2.ngaycong_cn += f; r2.tienNC_cn += hp.TinhTienNgayCong(4, true); r2.tongTgTangCa_cn_gio += f * kq.soTiengTinhCa; #endregion #region tinh tang ca theo luong cu r2.tgTangCa_bt += hp.TinhGioTangCa(1, true); r2.tienTangCa_bt += hp.TinhTienTangCa(1, true); f = hp.TinhGioTangCa(2, true); r2.tgTangCa_cn += f; r2.tongTgTangCa_cn_gio += f; r2.tienTangCa_cn += hp.TinhTienTangCa(2, true); r2.tgTangCa_lt += hp.TinhGioTangCa(3, true); r2.tienTangCa_lt += hp.TinhTienTangCa(3, true); #endregion } } #endregion #region rounded money r.tienNC_bt = Math.Round(r.tienNC_bt, 0); r.tienNC_phep = Math.Round(r.tienNC_phep, 0); r.tienNC_phepNam = Math.Round(r.tienNC_phepNam, 0); r.tienNC_lt = Math.Round(r.tienNC_lt, 0); r.tienNC_cn = Math.Round(r.tienNC_cn, 0); r.tienNgayCong = Math.Round(r.tienNgayCong, 0); r.tienTangCa_bt = Math.Round(r.tienTangCa_bt, 0); r.tienTangCa_cn = Math.Round(r.tienTangCa_cn, 0); r.tienTangCa_lt = Math.Round(r.tienTangCa_lt, 0); r.tienTangCa = Math.Round(r.tienTangCa, 0); r2.tienNC_bt = Math.Round(r2.tienNC_bt, 0); r2.tienNC_phep = Math.Round(r2.tienNC_phep, 0); r2.tienNC_phepNam = Math.Round(r2.tienNC_phepNam, 0); r2.tienNC_lt = Math.Round(r2.tienNC_lt, 0); r2.tienNC_cn = Math.Round(r2.tienNC_cn, 0); r2.tienNgayCong = Math.Round(r2.tienNgayCong, 0); r2.tienTangCa_bt = Math.Round(r2.tienTangCa_bt, 0); r2.tienTangCa_cn = Math.Round(r2.tienTangCa_cn, 0); r2.tienTangCa_lt = Math.Round(r2.tienTangCa_lt, 0); r2.tienTangCa = Math.Round(r2.tienTangCa); #endregion #region tinh tong r.tongNgayCong = r.ngaycong_bt + r.ngaycong_phep + r.ngaycong_phepNam + r.ngaycong_lt; r.tienNgayCong = r.tienNC_bt + r.tienNC_phep + r.tienNC_phepNam + r.tienNC_lt; r.tongThoiGianTangCa = r.tgTangCa_bt + r.tgTangCa_lt + r.tongTgTangCa_cn_gio; r.tienTangCa = r.tienTangCa_bt + r.tienTangCa_lt + r.tienTangCa_cn + r.tienNC_cn; r2.tongNgayCong = r2.ngaycong_bt + r2.ngaycong_phep + r2.ngaycong_phepNam + r2.ngaycong_lt; r2.tienNgayCong = r2.tienNC_bt + r2.tienNC_phep + r2.tienNC_phepNam + r2.tienNC_lt; r2.tongThoiGianTangCa = r2.tgTangCa_bt + r2.tgTangCa_lt + r2.tongTgTangCa_cn_gio; r2.tienTangCa = r2.tienTangCa_bt + r2.tienTangCa_lt + r2.tienTangCa_cn + r2.tienNC_cn; #endregion #region tinh thưởng, phụ cấp r.tongPhuCapKhac = r2.tongPhuCapKhac = 0; r.khoanTruKhac = r2.khoanTruKhac = 0; r.tongThuongCalc = r2.tongThuongCalc = 0; var pcK = ds.tbThamSoTinhLuong.Where(i => i.employeeID == r.empoyeeID && (i["thang"] == DBNull.Value || i.thang == new DateTime(tuNgay.Year, tuNgay.Month, 1)) ).FirstOrDefault(); for (int i = 1; i < 21; i++) { r["PC" + i] = DbHelper.DrGetDouble(pcK, "PC" + i); if (r["PC" + i] != null && (double)r["PC" + i] > 0) { r.tongPhuCapKhac += (double)r["PC" + i]; } else { r.khoanTruKhac += (-1.0) * (double)r["PC" + i]; } } double ngaycong_rounded = (chkLamTron ? i_Round(r.ngaycong_bt + r2.ngaycong_bt) : r.ngaycong_bt + r2.ngaycong_bt) + (r.ngaycong_lt + r2.ngaycong_lt); // Cũ //double soNgayNghiPhepNam = ds.tbDangKyVangMat.Where(i => i.EmployeeID == e1.EmployeeID && i.lydo == (int)Enums.eLyDoNghi.NghiPhepNam && i.coTinhChuyenCan) // .Sum(i => TinhNgayCongPhep(i)); double soNgayNghiPhepNam = ds.tbDangKyVangMat.Where(i => i.EmployeeID == e1.EmployeeID && i.lydo == (int)Enums.eLyDoNghi.NghiPhepNam) .Sum(i => TinhNgayCongPhep(i)); double ngaycongthucte = ngaycong_rounded; //fix ngày nghỉ ko ảnh hưởng tới chuyên cần ngaycong_rounded += ds.tbDangKyVangMat.Where(i => i.EmployeeID == e1.EmployeeID && !i.coTinhChuyenCan && i.lydo != (int)Enums.eLyDoNghi.NghiPhepNam).Sum(i => TinhNgayCongPhep(i)); double soNgayNghiCheDo = ds.tbDangKyVangMat.Where(i => i.EmployeeID == e1.EmployeeID && (i.lydo == (int)Enums.eLyDoNghi.KetHon || i.lydo == (int)Enums.eLyDoNghi.MaChay) && i.coTinhChuyenCan) .Sum(i => TinhNgayCongPhep(i)); hp._soNgayCongTrongThang = soNgayCongThucTeTrongThang; foreach (var dr in ds.tbBangLuongCalc) { if (!string.IsNullOrWhiteSpace(dr.expression)) { NCalc.Expression exp = new NCalc.Expression(dr.expression); exp.Parameters.Add("thang", r.thang); exp.Parameters.Add("empoyeeID", r.empoyeeID); exp.Parameters.Add("luongCB", r.luongCB); exp.Parameters.Add("luongPC", r.luongPC); exp.Parameters.Add("luongCB_cu", r2.luongCB); exp.Parameters.Add("luongPC_cu", r2.luongPC); exp.Parameters.Add("soNgayCongTrongThang", hp._soNgayCongTrongThang); exp.Parameters.Add("soNgayNghiPhepNam", soNgayNghiPhepNam); exp.Parameters.Add("ngaycong_rounded", ngaycong_rounded); exp.Parameters.Add("soNgayNghiCheDo", soNgayNghiCheDo); exp.Parameters.Add("ngaycongthucte", ngaycongthucte); //for (int i = 1; i < 21; i++) // exp.Parameters.Add("PC" + i, r["PC" + i]); for (int i = 1; i < 11; i++) { exp.Parameters.Add("DataCalc" + i, DbHelper.DrGetDouble(pcK, "DataCalc" + i)); } if (!exp.HasErrors()) { if (r.Table.Columns.Contains(dr.fieldName)) { r[dr.fieldName] = exp.Evaluate(); } else { lp.OutMessage("EmpID " + eID + " ERR: Công thức tính lương: định nghĩa sai tên trường " + dr.fieldName); } } r.tongThuongCalc += Convert.ToDouble(r[dr.fieldName]); } } hp._soNgayCongTrongThang = soNgayCongThucTeTrongThang > 26 ? 26 : soNgayCongThucTeTrongThang; // Tính khoản phụ cấp cho nhân viên. double Phucap = 0; if (r.ngaycong_bt + r.ngaycong_lt + r.ngayCong_Dem > 13) { Phucap = r.luongPC; } else { var phucapMoi = r.luongPC / hp._soNgayCongTrongThang * (r.ngaycong_bt + r.ngaycong_lt + r.ngayCong_Dem + r.ngaycong_phepNam); var phucapCu = r2.luongPC / hp._soNgayCongTrongThang * (r2.ngaycong_bt + r2.ngaycong_lt + r2.ngayCong_Dem + r2.ngaycong_phepNam); Phucap = phucapCu + phucapMoi; } r.PhuCapTrachNhiem = Phucap; #endregion #region tinh luong SP r2.luongSP = r2.luongTangCaSP = r2.luongSP_tong = 0; if (pcK == null || pcK.LuongSP == 0) { r.luongSP = r.luongTangCaSP = r.luongSP_tong = 0; } else { r.luongSP = pcK.LuongSP; } #endregion r.luongThoiGian = r.tienNgayCong + r.tienTangCa + (r2.tienNgayCong + r2.tienTangCa); // PC2: Tiền con thơ r.ConTho = (ds.tblEmpChild.Where(p => p.EmployeeID == eID).Count() >= 1 ? 1 : 0) * 50000; // Tính tổng lương r.tongPhuCapKhac += r.tongThuongCalc + r.ConTho; r.tongLuongTG = r.luongThoiGian + r.ConTho + r.tongThuongCalc; r.tongLuong = r.luongThoiGian; r.tongLuong += r.tongLuong > 0 ? (r.tongPhuCapKhac + r.PhuCapTrachNhiem) : 0; r2.tongLuongTG = 0; r2.luongThoiGian = 0; r2.tongLuong = 0; #region khau tru r.ThueTNCN = 0; r.BH105 = 0; r.phiCongDoan = 0; r2.BH105 = 0; if (e1["coBH"] != DBNull.Value && e1.coBH) { if (e1["coBH_ngay"] != DBNull.Value && e1.coBH_ngay < denNgay) { r.BH105 = (r.luongCB + r.luongPC) * 10.5 / 100; } } r.tongKhauTru = r.BH105 + r.khoanTruKhac + r.phiCongDoan; r2.tongKhauTru = 0; #endregion int soNguoiPhuThuoc = (int)Provider.ExecSqlScalar(string.Format("select isnull(SoNguoiPhuThuoc,0) from tblEmployee where employeeID ='{0}'", eID)); r.SoNguoiPhuThuoc = soNguoiPhuThuoc; r.LuongThucNhanTinhThue = r.tongLuong - (r.tongLuong > 0 ? r.tongKhauTru : 0); //có lương mới trừ // Nếu thực nhận tính thuế < 9tr. Không phải tính. if (r.LuongThucNhanTinhThue > 9000000) { r.ThueTNCN = TinhThueTNCN(r.LuongThucNhanTinhThue, r.SoNguoiPhuThuoc); } r.tongKhauTru += r.ThueTNCN; r.actualBankTransfer = r.tongLuong - (r.tongLuong > 0 ? r.tongKhauTru : 0);//có lương mới trừ r2.actualBankTransfer = 0; r.analyzeDate = r2.analyzeDate = DateTime.Now; r.analyzeBy = r2.analyzeBy = UserDoing.id; r.statePushServer = "edit"; r2.statePushServer = "edit"; ds.tbBangLuongThang.Rows.Add(r); if (hp.luongCu != null) { ds.tbBangLuongThang.Rows.Add(r2); } } catch (Exception ex) { lp.OutMessage("EmpID " + eID + " ERR: " + ex.Message); } lp.CurrentValue += 1; } if (ds.tbBangLuongThang.GetChanges() == null) { lp.OutMessage("\n>> " + Lng.Luong_AnalyzeData.emptmsg); } else { var rowChanged = ds.tbBangLuongThang.GetChanges().Rows.Count; lp.OutMessage("\n>> Commit data to database..."); SqlParameter pa = new SqlParameter("dtBangLuongThang", SqlDbType.Structured); pa.TypeName = "dtBangLuongThang"; pa.Value = ds.tbBangLuongThang; Provider.ExecuteNonQuery("p_tinhLuong_updateBangLuongThang", pa); //Provider.UpdateData(ds, ds.tbBangLuongThang.TableName); lp.OutMessage("\n>> " + Lng.Luong_AnalyzeData.msg_1 + "(" + rowChanged + ") bản ghi"); } lp.OutMessage(Lng.Luong_AnalyzeData.msg_2); } catch (Exception ex) { lp.OutMessage(ex.Message); } }