ConditionSharedFunctions.cs
4.56 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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
using System;
using System.Collections.Generic;
using System.Linq;
using Sungero.Core;
using Sungero.CoreEntities;
using Sungero.Docflow.Condition;
namespace Sungero.Docflow.Shared
{
partial class ConditionFunctions
{
/// <summary>
/// Получить словарь поддерживаемых типов условий.
/// </summary>
/// <returns>
/// Словарь.
/// Ключ - GUID типа документа.
/// Значение - список поддерживаемых условий.
/// </returns>
public override System.Collections.Generic.Dictionary<string, List<Enumeration?>> GetSupportedConditions()
{
var baseConditions = base.GetSupportedConditions();
// Бухгалтерские документы.
var accountingTypes = Functions.DocumentKind.GetDocumentGuids(typeof(IAccountingDocumentBase));
foreach (var type in accountingTypes)
baseConditions[type].AddRange(new List<Enumeration?> { Sungero.Docflow.Condition.ConditionType.AmountIsMore,
Sungero.Docflow.Condition.ConditionType.Currency,
Sungero.Docflow.Condition.ConditionType.Nonresident });
// Служебная записка.
baseConditions[Docflow.Constants.Module.MemoTypeGuid].Add(Sungero.Docflow.Condition.ConditionType.Addressee);
baseConditions[Docflow.Constants.Module.MemoTypeGuid].Add(Sungero.Docflow.Condition.ConditionType.ManyAddressees);
return baseConditions;
}
public override void ChangePropertiesAccess()
{
base.ChangePropertiesAccess();
var isAddressee = _obj.ConditionType == ConditionType.Addressee;
_obj.State.Properties.Addressees.IsVisible = isAddressee;
_obj.State.Properties.Addressees.IsRequired = isAddressee;
}
public override void ClearHiddenProperties()
{
base.ClearHiddenProperties();
if (!_obj.State.Properties.Addressees.IsVisible)
_obj.Addressees.Clear();
}
/// <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);
if (_obj.ConditionType == ConditionType.ManyAddressees)
return this.CheckManyAddresses(document, task);
return base.CheckCondition(document, task);
}
/// <summary>
/// Проверить адресата.
/// </summary>
/// <param name="document">Документ.</param>
/// <param name="task">Задача на согласование.</param>
/// <returns>True, если адресат совпадает.</returns>
private Structures.ConditionBase.ConditionResult CheckAddressee(IOfficialDocument document, IApprovalTask task)
{
if (Memos.Is(document))
{
var addressee = Memos.As(document).Addressee;
if (addressee != null)
return Structures.ConditionBase.ConditionResult.Create(_obj.Addressees.Any(c => Equals(c.Addressee, addressee)), string.Empty);
else
return Structures.ConditionBase.ConditionResult.Create(null, Conditions.Resources.MemoAddresseeIsEmpty);
}
return Structures.ConditionBase.ConditionResult.Create(null, Conditions.Resources.CheckAddresseePossibleOnlyToMemo);
}
/// <summary>
/// Проверить признак наличия нескольких адресатов.
/// </summary>
/// <param name="document">Документ.</param>
/// <param name="task">Задача на согласование.</param>
/// <returns>True, если адресатов несколько.</returns>
private Structures.ConditionBase.ConditionResult CheckManyAddresses(IOfficialDocument document, IApprovalTask task)
{
if (ApprovalTasks.Is(task))
{
var manyAddressees = ApprovalTasks.As(task).IsManyAddressees;
return Structures.ConditionBase.ConditionResult.Create(manyAddressees == true, string.Empty);
}
return Structures.ConditionBase.ConditionResult.Create(null, Conditions.Resources.CheckManyAddresseesPossibleOnlyToMemo);
}
}
}