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 btnThem_Click(object sender, EventArgs e) { if (XL2.KiemtraKetnoiCSDL() == false) { return; } // lấy ngày check var ngayBD = dtpNgayBD.Value.Date; var ngayKT = dtpNgayKT.Value.Date; if (ngayBD > ngayKT) { MyUtility.Swap(ref ngayBD, ref ngayKT); } List <DateTime> DSNgayCheck = new List <DateTime>(); for (DateTime indexNgay = ngayBD; indexNgay <= ngayKT; indexNgay = indexNgay.AddDays(1d)) { DSNgayCheck.Add(indexNgay); } #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(DSNgayCheck[0], DSNgayCheck[DSNgayCheck.Count - 1])) { MessageBox.Show(String.Format(Resources.Text_KhoangTGDaKetCong_KoChinhSuaGioCC, "khai báo vắng", "khai báo vắng", "khai báo vắng"), Resources.Caption_ThongBao, MessageBoxButtons.OK); return; } #endregion #region hỏi lại trước khi thực hiện if (MessageBox.Show(Resources.Text_XacNhanThemKhaiVang, Resources.Caption_XacNhan, MessageBoxButtons.YesNo) == DialogResult.No) { return; } #endregion // lấy loại vắng if (cbLoaiVang.SelectedItem == null) { ACMessageBox.Show("Bạn chưa chọn loại vắng", "Thông báo", 2000); return; } var rowLV = cbLoaiVang.SelectedItem as DataRowView; var absentCode = rowLV["AbsentCode"].ToString(); var workingDay = 1f; var workingTime = 8f; var formatString = "[{0}] đã xin phép vắng [{1}] [{2}] ngày ngày [{3}]"; var tableVang = DAO5.LietKeNgayVangChoNV(listMaCC_NV, DSNgayCheck.Min(), DSNgayCheck.Max()); if (tableVang.Rows.Count > 0) { List <Warning> listWarning = new List <Warning>(); foreach (var nv in listMaCC_NV) //duyệt từng nhân viên { foreach (var ngay in DSNgayCheck) // duyệt từng ngày check vắng của nhân viên { DateTime ngay1 = ngay; int nv1 = nv; var result = (from DataRow item in tableVang.Rows where (int)item["UserEnrollNumber"] == nv1 && (DateTime)item["TimeDate"] == ngay1 select item).ToList(); // lấy danh sách các xin phép vắng trong ngày xác định if (result.Any()) { // nếu có xin phép vắng thì ghi lại chuỗi các xin phép vắng đó var userfullname = result[0]["UserFullName"].ToString(); listWarning.AddRange(result.Select(row123 => new Warning() { CB = "Đã có xin phép vắng", ND = string.Format(formatString, userfullname, row123["AbsentCode"], ((float)row123["Workingday"]).ToString("0.0"), ((DateTime)row123["TimeDate"]).ToString("dd/MM/yyyy")) })); } } } // hiện form cảnh báo, nếu xác nhận tiếp tục thì thực hiện , ko thì dừng frmWarning frm = new frmWarning { listWarning = listWarning, WindowState = FormWindowState.Normal, StartPosition = FormStartPosition.CenterParent }; //Point temp = XL2.GetCenterLocation(this.MdiParent.Size.Width, this.MdiParent.Size.Height, frm.Size.Width, frm.Size.Height); //frm.Location = new Point(this.MdiParent.Location.X + temp.X, this.MdiParent.Location.Y + temp.Y); frm.ShowDialog(); if (frm.TiepTuc == false) { return; } } IsReload = true; IEnumerable <dynamic> listMaCC_NgayVang = (from macc in listMaCC_NV from ngay in DSNgayCheck select new { MaCC = macc, NgayVang = ngay }); List <Error> listError = new List <Error>(); XL.ThemNgayVang(listMaCC_NgayVang, workingDay, workingTime, absentCode, listError); if (listError.Count > 0) { frmError frm = new frmError { StartPosition = FormStartPosition.CenterParent, listError = listError }; frm.ShowDialog(); } Close(); }
public void ThucHienKetCong(object sender, WaitWindowEventArgs e) { #region string TemplateShiftParams = @"Ca: [{0}]; ID: [{1}]; Onn: [{2}]; Off: [{3}]; BD_NDVao: [{4}]; KT_NDVao: [{5}]; BD_NDRa: [{6}]; KT_NDRa: [{7}]; CPTre: [{8}]ph: [{9}]; CPSom: [{10}]ph: [{11}]; AfterOT: [{12}]ph: [{13}]; LunchMin: [{14}]; WKTime: [{15}]; WKDay: [{16}]; DayCount: [{17}]; QuaDem: [{18}]; CaMoRong: [{19}]; CaTuDo: [{20}]; TachCaDem: [{21}];"; string templateThongTinCa = @"Thông tin ca [{10}] (ký hiệu [{11}]): Vào ca lúc [{0}], Ra ca lúc [{1}], Ca [{2}], Ca làm việc [{3}] tiếng, được nghỉ trưa [{4}] phút, tính [{5}] công, cho phép trễ [{6}] phút, ra sớm [{7}] phút, thời gian làm thêm tối thiểu [{8}] phút, [{9}] qua xác nhận quản lý"; string shiftParams = string.Empty, thongtinCa = string.Empty; #endregion DateTime thang = (DateTime)e.Arguments[0]; List <cPhongBan> dsphongban = (List <cPhongBan>)e.Arguments[1]; #region lấy ngày BD và kết thúc DateTime ngaydauthang = MyUtility.FirstDayOfMonth(thang), ngaycuoithang = MyUtility.LastDayOfMonth(thang); var ngayBD_Bef2D = ngaydauthang.AddDays(-2d); var ngayKT_Aft2D = ngaycuoithang.AddDays(2d); #endregion try //general try catch { // khởi tạo các nhân viên chấm công thuộc phòng ban check kết công (được thao tác) và tính toán công, phụ cấp XL.KhoiTaoDSNV_ChamCong(m_DSNV, (from cPhongBan item in dsphongban select item.ID).ToList(), dsphongban); XL.XemCong_v08(m_DSNV, ngayBD_Bef2D, ngayKT_Aft2D); // sau khi tính công xong thì cập nhật lại xử lý các trường hợp công nhật var tableCongNhat = DAO.LayTableCongNhat(thang); foreach (DataRow row in tableCongNhat.Rows) { int macc = (int)row["UserEnrollNumber"]; DateTime ngayBD = (DateTime)row["NgayBatDau"]; DateTime ngayKT = (DateTime)row["NgayKetThuc"]; var nv = m_DSNV.Find(o => o.MaCC == macc); //tìm nv , ko tìm thấy thì tiếp tục if (nv == null) { continue; } //duyệt qua các ngày công để set lại phụ cấp, xoá hết các ds vắng float CongCongnhat = 0f; foreach (var ngayCong in nv.DSNgayCong.Where(o => o.Ngay >= ngayBD && o.Ngay <= ngayKT)) { ngayCong.PhuCaps = new PhuCap(); ngayCong.QuaDem = false; ngayCong.DSVang.Clear(); CongCongnhat += ngayCong.TongCong_4008; } // cập nhật số ngày công công nhật xuống csdl int kq1 = SqlDataAccessHelper.ExecNoneQueryString(" update DSNVChiCongNhatThang set SoNgayCong = @SoNgayCong where UserEnrollNumber= @UserEnrollNumber and Thang=@Thang", new string[] { "@SoNgayCong", "@UserEnrollNumber", "@Thang" }, new object[] { CongCongnhat, macc, ngaydauthang }); //info ko cần log if (kq1 == 0) { MessageBox.Show(Resources.Text_CoLoi); } } // xoá bỏ các kết công cũ của tháng (nếu có) để ghi kết công mới cho tháng int kq = DAO.DelKetCongCa_Ngay(ngaydauthang, ngaycuoithang, (from nv in m_DSNV select nv.MaCC).ToList()); //bool flagError = false; foreach (var nv in m_DSNV) { foreach (var ngayCong in nv.DSNgayCong.Where(item => item.Ngay >= ngaydauthang && item.Ngay <= ngaycuoithang)) { foreach (var CIO in ngayCong.DSVaoRa) { int kq1 = 0; if (CIO.HaveINOUT < 0) { kq1 = DAO.InsKetCongCa(nv.MaCC, ngayCong.Ngay, (CIO.Vao != null) ? (DateTime?)CIO.Vao.Time : null, (CIO.Raa != null) ? (DateTime?)CIO.Raa.Time : null, null, string.Empty, false, false, false, false, false, //ver 4.0.0.4 VaoTreLaCV, RaSomLaCV false, false, false, 0f, false, 0f, //ver 4.0.0.8@BuGioTre, @BuGioSom, @BuPhepTre, @CongBuPhepTre, @BuPhepSom, @CongBuPhepSom, 0f, 0f, 0f, 0f, 0f, 0f, //ver 4.0.0.8 CongTrongCa, CongNgoaiCa, TruCongTreVR, TruCongSomVR, TruCongTreBu, TruCongSomBu, 0, false, string.Empty, null, null, null, null, null, null, null, null, string.Empty, string.Empty, CIO.HaveINOUT, 0f); } else { #region tạo shiftParams var sp = CIO.ThuocCa; shiftParams = string.Format(TemplateShiftParams, sp.Code, sp.ID, sp.Duty.Onn.ToString(@"d\ hh\:mm"), sp.Duty.Off.ToString(@"d\ hh\:mm"), sp.NhanDienVao.Onn.ToString(@"d\ hh\:mm"), sp.NhanDienVao.Off.ToString(@"d\ hh\:mm"), sp.NhanDienRaa.Onn.ToString(@"d\ hh\:mm"), sp.NhanDienRaa.Off.ToString(@"d\ hh\:mm"), sp.LateeMin.Minutes, sp.chophepTreTS.ToString(@"d\ hh\:mm"), sp.EarlyMin.Minutes, sp.chophepSomTS.ToString(@"d\ hh\:mm"), sp.AfterOTMin.Minutes, sp.batdaulamthemTS.ToString(@"d\ hh\:mm"), sp.LunchMin.Minutes, sp.WorkingTimeTS.TotalMinutes.ToString("#####"), sp.Workingday.ToString("0.0"), sp.DayCount, Convert.ToInt32(sp.QuaDem), Convert.ToInt32(sp.IsExtended), Convert.ToInt32(sp.Is_CaTuDo), Convert.ToInt32(sp.TachCaDem)); thongtinCa = string.Format(templateThongTinCa, sp.Duty.Onn.ToString(@"d\ hh\:mm"), sp.Duty.Off.ToString(@"d\ hh\:mm"), sp.Code, sp.WorkingTimeTS.TotalMinutes.ToString("#####"), sp.LunchMin.Minutes, sp.Workingday.ToString("0.0#"), sp.LateeMin.Minutes, sp.EarlyMin.Minutes, Convert.ToInt32(sp.AfterOTMin.TotalMinutes), CIO.DaXN ? "đã" : "chưa", sp.Code, sp.KyHieuCC); #endregion kq1 = DAO.InsKetCongCa(nv.MaCC, ngayCong.Ngay, CIO.Vao.Time, CIO.Raa.Time, CIO.ThuocCa.ID, CIO.ThuocCa.Code, CIO.DaXN, CIO.DuyetChoPhepVaoTre, CIO.DuyetChoPhepRaSom, CIO.VaoTreTinhCV, CIO.RaaSomTinhCV, //ver 4.0.0.4 CIO.ChoBuGioTre, CIO.ChoBuGioSom, CIO.ChoBuPhepTre, CIO.BuCongPhepTreCongDon, CIO.ChoBuPhepSom, CIO.BuCongPhepSomCongDon, //ver 4.0.0.8 CIO.CongTrongCa, CIO.CongNgoaiCa, CIO.TruCongTreVR, CIO.TruCongSomVR, CIO.TruCongTreBu, CIO.TruCongSomBu, //ver 4.0.0.8 CIO.OTMin, CIO.QuaDem, CIO.ThuocCa.KyHieuCC, CIO.TG.GioLamViec, CIO.TG.LamThem, CIO.TG.LamBanDem, CIO.TG.GioThuc, CIO.TG.VaoTre, CIO.TG.RaaSom, CIO.TD.BD_LV, CIO.TD.KT_LV, thongtinCa, shiftParams, CIO.HaveINOUT, CIO.Cong); } } if (ngayCong.DSVaoRa.Count != 0) { int kq2 = DAO.InsKetCongNgay(nv.MaCC, ngayCong.Ngay, ngayCong.TongCong_4008, /*ngayCong.TongNgayLVtest*/ 0f, ngayCong.PhuCaps._TongPC, //ver4.0.0.1 //ver 4.0.0.8 ngayCong.TongCong_4008,TongNgayLV=0f ngayCong.PhuCaps._30_dem, ngayCong.PhuCaps._50_TC, ngayCong.PhuCaps._100_TCC3, ngayCong.PhuCaps._100_LVNN_Ngay, ngayCong.PhuCaps._150_LVNN_Dem, ngayCong.PhuCaps._200_LeTet_Ngay, ngayCong.PhuCaps._250_LeTet_Dem, ngayCong.PhuCaps._Cus, ngayCong.TG.GioLamViec, ngayCong.TG.LamThem, ngayCong.TG.LamBanDem, ngayCong.TG.GioThuc, ngayCong.QuaDem, ngayCong.CongDinhMucDuoi8Tieng, ngayCong.CongTichLuy, ngayCong.TruCongTreVR, ngayCong.TruCongSomVR, //ver 4.0.0.8 ngayCong.TruCongTreBu, ngayCong.TruCongSomBu, ngayCong.CongBuPhepTre, ngayCong.CongBuPhepSom //ver 4.0.0.8 ); } //tbd fix lỗi phụ cấp công tác những ngày ko có làm việc else { if (ngayCong.DSVang.Count != 0) { int kq2 = DAO.InsKetCongNgay(nv.MaCC, ngayCong.Ngay, ngayCong.TongCong_4008, /*ngayCong.TongNgayLVtest*/ 0f, ngayCong.PhuCaps._TongPC, //ver4.0.0.1 //ver 4.0.0.8 ngayCong.TongCong_4008,TongNgayLV=0f ngayCong.PhuCaps._30_dem, ngayCong.PhuCaps._50_TC, ngayCong.PhuCaps._100_TCC3, ngayCong.PhuCaps._100_LVNN_Ngay, ngayCong.PhuCaps._150_LVNN_Dem, ngayCong.PhuCaps._200_LeTet_Ngay, ngayCong.PhuCaps._250_LeTet_Dem, ngayCong.PhuCaps._Cus, ngayCong.TG.GioLamViec, ngayCong.TG.LamThem, ngayCong.TG.LamBanDem, ngayCong.TG.GioThuc, ngayCong.QuaDem, ngayCong.CongDinhMucDuoi8Tieng, ngayCong.CongTichLuy, ngayCong.TruCongTreVR, ngayCong.TruCongSomVR, //ver 4.0.0.8 ngayCong.TruCongTreBu, ngayCong.TruCongSomBu, ngayCong.CongBuPhepTre, ngayCong.CongBuPhepSom //ver 4.0.0.8 ); } } } } // sau khi ghi kết công thì cập nhật tình trạng kết công (đã kết công), đồng thời ghi log đã kết công DAO.UpdInsKetCongBoPhan(ngaydauthang, (from cPhongBan item in dsphongban select item).ToList()); } catch (Exception ex) //general try catch { lg.Error(string.Format("[{0}]_[{1}]\n", this.Name, System.Reflection.MethodBase.GetCurrentMethod().Name), ex); MessageBox.Show(Resources.Text_CoLoi, Resources.Caption_Loi); } }
private void btnXacNhan_Click(object sender, EventArgs e) { if (SqlDataAccessHelper.TestConnection(SqlDataAccessHelper.ConnectionString) == false) { ACMessageBox.Show("Mất kết nối với CSDL. Vui lòng thử lại sau.", "Lỗi", 2000); return; } var loai = 0; var temp = string.Empty; if (radKhongPC50.Checked) { loai = -1; } else if (radPC50.Checked) { loai = 1; } #region hỏi lại trước khi thực hiện if (loai == -1) { if (MessageBox.Show(Resources.Text_CancelXacNhan_PCTC50, Resources.Caption_XacNhan, MessageBoxButtons.OKCancel) == DialogResult.Cancel) { return; } } else { if (MessageBox.Show(Resources.Text_XNPCTC50, Resources.Caption_XacNhan, MessageBoxButtons.OKCancel) == DialogResult.Cancel) { return; } } #endregion IsReload = true; foreach (var row in m_arrRecd) { var nhanvien = (cUserInfo)row["cUserInfo"]; var ngay = (DateTime)row["TimeStrNgay"]; var ngayCong = (cNgayCong)row["cNgayCong"]; //if (ngay <= XL2.NgayCuoiThangKetCong && XL2.NgayCuoiThangKetCong != DateTime.MinValue) continue;//tbd temp patch// ko thực hiện đối với các ngày trong tháng đã kết công if (loai == -1) { XL.CheckTinhPC50_UpdORInsNew_Sort(nhanvien, ngay, false); XL.TinhPCTC_CuaNgay(ngayCong, false); XL.TinhPCDB_CuaNgay(ngayCong, nhanvien.DSXNPhuCapDB); XL.TinhPCNgayVang(ngayCong); } else { XL.CheckTinhPC50_UpdORInsNew_Sort(nhanvien, ngay, true); XL.TinhPCTC_CuaNgay(ngayCong, true); XL.TinhPCDB_CuaNgay(ngayCong, nhanvien.DSXNPhuCapDB); XL.TinhPCNgayVang(ngayCong); } //XL.TinhPCTC_CuaNgay(ngayCong, nhanvien.DSXNPhuCap50, nhanvien.DSNgayCong); //XL.TinhLaiPhuCapDB(nhanvien.DSXNPhuCapDB, nhanvien.DSNgayCong); } this.Close(); }
private void ChuanBiDSLichTrinhVaCa() { XL.DSLichTrinh.Clear(); XL.DSCa.Clear(); XL.DSCaMoRong.Clear(); // lấy danh sách lịch trình, mỗi dòng là 1 ca thuộc lịch trình => để duyệt từng lịch trình thì phải lấy dicstint var tableLichTrinh = DAL.LayDSLichTrinh(); var tableDSCa = DAL.LayDSCa(); foreach (DataRow row in tableDSCa.Rows) { #region transfer dữ liệu từ row sang đối tượng var iShiftID = (int)row["ShiftID"]; var sShiftCode = row["ShiftCode"].ToString(); TimeSpan tsOnDuty; TimeSpan.TryParse(row["Onduty"].ToString(), out tsOnDuty); TimeSpan tOffDuty; TimeSpan.TryParse(row["Offduty"].ToString(), out tOffDuty); var iDayCount = (int)row["DayCount"]; tOffDuty = tOffDuty.Add(new TimeSpan(iDayCount, 0, 0, 0)); var tOnTimeIn = tsOnDuty.Subtract(new TimeSpan(0, (int)row["OnTimeIn"], 0)); var tCutIn = tsOnDuty.Add(new TimeSpan(0, (int)row["CutIn"], 0)); // phải add thêm 1 ngày daycount vì trong dữ liệu chỉ có chuỗi giờ thô : 05:45 không có ngày var tOnTimeOut = tOffDuty.Subtract(new TimeSpan(0, (int)row["OnTimeOut"], 0)); var tCutOut = tOffDuty.Add(new TimeSpan(0, (int)row["CutOut"], 0)); var tAfterOT = new TimeSpan(0, (int)row["AfterOT"], 0); var tLateGrace = new TimeSpan(0, (int)row["LateGrace"], 0); var tEarlyGrace = new TimeSpan(0, (int)row["EarlyGrace"], 0); var tOnLunch = XL2._0gio; var tOffLunch = XL2._0gio; if (row["OnLunch"] != DBNull.Value && row["OffLunch"] != DBNull.Value) { TimeSpan.TryParse(row["OnLunch"].ToString(), out tOnLunch); TimeSpan.TryParse(row["OffLunch"].ToString(), out tOffLunch); } var iShowPosition = (int)row["ShowPosition"]; var tempWorkingTime = int.Parse(row["WorkingTime"].ToString()); var kyhieucc = row["KyHieuCC"].ToString(); var tempShift = new cCaChuan { ID = iShiftID, Code = sShiftCode, DayCount = iDayCount, QuaDem = (iDayCount == 1), OnnTS = tsOnDuty, OffTS = tOffDuty, OnnInnTS = tOnTimeIn, CutInnTS = tCutIn, OnnOutTS = tOnTimeOut, CutOutTS = tCutOut, AfterOTMin = tAfterOT, LateeMin = tLateGrace, EarlyMin = tEarlyGrace, Workingday = (Single)row["Workingday"], ShowPosition = iShowPosition, WorkingTimeTS = new TimeSpan(0, tempWorkingTime, 0), chophepTreTS = tsOnDuty.Add(tLateGrace), chophepSomTS = tOffDuty - tEarlyGrace, batdaulamthemTS = tOffDuty + tAfterOT, //[TBD] thay tOffDuty + XL2._30phut thành tempOffDuty + tempAfterOT --> đã thay LunchMin = tOffLunch.Subtract(tOnLunch), KyHieuCC = kyhieucc, }; #endregion XL.DSCa.Add(tempShift); } var ca3va1 = XL.DSCa.Find(o => o.OnnTS == XL2._21h45 && o.Workingday == 2f); if (ca3va1 != null) { ca3va1.TachCa = true; var ca3 = XL.DSCa.Find(o => o.OnnTS == XL2._21h45 && o.Workingday == 1f); var ca1 = XL.DSCa.Find(o => o.OnnTS == XL2._05h45 && o.Workingday == 1f); ((cCaChuan)ca3va1).catruoc = ca3 as cCaChuan; ((cCaChuan)ca3va1).casauuu = ca1 as cCaChuan; } IEnumerable <DataRow> arrRows = tableLichTrinh.Rows.Cast <DataRow>(); var arrRows_Distinct = (from row in arrRows select new { a = (int)(row["SchID"]), b = row["SchName"].ToString() }).Distinct(); foreach (var row in arrRows_Distinct) { var arrRows1 = tableLichTrinh.Select("SchID=" + row.a, ""); var lichtrinh = new cShiftSchedule { SchID = row.a, TenLichTrinh = row.b, DSCa = new List <cCaAbs>(), DSCaMoRong = new List <cCaAbs>() }; foreach (var row1 in arrRows1) { var shiftid = (int)row1["T1"]; var ca = XL.DSCa.Find(o => o.ID == shiftid); if (ca != null) { lichtrinh.DSCa.Add(ca); } } lichtrinh.DSCaMoRong = XL.TaoDSCaMoRong(lichtrinh.DSCa); XL.DSLichTrinh.Add(lichtrinh); } if (XL.DSLichTrinh.Count == 0) { throw new NullReferenceException("Không có ds lịch trình"); } }
private void btnTinhLuongVaXuatBB_Click(object sender, EventArgs e) { DateTime thang = new DateTime(dtpThang.Value.Year, dtpThang.Value.Month, 1); DateTime ngayBD = new DateTime(dtpThang.Value.Year, dtpThang.Value.Month, 1); DateTime ngayKT = new DateTime(dtpThang.Value.Year, dtpThang.Value.Month, DateTime.DaysInMonth(dtpThang.Value.Year, dtpThang.Value.Month)); ngayBD = ngayBD.AddDays(-1d); ngayKT = ngayKT.AddDays(2d).Subtract(new TimeSpan(0, 0, 1)); DataTable tableAllDSNV = SqlDataAccessHelper.ExecuteQueryString(ThamSo.SelStrLayDSNV(), null, null); List <cUserInfo> dsnv = new List <cUserInfo>(); KhoitaoDSNV(tableAllDSNV, dsnv); XL.XemCong(dsnv, ngayBD, ngayKT); double dsanluong = (double)(numSanLuong.Value); double ddongia = (double)numDonGia.Value; double dluongtoithieu = (double)numLuongTT.Value; double dcongnhat = (double)numLuongCongNhat.Value; double dboiduongca3 = (double)numBoiDuongCa3.Value; XL.DocLuongDieuChinh(thang, dsnv); XL.TinhLuong(thang, dsnv, ddongia, dsanluong, dluongtoithieu, dcongnhat, dboiduongca3); saveFileDialog.Filter = "Excel File|*.xlsx"; saveFileDialog.ShowDialog(); if (saveFileDialog.FileName == string.Empty) { return; } using (ExcelPackage p = new ExcelPackage()) { //Create a sheet p.Workbook.Worksheets.Add("Bang Luong"); ExcelWorksheet ws = p.Workbook.Worksheets[1]; ws.Name = "Bang Luong"; //Setting Sheet's name ws.Cells.Style.Font.Size = 8; //Default font size for whole sheet ws.Cells.Style.Font.Name = "Times News Roman"; //Default Font name for whole sheet ws.Cells.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; ws.Cells.Style.VerticalAlignment = ExcelVerticalAlignment.Center; //Merging cells and create a center heading for out table int iLastRow = 0, iLastCol = 0; ws.Cells[2, 1].Value = "STT"; ws.Cells[2, 2].Value = "Tên NV"; ws.Cells[2, 3].Value = "Mã CC"; ws.Cells[2, 4].Value = "T.Công"; ws.Cells[2, 5].Value = "T.PC"; ws.Cells[2, 6].Value = "Công CV"; ws.Cells[2, 7].Value = "Lương CB"; ws.Cells[2, 8].Value = "Làm qua đêm"; ws.Cells[2, 9].Value = "Bồi dưỡng ca 3"; ws.Cells[2, 10].Value = "Lương SP"; ws.Cells[2, 11].Value = "Điều chỉnh lương tháng trước"; ws.Cells[2, 12].Value = "Tổng lương"; ws.Cells[2, 1].Style.WrapText = true; ws.Cells[2, 2].Style.WrapText = true; ws.Cells[2, 3].Style.WrapText = true; ws.Cells[2, 4].Style.WrapText = true; ws.Cells[2, 5].Style.WrapText = true; ws.Cells[2, 6].Style.WrapText = true; ws.Cells[2, 7].Style.WrapText = true; ws.Cells[2, 8].Style.WrapText = true; ws.Cells[2, 9].Style.WrapText = true; ws.Cells[2, 10].Style.WrapText = true; ws.Cells[2, 11].Style.WrapText = true; ws.Cells[2, 12].Style.WrapText = true; for (int iRow = 3, index = 0; index < dsnv.Count; iRow++, index++) { cUserInfo nv = dsnv[index]; ws.Cells[iRow, 1].Value = index + 1; ws.Cells[iRow, 2].Value = nv.UserFullName; ws.Cells[iRow, 3].Value = nv.UserEnrollNumber; ws.Cells[iRow, 4].Value = nv.TongCongThang.ToString(); //; ws.Cells[iRow, 5].Value = nv.TongPCapThang.ToString(); //; ws.Cells[iRow, 6].Value = nv.TongCongCV.ToString("#0.#"); //; ws.Cells[iRow, 7].Value = nv.Luong.LuongCB.ToString("###,###,##0.###"); //; ws.Cells[iRow, 8].Value = nv.TongNgayQuaDem.ToString("#0"); //; ws.Cells[iRow, 9].Value = nv.Luong.BoiDuongQuaDem.ToString("###,##0"); //; ws.Cells[iRow, 10].Value = nv.Luong.LuongSP.ToString("###,###,##0.###"); //; ws.Cells[iRow, 11].Value = nv.Luong.LuongThangTruoc.ToString("###,###,##0.###"); //; ws.Cells[iRow, 12].Value = nv.Luong.TongLuong.ToString("###,###,##0.###"); //; ws.Cells[iRow, 1].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); ws.Cells[iRow, 2].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); ws.Cells[iRow, 3].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); ws.Cells[iRow, 4].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); ws.Cells[iRow, 5].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); ws.Cells[iRow, 6].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); ws.Cells[iRow, 7].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); ws.Cells[iRow, 8].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); ws.Cells[iRow, 9].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); ws.Cells[iRow, 10].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); ws.Cells[iRow, 11].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); ws.Cells[iRow, 12].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); } ws.Column(1).Width = 4; ws.Column(2).Width = 18; ws.Column(3).Width = 6; ws.Column(4).Width = 8; ws.Column(5).Width = 8; ws.Column(6).Width = 8; ws.Column(7).Width = 11.5; ws.Column(8).Width = 8; ws.Column(9).Width = 10; ws.Column(10).Width = 11.5; ws.Column(11).Width = 11.5; ws.Column(12).Width = 15; ws.Cells[1, 1, 1, 12].Value = "Bảng lương tháng " + dtpThang.Value.ToString("MM/yyyy"); ws.Cells[1, 1, 1, 12].Style.Font.Bold = true; ws.Cells[1, 1, 1, 12].Style.Font.Size = 14; ws.Cells[1, 1, 1, 12].Merge = true; ws.Cells[2, 1, 2, 12].Style.Font.Bold = true; Byte[] bin = p.GetAsByteArray(); string file_path = saveFileDialog.FileName; File.WriteAllBytes(file_path, bin); } saveFileDialog.FileName = string.Empty; }
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 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); } }
public bool TinhToan(DateTime ngay, int ShiftID, TimeSpan ShiftWorkingTime, double ShiftWorkingDay, TimeSpan LunchMin, DateTime ThoiDiem_onnDuty, DateTime ThoiDiem_offDuty, DateTime ThoiDiem_ChoPhepTre, DateTime ThoiDiem_ChoPhepSom, DateTime timeBD, DateTime timeKT, int sophutOT, bool tinhPCTC, out TimeSpan tongGioLam, out double cong, out double phucap) { var tongGioThuc = TimeSpan.Zero; tongGioLam = TimeSpan.Zero; cong = 0f; phucap = 0f; tongGioThuc = timeKT - timeBD; if (tongGioThuc < XL2._30phut || tongGioThuc > XL2._24h00) { MessageBox.Show("Thời gian vào ra chưa hợp lệ. Vui lòng kiểm tra lại."); return(false); } sophutOT = (checkXNLamThem.Checked && numSoPhutOT.Value > 0) ? (int)numSoPhutOT.Value : 0; if (ShiftID == int.MinValue) { ThoiDiem_onnDuty = timeBD; ThoiDiem_offDuty = timeBD.Add(XL2._08gio); ThoiDiem_ChoPhepTre = ThoiDiem_onnDuty.Add(XL2.ChoPhepTre); ThoiDiem_ChoPhepSom = ThoiDiem_offDuty.Subtract(XL2.ChoPhepSom); } if (ShiftID == int.MinValue + 1) { ThoiDiem_onnDuty = timeBD; ThoiDiem_offDuty = timeBD.Add(XL2._12gio); ThoiDiem_ChoPhepTre = ThoiDiem_onnDuty.Add(XL2.ChoPhepTre); ThoiDiem_ChoPhepSom = ThoiDiem_offDuty.Subtract(XL2.ChoPhepSom); } if (ThoiDiem_offDuty < timeBD || timeKT < ThoiDiem_onnDuty) { MessageBox.Show("Thời gian vào ra chưa hợp lệ. Vui lòng kiểm tra lại."); return(false); } var ra_coOT = ThoiDiem_offDuty.Add(new TimeSpan(0, sophutOT, 0)); if (timeKT < ra_coOT && sophutOT > 0) { MessageBox.Show("Giờ ra chưa được cộng thêm giờ làm thêm. Vui lòng kiểm tra lại."); return(false); } var vaolam = DateTime.MinValue; var raalam = DateTime.MinValue; var raalam_CoOT = DateTime.MinValue; var vaotre = TimeSpan.Zero; var raasom = TimeSpan.Zero; XL.Vao(timeBD, ThoiDiem_onnDuty, ThoiDiem_ChoPhepTre, out vaolam, out vaotre); XL.Raa(timeKT, ThoiDiem_offDuty, ThoiDiem_ChoPhepSom, out raalam, out raasom); XL.LamThem(raalam, new TimeSpan(0, sophutOT, 0), out raalam_CoOT); tongGioLam = raalam_CoOT - vaolam - LunchMin; cong = (tongGioLam.TotalHours / ShiftWorkingTime.TotalHours) * ShiftWorkingDay; phucap = (tinhPCTC) ? ((tongGioLam > XL2._08gio) ? ((tongGioLam - XL2._08gio).TotalHours / 8d) * (XL2.PC50 / 100d) : 0d) : 0f; return(true); }
public List <cNgayCong> TinhCongTheoNgay(List <cChkInOut> pDSVaoRa, DateTime ngayBD, DateTime ngayKT, bool macdinhtinhpc50) { List <cNgayCong> kq = new List <cNgayCong>(); DateTime ngaydem; if (pDSVaoRa.Count == 0) { ngaydem = ngayBD.Date; while (ngaydem <= ngayKT) // <= vì lấy luôn ngày KT : vắng mặt { cNgayCong ngayKOcheck = new cNgayCong() { NgayCong = ngaydem, HasCheck = false, DSVaoRa = new List <cChkInOut>(), }; kq.Add(ngayKOcheck); ngaydem = ngaydem.AddDays(1d); } return(kq); } int vtriBD = 0; ngaydem = ngayBD.Date; while (ngaydem <= ngayKT.Date) { if (vtriBD >= pDSVaoRa.Count) // hết DS nhưng ngaydem <= ngày KT ==> ghi lại những ngày sau là vắng mặt { while (ngaydem <= ngayKT.Date) { cNgayCong ngayKOcheck = new cNgayCong() { NgayCong = ngaydem, HasCheck = false, DSVaoRa = new List <cChkInOut>(), }; kq.Add(ngayKOcheck); ngaydem = ngaydem.AddDays(1d); } continue; } // chưa hết DS, bắt đầu từ ngày của DSVaoRa tại vtbd, đó là ngày có mặt cChkInOut CIO = pDSVaoRa[vtriBD]; XL.TinhCongTheoCa(CIO, CIO.ThuocCa); DateTime ngayCoMat = CIO.ThuocNgayCong; // ghi lại những ngày vắng mặt trước ngày có mặt while (ngaydem < ngayCoMat) // ko có = vì chỉ chạy đến trước ngày của tmpVaoRa thôi { cNgayCong ngayKOcheck = new cNgayCong() { NgayCong = ngaydem, HasCheck = false, DSVaoRa = new List <cChkInOut>(), }; kq.Add(ngayKOcheck); ngaydem = ngaydem.AddDays(1d); } //ngaydem = ngày có mặt. stop, tmpVaoRa là vào ra đầu tiên trong ngày #region collapse double pcdem = Convert.ToDouble(Properties.Settings.Default.PCDem / 100); double pctc = Convert.ToDouble(Properties.Settings.Default.PCTangCuong / 100); cNgayCong ngayCOcheck = new cNgayCong() { HasCheck = true, NgayCong = ngayCoMat, TinhPC150 = macdinhtinhpc50, // mặc định khởi tạo ngày có tính PC 50%, nếu tồn tại ít nhất 1 ca nào ko tính pc 50% thì set cả ngày ko tính pc 50% TG = new ThoiGian() { LamTinhCong = CIO.TG.LamTinhCong, LamTinhPC30 = CIO.TG.LamTinhPC30 }, TongGioThuc = CIO.TongGioThuc, TongTre = CIO.VaoTre, TongSom = CIO.RaaSom, TongCong = Math.Round(CIO.Cong, 2), PhuCap30 = Math.Round(((CIO.TG.LamTinhPC30.TotalHours > 0d) ? ((CIO.TG.LamTinhPC30.TotalHours / 8d) * pcdem) : 0d), 2) // công thức cũ (tính phụ cấp tăng ca theo công) là : + (((tmpVaoRa.Cong > 1f) ? (tmpVaoRa.Cong - 1f) * 0.5f : 0f)) // đổi lại công thức mới (tính phụ cấp theo giờ) là : + (((tmpVaoRa.TGLamTinhCong.TotalHours > 8f) ? (((float)tmpVaoRa.TGLamTinhCong.TotalHours - 8f) / 8f) * 0.5f : 0f)) }; if (CIO.QuaDem == true) { ngayCOcheck.QuaDem = true; // set qua đêm nếu có } if (CIO.TinhPC150 != macdinhtinhpc50) { ngayCOcheck.TinhPC150 = CIO.TinhPC150; } if (ngayCOcheck.TinhPC150) { ngayCOcheck.PhuCap50 = Math.Round((((CIO.TG.LamTinhCong.TotalHours > 8d) ? (((CIO.TG.LamTinhCong.TotalHours - 8d) / 8d) * pctc) : 0d)), 2); } else { ngayCOcheck.PhuCap50 = 0d; } ngayCOcheck.TongPhuCap = Math.Round((ngayCOcheck.PhuCap30 + ngayCOcheck.PhuCap50), 2); ngayCOcheck.them(CIO); #endregion // sau khi tạo ngày công mới vào ra đó là vào ra đầu tiên thì chuyển sang VAORA next vtriBD++; // nếu hết ds thì ngưng, add tmpNgayCong1 vào danh sách ngày công (do chưa add) if (vtriBD >= pDSVaoRa.Count) { kq.Add(ngayCOcheck); ngaydem = ngayCOcheck.NgayCong.AddDays(1d); while (ngaydem <= ngayKT.Date) { cNgayCong ngayKOcheck = new cNgayCong() { NgayCong = ngaydem, HasCheck = false, DSVaoRa = new List <cChkInOut>(), }; kq.Add(ngayKOcheck); ngaydem = ngaydem.AddDays(1.0d); } continue; } // chưa hết DSVàoRa, xem các vào ra kế tiếp, nếu cùng ngày công thì add thêm vào tmpNgayCong1 while (vtriBD < pDSVaoRa.Count && ThamSo.GetDate(pDSVaoRa[vtriBD].TimeStrDaiDien) == ngayCOcheck.NgayCong) { cChkInOut CIO_1 = pDSVaoRa[vtriBD]; XL.TinhCongTheoCa(CIO_1, CIO_1.ThuocCa); #region collapse ngayCOcheck.TongGioThuc += CIO_1.TongGioThuc; ngayCOcheck.TG.LamTinhCong += CIO_1.TG.LamTinhCong; ngayCOcheck.TG.LamTinhPC30 += CIO_1.TG.LamTinhPC30; ngayCOcheck.TongTre += CIO_1.VaoTre; ngayCOcheck.TongSom += CIO_1.RaaSom; ngayCOcheck.TongCong += Math.Round(CIO_1.Cong, 2); ngayCOcheck.PhuCap30 = Math.Round(((ngayCOcheck.TG.LamTinhPC30.TotalHours > 0d) ? ((ngayCOcheck.TG.LamTinhPC30.TotalHours / 8d) * pcdem) : 0d), 2); #endregion if (CIO_1.QuaDem == true) { ngayCOcheck.QuaDem = true; // set qua đêm nếu có } if (CIO_1.TinhPC150 != macdinhtinhpc50) { ngayCOcheck.TinhPC150 = CIO_1.TinhPC150; } if (ngayCOcheck.TinhPC150) { ngayCOcheck.PhuCap50 = Math.Round((((ngayCOcheck.TG.LamTinhCong.TotalHours > 8d) ? (((ngayCOcheck.TG.LamTinhCong.TotalHours - 8d) / 8d) * pctc) : 0d)), 2); } else { ngayCOcheck.PhuCap50 = 0d; } ngayCOcheck.TongPhuCap = Math.Round((ngayCOcheck.PhuCap30 + ngayCOcheck.PhuCap50), 2); ngayCOcheck.them(CIO_1); vtriBD++; } //thoát khỏi vòng lặp: hoặc hết ds hoặc chuyển sang ngày mới if (vtriBD >= pDSVaoRa.Count) { kq.Add(ngayCOcheck); ngaydem = ngayCOcheck.NgayCong.AddDays(1d); while (ngaydem <= ngayKT.Date) { cNgayCong tmpNgayCong = new cNgayCong() { NgayCong = ngaydem, HasCheck = false, DSVaoRa = new List <cChkInOut>(), }; kq.Add(tmpNgayCong); ngaydem = ngaydem.AddDays(1d); } } else { kq.Add(ngayCOcheck); ngaydem = ngaydem.AddDays(1d); } } return(kq); }
private void btnXacNhan_Click(object sender, EventArgs e) { if (XL2.KiemtraKetnoiCSDL() == false) { return; } var loai = 0; var pcngay = 0; var pcdem = 0; var temp = string.Empty; if (radKhongPC.Checked) { loai = -1; } else if (radPCNgayNghi.Checked) { loai = 200; pcngay = XL2.PC100; pcdem = XL2.PC160; temp = "ngày nghỉ {0}% (ban ngày), {1}% (ban đêm)"; temp = string.Format(temp, XL2.PC100, XL2.PC160); } else if (radPCNgayLe.Checked) { loai = 300; pcngay = XL2.PC200; pcdem = XL2.PC290; temp = "ngày lễ {0}% (ban ngày), {1}% (ban đêm), chưa kể công lễ, tết"; temp = string.Format(temp, XL2.PC200, XL2.PC290); } else if (radPCCus1.Checked) { loai = 1; pcngay = (int)(numPCCus1.Value); temp = "tuỳ chỉnh " + pcngay + "% cho giờ làm trên 8 tiếng"; } else if (radPCCus2.Checked) { loai = 2; pcngay = (int)(numPCCus2.Value); temp = "tuỳ chỉnh " + pcngay + "% cho giờ làm"; } #region hỏi lại trước khi thực hiện if (loai == -1) { if (MessageBox.Show(string.Format("Bạn muốn huỷ xác nhận tính phụ cấp {0}?", temp), Resources.Caption_XacNhan, MessageBoxButtons.OKCancel) == DialogResult.Cancel) { return; } } else { if (MessageBox.Show(string.Format("Bạn muốn xác nhận các ngày làm việc vừa chọn tính phụ cấp {0}?", temp), Resources.Caption_XacNhan, MessageBoxButtons.OKCancel) == DialogResult.Cancel) { return; } } #endregion IsReload = true; foreach (var row in m_arrRecd) { var nhanvien = (cUserInfo)row["cUserInfo"]; var ngay = (DateTime)row["TimeStrNgay"]; var ngayCong = (cNgayCong)row["cNgayCong"]; //if (ngay <= XL2.NgayCuoiThangKetCong && XL2.NgayCuoiThangKetCong != DateTime.MinValue) continue;//tbd temp patch// ko thực hiện đối với các ngày trong tháng đã kết công if (loai == -1) { XL.HuyBo_TinhPCDB(nhanvien, ngayCong, nhanvien.DSXNPhuCapDB); } else { XL.TinhPCDB(nhanvien, ngayCong, ngay, loai, pcngay, pcdem, temp); } } this.Close(); }
public void ArrayRowsToDS_CIO_V(DataRow[] arrRows) // cấu trúc là cấu trúc ghép 2 bảng checkinout và xác nhận { DS_CIO_V.Clear(); if (arrRows.Length != 0) { for (int i = 0, j = 1; i < arrRows.Length;) //i là index rowInn, j là index row out { DataRow rowInn = arrRows[i]; if (j >= arrRows.Length) { break; // ko có phần tử kế tiếp để xét } DataRow rowOut = arrRows[j]; int IDinn = (int)rowInn["ID"]; int IDout = (int)rowOut["ID"]; string SourceInn = (string)rowInn["Source"]; string SourceOut = (string)rowOut["Source"]; int MachineNoInn = (int)rowInn["MachineNo"]; int MachineNoOut = (int)rowOut["MachineNo"]; DateTime timeInn = (DateTime)rowInn["TimeStr"]; DateTime timeOut = (DateTime)rowOut["TimeStr"]; if (IDinn != IDout) // bị mất cặp -> bỏ qua đến cặp kế tiếp, phải tăng i, j vì i+1=j ==> j+1 { i = i + 1; j = j + 1; continue; } // cùng id --> xét có gần nhau ko if (MachineNoInn % 2 == MachineNoOut % 2) { j = j + 1; continue; } // đủ điều kiện ghép cặp #region lấy thông tin int shiftID = (int)rowInn["ShiftID"]; string shiftCode = rowInn["ShiftCode"].ToString(); int dayCount = (int)rowInn["DayCount"]; Single workingday = (Single)rowInn["Workingday"]; TimeSpan onnDutyTs, offDutyTs; TimeSpan.TryParse(rowInn["Onduty"].ToString(), out onnDutyTs); TimeSpan.TryParse(rowInn["Offduty"].ToString(), out offDutyTs); TimeSpan afterOTTs = new TimeSpan(0, (int)rowInn["AfterOT"], 0); TimeSpan lateGraceTSS = new TimeSpan(0, (int)rowInn["LateGrace"], 0); TimeSpan earlyGraceTS = new TimeSpan(0, (int)rowInn["EarlyGrace"], 0); lateGraceTSS = onnDutyTs.Add(lateGraceTSS); // add thêm 1 ngày daycount nếu có offDutyTs = offDutyTs.Add(new TimeSpan(dayCount, 0, 0, 0)); earlyGraceTS = offDutyTs.Subtract(earlyGraceTS); afterOTTs = offDutyTs.Add(afterOTTs); int pOTMin = (int)rowInn["OTMin"]; bool tempTinhPC150 = false; if (rowInn["TinhPC150"] == DBNull.Value) { tempTinhPC150 = false; } else { tempTinhPC150 = (bool)rowInn["TinhPC150"]; } int wkt = int.Parse(rowInn["WorkingTime"].ToString()); TimeSpan pWorkingTime = new TimeSpan(0, wkt, 0); #endregion cChkInn_V chkInnV = new cChkInn_V() { GioLienQuan = null, ID = IDinn, MachineNo = MachineNoInn, Source = SourceInn, TimeStr = timeInn }; cChkOut_V chkOutV = new cChkOut_V() { GioLienQuan = null, ID = IDout, MachineNo = MachineNoOut, Source = SourceOut, TimeStr = timeOut }; cChkInOut_V chkInOutV = new cChkInOut_V() { Vao = chkInnV, Raa = chkOutV, TG = new ThoiGian(), HaveINOUT = 1, TongGioThuc = chkOutV.TimeStr - chkInnV.TimeStr, TimeStrDaiDien = chkInnV.TimeStr, TinhPC150 = tempTinhPC150, LamThem = new TimeSpan(0, 0, pOTMin, 0), ThuocNgayCong = chkInnV.TimeStr.Date, }; // [TBD] xem lại thuộc ngày công cShift tmpThuocCa; if (shiftID > 0) { tmpThuocCa = DSCa.Find(item => item.ShiftID == shiftID); } else if (shiftID > int.MinValue + 100 && shiftID < 0) // ca tách và ca kết hợp [Chú ý] + 100 vì chừa khoảng này cho các loại khác { tmpThuocCa = new cShift() { ShiftID = shiftID, ShiftCode = shiftCode, OnnDutyTS = onnDutyTs, OffDutyTS = offDutyTs, chophepvaotreTS = lateGraceTSS, chopheprasomTS = earlyGraceTS, batdaulamthemTS = afterOTTs, WorkingTimeTS = pWorkingTime, Workingday = workingday, DayCount = dayCount, QuaDem = (dayCount == 1), LunchMinute = ThamSo._0gio, LoaiCa = 0 } } ; //[TBD] else if (shiftID < int.MinValue + 100) // ca tự do 8 tiếng { tmpThuocCa = new cShift() { ShiftID = shiftID, ShiftCode = shiftCode, OnnDutyTS = onnDutyTs, OffDutyTS = offDutyTs, chophepvaotreTS = lateGraceTSS, chopheprasomTS = earlyGraceTS, batdaulamthemTS = afterOTTs, WorkingTimeTS = pWorkingTime, Workingday = workingday, DayCount = dayCount, QuaDem = (dayCount == 1), LunchMinute = ThamSo._0gio, LoaiCa = 1 } } ; else { tmpThuocCa = new cShift() { ShiftID = shiftID, ShiftCode = "XacNhan8h", OnnDutyTS = onnDutyTs, OffDutyTS = offDutyTs, chophepvaotreTS = lateGraceTSS, chopheprasomTS = earlyGraceTS, batdaulamthemTS = afterOTTs, WorkingTimeTS = pWorkingTime, Workingday = workingday, DayCount = dayCount, QuaDem = (dayCount == 1), LunchMinute = ThamSo._0gio, LoaiCa = 1 }; //[TBD] } if (tmpThuocCa == null) { log.Fatal("ERROR function Check_GioDaXN"); } chkInOutV.ThuocCa = tmpThuocCa; chkInOutV.QuaDem = tmpThuocCa.QuaDem; XL.TinhCongTheoCa(chkInOutV, chkInOutV.ThuocCa); //[TBD] DS_CIO_V.Add(chkInOutV); // sau khi thực hiện xong thì tăng i = i + 2; j = j + 2; } } }
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 btnSuaGio_Click(object sender, EventArgs e) { DataRowView row = dgrdTongHop.Tag as DataRowView; if (row == null) { return; } cUserInfo tmpNV = flstDSNVChk.Find(o => o.UserEnrollNumber == (int)row["UserEnrollNumber"]); DateTime tmpOldVao = (row["TimeStrVao"] != DBNull.Value) ? (DateTime)row["TimeStrVao"] : DateTime.MinValue; DateTime tmpOldRaa = (row["TimeStrRa"] != DBNull.Value) ? (DateTime)row["TimeStrRa"] : DateTime.MinValue; DateTime tmpNgayCong = (DateTime)row["TimeStrNgay"]; cNgayCong ngayCong = tmpNV.DSNgayCong.Find(o => o.NgayCong == tmpNgayCong); log.Debug(tmpNV.ToString() + tmpNgayCong + ngayCong); cChkInOut old_CIO; if (ngayCong.HasCheck == false || (tmpOldVao == DateTime.MinValue && tmpOldRaa == DateTime.MinValue)) { old_CIO = null; } else if (tmpOldVao == DateTime.MinValue) { old_CIO = ngayCong.DSVaoRa.Find(o => o.HaveINOUT < 0 && o.Raa.TimeStr == tmpOldRaa); } else if (tmpOldRaa == DateTime.MinValue) { old_CIO = ngayCong.DSVaoRa.Find(o => o.HaveINOUT < 0 && o.Vao.TimeStr == tmpOldVao); } else { old_CIO = ngayCong.DSVaoRa.Find(o => o.HaveINOUT > 0 && o.Vao.TimeStr == tmpOldVao && o.Raa.TimeStr == tmpOldRaa); } if (old_CIO != null && old_CIO.DaXN == true) { MessageBox.Show("Không thể sửa giờ đã được xác nhận.", "Thông báo"); return; } if (checkVao_Sua.Checked) { dtpVao_Sua.Update(); cChk tmpCheck = tmpNV.ds_CheckAuto.Find(o => o.TimeStr == tmpOldVao && o.MachineNo % 2 == 1); if (XL.SuaGioChoNV(tmpNV.UserEnrollNumber, tmpCheck, dtpVao_Sua.Value, true, cbLyDo_Sua.Text, tbGhiChu_Sua.Text) == false) { MessageBox.Show("Không sửa được giờ cho nhân viên. Vui lòng thử lại.", "Lỗi"); } } if (checkRa_Sua.Checked) { dtpRa_Sua.Update(); cChk tmpCheck = tmpNV.ds_CheckAuto.Find(o => o.TimeStr == tmpOldRaa && o.MachineNo % 2 == 0); if (XL.SuaGioChoNV(tmpNV.UserEnrollNumber, tmpCheck, dtpRa_Sua.Value, false, cbLyDo_Sua.Text, tbGhiChu_Sua.Text) == false) { MessageBox.Show("Không sửa được giờ cho nhân viên. Vui lòng thử lại.", "Lỗi"); } } 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"); return; } GC.Collect(); }
void XuatBBDSNVDLV(ExcelPackage p) { #region //Create a sheet p.Workbook.Worksheets.Add("DSNV Dang Lam Viec"); var ws = p.Workbook.Worksheets[1]; ws.Name = "DSNV Dang Lam Viec"; //Setting Sheet's name ws.Cells.Style.Font.Size = 10; //Default font size for whole sheet ws.Cells.Style.Font.Name = "Times News Roman"; //Default Font name for whole sheet #endregion var sR = 1; XL2.VeLogo("bbdiemdanhdlv", ws); XL2.GhiThongTinTongcty(ws, "", 1, 4, 12, 1, 9, 12, 4, 9); int sttnv = 0, startColws = 1; #region 1.tieu de bang cham cong tu ngay den ngay 2. bỏ 1 dòng trống sR = sR + 7; // sR+1 là dòng trống XL.FormatCells(ws.Cells[sR, 6], "Danh sách nhân viên đang làm việc ngày " + dtpNgay.Value.ToString("dd/MM/yyyy"), size: 14, hAlign: ExcelHorizontalAlignment.CenterContinuous, bold: true, VeBorder: false); #endregion sR++; sR++; #region write stt +0 ws.Column(startColws).Width = (int)Z.STT; XL.FormatCells(ws.Cells[sR, startColws], "STT", bold: true); startColws++; #endregion #region write ho ten +1 ws.Column(startColws).Width = (int)Z.TEN; XL.FormatCells(ws.Cells[sR, startColws], "Họ tên", bold: true); startColws++; #endregion #region write manv +2 ws.Column(startColws).Width = (int)Z.MANV; XL.FormatCells(ws.Cells[sR, startColws], "Mã NV", bold: true); startColws++; #endregion #region write trạng thái +3 ws.Column(startColws).Width = (int)Z.TRANGTHAI; XL.FormatCells(ws.Cells[sR, startColws], "Trạng thái", bold: true); startColws++; #endregion #region write ca +4 ws.Column(startColws).Width = (int)Z.CA; XL.FormatCells(ws.Cells[sR, startColws], "Ca", bold: true); startColws++; #endregion #region write vào 1 +5 ws.Column(startColws).Width = (int)Z.VAO1; XL.FormatCells(ws.Cells[sR, startColws], "Vào 1", bold: true); ws.Cells[sR, startColws].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; startColws++; #endregion #region write raa 1 +6 ws.Column(startColws).Width = (int)Z.RAA1; XL.FormatCells(ws.Cells[sR, startColws], "Ra 1", bold: true); ws.Cells[sR, startColws].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; startColws++; #endregion #region write vào 2 +7 ws.Column(startColws).Width = (int)Z.VAO2; XL.FormatCells(ws.Cells[sR, startColws], "Vào 2", bold: true); ws.Cells[sR, startColws].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; startColws++; #endregion #region write raa 2 +8 ws.Column(startColws).Width = (int)Z.RAA2; XL.FormatCells(ws.Cells[sR, startColws], "Ra 2", bold: true); ws.Cells[sR, startColws].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; startColws++; #endregion #region write vào 3 +9 ws.Column(startColws).Width = (int)Z.VAO3; XL.FormatCells(ws.Cells[sR, startColws], "Vào 3", bold: true); ws.Cells[sR, startColws].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; startColws++; #endregion #region write raa 3 +10 ws.Column(startColws).Width = (int)Z.RAA3; XL.FormatCells(ws.Cells[sR, startColws], "Ra 3", bold: true); ws.Cells[sR, startColws].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; startColws++; #endregion sR++; var pb_c2 = (from item in m_DSNV select new { item.PBCap2.ID, item.PBCap2.TenPhongBan }).Distinct().ToList(); try { foreach (var pb_i in pb_c2) { #region //write ten phong ban, tang 1 dong XL.FormatCells(ws.Cells[sR, 1], pb_i.TenPhongBan, bold: true, VeBorder: false, hAlign: ExcelHorizontalAlignment.Left); #endregion sR++; //chỉ số dòng mới, dòn var pb_c1 = (from item in m_DSNV where item.PBCap2.ID == pb_i.ID select new { item.PBCap1.ID, item.PBCap1.TenPhongBan }).Distinct().ToList(); foreach (var pb in pb_c1) { #region //write ten pb cap 1 tang 1 dong XL.FormatCells(ws.Cells[sR, 1], pb.TenPhongBan, bold: true, VeBorder: false, hAlign: ExcelHorizontalAlignment.Left); sR++; #endregion var dsnv = (from c in m_DSNV where c.PBCap1.ID == pb.ID select c).ToList(); foreach (var nhanvien in dsnv) { // duyet tung nv, nhớ tăng sR startColws = 1; //reset startcol =1 mỗi lần ghi nv mới var ngayCong = nhanvien.DSNgayCong[2]; if (ngayCong.DSVaoRa.Count == 0 || ngayCong.DSVaoRa[ngayCong.DSVaoRa.Count - 1].Raa != null) { continue; } #region stt,hoten,macc sttnv++; XL.FormatCells(ws.Cells[sR, startColws + 0], sttnv); XL.FormatCells(ws.Cells[sR, startColws + 1], nhanvien.TenNV, hAlign: ExcelHorizontalAlignment.Left); //Ten XL.FormatCells(ws.Cells[sR, startColws + 2], nhanvien.MaNV, hAlign: ExcelHorizontalAlignment.Left); //MaNV startColws = startColws + 3; // + 4 là 4 cột, nếu thêm 1 cột thì +5, +6 #endregion var xCol = startColws; #region trạng thái XL.FormatCells(ws.Cells[sR, xCol], "Đang làm việc"); xCol++; #endregion #region ca XL.FormatCells(ws.Cells[sR, xCol], ngayCong.CIOs_Absents_Code_Comp()); // xCol++; #endregion #region vào ra 1-->3 for (int x = 0; x < ngayCong.DSVaoRa.Count || x < 3; x++) { if (x < 3 && x >= ngayCong.DSVaoRa.Count) { XL.FormatCells(ws.Cells[sR, xCol], null); xCol++; XL.FormatCells(ws.Cells[sR, xCol], null); xCol++; } else { XL.FormatCells(ws.Cells[sR, xCol], ngayCong.DSVaoRa[x].Vao != null ? ngayCong.DSVaoRa[x].Vao.Time : (object)null, numberFormat: "H:mm d/M"); xCol++; XL.FormatCells(ws.Cells[sR, xCol], ngayCong.DSVaoRa[x].Raa != null ? ngayCong.DSVaoRa[x].Raa.Time : (object)null, numberFormat: "H:mm d/M"); xCol++; } } #endregion sR++; } } } sR += 2; } catch (Exception exception) { throw exception; } }
private void btnXacNhan_Click(object sender, EventArgs e) { if (XL2.KiemtraKetnoiCSDL() == false) { return; } // đọc tháng kết công để ko cho phép xác nhận nếu đã kết công //XL2.NgayCuoiThangKetCong = XL.DocThangKetCong();//tbd temp patch #region hỏi trước khi xác nhận if (MessageBox.Show(Resources.Text_ConfirmDongY_XacNhan, Resources.Caption_XacNhan, MessageBoxButtons.OKCancel) == DialogResult.Cancel) { return; } #endregion #region lấy trước các thông số //numPhutTinhLamThem.Update(); #region //ver 4.0.0.4 kiểm tra ko nếu nhập giờ làm thêm ko hợp lệ thì báo, vượt ngưỡng max thì thoát TimeSpan OTCa = TimeSpan.Zero; if ((checkXNLamThem.Checked) && TimeSpan.TryParseExact(maskPhutTinhLamThem.Text, @"hh\:mm", CultureInfo.InvariantCulture, out OTCa) == false) { ACMessageBox.Show(Resources.Text_NhapThoiGianLamThemChuaHopLe, Resources.Caption_Loi, 3000); return; } var maxOTCa = TimeSpan.Zero; if (maskPhutTinhLamThem.Tag != null) { maxOTCa = (TimeSpan)maskPhutTinhLamThem.Tag; } if (OTCa > maxOTCa) { ACMessageBox.Show(Resources.Text_GioLamThemLonHonTGOLai, Resources.Caption_ThongBao, 3000); return; } #endregion var currShift = (tbXNCa.Tag != null) ? (cCa)tbXNCa.Tag : null; var bDuyetCPTre = checkXNChoPhepTre.Checked; var bDuyetCPSom = checkXNChoPhepSom.Checked; var bXacNhanLamThem = checkXNLamThem.Checked; //var soPhutLamThem = (checkXNLamThem.Checked) ? Convert.ToInt32(numPhutTinhLamThem.Value) : 0; var soPhutLamThem = Convert.ToInt32(OTCa.TotalMinutes); //ver 4.0.0.4 var choPhepTinhPc50 = checkXNTinhPC50.Checked; var bVaoTreLaCV = checkXNVaoTreTinhCV.Checked; //ver 4.0.0.4 var bRaaSomLaCV = checkXNRaaSomTinhCV.Checked; //ver 4.0.0.4 var lydo = (cbXNLyDo.SelectedItem != null) ? cbXNLyDo.SelectedItem.ToString() : cbXNLyDo.SelectedText; var ghichu = tbXNGhiChu.Text; #endregion // chế độ xác nhận single if (dgrdGioCoLamThem.SelectedRows.Count == 1) { // kiểm tra các điều kiện trước khi xác nhận IsReload = true; var dataRow = (DataRowView)dgrdGioCoLamThem.SelectedRows[0].DataBoundItem; XuLyDon(dataRow, currShift, bDuyetCPTre, bDuyetCPSom, soPhutLamThem, choPhepTinhPc50, lydo, ghichu, bVaoTreLaCV, bRaaSomLaCV); //ver 4.0.0.4 } else // chế độ xác nhận multiple { IsReload = true; foreach (var dataRow in (from DataGridViewRow dataGridViewRow in dgrdGioCoLamThem.SelectedRows select(DataRowView) dataGridViewRow.DataBoundItem)) { XuLyDon(dataRow, currShift, bDuyetCPTre, bDuyetCPSom, soPhutLamThem, choPhepTinhPc50, lydo, ghichu, bVaoTreLaCV, bRaaSomLaCV); //ver 4.0.0.4 } } XL.TaoTableXacNhanCa(m_DSNV, m_arrRecd, m_tableDS_CIO); }
void XuatBBDSNVVang(ExcelPackage p) { #region //Create a sheet p.Workbook.Worksheets.Add("DSNV Vang"); var ws = p.Workbook.Worksheets[2]; ws.Name = "DSNV Vang"; //Setting Sheet's name ws.Cells.Style.Font.Size = 10; //Default font size for whole sheet ws.Cells.Style.Font.Name = "Times News Roman"; //Default Font name for whole sheet #endregion var sR = 1; XL2.VeLogo("bbdiemdanhvang", ws); XL2.GhiThongTinTongcty(ws, "", 1, 4, 12, 1, 9, 12, 4, 9); int sttnv = 0, startColws = 1; #region 1.tieu de bang cham cong tu ngay den ngay 2. bỏ 1 dòng trống sR = sR + 7; // sR+1 là dòng trống XL.FormatCells(ws.Cells[sR, 6], "Danh sách nhân viên vắng ngày " + dtpNgay.Value.ToString("dd/MM/yyyy"), size: 14, hAlign: ExcelHorizontalAlignment.CenterContinuous, bold: true, VeBorder: false); #endregion sR++; sR++; #region write stt +0 ws.Column(startColws).Width = (int)Z.STT; XL.FormatCells(ws.Cells[sR, startColws], "STT", bold: true); startColws++; #endregion #region write ho ten +1 ws.Column(startColws).Width = (int)Z.TEN; XL.FormatCells(ws.Cells[sR, startColws], "Họ tên", bold: true); startColws++; #endregion #region write manv +2 ws.Column(startColws).Width = (int)Z.MANV; XL.FormatCells(ws.Cells[sR, startColws], "Mã NV", bold: true); startColws++; #endregion #region write trạng thái +3 ws.Column(startColws).Width = (int)Z.TRANGTHAI; XL.FormatCells(ws.Cells[sR, startColws], "Trạng thái", bold: true); startColws++; #endregion #region write ca +4 ws.Column(startColws).Width = (int)Z.CA; XL.FormatCells(ws.Cells[sR, startColws], "Ca", bold: true); startColws++; #endregion //startCol = 4 sR++; var pb_c2 = (from item in m_DSNV select new { item.PBCap2.ID, item.PBCap2.TenPhongBan }).Distinct().ToList(); try { foreach (var pb_i in pb_c2) { #region //write ten phong ban, tang 1 dong XL.FormatCells(ws.Cells[sR, 1], pb_i.TenPhongBan, bold: true, VeBorder: false, hAlign: ExcelHorizontalAlignment.Left); #endregion sR++; //chỉ số dòng mới, dòn var pb_c1 = (from item in m_DSNV where item.PBCap2.ID == pb_i.ID select new { item.PBCap1.ID, item.PBCap1.TenPhongBan }).Distinct().ToList(); foreach (var pb in pb_c1) { #region //write ten pb cap 1 tang 1 dong XL.FormatCells(ws.Cells[sR, 1], pb.TenPhongBan, bold: true, VeBorder: false, hAlign: ExcelHorizontalAlignment.Left); sR++; #endregion var dsnv = (from c in m_DSNV where c.PBCap1.ID == pb.ID select c).ToList(); foreach (var nhanvien in dsnv) { // duyet tung nv, nhớ tăng sR startColws = 1; //reset startcol =1 mỗi lần ghi nv mới var ngayCong = nhanvien.DSNgayCong[2]; if (ngayCong.DSVaoRa.Count > 0) { continue; } #region stt,hoten,macc sttnv++; XL.FormatCells(ws.Cells[sR, startColws + 0], sttnv); XL.FormatCells(ws.Cells[sR, startColws + 1], nhanvien.TenNV, hAlign: ExcelHorizontalAlignment.Left); //Ten XL.FormatCells(ws.Cells[sR, startColws + 2], nhanvien.MaNV, hAlign: ExcelHorizontalAlignment.Left); //MaNV startColws = startColws + 3; // + 4 là 4 cột, nếu thêm 1 cột thì +5, +6 #endregion var xCol = startColws; #region trạng thái XL.FormatCells(ws.Cells[sR, xCol], "Vắng"); xCol++; #endregion #region ca XL.FormatCells(ws.Cells[sR, xCol], ngayCong.Absents_Code()); // xCol++; #endregion sR++; } } } sR += 2; } catch (Exception exception) { throw exception; } }
private void frmXacNhanTangCa_Load(object sender, EventArgs e) { IsReload = false; XL.TaoTableXacNhanCa(m_DSNV, m_arrRecd, m_tableDS_CIO); }
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 KetLuong(object sender, WaitWindowEventArgs e) { #region lấy thông tin từ csdl và khỏi tạo nv var ngaydauthang = MyUtility.FirstDayOfMonth(m_Thang); var ngaycuoithang = MyUtility.LastDayOfMonth(m_Thang); var tableDSNVChiCongnhatThang = DAO5.LayTableCongNhat(ngaydauthang); var tableDSThuchiThang = DAO5.LayDSThuchiThang(ngaydauthang); var tableKetcongNgay = DAO5.LayKetcongNgay(ngaydauthang, ngaycuoithang); var tableKetcongCa = DAO5.LayKetcongCa(ngaydauthang, ngaycuoithang); var tableXPVang = DAO5.LayTableXPVang(ngaydauthang, ngaycuoithang); var tableNgayLe = DAO5.DocNgayLe(ngaydauthang, ngaycuoithang); var dsnv = new List <cUserInfo>(); var dsphongban = new List <cPhongBan>(); XL.KhoiTaoDSPhongBan(dsphongban); // khởi tạo các phòng ban để cập nhật thông tin phòng ban cho nhân viên tính công XL.KhoiTaoDSNV_TinhLuong(dsnv, dsphongban); // khởi tạo tất cả nhân viên tính công, bao gồm cả công nhật ngày(nv chính thức) và công nhật tháng #endregion #region //load cong phu cap tung ngay cho tat ca nv, ke ca cong nhat, rieng truong hop cong nhat se xu ly ngay ben duoi foreach (var nv in dsnv) { nv.DSNgayCong = new List <cNgayCong>(); nv.DSVang = new List <cLoaiVang>(); for (DateTime indexNgay = ngaydauthang; indexNgay <= ngaycuoithang; indexNgay = indexNgay.AddDays(1d)) { XL.LoadNgayCong(nv.MaCC, nv.DSNgayCong, indexNgay, tableKetcongNgay, tableKetcongCa); } XL.LoadDSXPVang_Le(nv.MaCC, tableXPVang, tableNgayLe, nv.DSVang); //info trường hợp nhân viên công nhật sẽ được xử lý bên dưới XL.PhanPhoi_DSVang7(nv.DSVang, nv.DSNgayCong); XL.LoadThongtinLamViecCongNhat(nv.MaCC, ref nv.NgayBDCongnhat, ref nv.NgayKTCongnhat, ref nv.LoaiCN, nv.DSNgayCong, tableDSNVChiCongnhatThang); } #endregion //có được ds nhân viên với công, phụ cấp, các loại vắng, công ngày lễ --> bắt đầu tính lương #region lấy thông số để tính lương var sanluong01 = (int)(numSanLuong.Value); var dongia02 = (int)numDonGia.Value; var perTrichQuyLuong = (int)numTrichQuyLuong.Value; var sanluongGiacongNoiBo = (int)numSanluongGiacongNoibo.Value; var dongiaGiacongNoiBo = (int)numDongiaGiacongNoibo.Value; var sanluongGiacongNgoai = (int)numSanluongGiacongNgoai.Value; var dongiaGiacongNgoai = (int)numDongiaGiacongNgoai.Value; var mucLuongToithieu = (int)numLuongTT.Value; var donGiaBdCa3 = (int)numBoiDuongCa3.Value; var DinhMuccomtrua = (int)numDinhMucComTrua.Value; double tongQuy100Per03 = Convert.ToDouble(sanluong01) * Convert.ToDouble(dongia02); double _80perQuy100_04 = tongQuy100Per03 * (perTrichQuyLuong / 100d); // ko cần round vì 220*0.8=176 chẵn #endregion // xác định công chuẩn của tháng var congChuanThang = XL.TinhCongChuanCuaThang(ngaydauthang); #region // thống kê công, phụ cấp hàng ngày của từng nhân viên chính thức //trường hợp nhân viên vừa công nhật vừa chính thức thì chỉ thống kê ngày công sau ngày kết thúc công nhật foreach (var nv in dsnv) { // thống kê công và phụ cấp từng nv XL.ThongKeThang(ref nv.ThongKeThang, nv.DSNgayCong, nv.NgayBDCongnhat, nv.NgayKTCongnhat, nv.LoaiCN); // tính công chờ việc: 1.nv công nhật ko cv. 2. nv mới chính thức thì chỉ giữ công cv khai báo if (nv.LoaiCN == LoaiCongNhat.NVCongNhat) // nhân viên làm công nhật, công cv tự động, khai báo = 0 { nv.ThongKeThang.CongCV_Auto = 0f; nv.ThongKeThang.CongCV_KB = 0f; } else { if (nv.LoaiCN == LoaiCongNhat.NVChinhThuc) // nhân viên chính thức { nv.ThongKeThang.CongCV_Auto = congChuanThang - /*(nv.ThongKeThang.Cong + nv.ThongKeThang.Le + nv.ThongKeThang.Phep + //ver4.0.0.0*/ (nv.ThongKeThang.TongNgayLV + nv.ThongKeThang.Le + nv.ThongKeThang.Phep + //ver4.0.0.1 nv.ThongKeThang.BHXH + nv.ThongKeThang.H_CT_PT + nv.ThongKeThang.PTDT + nv.ThongKeThang.NghiRo + nv.ThongKeThang.CongCV_KB); //DANGLAM if (nv.ThongKeThang.CongCV_Auto < 0f) { nv.ThongKeThang.CongCV_Auto = 0f; } } else // nhân viên chính thức vừa công nhật thì công cv_auto =0, công cv khai báo ko đổi { nv.ThongKeThang.CongCV_Auto = 0f; } } nv.ThongKeThang.CongCV = nv.ThongKeThang.CongCV_Auto + nv.ThongKeThang.CongCV_KB; } #endregion #region // tính lương công nhật cho các nhân viên làm công nhật và tổng lương công nhật double TongLuongCongNhat_AllNV = 0d; foreach (DataRow row in tableDSNVChiCongnhatThang.Rows.Cast <DataRow>()) { // lấy thông tin var macc = (int)row["UserEnrollNumber"]; var dongiaLuong = (int)row["DonGiaLuong"]; var soNgayCong = (float)row["SoNgayCong"]; var TamUng = (double)row["TamUng"]; // xác định nhân viên var nv = dsnv.Find(o => o.MaCC == macc); if (nv == null) { continue; } nv.ThongKeThang.Cong_Congnhat = soNgayCong; nv.chiTietLuong.CongNhat = soNgayCong * dongiaLuong; //ko trừ tạm ứng, tạm ứng chỉ ở phần thực lãnh mới ghi TongLuongCongNhat_AllNV += nv.chiTietLuong.CongNhat; } #endregion #region //đọc danh sách thu chi cho từng nhân viên (lưu ý ko đọc phụ cấp của nhân viên công nhật foreach (DataRow row in tableDSThuchiThang.Rows.Cast <DataRow>()) { var macc = (int)row["UserEnrollNumber"]; // xác định nhân viên var nv = dsnv.Find(o => o.MaCC == macc); if (nv == null) { continue; } nv.chiTietLuong.KhauTru.TamUng = (double)row["TamUng"]; nv.chiTietLuong.LuongDieuChinh = (double)row["LuongDieuChinh"]; nv.chiTietLuong.MucDongBHXH = (float)row["MucDongBHXH"]; nv.chiTietLuong.KhauTru.ThuChiKhac = (double)row["ThuChiKhac"]; } #endregion #region // tính lương cho nv chính thức double tong_qlcb_2 = 0d, tong_SPLamRa_B2_2 = 0d, tongQuyLuongCV = 0d, tongQuyLuongNghiDinhCP = 0d, tongChiKhacTuQuyLuong = 0d, tongQuyLuongSP = 0d; foreach (var nv in dsnv.Where(o => o.LoaiCN != LoaiCongNhat.NVCongNhat)) { //if (Math.Abs(nv.ThongKeThang.Cong - 0f) < 0.01f) nv.ThongKeThang.CongCV = 0f; //fortesting nếu ko chấm công thì cũng ko có công cv XL.TinhLuongCoBan_CongVaPC_A202(nv.HeSo.LuongCB, mucLuongToithieu, nv.ThongKeThang.Cong, nv.ThongKeThang.PhuCaps._TongPC, nv.ThongKeThang.Phep, nv.ThongKeThang.H_CT_PT, nv.ThongKeThang.PTDT, nv.ThongKeThang.Le, nv.ThongKeThang.CongCV, //DANGLAM out nv.chiTietLuong.LCB_Theo.CongThucTe, out nv.chiTietLuong.LCB_Theo.CheDoNghi, out nv.chiTietLuong.LCB_Theo.CongCV, out nv.chiTietLuong.LCB_Theo.PhuCap); tongQuyLuongCV += nv.chiTietLuong.LCB_Theo.CongCV; tongQuyLuongNghiDinhCP += nv.chiTietLuong.LCB_Theo.TongCong_CD_CV_PC; XL.TinhBoiDuongQuaDemA512(nv.ThongKeThang.NgayQuaDem, donGiaBdCa3, out nv.chiTietLuong.BoiDuongQuaDem); tong_qlcb_2 += nv.chiTietLuong.LCB_Theo.TongCong_CD_CV_PC + nv.chiTietLuong.BoiDuongQuaDem + nv.chiTietLuong.LuongDieuChinh; //info tong_qlcb_2 bao gồm lương cb 1nv, bồi dưỡng ca 3 1nv, lương tháng trước 1 nv tongChiKhacTuQuyLuong += nv.chiTietLuong.BoiDuongQuaDem + nv.chiTietLuong.KhauTru.ThuChiKhac; XL.TinhSPLamRa_CongVaPC_B102(nv.HeSo.LuongCV, nv.ThongKeThang.Cong, nv.ThongKeThang.PhuCaps._TongPC, nv.ThongKeThang.Phep, nv.ThongKeThang.H_CT_PT, nv.ThongKeThang.PTDT, nv.ThongKeThang.Le, //DANGLAM out nv.chiTietLuong.SPLamRa_Theo.CongThucTe, out nv.chiTietLuong.SPLamRa_Theo.CheDoNghi, out nv.chiTietLuong.SPLamRa_Theo.PhuCap); tong_SPLamRa_B2_2 += nv.chiTietLuong.SPLamRa_Theo.TongSPLamRa; // tính khấu trừ BHXH nv.chiTietLuong.KhauTru.BHXH = Convert.ToDouble(nv.HeSo.BHXH_YT_TN * mucLuongToithieu * (nv.chiTietLuong.MucDongBHXH / 100f)); // tính tiền cơm trưa var temp1 = DinhMuccomtrua - ((DinhMuccomtrua / congChuanThang) * nv.ThongKeThang.NghiRo); nv.chiTietLuong.TienComTrua = (temp1 >= 0d) ? temp1 : 0d; } var chitienGiacongNoibo = Convert.ToDouble(sanluongGiacongNoiBo) * Convert.ToDouble(dongiaGiacongNoiBo); var chitienGiacongNgoai = Convert.ToDouble(sanluongGiacongNgoai) * Convert.ToDouble(dongiaGiacongNgoai); var tong_qlSP_A71_1_VaGiaCong = (_80perQuy100_04 + chitienGiacongNoibo + chitienGiacongNgoai) - tong_qlcb_2 - TongLuongCongNhat_AllNV; double giaTri_1SP_B3_1 = tong_qlSP_A71_1_VaGiaCong / tong_SPLamRa_B2_2; // tính ra được 1 đơn vị sản phẩm có giá bao nhiêu //double tong0 = 0d, tong1 = 0d, tong2 = 0d, tong3 = 0d, tong4 = 0d, tong5 = 0d, tong6 = 0d, tong7 = 0d, tong8 = 0d, tong9 = 0d, tong10 = 0d, tong11 = 0d, tong12 = 0d, tong13 = 0d, tong14 = 0d, tong15 = 0d, tong16 = 0d, tong17 = 0d, tong18 = 0d, tong19 = 0d, tong20 = 0d, tong21 = 0d, tong22 = 0d, tong23 = 0d, tong24 = 0d, tong25 = 0d, tong26 = 0d, tong27 = 0d, tong28 = 0d, tong29 = 0d, tong30 = 0d, tong31 = 0d, tong32 = 0d, tong33 = 0d, tong34 = 0d, tong35 = 0d, tong36 = 0d; foreach (var nv in dsnv.Where(o => o.LoaiCN != LoaiCongNhat.NVCongNhat)) { nv.chiTietLuong.LSP_Theo.CongThucTe = nv.chiTietLuong.SPLamRa_Theo.CongThucTe * giaTri_1SP_B3_1; nv.chiTietLuong.LSP_Theo.CheDoNghi = nv.chiTietLuong.SPLamRa_Theo.CheDoNghi * giaTri_1SP_B3_1; nv.chiTietLuong.LSP_Theo.PhuCap = nv.chiTietLuong.SPLamRa_Theo.PhuCap * giaTri_1SP_B3_1; tongQuyLuongSP += nv.chiTietLuong.LSP_Theo.TongCong_CD_PC; //fortesting region [03] } #endregion //fortesting testing region [01] #region // cập nhật lương xuống csdl , trước khi cập nhật thì xoá lương cũ // cập nhật lương xuống csdl , trước khi cập nhật thì xoá lương cũ int kq1 = SqlDataAccessHelper.ExecNoneQueryString( "delete from KetLuongThang where Thang = @Thang", new string[] { "@Thang" }, new object[] { m_Thang }); //INFO LOG DO KẾT LƯƠNG THÁNG THỰC HIỆN foreach (var nv in dsnv.Where(o => o.LoaiCN != LoaiCongNhat.NVCongNhat)) { int kq = DAO5.InsKetLuongThang(m_Thang, nv); //if (kq == 0) MessageBox.Show("Xảy ra lỗi tại vị trí NV: " + nv.MaCC + nv.TenNV);//fortesting } // sau khi cập nhật lương từng nhân viên thì cập nhật thông số kết lương tháng int kq2 = DAO5.UpdInsThongsoKetluongThang(m_Thang, XL2.PC30, XL2.PC50, XL2.PCTCC3, XL2.PC100, XL2.PC160, XL2.PC200, XL2.PC290, sanluong01, dongia02, perTrichQuyLuong, sanluongGiacongNoiBo, dongiaGiacongNoiBo, sanluongGiacongNgoai, dongiaGiacongNgoai, mucLuongToithieu, donGiaBdCa3, DinhMuccomtrua, tongQuyLuongCV, tongQuyLuongNghiDinhCP, tongChiKhacTuQuyLuong, tongQuyLuongSP, giaTri_1SP_B3_1); //ghi log string noidung = string.Format("Kết lương tháng [{0}]", m_Thang.ToString("MM/yyyy")); DAO5.GhiNhatKyThaotac("Kết lương", noidung); #endregion }
private void btnXoaGioRaa_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 lydo = cbLyDo.SelectedText; var ghichu = tbGhiChu.Text; #region hỏi lại ttrước khi xoá if (MessageBox.Show(string.Format(Resources.xacNhanXoaGioHangLoat, "ra"), Resources.capXacNhan, MessageBoxButtons.YesNo) == DialogResult.No) { return; } #endregion if (dgrdDSGioVaoRa.SelectedRows.Count == 0) { return; } var flagThongBao = false; // thông báo ko được xoá giờ đãn XN 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 groupByNV in arrRecord) { var nhanvien = groupByNV.Key; foreach (var row in groupByNV) { if (row.CIO.GetType() == typeof(cChkInOut_V)) { flagThongBao = true; continue; } if (row.CIO.HaveINOUT == -1) { continue; } var checkout = row.CIO.Raa; XL.XoaGioChoNV(checkout, row.nhanvien, XL2.currUserID, lydo, ghichu); } 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(); if (flagThongBao) { AutoClosingMessageBox.Show("Không thể xoá các giờ đã xác nhận.", "Thông báo", 2000); } }
private void XuatBBLuong(object sender, WaitWindowEventArgs e) { string tenNVLapBieu = (string)e.Arguments[0]; string saveFileName = (string)e.Arguments[1]; var ngaydauthang = MyUtility.FirstDayOfMonth(m_Thang); var ngaycuoithang = MyUtility.LastDayOfMonth(m_Thang); //#region lấy dữ liệu kết lương để xuất var tableKetLuongThang = DAO5.LayKetLuongThang(ngaydauthang); var tableThongsoKetluongThang = DAO5.LayThongsoKetluongThang(ngaydauthang); var tableDSNVChiCongnhatThang = DAO5.LayTableCongNhat(ngaydauthang); var tableTongLuongCongnhat = SqlDataAccessHelper.ExecuteQueryString( @"select CAST(SUM (SoNgayCong*DonGiaLuong) as float) from DSNVChiCongNhatThang where Thang=@Thang", new string[] { "@Thang" }, new object[] { ngaydauthang }); var tongLuongCongnhat = (tableTongLuongCongnhat.Rows[0][0] != DBNull.Value) ? (double)tableTongLuongCongnhat.Rows[0][0] : 0d; var tongLuongDieuchinh = (from DataRow row in tableKetLuongThang.Rows let luongdieuchinh = (row["LuongDieuChinh"] != DBNull.Value) ? (double)row["LuongDieuChinh"] : 0d select luongdieuchinh).Sum(); var tableKetcongNgay = DAO5.LayKetcongNgay(ngaydauthang, ngaycuoithang); var tableKetcongCa = DAO5.LayKetcongCa(ngaydauthang, ngaycuoithang); var tableXPVang = DAO5.LayTableXPVang(ngaydauthang, ngaycuoithang); var tableNgayLe = DAO5.DocNgayLe(ngaydauthang, ngaycuoithang); var dsnv = new List <cUserInfo>(); ChuanBiDuLieuXuatLuong(dsnv, ngaydauthang, ngaycuoithang, tableKetLuongThang, tableKetcongNgay, tableKetcongCa, tableXPVang, tableNgayLe, tableDSNVChiCongnhatThang); //#endregion //fortesting testing region [02] using (var p = new ExcelPackage()) { //1. xuat bb bang thong so san luong, don gia, he so pc #region lay thong so cac loai pc de ghi cot tieu de int pc30 = (int)tableThongsoKetluongThang.Rows[0]["HSPCDem"]; int pc50 = (int)tableThongsoKetluongThang.Rows[0]["HSPCTangCuong"]; int pctcc3 = (int)tableThongsoKetluongThang.Rows[0]["HSPCTangCuong_Dem"]; int pc100 = (int)tableThongsoKetluongThang.Rows[0]["HSPC200"]; int pc160 = (int)tableThongsoKetluongThang.Rows[0]["HSPC260"]; int pc200 = (int)tableThongsoKetluongThang.Rows[0]["HSPC300"]; int pc290 = (int)tableThongsoKetluongThang.Rows[0]["HSPC390"]; #endregion //2. xuat bb bang ket cong thang #region ghi sheet bang ket cong thang trinh ky p.Workbook.Worksheets.Add("BangKetCong"); var ws = p.Workbook.Worksheets["BangKetCong"]; ws.Name = "BangKetCong"; //Setting Sheet's name XL.ExportSheetBangKetcongThang(ws, ngaydauthang, ngaycuoithang, dsnv, string.Empty, string.Empty, pc30, pc50, pctcc3, pc100, pc160, pc200, pc290); #endregion //3. xuat bb chi tiết kết công #region ghi sheet chi tiết kết công p.Workbook.Worksheets.Add("ChiTietKetCong"); ws = p.Workbook.Worksheets["ChiTietKetCong"]; ws.Name = "ChiTietKetCong"; //Setting Sheet's name XL.ExportSheetBangChiTietKetCong(ws, ngaydauthang, ngaycuoithang, dsnv, pc30, pc50, pctcc3, pc100, pc160, pc200, pc290); #endregion //4. xuat bb bang luong cong nhat #region ghi sheet bang luong cong nhat p.Workbook.Worksheets.Add("BangLuongCongNhat"); ws = p.Workbook.Worksheets["BangLuongCongNhat"]; ws.Name = "BangLuongCongNhat"; XL.ExportSheetBangLuongCongNhat(ws, ngaydauthang, tableDSNVChiCongnhatThang); #endregion //5. xuat bb bang luong chinh thuc #region ghi sheet bảng lương p.Workbook.Worksheets.Add("BangLuong"); ws = p.Workbook.Worksheets["BangLuong"]; ws.Name = "BangLuong"; XL.ExportSheetBangLuong(ws, m_Thang, dsnv, tenNVLapBieu); #endregion //6. xuat bb bang tong hop so lieu giam doc ky duyet #region ghi sheet bảng tổng hợp số liệu p.Workbook.Worksheets.Add("BangTongHopChi"); ws = p.Workbook.Worksheets["BangTongHopChi"]; ws.Name = "BangTongHopChi"; XL.ExportSheetTongHopChi(ws, m_Thang, tableThongsoKetluongThang, tongLuongCongnhat, tongLuongDieuchinh); #endregion //7. xuat sheet thong ke sữa #region ghi sheet thống kê BD ĐH p.Workbook.Worksheets.Add("BangThongKeBoiDuongDocHai"); ws = p.Workbook.Worksheets["BangThongKeBoiDuongDocHai"]; ws.Name = "BangThongKeBoiDuongDocHai"; XL.ExportSheetBangThongKeSua(ws, ngaydauthang, ngaycuoithang, dsnv); #endregion Byte[] bytes = p.GetAsByteArray(); XL.XuatFileExcel(saveFileName, bytes, "frm4LuuHSPC XuatBBLuong"); } }
private void btnDiemDanh_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 dtpNgay.Update(); DateTime ngayBD = dtpNgay.Value.Date; ngayBD = ngayBD.AddDays(-1d); DateTime ngayKT = ngayBD.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ụ //2. lấy danh sách nhân viên check if (flstDSNVDiemDanh == null) { flstDSNVDiemDanh = new List <cUserInfo>(); } else { flstDSNVDiemDanh.Clear(); } LayDSNVXemCong(fTableDSNVTrongPhong, flstDSNVDiemDanh, flstDSNV); //3. lấy dữ liệu chấm công của các nhân viên //[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 { XL.XemCong(flstDSNVDiemDanh, ngayBD, ngayKT); } catch (Exception exception) { log.Info(exception); MessageBox.Show("Mất kết nối đến máy chủ. Vui lòng thử lại sau.", "Lỗi"); GC.Collect(); return; } //4. xử lý dữ liệu để đưa lên lưới tổng hợp DataTable tableCTDiemDanh = dgrdTongHop.DataSource as DataTable; if (tableCTDiemDanh == null) { tableCTDiemDanh = XL.TaoCauTrucDataTable( new[] { "UserEnrollNumber", "UserFullName", "TimeStrVao1", "TimeStrRa1", "TimeStrVao2", "TimeStrRa2", "TimeStrVao3", "TimeStrRa3", "ShiftID1", "ShiftID2", "ShiftID3", "Ca", "TrangThai" }, new[] { typeof(int), typeof(string), typeof(DateTime), typeof(DateTime), typeof(DateTime), typeof(DateTime), typeof(DateTime), typeof(DateTime), typeof(int), typeof(int), typeof(int), typeof(string), typeof(string), }); } else { tableCTDiemDanh.Rows.Clear(); } int SoNVDangLamViec = 0, SoNVDaRaVe = 0, SoNVVang = 0; foreach (var nhanvien in flstDSNVDiemDanh) { DataRow row = tableCTDiemDanh.NewRow(); row["UserEnrollNumber"] = nhanvien.UserEnrollNumber; row["UserFullName"] = nhanvien.UserFullName; cNgayCong ngayCong = nhanvien.DSNgayCong[1]; //nếu có check thì khỏi ghi vắng string ChuoiCa = string.Empty; string ChuoiTrangThai = string.Empty; if (ngayCong.HasCheck) { for (int i = 0; i < ngayCong.DSVaoRa.Count; i++) { if (i >= 3) { break; } row["TimeStrVao" + (i + 1)] = (ngayCong.DSVaoRa[i].Vao != null) ? ngayCong.DSVaoRa[i].Vao.TimeStr : (object)DBNull.Value; row["TimeStrRa" + (i + 1)] = (ngayCong.DSVaoRa[i].Raa != null) ? ngayCong.DSVaoRa[i].Raa.TimeStr : (object)DBNull.Value; if (ngayCong.DSVaoRa[i].HaveINOUT > 0) { ChuoiCa += ngayCong.DSVaoRa[i].ThuocCa.ShiftCode + "; "; } else if (ngayCong.DSVaoRa[i].HaveINOUT == -1) { ChuoiCa += "KV; "; } else if (ngayCong.DSVaoRa[i].HaveINOUT == -2) { ChuoiCa += "KR; "; } } cChkInOut lastCIO1 = ngayCong.DSVaoRa[ngayCong.DSVaoRa.Count - 1]; // xét vào ra cuối để ghi trạng thái if (lastCIO1.HaveINOUT == -2) { ChuoiTrangThai = "Đang làm việc; "; SoNVDangLamViec++; } else if (lastCIO1.HaveINOUT > 0 || lastCIO1.HaveINOUT == -1) { ChuoiTrangThai = "Đã ra về; "; SoNVDaRaVe++; } } else // không có check, kiểm tra có khai báo vắng ko, nếu có thì ghi { SoNVVang++; ChuoiCa = string.Empty; if (ngayCong.DSVang != null && ngayCong.DSVang.Count != 0) { foreach (var loaiVang in ngayCong.DSVang) { ChuoiTrangThai += "Vắng " + loaiVang.KyHieu + "; "; } } else { ChuoiTrangThai = "Vắng"; } } row["Ca"] = ChuoiCa; row["TrangThai"] = ChuoiTrangThai; tableCTDiemDanh.Rows.Add(row); } tbTongSoNV.Text = flstDSNVDiemDanh.Count.ToString(); tbSoNVDangLamViec.Text = SoNVDangLamViec.ToString(); tbSoNVDaRaVe.Text = SoNVDaRaVe.ToString(); tbSoNVVang.Text = SoNVVang.ToString(); dgrdTongHop.DataSource = tableCTDiemDanh; }
private void XuatBangChiTiet(object sender, WaitWindowEventArgs e) { string saveFileName = e.Arguments[0].ToString(); var dsnv = new List <cUserInfo>(); var ngaydauthang = MyUtility.FirstDayOfMonth(m_Thang); var ngaycuoithang = MyUtility.LastDayOfMonth(m_Thang); #region lấy dữ liệu kết lương để xuất var tableKetLuongThang = DAO5.LayKetLuongThang(ngaydauthang); var tableThongsoKetluongThang = DAO5.LayThongsoKetluongThang(ngaydauthang); var tableDSNVChiCongnhatThang = DAO5.LayTableCongNhat(ngaydauthang); var tableTongLuongCongnhat = SqlDataAccessHelper.ExecuteQueryString( @"select CAST(SUM (SoNgayCong*DonGiaLuong) as float) from DSNVChiCongNhatThang where Thang=@Thang", new string[] { "@Thang" }, new object[] { ngaydauthang }); var tongLuongCongnhat = (tableTongLuongCongnhat.Rows[0][0] != DBNull.Value) ? (double)tableTongLuongCongnhat.Rows[0][0] : 0d; var tongLuongDieuchinh = (from DataRow row in tableKetLuongThang.Rows let luongdieuchinh = (row["LuongDieuChinh"] != DBNull.Value) ? (double)row["LuongDieuChinh"] : 0d select luongdieuchinh).Sum(); var tableKetcongNgay = DAO5.LayKetcongNgay(ngaydauthang, ngaycuoithang); var tableKetcongCa = DAO5.LayKetcongCa(ngaydauthang, ngaycuoithang); var tableXPVang = DAO5.LayTableXPVang(ngaydauthang, ngaycuoithang); var tableNgayLe = DAO5.DocNgayLe(ngaydauthang, ngaycuoithang); #endregion ChuanBiDuLieuXuatLuong(dsnv, ngaydauthang, ngaycuoithang, tableKetLuongThang, tableKetcongNgay, tableKetcongCa, tableXPVang, tableNgayLe, tableDSNVChiCongnhatThang); var @continue = true; FileInfo template, fileResult; try { template = new FileInfo(Settings.Default.pathReportChiTietLuong); } catch (Exception ex) { if (ex is System.Security.SecurityException || ex is UnauthorizedAccessException) { MessageBox.Show(string.Format(Resources.Text_KoCoQuyenTruyCapFileX, "mẫu xuất báo biểu"), Resources.Caption_Loi); return; } else if (ex is NotSupportedException || ex is PathTooLongException) { MessageBox.Show(string.Format(Resources.Text_UnsupportedFile_PathTooLong, "mẫu xuất báo biểu"), Resources.Caption_Loi); return; } else { MessageBox.Show(string.Format(Resources.Text_CoLoi), Resources.Caption_Loi); return; } } try { fileResult = new FileInfo(saveFileName); } catch (Exception ex) { if (ex is System.Security.SecurityException || ex is UnauthorizedAccessException) { MessageBox.Show(string.Format(Resources.Text_KoCoQuyenTruyCapFileX, "mẫu xuất báo biểu"), Resources.Caption_Loi); return; } else if (ex is NotSupportedException || ex is PathTooLongException) { MessageBox.Show(string.Format(Resources.Text_UnsupportedFile_PathTooLong, "mẫu xuất báo biểu"), Resources.Caption_Loi); return; } else { MessageBox.Show(string.Format(Resources.Text_CoLoi), Resources.Caption_Loi); return; } } try { using (var packageResult = new ExcelPackage(template)) { var workbook = packageResult.Workbook; #region ghi sheet thong so var ws = workbook.Worksheets["ThongSo"]; ws.Name = "ThongSo"; //Setting Sheet's name XL.ExportSheetThongSo1(ws, ngaydauthang, tableThongsoKetluongThang); #endregion #region ghi sheet chi tiết từng ngày công ws = workbook.Worksheets["BangChiTietNgayCong"]; ws.Name = "BangChiTietNgayCong"; XL.ExportSheetChiTietNgayCong1(ws, dsnv); #endregion var ws_Template = workbook.Worksheets["BangChiTietLuong"]; XL.ExportSheetChiTietLuong1(ws_Template, dsnv); while (@continue) { try { packageResult.SaveAs(fileResult); @continue = false; } catch (Exception ex) { lg.Error(string.Format("[{0}]_[{1}]\n", this.Name, System.Reflection.MethodBase.GetCurrentMethod().Name), ex); if (ex is IOException) { MessageBox.Show(Resources.Text_FileDangMoBoiUngDungKhac, Resources.Caption_Loi); @continue = true; } else { MessageBox.Show(Resources.Text_CoLoi, Resources.Caption_Loi); @continue = false; } } } } } catch (Exception ex) { if (ex is System.Security.SecurityException || ex is UnauthorizedAccessException) { MessageBox.Show(string.Format(Resources.Text_KoCoQuyenTruyCapFileX, "mẫu xuất báo biểu"), Resources.Caption_Loi); return; } else if (ex is NotSupportedException || ex is PathTooLongException) { MessageBox.Show(string.Format(Resources.Text_UnsupportedFile_PathTooLong, "mẫu xuất báo biểu"), Resources.Caption_Loi); return; } else if (ex is IOException) { MessageBox.Show(Resources.Text_FileDangMoBoiUngDungKhac, Resources.Caption_Loi); return; } else { MessageBox.Show(Resources.Text_CoLoi, Resources.Caption_Loi); return; } } }
private void btnSuaGio_Click(object sender, EventArgs e) { IsReload = true; DataRowView row = dgrdTongHop.SelectedRows[0].DataBoundItem as DataRowView; if (row == null) { return; } int iUserEnrollNumber = (int)row["UserEnrollNumber"]; cUserInfo tmpNV = flstDSNVChk.Find(o => o.UserEnrollNumber == iUserEnrollNumber); DateTime tmpOldVao = (row["TimeStrVao"] != DBNull.Value) ? (DateTime)row["TimeStrVao"] : DateTime.MinValue; DateTime tmpOldRaa = (row["TimeStrRa"] != DBNull.Value) ? (DateTime)row["TimeStrRa"] : DateTime.MinValue; DateTime tmpNgayCong = (DateTime)row["TimeStrNgay"]; cNgayCong ngayCong = tmpNV.DSNgayCong.Find(o => o.NgayCong == tmpNgayCong); cChkInOut old_CIO = row["obj"] as cChkInOut; if (ngayCong.HasCheck == false || (tmpOldVao == DateTime.MinValue && tmpOldRaa == DateTime.MinValue)) { old_CIO = null; } else if (tmpOldVao == DateTime.MinValue) { old_CIO = ngayCong.DSVaoRa.Find(o => o.HaveINOUT < 0 && o.Raa.TimeStr == tmpOldRaa); } else if (tmpOldRaa == DateTime.MinValue) { old_CIO = ngayCong.DSVaoRa.Find(o => o.HaveINOUT < 0 && o.Vao.TimeStr == tmpOldVao); } else { old_CIO = ngayCong.DSVaoRa.Find(o => o.HaveINOUT > 0 && o.Vao.TimeStr == tmpOldVao && o.Raa.TimeStr == tmpOldRaa); } if (old_CIO != null && old_CIO.GetType() == typeof(cChkInOut_V)) { MessageBox.Show("Không thể sửa giờ đã được xác nhận.", "Thông báo"); return; } string Lydo = string.Empty; if (cbLyDo_Sua.SelectedItem == null) { Lydo = cbLyDo_Sua.Text; } else if (cbLyDo_Sua.SelectedItem != null) { Lydo = (string)cbLyDo_Sua.SelectedItem; } if (checkVao_Sua.Checked) { dtpVao_Sua.Update(); cChk tmpCheck = old_CIO.Vao; if (DAL.SuaGioChoNV(iUserEnrollNumber, tmpCheck.TimeStr, dtpVao_Sua.Value.Add(new TimeSpan(0, 0, 1)), true, tmpCheck.Source, tmpCheck.MachineNo, ThamSo.currUserID, Lydo, tbGhiChu_Sua.Text) == false) { MessageBox.Show("Không sửa được giờ cho nhân viên. Vui lòng thử lại.", "Lỗi"); } } if (checkRa_Sua.Checked) { dtpRa_Sua.Update(); cChk tmpCheck = old_CIO.Raa; if (DAL.SuaGioChoNV(iUserEnrollNumber, tmpCheck.TimeStr, dtpRa_Sua.Value, false, tmpCheck.Source, tmpCheck.MachineNo, ThamSo.currUserID, Lydo, tbGhiChu_Sua.Text) == false) { MessageBox.Show("Không sửa được giờ cho nhân viên. Vui lòng thử lại.", "Lỗi"); } } try { XL.XemCong(tmpNV, 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"); return; } GC.Collect(); }
private void ChuanBiDuLieuXuatLuong(List <cUserInfo> dsnv, DateTime ngaydauthang, DateTime ngaycuoithang, DataTable tableKetLuongThang, DataTable tableKetcongNgay, DataTable tableKetcongCa, DataTable tableXPVang, DataTable tableNgayLe, DataTable tableDSNVChiCongnhatThang) { #region lấy dữ liệu kết lương để xuất //var tableKetLuongThang = DAO.LayKetLuongThang(ngaydauthang); //var tableThongsoKetluongThang = DAO.LayThongsoKetluongThang(ngaydauthang); //var tableDSNVChiCongnhatThang = DAO.LayTableCongNhat(ngaydauthang); //var tableTongLuongCongnhat = SqlDataAccessHelper.ExecuteQueryString( // @"select CAST(SUM (SoNgayCong*DonGiaLuong) as float) from DSNVChiCongNhatThang where Thang=@Thang", // new string[] { "@Thang" }, new object[] { ngaydauthang }); //var tongLuongCongnhat = (tableTongLuongCongnhat.Rows[0][0] != DBNull.Value) ? (double)tableTongLuongCongnhat.Rows[0][0] : 0d; //var tongLuongDieuchinh = (from DataRow row in tableKetLuongThang.Rows // let luongdieuchinh = (row["LuongDieuChinh"] != DBNull.Value) // ? (double)row["LuongDieuChinh"] // : 0d // select luongdieuchinh).Sum(); //var tableKetcongNgay = DAO.LayKetcongNgay(ngaydauthang, ngaycuoithang); //var tableKetcongCa = DAO.LayKetcongCa(ngaydauthang, ngaycuoithang); //var tableXPVang = DAO.LayTableXPVang(ngaydauthang, ngaycuoithang); //var tableNgayLe = DAO.DocNgayLe(ngaydauthang, ngaycuoithang); #endregion #region tái tạo lại danh sách phòng ban của thời điểm kết lương để biết nv thuộc group phòng ban nào tại thời điểm kết lương var dsphongban = (from DataRow row in tableKetLuongThang.Rows group row by new cPhongBan { ID = (int)row["IDPhong"], Ten = row["TenPhong"].ToString(), ViTri = (int)row["ViTriPhong"], idParent = (int)row["RelationIDDept"] } into @group orderby @group.Key.ViTri select @group.Key).ToList(); foreach (var item in dsphongban) { // mỗi item tương ứng 1 phòng ban int?idParent = item.idParent; if (idParent != null) { cPhongBan parent = dsphongban.Find(o => o.ID == idParent); // info trường hợp idParent == 0 --> ko có phòng id=0 --> parent = null item.parent = parent; } } #endregion foreach (DataRow row in tableKetLuongThang.Rows) //info chỉ lấy các nhân viên chính thức, vừa chính thức vừa công nhật, thiếu các nv công nhật { cUserInfo nv = new cUserInfo(); nv.MaCC = (int)row["UserEnrollNumber"]; nv.DSNgayCong = new List <cNgayCong>(); nv.DSVang = new List <cLoaiVang>(); for (DateTime indexNgay = ngaydauthang; indexNgay <= ngaycuoithang; indexNgay = indexNgay.AddDays(1d)) { XL.LoadNgayCong(nv.MaCC, nv.DSNgayCong, indexNgay, tableKetcongNgay, tableKetcongCa); } XL.LoadDSXPVang_Le(nv.MaCC, tableXPVang, tableNgayLe, nv.DSVang); XL.PhanPhoi_DSVang7(nv.DSVang, nv.DSNgayCong); //kiểm tra nv đó có làm công nhật ko ? tìm nv chính thức trong dsnv công nhật // vì bảng kết lương chỉ bao gồm các nhân viên chính thức , các nhân viên công nhật ko chính thức sẽ ko có trong này XL.LoadThongtinLamViecCongNhat(nv.MaCC, ref nv.NgayBDCongnhat, ref nv.NgayKTCongnhat, ref nv.LoaiCN, nv.DSNgayCong, tableDSNVChiCongnhatThang); #region lấy thông tin cá nhân nv, phòng ban tổng công, phụ cấp, lương cơ bản, lương sản phẩm ... để xuất nv.MaNV = row["UserFullCode"].ToString(); nv.TenNV = row["UserFullName"].ToString(); nv.HeSo = new HeSo { LuongCB = (float)row["HSLCB"], LuongCV = (float)row["HSLCV"], BHCongThem_ChoGD_PGD = (float)row["HSBHCongThem"] }; nv.PhongBan = dsphongban.Find(o => o.ID == (int)row["IDPhong"]); nv.IDChucVu = (int)row["IDChucVu"]; nv.ChucVu = row["ChucVu"].ToString(); nv.ThongKeThang.Cong = (float)row["TongCong"]; nv.ThongKeThang.Le = (float)row["TongLe"]; nv.ThongKeThang.Phep = (float)row["TongPhep"]; nv.ThongKeThang.H_CT_PT = (float)row["TongH_CT_PT"]; nv.ThongKeThang.NgayQuaDem = (int)row["TongQuaDem"]; nv.ThongKeThang.CongCV = (float)row["TongCongCV"]; nv.ThongKeThang.BHXH = (float)row["TongBHXH"]; nv.ThongKeThang.NghiRo = (float)row["TongRo"]; nv.ThongKeThang.PTDT = (float)row["TongPTDT"];//DANGLAM nv.ThongKeThang.PhuCaps._30_dem = (float)row["TongPCDem"]; nv.ThongKeThang.PhuCaps._50_TC = (float)row["TongPCTC"]; nv.ThongKeThang.PhuCaps._100_TCC3 = (float)row["TongPCTC_Dem"]; nv.ThongKeThang.PhuCaps._100_LVNN_Ngay = (float)row["TongPC200"]; nv.ThongKeThang.PhuCaps._150_LVNN_Dem = (float)row["TongPC260"]; nv.ThongKeThang.PhuCaps._200_LeTet_Ngay = (float)row["TongPC300"]; nv.ThongKeThang.PhuCaps._250_LeTet_Dem = (float)row["TongPC390"]; nv.ThongKeThang.PhuCaps._Cus = (float)row["TongPCCus"]; nv.ThongKeThang.PhuCaps._TongPC = (float)row["TongPC"]; // tính toán dưới sql = tổng các loại phụ cấp, ko lưu dưới csdl nv.chiTietLuong.LCB_Theo.CongThucTe = (double)row["LuongCB_TheoCongThucTe"]; nv.chiTietLuong.LCB_Theo.CheDoNghi = (double)row["LuongCB_TheoCheDoNghi"]; nv.chiTietLuong.LCB_Theo.CongCV = (double)row["LuongCB_TheoCongCV"]; nv.chiTietLuong.LCB_Theo.PhuCap = (double)row["PCLuongCB"]; // với 4 chi tiết lương này có thể tính được các tổng LCB nv.chiTietLuong.LSP_Theo.CongThucTe = (double)row["LuongSP_TheoCongThucTe"]; nv.chiTietLuong.LSP_Theo.CheDoNghi = (double)row["LuongSP_TheoCheDoNghi"]; nv.chiTietLuong.LSP_Theo.PhuCap = (double)row["PCLuongSP"]; // với 2 chi tiết lương này có thể tính được các tổng LSP nv.chiTietLuong.LuongDieuChinh = (double)row["LuongDieuChinh"]; nv.chiTietLuong.BoiDuongQuaDem = (double)row["BoiDuongCa3"]; nv.chiTietLuong.KhauTru.TamUng = (double)row["TamUng"]; nv.chiTietLuong.MucDongBHXH = (float)row["MucDongBHXH"]; nv.chiTietLuong.KhauTru.BHXH = (double)row["KhauTruBHXH"]; nv.chiTietLuong.KhauTru.ThuChiKhac = (double)row["ThuChiKhac"]; nv.chiTietLuong.TienComTrua = (double)row["TienComTrua"]; nv.chiTietLuong.ThucLanh = (double)row["ThucLanh"]; #endregion dsnv.Add(nv); } }
private void btnCapNhatVaoCSDL_Click(object sender, EventArgs e) { IsReload = true; 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(m_Thang.Date, MyUtility.LastDayOfMonth(m_Thang))) { MessageBox.Show(string.Format(Resources.Text_KhoangTGDaKetCong_KoChinhSuaGioCC, "chỉnh sửa thu chi tháng", "thực hiện thao tác", ""), Resources.Caption_ThongBao, MessageBoxButtons.OK); return; } #endregion var table = dgrdDThuchiExcel.DataSource as DataTable; DateTime thang = m_Thang; var flagError = false; #region xác nhận trước khi thực hiện if ( MessageBox.Show(string.Format("Bạn muốn cập nhật cho tháng {0}?", thang.ToString("M/yyyy")), Resources.Caption_XacNhan, MessageBoxButtons.YesNo) == DialogResult.No) { return; } #endregion if (table != null) { var tableTatCaNV = XL.LayDSNV(true); //tbd foreach (DataRow row in table.Rows) { #region lấy thông tin var userFullcode = row["UserFullCode"].ToString().TrimStart().TrimEnd().ToLower(); //var arrRows = tableTatCaNV.Select("UserFullCode = '" +userFullcode + "'","", DataViewRowState.CurrentRows); var resultRow = (tableTatCaNV.Rows.Cast <DataRow>().Where( dataRow => dataRow["UserFullCode"].ToString().TrimStart().TrimEnd().ToLower() == userFullcode)).SingleOrDefault(); if (resultRow == null) { continue; } var tenNV = resultRow["UserFullName"].ToString(); var UserEnrollNumber = (int)resultRow["UserEnrollNumber"]; var luongdieuchinh = (double)row["LuongDieuChinh"]; var tamung = (double)row["TamUng"]; var thuchikhac = (double)row["ThuChiKhac"]; var mucdongbhxhDouble = (double)row["MucDongBHXH"]; var mucdongbhxhFloat = Convert.ToSingle(mucdongbhxhDouble); #endregion var kq = DAO5.CapnhatThuchiThang(UserEnrollNumber, thang, luongdieuchinh, tamung, thuchikhac, mucdongbhxhFloat); #region báo lỗi nếu ko cập nhật được if (kq == 0) { flagError = true; ACMessageBox.Show(string.Format("Xảy ra lỗi trong quá trình cập nhật tại vị trí nhân viên {0}, mã {1}.\nVui lòng thử lại.", tenNV, userFullcode), "Lỗi", 3000); break; } #endregion } if (flagError == false) { ACMessageBox.Show("Thực hiện thành công.", "Thông báo", 2000); } } }
private void btnXuatBB_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; } //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 dtpNgay.Update(); DateTime ngayBD = dtpNgay.Value.Date; ngayBD = ngayBD.AddDays(-2d); DateTime ngayKT = ngayBD.AddDays(4d); #endregion // lấy dsnv tất cả nv thuộc các phòng ban được chọn DataTable table = DAL.LayDSNV(m_listIDPhongBan.ToArray()); if (table.Rows.Count == 0) { return; } m_DSNV.Clear(); XL.KhoiTaoDSNV(m_DSNV, table); //3. lấy dữ liệu chấm công của các nhân viên //[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 if (XL.KiemtraDulieuCapnhatTuServer(DateTime.Now) == false) { AutoClosingMessageBox.Show("Dữ liệu chấm công chưa được cập nhật mới nhất từ các máy chấm công.\nCác thay đổi giờ chấm công có thể làm sai sót giờ chấm công thực tế khi dữ liệu được cập nhật.", "Thông báo", 4000); } int SoNVDangLamViec = 0, SoNVDaRaVe = 0, SoNVVang = 0; //dsnv = XL.XemCong(table, ArrDSMaCC_Checked, ngayBD, ngayKT); XL.DiemDanh(m_DSNV, ngayBD, ngayKT); m_CTDiemDanh.Rows.Clear(); XL.TaoTableDiemDanh(m_DSNV, m_CTDiemDanh, out SoNVDangLamViec, out SoNVDaRaVe, out SoNVVang); saveFileDlgDiemDanh.Filter = "Excel File|*.xlsx"; saveFileDlgDiemDanh.ShowDialog(); if (saveFileDlgDiemDanh.FileName == String.Empty) { return; } var saveFileName = saveFileDlgDiemDanh.FileName; using (var p = new ExcelPackage()) { #region Ghi file , nếu xảy ra lỗi thì báo XuatBBDSNVDLV(p); XuatBBDSNVVang(p); Byte[] bin = p.GetAsByteArray(); try { File.WriteAllBytes(saveFileName, bin); //(file_path, bin); AutoClosingMessageBox.Show("Xuất báo biểu thành công.", "Thông báo", 2000); } catch (Exception exception) { lg.Error("XuatBBDiemDanh", exception); if (exception is UnauthorizedAccessException) { MessageBox.Show("Bạn chưa được cấp quyền ghi file vào folder.", "Lỗi"); } else if (exception is DirectoryNotFoundException) { MessageBox.Show("Không tìm thấy folder lưu trữ.", "Lỗi"); } else if (exception is IOException) { MessageBox.Show("File đang mở bởi ứng dụng khác.", "Lỗi"); } else { MessageBox.Show("Không thể ghi được file báo biểu.", "Lỗi"); } } #endregion } }
private void XuatBBChamCong(object sender, WaitWindowEventArgs e) { string filePath = e.Arguments[0].ToString(); string tenNVLapBieu = e.Arguments[1].ToString(); string tenTrgBP = e.Arguments[2].ToString(); DateTime thang = (DateTime)e.Arguments[3]; List <cPhongBan> dsphongban = (List <cPhongBan>)e.Arguments[4]; var tongCongKoTinhCV = 0f; var congTinhLuong = 0f; var congKOtinhLuong = 0f; try //general try catch { List <WarningMessage> warningMessages = new List <WarningMessage>(); #region lấy thông tin từ csdl và khỏi tạo nv DateTime ngaydauthang = MyUtility.FirstDayOfMonth(dtpThang.Value), ngaycuoithang = MyUtility.LastDayOfMonth(dtpThang.Value); var tableKetcongNgay = DAO.LayKetcongNgay(ngaydauthang, ngaycuoithang); var tableKetcongCa = DAO.LayKetcongCa(ngaydauthang, ngaycuoithang); var tableXPVang = DAO.LayTableXPVang(ngaydauthang, ngaycuoithang); var tableNgayLe = DAO.DocNgayLe(ngaydauthang, ngaycuoithang); var tableDSNVChiCongnhatThang = DAO.LayTableCongNhat(ngaydauthang); var dsnv = new List <cUserInfo>(); XL.KhoiTaoDSNV_ChamCong(dsnv, (from p in dsphongban select p.ID).ToList(), dsphongban); // khởi tạo tất cả nhân viên tính công, bao gồm cả công nhật ngày(nv chính thức) và công nhật tháng /* * List<cPhongBan> dsphongban = new List<cPhongBan>(); * // đưa về root node trước khi thực hiện * var root = treePhongBan.TopNode; * GetTopLevelNode(ref root);// mỗi lần duyệt node sẽ làm root node chuyển về parent của node cuối nên phải trả về node gốc để duyệt từ đầu * while (root.PrevNode != null) root = root.PrevNode; * GetNode_DuocThaotac_CheckKetcong(root, dsphongban); */ #endregion // xác định công chuẩn của tháng var congChuanThang = XL.TinhCongChuanCuaThang(ngaydauthang); #region //load cong phu cap tung ngay cho tat ca nv, ke ca cong nhat, rieng truong hop cong nhat se xu ly ngay ben duoi try { foreach (var nv in dsnv) { nv.ThongKeThang = new ThongKeCong_PC(); nv.DSNgayCong = new List <cNgayCong>(); nv.DSVang = new List <cLoaiVang>(); for (DateTime indexNgay = ngaydauthang; indexNgay <= ngaycuoithang; indexNgay = indexNgay.AddDays(1d)) { XL.LoadNgayCong(nv.MaCC, nv.DSNgayCong, indexNgay, tableKetcongNgay, tableKetcongCa); } //load ds xp vắng //XL.LoadDSXPVang(nv.MaCC, nv.DSNgayCong, tableXPVang); //XL.LoadNgayLe(nv.DSNgayCong, tableNgayLe); XL.LoadDSXPVang_Le(nv.MaCC, tableXPVang, tableNgayLe, nv.DSVang); //info trường hợp nhân viên công nhật sẽ được xử lý bên dưới XL.PhanPhoi_DSVang7(nv.DSVang, nv.DSNgayCong); XL.LoadThongtinLamViecCongNhat(nv.MaCC, ref nv.NgayBDCongnhat, ref nv.NgayKTCongnhat, ref nv.LoaiCN, nv.DSNgayCong, tableDSNVChiCongnhatThang); } var soNgayChuNhat = XL.DemSoNgayNghiChunhat(ngaydauthang, true, false); var soNgayThu7 = XL.DemSoNgayNghiChunhat(ngaydauthang, false, true); //v 4.0.0.1 int soNgayChamCongx2 = 0, soNgayNghiAnhHuongCongx2 = 0; foreach (var nv in dsnv) { XL.ThongKeThang(ref nv.ThongKeThang, nv.DSNgayCong, nv.NgayBDCongnhat, nv.NgayKTCongnhat, nv.LoaiCN, out soNgayChamCongx2, out soNgayNghiAnhHuongCongx2); // tính công chờ việc: 1.nv công nhật ko cv. 2. nv mới chính thức thì chỉ giữ công cv khai báo if (nv.LoaiCN == LoaiCongNhat.NVCongNhat) // nhân viên làm công nhật, công cv tự động, khai báo = 0 { nv.ThongKeThang.CongCV_Auto = 0f; nv.ThongKeThang.CongCV_KB = 0f; } else { if (nv.LoaiCN == LoaiCongNhat.NVChinhThuc) // nhân viên chính thức { congTinhLuong = (nv.ThongKeThang.TongNgayLV4008 + nv.ThongKeThang.Phep + nv.ThongKeThang.Le //ver4.0.0.8 + nv.ThongKeThang.H_CT_PT); congKOtinhLuong = nv.ThongKeThang.TongTruCongTreVR + nv.ThongKeThang.TongTruCongSomVR + nv.ThongKeThang.TreSom_KoDuBuCong + nv.ThongKeThang.BHXH + nv.ThongKeThang.PTDT + nv.ThongKeThang.NghiRo; //ko có nv.ThongKeThang.CongCV_KB tongCongKoTinhCV = congTinhLuong + congKOtinhLuong; /* * tongCongKoTinhCV = (nv.ThongKeThang.TongNgayLV4008 + nv.ThongKeThang.TongTruCongTreVR+nv.ThongKeThang.TongTruCongSomVR + nv.ThongKeThang.TreSom_KoDuBuCong + nv.ThongKeThang.Phep + nv.ThongKeThang.Le //ver4.0.0.8 + nv.ThongKeThang.BHXH + nv.ThongKeThang.H_CT_PT + nv.ThongKeThang.PTDT + nv.ThongKeThang.NghiRo + nv.ThongKeThang.CongCV_KB);//DANGLAM */ nv.ThongKeThang.CongCV_Auto = congChuanThang - tongCongKoTinhCV; if (nv.ThongKeThang.CongCV_Auto < 0f) { nv.ThongKeThang.CongCV_Auto = 0f; } } else // nhân viên chính thức vừa công nhật thì công cv_auto =0, công cv khai báo ko đổi { nv.ThongKeThang.CongCV_Auto = 0f; } } nv.ThongKeThang.CongCV = nv.ThongKeThang.CongCV_Auto + nv.ThongKeThang.CongCV_KB; if (XL.KiemTraDieuKienCongCVAuto_VuotNguong(nv.ThongKeThang.CongCV_Auto, soNgayThu7, soNgayChuNhat)) { warningMessages.Add( new WarningMessage { MaCC = nv.MaCC, MaNV = nv.MaNV, TenNV = nv.TenNV, NoiDung = string.Format( "Có số công chờ việc được tính tự động [{0}] công theo quy định vượt quá [{1}] ngày thứ Bảy trong tháng.", nv.ThongKeThang.CongCV_Auto.ToString("#0.0#"), soNgayThu7) }); } if (XL.KiemTraDieuKienChamCongx2(congChuanThang, congTinhLuong, soNgayChuNhat, soNgayChamCongx2, soNgayNghiAnhHuongCongx2) == 1) { warningMessages.Add( new WarningMessage { MaCC = nv.MaCC, MaNV = nv.MaNV, TenNV = nv.TenNV, NoiDung = string.Format( "Chấm công làm việc ngày nghỉ hàng tuần chưa đúng quy định ([{0}] ngày nghỉ >= [{1}] ngày chủ nhật).", soNgayNghiAnhHuongCongx2, soNgayChuNhat) }); } else if (XL.KiemTraDieuKienChamCongx2(congChuanThang, congTinhLuong, soNgayChuNhat, soNgayChamCongx2, soNgayNghiAnhHuongCongx2) == 2) { warningMessages.Add( new WarningMessage { MaCC = nv.MaCC, MaNV = nv.MaNV, TenNV = nv.TenNV, NoiDung = string.Format( "Chấm công làm việc ngày nghỉ hàng tuần chưa đúng quy định ([{0}] ngày chấm công làm việc ngày nghỉ hàng tuần + [{1}] ngày nghỉ > [{2}] ngày chủ nhật).", soNgayChamCongx2, soNgayNghiAnhHuongCongx2, soNgayChuNhat) }); } else if (XL.KiemTraDieuKienChamCongx2(congChuanThang, congTinhLuong, soNgayChuNhat, soNgayChamCongx2, soNgayNghiAnhHuongCongx2) == 3) { warningMessages.Add( new WarningMessage { MaCC = nv.MaCC, MaNV = nv.MaNV, TenNV = nv.TenNV, NoiDung = string.Format( "Nhân viên có [{0}] công làm việc vượt [{1}] ngày công chuẩn của tháng.", congTinhLuong.ToString("#0.0#"), congChuanThang.ToString("")) }); } } } catch (Exception ex) { lg.Error(string.Format("[{0}]_[{1}]\n", this.Name, System.Reflection.MethodBase.GetCurrentMethod().Name), ex); } #endregion using (var p = new ExcelPackage()) { //2. xuat bb bang ket cong thang #region ghi sheet bang ket cong thang trinh ky p.Workbook.Worksheets.Add("BangKetCong"); var ws = p.Workbook.Worksheets["BangKetCong"]; ws.Name = "BangKetCong"; //Setting Sheet's name XL.ExportSheetBangKetcongThang(ws, MyUtility.FirstDayOfMonth(dtpThang.Value), MyUtility.LastDayOfMonth(dtpThang.Value), dsnv, tenNVLapBieu, tenTrgBP, XL2.PC30, XL2.PC50, XL2.PCTCC3, XL2.PC100, XL2.PC160, XL2.PC200, XL2.PC290); //info dsnv kết công bộ phận gồm cả nv công nhật, chính thức, vừa chính thức vừa công nhật khác với bảng lương #endregion //3. xuat bb chi tiết kết công #region ghi sheet chi tiết kết công p.Workbook.Worksheets.Add("ChiTietKetCong"); ws = p.Workbook.Worksheets["ChiTietKetCong"]; ws.Name = "ChiTietKetCong"; //Setting Sheet's name XL.ExportSheetBangChiTietKetCong(ws, MyUtility.FirstDayOfMonth(dtpThang.Value), MyUtility.LastDayOfMonth(dtpThang.Value), dsnv, XL2.PC30, XL2.PC50, XL2.PCTCC3, XL2.PC100, XL2.PC160, XL2.PC200, XL2.PC290); #endregion //4. xuất bb lưu ý nếu có if (warningMessages.Count > 0) { p.Workbook.Worksheets.Add("LUUY"); ws = p.Workbook.Worksheets["LUUY"]; ws.Name = "LuuY"; //Setting Sheet's name ws.Cells.Style.Font.Name = "Times New Roman"; ws.Cells.Style.Font.Size = 12; int top = 1, left = 1; int ir = top, ic = left; XL.FormatCell_T(ws, ref ir, ref ic, "Mã NV", plusCol: 1); XL.FormatCell_T(ws, ref ir, ref ic, "Tên NV", plusCol: 1); XL.FormatCell_T(ws, ref ir, ref ic, "Nội dung lưu ý", plusCol: 1, plusRow: 1); foreach (WarningMessage message in warningMessages) { ic = left; XL.FormatCell_W(ws, ref ir, ref ic, message.MaNV, colWidth: (int)L.MANV, plusCol: 1); XL.FormatCell_W(ws, ref ir, ref ic, message.TenNV, colWidth: (int)L.HOTEN, plusCol: 1); XL.FormatCell_W(ws, ref ir, ref ic, message.NoiDung, colWidth: 60, plusCol: 1, plusRow: 1); } } Byte[] bytes = p.GetAsByteArray(); XL.XuatFileExcel(filePath, bytes, "frm_KetCongBoPhan XuatBBChamCong "); } if (warningMessages.Count > 0) { MessageBox.Show("Vui lòng xem lại các cảnh báo của quá trình kết công trong sheet lưu ý.", Resources.Caption_ThongBao); } } catch (Exception ex) //general try catch { lg.Error(string.Format("[{0}]_[{1}]\n", this.Name, System.Reflection.MethodBase.GetCurrentMethod().Name), ex); MessageBox.Show(Resources.Text_CoLoi, Resources.Caption_Loi); } }
private void Fill_NV_Cong_cell(List <cUserInfo> lstNV, ExcelWorksheet sheet, int startRow, int startCol, ref int iLastRow, ref int iLastCol) { int iNV, iRow, iCol, iNgay; string content = string.Empty; sheet.Cells[startRow - 2, startCol].Value = "STT"; sheet.Cells[startRow - 2, startCol].Style.WrapText = true; sheet.Cells[startRow - 2, startCol, startRow - 1, startCol].Merge = true; sheet.Cells[startRow - 2, startCol, startRow - 1, startCol].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); sheet.Cells[startRow - 2, startCol + 1].Value = "Họ tên"; sheet.Cells[startRow - 2, startCol + 1].Style.WrapText = true; sheet.Cells[startRow - 2, startCol + 1, startRow - 1, startCol + 1].Merge = true; sheet.Cells[startRow - 2, startCol + 1, startRow - 1, startCol + 1].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); sheet.Cells[startRow - 2, startCol + 2].Value = "Mã CC"; sheet.Cells[startRow - 2, startCol + 2].Style.WrapText = true; sheet.Cells[startRow - 2, startCol + 2, startRow - 1, startCol + 2].Merge = true; sheet.Cells[startRow - 2, startCol + 2, startRow - 1, startCol + 2].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); for (iNV = 0, iRow = startRow; iNV < lstNV.Count; iNV++, iRow++) { cUserInfo nhanvien = lstNV[iNV]; XL.ThongKe(nhanvien); #region stt, ten, ma sheet.Cells[iRow, startCol].Value = iNV + 1; sheet.Cells[iRow, startCol].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); sheet.Cells[iRow, startCol + 1].Value = nhanvien.UserFullName; //Ten sheet.Cells[iRow, startCol + 1].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); //Ten sheet.Cells[iRow, startCol + 2].Value = nhanvien.UserEnrollNumber; //MaCC sheet.Cells[iRow, startCol + 2].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); //MaCC #endregion for (iNgay = 1, iCol = startCol + 3; iNgay < nhanvien.DSNgayCong.Count - 1; iNgay++, iCol += 2) { cNgayCong ngayCong = nhanvien.DSNgayCong[iNgay]; if (iNV == 0) { sheet.Cells[startRow - 2, iCol].Value = ngayCong.NgayCong.Date.ToString("d "); sheet.Cells[startRow - 2, iCol, startRow - 2, iCol + 1].Merge = true; sheet.Cells[startRow - 2, iCol, startRow - 2, iCol + 1].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); sheet.Cells[startRow - 1, iCol].Value = ngayCong.NgayCong.ToString("ddd"); sheet.Cells[startRow - 1, iCol, startRow - 1, iCol + 1].Merge = true; sheet.Cells[startRow - 1, iCol, startRow - 1, iCol + 1].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); } content = (ngayCong.TongCong == 0d) ? "--" : ngayCong.TongCong.ToString("#0.##"); sheet.Cells[iRow, iCol].Value = content; sheet.Cells[iRow, iCol].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); content = (ngayCong.TongPhuCap == 0d) ? "--" : ngayCong.TongPhuCap.ToString("#0.##"); sheet.Cells[iRow, iCol + 1].Value = content; sheet.Cells[iRow, iCol + 1].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); } #region thống kê sheet.Cells[iRow, iCol].Value = nhanvien.TongCongThang.ToString("#0.##"); // tổng công tháng sheet.Cells[iRow, iCol].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); sheet.Cells[iRow, iCol + 1].Value = nhanvien.TongPCapThang.ToString("#0.##"); // tổng PC tháng sheet.Cells[iRow, iCol + 1].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); sheet.Cells[iRow, iCol + 2].Value = nhanvien.TongCongH_CT_PT; // tổng HHPT sheet.Cells[iRow, iCol + 2].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); sheet.Cells[iRow, iCol + 3].Value = nhanvien.TongCongPhep; // tổng phép sheet.Cells[iRow, iCol + 3].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); sheet.Cells[iRow, iCol + 4].Value = nhanvien.TongCongBH; // tổng BH sheet.Cells[iRow, iCol + 4].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); sheet.Cells[iRow, iCol + 5].Value = nhanvien.TongCongRo; // tổng RO sheet.Cells[iRow, iCol + 5].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); sheet.Cells[iRow, iCol + 6].Value = nhanvien.TongCongCV; // tổng CV sheet.Cells[iRow, iCol + 6].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); #endregion iLastRow = iRow; iLastCol = iCol + 7; } #region các cột thống kê sheet.Cells[startRow - 2, iLastCol - 7, startRow - 1, iLastCol - 7].Value = "T.công"; sheet.Cells[startRow - 2, iLastCol - 7, startRow - 1, iLastCol - 7].Merge = true; sheet.Cells[startRow - 2, iLastCol - 7, startRow - 1, iLastCol - 7].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); sheet.Cells[startRow - 2, iLastCol - 6, startRow - 1, iLastCol - 6].Value = "T.PC"; sheet.Cells[startRow - 2, iLastCol - 6, startRow - 1, iLastCol - 6].Merge = true; sheet.Cells[startRow - 2, iLastCol - 6, startRow - 1, iLastCol - 6].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); sheet.Cells[startRow - 2, iLastCol - 5, startRow - 1, iLastCol - 5].Value = "H,PT"; sheet.Cells[startRow - 2, iLastCol - 5, startRow - 1, iLastCol - 5].Merge = true; sheet.Cells[startRow - 2, iLastCol - 5, startRow - 1, iLastCol - 5].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); sheet.Cells[startRow - 2, iLastCol - 4, startRow - 1, iLastCol - 4].Value = "P"; sheet.Cells[startRow - 2, iLastCol - 4, startRow - 1, iLastCol - 4].Merge = true; sheet.Cells[startRow - 2, iLastCol - 4, startRow - 1, iLastCol - 4].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); sheet.Cells[startRow - 2, iLastCol - 3, startRow - 1, iLastCol - 3].Value = "BH"; sheet.Cells[startRow - 2, iLastCol - 3, startRow - 1, iLastCol - 3].Merge = true; sheet.Cells[startRow - 2, iLastCol - 3, startRow - 1, iLastCol - 3].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); sheet.Cells[startRow - 2, iLastCol - 2, startRow - 1, iLastCol - 2].Value = "Ro"; sheet.Cells[startRow - 2, iLastCol - 2, startRow - 1, iLastCol - 2].Merge = true; sheet.Cells[startRow - 2, iLastCol - 2, startRow - 1, iLastCol - 2].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); sheet.Cells[startRow - 2, iLastCol - 1, startRow - 1, iLastCol - 1].Value = "CV"; sheet.Cells[startRow - 2, iLastCol - 1, startRow - 1, iLastCol - 1].Merge = true; sheet.Cells[startRow - 2, iLastCol - 1, startRow - 1, iLastCol - 1].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.Black); #endregion ExcelColumn excelColumn; sheet.Column(1).Width = 4; sheet.Column(2).Width = 18; sheet.Column(3).Width = 5; for (int i = startCol + 3; i < iLastCol - 7; i++) { excelColumn = sheet.Column(i); excelColumn.Width = 3; } for (int i = iLastCol - 7; i < iLastCol; i++) { excelColumn = sheet.Column(i); excelColumn.Width = 4.75; } }