VerificationTaskSharedFunctions.cs
2.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
using System;
using System.Collections.Generic;
using System.Linq;
using Sungero.Core;
using Sungero.CoreEntities;
using Sungero.Docflow;
using Sungero.SmartProcessing.VerificationTask;
namespace Sungero.SmartProcessing.Shared
{
partial class VerificationTaskFunctions
{
/// <summary>
/// Проверить наличие документа в задаче и наличие прав на него.
/// </summary>
/// <returns>True, если с документом можно работать.</returns>
public virtual bool HasDocumentAndCanRead()
{
return _obj.AllAttachments.Any();
}
/// <summary>
/// Получить главный документ комплекта, исходя из связей документов.
/// </summary>
/// <returns>Главный документ комплекта.</returns>
public virtual IOfficialDocument GetLeadingDocumentByRelations()
{
// Главный документ комплекта:
// -- Не привязан к другим документам этого комплекта
// -- К нему привязаны другие документы комплекта.
var attachedDocuments = this.GetAttachedDocuments();
var attachedDocumentsIds = attachedDocuments.Select(x => x.Id).ToList();
var leadingDocuments = attachedDocuments.Where(x => !x.Relations.GetRelatedFrom().Any(y => attachedDocumentsIds.Contains(y.Id))).ToList();
var leadingDocumentsIds = leadingDocuments.Select(x => x.Id).ToList();
var subordinateDocuments = attachedDocuments.Where(x => !leadingDocumentsIds.Contains(x.Id));
return leadingDocuments
.Where(x => subordinateDocuments.Any(y => y.Relations.GetRelatedFrom().Any(z => z.Id == x.Id)))
.FirstOrDefault();
}
/// <summary>
/// Получить вложенные документы кроме тех, которые будут удалены.
/// </summary>
/// <param name="documentsForDeletion">Список ИД документов, которые будут удалены.</param>
/// <returns>Список вложенных документы кроме тех, которые будут удалены.</returns>
public virtual List<IOfficialDocument> GetAttachedDocumentsWithoutDeleted(List<int> documentsForDeletion)
{
return this.GetAttachedDocuments()
.Where(x => !documentsForDeletion.Contains(x.Id))
.ToList();
}
/// <summary>
/// Получить вложенные документы.
/// </summary>
/// <returns>Вложенные документы.</returns>
public virtual List<IOfficialDocument> GetAttachedDocuments()
{
return _obj.AllAttachments
.Where(x => OfficialDocuments.Is(x))
.Select(x => OfficialDocuments.As(x))
.ToList();
}
}
}