Exemplo n.º 1
0
        public void WalkThrough(RuleNode rootNode, BulletinScreenModelBase bulletin)
        {
            var visitor = new GeneralErrorMarkerVisitor();

            rootNode.Accept(visitor);

            SetWasntChecked(visitor);

            _votesFieldsWasntCheckedSetter.SetVoteFieldsThatDontHaveCorrespondingChecksSetAsWasntChecked(bulletin);
        }
Exemplo n.º 2
0
        private static RuleNode GetQuestionsParallelRule(List <Question> questions, BulletinScreenModelBase bulletin)
        {
            var questionRules = new List <RuleNode>();

            questionRules.AddRange(GetQSimpleParallelRules(questions, bulletin));
            questionRules.AddRange(GetQSeparateParallelRules(questions, bulletin));
            questionRules.AddRange(GetQCumulativeParallelRules(questions, bulletin));
            return(RuleBuilder
                   .ParallelRootRule(questionRules.ToArray())
                   .GetRoot());
        }
Exemplo n.º 3
0
 public static RuleNode BuildGraph(BulletinScreenModelBase bulletin)
 {
     return(RuleBuilder
            .RootRule(new PacketMustBeRegisteredRule(bulletin.PacketIsRegistered))
            .AddParallelRule(bulletin.Signatures,
                             signature =>
                             RuleBuilder.RootRule(new SignatureMustBePresentRule(signature))
                             .AddParallelRule(new OwnersCountSignatureWarningRule(signature, bulletin.OwnersCount),
                                              GetQuestionsParallelRule(signature.AssociatedQuestions, bulletin))
                             .GetRoot())
            .GetRoot());
 }
Exemplo n.º 4
0
 private static List <RuleNode> GetQSimpleParallelRules(List <Question> questions, BulletinScreenModelBase bulletin)
 {
     return(questions
            .OfType <QSimple>()
            .ToList()
            .Select(q =>
                    RuleBuilder
                    .RootRuleChain(GetRuleForBaseYesNoAbstainedPoint(q.Point, bulletin, q.AmountOfStock, isQSimpWithPrivDividends: q.IsQuestionAboutPrivilegeDividends.Value && bulletin.HasPrivilegeVotes))
                    .AddRule(new QSimpleQSepAndHierSubQFractionDistributionRule(q.Point, () => q.AllowedVotesAmountFractions, bulletin.IsADRBulletin, () => bulletin.AdditionalMarks.HasInstructions.Value))
                    .AddRule(new AdrMustHaveExactVotesSpreadedForQSimple(q.Point, () => q.AmountOfStock, bulletin.IsADRBulletin))
                    .AddRule(new QSimpleQSepAndHierSubQWarningRule(q.Point, bulletin.AdditionalMarks, () => q.AmountOfStock))
                    .AddRule(new QSimplePrivilegeDividendsNoAbsWarningRule(q, bulletin.HasPrivilegeVotes))
                    .GetRoot()
                    )
            .ToList());
 }
Exemplo n.º 5
0
        private static IEnumerable <RuleNode> GetQSeparateParallelRules(List <Question> questions, BulletinScreenModelBase bulletin)
        {
            return(questions
                   .OfType <QSeparate>().ToList()
                   .Select(qsep =>
                           RuleBuilder
                           .RootRule(new ParallelRule(qsep.CandidatePoints.Select(cp =>
                                                                                  RuleBuilder
                                                                                  .RootRuleChain(GetRuleForBaseYesNoAbstainedPoint(cp, bulletin, qsep.AmountOfStock))
                                                                                  .AddRule(new QSimpleQSepAndHierSubQFractionDistributionRule(cp, () => qsep.AllowedVotesAmountFractions, bulletin.IsADRBulletin, () => bulletin.AdditionalMarks.HasInstructions.Value))
                                                                                  .AddRule(new QSimpleQSepAndHierSubQWarningRule(cp, bulletin.AdditionalMarks, () => qsep.AmountOfStock))

                                                                                  .GetRoot()).ToList(),
                                                      shouldGoFurtherDownTheGraphAnyway: true))
                           .AddRule(new QSeparateYesChecksShouldNotExceedPlacesCountRule(qsep, bulletin.AdditionalMarks, () => qsep.AmountOfStock))
                           .AddRule(new AdrMustHaveExactOrLessVotesSpreadedForQSep(qsep, () => qsep.AmountOfStock, bulletin.IsADRBulletin))
                           .GetRoot()
                           ));
        }
Exemplo n.º 6
0
 private static RuleNode GetQCumulativeTableRule(BulletinScreenModelBase bulletin, QCumulative qCum, FractionLong allowedVotesAmount)
 {
     return(GetQCumulativeTableRule(qCum, bulletin.AdditionalMarks, () => bulletin.PackStatus, () => bulletin.TrustExists, () => AmountOfStockSubmitedCalculator.GetAmountOfStockSubmited(qCum, allowedVotesAmount), () => GetNumberOfChecks(qCum), () => BulletinAdditionalMarksToAdditionalChecksEnumConverter.ConvertToAdditionalChecksEnum(bulletin.AdditionalMarks), () => qCum.AdditionalMarks.YesCheckBoxField.Value ? CumYesIs.Checked : CumYesIs.NotChecked));
 }
Exemplo n.º 7
0
 private static IEnumerable <RuleNode> GetQCumulativeParallelRules(List <Question> questions, BulletinScreenModelBase bulletin)
 {
     return
         (questions
          .OfType <QCumulative>()
          .Select(qCum =>
     {
         var allowedVotesAmount = qCum.GetTotalPossibleVotesSum();
         var result =
             RuleBuilder
             .RootRule(new QCumulativeMustHaveAtLeastOneSelectionRule(qCum))
             .AddRuleChain(GetQCumulativeTableRule(bulletin, qCum, allowedVotesAmount))
             .AddRule(new QCumulativeFractionDistributionRule(qCum, () => qCum.AllowedVotesAmountFractions.Select(x => x * (int)qCum.PositionsCount).ToList(), () => BulletinAdditionalMarksToAdditionalChecksEnumConverter.ConvertToAdditionalChecksEnum(bulletin.AdditionalMarks), bulletin.IsADRBulletin, () => bulletin.AdditionalMarks.HasInstructions.Value))                             //todo: move calculation somewhere
             .AddRule(new AdrMustHaveExactVotesSpreadedWithMinimalSpredForQCum(qCum, () => allowedVotesAmount, bulletin.IsADRBulletin))
             .AddRule(new QCumulativeWarningRule(qCum, bulletin.AdditionalMarks, () => allowedVotesAmount))
             .GetRoot();
         return result;
     }));
 }
Exemplo n.º 8
0
        private static RuleNode GetQSimpleQSepAndHierSubQTableRuleChain(BaseYesNoAbsPoint point, BulletinScreenModelBase bulletin, FractionLong amountOfStock, bool isQSimpWithPrivDividends = false)
        {
            var additionalMarks = bulletin.AdditionalMarks;
            Func <PackStatus>            packStatus                   = () => bulletin.PackStatus;
            Func <NumberOfChecks>        numberOfChecks               = () => GetNumberOfChecks(point);
            Func <AdditionalChecks>      additionalChecks             = () => BulletinAdditionalMarksToAdditionalChecksEnumConverter.ConvertToAdditionalChecksEnum(bulletin.AdditionalMarks);
            Func <bool>                  trustExists                  = () => bulletin.TrustExists;
            Func <AmountOfStockSubmited> amountOfStockSubmited        = () => AmountOfStockSubmitedCalculator.GetAmountOfStockSubmited(point, amountOfStock);
            Func <bool>                  isQSimpWithPrivDividendsFunc = () => isQSimpWithPrivDividends;

            return(GetQSimpleQSepAndHierSubQTableRuleChain(point, additionalMarks, packStatus, trustExists, amountOfStockSubmited, numberOfChecks, additionalChecks, isQSimpWithPrivDividendsFunc));
        }
Exemplo n.º 9
0
 private static RuleNode GetRuleForBaseYesNoAbstainedPoint(BaseYesNoAbsPoint qsp, BulletinScreenModelBase bulletin, FractionLong amountOfStock, bool isQSimpWithPrivDividends = false)
 {
     return(RuleBuilder.
            RootRule(new PointShouldHaveAtLeastOneSelectionRule(qsp))
            .AddRule(GetQSimpleQSepAndHierSubQTableRuleChain(qsp, bulletin, amountOfStock, isQSimpWithPrivDividends))
            .GetRoot());
 }
Exemplo n.º 10
0
 public void SetVoteFieldsThatDontHaveCorrespondingChecksSetAsWasntChecked(BulletinScreenModelBase bulletin)
 {
     bulletin
     .Questions
     .ForEach(SetVoteFieldsThatDontHaveCorrespondingChecksSetAsWasntChecked);
 }
Exemplo n.º 11
0
 public Validator(BulletinScreenModelBase bulletin)
 {
     Bulletin       = bulletin;
     _graphRootNode = GraphProvider.BuildGraph(bulletin);
 }