예제 #1
0
        public static void SetRightsOnDocument(IMeeting meeting, IElectronicDocument document)
        {
            if (meeting == null)
            {
                return;
            }

            var secretary = meeting.Secretary;

            if (secretary != null && !document.AccessRights.IsGrantedDirectly(DefaultAccessRightsTypes.Change, secretary))
            {
                document.AccessRights.Grant(secretary, DefaultAccessRightsTypes.Change);
            }

            var president = meeting.President;

            if (president != null && !document.AccessRights.IsGrantedDirectly(DefaultAccessRightsTypes.Change, president))
            {
                document.AccessRights.Grant(president, DefaultAccessRightsTypes.Change);
            }

            var members = meeting.Members.Select(m => m.Member).ToList();

            foreach (var member in members)
            {
                if (!document.AccessRights.IsGrantedDirectly(DefaultAccessRightsTypes.Read, member))
                {
                    document.AccessRights.Grant(member, DefaultAccessRightsTypes.Read);
                }
            }
        }
예제 #2
0
 /// <summary>
 /// Получить последнего утвердившего документ.
 /// </summary>
 /// <param name="document">Документ.</param>
 /// <returns>Подписавший.</returns>
 public static IEmployee GetDocumentLastApprover(IElectronicDocument document)
 {
     return(Employees.As(Signatures.Get(document.LastVersion)
                         .Where(s => s.SignatureType == SignatureType.Approval)
                         .OrderByDescending(s => s.SigningDate)
                         .Select(s => s.Signatory)
                         .FirstOrDefault()));
 }
예제 #3
0
 /// <summary>
 /// Построить модель состояния процесса ознакомления.
 /// </summary>
 /// <param name="document">Документ.</param>
 /// <returns>Схема модели состояния.</returns>
 public Sungero.Core.StateView GetStateView(IElectronicDocument document)
 {
     if (_obj.DocumentGroup.OfficialDocuments.Any(d => Equals(document, d)) ||
         _obj.AddendaGroup.OfficialDocuments.Any(d => Equals(document, d)))
     {
         return(this.GetStateView());
     }
     else
     {
         return(StateView.Create());
     }
 }
예제 #4
0
        /// <summary>
        /// Сохранить номер версии и хеш документа в задаче.
        /// </summary>
        /// <param name="document">Документ.</param>
        /// <param name="isMainDocument">Признак главного документа.</param>
        public void StoreAcquaintanceVersion(IElectronicDocument document, bool isMainDocument)
        {
            var lastVersion         = document.LastVersion;
            var mainDocumentVersion = _obj.AcquaintanceVersions.AddNew();

            mainDocumentVersion.IsMainDocument = isMainDocument;
            mainDocumentVersion.DocumentId     = document.Id;
            if (lastVersion != null)
            {
                mainDocumentVersion.Number = lastVersion.Number;
                mainDocumentVersion.Hash   = lastVersion.Body.Hash;
            }
            else
            {
                mainDocumentVersion.Number = 0;
                mainDocumentVersion.Hash   = null;
            }
        }
예제 #5
0
        /// <summary>
        /// Сохранить номер версии и хеш документа в задании.
        /// </summary>
        /// <param name="document">Документ.</param>
        /// <param name="isMainDocument">Признак главного документа.</param>
        /// <param name="mainDocumentTaskVersionNumber">Номер версии основного документа в задаче.</param>
        public void StoreAcquaintanceVersion(IElectronicDocument document, bool isMainDocument, int?mainDocumentTaskVersionNumber)
        {
            var acqTaskVersion = document.LastVersion;

            if (mainDocumentTaskVersionNumber != null)
            {
                acqTaskVersion = document.Versions.FirstOrDefault(v => v.Number == mainDocumentTaskVersionNumber);
            }

            var mainDocumentVersion = _obj.AcquaintanceVersions.AddNew();

            mainDocumentVersion.IsMainDocument = isMainDocument;
            mainDocumentVersion.DocumentId     = document.Id;
            if (acqTaskVersion != null)
            {
                mainDocumentVersion.Number = acqTaskVersion.Number;
                mainDocumentVersion.Hash   = acqTaskVersion.Body.Hash;
            }
            else
            {
                mainDocumentVersion.Number = 0;
                mainDocumentVersion.Hash   = null;
            }
        }
예제 #6
0
        public static void SynchronizeAddendaAndAttachmentsGroup(Sungero.Workflow.Interfaces.IWorkflowEntityAttachmentGroup group, IElectronicDocument document)
        {
            if (document == null)
            {
                foreach (var addendum in group.All)
                {
                    group.All.Remove(addendum);
                }
                return;
            }

            var documentAddenda = document.Relations.GetRelated(Docflow.Constants.Module.AddendumRelationName);

            foreach (var addendum in group.All.Select(e => ElectronicDocuments.As(e)).Where(d => d != null && !documentAddenda.Contains(d)))
            {
                group.All.Remove(addendum);
            }

            var newAddenda = documentAddenda.Where(d => !group.All.Contains(d)).ToList();

            foreach (var addendum in newAddenda)
            {
                group.All.Add(addendum);
            }
        }