public ProducerCharge GetProducerChargeBand(schemeType schmemeType, producerType producerType, MemberUpload memberUpload) { var complianceYear = int.Parse(schmemeType.complianceYear); var previousProducerSubmission = registeredProducerDataAccess.GetProducerRegistration(producerType.registrationNo, complianceYear, schmemeType.approvalNo, memberUpload); var previousAmendmentCharge = registeredProducerDataAccess.HasPreviousAmendmentCharge(producerType.registrationNo, complianceYear, schmemeType.approvalNo, memberUpload); var chargeband = environmentAgencyProducerChargeBandCalculator.GetProducerChargeBand(schmemeType, producerType, memberUpload); if (previousProducerSubmission != null) { Log.Information(string.Format("previous {0}", previousProducerSubmission.Id)); Log.Information(string.Format("previous amendment {0}", previousAmendmentCharge.ToString())); if (!previousAmendmentCharge && (producerType.eeePlacedOnMarketBand == eeePlacedOnMarketBandType.Morethanorequalto5TEEEplacedonmarket && previousProducerSubmission.EEEPlacedOnMarketBandType == (int)eeePlacedOnMarketBandType.Lessthan5TEEEplacedonmarket)) { return(chargeband); } } return(new ProducerCharge() { ChargeBandAmount = chargeband.ChargeBandAmount, Amount = 0 }); }
public void AnnualTurnoverDoesNotMatchWithBand_ShouldReturnInvalidResult_WithProducerName_AndProducerRegistrationNumber_AndWarningStatus(annualTurnoverBandType annualTurnoverBand, double annualTurnover) { const string name = "Some company"; const string prn = "ABC12345"; var producer = new producerType { annualTurnover = decimal.Parse(annualTurnover.ToString(CultureInfo.InvariantCulture)), annualTurnoverBand = annualTurnoverBand, producerBusiness = new producerBusinessType { Item = new partnershipType { partnershipName = name } }, registrationNo = prn }; var result = Rule().Evaluate(producer); Assert.False(result.IsValid); Assert.Contains(name, result.Message); Assert.Equal(Core.Shared.ErrorLevel.Warning, result.ErrorLevel); }
public void Evaluate_Insert_MatchingCompanyRegistrationNumber_ReturnsError() { string companyNumber = "1234"; var newProducer = new producerType() { status = statusType.I, producerBusiness = new producerBusinessType() { Item = new companyType() { companyNumber = companyNumber } } }; var existingProducer = FakeProducer.Create(ObligationType.Both, "prn", producerBusiness: new ProducerBusiness(new Company("Company", companyNumber, null))); A.CallTo(() => producerQuerySet.GetLatestCompanyProducers()).Returns(new List <ProducerSubmission>() { existingProducer }); var result = new CompanyAlreadyRegistered(producerQuerySet, migratedProducerQuerySet).Evaluate(newProducer); Assert.False(result.IsValid); Assert.Equal(Core.Shared.ErrorLevel.Error, result.ErrorLevel); }
private producerType CreateProducer() { var producer = new producerType(); producer.tradingName = TradingName; producer.producerBrandNames = BrandNames; producer.SICCodeList = SicCodes; producer.producerBusiness = ProducerBusiness; producer.authorisedRepresentative = AuthorisedRepresentative; producer.eeePlacedOnMarketBand = EEEPlacedOnMarketBandType; producer.sellingTechnique = SellingTechnique; producer.obligationType = ObligationType; producer.annualTurnoverBand = AnnualTurnoverBandType; producer.ceaseToExistDateSpecified = CeaseDate.HasValue; if (CeaseDate.HasValue) { producer.ceaseToExistDate = CeaseDate.Value; } producer.registrationNo = RegistrationNumber; producer.annualTurnover = AnnualTurnover; producer.VATRegistered = VatRegistered; producer.status = Status; return(producer); }
public async Task Evaluate_ProducerObligationTypeChange_NoExistingEeeDataForProducer_ReturnsWarning() { // Arrange var builder = new ProducerObligationTypeChangeBuilder(); var existingProducerDetails = A.Fake <ProducerSubmission>(); A.CallTo(() => existingProducerDetails.ObligationType) .Returns(ObligationType.B2C); A.CallTo(() => builder.ProducerQuerySet.GetLatestProducerForComplianceYearAndScheme(A <string> ._, A <string> ._, A <Guid> ._)) .Returns(existingProducerDetails); A.CallTo(() => builder.SchemeEeeDataQuerySet.GetLatestProducerEeeData(A <string> ._)) .Returns((List <EeeOutputAmount>)null); var newProducerDetails = new producerType { status = statusType.A, obligationType = obligationTypeType.B2B }; // Act var result = await builder.Build().Evaluate(newProducerDetails); // Assert A.CallTo(() => builder.ProducerQuerySet.GetLatestProducerForComplianceYearAndScheme(A <string> ._, A <string> ._, A <Guid> ._)) .MustHaveHappened(); A.CallTo(() => builder.SchemeEeeDataQuerySet.GetLatestProducerEeeData(A <string> ._)) .MustHaveHappened(); Assert.False(result.IsValid); Assert.Equal(ErrorLevel.Warning, result.ErrorLevel); }
public void Evaluate_Insert_MatchingMigratedProducerCompanyRegistrationNumber_ReturnsError() { string companyNumber = "1234"; var newProducer = new producerType() { status = statusType.I, producerBusiness = new producerBusinessType() { Item = new companyType() { companyNumber = companyNumber } } }; A.CallTo(() => producerQuerySet.GetLatestCompanyProducers()).Returns(new List<ProducerSubmission>()); var migratedProducer = A.Fake<MigratedProducer>(); A.CallTo(() => migratedProducer.CompanyNumber).Returns(companyNumber); A.CallTo(() => migratedProducerQuerySet.GetAllMigratedProducers()).Returns(new List<MigratedProducer>() { migratedProducer }); var result = new CompanyAlreadyRegistered(producerQuerySet, migratedProducerQuerySet).Evaluate(newProducer); Assert.False(result.IsValid); Assert.Equal(Core.Shared.ErrorLevel.Error, result.ErrorLevel); }
public void Evaluate_Amend_NoMatchingProducer_ReturnsPass() { // Arrange string companyNumber = "1234"; var newProducer = new producerType() { status = statusType.A, registrationNo = "prn", producerBusiness = new producerBusinessType() { Item = new companyType() { companyNumber = companyNumber } } }; A.CallTo(() => producerQuerySet.GetLatestProducerFromPreviousComplianceYears("prn")) .Returns(null); // Act var result = new CompanyRegistrationNumberChange(producerQuerySet) .Evaluate(newProducer); // Assert A.CallTo(() => producerQuerySet.GetLatestProducerFromPreviousComplianceYears("prn")) .MustHaveHappened(); Assert.True(result.IsValid); }
private static producerType SetUpProducer(countryType countryType, eeePlacedOnMarketBandType eeePlacedOnMarketBandType, annualTurnoverBandType annualTurnoverBandType, bool vatRegistered) { var producerCompany = new companyType() { companyName = "Test company", companyNumber = "Test CRN", registeredOffice = new contactDetailsContainerType() { contactDetails = new contactDetailsType() { address = new addressType() { country = countryType } } } }; var producerBusiness = new producerBusinessType() { Item = producerCompany }; var producer = new producerType { annualTurnoverBand = annualTurnoverBandType, VATRegistered = vatRegistered, eeePlacedOnMarketBand = eeePlacedOnMarketBandType, producerBusiness = producerBusiness }; return(producer); }
ProducerRegisteredMatchesComplianceYearAndObligationType_ButRegistrationNumberIsNullOrEmpty_ValidationSucceeds (string registrationNumber) { const string complianceYear = "2016"; const obligationTypeType obligationType = obligationTypeType.B2B; A.CallTo(() => producerQuerySet.GetProducerForOtherSchemeAndObligationType(A <string> ._, A <string> ._, A <Guid> ._, A <ObligationType> ._)) .Returns(FakeProducer.Create(obligationType.ToDomainObligationType(), registrationNumber)); producerType producer = new producerType() { tradingName = "Test Trader", obligationType = obligationType, producerBusiness = new producerBusinessType { Item = new partnershipType { partnershipName = "New Producer Name" } } }; schemeType scheme = new schemeType() { complianceYear = complianceYear, producerList = new[] { producer } }; var result = Rule().Evaluate(scheme, producer, A.Dummy <Guid>()); Assert.True(result.IsValid); }
public RuleResult Evaluate(schemeType root, producerType element, Guid organisationId) { var result = RuleResult.Pass(); if (element.status == statusType.A) { var existingProducer = querySet.GetLatestProducerForComplianceYearAndScheme(element.registrationNo, root.complianceYear, organisationId); if (existingProducer != null) { ChargeBand existingChargeBandType = existingProducer.ChargeBandAmount.ChargeBand; ChargeBand newChargeBandType = producerChargeBandCalculator.GetProducerChargeBand( element.annualTurnoverBand, element.VATRegistered, element.eeePlacedOnMarketBand); if (existingChargeBandType != newChargeBandType) { result = RuleResult.Fail( string.Format("The charge band of {0} {1} will change from '{2}' to '{3}'.", existingProducer.OrganisationName, existingProducer.RegisteredProducer.ProducerRegistrationNumber, existingChargeBandType, newChargeBandType), Core.Shared.ErrorLevel.Warning); } } } return result; }
public RuleResult Evaluate(schemeType root, producerType element, Guid organisationId) { var result = RuleResult.Pass(); if (element.status == statusType.A) { var existingProducer = querySet.GetLatestProducerForComplianceYearAndScheme(element.registrationNo, root.complianceYear, organisationId); if (existingProducer != null) { var existingChargeBandType = existingProducer.ChargeBandAmount.ChargeBand; var producerCharge = Task.Run(() => producerChargeBandCalculatorChooser.GetProducerChargeBand(root, element)).Result; if (existingChargeBandType != producerCharge.ChargeBandAmount.ChargeBand) { result = RuleResult.Fail( string.Format("The charge band of {0} {1} will change from '{2}' to '{3}'.", existingProducer.OrganisationName, existingProducer.RegisteredProducer.ProducerRegistrationNumber, existingChargeBandType, producerCharge.ChargeBandAmount.ChargeBand), Core.Shared.ErrorLevel.Warning); } } } return(result); }
public void Evaluate_Insert_MatchingCompanyRegistrationNumber_DoesNotPerformMigratedProducerCompanyRegistrationNumberCheck() { string companyName = "Test company name"; string companyNumber = "1234"; var newProducer = new producerType() { status = statusType.I, producerBusiness = new producerBusinessType() { Item = new companyType() { companyName = companyName, companyNumber = companyNumber } } }; var existingProducer = FakeProducer.Create(ObligationType.Both, "prn", producerBusiness: new ProducerBusiness(new Company(companyName, companyNumber, null))); A.CallTo(() => producerQuerySet.GetLatestCompanyProducers()).Returns(new List <ProducerSubmission>() { existingProducer }); new CompanyAlreadyRegistered(producerQuerySet, migratedProducerQuerySet).Evaluate(newProducer); A.CallTo(() => producerQuerySet.GetLatestCompanyProducers()).MustHaveHappened(); A.CallTo(() => migratedProducerQuerySet.GetAllMigratedProducers()).MustNotHaveHappened(); }
public void Evaluate_Insert_NonMatchingMigratedProducerCompanyNumbersAfterFormatting_ReturnsPass(string newCompanyNumber, string migratedProducerCompanyNumber) { var newProducer = new producerType() { status = statusType.I, producerBusiness = new producerBusinessType() { Item = new companyType() { companyNumber = newCompanyNumber } } }; A.CallTo(() => producerQuerySet.GetLatestCompanyProducers()).Returns(new List <ProducerSubmission>()); var migratedProducer = A.Fake <MigratedProducer>(); A.CallTo(() => migratedProducer.CompanyNumber).Returns(migratedProducerCompanyNumber); A.CallTo(() => migratedProducerQuerySet.GetAllMigratedProducers()).Returns(new List <MigratedProducer>() { migratedProducer }); var result = new CompanyAlreadyRegistered(producerQuerySet, migratedProducerQuerySet).Evaluate(newProducer); Assert.True(result.IsValid); }
public void Evaluate_Insert_NonMatchingCompanyNumbersAfterFormatting_ReturnsPass(string newCompanyNumber, string existingCompanyNumber) { var newProducer = new producerType() { status = statusType.I, producerBusiness = new producerBusinessType() { Item = new companyType() { companyNumber = newCompanyNumber } } }; var existingProducer = FakeProducer.Create(ObligationType.Both, "prn", producerBusiness: new ProducerBusiness(new Company("Company", existingCompanyNumber, null))); A.CallTo(() => producerQuerySet.GetLatestCompanyProducers()).Returns(new List <ProducerSubmission>() { existingProducer }); var result = new CompanyAlreadyRegistered(producerQuerySet, migratedProducerQuerySet).Evaluate(newProducer); Assert.True(result.IsValid); }
public void CalculateCharge_ProducerIsAmendmentInChargeBandCosting1WithPreviousTotalChargesOf25_ReturnsChargeAmountOf0() { // Arrange ChargeBandAmount chargeBandAmount = new ChargeBandAmount( new Guid("65D9ADC8-B53F-4570-A1C7-F49B0503FA6A"), ChargeBand.A, 1); IProducerChargeCalculatorDataAccess dataAccess = A.Fake<IProducerChargeCalculatorDataAccess>(); A.CallTo(() => dataAccess.FetchCurrentChargeBandAmount(ChargeBand.A)).Returns(chargeBandAmount); A.CallTo(() => dataAccess.FetchSumOfExistingCharges(A<string>._, "WEE/AB1234CD", 2016)).Returns(25); IProducerChargeBandCalculator bandCalculator = A.Fake<IProducerChargeBandCalculator>(); A.CallTo(() => bandCalculator.GetProducerChargeBand(A<annualTurnoverBandType>._, A<bool>._, A<eeePlacedOnMarketBandType>._)) .Returns(ChargeBand.A); ProducerChargeCalculator calculator = new ProducerChargeCalculator(dataAccess, bandCalculator); producerType producer = new producerType(); producer.status = statusType.A; producer.registrationNo = "WEE/AB1234CD"; // Act ProducerCharge result = calculator.CalculateCharge(A.Dummy<string>(), producer, 2016); // Assert Assert.Equal(0, result.Amount); }
public async void GetProducerChargeBand_GivenPreviousAmendmentChargeAndChargeQualifies_EnvironmentAgencyProducerChargeWithZeroAmountShouldBeReturned() { var schemeType = new schemeType() { approvalNo = "app", complianceYear = ComplianceYear.ToString() }; var producerType = new producerType() { registrationNo = "no", eeePlacedOnMarketBand = eeePlacedOnMarketBandType.Morethanorequalto5TEEEplacedonmarket }; var producerCharge = new ProducerCharge() { ChargeBandAmount = new ChargeBandAmount(Guid.NewGuid(), ChargeBand.A, 0) }; A.CallTo(() => registeredProducerDataAccess.GetProducerRegistration(producerType.registrationNo, ComplianceYear, schemeType.approvalNo)) .Returns(RegisteredProducer()); A.CallTo(() => environmentAgencyProducerChargeBandCalculator.GetProducerChargeBand(schemeType, producerType)).Returns(producerCharge); A.CallTo(() => registeredProducerDataAccess.HasPreviousAmendmentCharge(A <string> ._, A <int> ._, A <string> ._)).Returns(true); var result = await calculator.GetProducerChargeBand(schemeType, producerType); Assert.Equal(result.ChargeBandAmount, producerCharge.ChargeBandAmount); Assert.Equal(result.Amount, 0); }
public void Evaluate_ProducerHasOverseasContactInFrance_Passes() { // Arrange EnsureAnOverseasProducerIsNotBasedInTheUK rule = new EnsureAnOverseasProducerIsNotBasedInTheUK(); addressType address = new addressType(); address.country = countryType.FRANCE; contactDetailsType overseasContact = new contactDetailsType(); overseasContact.address = address; overseasProducerType overseasProducer = new overseasProducerType(); overseasProducer.overseasContact = overseasContact; authorisedRepresentativeType authorisedRepresentative = new authorisedRepresentativeType(); authorisedRepresentative.overseasProducer = overseasProducer; producerType producer = new producerType(); producer.authorisedRepresentative = authorisedRepresentative; // Act RuleResult result = rule.Evaluate(producer); // Assert Assert.Equal(true, result.IsValid); }
public void Evaluate_ProducerHasOverseaseContactInEngland_FailsWithError() { // Arrange EnsureAnOverseasProducerIsNotBasedInTheUK rule = new EnsureAnOverseasProducerIsNotBasedInTheUK(); addressType address = new addressType(); address.country = countryType.UKENGLAND; contactDetailsType overseasContact = new contactDetailsType(); overseasContact.address = address; overseasProducerType overseasProducer = new overseasProducerType(); overseasProducer.overseasContact = overseasContact; authorisedRepresentativeType authorisedRepresentative = new authorisedRepresentativeType(); authorisedRepresentative.overseasProducer = overseasProducer; producerType producer = new producerType(); producer.authorisedRepresentative = authorisedRepresentative; // Act RuleResult result = rule.Evaluate(producer); // Assert Assert.Equal(false, result.IsValid); Assert.Equal(ErrorLevel.Error, result.ErrorLevel); }
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 async Task Evaluate_NoExistingProducerDetails_DoesNotRetrieveProducerEeeData_AndReturnsPass() { // Arrange var builder = new ProducerObligationTypeChangeBuilder(); A.CallTo(() => builder.ProducerQuerySet.GetLatestProducerForComplianceYearAndScheme(A<string>._, A<string>._, A<Guid>._)) .Returns(null); var newProducerDetails = new producerType { status = statusType.A, obligationType = obligationTypeType.B2C }; // Act var result = await builder.Build().Evaluate(newProducerDetails); // Assert A.CallTo(() => builder.ProducerQuerySet.GetLatestProducerForComplianceYearAndScheme(A<string>._, A<string>._, A<Guid>._)) .MustHaveHappened(); A.CallTo(() => builder.SchemeEeeDataQuerySet.GetLatestProducerEeeData(A<string>._)) .MustNotHaveHappened(); Assert.True(result.IsValid); }
public void Evaluate_Insert_MatchingMigratedProducerCompanyRegistrationNumber_ReturnsError() { string companyNumber = "1234"; var newProducer = new producerType() { status = statusType.I, producerBusiness = new producerBusinessType() { Item = new companyType() { companyNumber = companyNumber } } }; A.CallTo(() => producerQuerySet.GetLatestCompanyProducers()).Returns(new List <ProducerSubmission>()); var migratedProducer = A.Fake <MigratedProducer>(); A.CallTo(() => migratedProducer.CompanyNumber).Returns(companyNumber); A.CallTo(() => migratedProducerQuerySet.GetAllMigratedProducers()).Returns(new List <MigratedProducer>() { migratedProducer }); var result = new CompanyAlreadyRegistered(producerQuerySet, migratedProducerQuerySet).Evaluate(newProducer); Assert.False(result.IsValid); Assert.Equal(Core.Shared.ErrorLevel.Error, result.ErrorLevel); }
public void Evaluate_Amend_MatchingProducerNotACompany_ReturnsPass() { // Arrange string companyNumber = "1234"; var newProducer = new producerType() { status = statusType.A, registrationNo = "prn", producerBusiness = new producerBusinessType() { Item = new companyType() { companyNumber = companyNumber } } }; var existingProducer = FakeProducer.Create(ObligationType.Both, "prn", producerBusiness: new ProducerBusiness(partnership: new Partnership("PartnerShip", A.Dummy <ProducerContact>(), new List <Partner>()))); A.CallTo(() => producerQuerySet.GetLatestProducerFromPreviousComplianceYears("prn")) .Returns(existingProducer); // Act var result = new CompanyRegistrationNumberChange(producerQuerySet) .Evaluate(newProducer); // Assert A.CallTo(() => producerQuerySet.GetLatestProducerFromPreviousComplianceYears("prn")) .MustHaveHappened(); Assert.True(result.IsValid); }
public async Task Evaluate_ProducerObligationTypeUnchanged_DoesNotRetrieveProducerEeeData_AndReturnsPass() { // Arrange var builder = new ProducerObligationTypeChangeBuilder(); var existingProducerDetails = A.Fake <ProducerSubmission>(); A.CallTo(() => existingProducerDetails.ObligationType) .Returns(ObligationType.B2C); A.CallTo(() => builder.ProducerQuerySet.GetLatestProducerForComplianceYearAndScheme(A <string> ._, A <string> ._, A <Guid> ._)) .Returns(existingProducerDetails); var newProducerDetails = new producerType { status = statusType.A, obligationType = obligationTypeType.B2C }; // Act var result = await builder.Build().Evaluate(newProducerDetails); // Assert A.CallTo(() => builder.ProducerQuerySet.GetLatestProducerForComplianceYearAndScheme(A <string> ._, A <string> ._, A <Guid> ._)) .MustHaveHappened(); A.CallTo(() => builder.SchemeEeeDataQuerySet.GetLatestProducerEeeData(A <string> ._)) .MustNotHaveHappened(); Assert.True(result.IsValid); }
public void Evaluate_Amend_MatchingProducerDifferentCompanyNumber_ReturnsWarning() { // Arrange var newProducer = new producerType() { status = statusType.A, registrationNo = "prn", producerBusiness = new producerBusinessType() { Item = new companyType() { companyNumber = "1111" } } }; var existingProducer = FakeProducer.Create(ObligationType.Both, "prn", producerBusiness: new ProducerBusiness(new Company("Company", "1234", null))); A.CallTo(() => producerQuerySet.GetLatestProducerFromPreviousComplianceYears("prn")) .Returns(existingProducer); // Act var result = new CompanyRegistrationNumberChange(producerQuerySet) .Evaluate(newProducer); // Assert A.CallTo(() => producerQuerySet.GetLatestProducerFromPreviousComplianceYears("prn")) .MustHaveHappened(); Assert.False(result.IsValid); Assert.Equal(Core.Shared.ErrorLevel.Warning, result.ErrorLevel); }
public void Evaluate_Amend_MatchingCompanyNumbersAfterFormatting_ReturnsPass(string newCompanyNumber, string existingCompanyNumber) { // Arrange var newProducer = new producerType() { status = statusType.A, registrationNo = "prn", producerBusiness = new producerBusinessType() { Item = new companyType() { companyNumber = newCompanyNumber } } }; var existingProducer = FakeProducer.Create(ObligationType.Both, "prn", producerBusiness: new ProducerBusiness(new Company("Company", existingCompanyNumber, null))); A.CallTo(() => producerQuerySet.GetLatestProducerFromPreviousComplianceYears("prn")) .Returns(existingProducer); // Act var result = new CompanyRegistrationNumberChange(producerQuerySet) .Evaluate(newProducer); // Assert Assert.True(result.IsValid); }
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 ProducerCharge GetProducerChargeBand(schemeType scheme, producerType producer, MemberUpload upload, string name) { var calculator = chargeChargeBandCalculators.FirstOrDefault(c => c.IsMatch(scheme, producer, upload, name)); if (calculator == null) { throw new ApplicationException(string.Format("No charge band calculator found for scheme {0} and producer {1}", scheme.approvalNo, producer.tradingName)); } return(calculator.GetProducerChargeBand(scheme, producer, upload)); }
public void GetProducerName_ProducerBusinessIsNull_ReturnsTradingName() { const string tradingName = "some trading name"; var producer = new producerType { tradingName = tradingName }; Assert.Equal(tradingName, producer.GetProducerName()); }
public void AuthorisedRepresentativeIsNotAValidBusinessType_ThrowsArgumentException() { var producer = new producerType { authorisedRepresentative = new authorisedRepresentativeType { overseasProducer = new overseasProducerType() }, producerBusiness = new producerBusinessType { Item = new object() } }; Assert.Throws<ArgumentException>(() => Rule().Evaluate(producer)); }
public void InsertProducer_Or_ProducerHasNoRegistrationNumber_ValidationSucceeds(string prn, statusType status) { var producer = new producerType() { registrationNo = prn, status = status }; var result = Rule().Evaluate(producer); Assert.True(result.IsValid); }
public void AnnualTurnoverMatchesWithBand_ShouldReturnValidResult(annualTurnoverBandType annualTurnoverBand, double annualTurnover) { var producer = new producerType { annualTurnover = decimal.Parse(annualTurnover.ToString(CultureInfo.InvariantCulture)), annualTurnoverBand = annualTurnoverBand }; var result = Rule().Evaluate(producer); Assert.True(result.IsValid); }
public RuleResult Evaluate(producerType newProducer) { var result = RuleResult.Pass(); if (newProducer.status == statusType.A && newProducer.producerBusiness != null) { var newCompany = newProducer.producerBusiness.Item as companyType; if (newCompany != null) { var existingProducer = producerQuerySet .GetLatestProducerFromPreviousComplianceYears(newProducer.registrationNo); if (existingProducer != null && existingProducer.ProducerBusiness.CompanyDetails != null) { var existingCompanyNumberFormatted = CompanyRegistrationNumberFormatter .FormatCompanyRegistrationNumber(existingProducer.ProducerBusiness.CompanyDetails.CompanyNumber); if (!string.IsNullOrEmpty(existingCompanyNumberFormatted)) { var newCompanyNumberFormatted = CompanyRegistrationNumberFormatter .FormatCompanyRegistrationNumber(newCompany.companyNumber); if (existingCompanyNumberFormatted != newCompanyNumberFormatted) { if (string.IsNullOrEmpty(newCompanyNumberFormatted)) { result = RuleResult.Fail( string.Format("The company registration number of {0} {1} which is currently {2} will be removed.", existingProducer.OrganisationName, existingProducer.RegisteredProducer.ProducerRegistrationNumber, existingProducer.ProducerBusiness.CompanyDetails.CompanyNumber), ErrorLevel.Warning); } else { result = RuleResult.Fail( string.Format("The company registration number of {0} {1} will change from {2} to {3}.", existingProducer.OrganisationName, existingProducer.RegisteredProducer.ProducerRegistrationNumber, existingProducer.ProducerBusiness.CompanyDetails.CompanyNumber, newCompany.companyNumber), ErrorLevel.Warning); } } } } } } return(result); }
public RuleResult Evaluate(producerType newProducer) { var result = RuleResult.Pass(); if (newProducer.status == statusType.A && newProducer.producerBusiness != null) { var newCompany = newProducer.producerBusiness.Item as companyType; if (newCompany != null) { var existingProducer = producerQuerySet .GetLatestProducerFromPreviousComplianceYears(newProducer.registrationNo); if (existingProducer != null && existingProducer.ProducerBusiness.CompanyDetails != null) { var existingCompanyNumberFormatted = CompanyRegistrationNumberFormatter .FormatCompanyRegistrationNumber(existingProducer.ProducerBusiness.CompanyDetails.CompanyNumber); if (!string.IsNullOrEmpty(existingCompanyNumberFormatted)) { var newCompanyNumberFormatted = CompanyRegistrationNumberFormatter .FormatCompanyRegistrationNumber(newCompany.companyNumber); if (existingCompanyNumberFormatted != newCompanyNumberFormatted) { if (string.IsNullOrEmpty(newCompanyNumberFormatted)) { result = RuleResult.Fail( string.Format("The company registration number of {0} {1} which is currently {2} will be removed.", existingProducer.OrganisationName, existingProducer.RegisteredProducer.ProducerRegistrationNumber, existingProducer.ProducerBusiness.CompanyDetails.CompanyNumber), ErrorLevel.Warning); } else { result = RuleResult.Fail( string.Format("The company registration number of {0} {1} will change from {2} to {3}.", existingProducer.OrganisationName, existingProducer.RegisteredProducer.ProducerRegistrationNumber, existingProducer.ProducerBusiness.CompanyDetails.CompanyNumber, newCompany.companyNumber), ErrorLevel.Warning); } } } } } } return result; }
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 ProducerCharge CalculateCharge(string schemeApprovalNumber, producerType producer, int complianceYear) { ProducerCharge producerCharge = GetProducerCharge(producer); if (producer.status == statusType.A) { decimal sumOfExistingCharges = dataAccess.FetchSumOfExistingCharges(schemeApprovalNumber, producer.registrationNo, complianceYear); producerCharge.Amount = Math.Max(0, producerCharge.ChargeBandAmount.Amount - sumOfExistingCharges); } return producerCharge; }
public void Amendment_RegistrationNumberIsProdived_PassesValidation() { var producer = new producerType { tradingName = "TestCompany", status = statusType.A, registrationNo = "ABC12345" }; var result = Rule().Evaluate(producer); Assert.True(result.IsValid); }
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 void Insert_RegistrationNumberIsNullOrEmpty_PassesValidation(string registrationNumber, string tradingName) { var producer = new producerType { tradingName = tradingName, status = statusType.I, registrationNo = registrationNumber }; var validationResult = Rule().Evaluate(producer); Assert.True(validationResult.IsValid); }
public void NotAnAuthorisedRepresentativeButIsInNonUkCountry_PassesValidation() { const countryType SomeNonUkCountry = countryType.TURKEY; var producer = new producerType { authorisedRepresentative = new authorisedRepresentativeType { overseasProducer = null }, producerBusiness = MakeProducerBusinessTypeInCountry(SomeNonUkCountry) }; var validationResult = Rule().Evaluate(producer); Assert.True(validationResult.IsValid); }
public void Evaluate_ProducerHasNoAuthorisedRepresentative_Passes() { // Arrange EnsureAnOverseasProducerIsNotBasedInTheUK rule = new EnsureAnOverseasProducerIsNotBasedInTheUK(); producerType producer = new producerType(); producer.authorisedRepresentative = null; // Act RuleResult result = rule.Evaluate(producer); // Assert Assert.Equal(true, result.IsValid); }
public void AuthorisedRepresentativeOfficeCountryIsInUnitedKingdom_PassesValidation(countryType someUkCountry) { var producer = new producerType { authorisedRepresentative = new authorisedRepresentativeType { overseasProducer = new overseasProducerType() }, producerBusiness = MakeProducerBusinessTypeInCountry(someUkCountry) }; var result = Rule().Evaluate(producer); Assert.True(result.IsValid); }
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); }
private ProducerCharge GetProducerCharge(producerType producer) { ChargeBand chargeBandType = producerChargeBandCalculator.GetProducerChargeBand( producer.annualTurnoverBand, producer.VATRegistered, producer.eeePlacedOnMarketBand); ChargeBandAmount currentChargeBandAmount = dataAccess.FetchCurrentChargeBandAmount(chargeBandType); return new ProducerCharge() { ChargeBandAmount = currentChargeBandAmount, Amount = currentChargeBandAmount.Amount }; }
public void ProducerHasMigratedPrnNumberThatDoesExist_ValidationSucceeds() { const string prn = "ABC12345"; A.CallTo(() => migratedProducerQuerySet.GetAllRegistrationNumbers()) .Returns(new List<string> { prn }); var producer = new producerType() { registrationNo = prn, status = statusType.A }; var result = Rule().Evaluate(producer); Assert.True(result.IsValid); }
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_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 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(); }
ProducerAlreadyRegisteredForSameComplianceYearAndObligationType_ValidationFails_AndMessageIncludesPrnAndObligationType_AndErrorLevelIsError (obligationTypeType existingObligationType, obligationTypeType xmlObligationType) { var schemeId = Guid.NewGuid(); A.CallTo(() => producerQuerySet.GetProducerForOtherSchemeAndObligationType(A<string>._, A<string>._, schemeId, A<ObligationType>._)) .Returns(FakeProducer.Create(existingObligationType.ToDomainObligationType(), "ABC12345")); const string complianceYear = "2016"; const string registrationNumber = "ABC12345"; var producer = new producerType() { tradingName = "Test Trader", obligationType = xmlObligationType, registrationNo = registrationNumber, status = statusType.A, producerBusiness = new producerBusinessType { Item = new partnershipType { partnershipName = "New Producer Name" } } }; schemeType scheme = new schemeType() { complianceYear = complianceYear, producerList = new[] { producer } }; var result = Rule().Evaluate(scheme, producer, schemeId); Assert.False(result.IsValid); Assert.Contains(registrationNumber, result.Message); Assert.Contains(existingObligationType.ToDomainObligationType().ToString(), result.Message); Assert.Equal(Core.Shared.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(); }