/// <summary> /// Method to get sum of targets of Child Scorecards for a month /// </summary> /// <param name="cascadedTargetId">target to be added/updated</param> /// <param name="parentTargetId">parent target</param> /// <param name="monthlyTarget">monthly target</param> /// <returns></returns> private decimal GetSumOfChildScorecardTarget(int?cascadedTargetId, int parentTargetId, MonthlyTargetItem monthlyTarget) { decimal sumOfChildScorecardsMonthlyTarget = 0; //get all child scorecard targets having cascade from parent enabled var siblingTargets = targetRepository.GetAll().Where(x => x.ParentTargetId == parentTargetId && x.CascadeFromParent && x.IsActive && (cascadedTargetId.HasValue ? x.Id != cascadedTargetId.Value : x.Id == x.Id)) .ToList(); //iterating through child scorecard foreach (var child in siblingTargets) { var monthlyTargetOfChild = child.MonthlyTargets .FirstOrDefault(x => x.Month == monthlyTarget.Month.Id && x.MaxGoalValue.HasValue); if (monthlyTargetOfChild != null) { sumOfChildScorecardsMonthlyTarget = sumOfChildScorecardsMonthlyTarget + monthlyTargetOfChild.MaxGoalValue.Value; } } sumOfChildScorecardsMonthlyTarget = sumOfChildScorecardsMonthlyTarget + monthlyTarget.GoalValue.Value; return(sumOfChildScorecardsMonthlyTarget); }
/// <summary> /// Convert MonthlyTargetItem data structure to MonthlyTarget /// </summary> /// <param name="monthlyTarget">Input MonthlyTargetItem</param> /// <param name="loggedInUserId">Logged In UserId</param> /// <returns>MonthlyTarget DS</returns> public static MonthlyTarget ConvertMonthlyTargetItemToMonthlyTargetEntity( MonthlyTargetItem monthlyTarget, int loggedInUserId) { DateTime curTimestamp = TimeZoneUtility.GetCurrentTimestamp(); MonthlyTarget mthlyTarget = new MonthlyTarget(); mthlyTarget.Month = monthlyTarget.Month.Id; mthlyTarget.MaxGoalValue = monthlyTarget.GoalValue; mthlyTarget.DailyRate = monthlyTarget.DailyRateValue; mthlyTarget.StretchGoalValue = monthlyTarget.StretchGoalValue; mthlyTarget.CreatedOn = curTimestamp; mthlyTarget.LastModifiedOn = curTimestamp; mthlyTarget.CreatedBy = loggedInUserId; //Need to update with logged in user in future mthlyTarget.LastModifiedBy = loggedInUserId; //Need to update with logged in user in future return(mthlyTarget); }
/// <summary> /// Method to convert monthly target entity to monthly target item DTO /// </summary> /// <param name="monthlyTarget">MonthlyTarget Entity</param> /// <param name="monthItem">MonthItem DTO</param> /// <returns></returns> public static MonthlyTargetItem ConvertMonthlyTargetToMonthlyTargetItemDTO (MonthlyTarget monthlyTarget, MonthItem monthItem) { var currentDate = TimeZoneUtility.GetCurrentTimestamp(); var monthlyTargetItem = new MonthlyTargetItem() { Id = monthlyTarget.Id, Month = monthItem, GoalValue = monthlyTarget.MaxGoalValue, DailyRateValue = monthlyTarget.DailyRate, StretchGoalValue = monthlyTarget.StretchGoalValue, HasManualTarget = monthlyTarget.DailyTargets.Any(x => x.IsManual), HasRolledUpDailyTarget = monthlyTarget.DailyTargets.Any(x => x.RolledUpGoalValue != null), HasDailyTarget = monthlyTarget.DailyTargets.Any(x => x.MaxGoalValue != null), IsPastMonth = (monthItem.Id < (currentDate.Month - 1) && monthItem.Year == currentDate.Year) || monthItem.Year < currentDate.Year, RolledupGoalValue = monthlyTarget.RolledUpGoalValue }; return(monthlyTargetItem); }
/// <summary> /// Function to check if currently updating monthly target item need to be regenerated due to a change in effective start dat in that month /// </summary> /// <param name="targetItem"></param> /// <param name="existingTarget"></param> /// <param name="updatingMonth"></param> /// <returns></returns> public bool CheckIfEffectiveDateChangeInvolvesSelectedMonthlyTarget(TargetItem targetItem, Target existingTarget, MonthlyTargetItem updatingMonth) { if (targetItem.EffectiveStartDate == existingTarget.EffectiveStartDate && targetItem.EffectiveEndDate == existingTarget.EffectiveEndDate) { return(false); } else { if (targetItem.EffectiveStartDate != existingTarget.EffectiveStartDate) { return(updatingMonth.Month.Id == targetItem.EffectiveStartDate.Month || updatingMonth.Month.Id == existingTarget.EffectiveStartDate.Month); } else { return(updatingMonth.Month.Id == targetItem.EffectiveEndDate.Month || updatingMonth.Month.Id == existingTarget.EffectiveEndDate.Month); } } }
/// <summary> /// Function to check if currently updating month required system regenerated dialyTargets /// </summary> /// <param name="targetItem"></param> /// <param name="existingTarget"></param> /// <param name="updatingMonth"></param> /// <returns></returns> public bool CheckIfSelectedMonthNeedsUpdation(TargetItem targetItem, Target existingTarget, MonthlyTargetItem updatingMonth) { bool updateMonthlyTarget = false; var existingMonth = existingTarget.MonthlyTargets?.FirstOrDefault(x => x.Month == updatingMonth.Month.Id); if (existingMonth != null) { updateMonthlyTarget = CheckIfTargetExistsForHolidays(existingMonth, targetItem.ScorecardId, targetItem.EffectiveEndDate.Year); } updateMonthlyTarget = updateMonthlyTarget || CheckIfEffectiveDateChangeInvolvesSelectedMonthlyTarget(targetItem, existingTarget, updatingMonth); return(updateMonthlyTarget); }