ActionItemExecutionAssignmentServerFunctions.cs
8.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
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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
using System;
using System.Collections.Generic;
using System.Linq;
using Sungero.Company;
using Sungero.Core;
using Sungero.CoreEntities;
using Sungero.RecordManagement.ActionItemExecutionAssignment;
using Sungero.RecordManagement.ActionItemExecutionTask;
using Sungero.Workflow;
namespace Sungero.RecordManagement.Server
{
partial class ActionItemExecutionAssignmentFunctions
{
/// <summary>
/// Построить модель состояния пояснения.
/// </summary>
/// <param name="assignment">Задание.</param>
/// <returns>Модель состояния.</returns>
[Remote(IsPure = true)]
public static Sungero.Core.StateView GetActionItemExecutionAssignmentStateView(IActionItemExecutionAssignment assignment)
{
var stateView = Sungero.Core.StateView.Create();
var block = stateView.AddBlock();
var content = block.AddContent();
content.AddLabel(GetDescription(assignment));
block.ShowBorder = false;
return stateView;
}
/// <summary>
/// Получить пояснение к заданию.
/// </summary>
/// <param name="assignment">Задание.</param>
/// <returns>Пояснение.</returns>
private static string GetDescription(IActionItemExecutionAssignment assignment)
{
var description = string.Empty;
var mainTask = ActionItemExecutionTasks.As(assignment.Task);
if (mainTask == null)
return description;
var supervisor = mainTask.Supervisor;
if (supervisor != null)
description += (mainTask.ActionItemType == ActionItemType.Additional)
? RecordManagement.ActionItemExecutionTasks.Resources.OnControlWithResponsibleFormat(Sungero.Company.PublicFunctions.Employee.GetShortName(supervisor, false).TrimEnd('.'))
: RecordManagement.ActionItemExecutionTasks.Resources.OnControlFormat(Sungero.Company.PublicFunctions.Employee.GetShortName(supervisor, false).TrimEnd('.'));
if (mainTask.ActionItemType == ActionItemType.Additional)
{
description += RecordManagement.ActionItemExecutionTasks.Resources.YouAreAdditionalAssignee;
}
else
{
if (mainTask.ActionItemType == ActionItemType.Main && mainTask.CoAssignees.Any() && !mainTask.CoAssignees.Any(ca => Equals(ca.Assignee, assignment.Performer)))
description += RecordManagement.ActionItemExecutionTasks.Resources.YouAreResponsibleAssignee;
else
description += RecordManagement.ActionItemExecutionTasks.Resources.YouAreAssignee;
}
return description;
}
/// <summary>
/// Построить модель состояния.
/// </summary>
/// <returns>Модель состояния.</returns>
[Remote(IsPure = true)]
public Sungero.Core.StateView GetStateView()
{
var task = ActionItemExecutionTasks.As(_obj.Task);
var additional = task.ActionItemType == ActionItemType.Additional;
// Не выделять текущее, если задание прекращено.
if (_obj.Status == Workflow.AssignmentBase.Status.Aborted && !additional)
{
var mainActionItemExecutionTask = Functions.ActionItemExecutionTask.GetMainActionItemExecutionTask(task);
var stateViewModel = Structures.ActionItemExecutionTask.StateViewModel.Create();
return Functions.ActionItemExecutionTask.GetActionItemExecutionTaskStateView(mainActionItemExecutionTask, null, stateViewModel, null, false, true);
}
else
return Functions.ActionItemExecutionTask.GetStateView(task);
}
/// <summary>
/// Проверка, все ли задания соисполнителям созданы.
/// </summary>
/// <returns>True, если все задания созданы, иначе False.</returns>
[Remote(IsPure = true)]
public bool AllCoAssigneeAssignmentsCreated()
{
var task = ActionItemExecutionTasks.As(_obj.Task);
return task.CoAssignees.All(a => a.AssignmentCreated == true);
}
/// <summary>
/// Проверка, все ли задания соисполнителям созданы.
/// </summary>
/// <returns>True, если все задания созданы, иначе False.</returns>
[Remote(IsPure = true), Obsolete("Используйте метод AllCoAssigneeAssignmentsCreated")]
public bool IsCoAssigneeAssignamentCreated()
{
return this.AllCoAssigneeAssignmentsCreated();
}
/// <summary>
/// Получить задания соисполнителей, не завершивших работу по поручению.
/// </summary>
/// <param name="entity">Поручение.</param>
/// <returns>Задания соисполнителей, не завершивших работу.</returns>
[Remote(IsPure = true)]
public static IQueryable<IActionItemExecutionAssignment> GetActionItems(IActionItemExecutionAssignment entity)
{
return ActionItemExecutionAssignments.GetAll(j => entity.Equals(j.Task.ParentAssignment) && j.Status == Workflow.AssignmentBase.Status.InProcess);
}
/// <summary>
/// Получить соисполнителей, не завершивших работу по поручению.
/// </summary>
/// <param name="entity">Поручение.</param>
/// <returns>Соисполнителей, не завершивших работу.</returns>
[Remote(IsPure = true)]
public static IQueryable<IUser> GetActionItemsAssignees(IActionItemExecutionAssignment entity)
{
return GetActionItems(entity).Select(p => p.Performer);
}
/// <summary>
/// Получить вложенные поручения соисполнителям.
/// </summary>
/// <param name="entity">Задание ответственного исполнителя.</param>
/// <returns>Поручения.</returns>
[Remote(IsPure = true)]
public static List<IActionItemExecutionTask> GetSubActionItemExecution(IActionItemExecutionAssignment entity)
{
return ActionItemExecutionTasks
.GetAll()
.Where(j => j.Status.Value == Workflow.Task.Status.InProcess)
.Where(j => j.ActionItemType == ActionItemType.Additional)
.Where(j => j.ParentAssignment == entity)
.ToList();
}
/// <summary>
/// Проверить, выполнены ли все подчиненные поручения.
/// </summary>
/// <returns>True, если все подчиненные поручения выполнены, иначе - False.</returns>
[Remote(IsPure = true), Obsolete("Используйте метод GetNotCompletedSubActionItems")]
public virtual bool AllActionItemExecutionSubTasksAreCompleted()
{
return !this.GetNotCompletedSubActionItems().Any();
}
/// <summary>
/// Получить все невыполненные подчиненные поручения.
/// </summary>
/// <returns>Список невыполненных подчиненных поручений.</returns>
[Remote(IsPure = true)]
public virtual List<IActionItemExecutionTask> GetNotCompletedSubActionItems()
{
var subActionItems = Functions.ActionItemExecutionTask.GetSubActionItemExecutions(_obj);
var result = subActionItems.Where(x => x.IsCompoundActionItem != true ||
x.IsCompoundActionItem == true &&
!Functions.ActionItemExecutionTask.AllActionItemPartsAreCompleted(x));
return result.ToList();
}
/// <summary>
/// Получить все невыполненные подчиненные задачи на продление срока.
/// </summary>
/// <returns>Список невыполненных подчиненных задач на продление срока.</returns>
[Remote(IsPure = true)]
public virtual List<ITask> GetNotCompletedSubDeadlineExtensionTasks()
{
return Tasks.GetAll()
.Where(t => DeadlineExtensionTasks.Is(t) || Docflow.DeadlineExtensionTasks.Is(t))
.Where(t => t.ParentAssignment == _obj)
.Where(t => t.Status.Value == Workflow.Task.Status.InProcess)
.ToList();
}
/// <summary>
/// Получить все невыполненные подчиненные задачи на запрос отчёта.
/// </summary>
/// <returns>Список невыполненных подчиненных задач на запрос отчёта.</returns>
[Remote(IsPure = true)]
public virtual List<IStatusReportRequestTask> GetNotCompletedSubReportRequestTasks()
{
return StatusReportRequestTasks.GetAll()
.Where(t => t.ParentAssignment == _obj)
.Where(t => t.Status.Value == Workflow.Task.Status.InProcess)
.ToList();
}
}
}