public async Task <AuthorizationResult> GetAuthorizationResult(IReadOnlyCollection <string> options, IAuthorizationContext authorizationContext) { var authorizationResult = new AuthorizationResult(); if (options.Count > 0) { options.EnsureNoAndOptions(); options.EnsureNoOrOptions(); var feature = options.Single(); var featureToggle = _featureTogglesService.GetFeatureToggle(feature); if (featureToggle.EnabledByAgreementVersion.GetValueOrDefault(0) > 0) { var(accountId, _) = authorizationContext.GetEmployerFeatureValues(); var agreements = await _mediator.SendAsync(new GetEmployerAgreementsByAccountIdRequest { AccountId = accountId.GetValueOrDefault(0) }).ConfigureAwait(false); var minAgreementVersion = agreements.EmployerAgreements.Select(ea => ea.AccountLegalEntity.SignedAgreementVersion.GetValueOrDefault(0)).Min(); if (minAgreementVersion < featureToggle.EnabledByAgreementVersion) { authorizationResult.AddError(new EmployerFeatureAgreementNotSigned()); } } } return(authorizationResult); }
public IActionResult SelectAddDraftApprenticeshipJourney(SelectAddDraftApprenticeshipJourneyRequest request) { var model = new SelectAddDraftApprenticeshipJourneyViewModel { ProviderId = request.ProviderId, IsBulkUploadV2Enabled = _featureTogglesService.GetFeatureToggle(ProviderFeature.BulkUploadV2WithoutPrefix).IsEnabled }; return(View(model)); }
public async Task<DetailsViewModel> Map(DetailsRequest source) { try { var isChangeOfEmployerEnabled = _featureTogglesService.GetFeatureToggle(nameof(ProviderFeature.ChangeOfEmployer))?.IsEnabled ?? false; var data = await GetApprenticeshipData(source.ApprenticeshipId); var dataLockSummaryStatus = data.DataLocks.DataLocks.GetDataLockSummaryStatus(); var allowEditApprentice = (data.Apprenticeship.Status == ApprenticeshipStatus.Live || data.Apprenticeship.Status == ApprenticeshipStatus.WaitingToStart || data.Apprenticeship.Status == ApprenticeshipStatus.Paused) && !data.HasProviderUpdates && !data.HasEmployerUpdates && dataLockSummaryStatus == DetailsViewModel.DataLockSummaryStatus.None; var pendingChangeOfPartyRequest = data.ChangeOfPartyRequests.ChangeOfPartyRequests.SingleOrDefault(x => x.OriginatingParty == Party.Provider && x.Status == ChangeOfPartyRequestStatus.Pending); var approvedChangeOfPartyRequest = data.ChangeOfPartyRequests.ChangeOfPartyRequests.SingleOrDefault(x => x.OriginatingParty == Party.Provider && x.Status == ChangeOfPartyRequestStatus.Approved); var pendingChangeOfProviderRequest = data.ChangeOfPartyRequests.ChangeOfPartyRequests.SingleOrDefault(x => x.OriginatingParty == Party.Employer && x.Status == ChangeOfPartyRequestStatus.Pending); return new DetailsViewModel { ProviderId = source.ProviderId, ApprenticeshipHashedId = source.ApprenticeshipHashedId, ApprenticeName = $"{data.Apprenticeship.FirstName} {data.Apprenticeship.LastName}", Employer = data.Apprenticeship.EmployerName, Reference = _encodingService.Encode(data.Apprenticeship.CohortId, EncodingType.CohortReference), Status = data.Apprenticeship.Status, StopDate = data.Apprenticeship.StopDate, AgreementId = _encodingService.Encode(data.Apprenticeship.AccountLegalEntityId, EncodingType.PublicAccountLegalEntityId), DateOfBirth = data.Apprenticeship.DateOfBirth, Uln = data.Apprenticeship.Uln, CourseName = data.Apprenticeship.CourseName, StartDate = data.Apprenticeship.StartDate, EndDate = data.Apprenticeship.EndDate, ProviderRef = data.Apprenticeship.ProviderReference, Cost = data.PriceEpisodes.PriceEpisodes.GetPrice(), AllowEditApprentice = allowEditApprentice, HasProviderPendingUpdate = data.HasProviderUpdates, HasEmployerPendingUpdate = data.HasEmployerUpdates, DataLockStatus = dataLockSummaryStatus, AvailableTriageOption = CalcTriageStatus(data.Apprenticeship.HasHadDataLockSuccess, data.DataLocks.DataLocks), IsChangeOfEmployerEnabled = isChangeOfEmployerEnabled && !data.ChangeOfPartyRequests.ChangeOfPartyRequests.Any(x => x.OriginatingParty == Party.Provider && (x.Status == ChangeOfPartyRequestStatus.Approved || x.Status == ChangeOfPartyRequestStatus.Pending)), PauseDate = data.Apprenticeship.PauseDate, CompletionDate = data.Apprenticeship.CompletionDate, HasPendingChangeOfPartyRequest = pendingChangeOfPartyRequest != null, PendingChangeOfPartyRequestWithParty = pendingChangeOfPartyRequest?.WithParty, HasApprovedChangeOfPartyRequest = approvedChangeOfPartyRequest != null, HasPendingChangeOfProviderRequest = pendingChangeOfProviderRequest != null, EncodedNewApprenticeshipId = approvedChangeOfPartyRequest?.NewApprenticeshipId != null ? _encodingService.Encode(approvedChangeOfPartyRequest.NewApprenticeshipId.Value, EncodingType.ApprenticeshipId) : null, IsContinuation = data.Apprenticeship.IsContinuation && data.Apprenticeship.PreviousProviderId == source.ProviderId, HasContinuation = data.Apprenticeship.HasContinuation, EncodedPreviousApprenticeshipId = data.Apprenticeship.ContinuationOfId.HasValue && data.Apprenticeship.PreviousProviderId == source.ProviderId ? _encodingService.Encode(data.Apprenticeship.ContinuationOfId.Value, EncodingType.ApprenticeshipId) : null }; } catch (Exception e) { _logger.LogError(e, $"Error mapping apprenticeship {source.ApprenticeshipId} to DetailsViewModel"); throw; } }