DocumentReviewTaskClientFunctions.cs
6.49 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
using System;
using System.Collections.Generic;
using System.Linq;
using Sungero.Core;
using Sungero.CoreEntities;
using Sungero.RecordManagement.DocumentReviewTask;
using Sungero.Workflow;
namespace Sungero.RecordManagement.Client
{
partial class DocumentReviewTaskFunctions
{
/// <summary>
/// Создать поручение.
/// </summary>
/// <param name="parentAssignment">Задание, от которого создается поручение.</param>
/// <param name="mainTask">Задача "Рассмотрение входящего", из которой создается поручение.</param>
/// <param name="resolutionText">Текст резолюции.</param>
/// <returns>Поручение.</returns>
public static IActionItemExecutionTask CreateActionItemExecution(IAssignment parentAssignment, IDocumentReviewTask mainTask, string resolutionText)
{
var document = mainTask.DocumentForReviewGroup.OfficialDocuments.First();
// TODO вернуть вызов с использованием задания, когда починят 24898.
// var task = Functions.Module.Remote.CreateActionItemExecution(document, parentAssignment);
var task = Functions.Module.Remote.CreateActionItemExecution(document, (int)parentAssignment.Id);
task.ActiveText = resolutionText;
return task;
}
/// <summary>
/// Проверить просроченные поручения, вывести ошибку в случае просрочки.
/// </summary>
/// <param name="e">Аргументы события.</param>
public virtual void CheckOverdueActionItemExecutionTasks(Sungero.Workflow.Client.ExecuteResultActionArgs e)
{
var overdueTasks = Functions.DocumentReviewTask.GetDraftOverdueActionItemExecutionTasks(_obj);
if (overdueTasks.Any())
{
e.AddError(RecordManagement.Resources.ImpossibleSpecifyDeadlineLessThanTodayCorrectIt);
e.Cancel();
}
}
/// <summary>
/// Проверить, что текущий сотрудник может готовить проект резолюции.
/// </summary>
/// <returns>True, если сотрудник может готовить проект резолюции, иначе - False.</returns>
public virtual bool CanPrepareDraftResolution()
{
var canPrepareResolution = false;
var formParams = ((Sungero.Domain.Shared.IExtendedEntity)_obj).Params;
if (formParams.ContainsKey(PublicConstants.DocumentReviewTask.CanPrepareDraftResolutionParamName))
{
object paramValue;
formParams.TryGetValue(PublicConstants.DocumentReviewTask.CanPrepareDraftResolutionParamName, out paramValue);
bool.TryParse(paramValue.ToString(), out canPrepareResolution);
return canPrepareResolution;
}
if (Company.Employees.Current != null)
canPrepareResolution = Company.PublicFunctions.Employee.Remote.CanPrepareDraftResolution(Company.Employees.Current);
formParams.Add(PublicConstants.DocumentReviewTask.CanPrepareDraftResolutionParamName, canPrepareResolution);
return canPrepareResolution;
}
/// <summary>
/// Добавить проект резолюции.
/// </summary>
[Public]
public virtual void AddResolution()
{
var document = _obj.DocumentForReviewGroup.OfficialDocuments.FirstOrDefault();
var task = document == null ? Functions.Module.Remote.CreateActionItemExecution() : Functions.Module.Remote.CreateActionItemExecution(document);
var assignee = task.Assignee ?? Users.Current;
task.MaxDeadline = _obj.Deadline ?? Calendar.Today.AddWorkingDays(assignee, 2);
task.IsDraftResolution = true;
foreach (var otherGroupAttachment in _obj.OtherGroup.All)
task.OtherGroup.All.Add(otherGroupAttachment);
task.ShowModal();
if (!task.State.IsInserted)
{
var draftActionItem = Functions.Module.Remote.GetActionitemById(task.Id);
_obj.ResolutionGroup.ActionItemExecutionTasks.Add(draftActionItem);
_obj.Save();
}
}
/// <summary>
/// Открыть отчёт "Проект резолюции" для последующей печати.
/// </summary>
/// <param name="resolutionText">Текст резолюции.</param>
/// <param name="actionItems">Поручения.</param>
public virtual void OpenDraftResolutionReport(string resolutionText, List<IActionItemExecutionTask> actionItems)
{
var report = RecordManagement.Reports.GetDraftResolutionReport();
report.Resolution.AddRange(actionItems);
report.TextResolution = resolutionText;
report.Document = _obj.DocumentForReviewGroup.OfficialDocuments.FirstOrDefault();
report.Author = _obj.Addressee;
report.Open();
}
/// <summary>
/// Проверить, что текущая задача стартована в рамках согласования по регламенту.
/// </summary>
/// <param name="task">Задача на рассмотрение.</param>
/// <returns>True, если задача на рассмотрение была запущена из согласования по регламенту, иначе - False.</returns>
public static bool ReviewStartedFromApproval(ITask task)
{
return Docflow.ApprovalTasks.Is(task.MainTask);
}
/// <summary>
/// Подтвердить удаление проектов резолюции из текущей задачи.
/// </summary>
/// <param name="message">Текст диалога подтверждения удаления.</param>
/// <param name="description">Описание диалога подтверждения удаления.</param>
/// <param name="dialogId">ИД диалога подтверждения удаления.</param>
/// <returns>True, если удаление было подтверждено, иначе - False.</returns>
public virtual bool ShowDeletingDraftResolutionsConfirmationDialog(string message, string description, string dialogId)
{
var dropIsConfirmed = Docflow.PublicFunctions.Module.ShowConfirmationDialog(message,
description,
null, dialogId);
if (dropIsConfirmed)
_obj.NeedDeleteActionItems = true;
return dropIsConfirmed;
}
}
}