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);
        }
Beispiel #2
0
        protected decimal Proceed(UserResultVM user, UserResult initialUserResult, DateTime startDate, DateTime endDate)
        {
            if (nextHandler != null)
            {
                return(nextHandler.Calculate(user, initialUserResult, startDate, endDate));
            }

            else
            {
                return(0M);
            }
        }
Beispiel #3
0
        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));
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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));
        }
Beispiel #7
0
        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));
        }
Beispiel #8
0
        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);
        }
Beispiel #10
0
 public void Configure(UserResultVM user, UserResult initialUserResult)
 {
     this.timeSheets = user.TimeSheets;
 }
Beispiel #11
0
 public virtual decimal Calculate(UserResultVM user, UserResult initialUserResult, DateTime startDate, DateTime endDate)
 {
     return(0M);
 }
 public void Configure(UserResultVM user, UserResult initialUserResult)
 {
 }
Beispiel #13
0
 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();
 }