private async Task <IActionResult> PerformSaveSection(ProviderDetailViewModel viewModel) { var isNew = viewModel.Id == 0; if (!isNew) { await _providerService.UpdateProviderDetailSectionAsync(viewModel); } if (!viewModel.IsCdfProvider) { return(RedirectToRoute("SearchProvider")); } if (isNew) { return(RedirectToAction(nameof(AddProviderDetail), new AddProviderViewModel { UkPrn = viewModel.UkPrn, Name = viewModel.Name })); } return(RedirectToRoute("GetProviderDetail", new { providerId = viewModel.Id })); }
public async Task UpdateProviderDetailAsync(ProviderDetailViewModel viewModel) { var trackedEntity = await _repository.GetSingleOrDefaultAsync(p => p.Id == viewModel.Id); trackedEntity = _mapper.Map(viewModel, trackedEntity); await _repository.UpdateAsync(trackedEntity); }
public async Task <IActionResult> SaveProviderDetailAsync(ProviderDetailViewModel viewModel) { if (viewModel.IsSaveSection) { return(await PerformSaveSection(viewModel)); } return(await SaveProvider(viewModel)); }
public async Task UpdateProviderDetailSectionAsync(ProviderDetailViewModel viewModel) { var provider = _mapper.Map <ProviderDetailViewModel, Provider>(viewModel); await _repository.UpdateWithSpecifiedColumnsOnlyAsync(provider, x => x.IsCdfProvider, x => x.ModifiedOn, x => x.ModifiedBy); }
public async Task <IActionResult> GetProviderDetailAsync(int providerId) { var viewModel = new ProviderDetailViewModel(); if (providerId > 0) { viewModel = await _providerService.GetProviderDetailByIdAsync(providerId); } return(View("ProviderDetail", viewModel)); }
private async Task <IActionResult> PerformSaveAndFinish(ProviderDetailViewModel viewModel) { if (!viewModel.ProviderVenues.Any()) { ModelState.AddModelError(nameof(ProviderVenue), "You must add a venue for this provider"); return(View("ProviderDetail", viewModel)); } await _providerService.UpdateProviderDetailAsync(viewModel); return(RedirectToAction("SearchProvider")); }
public When_ProviderService_Is_Called_To_Update_Provider_Detail() { var httpContextAccessor = Substitute.For <IHttpContextAccessor>(); httpContextAccessor.HttpContext.Returns(new DefaultHttpContext { User = new ClaimsPrincipal(new ClaimsIdentity(new[] { new Claim(ClaimTypes.GivenName, "TestUser") })) }); var dateTimeProvider = Substitute.For <IDateTimeProvider>(); dateTimeProvider.UtcNow().Returns(new DateTime(2019, 1, 1)); var config = new MapperConfiguration(c => { c.AddMaps(typeof(ProviderMapper).Assembly); c.ConstructServicesUsing(type => type.Name.Contains("LoggedInUserEmailResolver") ? new LoggedInUserEmailResolver <ProviderDetailViewModel, Domain.Models.Provider>(httpContextAccessor) : type.Name.Contains("LoggedInUserNameResolver") ? (object)new LoggedInUserNameResolver <ProviderDetailViewModel, Domain.Models.Provider>(httpContextAccessor) : type.Name.Contains("UtcNowResolver") ? new UtcNowResolver <ProviderDetailViewModel, Domain.Models.Provider>(dateTimeProvider) : null); }); var mapper = new Mapper(config); _repository = Substitute.For <IRepository <Domain.Models.Provider> >(); _repository.GetSingleOrDefaultAsync(Arg.Any <Expression <Func <Domain.Models.Provider, bool> > >()) .Returns(new ValidProviderBuilder().Build()); var referenceRepository = Substitute.For <IRepository <ProviderReference> >(); var providerService = new ProviderService(mapper, _repository, referenceRepository); var viewModel = new ProviderDetailViewModel { Id = 1, UkPrn = 123, Name = "ProviderName", DisplayName = "display name" }; providerService.UpdateProviderDetailAsync(viewModel).GetAwaiter().GetResult(); }
public static ProviderDetailViewModel GetProviderDetailViewModel(Provider provider, ApprenticeshipTrainingSummary apprenticeshipTrainingSummary, IEnumerable <long> hideAboutThisProviderForUlns = null, string searchTerm = null) { hideAboutThisProviderForUlns = hideAboutThisProviderForUlns ?? new List <long>(); var employerSatisfationMessage = (provider.EmployerSatisfaction > 0) ? ProviderMappingHelper.GetPercentageText(provider.EmployerSatisfaction) : ProviderMappingHelper.GetPercentageText(null); var learnerSatisfationMessage = (provider.LearnerSatisfaction > 0) ? ProviderMappingHelper.GetPercentageText(provider.LearnerSatisfaction) : ProviderMappingHelper.GetPercentageText(null); var viewModel = new ProviderDetailViewModel { DisplayAboutThisProvider = !hideAboutThisProviderForUlns.Contains(provider.Ukprn), Email = provider.Email, CurrentlyNotStartingNewApprentices = provider.CurrentlyNotStartingNewApprentices, IsEmployerProvider = provider.IsEmployerProvider, EmployerSatisfaction = provider.EmployerSatisfaction, EmployerSatisfactionMessage = employerSatisfationMessage, IsHigherEducationInstitute = provider.IsHigherEducationInstitute, LearnerSatisfaction = provider.LearnerSatisfaction, LearnerSatisfactionMessage = learnerSatisfationMessage, NationalProvider = provider.NationalProvider, Phone = provider.Phone, UkPrn = provider.Ukprn, ProviderName = provider.ProviderName, Website = provider.Website, MarketingInfo = provider.MarketingInfo, ApprenticeshipTrainingSummary = apprenticeshipTrainingSummary, HasParentCompanyGuarantee = provider.HasParentCompanyGuarantee, IsNew = provider.IsNew, IsLevyPayerOnly = provider.IsLevyPayerOnly, SearchTerm = searchTerm, ProviderFeedback = Is <ProviderFeedbackFeature> .Enabled && provider.ProviderFeedback != null ? new FeedbackViewModel(provider.ProviderFeedback) : (FeedbackViewModel)null }; if (provider.Aliases != null && provider.Aliases.Any()) { viewModel.TradingNames = provider.Aliases.Aggregate((aggregatingTradingNames, aliasToAdd) => aggregatingTradingNames + ", " + aliasToAdd); } return(viewModel); }
public When_ProviderService_Is_Called_To_Get_Provider_Detail_By_Id() { var config = new MapperConfiguration(c => c.AddMaps(typeof(ProviderMapper).Assembly)); var mapper = new Mapper(config); var logger = Substitute.For <ILogger <ProviderRepository> >(); var providerReferenceRepository = Substitute.For <IRepository <ProviderReference> >(); using var dbContext = InMemoryDbContext.Create(); dbContext.Add(new ValidProviderBuilder() .Build()); dbContext.SaveChanges(); var providerRepository = new ProviderRepository(logger, dbContext); var service = new ProviderService(mapper, providerRepository, providerReferenceRepository); _result = service.GetProviderDetailByIdAsync(1).GetAwaiter().GetResult(); }
private async Task <IActionResult> SaveProvider(ProviderDetailViewModel viewModel) { if (!ModelState.IsValid) { return(View("ProviderDetail", viewModel)); } if (!viewModel.IsSaveAndAddVenue) { return(await PerformSaveAndFinish(viewModel)); } var providerId = viewModel.Id; await _providerService.UpdateProviderDetailAsync(viewModel); return(RedirectToRoute("AddProviderVenue", new { providerId })); }
private static (bool IsUpdated, ProviderDetailViewModel ProviderDetailViewModel) ValidateProviderToUpdate(ProviderDetailViewModel providerDetailViewModel, ProviderVenueQualificationDto providerVenueQualification) { var isUpdated = false; if (ValidateToUpdate(providerDetailViewModel.Name, providerVenueQualification.Name)) { providerDetailViewModel.Name = providerVenueQualification.Name; isUpdated = true; } if (ValidateToUpdate(providerDetailViewModel.DisplayName, providerVenueQualification.DisplayName)) { providerDetailViewModel.DisplayName = providerVenueQualification.DisplayName; isUpdated = true; } if (ValidateToUpdate(providerDetailViewModel.PrimaryContact, providerVenueQualification.PrimaryContact)) { providerDetailViewModel.PrimaryContact = providerVenueQualification.PrimaryContact; isUpdated = true; } if (ValidateToUpdate(providerDetailViewModel.PrimaryContactEmail, providerVenueQualification.PrimaryContactEmail)) { providerDetailViewModel.PrimaryContactEmail = providerVenueQualification.PrimaryContactEmail; isUpdated = true; } if (ValidateToUpdate(providerDetailViewModel.PrimaryContactPhone, providerVenueQualification.PrimaryContactPhone)) { providerDetailViewModel.PrimaryContactPhone = providerVenueQualification.PrimaryContactPhone; isUpdated = true; } if (ValidateToUpdate(providerDetailViewModel.SecondaryContact, providerVenueQualification.SecondaryContact)) { providerDetailViewModel.SecondaryContact = providerVenueQualification.SecondaryContact; isUpdated = true; } if (ValidateToUpdate(providerDetailViewModel.SecondaryContactEmail, providerVenueQualification.SecondaryContactEmail)) { providerDetailViewModel.SecondaryContactEmail = providerVenueQualification.SecondaryContactEmail; isUpdated = true; } if (ValidateToUpdate(providerDetailViewModel.SecondaryContactPhone, providerVenueQualification.SecondaryContactPhone)) { providerDetailViewModel.SecondaryContactPhone = providerVenueQualification.SecondaryContactPhone; isUpdated = true; } if (!providerDetailViewModel.IsEnabledForReferral.HasValue || providerDetailViewModel.IsEnabledForReferral.Value != providerVenueQualification.IsEnabledForReferral) { providerDetailViewModel.IsEnabledForReferral = providerVenueQualification.IsEnabledForReferral; isUpdated = true; } if (providerDetailViewModel.IsCdfProvider != providerVenueQualification.IsCdfProvider) { providerDetailViewModel.IsCdfProvider = providerVenueQualification.IsCdfProvider; isUpdated = true; } return(isUpdated, providerDetailViewModel); }
public async Task Then_Make_TLevel_Provider_Flag_To_True( MatchingDbContext dbContext, Domain.Models.Provider provider, List <ProviderVenueViewModel> venueViewModels, MatchingConfiguration config, ILogger <GenericRepository <Domain.Models.Provider> > providerLogger, ILogger <GenericRepository <ProviderReference> > providerReferenceLogger, IHttpContextAccessor httpContextAccessor, IDateTimeProvider dateTimeProvider ) { //Arrange provider.IsTLevelProvider = false; await dbContext.AddAsync(provider); await dbContext.SaveChangesAsync(); dbContext.Entry(provider).State = EntityState.Detached; var viewModel = new ProviderDetailViewModel { Id = provider.Id, IsTLevelProvider = true, ProviderVenues = venueViewModels }; httpContextAccessor.HttpContext.Returns(new DefaultHttpContext { User = new ClaimsPrincipal(new ClaimsIdentity(new[] { new Claim(ClaimTypes.GivenName, "System") })) }); var mapperConfig = new MapperConfiguration(c => { c.AddMaps(typeof(ProviderMapper).Assembly); c.ConstructServicesUsing(type => type.Name.Contains("LoggedInUserNameResolver") ? (object)new LoggedInUserNameResolver <ProviderDetailViewModel, Domain.Models.Provider>(httpContextAccessor) : type.Name.Contains("UtcNowResolver") ? new UtcNowResolver <ProviderDetailViewModel, Domain.Models.Provider>(dateTimeProvider) : null); }); var mapper = new Mapper(mapperConfig); var providerReferenceRepo = new GenericRepository <ProviderReference>(providerReferenceLogger, dbContext); var repo = new GenericRepository <Domain.Models.Provider>(providerLogger, dbContext); var providerService = new ProviderService(mapper, repo, providerReferenceRepo); var sut = new ProviderController(providerService, config); //Act await sut.SaveProviderDetailAsync(viewModel); //Assert var result = await repo.GetSingleOrDefaultAsync(x => x.Id == provider.Id); provider.IsTLevelProvider.Should().BeFalse(); result.IsTLevelProvider.Should().BeTrue(); }