예제 #1
0
        public async Task <ProducerContact> GetProducerContact(contactDetailsType contactDetails)
        {
            var countryName = GetCountryName(contactDetails.address.country);
            var country     = await dataAccess.GetCountry(countryName);

            ProducerAddress address = new ProducerAddress(
                contactDetails.address.primaryName,
                contactDetails.address.secondaryName,
                contactDetails.address.streetName,
                contactDetails.address.town,
                contactDetails.address.locality,
                contactDetails.address.administrativeArea,
                country,
                contactDetails.address.Item);

            ProducerContact contact = new ProducerContact(
                contactDetails.title,
                contactDetails.forename,
                contactDetails.surname,
                contactDetails.phoneLandLine,
                contactDetails.phoneMobile,
                contactDetails.fax,
                contactDetails.email,
                address);

            return(contact);
        }
예제 #2
0
        public async Task <ProducerBusiness> SetProducerBusiness(producerBusinessType producerBusiness)
        {
            object          item = producerBusiness.Item;
            ProducerContact correspondentForNoticeContact = null;

            if (producerBusiness.correspondentForNotices.contactDetails != null)
            {
                correspondentForNoticeContact =
                    await GetProducerContact(producerBusiness.correspondentForNotices.contactDetails);
            }

            Company     company     = null;
            Partnership partnership = null;

            if (item is companyType)
            {
                companyType     companyitem = (companyType)item;
                ProducerContact contact     = await GetProducerContact(companyitem.registeredOffice.contactDetails);

                company = new Company(companyitem.companyName, companyitem.companyNumber, contact);
            }
            else if (item is partnershipType)
            {
                partnershipType partnershipItem = (partnershipType)item;
                string          partnershipName = partnershipItem.partnershipName;

                List <string>   partnersList = partnershipItem.partnershipList.ToList();
                List <Partner>  partners     = partnersList.Select(name => new Partner(name)).ToList();
                ProducerContact contact      = await GetProducerContact(partnershipItem.principalPlaceOfBusiness.contactDetails);

                partnership = new Partnership(partnershipName, contact, partners);
            }

            return(new ProducerBusiness(company, partnership, correspondentForNoticeContact));
        }
예제 #3
0
            public static Company WithProducerContact(ProducerContact contact)
            {
                var builder = new CompanyBuilder();

                builder.contact = contact;

                return(builder.Build());
            }
예제 #4
0
            public static Partnership WithPrincipalPlaceOfBusiness(ProducerContact contact)
            {
                var builder = new PartnershipBuilder();

                builder.principalPlaceOfBusiness = contact;

                return(builder.Build());
            }
예제 #5
0
            public static ProducerBusiness WithCorrespondentForNoticesContact(ProducerContact contact)
            {
                var builder = new ProducerBusinessBuilder();

                builder.correspondentForNoticesContact = contact;

                return(builder.Build());
            }
        private ProducerBusiness CreatePartnershipBusiness()
        {
            var producerAddress = new ProducerAddress("PrimaryName", "SecondaryName", "Street", "Town", "Locality", "AdministrativeArea",
                                                      new Country(A.Dummy <Guid>(), "TestCountry"), "PostCode");

            var producerContact = new ProducerContact(
                "Title", "Forename", "Surname", "123456", "1235467", "12345678", "[email protected]", producerAddress);

            return(new ProducerBusiness(partnership: new Partnership("TestPartnership", producerContact, new List <Partner> {
            })));
        }
예제 #7
0
        public void Producer_SetProducerPartnershipCountry_Returns_RegOfficeOrPPoBCountry()
        {
            // Arrange
            Scheme scheme = new Scheme(
                A.Dummy <Guid>());

            MemberUpload memberUpload = new MemberUpload(
                A.Dummy <Guid>(),
                A.Dummy <string>(),
                A.Dummy <List <MemberUploadError> >(),
                A.Dummy <decimal>(),
                2019,
                scheme,
                A.Dummy <string>(),
                A.Dummy <string>());

            RegisteredProducer registeredProducer = new RegisteredProducer(
                "WEE/AA1111AA",
                2019,
                scheme);

            var producerAddress = new ProducerAddress("PrimaryName", "SecondaryName", "Street", "Town", "Locality", "AdministrativeArea",
                                                      new Country(A.Dummy <Guid>(), "SPAIN"), "PostCode");

            var producerContact = new ProducerContact(
                "Title", "Forename", "Surname", "123456", "1235467", "12345678", "[email protected]", producerAddress);

            var producerBusiness = new ProducerBusiness(
                partnership: new Partnership("TestPartnership", producerContact, new List <Partner> {
            }));

            var producer = new ProducerSubmission(
                registeredProducer,
                memberUpload,
                producerBusiness,
                null,
                new DateTime(2019, 3, 18),
                0,
                false,
                null,
                "Trading Name 1",
                EEEPlacedOnMarketBandType.Lessthan5TEEEplacedonmarket,
                SellingTechniqueType.Both,
                Domain.Obligation.ObligationType.Both,
                AnnualTurnOverBandType.Greaterthanonemillionpounds,
                new List <Domain.Producer.BrandName>(),
                new List <Domain.Producer.SICCode>(),
                A.Dummy <ChargeBandAmount>(),
                0,
                A.Dummy <StatusType>());

            Assert.Equal("SPAIN", producer.RegOfficeOrPBoBCountry);
        }
예제 #8
0
        public void AuthorisedRepresentative_WithOverseasProducerBasedInUK_ThrowsArgumentException()
        {
            // Arrange
            ProducerContact contact = A.Fake <ProducerContact>();

            A.CallTo(() => contact.IsOverseas).Returns(false);

            // Act
            Func <AuthorisedRepresentative> action = () => new AuthorisedRepresentative("Name", contact);

            // Assert
            Assert.Throws <ArgumentException>(action);
        }
예제 #9
0
        public void AuthorisedRepresentative_WithOverseasProducerNotBasedInUK_DoesntThrowException()
        {
            // Arrange
            ProducerContact contact = A.Fake <ProducerContact>();

            A.CallTo(() => contact.IsOverseas).Returns(true);

            // Act
            AuthorisedRepresentative result = new AuthorisedRepresentative("Name", contact);

            // Assert
            // No exception thrown.
        }
예제 #10
0
        public void Equals_AuthorisedRepresentativeWithDifferentName_ReturnsFalse()
        {
            ProducerContact contact = A.Fake <ProducerContact>();

            A.CallTo(() => contact.IsOverseas).Returns(true);

            AuthorisedRepresentative authorisedRepresentative1 = new AuthorisedRepresentative(
                "1",
                contact);

            AuthorisedRepresentative authorisedRepresentative2 = new AuthorisedRepresentative(
                "2",
                contact);

            Assert.NotEqual(authorisedRepresentative1, authorisedRepresentative2);
        }
예제 #11
0
        public void Equals_AuthorisedRepresentativeWithSameDetails_ReturnsTrue()
        {
            ProducerContact contact = A.Dummy <ProducerContact>();

            A.CallTo(() => contact.IsOverseas).Returns(true);

            AuthorisedRepresentative authorisedRepresentative1 = new AuthorisedRepresentative(
                "1",
                contact);

            AuthorisedRepresentative authorisedRepresentative2 = new AuthorisedRepresentative(
                "1",
                contact);

            Assert.Equal(authorisedRepresentative1, authorisedRepresentative2);
        }
예제 #12
0
        public async Task <AuthorisedRepresentative> SetAuthorisedRepresentative(authorisedRepresentativeType representative)
        {
            AuthorisedRepresentative result = null;

            if (representative != null &&
                representative.overseasProducer != null)
            {
                ProducerContact contact = null;
                if (representative.overseasProducer.overseasContact != null)
                {
                    contact = await GetProducerContact(representative.overseasProducer.overseasContact);
                }

                result = new AuthorisedRepresentative(representative.overseasProducer.overseasProducerName, contact);
            }

            return(result);
        }
예제 #13
0
        public void Equals_AuthorisedRepresentativeWithDifferentProducerContact_ReturnsFalse()
        {
            ProducerContact contact1 = A.Fake <ProducerContact>();

            A.CallTo(() => contact1.IsOverseas).Returns(true);
            A.CallTo(() => contact1.Equals(A <ProducerContact> ._)).Returns(false);

            ProducerContact contact2 = A.Fake <ProducerContact>();

            A.CallTo(() => contact2.IsOverseas).Returns(true);
            A.CallTo(() => contact2.Equals(A <ProducerContact> ._)).Returns(false);

            AuthorisedRepresentative authorisedRepresentative1 = new AuthorisedRepresentative(
                "1",
                contact1);

            AuthorisedRepresentative authorisedRepresentative2 = new AuthorisedRepresentative(
                "1",
                contact2);

            Assert.NotEqual(authorisedRepresentative1, authorisedRepresentative2);
        }
예제 #14
0
        public async Task <ProducerDetails> HandleAsync(Requests.Admin.GetProducerDetails request)
        {
            authorization.EnsureCanAccessInternalArea();

            List <ProducerSubmission> producers = await dataAccess.Fetch(request.RegistrationNumber, request.ComplianceYear);

            if (producers.Count == 0)
            {
                string message = string.Format(
                    "No producer has been registered with the registration number \"{0}\" in the {1} compliance year.",
                    request.RegistrationNumber, request.ComplianceYear);

                throw new ArgumentException(message);
            }

            ProducerDetails producerDetails = new ProducerDetails();

            producerDetails.CanRemoveProducer = authorization.CheckUserInRole(Roles.InternalAdmin);
            producerDetails.Schemes           = new List <ProducerDetailsScheme>();

            var schemeGroups = producers
                               .GroupBy(p => new { p.MemberUpload.Scheme.Id, p.MemberUpload.Scheme.SchemeName })
                               .OrderBy(p => p.Key.SchemeName);

            foreach (var schemeGroup in schemeGroups)
            {
                DateTime registrationDate = schemeGroup
                                            .OrderBy(p => p.UpdatedDate)
                                            .First()
                                            .UpdatedDate;

                ProducerSubmission latestDetails = schemeGroup
                                                   .OrderBy(p => p.UpdatedDate)
                                                   .Last();

                string companyNumber = null;
                if (latestDetails.ProducerBusiness.CompanyDetails != null)
                {
                    companyNumber = latestDetails.ProducerBusiness.CompanyDetails.CompanyNumber;
                }

                var isAuthorisedRepresentative = "No";

                if (latestDetails.AuthorisedRepresentativeId != null &&
                    latestDetails.AuthorisedRepresentative.OverseasContactId != null &&
                    latestDetails.AuthorisedRepresentative.OverseasContact != null &&
                    !string.IsNullOrEmpty(latestDetails.AuthorisedRepresentative.OverseasContact.Email))
                {
                    isAuthorisedRepresentative = "Yes";
                }

                ProducerContact producerBusinessContact = null;
                bool            isCompany = false;
                if (latestDetails.ProducerBusiness.CompanyDetails != null)
                {
                    producerBusinessContact = latestDetails.ProducerBusiness.CompanyDetails.RegisteredOfficeContact;
                    isCompany = true;
                }
                else if (latestDetails.ProducerBusiness.Partnership != null)
                {
                    producerBusinessContact = latestDetails.ProducerBusiness.Partnership.PrincipalPlaceOfBusiness;
                }
                else
                {
                    throw new MissingFieldException(
                              string.Format("No producer business details could be found for producer:{0}", latestDetails.Id));
                }

                ProducerContactDetails producerBusinessContactDetails = new ProducerContactDetails
                {
                    ContactName = producerBusinessContact.ContactName,
                    Email       = producerBusinessContact.Email,
                    Mobile      = producerBusinessContact.Mobile,
                    Telephone   = producerBusinessContact.Telephone,
                    Address     = producerBusinessContact.Address.ToString()
                };

                ProducerDetailsScheme producerSchemeDetails = new ProducerDetailsScheme()
                {
                    RegisteredProducerId       = latestDetails.RegisteredProducer.Id,
                    SchemeName                 = schemeGroup.Key.SchemeName,
                    ProducerName               = latestDetails.OrganisationName,
                    TradingName                = latestDetails.TradingName,
                    RegistrationDate           = registrationDate,
                    CompanyNumber              = companyNumber,
                    ObligationType             = (ObligationType)latestDetails.ObligationType,
                    ChargeBandType             = (ChargeBandType)latestDetails.ChargeBandAmount.ChargeBand,
                    CeasedToExist              = latestDetails.CeaseToExist,
                    IsAuthorisedRepresentative = isAuthorisedRepresentative,
                    ProducerBusinessContact    = producerBusinessContactDetails,
                    IsCompany          = isCompany,
                    ProducerEeeDetails =
                        mapper.Map <IEnumerable <ProducerEeeByQuarter>, ProducerEeeDetails>(
                            (await
                             dataAccess.EeeOutputBySchemeAndComplianceYear(request.RegistrationNumber, request.ComplianceYear,
                                                                           schemeGroup.Key.Id)))
                };

                producerDetails.Schemes.Add(producerSchemeDetails);
            }

            return(producerDetails);
        }
            public static ProducerBusiness WithCorrespondentForNoticesContact(ProducerContact contact)
            {
                var builder = new ProducerBusinessBuilder();
                builder.correspondentForNoticesContact = contact;

                return builder.Build();
            }
 public override bool Equals(ProducerContact other)
 {
     return false;
 }
        public async Task HandleAsync_ForPartnershipProducer_ReturnsPartnershipContactDetails_AndIsCompanyValueFalse()
        {
            // Arrange
            Scheme scheme = new Scheme(A.Dummy <Guid>());

            MemberUpload memberUpload = new MemberUpload(
                A.Dummy <Guid>(),
                A.Dummy <string>(),
                A.Dummy <List <MemberUploadError> >(),
                A.Dummy <decimal>(),
                2017,
                scheme,
                A.Dummy <string>(),
                A.Dummy <string>());

            RegisteredProducer registeredProducer = new RegisteredProducer(
                "WEE/AA1111AA",
                2017,
                scheme);

            var producerAddress = new ProducerAddress("PrimaryName", "SecondaryName", "Street", "Town", "Locality", "AdministrativeArea",
                                                      new Country(A.Dummy <Guid>(), "TestCountry"), "PostCode");

            var producerContact = new ProducerContact(
                "Title", "Forename", "Surname", "123456", "1235467", "12345678", "[email protected]", producerAddress);

            var producerBusiness = new ProducerBusiness(
                partnership: new Partnership("TestPartnership", producerContact, new List <Partner> {
            }));

            var producer = new ProducerSubmission(
                registeredProducer,
                memberUpload,
                producerBusiness,
                null,
                new DateTime(2015, 1, 1),
                0,
                false,
                null,
                "Trading Name 1",
                EEEPlacedOnMarketBandType.Lessthan5TEEEplacedonmarket,
                SellingTechniqueType.Both,
                Domain.Obligation.ObligationType.Both,
                AnnualTurnOverBandType.Greaterthanonemillionpounds,
                new List <BrandName>(),
                new List <SICCode>(),
                A.Dummy <ChargeBandAmount>(),
                0,
                A.Dummy <StatusType>());

            IGetProducerDetailsDataAccess dataAccess = A.Fake <IGetProducerDetailsDataAccess>();

            A.CallTo(() => dataAccess.Fetch(A <string> ._, A <int> ._))
            .Returns(new List <ProducerSubmission> {
                producer
            });

            IWeeeAuthorization authorization = A.Fake <IWeeeAuthorization>();

            A.CallTo(() => authorization.CheckUserInRole(Roles.InternalAdmin))
            .Returns(false);

            IMapper mapper = A.Fake <IMapper>();

            GetProducerDetailsHandler handler = new GetProducerDetailsHandler(dataAccess, authorization, mapper);

            // Act
            var result = await handler.HandleAsync(A.Dummy <GetProducerDetails>());

            // Assert
            Assert.NotNull(result);
            Assert.Single(result.Schemes);

            ProducerContactDetails businessContact = result.Schemes[0].ProducerBusinessContact;

            Assert.Equal("PrimaryName, SecondaryName, Street, Town, Locality, AdministrativeArea, PostCode, TestCountry", businessContact.Address);
            Assert.Equal("Title Forename Surname", businessContact.ContactName);
            Assert.Equal("123456", businessContact.Telephone);
            Assert.Equal("1235467", businessContact.Mobile);
            Assert.Equal("[email protected]", businessContact.Email);
            Assert.False(result.Schemes[0].IsCompany);
        }
예제 #18
0
        public async Task<ProducerContact> GetProducerContact(contactDetailsType contactDetails)
        {
            var countryName = GetCountryName(contactDetails.address.country);
            var country = await dataAccess.GetCountry(countryName);

            ProducerAddress address = new ProducerAddress(
                contactDetails.address.primaryName,
                contactDetails.address.secondaryName,
                contactDetails.address.streetName,
                contactDetails.address.town,
                contactDetails.address.locality,
                contactDetails.address.administrativeArea,
                country,
                contactDetails.address.Item);

            ProducerContact contact = new ProducerContact(
                contactDetails.title,
                contactDetails.forename,
                contactDetails.surname,
                contactDetails.phoneLandLine,
                contactDetails.phoneMobile,
                contactDetails.fax,
                contactDetails.email,
                address);

            return contact;
        }
예제 #19
0
 public override bool Equals(ProducerContact other)
 {
     return(false);
 }
            public static Partnership WithPrincipalPlaceOfBusiness(ProducerContact contact)
            {
                var builder = new PartnershipBuilder();
                builder.principalPlaceOfBusiness = contact;

                return builder.Build();
            }