ContractsApprovalRuleServerFunctions.cs
4.93 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
using System;
using System.Collections.Generic;
using System.Linq;
using Sungero.Company;
using Sungero.Contracts.ContractsApprovalRule;
using Sungero.Core;
using Sungero.CoreEntities;
using Sungero.Docflow;
namespace Sungero.Contracts.Server
{
partial class ContractsApprovalRuleFunctions
{
/// <summary>
/// Получить права подписи.
/// </summary>
/// <param name="businessUnit">НОР.</param>
/// <param name="kind">Вид документа.</param>
/// <param name="minAmount">Ограничение по сумме.</param>
/// <param name="departments">Отдел.</param>
/// <returns>Права подписи.</returns>
/// <Remarks>Не используется.</Remarks>
[Public, Obsolete]
public override IQueryable<ISignatureSetting> GetSignatureSetting(IBusinessUnit businessUnit, IDocumentKind kind,
double? minAmount, List<Company.IDepartment> departments)
{
return this.GetSignatureSettingWithoutDocumentFlowFilter(businessUnit, kind, minAmount, departments)
.Where(s => s.DocumentFlow == Docflow.SignatureSetting.DocumentFlow.Contracts || s.DocumentFlow == Docflow.SignatureSetting.DocumentFlow.All);
}
#region Проверка возможности существования маршрутов правила
/// <summary>
/// Проверка возможности существования маршрута правила.
/// </summary>
/// <param name="route">Маршрут.</param>
/// <param name="ruleConditions">Условие.</param>
/// <param name="conditionStep">Этап.</param>
/// <returns>Возможность существования.</returns>
public override bool CheckRoutePossibility(List<Docflow.Structures.ApprovalRuleBase.RouteStep> route,
List<Docflow.Structures.ApprovalRuleBase.ConditionRouteStep> ruleConditions,
Docflow.Structures.ApprovalRuleBase.RouteStep conditionStep)
{
var possibleStage = base.CheckRoutePossibility(route, ruleConditions, conditionStep);
var conditionType = _obj.Conditions.First(c => c.Number == conditionStep.StepNumber).Condition.ConditionType;
// Проверка условий по типовому договору.
if (conditionType == Sungero.Contracts.ContractCondition.ConditionType.Standard)
{
var standardConditions = this.GetStandardConditionsInRoute(route).Where(c => c.StepNumber != conditionStep.StepNumber).ToList();
possibleStage = this.CheckStandardConditions(standardConditions, conditionStep);
}
return possibleStage;
}
/// <summary>
/// Проверить возможность существования данного маршрута с условиями по типовому договору.
/// </summary>
/// <param name="allConditions">Все условия в данном маршруте.</param>
/// <param name="condition">Текущее условие.</param>
/// <returns>Возможность существования данного маршрута.</returns>
public bool CheckStandardConditions(List<Docflow.Structures.ApprovalRuleBase.RouteStep> allConditions, Docflow.Structures.ApprovalRuleBase.RouteStep condition)
{
foreach (var previousCondition in allConditions.TakeWhile(x => !Equals(x, condition)))
return previousCondition.Branch == condition.Branch;
return true;
}
/// <summary>
/// Получить все условия по стандартному договору в данном маршруте.
/// </summary>
/// <param name="route">Маршрут.</param>
/// <returns>Условия.</returns>
public List<Docflow.Structures.ApprovalRuleBase.RouteStep> GetStandardConditionsInRoute(List<Docflow.Structures.ApprovalRuleBase.RouteStep> route)
{
return route.Where(e => _obj.Conditions.Any(c => Equals(c.Number, e.StepNumber) && c.Condition.ConditionType ==
Sungero.Contracts.ContractCondition.ConditionType.Standard)).ToList();
}
#endregion
public override List<IApprovalRoleBase> GetSupportedApprovalRolesForRework()
{
return ApprovalRoleBases.GetAll().Where(r => r.Type != Docflow.ApprovalRole.Type.Initiator &&
r.Type != Docflow.ApprovalRole.Type.Approvers &&
r.Type != Docflow.ApprovalRole.Type.Addressee &&
r.Type != Docflow.ApprovalRole.Type.AddrAssistant &&
r.Type != Docflow.ApprovalRole.Type.Signatory &&
r.Type != Docflow.ApprovalRole.Type.SignAssistant)
.ToList();
}
}
}