示例#1
0
        /// <summary>
        /// Отправка документа, либо ответа контрагенту с учетом выбранного сервиса обмена и приложений в задаче на согласование.
        /// </summary>
        /// <param name="document">Документ.</param>
        /// <param name="task">Задача.</param>
        public static void SendToCounterparty(IOfficialDocument document, Workflow.ITask task)
        {
            var approvalTask = ApprovalTasks.As(task);
            var addenda      = approvalTask.AddendaGroup.OfficialDocuments.ToList();

            Exchange.PublicFunctions.Module.SendResultToCounterparty(document, approvalTask.ExchangeService, addenda);
        }
示例#2
0
        /// <summary>
        /// Запросить подтверждение на выполнение задания.
        /// </summary>
        /// <param name="attachedDocument">Документ.</param>
        /// <param name="confirmationMessage">Сообщение с подтверждением.</param>
        /// <param name="dialogId">Ид диалога.</param>
        /// <param name="isSigning">Признак того, что документ проходит этап подписания.</param>
        /// <returns>True, если запрос был подтверждён.</returns>
        /// <remarks>Делает remote запрос.</remarks>
        public static bool ConfirmCompleteAssignment(IOfficialDocument attachedDocument, string confirmationMessage, string dialogId, bool isSigning = false)
        {
            var changed = Functions.ApprovalTask.Remote.DocumentHasBodyUpdateAfterLastView(attachedDocument);
            var viewed  = Functions.ApprovalTask.Remote.DocumenHasBeenViewed(attachedDocument);

            return(ConfirmCompleteAssignment(changed, viewed, confirmationMessage, dialogId, isSigning));
        }
示例#3
0
        /// <summary>
        /// Проверка, относится ли документ к проекту.
        /// </summary>
        /// <param name="document">Документ.</param>
        /// <param name="project">Проект.</param>
        /// <returns>Если документ относится к проекту, то true, иначе - false.</returns>
        public static bool IsDocumentBelongProject(IOfficialDocument document, IProject project)
        {
            var documentProject = Docflow.PublicFunctions.OfficialDocument.GetProject(document);
            var projects        = GetProjectAndSubProjects(project);

            return(documentProject != null?projects.Contains(documentProject) : false);
        }
示例#4
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));
        }
        /// <summary>
        /// Проверить доп. соглашение на дубли.
        /// </summary>
        /// <param name="supAgreement">Доп. соглашение.</param>
        /// <param name="businessUnit">НОР.</param>
        /// <param name="registrationNumber">Рег. номер.</param>
        /// <param name="registrationDate">Дата регистрации.</param>
        /// <param name="counterparty">Контрагент.</param>
        /// <param name="contract">Договор.</param>
        /// <returns>Признак дублей.</returns>
        public static bool HaveDuplicates(ISupAgreement supAgreement,
                                          Sungero.Company.IBusinessUnit businessUnit,
                                          string registrationNumber,
                                          DateTime?registrationDate,
                                          Sungero.Parties.ICounterparty counterparty,
                                          IOfficialDocument contract)
        {
            if (supAgreement == null ||
                businessUnit == null ||
                string.IsNullOrWhiteSpace(registrationNumber) ||
                registrationDate == null ||
                counterparty == null ||
                contract == null)
            {
                return(false);
            }

            return(Functions.SupAgreement.Remote.GetDuplicates(supAgreement,
                                                               businessUnit,
                                                               registrationNumber,
                                                               registrationDate,
                                                               counterparty,
                                                               contract)
                   .Any());
        }
示例#6
0
        /// <summary>
        /// Проверить способ доставки документа.
        /// </summary>
        /// <param name="document">Документ.</param>
        /// <param name="task">Задача на согласование.</param>
        /// <returns>Результат проверки условия. Структуру формата - выполнение условия (true, если способ доставки документа в списке).</returns>
        private Structures.ConditionBase.ConditionResult CheckDeliveryMethod(IOfficialDocument document, IApprovalTask task)
        {
            var deliveryMethod = task != null ? task.DeliveryMethod : document.DeliveryMethod;

            return(Structures.ConditionBase.ConditionResult
                   .Create(_obj.DeliveryMethods.Any(d => Equals(d.DeliveryMethod, deliveryMethod)), string.Empty));
        }
示例#7
0
        public virtual string GetNextNumber(DateTime date, int leadDocumentId, IOfficialDocument document, string leadingDocumentNumber,
                                            int departmentId, int businessUnitId, string caseFileIndex, string docKindCode, string indexLeadingSymbol)
        {
            var index = Functions.DocumentRegister.GetNextIndex(_obj, date, leadDocumentId, departmentId, businessUnitId, document).ToString();

            var departmentCode = string.Empty;

            if (departmentId != 0)
            {
                var department = Departments.Get(departmentId);
                if (department != null)
                {
                    departmentCode = department.Code ?? string.Empty;
                }
            }

            var businessUnitCode = string.Empty;

            if (businessUnitId != 0)
            {
                var businessUnit = BusinessUnits.Get(businessUnitId);
                if (businessUnit != null)
                {
                    businessUnitCode = businessUnit.Code ?? string.Empty;
                }
            }

            var counterpartyCode = Functions.OfficialDocument.GetCounterpartyCode(document);

            var number = Functions.DocumentRegister.GenerateRegistrationNumber(_obj, date, index, leadingDocumentNumber,
                                                                               departmentCode, businessUnitCode, caseFileIndex, docKindCode, counterpartyCode, indexLeadingSymbol);

            return(number);
        }
示例#8
0
        /// <summary>
        /// Выдать права на документ по правилу.
        /// </summary>
        /// <param name="document">Документ.</param>
        /// <param name="rule">Правило.</param>
        /// <returns>Возвращает true, если права удалось выдать, false - если надо повторить позже.</returns>
        public static bool TryGrantRightsToDocument(IOfficialDocument document, IAccessRightsRule rule)
        {
            Logger.DebugFormat("TryGrantRightsToDocument: document {0}, rule {1}", document.Id, rule.Id);

            var isChanged = false;

            foreach (var member in rule.Members)
            {
                if (!document.AccessRights.IsGrantedDirectly(Docflow.PublicFunctions.Module.GetRightTypeGuid(member.RightType), member.Recipient))
                {
                    if (Locks.GetLockInfo(document).IsLockedByOther)
                    {
                        return(false);
                    }

                    document.AccessRights.Grant(member.Recipient, Docflow.PublicFunctions.Module.GetRightTypeGuid(member.RightType));
                    isChanged = true;
                }
            }
            if (isChanged)
            {
                ((Domain.Shared.IExtendedEntity)document).Params[Constants.OfficialDocument.DontUpdateModified] = true;
                document.Save();
            }

            return(true);
        }
示例#9
0
        /// <summary>
        /// Проверить возможность построения номера по разрезам журнала.
        /// </summary>
        /// <param name="document">Документ.</param>
        /// <returns>Сообщение об ошибке. Пустая строка, если возможно сформировать номер.</returns>
        public virtual string CheckDocumentRegisterSections(IOfficialDocument document)
        {
            var departmentValidationErrors = Functions.DocumentRegister.GetDepartmentValidationError(_obj, document);

            if (!Equals(departmentValidationErrors, string.Empty))
            {
                return(departmentValidationErrors);
            }

            var businessUnitValidationErrors = Functions.DocumentRegister.GetBusinessUnitValidationError(_obj, document);

            if (!Equals(businessUnitValidationErrors, string.Empty))
            {
                return(businessUnitValidationErrors);
            }

            var docKindCodeValidationErrors = Functions.DocumentRegister.GetDocumentKindValidationError(_obj, document);

            if (!Equals(docKindCodeValidationErrors, string.Empty))
            {
                return(docKindCodeValidationErrors);
            }

            var docCaseFileValidationErrors = Functions.DocumentRegister.GetCaseFileValidationError(_obj, document);

            if (!Equals(docCaseFileValidationErrors, string.Empty))
            {
                return(docCaseFileValidationErrors);
            }

            return(string.Empty);
        }
示例#10
0
        public virtual Sungero.Reporting.IReport GetAcquaintanceReport(IOfficialDocument document)
        {
            var report = Reports.GetAcquaintanceReport();

            report.Document = document;
            return(report);
        }
示例#11
0
 /// <summary>
 /// Проверить наличие проекта в документе.
 /// </summary>
 /// <param name="document">Документ.</param>
 /// <returns>Результат проверки условия. Структуру формата - выполнение условия (true, если проект указан в документе), сообщение об ошибке.</returns>
 private Structures.ConditionBase.ConditionResult CheckProjectDocument(IOfficialDocument document)
 {
     if (document != null)
     {
         return(Structures.ConditionBase.ConditionResult.Create(Functions.OfficialDocument.IsProjectDocument(document), string.Empty));
     }
     return(Structures.ConditionBase.ConditionResult.Create(null, string.Empty));
 }
示例#12
0
        /// <summary>
        /// Проверить наличие вложения в группу приложений с нужным видом.
        /// </summary>
        /// <param name="document">Документ.</param>
        /// <param name="task">Задача на согласование.</param>
        /// <returns>Результат проверки условия. Структуру формата - выполнение условия (true, если вложен документ с нужным видом).</returns>
        public virtual Structures.ConditionBase.ConditionResult CheckHasAddenda(IOfficialDocument document, IApprovalTask task)
        {
            if (task != null)
            {
                return(Structures.ConditionBase.ConditionResult.Create(task.AddendaGroup.OfficialDocuments.Any(a => Equals(a.DocumentKind, _obj.AddendaDocumentKind)), string.Empty));
            }

            return(Structures.ConditionBase.ConditionResult.Create(null, string.Empty));
        }
        /// <summary>
        /// Проверить условие.
        /// </summary>
        /// <param name="document">Документ.</param>
        /// <param name="task">Задача на согласование.</param>
        /// <returns>True, если условие выполняется, и false, если не выполняется.</returns>
        public override Structures.ConditionBase.ConditionResult CheckCondition(IOfficialDocument document, IApprovalTask task)
        {
            if (_obj.ConditionType == ConditionType.Addressee)
            {
                return(this.CheckAddressee(document, task));
            }

            return(base.CheckCondition(document, task));
        }
示例#14
0
        /// <summary>
        /// Проверить вид документа.
        /// </summary>
        /// <param name="document">Документ.</param>
        /// <returns>Результат проверки условия. Структуру формата - выполнение условия (true, если вид документа в списке), сообщение об ошибке.</returns>
        private Structures.ConditionBase.ConditionResult CheckDocumentKind(IOfficialDocument document)
        {
            if (document != null)
            {
                return(Structures.ConditionBase.ConditionResult.Create(_obj.ConditionDocumentKinds.Any(d => Equals(d.DocumentKind, document.DocumentKind)), string.Empty));
            }

            return(Structures.ConditionBase.ConditionResult.Create(null, string.Empty));
        }
示例#15
0
        /// <summary>
        /// Определять, содержит ли правило условие.
        /// </summary>
        /// <param name="document">Документ.</param>
        /// <param name="task">Задача на согласование.</param>
        /// <param name="condition">Тип условия.</param>
        /// <returns>True, если содержит, иначе false.</returns>
        public bool HasApprovalCondition(IOfficialDocument document, IApprovalTask task, Enumeration condition)
        {
            if (_obj == null)
            {
                return(false);
            }
            var conditions = this.GetConditions(document, task);

            return(conditions.Any(c => c.Condition.ConditionType == condition));
        }
示例#16
0
        /// <summary>
        /// Определять, содержит ли правило этап согласования.
        /// </summary>
        /// <param name="stage">Этап согласования.</param>
        /// <param name="document">Документ.</param>
        /// <param name="stages">Этапы согласования в правильном порядке.</param>
        /// <returns>True, если содержит, иначе false.</returns>
        public bool HasApprovalStage(Enumeration stage, IOfficialDocument document, System.Collections.Generic.List <Structures.Module.DefinedApprovalStageLite> stages)
        {
            if (_obj == null)
            {
                return(false);
            }

            var hasStage = stages.Where(s => s.Stage.StageType == stage).Any();

            return(hasStage);
        }
示例#17
0
        private static string GetOriginalExchangeServiceNameByDocument(IOfficialDocument document)
        {
            var task = Exchange.ExchangeDocumentProcessingTasks.GetAll().FirstOrDefault(t => t.AttachmentDetails.Any(a => a.AttachmentId == document.Id));

            if (task == null)
            {
                return(string.Empty);
            }

            return(task.ExchangeService.Name);
        }
示例#18
0
        /// <summary>
        /// Получить из списка правил подходящие для документа.
        /// </summary>
        /// <param name="document">Документ.</param>
        /// <param name="rules">Правила.</param>
        /// <returns>Подходящие правила.</returns>
        public static List <IAccessRightsRule> GetAvailableRules(IOfficialDocument document, List <IAccessRightsRule> rules)
        {
            var documentGroup = Functions.OfficialDocument.GetDocumentGroup(document);

            return(rules
                   .Where(s => s.Status == Docflow.AccessRightsRule.Status.Active)
                   .Where(s => !s.DocumentKinds.Any() || s.DocumentKinds.Any(k => Equals(k.DocumentKind, document.DocumentKind)))
                   .Where(s => !s.BusinessUnits.Any() || s.BusinessUnits.Any(u => Equals(u.BusinessUnit, document.BusinessUnit)))
                   .Where(s => !s.Departments.Any() || s.Departments.Any(k => Equals(k.Department, document.Department)))
                   .Where(s => !s.DocumentGroups.Any() || s.DocumentGroups.Any(k => Equals(k.DocumentGroup, documentGroup))).ToList());
        }
示例#19
0
        /// <summary>
        /// Проверить условие.
        /// </summary>
        /// <param name="document">Документ.</param>
        /// <param name="task">Задача на согласование.</param>
        /// <returns>Результат проверки условия. Структуру формата - выполнение условия, сообщение об ошибке.</returns>
        public virtual Structures.ConditionBase.ConditionResult CheckCondition(IOfficialDocument document, IApprovalTask task)
        {
            if (_obj.ConditionType == ConditionType.AmountIsMore)
            {
                return(this.CheckAmountIsMore(document, task));
            }

            if (_obj.ConditionType == ConditionType.Nonresident)
            {
                return(this.CheckNonresident(document, task));
            }

            if (_obj.ConditionType == ConditionType.Currency)
            {
                return(this.CheckCurrency(document, task));
            }

            if (_obj.ConditionType == ConditionType.ProjectDocument)
            {
                return(this.CheckProjectDocument(document));
            }

            if (_obj.ConditionType == ConditionType.DocumentKind)
            {
                return(this.CheckDocumentKind(document));
            }

            if (_obj.ConditionType == ConditionType.RolesComparer)
            {
                return(Functions.ConditionBase.Remote.CompareRoles(_obj, task));
            }

            if (_obj.ConditionType == ConditionType.RoleEmpComparer)
            {
                return(Functions.ConditionBase.Remote.CompareRoleAndRecipient(_obj, task));
            }

            if (_obj.ConditionType == ConditionType.DeliveryMethod)
            {
                return(this.CheckDeliveryMethod(document, task));
            }

            if (_obj.ConditionType == ConditionType.SignedByCParty)
            {
                return(this.CheckSignedByCounterparty(document, task));
            }

            if (_obj.ConditionType == ConditionType.HasAddenda)
            {
                return(this.CheckHasAddenda(document, task));
            }

            return(Structures.ConditionBase.ConditionResult.Create(null, ConditionBases.Resources.CannotPerformConditionCheck));
        }
示例#20
0
        /// <summary>
        /// Получить права участников проекта.
        /// </summary>
        /// <param name="queueItem">Элемент очереди.</param>
        /// <param name="document">Документ.</param>
        /// <param name="project">Проект.</param>
        /// <returns>Список прав в виде реципиент-тип прав.</returns>
        internal List <Structures.Module.RecipientRights> GetProjectRecipientRights(IProjectDocumentRightsQueueItem queueItem,
                                                                                    IOfficialDocument document, IProjectBase project)
        {
            var result = new List <Structures.Module.RecipientRights>();

            // Выдать права на сам документ.
            this.AddRecipientRightsForProject(document, project, document.DocumentKind.GrantRightsToProject.Value, result);
            this.GrantRightsOnDocumentToLeadingProgect(document, result);

            return(result);
        }
示例#21
0
 public virtual IEmployee GetPerformerContractResponsible(IOfficialDocument document)
 {
     if (ContractualDocuments.Is(document))
     {
         return(ContractualDocuments.As(document).ResponsibleEmployee);
     }
     else if (Docflow.AccountingDocumentBases.Is(document))
     {
         return(Docflow.AccountingDocumentBases.As(document).ResponsibleEmployee);
     }
     return(null);
 }
示例#22
0
        /// <summary>
        /// Отфильтровать шаблоны по критериям.
        /// </summary>
        /// <param name="documentTemplates">Коллекция шаблонов.</param>
        /// <param name="document">Документ, который создается из шаблона.</param>
        /// <param name="documentKind">Вид документа.</param>
        /// <param name="businessUnit">Наша организация.</param>
        /// <param name="department">Подразделение.</param>
        /// <param name="isCalledFromDocument">True - вызывается из документа, false - вызывается из списка.</param>
        /// <returns>Коллекция отфильтрованных шаблонов.</returns>
        public static IQueryable <T> FilterTemplatesByCriteria(IQueryable <T> documentTemplates,
                                                               IOfficialDocument document,
                                                               IDocumentKind documentKind,
                                                               Company.IBusinessUnit businessUnit,
                                                               Company.IDepartment department,
                                                               bool isCalledFromDocument)
        {
            // Вид документа.
            var allDocumentTypeGuid = Guid.Parse(Docflow.PublicConstants.DocumentTemplate.AllDocumentTypeGuid);

            if (documentKind != null)
            {
                var typeGuid = Guid.Parse(documentKind.DocumentType.DocumentTypeGuid);
                documentTemplates = documentTemplates.Where(d => !d.DocumentKinds.Any() &&
                                                            (d.DocumentType == allDocumentTypeGuid ||
                                                             d.DocumentType == typeGuid) ||
                                                            d.DocumentKinds.Any(k => Equals(k.DocumentKind, documentKind)));
            }
            else if (isCalledFromDocument)
            {
                var typeGuid       = document.TypeDiscriminator;
                var availableKinds = PublicFunctions.DocumentKind.GetAvailableDocumentKinds(document);
                documentTemplates = documentTemplates.Where(d => !d.DocumentKinds.Any() &&
                                                            (d.DocumentType == allDocumentTypeGuid ||
                                                             d.DocumentType == typeGuid) ||
                                                            availableKinds.Any(x => string.Equals(x.DocumentType.DocumentTypeGuid,
                                                                                                  typeGuid.ToString(),
                                                                                                  StringComparison.InvariantCultureIgnoreCase)));
            }

            // НОР.
            if (businessUnit != null)
            {
                documentTemplates = documentTemplates.Where(d => !d.BusinessUnits.Any() || d.BusinessUnits.Any(t => Equals(t.BusinessUnit, businessUnit)));
            }
            else if (isCalledFromDocument)
            {
                documentTemplates = documentTemplates.Where(d => !d.BusinessUnits.Any());
            }

            // Подразделение.
            if (department != null)
            {
                documentTemplates = documentTemplates.Where(d => !d.Departments.Any() || d.Departments.Any(t => Equals(t.Department, department)));
            }
            else if (isCalledFromDocument)
            {
                documentTemplates = documentTemplates.Where(d => !d.Departments.Any());
            }

            return(documentTemplates);
        }
示例#23
0
        /// <summary>
        /// Выдать права на документ вышестоящим проектам.
        /// </summary>
        /// <param name="document">Документ.</param>
        /// <param name="result">Результат.</param>
        private void GrantRightsOnDocumentToLeadingProgect(IOfficialDocument document, List <RecipientRights> result)
        {
            var grantRightsDocument = document;

            while (document.LeadingDocument != null)
            {
                var leadingProjectBase = document.LeadingDocument.Project;
                var leadingProject     = leadingProjectBase != null?Projects.GetAll(p => p.Id == leadingProjectBase.Id).FirstOrDefault() : Projects.Null;

                this.AddRecipientRightsForProject(grantRightsDocument, leadingProject, document.LeadingDocument.DocumentKind.GrantRightsToProject.Value, result);
                document = document.LeadingDocument;
            }
        }
示例#24
0
        /// <summary>
        /// Проверка, зарегистрирован ли входящий документ.
        /// </summary>
        /// <param name="document">Документ.</param>
        /// <returns>True, если документ зарегистрирован, либо документ не входящий.</returns>
        public static bool IncomingDocumentRegistered(IOfficialDocument document)
        {
            if (document == null || document.DocumentKind == null)
            {
                return(true);
            }

            var documentKind = document.DocumentKind;

            return(documentKind.DocumentFlow != Docflow.DocumentKind.DocumentFlow.Incoming ||
                   documentKind.NumberingType != Docflow.DocumentKind.NumberingType.Registrable ||
                   document.RegistrationState == Docflow.OfficialDocument.RegistrationState.Registered);
        }
示例#25
0
        public virtual int?GetSenderSignatureId(IOfficialDocument document, Sungero.Content.IElectronicDocumentVersions version)
        {
            var info            = Exchange.PublicFunctions.ExchangeDocumentInfo.Remote.GetExDocumentInfoFromVersion(document, version.Id);
            var senderSignature = Signatures.Get(version).Where(x => x.Id == info.SenderSignId).SingleOrDefault();

            if (senderSignature != null)
            {
                return(senderSignature.Id);
            }
            else
            {
                return(null);
            }
        }
示例#26
0
        /// <summary>
        /// Получить ведущие документы.
        /// </summary>
        /// <param name="document">Документ.</param>
        /// <returns>Ведущие документы.</returns>
        private static List <int> GetLeadingDocuments(IOfficialDocument document)
        {
            var documents = new List <int>()
            {
                document.Id
            };
            var leadingDocuments = new List <int>();

            while (document.LeadingDocument != null && !documents.Contains(document.LeadingDocument.Id))
            {
                documents.Add(document.LeadingDocument.Id);
                leadingDocuments.Add(document.LeadingDocument.Id);
            }
            return(leadingDocuments);
        }
 public static IQueryable <ISupAgreement> GetDuplicates(ISupAgreement supAgreement,
                                                        Sungero.Company.IBusinessUnit businessUnit,
                                                        string registrationNumber,
                                                        DateTime?registrationDate,
                                                        Sungero.Parties.ICounterparty counterparty,
                                                        IOfficialDocument contract)
 {
     return(SupAgreements.GetAll()
            .Where(l => Equals(supAgreement.DocumentKind, l.DocumentKind))
            .Where(l => Equals(businessUnit, l.BusinessUnit))
            .Where(l => registrationDate == l.RegistrationDate)
            .Where(l => registrationNumber == l.RegistrationNumber)
            .Where(l => Equals(counterparty, l.Counterparty))
            .Where(l => Equals(contract, l.LeadingDocument))
            .Where(l => !Equals(supAgreement, l)));
 }
        /// <summary>
        /// Проверить условие "Типовой".
        /// </summary>
        /// <param name="document">Документ.</param>
        /// <param name="task">Задача на согласование.</param>
        /// <returns>True, если документ типовой.</returns>
        private Docflow.Structures.ConditionBase.ConditionResult CheckStandard(IOfficialDocument document, IApprovalTask task)
        {
            if (Sungero.Contracts.ContractualDocuments.Is(document))
            {
                var contractualDocument = Sungero.Contracts.ContractualDocuments.As(document);

                if (!contractualDocument.IsStandard.HasValue)
                {
                    return(Docflow.Structures.ConditionBase.ConditionResult.Create(null, ContractConditions.Resources.TheStandardIsNotFilledInContractCard));
                }

                return(Docflow.Structures.ConditionBase.ConditionResult.Create(contractualDocument.IsStandard.Value, string.Empty));
            }

            return(Docflow.Structures.ConditionBase.ConditionResult.Create(null, ContractConditions.Resources.StandardFormPropertyCanBeCheckedOnlyForContracts));
        }
示例#29
0
        /// <summary>
        /// Подобрать для документа подходящее хранилище.
        /// </summary>
        /// <param name="document">Документ.</param>
        /// <returns>Наиболее подходящее хранилище для документа.</returns>
        public virtual IStorage GetStorageByPolicies(IOfficialDocument document)
        {
            var policies = StoragePolicies.GetAllCached().Where(r => r.Status == Docflow.StoragePolicyBase.Status.Active &&
                                                                (document.DocumentKind == null ||
                                                                 !r.DocumentKinds.Any() ||
                                                                 r.DocumentKinds.Any(k => Equals(k.DocumentKind, document.DocumentKind))));

            var policy = policies.OrderByDescending(p => p.Priority).FirstOrDefault();

            if (policy != null)
            {
                return(policy.Storage);
            }

            return(null);
        }
        public static IQueryable <IDocumentKind> GetAvailableDocumentKinds(IOfficialDocument document)
        {
            var documentKinds = DocumentKinds.GetAll(r => r.Status == CoreEntities.DatabookEntry.Status.Active);

            var type = document.GetType();

            var typeProperty = type.GetProperty("TypeGuid");

            if (typeProperty != null)
            {
                var typeGuid = ((Guid)typeProperty.GetValue(document)).GetOriginalTypeGuid().ToString();
                documentKinds = documentKinds.Where(k => k.DocumentType.DocumentTypeGuid == typeGuid);
            }

            return(documentKinds);
        }