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 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); }