public void ArrayRowsToDSChamCongTay(DataRow[] arrRow) { if (arrRow.Length == 0) { return; } object[,] ds = new object[arrRow.Length, 4]; int i1 = 0, i2 = 0; foreach (DataRow row in arrRow) { ds[i2, 0] = row["UserEnrollNumber"]; ds[i2, 1] = row["Ngay"]; ds[i2, 2] = row["Cong"]; ds[i2, 3] = row["PhuCap"]; i2++; } for (i1 = 0; i1 < DSNgayCong.Count; i1++) { cNgayCong ngayCong = DSNgayCong[i1]; if ((DateTime)ds[i2, 1] == ngayCong.NgayCong) { ngayCong.TongCong += (Single)ds[i2, 2]; ngayCong.TongPhuCap += (Single)ds[i2, 3]; i2++; if (i2 >= arrRow.Length) { break; } } } }
public void ArrayRowsToDSVang(DataRow[] arrRow) { if (arrRow.Length == 0) { return; } List <cLoaiVang> dsvang = new List <cLoaiVang>(); foreach (DataRow row in arrRow) { int iuen = (int)row["UserEnrollNumber"]; DateTime TimeDate = (DateTime)row["TimeDate"]; string absentCode = (string)row["AbsentCode"]; string absentsymbol = (string)row["AbsentSymbol"]; string absentDesc = (string)row["AbsentDescription"]; Single wkdayy = (Single)row["Workingday"]; Single wktime = (Single)row["WorkingTime"]; cLoaiVang loaiVang = new cLoaiVang() { KyHieu = absentsymbol, Cong = wkdayy, MaLV = absentCode, MoTa = absentDesc, Ngay = TimeDate }; // xác định ngày vắng, nếu ko tìm thấy thì continue, nếu tìm thấy thì add cNgayCong ngayCong = DSNgayCong.Find(o => o.NgayCong == loaiVang.Ngay); if (ngayCong == null) { continue; // ko tìm thấy } // tìm thấy: add if (ngayCong.DSVang == null) { ngayCong.DSVang = new List <cLoaiVang>(); } ngayCong.DSVang.Add(loaiVang); } }
public void ArrayRowsToDSLamViecNgayNghi(DataRow[] arrRow_DSLamViecNgayNghi) { if (arrRow_DSLamViecNgayNghi.Length == 0) { return; } foreach (DataRow row in arrRow_DSLamViecNgayNghi) { DateTime ngaynghi = (DateTime)row["Ngay"]; Single PCThem = (Single)row["PCThem"]; Single PCDem = (Single)row["PCDem"]; cNgayCong ngayCong = DSNgayCong.Find(o => o.NgayCong.Date == ngaynghi); ngayCong.PhuCap50 = ngayCong.TongCong * PCThem + ngayCong.PhuCap30 * PCDem; ngayCong.TongPhuCap = ngayCong.PhuCap30 + ngayCong.PhuCap50; } }
internal void KBNgayLe(DataTable tableNgayLe) { // duyệt từng ngày lễ nếu có, 1. thêm vào danh sách loại vắng 2. tính công nếu trưởng phó thì ko tính pc lễ, 3. nếu bộ phận khác thì tính double foreach (DataRow row in tableNgayLe.Rows) { DateTime ngayle = (DateTime)row["HDate"]; string mota = row["Holiday"].ToString(); // xác định ngày công nào là ngày lễ cNgayCong ngayCong = DSNgayCong.Find(o => o.NgayCong.Date == ngayle); //thêm vào danh sách vắng if (ngayCong.DSVang == null) { ngayCong.DSVang = new List <cLoaiVang>(); } cLoaiVang loaiVang = new cLoaiVang { Cong = 1f, KyHieu = "L", MaLV = "L", MoTa = mota, Ngay = ngayle }; ngayCong.DSVang.Add(loaiVang); } }
public List <cNgayCong> TinhCongTheoNgay(List <cChkInOut> pDSVaoRa, DateTime ngayBD, DateTime ngayKT, int UserEnrollNumber) { log.Debug("UserEnrollNumber " + UserEnrollNumber); 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(1.0d); } 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(1.0d); } //ngaydem = ngày có mặt. stop, tmpVaoRa là vào ra đầu tiên trong ngày #region collapse cNgayCong ngayCOcheck = new cNgayCong() { HasCheck = true, NgayCong = ngayCoMat, TinhPC150 = true, TinhPC200 = false,// 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% TongGioLam = CIO.TGLamTinhCong, TongGioLamDem = CIO.TGLamDem, TongGioThuc = CIO.TongGioThuc, TongTre = CIO.VaoTre, TongSom = CIO.RaaSom, TongCong = CIO.Cong, PhuCapDem = ((CIO.TGLamDem.TotalHours > 0f) ? ((float)(CIO.TGLamDem.TotalHours / 8f) * 0.3f) : 0f) // 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 (ngayCOcheck.TinhPC150) { if (CIO.TinhPC150 == false) { ngayCOcheck.TinhPC150 = false; } if (ngayCOcheck.TinhPC150) { ngayCOcheck.PhuCapThem = (((CIO.TGLamTinhCong.TotalHours > 8f) ? ((((float)CIO.TGLamTinhCong.TotalHours - 8f) / 8f) * 0.5f) : 0f)); } else { ngayCOcheck.PhuCapThem = 0f; } } else { ngayCOcheck.PhuCapThem = 0f; } ngayCOcheck.TongPhuCap = ngayCOcheck.PhuCapDem + ngayCOcheck.PhuCapThem; 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.TongGioLam += CIO_1.TGLamTinhCong; ngayCOcheck.TongGioLamDem += CIO_1.TGLamDem; ngayCOcheck.TongTre += CIO_1.VaoTre; ngayCOcheck.TongSom += CIO_1.RaaSom; ngayCOcheck.TongCong += CIO_1.Cong; ngayCOcheck.PhuCapDem = ((ngayCOcheck.TongGioLamDem.TotalHours > 0f) ? ((float)(ngayCOcheck.TongGioLamDem.TotalHours / 8f) * 0.3f) : 0f); #endregion if (CIO_1.QuaDem == true) { ngayCOcheck.QuaDem = true; // set qua đêm nếu có } if (ngayCOcheck.TinhPC150) { if (CIO.TinhPC150 == false) { ngayCOcheck.TinhPC150 = false; } if (ngayCOcheck.TinhPC150) { ngayCOcheck.PhuCapThem = (((ngayCOcheck.TongGioLam.TotalHours > 8f) ? ((((float)ngayCOcheck.TongGioLam.TotalHours - 8f) / 8f) * 0.5f) : 0f)); } else { ngayCOcheck.PhuCapThem = 0f; } } else { ngayCOcheck.PhuCapThem = 0f; } ngayCOcheck.TongPhuCap = ngayCOcheck.PhuCapDem + ngayCOcheck.PhuCapThem; 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(1.0d); } } else { kq.Add(ngayCOcheck); ngaydem = ngaydem.AddDays(1.0d); } } return(kq); }
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); }