コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
ファイル: ProducerNameChange.cs プロジェクト: DEFRA/prsd-weee
        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());
        }