public void ThucHienKetCong(object sender, WaitWindowEventArgs e) { #region string TemplateShiftParams = @"Ca: [{0}]; ID: [{1}]; Onn: [{2}]; Off: [{3}]; BD_NDVao: [{4}]; KT_NDVao: [{5}]; BD_NDRa: [{6}]; KT_NDRa: [{7}]; CPTre: [{8}]ph: [{9}]; CPSom: [{10}]ph: [{11}]; AfterOT: [{12}]ph: [{13}]; LunchMin: [{14}]; WKTime: [{15}]; WKDay: [{16}]; DayCount: [{17}]; QuaDem: [{18}]; CaMoRong: [{19}]; CaTuDo: [{20}]; TachCaDem: [{21}];"; string templateThongTinCa = @"Thông tin ca [{10}] (ký hiệu [{11}]): Vào ca lúc [{0}], Ra ca lúc [{1}], Ca [{2}], Ca làm việc [{3}] tiếng, được nghỉ trưa [{4}] phút, tính [{5}] công, cho phép trễ [{6}] phút, ra sớm [{7}] phút, thời gian làm thêm tối thiểu [{8}] phút, [{9}] qua xác nhận quản lý"; string shiftParams = string.Empty, thongtinCa = string.Empty; #endregion DateTime thang = (DateTime)e.Arguments[0]; List <cPhongBan> dsphongban = (List <cPhongBan>)e.Arguments[1]; #region lấy ngày BD và kết thúc DateTime ngaydauthang = MyUtility.FirstDayOfMonth(thang), ngaycuoithang = MyUtility.LastDayOfMonth(thang); var ngayBD_Bef2D = ngaydauthang.AddDays(-2d); var ngayKT_Aft2D = ngaycuoithang.AddDays(2d); #endregion try //general try catch { // khởi tạo các nhân viên chấm công thuộc phòng ban check kết công (được thao tác) và tính toán công, phụ cấp XL.KhoiTaoDSNV_ChamCong(m_DSNV, (from cPhongBan item in dsphongban select item.ID).ToList(), dsphongban); XL.XemCong_v08(m_DSNV, ngayBD_Bef2D, ngayKT_Aft2D); // sau khi tính công xong thì cập nhật lại xử lý các trường hợp công nhật var tableCongNhat = DAO5.LayTableCongNhat(thang); foreach (DataRow row in tableCongNhat.Rows) { int macc = (int)row["UserEnrollNumber"]; DateTime ngayBD = (DateTime)row["NgayBatDau"]; DateTime ngayKT = (DateTime)row["NgayKetThuc"]; var nv = m_DSNV.Find(o => o.MaCC == macc); //tìm nv , ko tìm thấy thì tiếp tục if (nv == null) { continue; } //duyệt qua các ngày công để set lại phụ cấp, xoá hết các ds vắng float CongCongnhat = 0f; foreach (var ngayCong in nv.DSNgayCong.Where(o => o.Ngay >= ngayBD && o.Ngay <= ngayKT)) { ngayCong.PhuCaps = new PhuCap(); ngayCong.QuaDem = false; ngayCong.DSVang.Clear(); CongCongnhat += ngayCong.TongCong; } // cập nhật số ngày công công nhật xuống csdl int kq1 = SqlDataAccessHelper.ExecNoneQueryString(" update DSNVChiCongNhatThang set SoNgayCong = @SoNgayCong where UserEnrollNumber= @UserEnrollNumber", new string[] { "@SoNgayCong", "@UserEnrollNumber" }, new object[] { CongCongnhat, macc }); //info ko cần log if (kq1 == 0) { MessageBox.Show(Resources.Text_CoLoi); } } // xoá bỏ các kết công cũ của tháng (nếu có) để ghi kết công mới cho tháng int kq = DAO5.DelKetCongCa_Ngay(ngaydauthang, ngaycuoithang, (from nv in m_DSNV select nv.MaCC).ToList()); //bool flagError = false; foreach (var nv in m_DSNV) { foreach (var ngayCong in nv.DSNgayCong.Where(item => item.Ngay >= ngaydauthang && item.Ngay <= ngaycuoithang)) { foreach (var CIO in ngayCong.DSVaoRa) { int kq1 = 0; if (CIO.HaveINOUT < 0) { kq1 = DAO5.InsKetCongCa(nv.MaCC, ngayCong.Ngay, (CIO.Vao != null) ? (DateTime?)CIO.Vao.Time : null, (CIO.Raa != null) ? (DateTime?)CIO.Raa.Time : null, null, string.Empty, null, null, null, null, null, //ver 4.0.0.4 VaoTreLaCV, RaSomLaCV null, null, string.Empty, null, null, null, null, null, null, null, null, string.Empty, string.Empty, CIO.HaveINOUT, null); } else { #region tạo shiftParams var sp = CIO.ThuocCa; shiftParams = string.Format(TemplateShiftParams, sp.Code, sp.ID, sp.TOD_Duty.Onn.ToString(@"d\ hh\:mm"), sp.TOD_Duty.Off.ToString(@"d\ hh\:mm"), //sp.TOD_NhanDienVao.Onn.ToString(@"d\ hh\:mm"), sp.TOD_NhanDienVao.Off.ToString(@"d\ hh\:mm"), //sp.TOD_NhanDienRaa.Onn.ToString(@"d\ hh\:mm"), sp.TOD_NhanDienRaa.Off.ToString(@"d\ hh\:mm"), sp.TS_PhutChoTre.Minutes, string.Empty /* sp.TOD_ChoPhepTreSom.Onn.ToString(@"d\ hh\:mm")*/, sp.TS_PhutChoSom.Minutes, string.Empty /*sp.TOD_ChoPhepTreSom.Off.ToString(@"d\ hh\:mm")*/, sp.TS_PhutAfterOT.Minutes, string.Empty /*sp.TOD_batdaulamthem.ToString(@"d\ hh\:mm")*/, sp.TS_PhutNghiTrua.Minutes, sp.WorkingTimeTS.TotalMinutes.ToString("#####"), sp.Workingday.ToString("0.0"), /*sp.DayCount*/ 0, Convert.ToInt32(sp.QuaDem), Convert.ToInt32(sp.IsExtended), /*Convert.ToInt32(sp.Is_CaTuDo)*/ false, Convert.ToInt32(sp.TachCaDem)); thongtinCa = string.Format(templateThongTinCa, sp.TOD_Duty.Onn.ToString(@"d\ hh\:mm"), sp.TOD_Duty.Off.ToString(@"d\ hh\:mm"), sp.Code, sp.WorkingTimeTS.TotalMinutes.ToString("#####"), sp.TS_PhutNghiTrua.Minutes, sp.Workingday.ToString("0.0#"), sp.TS_PhutChoTre.Minutes, sp.TS_PhutChoSom.Minutes, Convert.ToInt32(sp.TS_PhutAfterOT.TotalMinutes), CIO.DaXN ? "đã" : "chưa", sp.Code, sp.KyHieuCC); #endregion kq1 = DAO5.InsKetCongCa(nv.MaCC, ngayCong.Ngay, CIO.Vao.Time, CIO.Raa.Time, CIO.ThuocCa.ID, CIO.ThuocCa.Code, CIO.DaXN, CIO.DuyetChoPhepVaoTre, CIO.DuyetChoPhepRaSom, CIO.VaoTreTinhCV, CIO.RaaSomTinhCV, //ver 4.0.0.4 CIO.OTMin, CIO.QuaDem, CIO.ThuocCa.KyHieuCC, CIO.TG.GioLamViec5, CIO.TG.LamTangCuong, CIO.TG.LamBanDem, CIO.TG.GioThucTe5, CIO.TG.VaoTre, CIO.TG.RaaSom, CIO.TD.BD_LV, CIO.TD.KT_LV, thongtinCa, shiftParams, CIO.HaveINOUT, CIO.Cong); } } if (ngayCong.DSVaoRa.Count != 0) { int kq2 = DAO5.InsKetCongNgay(nv.MaCC, ngayCong.Ngay, ngayCong.TongCong, ngayCong.TongNgayLV, ngayCong.PhuCaps._TongPC, //ver4.0.0.1 ngayCong.PhuCaps._30_dem, ngayCong.PhuCaps._50_TC, ngayCong.PhuCaps._100_TCC3, ngayCong.PhuCaps._100_LVNN_Ngay, ngayCong.PhuCaps._150_LVNN_Dem, ngayCong.PhuCaps._200_LeTet_Ngay, ngayCong.PhuCaps._250_LeTet_Dem, ngayCong.PhuCaps._Cus, ngayCong.TG.GioLamViec5, ngayCong.TG.LamTangCuong, ngayCong.TG.LamBanDem, ngayCong.TG.GioThucTe5, ngayCong.QuaDem); } } } // sau khi ghi kết công thì cập nhật tình trạng kết công (đã kết công), đồng thời ghi log đã kết công DAO5.UpdInsKetCongBoPhan(ngaydauthang, (from cPhongBan item in dsphongban select item).ToList()); } 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); } }