ApprovalReworkAssignmentHandlers.cs
4.76 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
using System;
using System.Collections.Generic;
using System.Linq;
using Sungero.Company;
using Sungero.Core;
using Sungero.CoreEntities;
using Sungero.Docflow.ApprovalReworkAssignment;
namespace Sungero.Docflow
{
partial class ApprovalReworkAssignmentForwardPerformerPropertyFilteringServerHandler<T>
{
public virtual IQueryable<T> ForwardPerformerFiltering(IQueryable<T> query, Sungero.Domain.PropertyFilteringEventArgs e)
{
query = query.Where(p => !Equals(p, _obj.Performer));
return query;
}
}
partial class ApprovalReworkAssignmentExchangeServicePropertyFilteringServerHandler<T>
{
public virtual IQueryable<T> ExchangeServiceFiltering(IQueryable<T> query, Sungero.Domain.PropertyFilteringEventArgs e)
{
var services = Functions.ApprovalTask.GetExchangeServices(ApprovalTasks.As(_obj.Task)).Services;
query = query.Where(s => services.Contains(s));
return query;
}
}
partial class ApprovalReworkAssignmentServerHandlers
{
public override void BeforeSaveHistory(Sungero.Domain.HistoryEventArgs e)
{
base.BeforeSaveHistory(e);
if (_obj.State.Properties.Deadline.IsChanged && !_obj.State.IsInserted)
{
e.Operation = new Enumeration(Constants.ApprovalReworkAssignment.Operation.DeadlineExtend);
}
}
public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
{
var deletedApprovers = _obj.State.Properties.Approvers.Deleted;
var addedApprovers = _obj.State.Properties.Approvers.Added;
var changedApprovers = _obj.State.Properties.Approvers.Changed;
var createFromSchema = false;
e.Params.TryGetValue(Constants.ApprovalTask.CreateFromSchema, out createFromSchema);
if (!createFromSchema)
{
var stages = Functions.ApprovalTask.GetStages(ApprovalTasks.As(_obj.Task));
Functions.ApprovalReworkAssignment.ValidateApprovalReworkAssignment(_obj, stages, e);
}
else
e.Params.Remove(Constants.ApprovalTask.CreateFromSchema);
// Синхронизация грида согласующих со списком доп. согласующих.
foreach (var deletedApprover in deletedApprovers)
{
var deleted = _obj.AddApprovers.Where(a => Equals(a.Approver, deletedApprover.Approver)).FirstOrDefault();
_obj.AddApprovers.Remove(deleted);
}
if (addedApprovers.Any(a => a.IsRequiredApprover != true) || changedApprovers.Any(a => a.IsRequiredApprover != true))
{
_obj.AddApprovers.Clear();
foreach (var approver in _obj.Approvers.Where(a => a.IsRequiredApprover != true))
{
var newApprover = _obj.AddApprovers.AddNew();
newApprover.Approver = approver.Approver;
}
}
Functions.ApprovalReworkAssignment.FillAddresseeFromAddressees(_obj);
}
public override void BeforeComplete(Sungero.Workflow.Server.BeforeCompleteEventArgs e)
{
// Обязательность полей могла измениться.
var document = _obj.DocumentGroup.OfficialDocuments.FirstOrDefault();
var stages = Functions.ApprovalTask.GetStages(ApprovalTasks.As(_obj.Task)).Stages;
var hasSignStage = Functions.ApprovalRuleBase.HasApprovalStage(_obj.ApprovalRule, Docflow.ApprovalStage.StageType.Sign, document, stages);
_obj.State.Properties.Signatory.IsVisible = hasSignStage;
_obj.State.Properties.Signatory.IsRequired = hasSignStage;
// Проверить, имеет ли право подписывающий на подпись.
if (hasSignStage &&
!Functions.ApprovalTask.CheckSignatory(ApprovalTasks.As(_obj.Task), _obj.Signatory, stages))
{
e.AddError(_obj.Info.Properties.Signatory, ApprovalTasks.Resources.IncorrectSignatory);
}
if (_obj.Result == Result.ForReapproving)
e.Result = ApprovalTasks.Resources.ForReapproving;
else if (_obj.Result == Result.Forward)
e.Result = FreeApprovalTasks.Resources.ForwardedFormat(Company.PublicFunctions.Employee.GetShortName(_obj.ForwardPerformer, DeclensionCase.Dative, true));
else
e.Result = ApprovalTasks.Resources.AbortApproving;
}
}
partial class ApprovalReworkAssignmentSignatoryPropertyFilteringServerHandler<T>
{
public virtual IQueryable<T> SignatoryFiltering(IQueryable<T> query, Sungero.Domain.PropertyFilteringEventArgs e)
{
e.DisableUiFiltering = true;
var document = _obj.DocumentGroup.OfficialDocuments.FirstOrDefault();
if (Functions.OfficialDocument.SignatorySettingWithAllUsersExist(document))
return query;
var signatories = Functions.OfficialDocument.GetSignatoriesIds(document);
return query.Where(s => signatories.Contains(s.Id));
}
}
}