internal static IRuleBuilderInitial <Vacancy, Vacancy> FixedWageMustBeGreaterThanApprenticeshipMinimumWage(this IRuleBuilder <Vacancy, Vacancy> ruleBuilder, IMinimumWageProvider minimumWageService)
        {
            return(ruleBuilder.Custom((vacancy, context) =>
            {
                var wagePeriod = minimumWageService.GetWagePeriod(vacancy.StartDate.Value);

                if (vacancy.Wage.FixedWageYearlyAmount == null || vacancy.Wage.FixedWageYearlyAmount / 52 / vacancy.Wage.WeeklyHours < wagePeriod.ApprenticeshipMinimumWage)
                {
                    var minimumYearlyWageForApprentices = WagePresenter.GetDisplayText(WageType.ApprenticeshipMinimum, WageUnit.Annually, new WageDetails
                    {
                        HoursPerWeek = vacancy.Wage.WeeklyHours,
                        StartDate = vacancy.StartDate.Value
                    }).AsWholeMoneyAmount();

                    var errorMessage = (vacancy.Status == VacancyStatus.Live) ?
                                       $"National Minimum Wage is changing from {wagePeriod.ValidFrom:d MMM yyyy}. So the fixed wage you entered before will no longer be valid. Change the date to before {wagePeriod.ValidFrom:d MMM yyyy} or to change the wage, create a new vacancy." :
                                       $"Yearly wage must be at least {minimumYearlyWageForApprentices}";

                    var failure = new ValidationFailure(string.Empty, errorMessage)
                    {
                        ErrorCode = "49",
                        CustomState = VacancyRuleSet.MinimumWage,
                        PropertyName = $"{nameof(Wage)}.{nameof(Wage.FixedWageYearlyAmount)}"
                    };
                    context.AddFailure(failure);
                }
            }));
        }
        public void ShouldGetCustomRangeDisplayText(string wageLowerString, string wageUpperString, string expected)
        {
            // Arrange.  This is frustrating. You cant use decimal parameters as decimals aren't primitives.
            decimal tempDecimal;
            decimal?wageAmountLower = null;
            decimal?wageAmountUpper = null;

            if (decimal.TryParse(wageLowerString, out tempDecimal))
            {
                wageAmountLower = tempDecimal;
            }

            if (decimal.TryParse(wageUpperString, out tempDecimal))
            {
                wageAmountUpper = tempDecimal;
            }

            // Act.
            string actual = WagePresenter.GetDisplayText(WageType.CustomRange, WageUnit.NotApplicable,
                                                         new WageDetails()
            {
                LowerBound = wageAmountLower, UpperBound = wageAmountUpper
            });

            // Assert.
            actual.Should().Be(expected);
        }
Beispiel #3
0
 private string GetMinimumWageYearlyText(SFA.DAS.VacancyServices.Wage.WageType wageType, decimal?weeklyHours, DateTime startDate)
 {
     return(WagePresenter.GetDisplayText(wageType, WageUnit.Annually, new WageDetails
     {
         HoursPerWeek = weeklyHours,
         StartDate = startDate
     }).AsWholeMoneyAmount());
 }
        public void ShouldGetTextDisplayText(string wageText, string expected)
        {
            // Act.
            string actual = WagePresenter.GetDisplayText(WageType.Text, WageUnit.NotApplicable, new WageDetails()
            {
                Text = wageText
            });

            // Assert.
            actual.Should().Be(expected);
        }
        public string GetWageText(CreateApprenticeshipRequest request)
        {
            var wageDetails = new WageDetails()
            {
                Amount       = request.FixedWage,
                HoursPerWeek = (decimal)request.HoursPerWeek,
                StartDate    = request.ExpectedStartDate,
                LowerBound   = request.MinWage,
                UpperBound   = request.MaxWage
            };

            switch (request.WageType)
            {
            case WageType.CustomWageFixed:
                return(WagePresenter.GetDisplayText(SFA.DAS.VacancyServices.Wage.WageType.Custom,
                                                    SFA.DAS.VacancyServices.Wage.WageUnit.Weekly,
                                                    wageDetails));

            case WageType.CustomWageRange:
                return(WagePresenter.GetDisplayText(SFA.DAS.VacancyServices.Wage.WageType.CustomRange,
                                                    SFA.DAS.VacancyServices.Wage.WageUnit.Weekly,
                                                    wageDetails));

            case WageType.ApprenticeshipMinimumWage:
                return(WagePresenter.GetDisplayText(SFA.DAS.VacancyServices.Wage.WageType.ApprenticeshipMinimum,
                                                    SFA.DAS.VacancyServices.Wage.WageUnit.Weekly,
                                                    wageDetails));

            case WageType.NationalMinimumWage:
                return(WagePresenter.GetDisplayText(SFA.DAS.VacancyServices.Wage.WageType.NationalMinimum,
                                                    SFA.DAS.VacancyServices.Wage.WageUnit.Weekly,
                                                    wageDetails));

            case WageType.CompetitiveSalary:
                return(WagePresenter.GetDisplayText(SFA.DAS.VacancyServices.Wage.WageType.CompetitiveSalary,
                                                    SFA.DAS.VacancyServices.Wage.WageUnit.NotApplicable,
                                                    wageDetails));

            case WageType.ToBeSpecified:
                return(WagePresenter.GetDisplayText(SFA.DAS.VacancyServices.Wage.WageType.ToBeAgreedUponAppointment,
                                                    SFA.DAS.VacancyServices.Wage.WageUnit.NotApplicable,
                                                    wageDetails));

            case WageType.Unwaged:
                return(WagePresenter.GetDisplayText(SFA.DAS.VacancyServices.Wage.WageType.Unwaged,
                                                    SFA.DAS.VacancyServices.Wage.WageUnit.NotApplicable,
                                                    wageDetails));

            default:
                return(null);
            }
        }
        public void ShouldGetApprenticeshipMinimumDisplayText(WageType wageType, string hoursPerWeekString, string expected)
        {
            // Arrange.  This is frustrating. You cant use decimal parameters as decimals aren't primitives.
            decimal tempDecimal;
            decimal?hoursPerWeek = null;

            if (decimal.TryParse(hoursPerWeekString, out tempDecimal))
            {
                hoursPerWeek = tempDecimal;
            }

            // Act.
            string actual = WagePresenter.GetDisplayText(wageType, WageUnit.Annually, new WageDetails()
            {
                HoursPerWeek = Convert.ToDecimal(hoursPerWeek)
            });

            // Assert.
            actual.Should().Be(expected);
        }
        private string GetWageText(recruitEntities.Wage wage, DateTime expectedStartDate)
        {
            var wageDetail = new WageDetails {
                HoursPerWeek = wage.WeeklyHours, StartDate = expectedStartDate, Amount = wage.FixedWageYearlyAmount
            };

            switch (wage.WageType)
            {
            case NationalMinimumWageForApprenticesWageType:
                return(WagePresenter.GetDisplayText(WageType.ApprenticeshipMinimum, WageUnit.Weekly, wageDetail));

            case NationalMinimumWageWageType:
                return(WagePresenter.GetDisplayText(WageType.NationalMinimum, WageUnit.Weekly, wageDetail));

            case UnspecifiedWageType:
                return(UnknownText);

            default:     //including FixedWage
                return(WagePresenter.GetDisplayText(WageType.Custom, WageUnit.Weekly, wageDetail));
            }
        }
Beispiel #8
0
        public static string ToText(this Wage wage, DateTime?expectedStartDate)
        {
            var wageDetails = new WageDetails
            {
                Amount       = wage.FixedWageYearlyAmount,
                HoursPerWeek = wage.WeeklyHours,
                StartDate    = expectedStartDate.GetValueOrDefault()
            };
            string wageText;

            switch (wage.WageType)
            {
            case WageType.FixedWage:
                wageText = WagePresenter
                           .GetDisplayText(SFA.DAS.VacancyServices.Wage.WageType.Custom, WageUnit.Annually, wageDetails)
                           .AsWholeMoneyAmount();
                break;

            case WageType.NationalMinimumWage:
                wageText = WagePresenter
                           .GetDisplayText(SFA.DAS.VacancyServices.Wage.WageType.NationalMinimum, WageUnit.Annually, wageDetails)
                           .AsWholeMoneyAmount();
                break;

            case WageType.NationalMinimumWageForApprentices:
                wageText = WagePresenter
                           .GetDisplayText(SFA.DAS.VacancyServices.Wage.WageType.ApprenticeshipMinimum, WageUnit.Annually, wageDetails)
                           .AsWholeMoneyAmount();
                break;

            default:
                wageText = wage.WageType?.GetDisplayName();
                break;
            }

            return(wageText);
        }