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)); }
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)); }
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; })); }