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.SelectedText; 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.KiemtraThuocCa5(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) { DAO5.ThemGioChoNV(nv.MaCC, TimeStrInn, "I", 21, lydo, ghichu); DAO5.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.TOD_Duty.Off); var timeInnCa1 = ngay.AddDays(1d).Add(ca.casauuu.TOD_Duty.Onn).Add(XL2._01giay); DAO5.ThemGioChoNV(nv.MaCC, TimeStrInn, "I", 21, lydo, ghichu); DAO5.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"); DAO5.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"); DAO5.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 { DAO5.ThemGioChoNV(nv.MaCC, TimeStrInn, "I", 21, lydo, ghichu); DAO5.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 { DAO5.ThemGioChoNV(nv.MaCC, TimeStrInn, "I", 21, lydo, ghichu); DAO5.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); } }