private void btnChuyenDoi_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; } IsReload = true; var row = ((DataRowView)((dgrdGioKDQD.SelectedRows[0]).DataBoundItem)).Row; var checkold = (cChk)row["cChk"]; var loaiCuu = (checkold.GetType() == typeof(cChkInn_A)); var loaiMoi = !loaiCuu; var giocuu = checkold.Time; var lydo = (cbLyDo_Suaa.SelectedItem != null) ? cbLyDo_Suaa.SelectedItem.ToString() : cbLyDo_Suaa.SelectedText; var ghichu = tbGhiChu_Suaa.Text; #region thông báo ko cho chuyển đõi nếu đã xn if (checkold is cChkInn_V || checkold is cChkOut_V) { MessageBox.Show(Resources.GioDaXacnhanKhongTheThayDoi, Resources.capThongBao); return; } #endregion #region hỏi lại trước khi sửa if (loaiCuu) { if (MessageBox.Show(string.Format(Resources.xacNhanChuyenDoiGioDonGian, "vào", giocuu.ToString("H:mm dddd d/M"), "ra", nhanvien_goc.TenNV), Resources.capXacNhan, MessageBoxButtons.YesNo) == DialogResult.No) { return; } } else { if (MessageBox.Show(string.Format(Resources.xacNhanChuyenDoiGioDonGian, "ra", giocuu.ToString("H:mm dddd d/M"), "vào", nhanvien_goc.TenNV), Resources.capXacNhan, MessageBoxButtons.YesNo) == DialogResult.No) { return; } } #endregion var ds_raa3_vao1 = new List <cChk>(); var DS_Check_KoHopLe = new List <cChk>(); cChk checknew; if (loaiMoi) { checknew = new cChkInn_A { Type = "I", MaCC = nhanvien_goc.MaCC, IsEdited = 1, Time = giocuu, Source = "PC", MachineNo = 21, PhucHoi = new cPhucHoi { IDGioGoc = int.MaxValue, Them = checkold.PhucHoi.Them, Xoaa = checkold.PhucHoi.Xoaa } } } ; // tbd trạng thái?? tạm thời lấy int.maxvalue tức sửa > 0 else { checknew = new cChkOut_A { Type = "O", MaCC = nhanvien_goc.MaCC, IsEdited = 1, Time = giocuu, Source = "PC", MachineNo = 22, PhucHoi = new cPhucHoi { IDGioGoc = int.MaxValue, Them = checkold.PhucHoi.Them, Xoaa = checkold.PhucHoi.Xoaa } } }; // tbd trạng thái?? tạm thời lấy int.maxvalue tức sửa > 0 XL.SuaGioChoNV(checkold, checknew, nhanvien_goc, XL2.currUserID, lydo, ghichu); XL.SapXepDS_Check(new[] { nhanvien_goc.DS_Check_A }); XL.LoaiBoCheckCungLoaiTrong30phut(nhanvien_goc.DS_Check_A, nhanvien_goc.DS_Check_KoHopLe); XL.GhepCIO_A(nhanvien_goc.DS_Check_A, nhanvien_goc.DS_CIO_A); XL.LoaiBoCIOKoHopLe(nhanvien_goc.DS_CIO_A, nhanvien_goc.DS_Check_A, nhanvien_goc.DS_Check_KoHopLe); if (nhanvien_goc.DS_Check_KoHopLe.Count > 0) { DS_Check_KoHopLe.AddRange(nhanvien_goc.DS_Check_KoHopLe); nhanvien_goc.DS_Check_KoHopLe.Clear(); } XL.XetCa_CIO_A(nhanvien_goc.DS_CIO_A, nhanvien_goc.LichTrinhLV.DSCa, ds_raa3_vao1, nhanvien_goc.DS_Check_A); //nhanvien_goc.MacDinhTinhPC50, //[140615_4] XL.TronDS_CIO_A_V(nhanvien_goc.DS_CIO_A, nhanvien_goc.DS_CIO_V, nhanvien_goc.DSVaoRa); XL.TinhCongTheoNgay(nhanvien_goc.DSVaoRa, nhanvien_goc.NgayCongBD_Bef2D, nhanvien_goc.NgayCongKT_Aft2D, nhanvien_goc.DSVang, nhanvien_goc.DSNgayCong, nhanvien_goc.MacDinhTinhPC50); XL.TinhLaiPhuCapTC(nhanvien_goc.DSXNPhuCap50, nhanvien_goc.DSNgayCong); XL.TinhLaiPhuCapDB(nhanvien_goc.DSXNPhuCapDB, nhanvien_goc.DSNgayCong); NgayCong_goc = nhanvien_goc.DSNgayCong.Find(o => o.Ngay == NgayCong_goc.Ngay); if (DS_Check_KoHopLe.Count > 0) { DAL.LoaiGioLienQuan(DS_Check_KoHopLe); } if (ds_raa3_vao1.Count > 0) { DAL.ThemGio_ra3_vao1(ds_raa3_vao1); } m_Bang_ChiTiet.Rows.Clear(); loadGrid(); }
private void btnThem_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; } IsReload = true; #region lấy thông tin từ màn hình var giovao = dtpVao_Them.Value.Add(XL2._01giay); var gioraa = dtpRaa_Them.Value; var lydo = (cbLyDo_Them.SelectedItem != null) ? cbLyDo_Them.SelectedItem.ToString() : cbLyDo_Them.SelectedText; var ghichu = tbGhichu_Them.Text; var UserEnrollNumber = nhanvien_goc.MaCC; #endregion if (chkGioVao.Checked) { #region hỏi lại trước khi thêm if (MessageBox.Show(string.Format(Resources.xacNhanThemGioVaoDonGian, giovao.ToString("H:mm dddd d/M"), nhanvien_goc.TenNV), Resources.capXacNhan, MessageBoxButtons.YesNo) == DialogResult.No) { return; } #endregion var checkinn = new cChkInn_A { IsEdited = 1, Type = "I", MachineNo = 21, Source = "PC", MaCC = UserEnrollNumber, Time = giovao, PhucHoi = new cPhucHoi { Them = true, IDGioGoc = -1, Xoaa = false } }; XL.ThemGioChoNV(checkinn, nhanvien_goc, XL2.currUserID, lydo, ghichu); } if (chkGioRaa.Checked) { #region hỏi lại trước khi thêm if (MessageBox.Show(string.Format(Resources.xacNhanThemGioRaaDonGian, gioraa.ToString("H:mm dddd d/M"), nhanvien_goc.TenNV), Resources.capXacNhan, MessageBoxButtons.YesNo) == DialogResult.No) { return; } #endregion var checkout = new cChkOut_A { IsEdited = 1, Type = "O", MachineNo = 22, Source = "PC", MaCC = UserEnrollNumber, Time = gioraa, PhucHoi = new cPhucHoi { Them = true, IDGioGoc = -1, Xoaa = false } }; XL.ThemGioChoNV(checkout, nhanvien_goc, XL2.currUserID, lydo, ghichu); } var ds_raa3_vao1 = new List <cChk>(); var DS_Check_KoHopLe = new List <cChk>(); XL.SapXepDS_Check(new[] { nhanvien_goc.DS_Check_A }); XL.LoaiBoCheckCungLoaiTrong30phut(nhanvien_goc.DS_Check_A, nhanvien_goc.DS_Check_KoHopLe); XL.GhepCIO_A(nhanvien_goc.DS_Check_A, nhanvien_goc.DS_CIO_A); XL.LoaiBoCIOKoHopLe(nhanvien_goc.DS_CIO_A, nhanvien_goc.DS_Check_A, nhanvien_goc.DS_Check_KoHopLe); if (nhanvien_goc.DS_Check_KoHopLe.Count > 0) { DS_Check_KoHopLe.AddRange(nhanvien_goc.DS_Check_KoHopLe); nhanvien_goc.DS_Check_KoHopLe.Clear(); } XL.XetCa_CIO_A(nhanvien_goc.DS_CIO_A, nhanvien_goc.LichTrinhLV.DSCa, ds_raa3_vao1, nhanvien_goc.DS_Check_A); //nhanvien_goc.MacDinhTinhPC50, //[140615_4] XL.TronDS_CIO_A_V(nhanvien_goc.DS_CIO_A, nhanvien_goc.DS_CIO_V, nhanvien_goc.DSVaoRa); XL.TinhCongTheoNgay(nhanvien_goc.DSVaoRa, nhanvien_goc.NgayCongBD_Bef2D, nhanvien_goc.NgayCongKT_Aft2D, nhanvien_goc.DSVang, nhanvien_goc.DSNgayCong, nhanvien_goc.MacDinhTinhPC50); XL.TinhLaiPhuCapTC(nhanvien_goc.DSXNPhuCap50, nhanvien_goc.DSNgayCong); XL.TinhLaiPhuCapDB(nhanvien_goc.DSXNPhuCapDB, nhanvien_goc.DSNgayCong); NgayCong_goc = nhanvien_goc.DSNgayCong.Find(o => o.Ngay == NgayCong_goc.Ngay); if (DS_Check_KoHopLe.Count > 0) { DAL.LoaiGioLienQuan(DS_Check_KoHopLe); } if (ds_raa3_vao1.Count > 0) { DAL.ThemGio_ra3_vao1(ds_raa3_vao1); } m_Bang_ChiTiet.Rows.Clear(); loadGrid(); }
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 btnSuaa_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; } IsReload = true; var timespanGioVao = dtpVao.Value.TimeOfDay; var timespanGioRaa = dtpRaa.Value.TimeOfDay; var lydo = (cbLyDo.SelectedItem != null) ? cbLyDo.SelectedItem.ToString() : cbLyDo.SelectedText; var ghichu = tbGhiChu.Text; if (dgrdDSGioVaoRa.SelectedRows.Count == 0) { return; } #region hỏi lại trước khi sửa if (radGioVao.Checked) { if (MessageBox.Show(string.Format(Resources.xacNhanSuaGioHangLoat, "vào", dtpVao.Value.ToString("H:mm")), Resources.capXacNhan, MessageBoxButtons.YesNo) == DialogResult.No) { return; } } else { if (MessageBox.Show(string.Format(Resources.xacNhanSuaGioHangLoat, "ra", dtpRaa.Value.ToString("H:mm")), Resources.capXacNhan, MessageBoxButtons.YesNo) == DialogResult.No) { return; } } #endregion var flagThongBao = false; // flag thông báo không cho phép sửa giờ đã CN IEnumerable <DataGridViewRow> dataGridViewRows = dgrdDSGioVaoRa.SelectedRows.Cast <DataGridViewRow>(); var arrRecord = (from row in dataGridViewRows let nv = (cUserInfo)(((DataRowView)row.DataBoundItem).Row["cUserInfo"]) let cChkInOut = (cChkInOut)(((DataRowView)row.DataBoundItem).Row["cChkInOut"]) let ngay = (DateTime)(((DataRowView)row.DataBoundItem).Row["TimeStrNgay"]) select new { nhanvien = nv, CIO = cChkInOut, Ngay = ngay }).GroupBy(o => o.nhanvien).ToList(); var ds_raa3_vao1 = new List <cChk>(); var DS_Check_KoHopLe = new List <cChk>(); foreach (var group in arrRecord) { var nhanvien = group.Key; foreach (var item in group) { if (item.CIO.GetType() == typeof(cChkInOut_V)) { flagThongBao = true; continue; } if (radGioVao.Checked) { if (item.CIO.HaveINOUT == -2) { continue; } var giovao = item.Ngay.Add(timespanGioVao); var checkinnold = item.CIO.Vao; var checkinnnew = new cChkInn_A { MaCC = nhanvien.MaCC, Type = "I", Time = giovao, Source = "PC", MachineNo = 21, IsEdited = 1, PhucHoi = new cPhucHoi { IDGioGoc = int.MaxValue, Them = checkinnold.PhucHoi.Them, Xoaa = checkinnold.PhucHoi.Xoaa } }; XL.SuaGioChoNV(checkinnold, checkinnnew, nhanvien, XL2.currUserID, lydo, ghichu); } else { if (item.CIO.HaveINOUT == -1) { continue; } var gioraa = item.Ngay.Add(timespanGioRaa); var checkoutold = item.CIO.Raa; var checkoutnew = new cChkOut_A { MaCC = nhanvien.MaCC, Type = "O", Time = gioraa, Source = "PC", MachineNo = 22, IsEdited = 1, PhucHoi = new cPhucHoi { IDGioGoc = int.MaxValue, Them = checkoutold.PhucHoi.Them, Xoaa = checkoutold.PhucHoi.Xoaa } }; XL.SuaGioChoNV(checkoutold, checkoutnew, nhanvien, XL2.currUserID, lydo, ghichu); } } XL.SapXepDS_Check(new[] { nhanvien.DS_Check_A }); XL.LoaiBoCheckCungLoaiTrong30phut(nhanvien.DS_Check_A, nhanvien.DS_Check_KoHopLe); if (nhanvien.DS_Check_KoHopLe.Count > 0) { DS_Check_KoHopLe.AddRange(nhanvien.DS_Check_KoHopLe); nhanvien.DS_Check_KoHopLe.Clear(); } XL.GhepCIO_A(nhanvien.DS_Check_A, nhanvien.DS_CIO_A); XL.LoaiBoCIOKoHopLe(nhanvien.DS_CIO_A, nhanvien.DS_Check_A, nhanvien.DS_Check_KoHopLe); XL.XetCa_CIO_A(nhanvien.DS_CIO_A, nhanvien.LichTrinhLV.DSCa, ds_raa3_vao1, nhanvien.DS_Check_A); XL.TronDS_CIO_A_V(nhanvien.DS_CIO_A, nhanvien.DS_CIO_V, nhanvien.DSVaoRa); XL.TinhCongTheoNgay(nhanvien.DSVaoRa, nhanvien.NgayCongBD_Bef2D, nhanvien.NgayCongKT_Aft2D, nhanvien.DSVang, nhanvien.DSNgayCong, nhanvien.MacDinhTinhPC50); XL.TinhLaiPhuCapTC(nhanvien.DSXNPhuCap50, nhanvien.DSNgayCong); XL.TinhLaiPhuCapDB(nhanvien.DSXNPhuCapDB, nhanvien.DSNgayCong); } if (DS_Check_KoHopLe.Count > 0) { DAL.LoaiGioLienQuan(DS_Check_KoHopLe); } if (ds_raa3_vao1.Count > 0) { DAL.ThemGio_ra3_vao1(ds_raa3_vao1); } loadGrid(); if (flagThongBao) { AutoClosingMessageBox.Show("Không thể sửa các giờ đã xác nhận.", "Thông báo", 2000); } }
private void btnThem_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; } IsReload = true; #region lấy thông tin var timespanGioVao = dtpVao.Value.TimeOfDay; var timespanGioRaa = dtpRaa.Value.TimeOfDay; var lydo = (cbLyDo.SelectedItem != null) ? cbLyDo.SelectedItem.ToString() : cbLyDo.SelectedText; var ghichu = tbGhiChu.Text; #endregion var tempstring = radGioVao.Checked ? "vào" : "ra"; var temptime = (radGioVao.Checked) ? dtpVao.Value : dtpRaa.Value; if (dgrdDSGioVaoRa.SelectedRows.Count == 0) { return; } #region hỏi lại trước khi thêm if (MessageBox.Show(string.Format(Resources.xacNhanThemGioHangLoat, tempstring, temptime.ToString("H:mm")), Resources.capXacNhan, MessageBoxButtons.YesNo) == DialogResult.No) { return; } #endregion #region lấy ds các giờ vào ra, group lại theo từng nhân viên để thực hiện thêm 1 loạt rồi sau đó xử lý tính toán lại checkinout và ngày công IEnumerable <DataGridViewRow> dataGridViewRows = dgrdDSGioVaoRa.SelectedRows.Cast <DataGridViewRow>(); var arrRecord = (from row in dataGridViewRows let nv = (cUserInfo)(((DataRowView)row.DataBoundItem).Row["cUserInfo"]) let cChkInOut = (cChkInOut)(((DataRowView)row.DataBoundItem).Row["cChkInOut"]) let ngay = (DateTime)(((DataRowView)row.DataBoundItem).Row["TimeStrNgay"]) select new { nhanvien = nv, CIO = cChkInOut, Ngay = ngay }).GroupBy(o => o.nhanvien).ToList(); #endregion var ds_raa3_vao1 = new List <cChk>(); var DS_Check_KoHopLe = new List <cChk>(); foreach (var group in arrRecord) { var nhanvien = group.Key; foreach (var item in group) { if (item.CIO.HaveINOUT == 1) { continue; // 1. bỏ qua các giờ đủ IO } if (radGioVao.Checked) //2. thêm I cho O kv { if (item.CIO.HaveINOUT == -2) { var giovao = item.Ngay.Add(timespanGioVao); if (giovao > item.CIO.Raa.Time) { giovao = giovao.AddDays(-1d); // trừ đi 1 ngày nếu (giờ vào thêm) > giờ ra } var checkinn = new cChkInn_A { IsEdited = 1, MaCC = item.nhanvien.MaCC, Type = "I", Time = giovao, Source = "PC", MachineNo = 21, PhucHoi = new cPhucHoi { Them = true, IDGioGoc = -1, Xoaa = false } }; XL.ThemGioChoNV(checkinn, item.nhanvien, XL2.currUserID, lydo, ghichu); } } else { if (item.CIO.HaveINOUT == -1) //3. thêm O cho I kr { var gioraa = item.Ngay.Add(timespanGioRaa); if (gioraa < item.CIO.Vao.Time) { gioraa = gioraa.AddDays(1d); // cộng thêm 1 ngày nếu (giờ vào thêm) > giờ ra } var checkout = new cChkOut_A() { IsEdited = 1, MaCC = item.nhanvien.MaCC, Type = "O", Time = gioraa, Source = "PC", MachineNo = 22, PhucHoi = new cPhucHoi { Them = true, IDGioGoc = -1, Xoaa = false } }; XL.ThemGioChoNV(checkout, item.nhanvien, XL2.currUserID, lydo, ghichu); } } } XL.SapXepDS_Check(new[] { nhanvien.DS_Check_A }); XL.LoaiBoCheckCungLoaiTrong30phut(nhanvien.DS_Check_A, nhanvien.DS_Check_KoHopLe); XL.GhepCIO_A(nhanvien.DS_Check_A, nhanvien.DS_CIO_A); XL.LoaiBoCIOKoHopLe(nhanvien.DS_CIO_A, nhanvien.DS_Check_A, nhanvien.DS_Check_KoHopLe); if (nhanvien.DS_Check_KoHopLe.Count > 0) { DS_Check_KoHopLe.AddRange(nhanvien.DS_Check_KoHopLe); nhanvien.DS_Check_KoHopLe.Clear(); } XL.XetCa_CIO_A(nhanvien.DS_CIO_A, nhanvien.LichTrinhLV.DSCa, ds_raa3_vao1, nhanvien.DS_Check_A); XL.TronDS_CIO_A_V(nhanvien.DS_CIO_A, nhanvien.DS_CIO_V, nhanvien.DSVaoRa); XL.TinhCongTheoNgay(nhanvien.DSVaoRa, nhanvien.NgayCongBD_Bef2D, nhanvien.NgayCongKT_Aft2D, nhanvien.DSVang, nhanvien.DSNgayCong, nhanvien.MacDinhTinhPC50); XL.TinhLaiPhuCapTC(nhanvien.DSXNPhuCap50, nhanvien.DSNgayCong); XL.TinhLaiPhuCapDB(nhanvien.DSXNPhuCapDB, nhanvien.DSNgayCong); } if (DS_Check_KoHopLe.Count > 0) { DAL.LoaiGioLienQuan(DS_Check_KoHopLe); } if (ds_raa3_vao1.Count > 0) { DAL.ThemGio_ra3_vao1(ds_raa3_vao1); } loadGrid(); }
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); } }