public override List <Sungero.Docflow.IApprovalRuleBase> GetApprovalRules()
 {
     return(base.GetApprovalRules()
            .Select(r => ContractsApprovalRules.As(r))
            .Where(r => r != null)
            .OrderByDescending(r => r.Priority)
            .ToList <Sungero.Docflow.IApprovalRuleBase>());
 }
        public override List <IApprovalRuleBase> GetApprovalRules()
        {
            var rules = base.GetApprovalRules().OrderByDescending(r => r.Priority).ToList();

            // Если заполнен договор - добавить его правила для выбора.
            if (_obj.LeadingDocument != null)
            {
                var allContractRules = Docflow.PublicFunctions.OfficialDocument.Remote.GetApprovalRules(_obj.LeadingDocument);

                // #57673 Регламенты для доп. соглашений приоритетнее договорных.
                // Если регламент подходит для обоих видов, то явное указание вида приоритетнее неявного.
                var intersect = rules.Intersect(allContractRules).ToList();
                rules = rules.Except(allContractRules).ToList();
                var supAgreementKinds = Docflow.PublicFunctions.DocumentKind.GetAvailableDocumentKinds(typeof(ISupAgreement)).ToList();
                rules.AddRange(intersect.Where(r => r.DocumentKinds.Any(k => supAgreementKinds.Contains(k.DocumentKind))));
                rules = rules.OrderByDescending(r => r.Priority).ToList();

                allContractRules = allContractRules.Except(rules).ToList();
                rules.AddRange(allContractRules.Select(r => ContractsApprovalRules.As(r)).Where(r => r != null).OrderByDescending(r => r.Priority).ToList());
            }
            return(rules);
        }