private void dgrdTongHop_SelectionChanged(object sender, EventArgs e) { if (dgrdTongHop.SelectedRows.Count == 0) { return; } DataTable tmpTable = (dgrdTongHop.DataSource as DataTable); if (tmpTable == null || tmpTable.Rows.Count == 0) { return; } DataRowView dataRowView = dgrdTongHop.SelectedRows[0].DataBoundItem as DataRowView; //dgrdTongHop.Tag = dataRowView; if (dataRowView == null) { return; } int tmpUserEnrollNumber = (int)dataRowView["UserEnrollNumber"]; cUserInfo tmpNV = flstDSNVChk.Find(o => o.UserEnrollNumber == tmpUserEnrollNumber); DateTime tmpNgayCong = (DateTime)dataRowView["TimeStrNgay"]; //test += "\nTimeStrNgay:" + tmpNgayCong.ToShortDateString() + " "; DateTime tmpVao = (dataRowView["TimeStrVao"] == DBNull.Value) ? DateTime.MinValue : (DateTime)dataRowView["TimeStrVao"]; DateTime tmpRa = (dataRowView["TimeStrRa"] == DBNull.Value) ? DateTime.MinValue : (DateTime)dataRowView["TimeStrRa"]; //test += "\ttmpVao:" + tmpVao.ToShortTimeString() + " \ttmpRa" + tmpRa.ToShortTimeString(); cNgayCong ngayCong = tmpNV.DSNgayCong.Find(o => o.NgayCong == tmpNgayCong); //test += tmpNV + "\n " + ngayCong; //lg.Info(test); cChkInOut old_CIO = new cChkInOut_A() { TG = new ThoiGian() }; try { if (ngayCong.HasCheck == false || (tmpVao == DateTime.MinValue && tmpRa == DateTime.MinValue)) { old_CIO = null; } else if (tmpVao == DateTime.MinValue && tmpRa != DateTime.MinValue) { old_CIO = ngayCong.DSVaoRa.Find(o => o.HaveINOUT == -2 && o.Raa.TimeStr == tmpRa); } else if (tmpRa == DateTime.MinValue && tmpVao != DateTime.MinValue) { old_CIO = ngayCong.DSVaoRa.Find(o => o.HaveINOUT == -1 && o.Vao.TimeStr == tmpVao); } else { old_CIO = ngayCong.DSVaoRa.Find(o => o.HaveINOUT > 0 && o.Vao.TimeStr == tmpVao && o.Raa.TimeStr == tmpRa); } LoadTabThemGio(tmpNV, tmpNgayCong, old_CIO); LoadTabSuaGio(tmpNV, tmpNgayCong, old_CIO); } catch (Exception ex) { string temp = "\n--start \n NV: " + tmpNV + "\nCIO: "; temp += (old_CIO != null) ? old_CIO.ToString() : "null"; temp += "\n--end"; lg.Fatal(ex.StackTrace + temp); AutoClosingMessageBox.Show("Có lỗi trong quá trình thao tác.", "Lỗi", 1500); } }
private void btnThucHien_Click(object sender, EventArgs e) { #region kiểm tra kết nối csdl trước khi thực hiện if (SqlDataAccessHelper.TestConnection(SqlDataAccessHelper.ConnectionString) == false) { AutoClosingMessageBox.Show("Mất kết nối với CSDL. Vui lòng thử lại sau.", "Lỗi", 2000); 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 IEnumerable <DataGridViewRow> lstGridViewRow = dgrdDSNVTrgPhg.Rows.Cast <DataGridViewRow>(); var listDataRow = from row in (lstGridViewRow)select row.DataBoundItem as DataRowView; var listNV = (from rowView in listDataRow where (rowView["check"] != DBNull.Value && (bool)rowView["check"]) select((cUserInfo)rowView["cUserInfo"]).MaCC).ToArray(); if (listNV.Length == 0) { AutoClosingMessageBox.Show("Bạn chưa chọn Nhân viên", "Thông báo", 2000); return; } #endregion #region lấy ds các ngày đã check var DSNgayCheck = checklistNgay.Items.Cast <object>().Where((t, i) => checklistNgay.GetItemChecked(i)).Cast <DateTime>().ToList(); if (DSNgayCheck.Count == 0) { AutoClosingMessageBox.Show("Bạn chưa chọn ngày làm việc.", "Thông báo", 2000); return; } #endregion #region lấy ca được chọn // kiểm tra chọn ca làm việc chưa? chưa thì báo cCaAbs ca = cbCa.SelectedItem as cCaAbs; if (ca == null || cbCa.SelectedIndex == 0) { AutoClosingMessageBox.Show("Bạn chưa chọn ca làm việc.", "Thông báo", 1500); return; } #endregion #region lấy check xác nhận làm thêm và check pc 50, lý do, ghi chú string lydo = (cbLyDo.SelectedItem != null) ? cbLyDo.SelectedItem.ToString() : cbLyDo.SelectedText; string ghichu = tbGhiChu.Text; #endregion #region lấy thời gian //đã chọn ca làm việc /* * TimeSpan tgInn = dtpBDLam.Value.TimeOfDay; * TimeSpan tgOut = dtpKTLam.Value.TimeOfDay; * if (tgInn > tgOut) tgOut = tgOut.Add(XL2._1ngay); */ 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; var TinhPCTC = (checkTinhPC150.Checked); var giolam = TimeSpan.Zero; var Cong = 0d; var PhuCap = 0d; #endregion var TreSomTinhCV = checkTreSomTinhCV.Checked; if (ca.QuaDem && TimeSpanBD < TimeSpanKT && TimeSpanBD < XL2._04h30) { timeBD = timeBD.AddDays(1d); timeKT = timeKT.AddDays(1d); } if (TinhToan(ngay1, ca.ID, ca.WorkingTimeTS, ca.Workingday, ca.LunchMin, ngay1.Add(ca.OnnTS), ngay1.Add(ca.OffTS), ngay1.Add(ca.chophepTreTS), ngay1.Add(ca.chophepSomTS), timeBD, timeKT, sophutOT, TinhPCTC, out giolam, out Cong, out PhuCap) == false) { return; } bool flagError = false; #region hỏi lại trước khi thực hiện if ( MessageBox.Show( "Bạn muốn thêm các giờ chấm công tay cho các nhân viên?\nVui lòng kiểm tra kỹ thời gian nhập để không làm sai lệch công của nhân viên.", Resources.capXacNhan, MessageBoxButtons.YesNo) == DialogResult.No) { return; } #endregion foreach (var macc 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((cCaTuDo)ca, TimeStrInn, XL2._08gio, XL2.ChoPhepTre, XL2.ChoPhepSom, XL2.LamThemAfterOT, 1f, "8"); } else if (ca.ID == int.MinValue + 1) { XL.TaoCaTuDo((cCaTuDo)ca, TimeStrInn, XL2._12gio, XL2.ChoPhepTre, XL2.ChoPhepSom, XL2.LamThemAfterOT, 1.5f, "D"); } if (ngay <= XL2.ThangKetCong && XL2.ThangKetCong != DateTime.MinValue) { continue; //tbd temp patch } if (checkXNLamThem.Checked || TinhPCTC || TreSomTinhCV) //1.có XN làm thêm --> thêm giờ XN, 2.không xác nhận làm thêm thì thêm giờ A { var nv = new cUserInfo { MaCC = macc, }; var chkinn = new cChkInn_A { Time = TimeStrInn, Type = "I", MachineNo = 21, Source = "PC", PhucHoi = new cPhucHoi { Them = true, IDGioGoc = -1, Xoaa = false } }; var chkout = new cChkOut_A { Time = TimeStrOut, Type = "O", MachineNo = 22, Source = "PC", PhucHoi = new cPhucHoi { Them = true, IDGioGoc = -1, Xoaa = false } }; var cio_a = new cChkInOut_A { Vao = chkinn, Raa = chkout, TimeDaiDien = chkinn.Time, HaveINOUT = 0, ThuocCa = ca, ThuocNgayCong = XL.ThuocNgayCong(TimeStrInn), TD = new ThoiDiem(), }; XL.ThemGioChoNVQL(chkinn, nv, XL2.currUserID, lydo, ghichu); XL.ThemGioChoNVQL(chkout, nv, XL2.currUserID, lydo, ghichu); if (ca.TachCa) { XL.XacNhanCoTachCaChoQL(nv, cio_a, ca, sophutOT, TinhPCTC, TreSomTinhCV); } else { XL.XacNhanKoTachCaChoQL(nv, cio_a, ca, sophutOT, TinhPCTC, TreSomTinhCV); } } else // không xác nhận làm thêm thì thêm giờ A { XL.ThemGioChoNVQL(new cChkInn_A { Time = TimeStrInn, Type = "I", MachineNo = 21, Source = "PC", PhucHoi = new cPhucHoi { Them = true, IDGioGoc = -1, Xoaa = false } }, new cUserInfo { MaCC = macc }, XL2.currUserID, lydo, ghichu); XL.ThemGioChoNVQL(new cChkOut_A { Time = TimeStrOut, Type = "O", MachineNo = 22, Source = "PC", PhucHoi = new cPhucHoi { Them = true, IDGioGoc = -1, Xoaa = false } }, new cUserInfo { MaCC = macc }, XL2.currUserID, lydo, ghichu); XL.CheckTinhPC50(new cUserInfo { MaCC = macc }, (TimeStrInn.TimeOfDay < XL2._04h30 ? TimeStrInn.Date.AddDays(-1) : TimeStrInn.Date), TinhPCTC); } } } if (flagError) { AutoClosingMessageBox.Show("Thêm giờ chấm công tay cho các nhân viên thành công.", "Thông báo", 2000); } }
private void btnThucHien_Click(object sender, EventArgs e) { if (SqlDataAccessHelper.TestConnection(SqlDataAccessHelper.ConnectionString) == false) { AutoClosingMessageBox.Show("Mất kết nối với CSDL. Vui lòng thử lại sau.", "Lỗi", 2000); return; } // kiểm tra chọn ca làm việc chưa? chưa thì báo cCaAbs ca = cbCa.SelectedItem as cCaAbs; if (ca == null || cbCa.SelectedIndex == 0) { AutoClosingMessageBox.Show("Bạn chưa chọn ca làm việc.", "Thông báo", 1500); return; } //đã chọn ca làm việc var ngay = dtpNgay.Value.Date; TimeSpan timespanBD = dtpBDLam.Value.TimeOfDay; TimeSpan timeSpanKT = dtpKTLam.Value.TimeOfDay; var timeBD = ngay.Add(timespanBD); var timeKT = ngay.Add(timeSpanKT); if (timespanBD > timeSpanKT) { timeKT = timeKT.AddDays(1d); } var sophutOT = (checkXNLamThem.Checked && numSoPhutOT.Value > 0) ? (int)numSoPhutOT.Value : 0; var TinhPCTC = (checkTinhPC150.Checked); var TreSomTinhCV = checkTreSomTinhCV.Checked; var giolam = TimeSpan.Zero; var Cong = 0d; var PhuCap = 0d; if (ca.QuaDem && timespanBD < timeSpanKT && timespanBD < XL2._04h30) { timeBD = timeBD.AddDays(1d); timeKT = timeKT.AddDays(1d); } if (TinhToan(ngay, ca.ID, ca.WorkingTimeTS, ca.Workingday, ca.LunchMin, ngay.Add(ca.OnnTS), ngay.Add(ca.OffTS), ngay.Add(ca.chophepTreTS), ngay.Add(ca.chophepSomTS), timeBD, timeKT, sophutOT, TinhPCTC, out giolam, out Cong, out PhuCap) == false) { tbGioLam.Text = giolam.TotalHours.ToString("#0.##"); tbCong.Text = Cong.ToString("0.0#"); tbPC.Text = PhuCap.ToString("0.0#"); return; } #region hỏi lại trước khi thực hiện if ( MessageBox.Show( "Bạn muốn thêm các giờ chấm công tay cho các nhân viên?\nVui lòng kiểm tra kỹ thời gian nhập để không làm sai lệch công của nhân viên.", Resources.capXacNhan, MessageBoxButtons.YesNo) == DialogResult.No) { return; } #endregion // kiểm tra chọn NV chưa, chưa thì báo DataView tableCheckNV = dgrdDSNVTrgPhg.DataSource as DataView; if (tableCheckNV == null) { return; } DataRow[] arrRows = tableCheckNV.Table.Select("check = true", "UserEnrollNumber asc"); if (arrRows.Length == 0) { AutoClosingMessageBox.Show("Bạn chưa chọn nhân viên.", "Thông báo", 1500); return; } // đã chọn NV, lấy ds mã CC đã chọn string lydo = (cbLyDo.SelectedItem != null) ? cbLyDo.SelectedItem.ToString() : cbLyDo.SelectedText; string ghichu = tbGhiChu.Text; bool flag = true; try { foreach (DataRow row in arrRows) { //dsNVcheck.Add((int)row["UserEnrollNumber"]); int iUserEnrollNumber = (int)row["UserEnrollNumber"]; if (ca.ID == int.MinValue) { XL.TaoCaTuDo((cCaTuDo)ca, timeBD, XL2._08gio, XL2.ChoPhepTre, XL2.ChoPhepSom, XL2.LamThemAfterOT, 1f, "8"); } else if (ca.ID == int.MinValue + 1) { XL.TaoCaTuDo((cCaTuDo)ca, timeBD, XL2._12gio, XL2.ChoPhepTre, XL2.ChoPhepSom, XL2.LamThemAfterOT, 1.5f, "D"); } if (checkXNLamThem.Checked || TinhPCTC || TreSomTinhCV) //1.có XN làm thêm --> thêm giờ XN, 2.không xác nhận làm thêm thì thêm giờ A { var nv = new cUserInfo { MaCC = iUserEnrollNumber, NgayCongBD_Bef2D = ngay.Date.AddDays(-2d), NgayCongKT_Aft2D = ngay.Date.AddDays(2d) }; var chkinn = new cChkInn_A { Time = timeBD, Type = "I", MachineNo = 21, Source = "PC", PhucHoi = new cPhucHoi { Them = true, IDGioGoc = -1, Xoaa = false } }; var chkout = new cChkOut_A { Time = timeKT, Type = "O", MachineNo = 22, Source = "PC", PhucHoi = new cPhucHoi { Them = true, IDGioGoc = -1, Xoaa = false } }; var cio_a = new cChkInOut_A { Vao = chkinn, Raa = chkout, HaveINOUT = 1, ThuocCa = ca, TimeDaiDien = chkinn.Time, ThuocNgayCong = XL.ThuocNgayCong(chkinn.Time), TD = new ThoiDiem() }; if (cio_a.ThuocNgayCong <= XL2.ThangKetCong && XL2.ThangKetCong != DateTime.MinValue) { continue; //tbd temp patch } nv.DS_CIO_A.Add(cio_a); XL.ThemGioChoNV(chkinn, nv, XL2.currUserID, lydo, ghichu); XL.ThemGioChoNV(chkout, nv, XL2.currUserID, lydo, ghichu); if (ca.TachCa) { XL.XacNhanCoTachCa(nv, cio_a, ca, sophutOT, TinhPCTC, TreSomTinhCV); } else { XL.XacNhanKoTachCa(nv, cio_a, ca, sophutOT, TinhPCTC, TreSomTinhCV); } } else //2.không xác nhận làm thêm thì thêm giờ A { if (timeBD.Date <= XL2.ThangKetCong && XL2.ThangKetCong != DateTime.MinValue) { continue; //tbd temp patch } var nv = new cUserInfo { MaCC = iUserEnrollNumber, NgayCongBD_Bef2D = ngay.Date.AddDays(-2d), NgayCongKT_Aft2D = ngay.Date.AddDays(2d) }; XL.ThemGioChoNV(new cChkInn_A { Time = timeBD, Type = "I", MachineNo = 21, Source = "PC", PhucHoi = new cPhucHoi { Them = true, IDGioGoc = -1, Xoaa = false } }, new cUserInfo { MaCC = iUserEnrollNumber }, XL2.currUserID, lydo, ghichu); XL.ThemGioChoNV(new cChkOut_A { Time = timeKT, Type = "O", MachineNo = 22, Source = "PC", PhucHoi = new cPhucHoi { Them = true, IDGioGoc = -1, Xoaa = false } }, new cUserInfo { MaCC = iUserEnrollNumber }, XL2.currUserID, lydo, ghichu); XL.CheckTinhPC50(nv, (timeBD.TimeOfDay < XL2._04h30 ? timeBD.Date.AddDays(-1) : timeBD.Date), TinhPCTC); } } } catch (Exception exception) { lg.Error("", exception); } if (flag) { AutoClosingMessageBox.Show("Thêm giờ chấm công tay cho các nhân viên thành công.", "Thông báo", 2000); } }