public void SubmitStatus(List <Guid> selectedIds, string status) { using (var context = new VnrHrmDataContext()) { var unitOfWork = (IUnitOfWork)(new UnitOfWork(context)); var repo = new Can_MealRecordMissingRepository(unitOfWork); var lstMealRecordMissing = repo.FindBy(m => m.ID != null && selectedIds.Contains(m.ID)).ToList(); foreach (var mealRecordMissing in lstMealRecordMissing) { mealRecordMissing.Status = status; repo.SaveChanges(); } } }
public void ComputeMealRecordMissing(List<Guid> lstProfileIds, DateTime dateFrom, DateTime dateToSearch, List<Guid> TamScanReasonMissID, string Status, List<Guid?> lstAllowanceTypeIDs) { List<Can_MealRecordMissingEntity> lstMealRecord = new List<Can_MealRecordMissingEntity>(); using (var context = new VnrHrmDataContext()) { DateTime dateTo = DateTime.Now; if (dateToSearch != null && dateToSearch != SqlDateTime.MaxValue.Value) { dateTo = dateToSearch.AddDays(1).AddMinutes(-1); } if(lstProfileIds == null) { return; } var unitOfWork = (IUnitOfWork)(new UnitOfWork(context)); var repoProfile = new Hre_ProfileRepository(unitOfWork); string statusAllowance = StatusMealAllowanceToMoney.E_APPROVED.ToString(); var repoMealAllowance = new Can_MealAllowanceToMoneyRepository(unitOfWork); var mealAllowanceProfies = repoMealAllowance.FindBy(s => s.Status == statusAllowance && dateFrom <= s.DateTo && s.DateFrom <= dateTo) .Select(s => new { s.ProfileID, s.MealAllowanceTypeID, s.DateFrom, s.DateTo }).ToList(); var repoMissReason = new Cat_TAMScanReasonMissRepository(unitOfWork); var resons = repoMissReason.FindBy(s => s.IsForCMS == true).Select(s => new { s.ID, s.IsFullPay }).ToList(); var repoWorkday = new Att_WorkDayRepository(unitOfWork); var workDays = repoWorkday.FindBy(s => (s.FirstInTime != null || s.LastOutTime != null) && dateFrom <= s.WorkDate && s.WorkDate <= dateTo && lstProfileIds.Contains(s.ProfileID)) .Select(s => new { s.ProfileID, s.WorkDate, s.MissInOutReason, s.Status, s.FirstInTime, s.LastOutTime }).ToList(); var repoMealRecord = new Can_MealRecordRepository(unitOfWork); var mealRecordProfiles = repoMealRecord.FindBy(s => s.WorkDay != null && s.ProfileID != null && dateFrom <= s.WorkDay && s.WorkDay <= dateTo && lstProfileIds.Contains(s.ProfileID.Value)) .Select(s => new { s.ProfileID, s.TimeLog, s.WorkDay }).ToList(); var statusLeaveDay = AttendanceDataStatus.E_APPROVED.ToString(); var repoLeaveDay = new Att_LeavedayRepository(unitOfWork); var leaveDayProfiles = repoLeaveDay.FindBy(s => s.Status == statusLeaveDay && dateFrom <= s.DateEnd && s.DateStart <= dateTo) .Select(s => new { s.ProfileID, s.DateStart, s.DateEnd }).ToList(); var tamSanResons = repoMissReason.GetAll().ToList(); var repoMealAllowanceTypeSettings = new Can_MealAllowanceTypeSettingRepository(unitOfWork); var mealSesttings = repoMealAllowanceTypeSettings.GetAll().Select(s => new { s.ID, s.Amount, s.MealAllowanceTypeSettingName }).ToList(); if (TamScanReasonMissID != null && TamScanReasonMissID[0] != Guid.Empty) { workDays = workDays.Where(s => s.MissInOutReason != null && TamScanReasonMissID.Contains(s.MissInOutReason.Value)).ToList(); } if (Status != null) { workDays = workDays.Where(s => s.Status != null && Status == s.Status).ToList(); } var repoRecordMissing = new Can_MealRecordMissingRepository(unitOfWork); List<Can_MealRecordMissing> mealRecordMissings = repoRecordMissing.FindBy(s => dateFrom <= s.WorkDate && s.WorkDate <= dateTo && s.ProfileID != null && lstProfileIds.Contains(s.ProfileID.Value)).ToList(); var workDayProfies = repoWorkday.FindBy(s => (s.InTime1 != null || s.OutTime1 != null) && dateFrom <= s.WorkDate && s.WorkDate <= dateTo && lstProfileIds.Contains(s.ProfileID)).Select(s => new { s.ProfileID, s.WorkDate, s.ShiftID }).ToList(); var profileIDs = workDayProfies.Select(s => s.ProfileID).Distinct().ToList(); var lstmeal = new List<Can_MealRecordMissing>(); foreach (var profileID in profileIDs) { for (DateTime date = dateFrom; date <= dateTo; date = date.AddDays(1)) { var recordProfileIDs = mealRecordProfiles.Where(s => s.WorkDay.Value.Date == date.Date && s.ProfileID == profileID).Select(s => s.ProfileID).ToList(); var leavedayProfileIDs = leaveDayProfiles.Where(s => s.DateStart != null && s.DateEnd != null && s.DateStart.Date <= date.Date && date.Date <= s.DateEnd.Date && s.ProfileID == profileID).Select(s => s.ProfileID).ToList(); var workDayProfiles = workDays.Where(s => s.WorkDate.Date == date.Date && s.ProfileID == profileID && !recordProfileIDs.Contains(s.ProfileID) && !leavedayProfileIDs.Contains(s.ProfileID)).ToList(); foreach (var workDay in workDayProfiles) { var meal = mealRecordMissings.FirstOrDefault(s => s.ProfileID == workDay.ProfileID && s.WorkDate.Value.Date == workDay.WorkDate.Date); if (meal == null) { meal = new Can_MealRecordMissing(); meal.ID = Guid.Empty; lstmeal.Add(meal); } meal.ProfileID = workDay.ProfileID; meal.WorkDate = workDay.WorkDate; if (meal.TamScanReasonMissID == Guid.Empty) { if (workDay.MissInOutReason != Guid.Empty) { meal.TamScanReasonMissID = workDay.MissInOutReason; var tamScan = tamSanResons.FirstOrDefault(s => s.ID == workDay.MissInOutReason); if (tamScan != null) { meal.MealAllowanceTypeSettingID = tamScan.MealAllowanceTypeSettingID; meal.TamScanReasonMissID = tamScan.ID; var messting = mealSesttings.FirstOrDefault(s => s.ID == tamScan.MealAllowanceTypeSettingID); if (messting != null) { meal.Amount = messting.Amount; } } } else { var allownce = mealAllowanceProfies.FirstOrDefault(s => s.ProfileID == workDay.ProfileID && s.DateFrom <= date && date <= s.DateTo); if (allownce != null) { meal.MealAllowanceTypeSettingID = allownce.MealAllowanceTypeID; var messting = mealSesttings.FirstOrDefault(s => s.ID == allownce.MealAllowanceTypeID); if (messting != null) { meal.Amount = messting.Amount; } } } } if (meal.MealAllowanceTypeSettingID != Guid.Empty) { meal.Status = MealRecord_Status.E_APPROVED.ToString(); } else { meal.Status = MealRecord_Status.E_SUBMIT.ToString(); } meal.Type = WorkdaySrcType.E_MANUAL.ToString(); if (workDay.FirstInTime == null && workDay.LastOutTime == null && workDay.MissInOutReason != Guid.Empty) { var tamSanReson = resons.FirstOrDefault(s => s.ID == workDay.MissInOutReason); if (tamSanReson != null) { meal.IsFullPay = tamSanReson.IsFullPay; } } } } } repoRecordMissing.Add(lstmeal); repoMissReason.SaveChanges(); } }
public void SubmitStatus(List<Guid> selectedIds, string status) { using (var context = new VnrHrmDataContext()) { var unitOfWork = (IUnitOfWork)(new UnitOfWork(context)); var repo = new Can_MealRecordMissingRepository(unitOfWork); var lstMealRecordMissing = repo.FindBy(m => m.ID != null && selectedIds.Contains(m.ID)).ToList(); foreach (var mealRecordMissing in lstMealRecordMissing) { mealRecordMissing.Status = status; repo.SaveChanges(); } } }
public bool SaveSumryMealRecord(Guid CutOffDurationID, List<Guid> lstProfileIDs) { using (var context = new VnrHrmDataContext()) { try { #region GetData List<Can_ReportAdjustmentMealAllowancePaymentEntity> lstReportAdjustmentMealAllowancePayment = new List<Can_ReportAdjustmentMealAllowancePaymentEntity>(); var unitOfWork = (IUnitOfWork)(new UnitOfWork(context)); var repoMealRecord = new Can_MealRecordRepository(unitOfWork); var cutoffdurationRepository = new Att_CutOffDurationRepository(unitOfWork); var Cutoffduration = cutoffdurationRepository.FindBy(m => m.ID == CutOffDurationID && m.IsDelete != true).FirstOrDefault(); DateTime DateFrom = new DateTime(); DateTime DateTo = new DateTime(); if (Cutoffduration != null) { DateFrom = Cutoffduration.DateStart; DateTo = Cutoffduration.DateEnd.AddDays(1).AddMilliseconds(-1); } var sumryMealRecordRepository = new Can_SumryMealRecordRepository(unitOfWork); var lstMealRecord = repoMealRecord.FindBy(m => m.WorkDay != null && m.WorkDay >= DateFrom && m.WorkDay <= DateTo && m.ProfileID != null) .Select(s => new { s.ProfileID, s.TimeLog, s.CanteenID, s.CateringID, s.LineID, s.Amount, s.MealAllowanceTypeID, s.NoWorkDay }).ToList(); if (lstMealRecord.Count < 0) { return true; } var status = StatusMealAllowanceToMoney.E_APPROVED.ToString(); #region Dư ko dùng //var repoAllowanceToMoney = new Can_MealAllowanceToMoneyRepository(unitOfWork); //var mealAllowncaToMoneyProfileIDs = repoAllowanceToMoney.FindBy(s => s.Status == status && s.ProfileID != null && DateFrom <= s.DateTo && s.DateFrom <= DateTo).ToList(); #endregion var lstProfileIdsByMeal = lstMealRecord.Select(s => s.ProfileID).Distinct().ToList(); var repoprofiles = new Hre_ProfileRepository(unitOfWork); var profiles = repoprofiles.FindBy(s => lstProfileIdsByMeal.Contains(s.ID)).Select(s => new { s.ID, s.DateQuit, s.OrgStructureID, s.ProfileName, s.CodeAttendance, s.CodeEmp, s.PositionID, s.JobTitleID }).ToList(); if (lstProfileIDs != null && lstProfileIDs.Count > 0) { profiles = profiles.Where(m => lstProfileIDs.Contains(m.ID)).ToList(); } var repomealAllowanceType = new Can_MealAllowanceTypeSettingRepository(unitOfWork); var mealAllowanceTypeSantandIDs = repomealAllowanceType.FindBy(s => s.Standard == true).Select(m => m.ID).ToList(); var mealAllowanceTypes = repomealAllowanceType.FindBy(s => s.IsDelete == null).ToList(); var amountStardand = repomealAllowanceType.FindBy(s => s.Standard == true && s.Amount != null).Select(s => s.Amount.Value).FirstOrDefault(); var repoLineHDTJob = new Can_LineRepository(unitOfWork); var lineHDTJobIDs = repoLineHDTJob.FindBy(s => s.HDTJ != null).Select(m => m.ID).ToList(); var repoHDTJob = new Hre_HDTJobRepository(unitOfWork); var profileHDTJs = repoHDTJob.FindBy(s => DateFrom <= s.DateTo && s.DateFrom <= DateTo) .Select(s => new { s.ProfileID, s.Type, s.DateFrom, s.DateTo }).ToList(); var profileHDTJIDs = profileHDTJs.Select(s => s.ProfileID).Distinct().ToList(); string approveKey = MealRecord_Status.E_APPROVED.ToString(); var repo_MealRecordMissing = new Can_MealRecordMissingRepository(unitOfWork); var mealRecordMissings = repo_MealRecordMissing.FindBy(s => s.Status == approveKey && DateFrom <= s.WorkDate && s.WorkDate <= DateTo) .Select(s => new { s.ProfileID, s.WorkDate, s.MealAllowanceTypeSettingID, s.TamScanReasonMissID, s.Amount }).ToList(); var repoWorkDay = new Att_WorkDayRepository(unitOfWork); var dateStart1 = DateFrom.AddDays(-1); var workDays = repoWorkDay.FindBy(s => dateStart1 <= s.WorkDate && s.WorkDate <= DateTo).Select(s => new { s.ProfileID, s.FirstInTime, s.LastOutTime, s.ShiftID, s.WorkDate }).ToList(); var workDayProfies = workDays.Where(s => s.FirstInTime != null || s.LastOutTime != null).ToList(); var repotamScan = new Cat_TAMScanReasonMissRepository(unitOfWork); var tamSans = repotamScan.GetAll().ToList(); var tamScanNotFullPayIDs = tamSans.Where(s => s.IsFullPay == null || s.IsFullPay == false).Select(s => s.ID).ToList(); var reposhift = new Cat_ShiftRepository(unitOfWork); var shifts = reposhift.GetAll().ToList(); var lines = new List<Can_Line>().ToList(); var repolines = new Can_LineRepository(unitOfWork); lines = repolines.GetAll().ToList(); var repoOrg = new Cat_OrgStructureRepository(unitOfWork); var orgs = repoOrg.GetAll().ToList(); var orgTypes = new List<Cat_OrgStructureType>(); var repoorgType = new Cat_OrgStructureTypeRepository(unitOfWork); orgTypes = repoorgType.FindBy(s => s.IsDelete == null).ToList<Cat_OrgStructureType>(); #endregion foreach (var profile in profiles) { var mealProfiles = lstMealRecord.Where(s => s.ProfileID == profile.ID).ToList(); #region Dư ko dùng //var mealAllownProfiles = mealAllowncaToMoneyProfileIDs.Where(s => s.ProfileID == profile.ID).ToList(); //var mealNotStardands = lstMealRecord.Where(s => s.ProfileID == profile.ID && s.Amount > amountStardand).ToList(); #endregion Can_ReportAdjustmentMealAllowancePaymentEntity ReportAdjustmentMealAllowancePayment = new Can_ReportAdjustmentMealAllowancePaymentEntity(); Guid? orgId = profile.OrgStructureID; var org = orgs.FirstOrDefault(s => s.ID == profile.OrgStructureID); var orgBranch = LibraryService.GetNearestParent(orgId, OrgUnit.E_DIVISION, orgs, orgTypes); var orgOrg = LibraryService.GetNearestParent(orgId, OrgUnit.E_DEPARTMENT, orgs, orgTypes); var orgTeam = LibraryService.GetNearestParent(orgId, OrgUnit.E_SECTION, orgs, orgTypes); var orgSection = LibraryService.GetNearestParent(orgId, OrgUnit.E_GROUP, orgs, orgTypes); ReportAdjustmentMealAllowancePayment.BranchName = orgBranch != null ? orgBranch.OrgStructureName : string.Empty; ReportAdjustmentMealAllowancePayment.DepartmentName = orgOrg != null ? orgOrg.OrgStructureName : string.Empty; ReportAdjustmentMealAllowancePayment.TeamName = orgTeam != null ? orgTeam.OrgStructureName : string.Empty; ReportAdjustmentMealAllowancePayment.SectionName = orgSection != null ? orgSection.OrgStructureName : string.Empty; ReportAdjustmentMealAllowancePayment.CodeEmp = profile.CodeEmp; ReportAdjustmentMealAllowancePayment.ProfileName = profile.ProfileName; ReportAdjustmentMealAllowancePayment.DateFrom = DateFrom; ReportAdjustmentMealAllowancePayment.DateTo = DateTo; ReportAdjustmentMealAllowancePayment.DatePrint = DateTime.Now; var countCard = 0; var sumCard = 0.0; int countCardMore1 = 0; var countNotWorkButHasEat = 0; var sumNotWorkButHasEat = 0.0; var countmealNotStardand = 0; var amountmealNotStardand = 0.0; var countHDTJ = 0; var amountHDTJ = 0.0; var countNotStandHDTJ = 0; var amountNotStandHDTJ = 0.0; int amount3OnMonth = 0; var workdayProfileDates = workDayProfies.Where(s => s.ProfileID == profile.ID).Select(s => s.WorkDate.Date).ToList(); for (DateTime date = DateFrom; date <= DateTo; date = date.AddDays(1)) { var workDay = workDays.FirstOrDefault(s => s.ProfileID == profile.ID && s.WorkDate.Date == date.Date); var shift = shifts.FirstOrDefault(s => workDay != null && s.ID == workDay.ShiftID); var missing = mealRecordMissings.FirstOrDefault(s => s.ProfileID == profile.ID && s.WorkDate.Value.Date == date.Date); if (missing != null) { if (missing.MealAllowanceTypeSettingID != null && missing.TamScanReasonMissID == null) { countCard++; sumCard += (double)(missing.Amount != null ? missing.Amount.Value : 0); } else if (missing.TamScanReasonMissID != null) { var tamscan = tamSans.FirstOrDefault(s => s.ID == missing.TamScanReasonMissID); if (tamscan != null) { if (tamscan.IsFullPay == true) { countCard++; sumCard += (double)amountStardand; } else { amount3OnMonth++; } } } } if (mealProfiles.Count(s => s.TimeLog != null && s.TimeLog.Value.Date == date.Date) > 1) { countCardMore1++; } var record = lstMealRecord.FirstOrDefault(s => s.TimeLog != null && s.LineID != null && !lineHDTJobIDs.Contains(s.LineID.Value) && s.ProfileID == profile.ID && date.Date == s.TimeLog.Value.Date && !workdayProfileDates.Contains(date.Date)); if (record != null) { countNotWorkButHasEat++; sumNotWorkButHasEat += (double)(record.Amount != null ? record.Amount.Value : 0); } var meal = lstMealRecord.FirstOrDefault(s => s.TimeLog != null && s.Amount > amountStardand && s.LineID != null && !lineHDTJobIDs.Contains(s.LineID.Value) && s.ProfileID == profile.ID && s.TimeLog.Value.Date == date.Date && workdayProfileDates.Contains(date.Date)); if (meal != null) { countmealNotStardand++; amountmealNotStardand += (double)(meal.Amount != null ? meal.Amount.Value : 0); } var mealHDT = lstMealRecord.FirstOrDefault(s => s.ProfileID == profile.ID && s.LineID != null && lineHDTJobIDs.Contains(s.LineID.Value) && s.TimeLog != null && s.TimeLog.Value.Date == date.Date && (!profileHDTJIDs.Contains(s.ProfileID.Value) || (profileHDTJIDs.Contains(s.ProfileID.Value) && !workdayProfileDates.Contains(date.Date)))); if (mealHDT != null) { countHDTJ++; amountHDTJ += (double)(mealHDT.Amount != null ? mealHDT.Amount.Value : 0); } var mealNotStandandHDT = lstMealRecord.FirstOrDefault(s => s.ProfileID != null && s.ProfileID == profile.ID && s.LineID != null && lineHDTJobIDs.Contains(s.LineID.Value) && s.TimeLog != null && s.TimeLog.Value.Date == date.Date && profileHDTJIDs.Contains(s.ProfileID.Value) && workdayProfileDates.Contains(date.Date)); if (mealNotStandandHDT != null && mealNotStandandHDT.LineID != null) { var line = lines.FirstOrDefault(s => s.ID == mealNotStandandHDT.LineID); var hdtjob = profileHDTJs.FirstOrDefault(s => s.Type != null && s.ProfileID == profile.ID && s.DateFrom.Value.Date <= date.Date && date.Date <= s.DateTo.Value.Date); if (line != null && line.HDTJ != null && hdtjob.Type != line.HDTJ) { var lineHDT = lines.FirstOrDefault(s => s.HDTJ == hdtjob.Type); if (lineHDT != null && lineHDT.Amount != null && lineHDT.Amount < line.Amount) { countNotStandHDTJ++; var lineAmount = line.Amount != null ? line.Amount.Value : 0; var lineAmountHDT = lineHDT.Amount != null ? lineHDT.Amount.Value : 0; amountNotStandHDTJ += (double)(lineAmount - lineAmountHDT); } } } double countMiss = mealRecordMissings.Count(s => s.ProfileID == profile.ID && s.TamScanReasonMissID != null && tamScanNotFullPayIDs.Contains(s.TamScanReasonMissID.Value)); countMiss = GetCountAmount((int)countMiss); if (countCard > 0) { ReportAdjustmentMealAllowancePayment.TotalMealAllowance = countCard + countMiss; } if (sumCard > 0) { ReportAdjustmentMealAllowancePayment.SumAmount = (double)(sumCard + countMiss * (double)amountStardand); } if (countmealNotStardand > 0) { ReportAdjustmentMealAllowancePayment.CountEatNotStandar = countmealNotStardand; ReportAdjustmentMealAllowancePayment.AmountEatNotStandar = amountmealNotStardand - (double)(amountStardand * countmealNotStardand); } if (countCardMore1 > 0) { ReportAdjustmentMealAllowancePayment.CountCardMore = countCardMore1; ReportAdjustmentMealAllowancePayment.SumCardMore = (double)Math.Round(countCardMore1 * amountStardand, 2); } if (countNotWorkButHasEat > 0) { ReportAdjustmentMealAllowancePayment.CountNotWorkHasEat = countNotWorkButHasEat; ReportAdjustmentMealAllowancePayment.AmountNotWorkHasEat = sumNotWorkButHasEat; } amount3OnMonth = amount3OnMonth - (int)GetCountAmount(amount3OnMonth); if (amount3OnMonth > 0) { ReportAdjustmentMealAllowancePayment.Amount3OnMonth = amount3OnMonth; } if (countHDTJ > 0) { ReportAdjustmentMealAllowancePayment.CountHDTJob = countHDTJ; ReportAdjustmentMealAllowancePayment.AmounSubtractHDTJob = amountHDTJ; } if (countNotStandHDTJ > 0) { ReportAdjustmentMealAllowancePayment.CountCardWorngStandar = countNotStandHDTJ; ReportAdjustmentMealAllowancePayment.AmountSubtractWorngStandar = amountNotStandHDTJ; } } Can_SumryMealRecord sumryMealRecordNew = new Can_SumryMealRecord(); sumryMealRecordNew.ProfileID = profile.ID; sumryMealRecordNew.DateFrom = Cutoffduration.DateStart; sumryMealRecordNew.DateTo = Cutoffduration.DateEnd; sumryMealRecordNew.TotalMealAllowance = ReportAdjustmentMealAllowancePayment.TotalMealAllowance; sumryMealRecordNew.SumAmount = ReportAdjustmentMealAllowancePayment.SumAmount; sumryMealRecordNew.CountEatNotStandar = ReportAdjustmentMealAllowancePayment.CountEatNotStandar; sumryMealRecordNew.AmountEatNotStandar = ReportAdjustmentMealAllowancePayment.AmountEatNotStandar; sumryMealRecordNew.CountCardMore = ReportAdjustmentMealAllowancePayment.CountCardMore; sumryMealRecordNew.SumAmountCardMore = ReportAdjustmentMealAllowancePayment.SumCardMore; sumryMealRecordNew.CountNotWorkHasEat = ReportAdjustmentMealAllowancePayment.CountNotWorkHasEat; sumryMealRecordNew.AmountNotWorkHasEat = ReportAdjustmentMealAllowancePayment.AmountNotWorkHasEat; sumryMealRecordNew.Amount3OnMonth = ReportAdjustmentMealAllowancePayment.Amount3OnMonth; sumryMealRecordNew.CountHDTJob = ReportAdjustmentMealAllowancePayment.CountHDTJob; sumryMealRecordNew.AmountHDTJob = ReportAdjustmentMealAllowancePayment.AmounSubtractHDTJob; sumryMealRecordNew.AmountNotWorkButHasHDT = ReportAdjustmentMealAllowancePayment.AmountNotWorkButHasHDT; sumryMealRecordNew.CountSubtractWorngStandarHDT = ReportAdjustmentMealAllowancePayment.CountSubtractWorngStandarHDT; sumryMealRecordNew.AmountSubtractWorngStandarHDT = ReportAdjustmentMealAllowancePayment.AmountSubtractWorngStandarHDT; sumryMealRecordRepository.Add(sumryMealRecordNew); lstReportAdjustmentMealAllowancePayment.Add(ReportAdjustmentMealAllowancePayment); if (profiles.IndexOf(profile) % 1000 == 0) { sumryMealRecordRepository.SaveChanges(); } } sumryMealRecordRepository.SaveChanges(); } catch (Exception) { return false; } } return true; }
public DataTable ReportMealAllowanceOfEmployee(List<Guid?> lstMealAllowanceTypeSettingID, DateTime dateStart, DateTime dateEnd, List<Guid> lstProfileIds, List<Guid?> workPlaceIds, Boolean isCludeEmpQuit) { DataTable datatable = CreateReportMealAllowanceOfEmployeeSchema(); using (var context = new VnrHrmDataContext()) { //DateTime dateEnd = dateEnd.AddDays(1).AddMilliseconds(-1); var unitOfWork = (IUnitOfWork)(new UnitOfWork(context)); string typeApprove = MealRecordMissingStatus.E_APPROVED.ToString(); string typeWaitApprove = MealRecordMissingStatus.E_WAIT_APPROVED.ToString(); var repoMealRecordMissing = new Can_MealRecordMissingRepository(unitOfWork); var lstMealRecordMiss = repoMealRecordMissing.FindBy(m => lstProfileIds.Contains(m.ProfileID.Value) && (m.Status == typeApprove || m.Status == typeWaitApprove) && m.WorkDate >= dateStart && m.WorkDate <= dateEnd).OrderBy(m => m.ProfileID).ThenBy(m => m.WorkDate).ToList(); var profileIDs = lstMealRecordMiss.Select(hre => hre.ProfileID.Value).Distinct().ToList(); var repoProfile = new Hre_ProfileRepository(unitOfWork); var profiles = repoProfile.FindBy(m => profileIDs.Contains(m.ID)).ToList(); //tất cả phòng ban và loại trợ cấp var repoCat_OrgStructure = new Cat_OrgStructureRepository(unitOfWork); var lstOrgAll = repoCat_OrgStructure.FindBy(og => og.IsDelete == null).ToList(); var repoTypeMealAllSetting = new Can_MealAllowanceTypeSettingRepository(unitOfWork); var lstTypeMealAllSetting = repoTypeMealAllSetting.GetAll().ToList(); //ds Att_Workday và ca làm việc var repoAttWorkday = new Att_WorkDayRepository(unitOfWork); var workDays = repoAttWorkday.FindBy(wd => dateStart <= wd.WorkDate && wd.WorkDate <= dateEnd && profileIDs.Contains(wd.ProfileID)) .Select(wd => new { wd.ProfileID, wd.ShiftID, wd.WorkDate, wd.InTime1, wd.OutTime1, wd.ShiftActual, wd.ShiftApprove }).ToList(); var repoShift = new Cat_ShiftRepository(unitOfWork); var lstShiftAll = repoShift.GetAll().ToList(); if (lstProfileIds != null && lstProfileIds.Count >= 1) { profiles = profiles.Where(s => lstProfileIds.Contains(s.ID)).ToList(); } if (workPlaceIds != null && workPlaceIds[0] != null) { profiles = profiles.Where(s => workPlaceIds.Contains(s.WorkPlaceID)).ToList(); } if (isCludeEmpQuit != true) { profiles = profiles.Where(s => s.DateQuit == null || s.DateQuit > dateEnd).ToList(); } lstProfileIds = profiles.Select(s => s.ID).ToList(); //ds ko quẹt thẻ theo loại trợ cấp if (lstMealAllowanceTypeSettingID[0] != Guid.Empty) { lstMealRecordMiss = lstMealRecordMiss.Where(m => m.MealAllowanceTypeSettingID != null && lstMealAllowanceTypeSettingID.Contains(m.MealAllowanceTypeSettingID.Value)).ToList(); } var repoCat_OrgStructureType = new Cat_OrgStructureTypeRepository(unitOfWork); var orgTypes = repoCat_OrgStructureType.FindBy(s => s.IsDelete == null).ToList(); foreach (var recordmiss in lstMealRecordMiss) { if (recordmiss == null) continue; var profile = profiles.FirstOrDefault(s => s.ID == recordmiss.ProfileID); if (profile == null) continue; DataRow row = datatable.NewRow(); var orgId = lstOrgAll.Where(s => s.ID == recordmiss.OrgStructureID).Select(og => og.ID).FirstOrDefault(); var orgBranch = LibraryService.GetNearestParent(orgId, OrgUnit.E_DIVISION, lstOrgAll, orgTypes); var orgOrg = LibraryService.GetNearestParent(orgId, OrgUnit.E_DEPARTMENT, lstOrgAll, orgTypes); var orgTeam = LibraryService.GetNearestParent(orgId, OrgUnit.E_SECTION, lstOrgAll, orgTypes); var orgSection = LibraryService.GetNearestParent(orgId, OrgUnit.E_GROUP, lstOrgAll, orgTypes); row[Can_ReportMealAllowanceOfEmployeeEntity.FieldNames.CodeBranch] = orgBranch != null ? orgBranch.Code : string.Empty; row[Can_ReportMealAllowanceOfEmployeeEntity.FieldNames.CodeDepartment] = orgOrg != null ? orgOrg.Code : string.Empty; row[Can_ReportMealAllowanceOfEmployeeEntity.FieldNames.CodeTeam] = orgTeam != null ? orgTeam.Code : string.Empty; row[Can_ReportMealAllowanceOfEmployeeEntity.FieldNames.CodeSection] = orgSection != null ? orgSection.Code : string.Empty; row[Can_ReportMealAllowanceOfEmployeeEntity.FieldNames.BranchName] = orgBranch != null ? orgBranch.OrgStructureName : string.Empty; row[Can_ReportMealAllowanceOfEmployeeEntity.FieldNames.DepartmentName] = orgOrg != null ? orgOrg.OrgStructureName : string.Empty; row[Can_ReportMealAllowanceOfEmployeeEntity.FieldNames.TeamName] = orgTeam != null ? orgTeam.OrgStructureName : string.Empty; row[Can_ReportMealAllowanceOfEmployeeEntity.FieldNames.SectionName] = orgSection != null ? orgSection.OrgStructureName : string.Empty; row[Can_ReportMealAllowanceOfEmployeeEntity.FieldNames.CodeEmp] = profile.CodeEmp; row[Can_ReportMealAllowanceOfEmployeeEntity.FieldNames.ProfileName] = profile.ProfileName; row[Can_ReportMealAllowanceOfEmployeeEntity.FieldNames.DateExport] = DateTime.Now; row[Can_ReportMealAllowanceOfEmployeeEntity.FieldNames.DateFrom] = dateStart; row[Can_ReportMealAllowanceOfEmployeeEntity.FieldNames.DateTo] = dateEnd; var mealAllowance = lstTypeMealAllSetting.FirstOrDefault(m => m.ID == recordmiss.MealAllowanceTypeSettingID); row[Can_ReportMealAllowanceOfEmployeeEntity.FieldNames.MealAllowance] = mealAllowance != null ? mealAllowance.MealAllowanceTypeSettingName : string.Empty; var attworkday = workDays.FirstOrDefault(at => at.ProfileID == profile.ID && at.WorkDate == recordmiss.WorkDate); if (attworkday != null) { var shiftActual = lstShiftAll.FirstOrDefault(sf => sf.ID == attworkday.ShiftActual); row[Can_ReportMealAllowanceOfEmployeeEntity.FieldNames.ShiftActual] = shiftActual != null ? shiftActual.ShiftName : string.Empty; var shiftApprove = lstShiftAll.FirstOrDefault(sf => sf.ID == attworkday.ShiftApprove); row[Can_ReportMealAllowanceOfEmployeeEntity.FieldNames.ShiftApprove] = shiftApprove != null ? shiftApprove.ShiftName : string.Empty; } row[Can_ReportMealAllowanceOfEmployeeEntity.FieldNames.Date] = recordmiss.WorkDate; row[Can_ReportMealAllowanceOfEmployeeEntity.FieldNames.Status] = recordmiss.Status; datatable.Rows.Add(row); } } return datatable; }
public DataTable ReportMealTimeDetailNoEat(List<Guid?> lstWorkPlace, String status, String codeEmp, Boolean isCludeEmpQuit, DateTime dateStart, DateTime dateEndSearch, List<Guid?> orgIDs) { List<Can_ReportMealTimeDetailNoEatEntity> lstreportMealTimeDetailNoEatEntity = new List<Can_ReportMealTimeDetailNoEatEntity>(); using (var context = new VnrHrmDataContext()) { var unitOfWork = (IUnitOfWork)(new UnitOfWork(context)); DateTime dateEnd = dateEndSearch.AddDays(1).AddMilliseconds(-1); var repomealRecordMissing = new Can_MealRecordMissingRepository(unitOfWork); var mealRecordMissings = repomealRecordMissing.FindBy(s => s.ProfileID != null && s.WorkDate != null && dateStart <= s.WorkDate && s.WorkDate <= dateEnd && s.MealAllowanceTypeSettingID == null) .Select(s => new { s.ProfileID, s.WorkDate, s.Status, s.MealAllowanceTypeSettingID, s.OrgStructureID }).ToList(); DataTable table = GetSchemaRptMealTimeDetailNoEat(); if (mealRecordMissings == null && mealRecordMissings.Count < 1) { return table; } var profileIds = mealRecordMissings.Select(s => s.ProfileID.Value).Distinct().ToList(); var repoProfile = new Hre_ProfileRepository(unitOfWork); var profiles = repoProfile.FindBy(s => profileIds.Contains(s.ID)).ToList(); if (orgIDs != null && orgIDs[0] != null) { profiles = profiles.Where(hr => hr.OrgStructureID != null && orgIDs.Contains(hr.OrgStructureID)).ToList(); } if (lstWorkPlace[0] != Guid.Empty) { profiles = profiles.Where(wp => wp.WorkPlaceID != null && lstWorkPlace.Contains(wp.WorkPlaceID.Value)).ToList(); } if (isCludeEmpQuit != true) { profiles = profiles.Where(s => s.DateQuit == null || s.DateQuit > dateEnd).ToList(); } if (!string.IsNullOrEmpty(codeEmp)) { char[] ext = new char[] { ';', ',' }; List<string> codeEmpSeachs = codeEmp.Split(ext, StringSplitOptions.RemoveEmptyEntries).ToList<string>(); if (codeEmpSeachs.Count == 1) { string codeEmpSearch = codeEmpSeachs[0]; profiles = profiles.Where(hr => hr.CodeEmp == codeEmpSearch).ToList(); } else { profiles = profiles.Where(hr => codeEmpSeachs.Contains(hr.CodeEmp)).ToList(); } } profileIds = profiles.Select(s => s.ID).ToList(); mealRecordMissings = mealRecordMissings.Where(s => profileIds.Contains(s.ProfileID.Value)).ToList(); //trạng thái if (status != null) { mealRecordMissings = mealRecordMissings.Where(meal => status.Contains(meal.Status)).ToList(); } //workday var repAttWorkday = new Att_WorkDayRepository(unitOfWork); var lstWorkday = repAttWorkday.FindBy(wd => wd.WorkDate >= dateStart && wd.WorkDate <= dateEnd && profileIds.Contains(wd.ProfileID)) .Select(wd => new {wd.ProfileID, wd.InTime1, wd.OutTime1, wd.WorkDate }).ToList(); //danh mục leaveday type var repLeaveDayType = new Cat_LeaveDayTypeRepository(unitOfWork); var leadayHLDID = repLeaveDayType.FindBy(ld => ld.Code == "HLD").Select(ld => ld.ID).FirstOrDefault(); //att_leaveday var repAttLeaveDay = new Att_LeavedayRepository(unitOfWork); var E_APPROVED = LeaveDayStatus.E_APPROVED.ToString(); var lstLeaveday = repAttLeaveDay.FindBy(ld => ld.LeaveDayTypeID != leadayHLDID && (profileIds.Contains(ld.ProfileID)) && ld.Status == E_APPROVED && dateStart <= ld.DateEnd && ld.DateStart <= dateEnd) .Select(ld => new { ld.ProfileID, ld.DateStart, ld.DateEnd }).ToList(); //can_line var repHDTjob = new Can_LineRepository(unitOfWork); var lstHDTjobID = repHDTjob.FindBy(hdt => hdt.IsHDTJOB == true).Select(hdt => hdt.ID).ToList(); //Can_mealRecord var repMealRecord = new Can_MealRecordRepository(unitOfWork); var lstMealRecord = repMealRecord.FindBy(meal => meal.LineID != null && !lstHDTjobID.Contains(meal.LineID.Value) && meal.ProfileID.HasValue && profileIds.Contains(meal.ProfileID.Value) && dateStart <= meal.WorkDay && meal.WorkDay <= dateEnd) .Select(meal => new { meal.ProfileID, meal.WorkDay }).ToList(); //Allowance type setting var repAllowanceTypeSetting = new Can_MealAllowanceTypeSettingRepository(unitOfWork); var lstAllowanceTypeSetting = repAllowanceTypeSetting.GetAll().Select(al => new {al.ID, al.MealAllowanceTypeSettingName }).ToList(); var repoOrgType = new Cat_OrgStructureTypeRepository(unitOfWork); var listOrgType = repoOrgType.FindBy(s => s.IsDelete == null).ToList(); var repoOrg = new Cat_OrgStructureRepository(unitOfWork); var listOrgAll = repoOrg.GetAll().ToList(); //var repoLine = new Can_LineRepository(unitOfWork); //var repoCatering = new Can_CateringRepository(unitOfWork); //var repoCanteen = new Can_CanteenRepository(unitOfWork); foreach (var mealRecordMissing in mealRecordMissings) { // neu co quet the an thi ko tinh var meadRecord = lstMealRecord.FirstOrDefault(s => s.ProfileID == mealRecordMissing.ProfileID && s.WorkDay.Value.Date == mealRecordMissing.WorkDate.Value.Date); if (meadRecord != null) { continue; } // neu ngay do dk nghi thi ko tinh var leaveday = lstLeaveday.FirstOrDefault(s => s.ProfileID == mealRecordMissing.ProfileID && s.DateStart <= mealRecordMissing.WorkDate && mealRecordMissing.WorkDate <= s.DateEnd); if (leaveday != null) { continue; } // neu ngay do ko di lam thi ko tinh var workday = lstWorkday.FirstOrDefault(s => s.ProfileID == mealRecordMissing.ProfileID && s.WorkDate.Date == mealRecordMissing.WorkDate.Value.Date); if (workday == null) { continue; } DataRow row = table.NewRow(); if (workday != null && workday.InTime1 != null) { row["TimeIn"] = workday.InTime1; } if (workday != null && workday.OutTime1 != null) { row["TimeOut"] = workday.OutTime1; } var profile = profiles.FirstOrDefault(s => s.ID == mealRecordMissing.ProfileID); if (profile != null) { var type = lstAllowanceTypeSetting.FirstOrDefault(s => s.ID == mealRecordMissing.MealAllowanceTypeSettingID); var org = listOrgAll.FirstOrDefault(s => profile != null && s.ID == mealRecordMissing.OrgStructureID); var orgBranch = LibraryService.GetNearestParent(profile.OrgStructureID, OrgUnit.E_BRANCH, listOrgAll, listOrgType); var orgOrg = LibraryService.GetNearestParent(profile.OrgStructureID, OrgUnit.E_DEPARTMENT, listOrgAll, listOrgType); var orgTeam = LibraryService.GetNearestParent(profile.OrgStructureID, OrgUnit.E_TEAM, listOrgAll, listOrgType); var orgSection = LibraryService.GetNearestParent(profile.OrgStructureID, OrgUnit.E_SECTION, listOrgAll, listOrgType); row[Can_ReportMealTimeDetailNoEatEntity.FieldNames.CodeBranch] = orgBranch != null ? orgBranch.Code : string.Empty; row[Can_ReportMealTimeDetailNoEatEntity.FieldNames.CodeDepartment] = orgOrg != null ? orgOrg.Code : string.Empty; row[Can_ReportMealTimeDetailNoEatEntity.FieldNames.CodeTeam] = orgTeam != null ? orgTeam.Code : string.Empty; row[Can_ReportMealTimeDetailNoEatEntity.FieldNames.CodeSection] = orgSection != null ? orgSection.Code : string.Empty; row[Can_ReportMealTimeDetailNoEatEntity.FieldNames.BranchName] = orgBranch != null ? orgBranch.OrgStructureName : string.Empty; row[Can_ReportMealTimeDetailNoEatEntity.FieldNames.DepartmentName] = orgOrg != null ? orgOrg.OrgStructureName : string.Empty; row[Can_ReportMealTimeDetailNoEatEntity.FieldNames.TeamName] = orgTeam != null ? orgTeam.OrgStructureName : string.Empty; row[Can_ReportMealTimeDetailNoEatEntity.FieldNames.SectionName] = orgSection != null ? orgSection.OrgStructureName : string.Empty; row[Can_ReportCardByLocationEntity.FieldNames.CodeEmp] = profile.CodeEmp; row[Can_ReportCardByLocationEntity.FieldNames.ProfileName] = profile.ProfileName; row[Can_ReportCardByLocationEntity.FieldNames.Date] = mealRecordMissing.WorkDate; row[Can_ReportCardByLocationEntity.FieldNames.DateFrom] = dateStart; row[Can_ReportCardByLocationEntity.FieldNames.DateTo] = dateEnd; row[Can_ReportMealTimeDetailNoEatEntity.FieldNames.DateExport] = DateTime.Now; row[Can_ReportMealTimeDetailNoEatEntity.FieldNames.MealAllowanceName] = type != null ? type.MealAllowanceTypeSettingName : string.Empty; table.Rows.Add(row); } } return table; } }
public void ComputeMealRecordMissing(List <Guid> lstProfileIds, DateTime dateFrom, DateTime dateToSearch, List <Guid> TamScanReasonMissID, string Status, List <Guid?> lstAllowanceTypeIDs) { List <Can_MealRecordMissingEntity> lstMealRecord = new List <Can_MealRecordMissingEntity>(); using (var context = new VnrHrmDataContext()) { DateTime dateTo = DateTime.Now; if (dateToSearch != null && dateToSearch != SqlDateTime.MaxValue.Value) { dateTo = dateToSearch.AddDays(1).AddMinutes(-1); } if (lstProfileIds == null) { return; } var unitOfWork = (IUnitOfWork)(new UnitOfWork(context)); var repoProfile = new Hre_ProfileRepository(unitOfWork); string statusAllowance = StatusMealAllowanceToMoney.E_APPROVED.ToString(); var repoMealAllowance = new Can_MealAllowanceToMoneyRepository(unitOfWork); var mealAllowanceProfies = repoMealAllowance.FindBy(s => s.Status == statusAllowance && dateFrom <= s.DateTo && s.DateFrom <= dateTo) .Select(s => new { s.ProfileID, s.MealAllowanceTypeID, s.DateFrom, s.DateTo }).ToList(); var repoMissReason = new Cat_TAMScanReasonMissRepository(unitOfWork); var resons = repoMissReason.FindBy(s => s.IsForCMS == true).Select(s => new { s.ID, s.IsFullPay }).ToList(); var repoWorkday = new Att_WorkDayRepository(unitOfWork); var workDays = repoWorkday.FindBy(s => (s.FirstInTime != null || s.LastOutTime != null) && dateFrom <= s.WorkDate && s.WorkDate <= dateTo && lstProfileIds.Contains(s.ProfileID)) .Select(s => new { s.ProfileID, s.WorkDate, s.MissInOutReason, s.Status, s.FirstInTime, s.LastOutTime }).ToList(); var repoMealRecord = new Can_MealRecordRepository(unitOfWork); var mealRecordProfiles = repoMealRecord.FindBy(s => s.WorkDay != null && s.ProfileID != null && dateFrom <= s.WorkDay && s.WorkDay <= dateTo && lstProfileIds.Contains(s.ProfileID.Value)) .Select(s => new { s.ProfileID, s.TimeLog, s.WorkDay }).ToList(); var statusLeaveDay = AttendanceDataStatus.E_APPROVED.ToString(); var repoLeaveDay = new Att_LeavedayRepository(unitOfWork); var leaveDayProfiles = repoLeaveDay.FindBy(s => s.Status == statusLeaveDay && dateFrom <= s.DateEnd && s.DateStart <= dateTo) .Select(s => new { s.ProfileID, s.DateStart, s.DateEnd }).ToList(); var tamSanResons = repoMissReason.GetAll().ToList(); var repoMealAllowanceTypeSettings = new Can_MealAllowanceTypeSettingRepository(unitOfWork); var mealSesttings = repoMealAllowanceTypeSettings.GetAll().Select(s => new { s.ID, s.Amount, s.MealAllowanceTypeSettingName }).ToList(); if (TamScanReasonMissID != null && TamScanReasonMissID[0] != Guid.Empty) { workDays = workDays.Where(s => s.MissInOutReason != null && TamScanReasonMissID.Contains(s.MissInOutReason.Value)).ToList(); } if (Status != null) { workDays = workDays.Where(s => s.Status != null && Status == s.Status).ToList(); } var repoRecordMissing = new Can_MealRecordMissingRepository(unitOfWork); List <Can_MealRecordMissing> mealRecordMissings = repoRecordMissing.FindBy(s => dateFrom <= s.WorkDate && s.WorkDate <= dateTo && s.ProfileID != null && lstProfileIds.Contains(s.ProfileID.Value)).ToList(); var workDayProfies = repoWorkday.FindBy(s => (s.InTime1 != null || s.OutTime1 != null) && dateFrom <= s.WorkDate && s.WorkDate <= dateTo && lstProfileIds.Contains(s.ProfileID)).Select(s => new { s.ProfileID, s.WorkDate, s.ShiftID }).ToList(); var profileIDs = workDayProfies.Select(s => s.ProfileID).Distinct().ToList(); var lstmeal = new List <Can_MealRecordMissing>(); foreach (var profileID in profileIDs) { for (DateTime date = dateFrom; date <= dateTo; date = date.AddDays(1)) { var recordProfileIDs = mealRecordProfiles.Where(s => s.WorkDay.Value.Date == date.Date && s.ProfileID == profileID).Select(s => s.ProfileID).ToList(); var leavedayProfileIDs = leaveDayProfiles.Where(s => s.DateStart != null && s.DateEnd != null && s.DateStart.Date <= date.Date && date.Date <= s.DateEnd.Date && s.ProfileID == profileID).Select(s => s.ProfileID).ToList(); var workDayProfiles = workDays.Where(s => s.WorkDate.Date == date.Date && s.ProfileID == profileID && !recordProfileIDs.Contains(s.ProfileID) && !leavedayProfileIDs.Contains(s.ProfileID)).ToList(); foreach (var workDay in workDayProfiles) { var meal = mealRecordMissings.FirstOrDefault(s => s.ProfileID == workDay.ProfileID && s.WorkDate.Value.Date == workDay.WorkDate.Date); if (meal == null) { meal = new Can_MealRecordMissing(); meal.ID = Guid.Empty; lstmeal.Add(meal); } meal.ProfileID = workDay.ProfileID; meal.WorkDate = workDay.WorkDate; if (meal.TamScanReasonMissID == Guid.Empty) { if (workDay.MissInOutReason != Guid.Empty) { meal.TamScanReasonMissID = workDay.MissInOutReason; var tamScan = tamSanResons.FirstOrDefault(s => s.ID == workDay.MissInOutReason); if (tamScan != null) { meal.MealAllowanceTypeSettingID = tamScan.MealAllowanceTypeSettingID; meal.TamScanReasonMissID = tamScan.ID; var messting = mealSesttings.FirstOrDefault(s => s.ID == tamScan.MealAllowanceTypeSettingID); if (messting != null) { meal.Amount = messting.Amount; } } } else { var allownce = mealAllowanceProfies.FirstOrDefault(s => s.ProfileID == workDay.ProfileID && s.DateFrom <= date && date <= s.DateTo); if (allownce != null) { meal.MealAllowanceTypeSettingID = allownce.MealAllowanceTypeID; var messting = mealSesttings.FirstOrDefault(s => s.ID == allownce.MealAllowanceTypeID); if (messting != null) { meal.Amount = messting.Amount; } } } } if (meal.MealAllowanceTypeSettingID != Guid.Empty) { meal.Status = MealRecord_Status.E_APPROVED.ToString(); } else { meal.Status = MealRecord_Status.E_SUBMIT.ToString(); } meal.Type = WorkdaySrcType.E_MANUAL.ToString(); if (workDay.FirstInTime == null && workDay.LastOutTime == null && workDay.MissInOutReason != Guid.Empty) { var tamSanReson = resons.FirstOrDefault(s => s.ID == workDay.MissInOutReason); if (tamSanReson != null) { meal.IsFullPay = tamSanReson.IsFullPay; } } } } } repoRecordMissing.Add(lstmeal); repoMissReason.SaveChanges(); } }