MemoSharedFunctions.cs
5.51 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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
using System;
using System.Collections.Generic;
using System.Linq;
using Sungero.Core;
using Sungero.CoreEntities;
using Sungero.Docflow.Memo;
namespace Sungero.Docflow.Shared
{
partial class MemoFunctions
{
/// <summary>
/// Получить адресатов.
/// </summary>
/// <returns>Список адресатов.</returns>
[Public]
public override List<Company.IEmployee> GetAddressees()
{
return _obj.Addressees.Select(x => x.Addressee).Distinct().ToList();
}
/// <summary>
/// Сменить доступность реквизитов документа.
/// </summary>
/// <param name="isEnabled">True, если свойства должны быть доступны.</param>
/// <param name="isRepeatRegister">Перерегистрация.</param>
public override void ChangeDocumentPropertiesAccess(bool isEnabled, bool isRepeatRegister)
{
base.ChangeDocumentPropertiesAccess(isEnabled, isRepeatRegister);
this.ChangeAddresseePropertiesAccess();
}
public override void SetRequiredProperties()
{
base.SetRequiredProperties();
var manyAddresseesMode = _obj.IsManyAddressees == true;
_obj.State.Properties.Addressee.IsRequired = !manyAddresseesMode;
_obj.State.Properties.Addressees.IsRequired = manyAddresseesMode;
}
/// <summary>
/// Очистить адресатов и заполнить первого адресата из карточки.
/// </summary>
public virtual void ClearAndFillFirstAddressee()
{
_obj.Addressees.Clear();
if (_obj.Addressee != null)
{
var newAddressee = _obj.Addressees.AddNew();
newAddressee.Addressee = _obj.Addressee;
newAddressee.Number = 1;
}
}
/// <summary>
/// Заполнить адресата из коллекции адресатов.
/// </summary>
public virtual void FillAddresseeFromAddressees()
{
var addressee = _obj.Addressees.OrderBy(a => a.Number).FirstOrDefault(a => a.Addressee != null);
if (addressee != null)
{
if (!Equals(_obj.Addressee, addressee.Addressee))
_obj.Addressee = addressee.Addressee;
}
else
{
if (_obj.Addressee != null)
_obj.Addressee = null;
}
}
/// <summary>
/// Установить метку "Несколько адресатов".
/// </summary>
public virtual void SetManyAddresseesPlaceholder()
{
// Заполнить метку в локали тенанта.
using (TenantInfo.Culture.SwitchTo())
_obj.ManyAddresseesPlaceholder = OfficialDocuments.Resources.ManyAddresseesPlaceholder;
}
/// <summary>
/// Установить доступность всех контролов адресатов (единичный адресат, грид, плейсхолдер).
/// </summary>
public virtual void ChangeAddresseePropertiesAccess()
{
var readOnlyState = _obj.InternalApprovalState == Docflow.OfficialDocument.InternalApprovalState.OnApproval ||
_obj.InternalApprovalState == Docflow.OfficialDocument.InternalApprovalState.PendingSign ||
_obj.InternalApprovalState == Docflow.OfficialDocument.InternalApprovalState.Signed ||
_obj.InternalApprovalState == Docflow.Memo.InternalApprovalState.PendingReview ||
_obj.InternalApprovalState == Docflow.Memo.InternalApprovalState.Reviewed;
var manyAddressees = _obj.IsManyAddressees.HasValue && _obj.IsManyAddressees.Value;
_obj.State.Properties.Addressee.IsVisible = !manyAddressees;
_obj.State.Properties.Addressee.IsEnabled = !manyAddressees &&
(!readOnlyState ||
readOnlyState && _obj.Addressee == null);
_obj.State.Properties.ManyAddresseesPlaceholder.IsVisible = manyAddressees;
_obj.State.Properties.Addressees.IsEnabled = manyAddressees &&
(!readOnlyState ||
readOnlyState && _obj.Addressees != null && (_obj.Addressees.Count == 0 || _obj.Addressees.Any(x => x.Addressee == null)));
_obj.State.Properties.IsManyAddressees.IsEnabled = !readOnlyState;
}
/// <summary>
/// Заполнить адресатов из списка ознакомления/рассмотрения.
/// </summary>
/// <param name="acquaintanceList">Список ознакомления/рассмотрения.</param>
/// <returns>Сообщение об ошибке или пустая строка.</returns>
public virtual string TryFillFromAcquaintanceList(RecordManagement.IAcquaintanceList acquaintanceList)
{
if (acquaintanceList == null)
return string.Empty;
var participants = RecordManagement.PublicFunctions.AcquaintanceList.GetParticipants(acquaintanceList);
var addresseesLimit = this.GetAddresseesLimit();
if (participants.Count > addresseesLimit)
return Memos.Resources.TooManyParticipantsFormat(addresseesLimit);
foreach (var participant in participants)
{
var newParticipantRow = _obj.Addressees.AddNew();
newParticipantRow.Addressee = participant;
}
return string.Empty;
}
/// <summary>
/// Получить максимальное количество адресатов.
/// </summary>
/// <returns>Максимальное количество адресатов.</returns>
public virtual int GetAddresseesLimit()
{
return Constants.Memo.AddresseesLimit;
}
}
}