public async Task HandleAsync_GivenSiteAddressDataInRequest_AddressDataShouldBeOfTypeSiteAddressData()
        {
            var request = CreateRequest();

            var value   = A.Fake <AatfAddress>();
            var country = new Country(A.Dummy <Guid>(), A.Dummy <string>());

            A.CallTo(() => genericDataAccess.GetById <AatfAddress>(request.SiteAddressData.Id)).Returns(value);
            A.CallTo(() => organisationDetailsDataAccess.FetchCountryAsync(request.SiteAddressData.CountryId)).Returns(country);

            await handler.HandleAsync(request);

            A.CallTo(() => offSiteDataAccess.Update(value, A <SiteAddressData> ._, country)).MustHaveHappened(Repeated.Exactly.Once);
        }
        public async Task HandleAsync_GivenMessageContainingUpdatedAddress_DetailsAreUpdatedCorrectly()
        {
            var updateRequest = new EditAatfSite()
            {
                AddressData = new SiteAddressData()
                {
                    Name           = "Name",
                    Address1       = "Address1",
                    Address2       = "Address2",
                    TownOrCity     = "Town",
                    CountyOrRegion = "County",
                    Postcode       = "Postcode",
                    CountryId      = Guid.NewGuid(),
                    Id             = Guid.NewGuid()
                }
            };

            var returnAdress = A.Fake <AatfAddress>();

            var country = new Country(A.Dummy <Guid>(), A.Dummy <string>());

            A.CallTo(() => organisationDetailsDataAccess.FetchCountryAsync(updateRequest.AddressData.CountryId)).Returns(country);
            A.CallTo(() => genericDataAccess.GetById <AatfAddress>(updateRequest.AddressData.Id)).Returns(returnAdress);

            await handler.HandleAsync(updateRequest);

            A.CallTo(() => aatfSiteDataAccess.Update(returnAdress, updateRequest.AddressData, country)).MustHaveHappened(Repeated.Exactly.Once);
        }
示例#3
0
        public async Task <bool> HandleAsync(AddAatfSite message)
        {
            authorization.EnsureCanAccessExternalArea();

            Country country = await organisationDetailsDataAccess.FetchCountryAsync(message.AddressData.CountryId);

            var address = new AatfAddress(
                message.AddressData.Name,
                message.AddressData.Address1,
                message.AddressData.Address2,
                message.AddressData.TownOrCity,
                message.AddressData.CountyOrRegion,
                message.AddressData.Postcode,
                country);

            var weeeReused = await genericDataAccess.GetManyByExpression <WeeeReused>(new WeeeReusedByAatfIdAndReturnIdSpecification(message.AatfId, message.ReturnId));

            var weeeReusedSite = new WeeeReusedSite(
                weeeReused.Last(),
                address);

            await offSiteDataAccess.Submit(weeeReusedSite);

            return(true);
        }
示例#4
0
        public async Task HandleAsync_WithValidInput_SubmitIsCalledCorrectly()
        {
            var siteRequest = AddAatfSiteRequest();
            var weeReused   = new WeeeReused(siteRequest.AatfId, siteRequest.ReturnId);
            var country     = new Country(A.Dummy <Guid>(), A.Dummy <string>());

            A.CallTo(() => organisationDetailsDataAccess.FetchCountryAsync(siteRequest.AddressData.CountryId)).Returns(country);
            A.CallTo(() => genericDataAccess.GetManyByExpression(
                         A <WeeeReusedByAatfIdAndReturnIdSpecification> .That.Matches(w =>
                                                                                      w.AatfId == siteRequest.AatfId && w.ReturnId == siteRequest.ReturnId))).Returns(new List <WeeeReused>()
            {
                weeReused
            });

            await handler.HandleAsync(siteRequest);

            A.CallTo(() => addAatfSiteDataAccess.Submit(A <WeeeReusedSite> .That.Matches(w =>
                                                                                         w.Address.Address1.Equals(siteRequest.AddressData.Address1) &&
                                                                                         w.Address.Address2.Equals(siteRequest.AddressData.Address2) &&
                                                                                         w.Address.CountyOrRegion.Equals(siteRequest.AddressData.CountyOrRegion) &&
                                                                                         w.Address.TownOrCity.Equals(siteRequest.AddressData.TownOrCity) &&
                                                                                         w.Address.Postcode.Equals(siteRequest.AddressData.Postcode) &&
                                                                                         w.Address.Country.Equals(country) &&
                                                                                         w.WeeeReused.Equals(weeReused)))).MustHaveHappened(Repeated.Exactly.Once);
        }
示例#5
0
        public async Task <Guid> HandleAsync(EditSentOnAatfSite message)
        {
            authorization.EnsureCanAccessExternalArea();

            var siteCountry = await organisationDetailsDataAccess.FetchCountryAsync(message.SiteAddressData.CountryId);

            var existingSiteAddress = await genericDataAccess.GetById <AatfAddress>(message.SiteAddressData.Id);

            var siteAddress = new SiteAddressData()
            {
                Name           = message.SiteAddressData.Name,
                Address1       = message.SiteAddressData.Address1,
                Address2       = message.SiteAddressData.Address2,
                TownOrCity     = message.SiteAddressData.TownOrCity,
                CountyOrRegion = message.SiteAddressData.CountyOrRegion,
                Postcode       = message.SiteAddressData.Postcode,
                CountryName    = message.SiteAddressData.CountryName,
                CountryId      = message.SiteAddressData.CountryId
            };

            await offSiteDataAccess.Update(existingSiteAddress, siteAddress, siteCountry);

            var operatorCountry = await organisationDetailsDataAccess.FetchCountryAsync(message.OperatorAddressData.CountryId);

            var existingOperatorAddress = await genericDataAccess.GetById <AatfAddress>(message.OperatorAddressData.Id);

            var operatorAddress = new OperatorAddressData()
            {
                Name           = message.OperatorAddressData.Name,
                Address1       = message.OperatorAddressData.Address1,
                Address2       = message.OperatorAddressData.Address2,
                TownOrCity     = message.OperatorAddressData.TownOrCity,
                CountyOrRegion = message.OperatorAddressData.CountyOrRegion,
                Postcode       = message.OperatorAddressData.Postcode,
                CountryName    = message.OperatorAddressData.CountryName,
                CountryId      = message.OperatorAddressData.CountryId
            };

            await offSiteDataAccess.Update(existingOperatorAddress, operatorAddress, operatorCountry);

            return(message.WeeeSentOnId);
        }
示例#6
0
        public async Task <bool> HandleAsync(EditAatfSite message)
        {
            authorization.EnsureCanAccessExternalArea();

            Country country = await organisationDetailsDataAccess.FetchCountryAsync(message.AddressData.CountryId);

            var value = await genericDataAccess.GetById <AatfAddress>(message.AddressData.Id);

            await offSiteDataAccess.Update(value, message.AddressData, country);

            return(true);
        }
        public async Task <bool> HandleAsync(UpdateSchemeContactDetails message)
        {
            authorization.EnsureInternalOrOrganisationAccess(message.SchemeData.OrganisationId);
            if (authorization.CheckCanAccessInternalArea())
            {
                authorization.EnsureUserInRole(Roles.InternalAdmin);
            }

            var scheme = await dataAccess.FetchSchemeAsync(message.SchemeData.OrganisationId);

            if (scheme == null)
            {
                var errorMessage = $"A scheme with organisation id \"{message.SchemeData.OrganisationId}\" could not be found.";

                throw new ArgumentException(errorMessage);
            }

            var contact = new Contact(
                message.SchemeData.Contact.FirstName,
                message.SchemeData.Contact.LastName,
                message.SchemeData.Contact.Position);

            var contactChanged = !contact.Equals(scheme.Contact);

            scheme.AddOrUpdateMainContactPerson(contact);

            var country = await dataAccess.FetchCountryAsync(message.SchemeData.Address.CountryId);

            var address = new Address(
                message.SchemeData.Address.Address1,
                message.SchemeData.Address.Address2,
                message.SchemeData.Address.TownOrCity,
                message.SchemeData.Address.CountyOrRegion,
                message.SchemeData.Address.Postcode,
                country,
                message.SchemeData.Address.Telephone,
                message.SchemeData.Address.Email);

            var schemeAddressChanged = !address.Equals(scheme.Address);

            scheme.AddOrUpdateAddress(address);

            await dataAccess.SaveAsync();

            if (message.SendNotificationOnChange &&
                (contactChanged || schemeAddressChanged) && scheme.CompetentAuthority != null)
            {
                await weeeEmailService.SendOrganisationContactDetailsChanged(scheme.CompetentAuthority.Email, scheme.SchemeName, EntityType.Pcs);
            }

            return(true);
        }
        public async Task <Guid> HandleAsync(AddSentOnAatfSite message)
        {
            authorization.EnsureCanAccessExternalArea();

            var siteCountry = await organisationDetailsDataAccess.FetchCountryAsync(message.SiteAddressData.CountryId);

            var operatorCountry = await organisationDetailsDataAccess.FetchCountryAsync(message.OperatorAddressData.CountryId);

            var @return = await returnDataAccess.GetById(message.ReturnId);

            var aatf = await genericDataAccess.GetById <Aatf>(message.AatfId);

            var siteAddress = new AatfAddress(
                message.SiteAddressData.Name,
                message.SiteAddressData.Address1,
                message.SiteAddressData.Address2,
                message.SiteAddressData.TownOrCity,
                message.SiteAddressData.CountyOrRegion,
                message.SiteAddressData.Postcode,
                siteCountry);

            var operatorAddress = new AatfAddress(
                message.OperatorAddressData.Name,
                message.OperatorAddressData.Address1,
                message.OperatorAddressData.Address2,
                message.OperatorAddressData.TownOrCity,
                message.OperatorAddressData.CountyOrRegion,
                message.OperatorAddressData.Postcode,
                operatorCountry);

            var weeeSentOn = new WeeeSentOn(operatorAddress, siteAddress, aatf, @return);

            await sentOnDataAccess.Submit(weeeSentOn);

            return(weeeSentOn.Id);
        }
        public async Task HandleAsync_WithValidInput_SubmitIsCalledCorrectly()
        {
            var siteRequest = AddSentOnAatfSiteRequest();
            var country     = new Country(A.Dummy <Guid>(), A.Dummy <string>());
            var countryOP   = new Country(A.Dummy <Guid>(), A.Dummy <string>());

            A.CallTo(() => organisationDetailsDataAccess.FetchCountryAsync(siteRequest.SiteAddressData.CountryId)).Returns(country);
            A.CallTo(() => organisationDetailsDataAccess.FetchCountryAsync(siteRequest.OperatorAddressData.CountryId)).Returns(countryOP);

            await handler.HandleAsync(siteRequest);

            A.CallTo(() => sentOnDataAccess.Submit(A <WeeeSentOn> .That.Matches(w => w.SiteAddress.Address1.Equals(siteRequest.SiteAddressData.Address1) &&
                                                                                w.SiteAddress.Address2.Equals(siteRequest.SiteAddressData.Address2) &&
                                                                                w.SiteAddress.CountyOrRegion.Equals(siteRequest.SiteAddressData.CountyOrRegion) &&
                                                                                w.SiteAddress.Postcode.Equals(siteRequest.SiteAddressData.Postcode) &&
                                                                                w.SiteAddress.TownOrCity.Equals(siteRequest.SiteAddressData.TownOrCity) &&
                                                                                w.SiteAddress.Country.Equals(country) &&
                                                                                w.OperatorAddress.Name.Equals(siteRequest.OperatorAddressData.Name) &&
                                                                                w.OperatorAddress.Address2.Equals(siteRequest.OperatorAddressData.Address2) &&
                                                                                w.OperatorAddress.CountyOrRegion.Equals(siteRequest.OperatorAddressData.CountyOrRegion) &&
                                                                                w.OperatorAddress.Postcode.Equals(siteRequest.OperatorAddressData.Postcode) &&
                                                                                w.OperatorAddress.TownOrCity.Equals(siteRequest.OperatorAddressData.TownOrCity) &&
                                                                                w.OperatorAddress.Country.Equals(countryOP)))).MustHaveHappened(Repeated.Exactly.Once);
        }
示例#10
0
        public async Task <Guid> HandleAsync(EditSentOnAatfSiteWithOperator message)
        {
            authorization.EnsureCanAccessExternalArea();

            var sentOn = await genericDataAccess.GetById <WeeeSentOn>((Guid)message.WeeeSentOnId);

            Country operatorCountry = await organisationDetailsDataAccess.FetchCountryAsync(message.OperatorAddressData.CountryId);

            var operatorAddress = new AatfAddress(
                message.OperatorAddressData.Name,
                message.OperatorAddressData.Address1,
                message.OperatorAddressData.Address2,
                message.OperatorAddressData.TownOrCity,
                message.OperatorAddressData.CountyOrRegion,
                message.OperatorAddressData.Postcode,
                operatorCountry);

            await sentOnDataAccess.UpdateWithOperatorAddress(sentOn, operatorAddress);

            return(sentOn.Id);
        }
        public async Task <bool> HandleAsync(UpdateOrganisationDetails message)
        {
            authorization.EnsureCanAccessInternalArea();
            authorization.EnsureUserInRole(Roles.InternalAdmin);

            Organisation organisation = await dataAccess.FetchOrganisationAsync(message.OrganisationData.Id);

            switch (message.OrganisationData.OrganisationType)
            {
            case Core.Organisations.OrganisationType.RegisteredCompany:
                organisation.UpdateRegisteredCompanyDetails(message.OrganisationData.Name, message.OrganisationData.CompanyRegistrationNumber, message.OrganisationData.TradingName);
                break;

            case Core.Organisations.OrganisationType.Partnership:
                organisation.UpdatePartnershipDetails(message.OrganisationData.TradingName);
                break;

            case Core.Organisations.OrganisationType.SoleTraderOrIndividual:
                organisation.UpdateSoleTraderDetails(message.OrganisationData.Name, message.OrganisationData.TradingName);
                break;
            }

            Country country = await dataAccess.FetchCountryAsync(message.OrganisationData.BusinessAddress.CountryId);

            Address address = new Address(
                message.OrganisationData.BusinessAddress.Address1,
                message.OrganisationData.BusinessAddress.Address2,
                message.OrganisationData.BusinessAddress.TownOrCity,
                message.OrganisationData.BusinessAddress.CountyOrRegion,
                message.OrganisationData.BusinessAddress.Postcode,
                country,
                message.OrganisationData.BusinessAddress.Telephone,
                message.OrganisationData.BusinessAddress.Email);

            organisation.AddOrUpdateAddress(AddressType.RegisteredOrPPBAddress, address);

            await dataAccess.SaveAsync();

            return(true);
        }
示例#12
0
        public async Task HandleAsync_GivenEditSentOnAatfSiteWithOperatorRequest_DataAccessIsCalled()
        {
            var request = new EditSentOnAatfSiteWithOperator()
            {
                WeeeSentOnId        = Guid.NewGuid(),
                OperatorAddressData = new OperatorAddressData()
                {
                    Name           = "OpName",
                    Address1       = "Address1",
                    Address2       = "Address2",
                    TownOrCity     = "Town",
                    CountyOrRegion = "County",
                    Postcode       = "GU22 7UY",
                    CountryId      = Guid.NewGuid()
                }
            };

            var weeeSentOn = new WeeeSentOn();
            var country    = new Country(A.Dummy <Guid>(), A.Dummy <string>());

            A.CallTo(() => genericDataAccess.GetById <WeeeSentOn>((Guid)request.WeeeSentOnId)).Returns(weeeSentOn);
            A.CallTo(() => orgDataAccess.FetchCountryAsync(request.OperatorAddressData.CountryId)).Returns(country);

            var operatorAddress = new AatfAddress(
                request.OperatorAddressData.Name,
                request.OperatorAddressData.Address1,
                request.OperatorAddressData.Address2,
                request.OperatorAddressData.TownOrCity,
                request.OperatorAddressData.CountyOrRegion,
                request.OperatorAddressData.Postcode,
                country);

            await handler.HandleAsync(request);

            A.CallTo(() => sentOnDataAccess.UpdateWithOperatorAddress(weeeSentOn, operatorAddress)).WhenArgumentsMatch(p => p.Get <AatfAddress>("request").Address1 == operatorAddress.Address1);
        }
        public async Task <bool> HandleAsync(EditAatfDetails message)
        {
            authorization.EnsureCanAccessInternalArea();
            authorization.EnsureUserInRole(Roles.InternalAdmin);

            using (var transaction = context.BeginTransaction())
            {
                try
                {
                    var updatedAddress = addressMapper.Map(message.Data.SiteAddress);

                    var existingAatf = await genericDataAccess.GetById <Aatf>(message.Data.Id);

                    var competentAuthority = await commonDataAccess.FetchCompetentAuthority(message.Data.CompetentAuthority.Abbreviation);

                    LocalArea localArea = null;
                    PanArea   panArea   = null;

                    if (message.Data.LocalAreaDataId.HasValue)
                    {
                        localArea = await commonDataAccess.FetchLookup <LocalArea>(message.Data.LocalAreaDataId.Value);
                    }

                    if (message.Data.PanAreaDataId.HasValue)
                    {
                        panArea = await commonDataAccess.FetchLookup <PanArea>(message.Data.PanAreaDataId.Value);
                    }

                    var updatedAatf = new Aatf(
                        message.Data.Name,
                        competentAuthority,
                        message.Data.ApprovalNumber,
                        Enumeration.FromValue <Domain.AatfReturn.AatfStatus>(message.Data.AatfStatusValue),
                        existingAatf.Organisation,
                        updatedAddress,
                        Enumeration.FromValue <Domain.AatfReturn.AatfSize>(message.Data.AatfSizeValue),
                        message.Data.ApprovalDate.GetValueOrDefault(),
                        existingAatf.Contact,
                        existingAatf.FacilityType,
                        existingAatf.ComplianceYear,
                        localArea,
                        panArea);

                    var existingAddress = await genericDataAccess.GetById <AatfAddress>(existingAatf.SiteAddress.Id);

                    var country = await organisationDetailsDataAccess.FetchCountryAsync(message.Data.SiteAddress.CountryId);

                    await aatfDataAccess.UpdateAddress(existingAddress, updatedAddress, country);

                    if (message.Data.ApprovalDate.HasValue && existingAatf.ApprovalDate.HasValue)
                    {
                        var flags = await getAatfApprovalDateChangeStatus.Validate(existingAatf, message.Data.ApprovalDate.Value);

                        if (flags.HasFlag(CanApprovalDateBeChangedFlags.DateChanged))
                        {
                            var existingQuarter = await quarterWindowFactory.GetAnnualQuarterForDate(existingAatf.ApprovalDate.Value);

                            var newQuarter = await quarterWindowFactory.GetAnnualQuarterForDate(message.Data.ApprovalDate.Value);

                            var range = Enumerable.Range((int)existingQuarter, (int)newQuarter - 1);

                            await aatfDataAccess.RemoveAatfData(existingAatf, range);
                        }
                    }

                    await aatfDataAccess.UpdateDetails(existingAatf, updatedAatf);

                    context.Commit(transaction);
                }
                catch (Exception ex)
                {
                    transaction.Rollback();

                    if (ex.InnerException != null)
                    {
                        throw ex.InnerException;
                    }
                }
                finally
                {
                    context.Dispose(transaction);
                }
            }

            return(true);
        }