ModuleInitializer.cs
6.38 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
124
125
126
127
128
129
130
131
132
133
134
135
136
using System;
using System.Collections.Generic;
using System.Linq;
using Sungero.Core;
using Sungero.CoreEntities;
using Sungero.Domain.Initialization;
namespace Sungero.Meetings.Server
{
public partial class ModuleInitializer
{
public override void Initializing(Sungero.Domain.ModuleInitializingEventArgs e)
{
// Создание ролей.
InitializationLogger.Debug("Init: Create roles.");
CreateRoles();
// Выдача прав роли "Ответственные за совещания".
InitializationLogger.Debug("Init: Grant right on financial documents for responsible.");
GrantRightToMeetingResponsible();
CreateDocumentTypes();
CreateDocumentKinds();
CreateDocumentRegistersAndSettings();
}
/// <summary>
/// Создать предопределенные роли.
/// </summary>
public static void CreateRoles()
{
InitializationLogger.Debug("Init: Create Default Roles");
Docflow.PublicInitializationFunctions.Module.CreateRole(Resources.NameMeetingResponsibleRole, Resources.DescriptionMeetingResponsibleRole, Constants.Module.MeetingResponsibleRole);
}
/// <summary>
/// Выдать права роли "Ответственные за совещания".
/// </summary>
public static void GrantRightToMeetingResponsible()
{
InitializationLogger.Debug("Init: Grant rights on meeting to responsible managers.");
var meetingResponsible = Roles.GetAll().Where(n => n.Sid == Constants.Module.MeetingResponsibleRole).FirstOrDefault();
if (meetingResponsible == null)
return;
// Права на документы.
Agendas.AccessRights.Grant(meetingResponsible, DefaultAccessRightsTypes.Create);
Agendas.AccessRights.Save();
// Права на справочники.
Meetings.AccessRights.Grant(meetingResponsible, DefaultAccessRightsTypes.Create);
Meetings.AccessRights.Save();
// Права на спец. папки.
var allUsers = Roles.AllUsers;
GrantRightOnFolders(allUsers);
}
/// <summary>
/// Выдать права на спец.папки.
/// </summary>
/// <param name="role">Роль.</param>
public static void GrantRightOnFolders(IRole role)
{
var hasLicense = Docflow.PublicFunctions.Module.Remote.IsModuleAvailableByLicense(Guid.Parse("6ea9a047-b597-42eb-8f90-da8c559dd057"));
Dictionary<int, byte[]> licenses = null;
try
{
if (!hasLicense)
{
licenses = Docflow.PublicFunctions.Module.ReadLicense();
Docflow.PublicFunctions.Module.DeleteLicense();
}
// Права на папку "Протоколы совещаний".
MeetingsUI.SpecialFolders.Minutes.AccessRights.Grant(role, DefaultAccessRightsTypes.Read);
MeetingsUI.SpecialFolders.Minutes.AccessRights.Save();
}
finally
{
Docflow.PublicFunctions.Module.RestoreLicense(licenses);
}
}
/// <summary>
/// Создать типы документов для модуля совещания.
/// </summary>
public static void CreateDocumentTypes()
{
Docflow.PublicInitializationFunctions.Module.CreateDocumentType(Resources.AgendaTypeName, Agenda.ClassTypeGuid,
Docflow.DocumentType.DocumentFlow.Inner, true);
Docflow.PublicInitializationFunctions.Module.CreateDocumentType(Resources.MinutesTypeName, Minutes.ClassTypeGuid,
Docflow.DocumentType.DocumentFlow.Inner, true);
}
/// <summary>
/// Создать виды документов для модуля совещания.
/// </summary>
public static void CreateDocumentKinds()
{
Docflow.PublicInitializationFunctions.Module.CreateDocumentKind(Resources.AgendaKindName,
Resources.AgendaKindShortName,
Docflow.DocumentKind.NumberingType.NotNumerable,
Docflow.DocumentKind.DocumentFlow.Inner, true, false, Agenda.ClassTypeGuid,
new Domain.Shared.IActionInfo[] { Docflow.OfficialDocuments.Info.Actions.SendForFreeApproval },
Constants.Module.AgendaKind);
var minutesActions = new Domain.Shared.IActionInfo[] {
Docflow.OfficialDocuments.Info.Actions.SendActionItem,
Docflow.OfficialDocuments.Info.Actions.SendForFreeApproval,
Docflow.OfficialDocuments.Info.Actions.SendForApproval,
Docflow.OfficialDocuments.Info.Actions.SendForAcquaintance };
Docflow.PublicInitializationFunctions.Module.CreateDocumentKind(Resources.MinutesKindName,
Resources.MinutesKindShortName,
Docflow.DocumentKind.NumberingType.Numerable, Docflow.DocumentKind.DocumentFlow.Inner,
true, false, Minutes.ClassTypeGuid, minutesActions,
Constants.Module.MinutesKind);
}
/// <summary>
/// Создать журналы и настройки регистрации.
/// </summary>
public static void CreateDocumentRegistersAndSettings()
{
InitializationLogger.Debug("Init: Create default document registers and settings for docflow.");
var minutesRegister = Docflow.PublicInitializationFunctions.Module.CreateYearSectionDocumentRegister(Resources.RegistersAndSettingsMinutesName,
Resources.RegistersAndSettingsMinutesIndex,
Constants.Module.MinutesRegister);
Docflow.PublicInitializationFunctions.Module.CreateNumerationSetting(Minutes.ClassTypeGuid, Docflow.RegistrationSetting.DocumentFlow.Inner, minutesRegister);
}
}
}