private void btnDaoKieuChamCong_Click(object sender, EventArgs e) { dgrdTongHop.EndEdit(); DataTable table = (dgrdTongHop.DataSource) as DataTable; if (table == null) { return; } DataRow[] arrRecord = table.Select("check = true", "UserEnrollNumber asc"); if (arrRecord.Length == 0) { AutoClosingMessageBox.Show("Chưa chọn dòng dữ liệu thao tác.", "Thông báo", 2000); return; } bool flag = false; foreach (DataRow row in arrRecord) { // kiểm tra trước khi thực hiện if (row["TimeStrVao"] != DBNull.Value && row["TimeStrRa"] != DBNull.Value) { flag = true; continue; } cUserInfo tmpNV = flstDSNVChk.Find(item => item.UserEnrollNumber == (int)row["UserEnrollNumber"]); cNgayCong tmpNgay = tmpNV.DSNgayCong.Find(item => item.NgayCong == (DateTime)row["TimeStrNgay"]); DateTime tmpOldTime; cChk tmpChkOld; bool tmpIsCheckInOld; if (row["TimeStrVao"] != DBNull.Value) { tmpOldTime = (DateTime)row["TimeStrVao"]; tmpChkOld = tmpNV.ds_CheckAuto.Find(item => item.TimeStr == tmpOldTime && item.GetType() == typeof(cChkIn)); tmpIsCheckInOld = true; } else { tmpOldTime = (DateTime)row["TimeStrRa"]; tmpChkOld = tmpNV.ds_CheckAuto.Find(item => item.TimeStr == tmpOldTime && item.GetType() == typeof(cChkOut)); tmpIsCheckInOld = false; } if (tmpChkOld == null) { MessageBox.Show("Không thể sửa giờ đã được xác nhận.", "Thông báo"); continue; } if (XL.SuaGioChoNV(tmpNV.UserEnrollNumber, tmpChkOld, tmpChkOld.TimeStr, !tmpIsCheckInOld, "Chấm nhầm máy", "Thay đổi Số máy check") == false) { MessageBox.Show("Không sửa được giờ cho nhân viên. Vui lòng thử lại.", "Lỗi"); break; } } if (flag) { AutoClosingMessageBox.Show("Không thể đảo ngược giờ có đủ giờ vào và giờ ra", "Thông báo", 2000); } try { XL.XemCong(flstDSNVChk, fNgayBD, fNgayKT); loadTable(); } catch (Exception) { MessageBox.Show("Mất kết nối đến máy chủ. Vui lòng thử lại sau.", "Lỗi"); } GC.Collect(); }
private void btnXoaGio_Click(object sender, EventArgs e) { DataTable table = dgrdTongHop.DataSource as DataTable; if (table == null) { return; } DataRow[] arrRows = table.Select("check = true", "UserEnrollNumber asc"); //1 nếu chưa chọn ai thì thông báo if (arrRows.Length == 0) { AutoClosingMessageBox.Show("Bạn chưa chọn Nhân viên.", "Thông báo", 1000); return; } if (MessageBox.Show("Xoá giờ chấm công của các nhân viên?", "Xác nhận", MessageBoxButtons.OKCancel) == DialogResult.Cancel) { return; } bool flagThongBao = false, flagLoiThaoTacDL = false; foreach (DataRow row in arrRows) { cUserInfo tmpNV = flstDSNVChk.Find(o => o.UserEnrollNumber == (int)row["UserEnrollNumber"]); DateTime t_Vao = (row["TimeStrVao"] != DBNull.Value) ? (DateTime)row["TimeStrVao"] : DateTime.MinValue; DateTime t_Raa = (row["TimeStrRa"] != DBNull.Value) ? (DateTime)row["TimeStrRa"] : DateTime.MinValue; if (rdXoaVao.Checked) { if (t_Vao == DateTime.MinValue) { continue; } cChk tmpCheck = tmpNV.ds_CheckAuto.Find(o => o.TimeStr == t_Vao && o.GetType() == typeof(cChkIn)); if (tmpCheck == null) { flagThongBao = true; // giờ chưa xl thì xóa, giờ xác nhận thì bỏ qua } else { if (XL.XoaGioChoNV(tmpNV, tmpCheck, cbLyDo_Xoa.Text, tbGhiChu_Xoa.Text) == false) { flagLoiThaoTacDL = true; break; } } } else if (rdXoaRa.Checked) { if (t_Raa == DateTime.MinValue) { continue; } cChk tmpCheck = tmpNV.ds_CheckAuto.Find(o => o.TimeStr == t_Raa && o.GetType() == typeof(cChkOut)); if (tmpCheck == null) { flagThongBao = true; } else { if (XL.XoaGioChoNV(tmpNV, tmpCheck, cbLyDo_Xoa.Text, tbGhiChu_Xoa.Text) == false) { flagLoiThaoTacDL = true; break; } } } else { if (t_Vao != DateTime.MinValue && t_Raa != DateTime.MinValue) { cChk tmpCheckIn = tmpNV.ds_CheckAuto.Find(o => o.TimeStr == t_Vao && o.GetType() == typeof(cChkIn)); cChk tmpCheckOut = tmpNV.ds_CheckAuto.Find(o => o.TimeStr == t_Raa && o.GetType() == typeof(cChkOut)); if (tmpCheckIn != null && tmpCheckOut != null) { if (XL.XoaGioChoNV(tmpNV, tmpCheckIn, cbLyDo_Xoa.Text, tbGhiChu_Xoa.Text) == false) { flagLoiThaoTacDL = true; break; } if (XL.XoaGioChoNV(tmpNV, tmpCheckOut, cbLyDo_Xoa.Text, tbGhiChu_Xoa.Text) == false) { flagLoiThaoTacDL = true; break; } } else { flagThongBao = true; } } } } if (flagThongBao) { MessageBox.Show("Không thể sửa giờ đã được xác nhận.", "Thông báo"); } if (flagLoiThaoTacDL) { MessageBox.Show("Mất kết nối đến máy chủ. Vui lòng thử lại.", "Lỗi", MessageBoxButtons.OK); } try { XL.XemCong(flstDSNVChk, fNgayBD, fNgayKT); loadTable(); } catch (Exception) { MessageBox.Show("Mất kết nối đến máy chủ. Vui lòng thử lại.", "Lỗi", MessageBoxButtons.OK); } GC.Collect(); }
private void btnXem_Click(object sender, EventArgs e) { //1. lấy dữ liệu từ form #region lấy ngày BD và kết thúc, và update lại Ngày BD = 1 ngày trước 31/08 12:00 AM, ngày KT là 1 ngày sau ngay 1 23:59:59 dtpNgayBD.Update(); dtpNgayKT.Update(); DateTime ngayBD = dtpNgayBD.Value.Date; ngayBD = ngayBD.AddDays(-1d); DateTime ngayKT = dtpNgayKT.Value.Date; ngayKT = ngayKT.AddDays(2d).Subtract(new TimeSpan(0, 0, 1)); #endregion //-----------BUG [KHÔNG PHẢI BUG] CHỈ TÔ MÀU ĐỂ CHÚ Ý] bắt buộc EndEdit thao tác trên Grid rồi mới thực hiện xử lý tác vụ dgrdDSNVTrgPhg.EndEdit(); dgrdDSNVTrgPhg.Update(); //2. lấy danh sách nhân viên check if (flstDSNVChkXemCong == null) { flstDSNVChkXemCong = new List <cUserInfo>(); } else { flstDSNVChkXemCong.Clear(); } LayDSNVXemCong(dgrdDSNVTrgPhg.DataSource as DataTable, flstDSNVChkXemCong, flstDSNV); //3. lấy dữ liệu chấm công của các nhân viên if (flstDSNVChkXemCong.Count == 0) { AutoClosingMessageBox.Show("Chưa chọn Nhân viên", "Thông báo", 2000); return; } //[CHÚ Ý] ngày bắt đầu và kết thúc đã cộng trừ thêm 1 ngày trước sau ở bở trên try { WaitWindow.Show(this.abc, "Đang xử lý...", new object[] { flstDSNVChkXemCong, ngayBD, ngayKT }); //XL.XemCong(flstDSNVChkXemCong, ngayBD, ngayKT); //4. xử lý dữ liệu để đưa lên lưới tổng hợp DataTable dataTableTongHop = dgrdTongHop.DataSource as DataTable; if (dataTableTongHop == null) { dataTableTongHop = TaoCauTrucDataTableTongHop(); } else { dataTableTongHop.Rows.Clear(); } DataTable dataTableKDQD = dgrdGioKDQD.DataSource as DataTable; if (dataTableKDQD == null) { dataTableKDQD = TaoCauTrucDataTableKDQD(); } else { dataTableKDQD.Rows.Clear(); } const string shiftid = "ShiftID"; int i1 = 1; #region fill vào dataTable foreach (cUserInfo nhanvien in flstDSNVChkXemCong) { for (int i = 1; i < nhanvien.DSNgayCong.Count - 1; i++) //[CHÚ Ý] ở đây chỉ chạy từ 1-> kế cuối //Debug.WriteLine(nhanvien.DSNgayCong[0]); //Debug.WriteLine(nhanvien.DSNgayCong[nhanvien.DSNgayCong.Count - 1]); { cNgayCong ngayCong = nhanvien.DSNgayCong[i]; //Debug.WriteLine(cChkInOut1.ToString()); DataRow rowTH = dataTableTongHop.NewRow(); rowTH["check"] = false; rowTH["UserEnrollNumber"] = nhanvien.UserEnrollNumber; rowTH["UserFullName"] = nhanvien.UserFullName; rowTH["TimeStrNgay"] = rowTH["TimeStrThu"] = ngayCong.NgayCong; rowTH["Cong"] = ngayCong.TongCong; rowTH["PhuCap"] = ngayCong.TongPhuCap; rowTH["TimeStrTre"] = Math.Floor(ngayCong.TongTre.TotalMinutes); rowTH["TimeStrSom"] = Math.Floor(ngayCong.TongSom.TotalMinutes); rowTH["TongGioLam"] = ngayCong.TongGioLam.TotalHours; rowTH["TongGioThuc"] = ngayCong.TongGioThuc.TotalHours; if (ngayCong.HasCheck) { i1 = 1; foreach (cChkInOut cChkInOut1 in ngayCong.DSVaoRa) { if (i1 > 3) { break; } rowTH[ThamSo.nameVao + i1] = cChkInOut1.Vao != null ? (object)cChkInOut1.Vao.TimeStr : DBNull.Value; rowTH[ThamSo.nameRa + i1] = cChkInOut1.Raa != null ? (object)cChkInOut1.Raa.TimeStr : DBNull.Value; rowTH[shiftid + i1] = (cChkInOut1.HaveINOUT > 0) ? (object)cChkInOut1.ThuocCa.ShiftID : DBNull.Value; rowTH["ShiftCode"] += (cChkInOut1.HaveINOUT > 0) ? cChkInOut1.ThuocCa.ShiftCode + "; " : ((cChkInOut1.HaveINOUT == -1) ? "KV; " : "KR; "); i1++; } rowTH["ShiftCode"] += ngayCong.XuatChuoiVang(); } else { if (ngayCong.DSVang != null && ngayCong.DSVang.Count != 0) { rowTH["ShiftCode"] += ngayCong.XuatChuoiVang(); } else { rowTH["ShiftCode"] = "--"; } } dataTableTongHop.Rows.Add(rowTH); } } #endregion dgrdTongHop.DataSource = dataTableTongHop; foreach (DataRow row in dataTableTongHop.Select("(ShiftID1 is NULL and (TimeStrVao1 is not null or TimeStrRa1 is not null)) " + " or (ShiftID2 is NULL and (TimeStrVao2 is not null or TimeStrRa2 is not null))" + " or (ShiftID3 is NULL and (TimeStrVao3 is not null or TimeStrRa3 is not null))" + " OR (ShiftID1 is NOT NULL and ShiftID1 = " + int.MinValue + ")" + " OR (ShiftID2 is NOT NULL and ShiftID2 = " + int.MinValue + ")" + " OR (ShiftID3 is NOT NULL and ShiftID3 = " + int.MinValue + ")", string.Empty, DataViewRowState.CurrentRows).ToList()) { dataTableKDQD.ImportRow(row); } dgrdGioKDQD.DataSource = dataTableKDQD; checkAllGridTH.CheckedChanged -= checkAll_CheckedChanged; checkAllGridKDQD.CheckedChanged -= checkAll_CheckedChanged; checkAllGridTH.Checked = false; checkAllGridKDQD.Checked = false; checkAllGridTH.CheckedChanged += checkAll_CheckedChanged; checkAllGridKDQD.CheckedChanged += checkAll_CheckedChanged; GC.Collect(); } catch { MessageBox.Show("Mất kết nối đến máy chủ. Vui lòng thử lại sau.", "Lỗi"); GC.Collect(); return; } }