public async Task <RuleResult> Evaluate(producerType producer) { var result = RuleResult.Pass(); if (producer.status == statusType.A) { var existingProducerDetails = producerQuerySet.GetLatestProducerForComplianceYearAndScheme(producer.registrationNo, complianceYear, organisationId); if (existingProducerDetails != null) { var newObligationType = producer.obligationType.ToDomainObligationType(); if (existingProducerDetails.ObligationType != newObligationType) { var producerEeeData = await schemeEeeDataQuerySet.GetLatestProducerEeeData(producer.registrationNo); if (producerEeeData != null && !producerEeeData.All(e => newObligationType.HasFlag(e.ObligationType))) { var eeeDataObligationTypes = producerEeeData .Select(e => e.ObligationType) .Distinct(); string eeeDataObligationTypeMessage = eeeDataObligationTypes.Count() == 1 ? string.Format("{0} EEE data has", eeeDataObligationTypes.Single()) : "both B2B and B2C EEE data have"; var errorMessage = string.Format("You are attempting to change the obligation type of {0} {1} from {2} to {3}. You cannot make this change because {4} already been submitted for this producer.", producer.GetProducerName(), producer.registrationNo, existingProducerDetails.ObligationType, newObligationType, eeeDataObligationTypeMessage); result = RuleResult.Fail(errorMessage, ErrorLevel.Error); } else { var warningMessage = string.Format("You are changing the obligation type for {0} {1} from {2} to {3}.", producer.GetProducerName(), producer.registrationNo, existingProducerDetails.ObligationType, newObligationType); result = RuleResult.Fail(warningMessage, ErrorLevel.Warning); } } } } return(result); }
public async Task<RuleResult> Evaluate(producerType producer) { var result = RuleResult.Pass(); if (producer.status == statusType.A) { var existingProducerDetails = producerQuerySet.GetLatestProducerForComplianceYearAndScheme(producer.registrationNo, complianceYear, organisationId); if (existingProducerDetails != null) { var newObligationType = producer.obligationType.ToDomainObligationType(); if (existingProducerDetails.ObligationType != newObligationType) { var producerEeeData = await schemeEeeDataQuerySet.GetLatestProducerEeeData(producer.registrationNo); if (producerEeeData != null && !producerEeeData.All(e => newObligationType.HasFlag(e.ObligationType))) { var eeeDataObligationTypes = producerEeeData .Select(e => e.ObligationType) .Distinct(); string eeeDataObligationTypeMessage = eeeDataObligationTypes.Count() == 1 ? string.Format("{0} EEE data has", eeeDataObligationTypes.Single()) : "both B2B and B2C EEE data have"; var errorMessage = string.Format("You are attempting to change the obligation type of {0} {1} from {2} to {3}. You cannot make this change because {4} already been submitted for this producer.", producer.GetProducerName(), producer.registrationNo, existingProducerDetails.ObligationType, newObligationType, eeeDataObligationTypeMessage); result = RuleResult.Fail(errorMessage, ErrorLevel.Error); } else { var warningMessage = string.Format("You are changing the obligation type for {0} {1} from {2} to {3}.", producer.GetProducerName(), producer.registrationNo, existingProducerDetails.ObligationType, newObligationType); result = RuleResult.Fail(warningMessage, ErrorLevel.Warning); } } } } return result; }
public RuleResult Evaluate(schemeType scheme, producerType producer, Guid organisationId) { if (producer.status == statusType.A) { var existingProducer = querySet.GetProducerForOtherSchemeAndObligationType(producer.registrationNo, scheme.complianceYear, organisationId, producer.obligationType.ToDomainObligationType()); if (existingProducer != null) { string schemeName = "another scheme"; if (existingProducer.RegisteredProducer.Scheme != null && !string.IsNullOrEmpty(existingProducer.RegisteredProducer.Scheme.SchemeName)) { schemeName = existingProducer.RegisteredProducer.Scheme.SchemeName; } var errorMessage = string.Format( "{0} {1} is already registered with {2} with obligation type: {3}. Review your file.", producer.GetProducerName(), producer.registrationNo, schemeName, (ObligationType)existingProducer.ObligationType); return(RuleResult.Fail(errorMessage)); } return(RuleResult.Pass()); } return(RuleResult.Pass()); }
public void GetProducerName_ProducerBusinessIsNull_ReturnsTradingName() { const string tradingName = "some trading name"; var producer = new producerType { tradingName = tradingName }; Assert.Equal(tradingName, producer.GetProducerName()); }
public RuleResult Evaluate(producerType producer) { if (producer.status == statusType.I && !string.IsNullOrEmpty(producer.registrationNo)) { return (RuleResult.Fail( string.Format( "You cannot add a producer registration number (PRN) for {0} when registering the producer for the very first time. To register {0} as a brand new producer, remove the PRN - or if the producer has been registered previously, register them or amend their details using status 'A' not 'I'.", producer.GetProducerName()))); } return(RuleResult.Pass()); }
public RuleResult Evaluate(producerType producer) { if (producer.status == statusType.A && string.IsNullOrEmpty(producer.registrationNo)) { return (RuleResult.Fail( string.Format( "You have not provided a producer registration number (PRN) for {0} when attempting to amend existing producer details. To amend this producer add the PRN or to add as a brand new producer use status 'I' in the XML.", producer.GetProducerName()))); } return(RuleResult.Pass()); }
public RuleResult Evaluate(producerType producer) { if (producer.status == statusType.I && !string.IsNullOrEmpty(producer.registrationNo)) { return RuleResult.Fail( string.Format( "You cannot add a producer registration number (PRN) for {0} when adding the producer for the first time. To add {0} as a new producer, remove the PRN - or if the producer already exists, amend its details using status 'A' not 'I'.", producer.GetProducerName())); } return RuleResult.Pass(); }
public RuleResult Evaluate(schemeType scheme, producerType producer, Guid organisationId) { if (producer.status == statusType.A) { string existingProducerName = string.Empty; var existingProducer = producerQuerySet.GetLatestProducerForComplianceYearAndScheme(producer.registrationNo, scheme.complianceYear, organisationId) ?? producerQuerySet.GetLatestProducerFromPreviousComplianceYears(producer.registrationNo); if (existingProducer != null) { existingProducerName = existingProducer.OrganisationName; } else { var existingMigratedProducer = migratedProducerQuerySet.GetMigratedProducer(producer.registrationNo); if (existingMigratedProducer == null) { // Producer doesn't exist so no warning return RuleResult.Pass(); } existingProducerName = existingMigratedProducer.ProducerName; } if (existingProducerName != producer.GetProducerName()) { var errorMessage = string.Format("The producer name of {0} {1} will change from {0} to {2}.", existingProducerName, producer.registrationNo, producer.GetProducerName()); return RuleResult.Fail(errorMessage, Core.Shared.ErrorLevel.Warning); } } return RuleResult.Pass(); }
public void Amendment_RegistrationNumberIsNullOrEmpty_FailsValidation_AndIncludesProducerNameInMessage_AndErrorLevelIsError(string registrationNumber, string tradingName) { var producer = new producerType { tradingName = tradingName, status = statusType.A, registrationNo = registrationNumber }; var result = Rule().Evaluate(producer); Assert.False(result.IsValid); Assert.Contains(producer.GetProducerName(), result.Message); Assert.Equal(ErrorLevel.Error, result.ErrorLevel); }
public RuleResult Evaluate(producerType producer) { if (producer.authorisedRepresentative == null) { return(RuleResult.Pass()); } if (producer.authorisedRepresentative.overseasProducer == null) { return(RuleResult.Pass()); } var producerBusinessItem = producer.producerBusiness.Item; contactDetailsContainerType officeContactDetails; if (producerBusinessItem is companyType) { officeContactDetails = ((companyType)producerBusinessItem).registeredOffice; } else if (producerBusinessItem is partnershipType) { officeContactDetails = ((partnershipType)producerBusinessItem).principalPlaceOfBusiness; } else { throw new ArgumentException( string.Format("{0}: producerBusinessItem must be of type companyType or partnershipType", producer.tradingName)); } // abusing law of demeter here, but schema requires all these fields to be present and correct if (!ukCountries.Contains(officeContactDetails.contactDetails.address.country)) { return (RuleResult.Fail( string.Format( "You have entered {0} {1} as an authorised representative with a non-UK address. Authorised representatives must be based in the UK. Review your file.", producer.GetProducerName(), producer.registrationNo))); } else { return(RuleResult.Pass()); } }
public RuleResult Evaluate(producerType producer) { if (producer.authorisedRepresentative == null) { return RuleResult.Pass(); } if (producer.authorisedRepresentative.overseasProducer == null) { return RuleResult.Pass(); } var producerBusinessItem = producer.producerBusiness.Item; contactDetailsContainerType officeContactDetails; if (producerBusinessItem is companyType) { officeContactDetails = ((companyType)producerBusinessItem).registeredOffice; } else if (producerBusinessItem is partnershipType) { officeContactDetails = ((partnershipType)producerBusinessItem).principalPlaceOfBusiness; } else { throw new ArgumentException( string.Format("{0}: producerBusinessItem must be of type companyType or partnershipType", producer.tradingName)); } // abusing law of demeter here, but schema requires all these fields to be present and correct if (!ukCountries.Contains(officeContactDetails.contactDetails.address.country)) { return RuleResult.Fail( string.Format( "You have entered {0} {1} as an authorised representative with a non-UK address. Authorised representatives must be based in the UK. Review your file.", producer.GetProducerName(), producer.registrationNo)); } else { return RuleResult.Pass(); } }
public void Insert_RegistrationNumberIsNotNullOrEmpty_FailsValidation_AndIncludesProducerNameInMessage_AndErrorLevelIsError() { const string validRegistrationNumber = "ABC12345"; const string validTradingName = "MyCompany"; var producer = new producerType { tradingName = validTradingName, status = statusType.I, registrationNo = validRegistrationNumber }; var result = Rule().Evaluate(producer); Assert.False(result.IsValid); Assert.Contains(producer.GetProducerName(), result.Message); Assert.Equal(ErrorLevel.Error, result.ErrorLevel); }
public void GetProducerName_ProducerIsCompanyTypeAndNameExists_ReturnsCompanyName() { const string companyName = "some company name"; var producer = new producerType { tradingName = "some trading name", producerBusiness = new producerBusinessType { Item = new companyType { companyName = companyName } } }; Assert.Equal(companyName, producer.GetProducerName()); }
public void GetProducerName_ProducerIsPartnershipTypeAndNameExists_ReturnsPartnershipName() { const string partnershipName = "some company name"; var producer = new producerType { tradingName = "some trading name", producerBusiness = new producerBusinessType { Item = new partnershipType { partnershipName = partnershipName } } }; Assert.Equal(partnershipName, producer.GetProducerName()); }
public void GetProducerName_ProducerIsCompanyTypeButNameIsNull_ReturnsTradingName() { const string tradingName = "some trading name"; var producer = new producerType { tradingName = tradingName, producerBusiness = new producerBusinessType { Item = new companyType { companyName = null } } }; Assert.Equal(tradingName, producer.GetProducerName()); }
public void GetProducerName_ProducerIsPartnershipTypeButNameIsNull_ReturnsTradingName() { const string tradingName = "some trading name"; var producer = new producerType { tradingName = tradingName, producerBusiness = new producerBusinessType { Item = new partnershipType { partnershipName = null } } }; Assert.Equal(tradingName, producer.GetProducerName()); }
public RuleResult Evaluate(producerType element) { var result = RuleResult.Pass(); if (element.status == statusType.I && element.producerBusiness != null) { var company = element.producerBusiness.Item as companyType; if (company != null) { var companyNumber = CompanyRegistrationNumberFormatter .FormatCompanyRegistrationNumber(company.companyNumber); if (!string.IsNullOrEmpty(companyNumber) && (producerQuerySet.GetLatestCompanyProducers().Any(p => { var existingCompanyRegistrationNumber = CompanyRegistrationNumberFormatter .FormatCompanyRegistrationNumber(p.ProducerBusiness.CompanyDetails.CompanyNumber); return !string.IsNullOrEmpty(existingCompanyRegistrationNumber) && existingCompanyRegistrationNumber == companyNumber; }) || migratedProducerQuerySet.GetAllMigratedProducers().Any(m => { var migratedProducerCompanyNumber = CompanyRegistrationNumberFormatter .FormatCompanyRegistrationNumber(m.CompanyNumber); return !string.IsNullOrEmpty(migratedProducerCompanyNumber) && migratedProducerCompanyNumber == companyNumber; }))) { result = RuleResult.Fail( string.Format(@"We have previously issued a producer registration number (PRN) to {0} with company registration number (CRN) {1}. To register this producer, provide its existing PRN and use the status 'A' in the XML file.", element.GetProducerName(), company.companyNumber), Core.Shared.ErrorLevel.Error); } } } return result; }
public RuleResult Evaluate(producerType element) { var result = RuleResult.Pass(); if (element.status == statusType.I && element.producerBusiness != null) { var company = element.producerBusiness.Item as companyType; if (company != null) { var companyNumber = CompanyRegistrationNumberFormatter .FormatCompanyRegistrationNumber(company.companyNumber); if (!string.IsNullOrEmpty(companyNumber) && (producerQuerySet.GetLatestCompanyProducers().Any(p => { var existingCompanyRegistrationNumber = CompanyRegistrationNumberFormatter .FormatCompanyRegistrationNumber(p.ProducerBusiness.CompanyDetails.CompanyNumber); return(!string.IsNullOrEmpty(existingCompanyRegistrationNumber) && existingCompanyRegistrationNumber == companyNumber); }) || migratedProducerQuerySet.GetAllMigratedProducers().Any(m => { var migratedProducerCompanyNumber = CompanyRegistrationNumberFormatter .FormatCompanyRegistrationNumber(m.CompanyNumber); return(!string.IsNullOrEmpty(migratedProducerCompanyNumber) && migratedProducerCompanyNumber == companyNumber); }))) { result = RuleResult.Fail( string.Format(@"We have previously issued a producer registration number (PRN) to {0} with company registration number (CRN) {1}. To register this producer, provide its existing PRN and use the status 'A' in the XML file.", element.GetProducerName(), company.companyNumber), Core.Shared.ErrorLevel.Error); } } } return(result); }
public RuleResult Evaluate(producerType producer) { if (producer.status == statusType.A && !string.IsNullOrEmpty(producer.registrationNo)) { var validRegistrationNumbers = producerQuerySet.GetAllRegistrationNumbers() .Union(migratedProducerQuerySet.GetAllRegistrationNumbers()) .Select(prn => prn.ToLowerInvariant()); if (!validRegistrationNumbers.Contains(producer.registrationNo.ToLowerInvariant())) { return (RuleResult.Fail( string.Format( "We cannot recognise the producer registration number (PRN) you have entered for {0} {1}. Enter the correct PRN for this producer.", producer.GetProducerName(), producer.registrationNo))); } } return(RuleResult.Pass()); }
public RuleResult Evaluate(producerType producer) { if (producer.status == statusType.A && !string.IsNullOrEmpty(producer.registrationNo)) { var validRegistrationNumbers = producerQuerySet.GetAllRegistrationNumbers() .Union(migratedProducerQuerySet.GetAllRegistrationNumbers()) .Select(prn => prn.ToLowerInvariant()); if (!validRegistrationNumbers.Contains(producer.registrationNo.ToLowerInvariant())) { return RuleResult.Fail( string.Format( "We cannot recognise the producer registration number (PRN) you have entered for {0} {1}. Enter the correct PRN for this producer.", producer.GetProducerName(), producer.registrationNo)); } } return RuleResult.Pass(); }
public void ProducerHasPrnNumberThatDoesNotExistAndProducerIsCompany_ReturnsProducerNameInErrorMessage() { const string prn = "ABC12345"; const string companyName = "Company Name"; var producer = new producerType { registrationNo = prn, status = statusType.A, producerBusiness = new producerBusinessType { Item = new companyType { companyName = companyName } }, }; var result = Rule().Evaluate(producer); Assert.Contains(producer.GetProducerName(), result.Message); }
public void AuthorisedRepresentativeOfficeCountryIsNotInUnitedKingdom_FailsValidation_AndIncludesProducerNameInMessage_AndErrorLevelIsError() { const string validTradingName = "MyCompany"; const countryType someNonUkCountry = countryType.TURKEY; var producer = new producerType { tradingName = validTradingName, authorisedRepresentative = new authorisedRepresentativeType { overseasProducer = new overseasProducerType() }, producerBusiness = MakeProducerBusinessTypeInCountry(someNonUkCountry) }; var result = Rule().Evaluate(producer); Assert.False(result.IsValid); Assert.Contains(producer.GetProducerName(), result.Message); Assert.Equal(ErrorLevel.Error, result.ErrorLevel); }
public RuleResult Evaluate(schemeType scheme, producerType producer, Guid organisationId) { if (producer.status == statusType.A) { string existingProducerName = string.Empty; var existingProducer = producerQuerySet.GetLatestProducerForComplianceYearAndScheme(producer.registrationNo, scheme.complianceYear, organisationId) ?? producerQuerySet.GetLatestProducerFromPreviousComplianceYears(producer.registrationNo); if (existingProducer != null) { existingProducerName = existingProducer.OrganisationName; } else { var existingMigratedProducer = migratedProducerQuerySet.GetMigratedProducer(producer.registrationNo); if (existingMigratedProducer == null) { // Producer doesn't exist so no warning return(RuleResult.Pass()); } existingProducerName = existingMigratedProducer.ProducerName; } if (existingProducerName != producer.GetProducerName()) { var errorMessage = string.Format("The producer name of {0} {1} will change from {0} to {2}.", existingProducerName, producer.registrationNo, producer.GetProducerName()); return(RuleResult.Fail(errorMessage, Core.Shared.ErrorLevel.Warning)); } } return(RuleResult.Pass()); }
public RuleResult Evaluate(producerType producer) { var higherBandThanExpected = producer.annualTurnoverBand == annualTurnoverBandType.Greaterthanonemillionpounds && producer.annualTurnover.HasValue && producer.annualTurnover.Value <= 1000000; var lowerBandThanExpected = producer.annualTurnoverBand == annualTurnoverBandType.Lessthanorequaltoonemillionpounds && producer.annualTurnover.HasValue && producer.annualTurnover.Value > 1000000; if (higherBandThanExpected || lowerBandThanExpected) { return RuleResult.Fail( string.Format( "The annualTurnover amount and annualTurnoverBand for {0} are not compatible. Review your file.", producer.GetProducerName()), ErrorLevel.Warning); } return RuleResult.Pass(); }
public RuleResult Evaluate(producerType producer) { var higherBandThanExpected = producer.annualTurnoverBand == annualTurnoverBandType.Greaterthanonemillionpounds && producer.annualTurnover.HasValue && producer.annualTurnover.Value <= 1000000; var lowerBandThanExpected = producer.annualTurnoverBand == annualTurnoverBandType.Lessthanorequaltoonemillionpounds && producer.annualTurnover.HasValue && producer.annualTurnover.Value > 1000000; if (higherBandThanExpected || lowerBandThanExpected) { return (RuleResult.Fail( string.Format( "The annualTurnover amount and annualTurnoverBand for {0} are not compatible. Review your return XML.", producer.GetProducerName()), ErrorLevel.Warning)); } return(RuleResult.Pass()); }
public RuleResult Evaluate(producerType producer) { if (producer.authorisedRepresentative == null) { return(RuleResult.Pass()); } if (producer.authorisedRepresentative.overseasProducer == null) { return(RuleResult.Pass()); } if (producer.authorisedRepresentative.overseasProducer.overseasContact == null) { return(RuleResult.Pass()); } contactDetailsType contact = producer.authorisedRepresentative.overseasProducer.overseasContact; switch (contact.address.country) { case countryType.UKENGLAND: case countryType.UKNORTHERNIRELAND: case countryType.UKSCOTLAND: case countryType.UKWALES: string errorMessage = string.Format( "You have entered {0} {1} as an authorised representative of an organisation with a UK address. Authorised representatives cannot represent producers based in the UK. Review your file.", producer.GetProducerName(), producer.registrationNo); return(RuleResult.Fail(errorMessage, Core.Shared.ErrorLevel.Error)); default: return(RuleResult.Pass()); } }
public RuleResult Evaluate(producerType producer) { if (producer.authorisedRepresentative == null) { return RuleResult.Pass(); } if (producer.authorisedRepresentative.overseasProducer == null) { return RuleResult.Pass(); } if (producer.authorisedRepresentative.overseasProducer.overseasContact == null) { return RuleResult.Pass(); } contactDetailsType contact = producer.authorisedRepresentative.overseasProducer.overseasContact; switch (contact.address.country) { case countryType.UKENGLAND: case countryType.UKNORTHERNIRELAND: case countryType.UKSCOTLAND: case countryType.UKWALES: string errorMessage = string.Format( "You have entered {0} {1} as an authorised representative of an organisation with a UK address. Authorised representatives cannot represent producers based in the UK. Review your file.", producer.GetProducerName(), producer.registrationNo); return RuleResult.Fail(errorMessage, Core.Shared.ErrorLevel.Error); default: return RuleResult.Pass(); } }