private void btnXoaGio_Click(object sender, EventArgs e) { /* 1. lấy datasource để cập nhật lại sau khi thực hiện thêm xong hàng loạt * 2. lấy thông tin để thực hiện thêm giờ xuống csdl * 2. kiểm tra kết nối và thực hiện thêm giờ xuống csdl * 3. lưu lại ds tạm NV bị thay đổi giờ -> DSNV CầnReload * thực hiện remove khỏi danh sách nhân viên các NV bị thay đổi đó * 4. remove khỏi datasource các dòng có nhân viên bị thay đổi giờ * reload lại chấm công của dsnvCầnReload đó * 5. add lại các nhân viên bị thay đổi giờ vào listNhânviên * 6. tạo các dòng dữ liệu thỏa điều kiện của riêng các nhân viên cần reload * insert vào đầu datasource các dòng dữ liệu thỏa điều kiện đó */ DataTable table = gridControl1.DataSource as DataTable; bool checkXoaVao = checkBoxXoaVao.Checked, checkXoaRaa = checkBoxXoaRaa.Checked; int[] arraySelectedRow = gridView1.GetSelectedRows(); List <DataRow> listSelectedRow = arraySelectedRow.Select(index => gridView1.GetDataRow(index)).ToList(); // tbd kiểm tra kết nối trước khi thực hiện List <cUserInfo> DSNVReload = new List <cUserInfo>(); this.ThucHienXoaGioXuongCSDL(ref DSNVReload, ref listSelectedRow, checkXoaVao, checkXoaRaa); this.RemoveDSNVCanReload(ref DSNVReload); XL.XemCongThoiGianChuaKetLuong(DSNVReload, m_NgayBD, m_NgayKT); m_DSNV.AddRange(DSNVReload); //reload GUI RemoveDataRowHaveDSNVReload(ref table, DSNVReload); XacDinhGioThieuChamCong(DSNVReload); MyUtility.CheckedCheckBox(false, checkBoxXoaVao, checkBoxXoaRaa); }
private void ResetDataOfControl() { //chú ý ko xóa tag của button Chọn ca lbGioLV.Tag = null; lbGioCheckVT.Tag = null; lbVaoTre.Tag = null; lbRaaSom.Tag = null; lbOLaiChuaXN.Tag = null; lbCurrentCIO.Tag = null; // ẩn ko hiển thị text lbCurrentNgayCong.Tag = null; // ẩn ko hiển thị text timeEditXacNhanOT.Tag = null; MyUtility.CheckedCheckBox(false, checkChoPhepTre, checkChoPhepSom, checkVaoTreTinhCV, checkRaaSomTinhCV, checkXNLamThem); MyUtility.ClearControlText(lbGioLV, lbGioCheckVT, lbVaoTre, lbRaaSom, lbOLaiChuaXN, tbThongTinKhac, cbXNLyDo, tbXNGhiChu); timeEditXacNhanOT.Time = DateTime.Today.Date; //reset về timezero 0:00 }
private void dgrdGioCoLamThem_SelectionChanged(object sender, EventArgs e) { if (dgrdGioCoLamThem.SelectedRows.Count == 0) { #region reset layout MyUtility.ClearControlText(tbTTTenNV, tbTTGioVao, tbTTGioRaa, tbTTThuocCa, tbTTGioLam, tbTTTongGio, tbTTTreSom, tbTTOLaiThem, tbTTLamThem, tbXNCa, tbXNGioLam, tbXNTre, tbXNSom, tbXN_OLaiThem); MyUtility.CheckedCheckBox(false, checkTTChoPhepTre, checkTTChoPhepSom, checkTTTinhPC50, checkXNChoPhepTre, checkXNChoPhepSom, checkXNLamThem, checkXNTinhPC50, checkTTVaoTreTinhCV, checkTTRaaSomTinhCV, checkXNVaoTreTinhCV, checkXNRaaSomTinhCV);//ver 4.0.0.4 //numPhutTinhLamThem.Value = 0; maskPhutTinhLamThem.Text = "00:00"; //ver 4.0.0.4 maskPhutTinhLamThem.Tag = TimeSpan.Zero; //ver 4.0.0.4 #endregion MyUtility.EnableDisableControl(false, btnXacNhan, btnDoiCa, // ngoài reset layout thì disable nút xác nhận, nút sửa để tránh ấn nhầm gây lỗi checkXNChoPhepTre, checkXNChoPhepSom, checkXNLamThem, checkXNTinhPC50, numPhutTinhLamThem, maskPhutTinhLamThem, checkXNVaoTreTinhCV, checkXNRaaSomTinhCV); //ver 4.0.0.4 } else if (dgrdGioCoLamThem.SelectedRows.Count == 1) { MyUtility.EnableDisableControl(true, btnXacNhan, btnDoiCa, checkXNChoPhepTre, checkXNChoPhepSom, checkXNTinhPC50, checkXNLamThem, numPhutTinhLamThem, maskPhutTinhLamThem, checkXNVaoTreTinhCV, checkXNRaaSomTinhCV); //ver 4.0.0.4 var dataRowView = dgrdGioCoLamThem.SelectedRows[0].DataBoundItem as DataRowView; var nhanvien = dataRowView["cUserInfo"] as cUserInfo; var CIO = dataRowView["cCheckInOut"] as cCheckInOut; var ngaycong = dataRowView["cNgayCong"] as cNgayCong; #region fill phần thông tin CIO //DateTime ngaydangchon = CIO.ThuocNgayCong; tbTTTenNV.Text = nhanvien.TenNV; tbTTGioVao.Text = (CIO.Vao != null) ? CIO.Vao.Time.ToString("H:mm d/M") : string.Empty; tbTTGioRaa.Text = (CIO.Raa != null) ? CIO.Raa.Time.ToString("H:mm d/M") : string.Empty; tbTTThuocCa.Text = CIO.CIOCodeFull(); tbTTGioLam.Text = (CIO.HaveINOUT == 0) ? CIO.TG.GioLamViec5.ToString(@"h\gmm\p") : string.Empty; tbTTTongGio.Text = (CIO.HaveINOUT == 0) ? CIO.TG.GioThucTe5.ToString(@"h\gmm\p") : string.Empty; tbTTTreSom.Text = (CIO.HaveINOUT == 0) ? (CIO.TG.VaoTre + CIO.TG.RaaSom).ToString(@"h\gmm\p") : string.Empty; tbTTOLaiThem.Text = (CIO.HaveINOUT == 0) ? CIO.TG.OLai.ToString(@"h\gmm\p") : string.Empty; tbTTLamThem.Text = (CIO.DaXN) ? CIO.TG.SoPhutLamThem5.ToString(@"h\gmm\p") : string.Empty; checkTTChoPhepTre.Checked = CIO.DuyetChoPhepVaoTre; checkTTChoPhepSom.Checked = CIO.DuyetChoPhepRaSom; checkTTTinhPC50.Checked = ngaycong.TinhPC50; checkTTVaoTreTinhCV.Checked = CIO.VaoTreTinhCV; //ver 4.0.0.4 checkTTRaaSomTinhCV.Checked = CIO.RaaSomTinhCV; //ver 4.0.0.4 #endregion #region fill phần xác nhận CIO tbXNCa.Text = CIO.CIOCodeFull(); tbXNCa.Tag = (CIO.HaveINOUT == 0) ? CIO.ThuocCa : null; tbXNGioLam.Text = (CIO.HaveINOUT == 0) ? CIO.TG.GioLamViec5.ToString(@"h\gmm\p") : string.Empty; tbXNTre.Text = (CIO.HaveINOUT == 0) ? CIO.TG.VaoTre.ToString(@"h\gmm\p") : string.Empty; tbXNSom.Text = (CIO.HaveINOUT == 0) ? CIO.TG.RaaSom.ToString(@"h\gmm\p") : string.Empty; tbXN_OLaiThem.Text = (CIO.HaveINOUT == 0) ? CIO.TG.OLai.ToString(@"h\gmm\p") : string.Empty; //numPhutTinhLamThem.Maximum = (CIO.HaveINOUT == 0) ? Convert.ToInt32(CIO.TG.OLai.TotalMinutes) : 0; //numPhutTinhLamThem.Value = (CIO.HaveINOUT == 0) ? (Convert.ToInt32(CIO.TG.OLai.TotalMinutes) / 10) * 10 : 0; maskPhutTinhLamThem.Tag = (CIO.TG.OLai == null) ? TimeSpan.Zero : CIO.TG.OLai; //ver 4.0.0.4 maskPhutTinhLamThem.Text = (CIO.TG.OLai == null) ? "00:00" : CIO.TG.OLai.ToString(@"hh\:mm"); //ver 4.0.0.4 checkXNChoPhepTre.Checked = CIO.DuyetChoPhepVaoTre; checkXNChoPhepSom.Checked = CIO.DuyetChoPhepRaSom; checkXNLamThem.Checked = false; checkXNTinhPC50.Checked = false; checkXNVaoTreTinhCV.Checked = CIO.VaoTreTinhCV; //ver 4.0.0.4 checkXNRaaSomTinhCV.Checked = CIO.RaaSomTinhCV; //ver 4.0.0.4 tbXNGhiChu.Text = string.Empty; #endregion } else // chế độ xác nhận hàng loạt { MyUtility.EnableDisableControl(true, btnXacNhan, btnDoiCa, checkXNChoPhepTre, checkXNChoPhepSom, checkXNTinhPC50, checkXNLamThem, numPhutTinhLamThem, maskPhutTinhLamThem, checkXNVaoTreTinhCV, checkXNRaaSomTinhCV); //ver 4.0.0.4 var dataRowView = dgrdGioCoLamThem.SelectedRows[0].DataBoundItem as DataRowView; var nhanvien = dataRowView["cUserInfo"] as cUserInfo; var CIO = dataRowView["cCheckInOut"] as cCheckInOut; var ngaycong = dataRowView["cNgayCong"] as cNgayCong; #region fill thông tin CIO tbTTTenNV.Text = nhanvien.TenNV; tbTTGioVao.Text = (CIO.Vao != null) ? CIO.Vao.Time.ToString("H:mm d/M") : string.Empty; tbTTGioRaa.Text = (CIO.Raa != null) ? CIO.Raa.Time.ToString("H:mm d/M") : string.Empty; tbTTThuocCa.Text = CIO.CIOCodeFull(); tbTTGioLam.Text = (CIO.HaveINOUT == 0) ? CIO.TG.GioLamViec5.ToString(@"h\gmm\p") : string.Empty; tbTTTongGio.Text = (CIO.HaveINOUT == 0) ? CIO.TG.GioThucTe5.ToString(@"h\gmm\p") : string.Empty; tbTTTreSom.Text = (CIO.HaveINOUT == 0) ? (CIO.TG.VaoTre + CIO.TG.RaaSom).ToString(@"h\gmm\p") : string.Empty; tbTTOLaiThem.Text = (CIO.HaveINOUT == 0) ? CIO.TG.OLai.ToString(@"h\gmm\p") : string.Empty; tbTTLamThem.Text = (CIO.DaXN) ? CIO.TG.SoPhutLamThem5.ToString(@"h\gmm\p") : string.Empty; checkTTChoPhepTre.Checked = CIO.DuyetChoPhepVaoTre; checkTTChoPhepSom.Checked = CIO.DuyetChoPhepRaSom; checkTTTinhPC50.Checked = ngaycong.TinhPC50; checkTTVaoTreTinhCV.Checked = CIO.VaoTreTinhCV; //ver 4.0.0.4 checkTTRaaSomTinhCV.Checked = CIO.RaaSomTinhCV; //ver 4.0.0.4 #endregion #region fill phần xác nhận CIO var listCIO = (from DataGridViewRow dataGridViewRow in dgrdGioCoLamThem.SelectedRows let row = (DataRowView)dataGridViewRow.DataBoundItem select(cCheckInOut) row["cCheckInOut"]).ToList(); var distinctShift = (from cio in listCIO where cio.HaveINOUT == 0 select cio.ThuocCa).Distinct().ToList(); var distinctList_KR = listCIO.Where(item => item.HaveINOUT == -1).ToList(); var distinctList_KV = listCIO.Where(item => item.HaveINOUT == -2).ToList(); // phần ca làm việc if (distinctShift.Count == 1) { tbXNCa.Tag = distinctShift[0]; tbXNCa.Text = distinctShift[0].Code; } else { tbXNCa.Tag = null; tbXNCa.Text = string.Empty; } // phần giờ làm, ra trễ, về sớm, ở lại cần xn MyUtility.ClearControlText(tbXNGioLam, tbXNTre, tbXNSom, tbXN_OLaiThem); //numPhutTinhLamThem.Value = 0; //numPhutTinhLamThem.Maximum = 840; maskPhutTinhLamThem.Text = "00:00"; //ver 4.0.0.4 maskPhutTinhLamThem.Tag = XL2._16gio; //ver 4.0.0.4 MyUtility.CheckedCheckBox(false, checkXNChoPhepTre, checkXNChoPhepSom, checkXNLamThem, checkXNTinhPC50, checkXNVaoTreTinhCV, checkXNRaaSomTinhCV);//ver 4.0.0.4 tbXNGhiChu.Text = string.Empty; #endregion } }
private void btnThucHien_Click(object sender, EventArgs e) { if (XL2.KiemtraKetnoiCSDL() == false) { return; } #region ko cho chỉnh sửa giờ nếu khoảng thời gian xem công tồn tại các ngày đã kết lương if (XL.Kiemtra(new DateTime(dtpThang.Value.Year, dtpThang.Value.Month, 1), new DateTime(dtpThang.Value.Year, dtpThang.Value.Month, DateTime.DaysInMonth(dtpThang.Value.Year, dtpThang.Value.Month)))) { MessageBox.Show(string.Format(Resources.Text_KhoangTGDaKetCong_KoChinhSuaGioCC, "khai báo chấm công cho quản lý", "khai báo chấm công", ""), Resources.Caption_ThongBao, MessageBoxButtons.OK); return; } #endregion #region lấy và kiểm tra dsnv được chọn BindingContext[dgrdDSNVTrgPhg.DataSource].EndCurrentEdit(); //2. lấy danh sách nhân viên check, nếu chưa có nv nào check thì thông báo var listNV = (from DataGridViewRow dataGridViewRow in dgrdDSNVTrgPhg.Rows let rowView = dataGridViewRow.DataBoundItem as DataRowView where (rowView["check"] != DBNull.Value && (bool)rowView["check"]) select((cUserInfo)rowView["cUserInfo"])) .ToArray(); if (listNV.Length == 0) { ACMessageBox.Show(Resources.Text_ChuaChonNV, Resources.Caption_ThongBao, 2000); // GC.Collect(); } #endregion #region lấy ds các ngày đã check var DSNgayCheck = (from object item in checklistNgay.CheckedItems select(DateTime) item).ToList(); if (DSNgayCheck.Count == 0) { ACMessageBox.Show("Bạn chưa chọn ngày làm việc.", "Thông báo", 2000); return; } #endregion #region lấy thông tin var ngay1 = DateTime.Today.Date; TimeSpan TimeSpanBD = dtpBDLam.Value.TimeOfDay; TimeSpan TimeSpanKT = dtpKTLam.Value.TimeOfDay; var timeBD = ngay1.Add(TimeSpanBD); var timeKT = ngay1.Add(TimeSpanKT); if (TimeSpanBD > TimeSpanKT) { timeKT = timeKT.AddDays(1d); } //var sophutOT = (checkXNLamThem.Checked && numSoPhutOT.Value > 0) ? (int)numSoPhutOT.Value : 0; TimeSpan OTCa = TimeSpan.Zero; //ver 4.0.0.4 if (checkXNLamThem.Checked && TimeSpan.TryParseExact(maskPhutTinhLamThem.Text, @"hh\:mm", CultureInfo.InvariantCulture, out OTCa) == false) { ACMessageBox.Show(Resources.Text_NhapThoiGianLamThemChuaHopLe, Resources.Caption_Loi, 2000); return; } var sophutOT = Convert.ToInt32(OTCa.TotalMinutes); //ver 4.0.0.4 var TinhPCTC = (checkTinhPC150.Checked); var bVaoTreLaCV = checkXNVaoTreTinhCV.Checked; //ver 4.0.0.4 var bRaaSomLaCV = checkXNRaaSomTinhCV.Checked; //ver 4.0.0.4 string lydo = (cbLyDo.SelectedItem != null) ? cbLyDo.SelectedItem.ToString() : cbLyDo.Text; string ghichu = tbGhiChu.Text; #endregion #region hỏi lại trước khi thực hiện if (MessageBox.Show(Resources.Text_XacNhanThemChamCongTayChoQL, Resources.Caption_XacNhan, MessageBoxButtons.YesNo) == DialogResult.No) { return; } #endregion try { var ca = (tbCa.Tag == null) ? null : (cCa)tbCa.Tag; foreach (var nv in listNV) { foreach (var ngay in DSNgayCheck) { DateTime TimeStrInn = ngay.Date.Add(TimeSpanBD); DateTime TimeStrOut = ngay.Date.Add(TimeSpanKT); if (TimeSpanBD > TimeSpanKT) { TimeStrOut = TimeStrOut.AddDays(1d); } if (ca.QuaDem && TimeSpanBD < TimeSpanKT && TimeSpanBD < XL2._04h30) { TimeStrInn = TimeStrInn.AddDays(1d); TimeStrOut = TimeStrOut.AddDays(1d); } /* * if (ca.ID == int.MinValue) * XL.TaoCaTuDo(ca, TimeStrInn, XL2._08gio, XL2.ChoPhepTre, XL2.ChoPhepSom, XL2.LamThemAfterOT, 1f, "8"); * else if (ca.ID == int.MinValue + 1) * XL.TaoCaTuDo(ca, TimeStrInn, XL2._12gio, XL2.ChoPhepTre, XL2.ChoPhepSom, XL2.LamThemAfterOT, 1.5f, "D"); */ if (ca.ID < int.MinValue + 100) { XL.TaoCaTuDo(ca, TimeStrInn); //ver 4.0.0.4 } bool match = XL.KiemtraThuocCa(TimeStrInn, TimeStrOut, ngay, ca); // trường hợp chỉ chấm công bình thường thì chỉ thêm giờ cho đơn giản // các trường hợp xác nhận làm thêm x phút thì chuyển sang xác nhận if (ca.ID < 0) { DAO.ThemGioChoNV(nv.MaCC, TimeStrInn, "I", 21, lydo, ghichu); DAO.ThemGioChoNV(nv.MaCC, TimeStrOut, "O", 22, lydo, ghichu); XL.XacNhan_CIO_A(nv.MaCC, TimeStrInn, TimeStrOut, ca, false, false, sophutOT, TinhPCTC, lydo, ghichu, bVaoTreLaCV, bRaaSomLaCV); } else if (ca.IsExtended || sophutOT > 0 || match == false) { // các trường hợp phải xác nhận là ca tự do, ca mở rộng, ca có làm thêm và giờ nhập ko nằm trong khoảng nhận diện if (ca.TachCaDem) { var timeOutCa3 = ngay.Add(ca.catruoc.Duty.Off); var timeInnCa1 = ngay.AddDays(1d).Add(ca.casauuu.Duty.Onn).Add(XL2._01giay); DAO.ThemGioChoNV(nv.MaCC, TimeStrInn, "I", 21, lydo, ghichu); DAO.ThemGioChoNV(nv.MaCC, timeOutCa3, "O", 22, "Hệ thống tự động thêm giờ đệm tách ca qua ngày", "Thực hiện tự động"); DAO.ThemGioChoNV(nv.MaCC, timeInnCa1, "I", 21, "Hệ thống tự động thêm giờ đệm tách ca qua ngày", "Thực hiện tự động"); DAO.ThemGioChoNV(nv.MaCC, TimeStrOut, "O", 22, lydo, ghichu); XL.XacNhan_CIO_A(nv.MaCC, TimeStrInn, timeOutCa3, ca.catruoc, false, false, 0, TinhPCTC, lydo, ghichu, bVaoTreLaCV, bRaaSomLaCV); //ver 4.0.0.4 XL.XacNhan_CIO_A(nv.MaCC, timeInnCa1, TimeStrOut, ca.casauuu, false, false, sophutOT, TinhPCTC, lydo, ghichu, bVaoTreLaCV, bRaaSomLaCV); //ver 4.0.0.4 } else { DAO.ThemGioChoNV(nv.MaCC, TimeStrInn, "I", 21, lydo, ghichu); DAO.ThemGioChoNV(nv.MaCC, TimeStrOut, "O", 22, lydo, ghichu); XL.XacNhan_CIO_A(nv.MaCC, TimeStrInn, TimeStrOut, ca, false, false, sophutOT, TinhPCTC, lydo, ghichu, bVaoTreLaCV, bRaaSomLaCV); //ver 4.0.0.4 } } else { DAO.ThemGioChoNV(nv.MaCC, TimeStrInn, "I", 21, lydo, ghichu); DAO.ThemGioChoNV(nv.MaCC, TimeStrOut, "O", 22, lydo, ghichu); } } } MyUtility.CheckedCheckBox(false, chkAllWKDays, chkAddSat, chkAddSun); //ver 4.0.0.4 ACMessageBox.Show("Đã thêm giờ chấm công cho quản lý.", Resources.Caption_ThongBao, 2000); } catch (Exception ex) { lg.Error(string.Format("[{0}]_[{1}]\n", this.Name, System.Reflection.MethodBase.GetCurrentMethod().Name), ex); MessageBox.Show(Resources.Text_CoLoi, Resources.Caption_Loi); } }