public async Task <IActionResult> CreateVenueAsync(AddProviderVenueViewModel viewModel)
        {
            if (!ModelState.IsValid)
            {
                return(View("AddProviderVenue", viewModel));
            }

            var(isValid, formattedPostcode) = await _providerVenueService.IsValidPostcodeAsync(viewModel.Postcode);

            viewModel.Postcode = formattedPostcode;

            if (string.IsNullOrWhiteSpace(viewModel.Postcode) || !isValid)
            {
                ModelState.AddModelError("Postcode", "You must enter a real postcode");
                return(View("AddProviderVenue", viewModel));
            }

            var venue = await _providerVenueService.GetVenueAsync(viewModel.ProviderId, viewModel.Postcode);

            int venueId;

            if (venue != null)
            {
                venueId = venue.Id;
            }
            else
            {
                venueId = await _providerVenueService.CreateVenueAsync(viewModel);
            }

            return(RedirectToRoute("GetProviderVenueDetail", new { providerVenueId = venueId }));
        }
Esempio n. 2
0
        private async Task <ProviderVenueDetailViewModel> CreateOrUpdateProviderVenueAsync(ProviderVenueQualificationDto providerVenueQualification, int providerId)
        {
            if (string.IsNullOrEmpty(providerVenueQualification.VenuePostcode))
            {
                return(null);
            }

            var venueViewModel = await _providerVenueService.GetVenueWithTrimmedPostcodeAsync(providerId,
                                                                                              providerVenueQualification.VenuePostcode);

            if (venueViewModel == null)
            {
                var addProviderVenue = new AddProviderVenueViewModel
                {
                    ProviderId = providerId,
                    Postcode   = providerVenueQualification.VenuePostcode,
                    Source     = Source
                };

                var venueId = await _providerVenueService.CreateVenueAsync(addProviderVenue);

                Debug.WriteLine(
                    $"Created venue with id {venueId} for provider {providerId} and postcode {providerVenueQualification.VenuePostcode}");

                venueViewModel = await _providerVenueService.GetVenueAsync(venueId);
            }

            var providerVenueValidator = ValidateProviderVenueToUpdate(venueViewModel, providerVenueQualification);

            if (providerVenueValidator.IsUpdated)
            {
                await _providerVenueService.UpdateVenueAsync(providerVenueValidator.ProviderVenueDetailViewModel);
            }

            // Provider Venue Delete
            if (venueViewModel.IsRemoved != providerVenueQualification.VenueIsRemoved)
            {
                var removeProviderVenueViewModel = new RemoveProviderVenueViewModel
                {
                    Postcode        = venueViewModel.Postcode,
                    ProviderId      = venueViewModel.ProviderId,
                    ProviderVenueId = venueViewModel.Id
                };

                if (providerVenueQualification.VenueIsRemoved)
                {
                    await _providerVenueService.UpdateVenueAsync(removeProviderVenueViewModel);
                }
                else
                {
                    await _providerVenueService.UpdateVenueToNotRemovedAsync(removeProviderVenueViewModel);
                }
            }

            return(venueViewModel);
        }
        private async Task GetGeoLocationDataAsync(AddProviderVenueViewModel viewModel, ProviderVenue providerVenue)
        {
            var geoLocationData = await _locationApiClient.GetGeoLocationDataAsync(viewModel.Postcode, true);

            providerVenue.Postcode  = geoLocationData.Postcode;
            providerVenue.Latitude  = geoLocationData.Latitude.ToDecimal();
            providerVenue.Longitude = geoLocationData.Longitude.ToDecimal();

            var geometryFactory = NtsGeometryServices.Instance.CreateGeometryFactory(4326);

            providerVenue.Location = geometryFactory.CreatePoint(new Coordinate(double.Parse(geoLocationData.Longitude), double.Parse(geoLocationData.Latitude)));
        }
Esempio n. 4
0
        public When_ProviderVenue_Add_Has_Invalid_Postcode()
        {
            _providerVenueService = Substitute.For <IProviderVenueService>();
            _providerVenueService.IsValidPostcodeAsync("CV1 2WT").Returns((false, "CV1 2WT"));
            var providerVenueController = new ProviderVenueController(_providerVenueService);

            var viewModel = new AddProviderVenueViewModel
            {
                Postcode = "CV1 2WT"
            };

            _result = providerVenueController.CreateVenueAsync(viewModel).GetAwaiter().GetResult();
        }
        public async Task <int> CreateVenueAsync(AddProviderVenueViewModel viewModel)
        {
            var providerVenue = _mapper.Map <ProviderVenue>(viewModel);

            await GetGeoLocationDataAsync(viewModel, providerVenue);

            await GetGoogleAddressDetailsAsync(providerVenue);

            if (string.IsNullOrWhiteSpace(providerVenue.Name))
            {
                providerVenue.Name = providerVenue.Postcode;
            }

            return(await _providerVenueRepository.CreateAsync(providerVenue));
        }
        public When_ProviderVenueService_Is_Called_To_Create_Venue()
        {
            var httpContextAccessor = Substitute.For <IHttpContextAccessor>();

            var config = new MapperConfiguration(c =>
            {
                c.AddMaps(typeof(ProviderVenueMapper).Assembly);
                c.ConstructServicesUsing(type =>
                                         type.Name.Contains("LoggedInUserEmailResolver") ?
                                         new LoggedInUserEmailResolver <AddProviderVenueViewModel, Domain.Models.ProviderVenue>(httpContextAccessor) :
                                         type.Name.Contains("LoggedInUserNameResolver") ?
                                         (object)new LoggedInUserNameResolver <AddProviderVenueViewModel, Domain.Models.ProviderVenue>(httpContextAccessor) :
                                         type.Name.Contains("UtcNowResolver") ?
                                         new UtcNowResolver <AddProviderVenueViewModel, Domain.Models.ProviderVenue>(new DateTimeProvider()) :
                                         null);
            });
            var mapper = new Mapper(config);

            _providerVenueRepository = Substitute.For <IProviderVenueRepository>();

            _providerVenueRepository.GetSingleOrDefaultAsync(Arg.Any <Expression <Func <Domain.Models.ProviderVenue, bool> > >())
            .Returns(new Domain.Models.ProviderVenue());

            _locationApiClient = Substitute.For <ILocationApiClient>();
            _locationApiClient.GetGeoLocationDataAsync(UnFormattedPostcode, true).Returns(new PostcodeLookupResultDto
            {
                Postcode  = FormattedPostcode,
                Longitude = "1.2",
                Latitude  = "1.2"
            });

            _googleMapApiClient = Substitute.For <IGoogleMapApiClient>();
            _googleMapApiClient.GetAddressDetailsAsync(Arg.Is <string>(s => s == FormattedPostcode)).Returns("Coventry");

            var providerVenueService = new ProviderVenueService(mapper, _providerVenueRepository, _locationApiClient, _googleMapApiClient);

            var viewModel = new AddProviderVenueViewModel
            {
                Postcode = UnFormattedPostcode
            };

            providerVenueService.CreateVenueAsync(viewModel).GetAwaiter().GetResult();
        }
Esempio n. 7
0
        public When_ProviderVenue_Add_Venue_Does_Not_Exist()
        {
            _providerVenueService = Substitute.For <IProviderVenueService>();
            _providerVenueService.IsValidPostcodeAsync("CV1 2WT").Returns((true, "CV1 2WT"));
            _providerVenueService.GetVenueAsync(1, "CV1 2WT").ReturnsNull();
            _providerVenueService.CreateVenueAsync(Arg.Any <AddProviderVenueViewModel>()).Returns(1);

            var providerVenueController = new ProviderVenueController(_providerVenueService);
            var controllerWithClaims    = new ClaimsBuilder <ProviderVenueController>(providerVenueController)
                                          .AddUserName("username")
                                          .AddEmail("*****@*****.**")
                                          .Build();

            var viewModel = new AddProviderVenueViewModel
            {
                ProviderId = 1,
                Postcode   = "CV1 2WT"
            };

            _result = controllerWithClaims.CreateVenueAsync(viewModel).GetAwaiter().GetResult();
        }