Ejemplo n.º 1
0
        /// <summary>
        /// Проверить контрагента на резидент/нерезидент.
        /// </summary>
        /// <param name="document">Документ.</param>
        /// <param name="task">Задача на согласование.</param>
        /// <returns>Результат проверки условия. Структуру формата - выполнение условия (true, если контрагент нерезидент), сообщение об ошибке.</returns>
        private Structures.ConditionBase.ConditionResult CheckNonresident(IOfficialDocument document, IApprovalTask task)
        {
            if (OutgoingDocumentBases.Is(document))
            {
                var outgoingDocument = OutgoingDocumentBases.As(document);
                // Если хоть один адресат нерезидент, идем по ветке с нерезидентом.
                var isNonResident = outgoingDocument.Addressees.Any(x => x.Correspondent.Nonresident == true);
                return(Structures.ConditionBase.ConditionResult.Create(isNonResident, string.Empty));
            }

            if (ContractualDocumentBases.Is(document))
            {
                var counterparty = ContractualDocumentBases.As(document).Counterparty;
                var nonresident  = counterparty != null ? counterparty.Nonresident : true;
                return(Structures.ConditionBase.ConditionResult.Create(nonresident, string.Empty));
            }

            if (AccountingDocumentBases.Is(document))
            {
                var counterparty = AccountingDocumentBases.As(document).Counterparty;
                var nonresident  = counterparty != null ? counterparty.Nonresident : true;
                return(Structures.ConditionBase.ConditionResult.Create(nonresident, string.Empty));
            }

            return(Structures.ConditionBase.ConditionResult.Create(null, ConditionBases.Resources.DocumentNotContainsFieldCounterpartyOrCorrespondent));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Проверить, требуется ли скрытие создания сопроводительного письма.
        /// </summary>
        /// <param name="collapsedStageTypes">Схлопнутые этапы.</param>
        /// <returns>True, если требуется.</returns>
        public bool NeedHideCoverLetterAction(List <Enumeration?> collapsedStageTypes)
        {
            if (!collapsedStageTypes.Where(s => s == Docflow.ApprovalStage.StageType.Sending).Any())
            {
                return(true);
            }

            var document = _obj.DocumentGroup.OfficialDocuments.FirstOrDefault();

            if (ContractualDocumentBases.Is(document) || IncomingDocumentBases.Is(document))
            {
                return(false);
            }

            return(true);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Проверить валюту.
        /// </summary>
        /// <param name="document">Документ.</param>
        /// <param name="task">Задача на согласование.</param>
        /// <returns>Результат проверки условия. Структуру формата - выполнение условия (true, если валюта совпадает), сообщение об ошибке.</returns>
        private Structures.ConditionBase.ConditionResult CheckCurrency(IOfficialDocument document, IApprovalTask task)
        {
            var accountingDocument  = AccountingDocumentBases.As(document);
            var contractualDocument = ContractualDocumentBases.As(document);

            if (accountingDocument == null && contractualDocument == null)
            {
                return(Structures.ConditionBase.ConditionResult.Create(null, ConditionBases.Resources.DocumentNotContainsFieldCurrency));
            }

            if (accountingDocument != null && accountingDocument.Currency != null)
            {
                return(Structures.ConditionBase.ConditionResult.Create(_obj.Currencies.Any(c => Equals(c.Currency, accountingDocument.Currency)), string.Empty));
            }

            if (contractualDocument != null && contractualDocument.Currency != null)
            {
                return(Structures.ConditionBase.ConditionResult.Create(_obj.Currencies.Any(c => Equals(c.Currency, contractualDocument.Currency)), string.Empty));
            }

            return(Structures.ConditionBase.ConditionResult.Create(null, ConditionBases.Resources.FillCurrencyInContractCard));
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Проверить сумму документа.
        /// </summary>
        /// <param name="document">Документ.</param>
        /// <param name="task">Задача на согласование.</param>
        /// <returns>Результат проверки условия. Структуру формата - выполнение условия (true, если сумма документа больше или равна сумме условия), сообщение об ошибке.</returns>
        private Structures.ConditionBase.ConditionResult CheckAmountIsMore(IOfficialDocument document, IApprovalTask task)
        {
            if (!AccountingDocumentBases.Is(document) && !ContractualDocumentBases.Is(document))
            {
                return(Structures.ConditionBase.ConditionResult.Create(null, ConditionBases.Resources.DocumentNotContainsFieldAmount));
            }

            var accounting  = AccountingDocumentBases.As(document);
            var contractual = ContractualDocumentBases.As(document);

            if (accounting != null && accounting.TotalAmount.HasValue)
            {
                return(Structures.ConditionBase.ConditionResult.Create(this.CheckAmount(accounting.TotalAmount), string.Empty));
            }

            if (contractual != null && contractual.TotalAmount.HasValue)
            {
                return(Structures.ConditionBase.ConditionResult.Create(this.CheckAmount(contractual.TotalAmount), string.Empty));
            }

            return(Structures.ConditionBase.ConditionResult.Create(null, ConditionBases.Resources.FillTotalAmountInContractCard));
        }