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 Insert_AndProducerExistsWithMatchingPrnInComplianceYearAndScheme_ReturnsPass() { A.CallTo(() => producerQuerySet.GetLatestProducerForComplianceYearAndScheme(A <string> ._, A <string> ._, A <Guid> ._)) .Returns(FakeProducer.Create(ObligationType.Both, "ABC12345")); var result = Rule().Evaluate(new schemeType(), new producerType { status = statusType.I, producerBusiness = new producerBusinessType { Item = new partnershipType { partnershipName = "New Producer Name" } } }, A.Dummy <Guid>()); 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 ProducerNameChangeTests() { producerQuerySet = A.Fake<IProducerQuerySet>(); migratedProducerQuerySet = A.Fake<IMigratedProducerQuerySet>(); // By default, nulls returned from queries A.CallTo(() => producerQuerySet.GetLatestProducerForComplianceYearAndScheme(A<string>._, A<string>._, A<Guid>._)) .Returns(null); A.CallTo(() => producerQuerySet.GetLatestProducerFromPreviousComplianceYears(A<string>._)) .Returns(null); A.CallTo(() => migratedProducerQuerySet.GetMigratedProducer(A<string>._)) .Returns(null); A.CallTo(() => producerQuerySet.GetProducerForOtherSchemeAndObligationType(A<string>._, A<string>._, A<Guid>._, A<ObligationType>._)) .Returns(null); }
public ProducerAlreadyRegisteredEvaluatorTests() { producerQuerySet = A.Fake <IProducerQuerySet>(); migratedProducerQuerySet = A.Fake <IMigratedProducerQuerySet>(); // By default, nulls returned from queries A.CallTo(() => producerQuerySet.GetLatestProducerForComplianceYearAndScheme(A <string> ._, A <string> ._, A <Guid> ._)) .Returns(null); A.CallTo(() => producerQuerySet.GetLatestProducerFromPreviousComplianceYears(A <string> ._)) .Returns(null); A.CallTo(() => migratedProducerQuerySet.GetMigratedProducer(A <string> ._)) .Returns(null); A.CallTo(() => producerQuerySet.GetProducerForOtherSchemeAndObligationType(A <string> ._, A <string> ._, A <Guid> ._, A <ObligationType> ._)) .Returns(null); }
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()); }