public static IPaymentCalculator GetRuleCalculator(UserResultVM user, UserResult initialUserResult, long ruleTypeId) { IPaymentCalculator calculator = null; switch ((RuleType)ruleTypeId) { case RuleType.Annual: { calculator = new AnnualRuleCalculator(); break; } case RuleType.Month: { calculator = new MonthlyRuleCalculator(); break; } case RuleType.Weekend: { calculator = new WeekendRuleCalculator(); break; } } calculator.Configure(user, initialUserResult); return(calculator); }
protected decimal Proceed(UserResultVM user, UserResult initialUserResult, DateTime startDate, DateTime endDate) { if (nextHandler != null) { return(nextHandler.Calculate(user, initialUserResult, startDate, endDate)); } else { return(0M); } }
public override decimal Calculate(UserResultVM user, UserResult initialUserResult, DateTime startDate, DateTime endDate) { var baseRate = 0M; foreach (var userPosition in user.Positions) { var dateFrom = userPosition.StartDate > startDate ? userPosition.StartDate : startDate; var dateTo = userPosition.EndDate.HasValue && userPosition.EndDate < endDate ? userPosition.EndDate.Value : endDate; var position = initialUserResult.Positions.Where(p => p.Id == userPosition.PositionId).First(); var calculator = CalculatorFactory.GetBaseRateCalculator(user, initialUserResult, position.RateTypeId); baseRate += calculator.Calculate(position.Rate, dateFrom, dateTo); } return(baseRate + Proceed(user, initialUserResult, startDate, endDate)); }
public override decimal Calculate(UserResultVM user, UserResult initialUserResult, DateTime startDate, DateTime endDate) { var baseRate = 0M; var userRuleIds = initialUserResult.UserRules.Where(ur => ur.UserId == user.Id).Select(ur => ur.RuleId); var rules = initialUserResult.Rules.Where(r => userRuleIds.Contains(r.Id)); foreach (var rule in rules) { var dateFrom = rule.StartDate > startDate ? rule.StartDate : startDate; var dateTo = rule.EndDate.HasValue && rule.EndDate < endDate ? rule.EndDate.Value : endDate; var calculator = CalculatorFactory.GetRuleCalculator(user, initialUserResult, rule.RuleTypeId); baseRate += calculator.Calculate(rule.Bonus, dateFrom, dateTo); } return(baseRate + Proceed(user, initialUserResult, startDate, endDate)); }
public HttpResponseMessage GetList() { HttpResponseMessage response = new HttpResponseMessage(); UserResultVM result = new UserResultVM(); try { UserBL scope = new UserBL(); result.UserList = scope.GetList(); response = Request.CreateResponse <UserResultVM>(HttpStatusCode.OK, result); } catch (Exception ex) { LogHelper.Write(this.GetType(), ex); response = Request.CreateResponse <string>(HttpStatusCode.InternalServerError, ex.Message); } return(response); }
public override decimal Calculate(UserResultVM user, UserResult initialUserResult, DateTime startDate, DateTime endDate) { var bonus = 0M; foreach (var userPosition in user.Positions) { var positionDateFrom = userPosition.StartDate > startDate ? userPosition.StartDate : startDate; var positionDateTo = userPosition.EndDate.HasValue && userPosition.EndDate < endDate ? userPosition.EndDate.Value : endDate; foreach (var rule in GetRules(initialUserResult, userPosition.PositionId)) { var ruleDateFrom = rule.StartDate > positionDateFrom ? rule.StartDate : positionDateFrom; var ruleDateTo = rule.EndDate.HasValue && rule.EndDate < positionDateTo ? rule.EndDate.Value : positionDateTo; var calculator = CalculatorFactory.GetRuleCalculator(user, initialUserResult, rule.RuleTypeId); bonus += calculator.Calculate(rule.Bonus, ruleDateFrom, ruleDateTo); } } return(bonus + Proceed(user, initialUserResult, startDate, endDate)); }
public override decimal Calculate(UserResultVM user, UserResult initialUserResult, DateTime startDate, DateTime endDate) { var overtimeBonus = 0M; var holidays = initialUserResult.DaysOff.Select(doff => doff.Date); foreach (var userPosition in user.Positions) { var positionDateFrom = userPosition.StartDate > startDate ? userPosition.StartDate : startDate; var positionDateTo = userPosition.EndDate.HasValue && userPosition.EndDate < endDate ? userPosition.EndDate.Value : endDate; var rateInfo = initialUserResult.Positions.Where(p => p.Id == userPosition.PositionId).Select(p => new { p.RateTypeId, p.Rate }).First(); var overtimeRatio = initialUserResult.OvertimeRatios.Where(or => or.RateTypeId == rateInfo.RateTypeId).Select(or => or.Ratio).First(); var relevantTimeSheets = user.TimeSheets.Where(ts => ts.Date >= positionDateFrom && ts.Date <= positionDateTo); var calculator = CalculatorFactory.GetOvertimeCalculator(user, initialUserResult, rateInfo.RateTypeId); overtimeBonus += calculator.Calculate(rateInfo.Rate, overtimeRatio, userPosition.Hours, positionDateFrom, positionDateTo); } return(overtimeBonus + Proceed(user, initialUserResult, startDate, endDate)); }
public UserResultVM GetUser(long userId, UserResult userResult) { var user = userResult.Users.Where(u => u.Id == userId).First(); var result = new UserResultVM() { Id = user.Id, FirstName = user.FirstName, LastName = user.LastName }; result.VacationInfo = vacationMapper.GetVacationInfo(userId, userResult); result.TimeSheets = userResult.UserTimeSheets.Where(ts => ts.UserId == userId) .Select(ts => new TimeSheetVM { Date = ts.Date, Hours = ts.Hours }); result.Positions = userResult.UserPositions.Where(up => up.UserId == userId) .Join(userResult.UserPositionHours, up => up.PositionId, uph => uph.UserPositionId, (up, uph) => new UserPositionVM { PositionId = up.PositionId, StartDate = up.StartDate, EndDate = up.EndDate, Hours = uph.Hours }).ToList(); return(result); }
public static IPaymentCalculator GetBaseRateCalculator(UserResultVM user, UserResult initialUserResult, int rateTypeId) { IPaymentCalculator calculator = null; switch ((RateType)rateTypeId) { case RateType.PerHour: { calculator = new HourlyBaseRateCalculator(); break; } case RateType.Fixed: { calculator = new FixedBaseRateCalculator(); break; } } calculator.Configure(user, initialUserResult); return(calculator); }
public void Configure(UserResultVM user, UserResult initialUserResult) { this.timeSheets = user.TimeSheets; }
public virtual decimal Calculate(UserResultVM user, UserResult initialUserResult, DateTime startDate, DateTime endDate) { return(0M); }
public void Configure(UserResultVM user, UserResult initialUserResult) { }
public void Configure(UserResultVM user, UserResult initialUserResult) { this.holidays = initialUserResult.DaysOff.Select(doff => doff.Date); }
public void Configure(UserResultVM user, UserResult initialUserResult) { throw new NotImplementedException(); }