RegistrationSettingSharedFunctions.cs
5.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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
using System;
using System.Collections.Generic;
using System.Linq;
using Sungero.Company;
using Sungero.Content;
using Sungero.Core;
using Sungero.CoreEntities;
using Sungero.Docflow.RegistrationSetting;
namespace Sungero.Docflow.Shared
{
partial class RegistrationSettingFunctions
{
/// <summary>
/// Вернуть активные настройки по журналу.
/// </summary>
/// <param name="documentRegister">Журнал.</param>
/// <returns>Настройки по журналу.</returns>
[Public]
public static List<IRegistrationSetting> GetByDocumentRegister(IDocumentRegister documentRegister)
{
return Functions.Module.Remote.GetRegistrationSettingByDocumentRegister(documentRegister).ToList();
}
/// <summary>
/// Получить настройку по документу.
/// </summary>
/// <param name="document">Документ для подбора настройки.</param>
/// <param name="settingType">Тип настройки.</param>
/// <returns>Настройка по документу, которое имеет наивысший приоритет.</returns>
[Public]
public static IRegistrationSetting GetSettingByDocument(IOfficialDocument document, Enumeration? settingType)
{
var settings = GetAvailableSettingsByParams(settingType, document.BusinessUnit, document.DocumentKind, document.Department);
return settings.OrderByDescending(r => r.Priority).FirstOrDefault();
}
/// <summary>
/// Получить доступные настройки по документу.
/// </summary>
/// <param name="document">Документ для подбора настройки.</param>
/// <param name="settingType">Тип настройки.</param>
/// <param name="documentKind">Вид документа.</param>
/// <returns>Все настройки, которые подходят к документу.</returns>
[Public]
public static IRegistrationSetting GetSettingForKind(IOfficialDocument document,
Enumeration? settingType,
IDocumentKind documentKind)
{
return GetSettingByParams(settingType, document.BusinessUnit, documentKind, document.Department);
}
/// <summary>
/// Получить настройку по параметрам.
/// </summary>
/// <param name="settingType">Тип настройки.</param>
/// <param name="businessUnit">НОР.</param>
/// <param name="documentKind">Вид документа.</param>
/// <param name="department">Подразделение.</param>
/// <returns>Настройка, которое имеет наивысший приоритет.</returns>
[Public]
public static IRegistrationSetting GetSettingByParams(Enumeration? settingType,
IBusinessUnit businessUnit,
IDocumentKind documentKind,
IDepartment department)
{
var settings = GetAvailableSettingsByParams(settingType, businessUnit, documentKind, department);
return settings.OrderByDescending(r => r.Priority).FirstOrDefault();
}
/// <summary>
/// Получить доступные настройки по параметрам.
/// </summary>
/// <param name="settingType">Тип настройки.</param>
/// <param name="businessUnit">НОР.</param>
/// <param name="documentKind">Вид документа.</param>
/// <param name="department">Подразделение.</param>
/// <returns>Все настройки, которые подходят по параметрам.</returns>
[Public]
public static IQueryable<IRegistrationSetting> GetAvailableSettingsByParams(Enumeration? settingType,
IBusinessUnit businessUnit,
IDocumentKind documentKind,
IDepartment department)
{
return Functions.Module.Remote.GetAvailableRegistrationSettings(settingType, businessUnit, documentKind, department);
}
/// <summary>
/// Получить настройку по параметрам.
/// </summary>
/// <param name="activeSettings">Активные настройки.</param>
/// <param name="settingType">Тип настройки.</param>
/// <param name="businessUnitId">НОР.</param>
/// <param name="documentKindId">Вид документа.</param>
/// <param name="departmentId">Подразделение.</param>
/// <returns>Настройка, которая имеет наивысший приоритет.</returns>
[Public]
public static IRegistrationSetting GetSettingByParamsIds(List<IRegistrationSetting> activeSettings,
Enumeration? settingType,
int businessUnitId, int documentKindId, int departmentId)
{
var activeStatus = CoreEntities.DatabookEntry.Status.Active;
var settings = activeSettings.Where(r => r.SettingType == settingType)
.Where(r => !r.DocumentKinds.Any() ||
r.DocumentKinds.Any(o => o.DocumentKind != null && o.DocumentKind.Id == documentKindId))
.Where(r => !r.BusinessUnits.Any() ||
r.BusinessUnits.Any(o => o.BusinessUnit != null && o.BusinessUnit.Id == businessUnitId))
.Where(r => !r.Departments.Any() ||
r.Departments.Any(o => o.Department != null && o.Department.Id == departmentId));
return settings.OrderByDescending(r => r.Priority).FirstOrDefault();
}
}
}