private async Task <IActionResult> DisplayNewAgreementRequiredShutterPage(EmploymentStartDatesRequest request)
        {
            var legalEntityName = await GetLegalEntityName(request.AccountId, request.AccountLegalEntityId);

            var viewModel = new NewAgreementRequiredViewModel(legalEntityName, request.AccountId, request.ApplicationId,
                                                              _configuration.ManageApprenticeshipSiteUrl);

            return(View("NewAgreementRequired", viewModel));
        }
Example #2
0
        public IEnumerable <DateValidationResult> Validate(EmploymentStartDatesRequest request)
        {
            var validationErrors = new List <DateValidationResult>();

            if (request.EmploymentStartDateDays.Count == 0 ||
                request.EmploymentStartDateMonths.Count == 0 ||
                request.EmploymentStartDateYears.Count == 0)
            {
                validationErrors.Add(new DateValidationResult {
                    Index = 0, ValidationMessage = InvalidFieldErrorMessage
                });
                return(validationErrors);
            }

            for (var index = 0; index < request.EmploymentStartDateDays.Count; index++)
            {
                if (!request.EmploymentStartDateDays[index].HasValue ||
                    !request.EmploymentStartDateMonths[index].HasValue ||
                    !request.EmploymentStartDateYears[index].HasValue)
                {
                    validationErrors.Add(new DateValidationResult {
                        Index = index, ValidationMessage = InvalidFieldErrorMessage
                    });
                }
                else if (request.EmploymentStartDateDays[index].Value == 0 ||
                         request.EmploymentStartDateMonths[index].Value == 0 ||
                         request.EmploymentStartDateYears[index].Value == 0)
                {
                    validationErrors.Add(new DateValidationResult {
                        Index = index, ValidationMessage = InvalidFieldErrorMessage
                    });
                }
                else if (request.EmploymentStartDateYears[index] < SchemeStartYear)
                {
                    validationErrors.Add(new DateValidationResult {
                        Index = index, ValidationMessage = InvalidFieldErrorMessage
                    });
                }
                else if (request.EmploymentStartDateMonths[index] > 12)
                {
                    validationErrors.Add(new DateValidationResult {
                        Index = index, ValidationMessage = InvalidFieldErrorMessage
                    });
                }
                else if (request.EmploymentStartDateDays[index] > DateTime.DaysInMonth(request.EmploymentStartDateYears[index].Value, request.EmploymentStartDateMonths[index].Value))
                {
                    validationErrors.Add(new DateValidationResult {
                        Index = index, ValidationMessage = InvalidFieldErrorMessage
                    });
                }
            }

            return(validationErrors);
        }
 public void Arrange()
 {
     _fixture       = new Fixture();
     _accountId     = _fixture.Create <string>();
     _applicationId = Guid.NewGuid();
     _request       = new EmploymentStartDatesRequest
     {
         AccountId                 = _accountId,
         ApplicationId             = _applicationId,
         EmploymentStartDateDays   = new List <int?>(),
         EmploymentStartDateMonths = new List <int?>(),
         EmploymentStartDateYears  = new List <int?>()
     };
 }
        public async Task <IActionResult> SubmitEmploymentStartDates(EmploymentStartDatesRequest request)
        {
            var application = await _applicationService.Get(request.AccountId, request.ApplicationId, includeApprenticeships : true);

            if (application == null)
            {
                return(RedirectToAction("Home", "Home", new { request.AccountId }));
            }
            var validationResults = _employmentStartDateValidator.Validate(request).ToList();

            if (validationResults.Any())
            {
                var legalEntityName = await GetLegalEntityName(request.AccountId, application.AccountLegalEntityId);

                var model = new EmploymentStartDatesViewModel
                {
                    AccountId             = request.AccountId,
                    ApplicationId         = request.ApplicationId,
                    OrganisationName      = legalEntityName,
                    Apprentices           = PopulateStartDates(application.Apprentices.OrderBy(x => x.FullName).ToList(), request),
                    DateValidationResults = validationResults.ToList()
                };
                return(View("EmploymentStartDates", model));
            }

            var confirmEmploymentDetailsRequest = CreateEmploymentDetailsRequest(application, request);

            await _applicationService.SaveApprenticeshipDetails(confirmEmploymentDetailsRequest);

            application = await _applicationService.Get(request.AccountId, request.ApplicationId, includeApprenticeships : false);

            if (application.NewAgreementRequired)
            {
                request.AccountLegalEntityId = application.AccountLegalEntityId;
                return(await DisplayNewAgreementRequiredShutterPage(request));
            }

            return(RedirectToAction("ConfirmApprenticeships", "ApplyApprenticeships", new { request.AccountId, request.ApplicationId }));
        }
        private ApprenticeshipDetailsRequest CreateEmploymentDetailsRequest(ApplicationModel application, EmploymentStartDatesRequest request)
        {
            var confirmRequest = new ApprenticeshipDetailsRequest
            {
                AccountId             = _hashingService.DecodeValue(application.AccountId),
                ApplicationId         = application.ApplicationId,
                ApprenticeshipDetails = new List <ApprenticeshipDetailsDto>()
            };

            for (var index = 0; index < request.EmploymentStartDateDays.Count; index++)
            {
                var employmentStartDate = new DateTime(request.EmploymentStartDateYears[index].Value, request.EmploymentStartDateMonths[index].Value, request.EmploymentStartDateDays[index].Value);
                var employmentDetails   = new ApprenticeshipDetailsDto
                {
                    ApprenticeId        = _hashingService.DecodeValue(request.ApprenticeshipIds[index]),
                    EmploymentStartDate = employmentStartDate
                };
                confirmRequest.ApprenticeshipDetails.Add(employmentDetails);
            }

            return(confirmRequest);
        }
        private List <ApplicationApprenticeshipModel> PopulateStartDates(List <ApplicationApprenticeshipModel> apprentices, EmploymentStartDatesRequest request)
        {
            // dates may be partially filled out so find the column with the most values
            var startDateCount = new List <int>
            {
                request.EmploymentStartDateDays.Count,
                request.EmploymentStartDateMonths.Count,
                request.EmploymentStartDateYears.Count
            }.Max();

            for (var index = 0; index < startDateCount; index++)
            {
                var apprentice = apprentices.Single(x => x.ApprenticeshipId == request.ApprenticeshipIds[index]);
                if (request.EmploymentStartDateDays.Count > index)
                {
                    apprentice.EmploymentStartDateDay = request.EmploymentStartDateDays[index];
                }
                if (request.EmploymentStartDateMonths.Count > index)
                {
                    apprentice.EmploymentStartDateMonth = request.EmploymentStartDateMonths[index];
                }
                if (request.EmploymentStartDateYears.Count > index)
                {
                    apprentice.EmploymentStartDateYear = request.EmploymentStartDateYears[index];
                }
            }

            return(apprentices);
        }