ConditionBaseHandlers.cs
3.08 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
using System;
using System.Collections.Generic;
using System.Linq;
using Sungero.Core;
using Sungero.CoreEntities;
using Sungero.Docflow.ConditionBase;
namespace Sungero.Docflow
{
partial class ConditionBaseRecipientForComparisonPropertyFilteringServerHandler<T>
{
public virtual IQueryable<T> RecipientForComparisonFiltering(IQueryable<T> query, Sungero.Domain.PropertyFilteringEventArgs e)
{
query = query.Where(q => q.Status == CoreEntities.DatabookEntry.Status.Active);
// Для выбора доступны только сотрудники и одиночные роли.
return query.Where(q => Company.Employees.Is(q) || Roles.Is(q) && Roles.As(q).IsSingleUser == true);
}
}
partial class ConditionBaseApprovalRoleForComparisonPropertyFilteringServerHandler<T>
{
public virtual IQueryable<T> ApprovalRoleForComparisonFiltering(IQueryable<T> query, Sungero.Domain.PropertyFilteringEventArgs e)
{
var multipleMembersRoles = Docflow.Functions.Module.GetMultipleMembersRoles();
return query.Where(r => !multipleMembersRoles.Contains(r.Type) && !Equals(r, _obj.ApprovalRole))
.Where(r => r.Type != Docflow.ApprovalRoleBase.Type.PrintResp);
}
}
partial class ConditionBaseApprovalRolePropertyFilteringServerHandler<T>
{
public virtual IQueryable<T> ApprovalRoleFiltering(IQueryable<T> query, Sungero.Domain.PropertyFilteringEventArgs e)
{
var multipleMembersRoles = Docflow.Functions.Module.GetMultipleMembersRoles();
if (_obj.ConditionType == Docflow.ConditionBase.ConditionType.EmployeeInRole)
return query.Where(r => multipleMembersRoles.Contains(r.Type) && r.Type != Docflow.ApprovalRoleBase.Type.Approvers);
return query.Where(r => !multipleMembersRoles.Contains(r.Type) && !Equals(r, _obj.ApprovalRoleForComparison))
.Where(r => r.Type != Docflow.ApprovalRoleBase.Type.PrintResp);
}
}
partial class ConditionBaseConditionDocumentKindsDocumentKindPropertyFilteringServerHandler<T>
{
public virtual IQueryable<T> ConditionDocumentKindsDocumentKindFiltering(IQueryable<T> query, Sungero.Domain.PropertyFilteringEventArgs e)
{
var sendAction = Functions.Module.GetSendAction(OfficialDocuments.Info.Actions.SendForApproval);
if (_root.DocumentKinds.Any())
{
var availableDocumentKind = _root.DocumentKinds.Select(k => k.DocumentKind).ToList();
query = query.Where(q => availableDocumentKind.Contains(q));
}
return query.Where(d => d.AvailableActions.Any(a => Equals(a.Action, sendAction)));
}
}
partial class ConditionBaseServerHandlers
{
public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
{
if (_obj.State.Properties.ConditionType.IsChanged && Functions.ConditionBase.HasRules(_obj))
e.AddError(ConditionBases.Resources.ConditionHasRules);
var conditionName = Functions.ConditionBase.GetConditionName(_obj);
_obj.Name = Functions.Module.TrimSpecialSymbols(conditionName);
if (_obj.Name.Length >= 250)
_obj.Name = _obj.Name.Remove(250);
}
}
}