BoxBaseServerFunctions.cs
5.03 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
using System;
using System.Collections.Generic;
using System.Linq;
using Sungero.Company;
using Sungero.Core;
using Sungero.CoreEntities;
using Sungero.ExchangeCore.BoxBase;
namespace Sungero.ExchangeCore.Server
{
partial class BoxBaseFunctions
{
/// <summary>
/// Получить ответственного за ящик.
/// </summary>
/// <returns>Ответственный.</returns>
[Public]
public virtual Sungero.Company.IEmployee GetResponsible()
{
return _obj.Responsible;
}
/// <summary>
/// Получить сервис обмена ящика.
/// </summary>
/// <returns>Сервис обмена.</returns>
[Public]
public virtual IExchangeService GetExchangeService()
{
return null;
}
/// <summary>
/// Получить НОР ящика.
/// </summary>
/// <returns>Наша организация.</returns>
[Public]
public virtual Sungero.Company.IBusinessUnit GetBusinessUnit()
{
return null;
}
/// <summary>
/// Отправлять задания/уведомления ответственному.
/// </summary>
/// <returns>Признак отправки задания ответственному за ящик/контрагента.</returns>
[Public]
public virtual bool NeedReceiveTask()
{
return _obj.Routing != Routing.NoAssignments;
}
/// <summary>
/// Получить подразделение ящика.
/// </summary>
/// <returns>Подразделение.</returns>
[Public]
public virtual Company.IDepartment GetDepartment()
{
return null;
}
/// <summary>
/// Получить действующие дочерние ящики подразделения.
/// </summary>
/// <returns>Список дочерних ящиков подразделений.</returns>
[Remote]
public List<IDepartmentBox> GetActiveChildBoxes()
{
return Functions.BoxBase.GetChildBoxes(_obj, ExchangeCore.DepartmentBox.Status.Active);
}
/// <summary>
/// Получить закрытые дочерние ящики подразделения.
/// </summary>
/// <returns>Список дочерних ящиков подразделений.</returns>
[Remote]
public List<IDepartmentBox> GetClosedChildBoxes()
{
return Functions.BoxBase.GetChildBoxes(_obj, ExchangeCore.DepartmentBox.Status.Closed);
}
/// <summary>
/// Получить дочерние ящики подразделения.
/// </summary>
/// <param name="status">Статус ящика подразделения.</param>
/// <returns>Список дочерних ящиков подразделений.</returns>
public List<IDepartmentBox> GetChildBoxes(Sungero.Core.Enumeration status)
{
var resultBoxes = new List<IDepartmentBox>();
var boxes = DepartmentBoxes.GetAll(b => b.Status == status).ToList();
var childBoxes = boxes.Where(b => Equals(b.ParentBox, _obj)).ToList();
while (childBoxes.Any())
{
resultBoxes.AddRange(childBoxes);
var newBoxes = boxes.Where(b => childBoxes.Any(x => Equals(BoxBases.As(x), b.ParentBox))).ToList();
childBoxes = newBoxes;
}
return resultBoxes;
}
/// <summary>
/// Получить ответственного за документ.
/// </summary>
/// <param name="counterparty">Контрагент.</param>
/// <param name="infos">Список информаций о документе.</param>
/// <returns>Ответственный.</returns>
[Public, Remote]
public virtual Sungero.Company.IEmployee GetExchangeDocumentResponsible(Sungero.Parties.ICounterparty counterparty, List<Sungero.Exchange.IExchangeDocumentInfo> infos)
{
var company = Parties.CompanyBases.As(counterparty);
if (_obj.Routing == ExchangeCore.BoxBase.Routing.CPResponsible && company != null && company.Responsible != null)
return company.Responsible;
return ExchangeCore.PublicFunctions.BoxBase.GetResponsible(_obj);
}
/// <summary>
/// Получить срок задания на обработку.
/// </summary>
/// <param name="assignee">Исполнитель задания.</param>
/// <returns>Срок задания на обработку документа из сервиса обмена.</returns>
[Public]
public virtual DateTime GetProcessingTaskDeadline(IEmployee assignee)
{
DateTime deadline = Calendar.Now;
if (_obj.DeadlineInDays.HasValue)
deadline = deadline.AddWorkingDays(assignee, _obj.DeadlineInDays.Value);
if (_obj.DeadlineInHours.HasValue)
deadline = deadline.AddWorkingHours(assignee, _obj.DeadlineInHours.Value);
if (!_obj.DeadlineInDays.HasValue && !_obj.DeadlineInHours.HasValue)
deadline = deadline.AddWorkingHours(assignee, Sungero.ExchangeCore.PublicConstants.BoxBase.DefaultDeadlineInHours);
return deadline;
}
}
}