AcquaintanceAssignmentActions.cs
4.13 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
using System;
using System.Collections.Generic;
using System.Linq;
using Sungero.Core;
using Sungero.CoreEntities;
using Sungero.RecordManagement.AcquaintanceAssignment;
namespace Sungero.RecordManagement.Client
{
partial class AcquaintanceAssignmentActions
{
public virtual void ExtendDeadline(Sungero.Domain.Client.ExecuteActionArgs e)
{
var task = Docflow.PublicFunctions.DeadlineExtensionTask.Remote.GetDeadlineExtension(_obj);
task.Show();
}
public virtual bool CanExtendDeadline(Sungero.Domain.Client.CanExecuteActionArgs e)
{
return _obj.Status == Workflow.AssignmentBase.Status.InProcess &&
_obj.AccessRights.CanUpdate() &&
Functions.AcquaintanceTask.HasDocumentAndCanRead(AcquaintanceTasks.As(_obj.Task));
}
public virtual void Acquainted(Sungero.Workflow.Client.ExecuteResultActionArgs e)
{
if (!Functions.AcquaintanceTask.HasDocumentAndCanRead(AcquaintanceTasks.As(_obj.Task)))
{
e.AddError(Docflow.Resources.NoRightsToDocument);
return;
}
// Проверка прав на выполнение по замещению.
var isCurrentUserPerformer = Equals(_obj.Performer, Users.Current);
if (!isCurrentUserPerformer)
{
// Задание может выполнить только замещающий, и только за виртуальных или уволенных сотрудников,
// либо за действующего сотрудника, если это разрешено соответствующей настройкой.
if (!Functions.AcquaintanceAssignment.CanUserCompleteAcquaintanceBySubstitute(_obj))
{
e.AddError(Sungero.RecordManagement.AcquaintanceAssignments.Resources.EmployeeMustPersonallyConfirmAcquaintance);
return;
}
// Требовать оставить комментарий при выполнении по замещению.
if (string.IsNullOrWhiteSpace(_obj.ActiveText))
{
e.AddError(AcquaintanceTasks.Resources.CompletedBySubstitution);
return;
}
}
else
{
// Требовать прочтения и валидировать подпись, только если сотрудник лично выполняет задание.
var task = AcquaintanceTasks.As(_obj.Task);
var isElectronicAcquaintance = task.IsElectronicAcquaintance.Value;
if (isElectronicAcquaintance)
{
// Требовать прочтение отправленной версии документа.
var document = _obj.DocumentGroup.OfficialDocuments.FirstOrDefault();
var acquaintanceVersion = task.AcquaintanceVersions.FirstOrDefault(x => x.IsMainDocument.Value);
var acquaintanceVersionNumber = acquaintanceVersion.Number.Value;
if (!Functions.AcquaintanceTask.Remote.IsDocumentVersionReaded(document, acquaintanceVersionNumber))
{
var error = document.LastVersion.Number == acquaintanceVersionNumber
? AcquaintanceTasks.Resources.DocumentNotReadedLastVersion
: AcquaintanceTasks.Resources.DocumentNotReadedFormat(acquaintanceVersionNumber);
e.AddError(error);
return;
}
// Валидация подписи.
if (!Functions.AcquaintanceTask.Remote.IsDocumentVersionSignatureValid(document, acquaintanceVersionNumber))
{
e.AddError(AcquaintanceTasks.Resources.DocumentSignatureNotValid);
return;
}
}
}
// Замена стандартного диалога подтверждения выполнения действия.
if (!Docflow.PublicFunctions.Module.ShowConfirmationDialog(e.Action.ConfirmationMessage, null, null,
Constants.AcquaintanceTask.AcquaintedConfirmDialogID))
e.Cancel();
}
public virtual bool CanAcquainted(Sungero.Workflow.Client.CanExecuteResultActionArgs e)
{
return _obj.DocumentGroup.OfficialDocuments.Any();
}
}
}