CaseInventoryServerFunctions.cs
5.45 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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
using System;
using System.Collections.Generic;
using System.Linq;
using Sungero.Core;
using Sungero.CoreEntities;
using DirRX.CaseArchiving.CaseInventory;
namespace DirRX.CaseArchiving.Server
{
partial class CaseInventoryFunctions
{
/// <summary>
/// Получить список дел описи.
/// </summary>
/// <returns>Список дел.</returns>
[Remote(IsPure=true),Public]
public virtual IQueryable<DirRX.LongTermArchive.ICaseFile> GetCaseFiles()
{
return DirRX.LongTermArchive.CaseFiles.GetAll(x => x.LTACaseInventoryDirRX != null && x.LTACaseInventoryDirRX.Equals(_obj));
}
/// <summary>
/// Сформировать версию документа из отчета.
/// </summary>
/// <returns>Версия документа.</returns>
[Public]
public virtual Sungero.Content.IElectronicDocumentVersions GenerateLastVersionFromReport()
{
Sungero.Reporting.Shared.IInternalReport internalReport = null;
var electronicCaseInventory = Sungero.Docflow.PublicFunctions.DocumentKind.GetNativeDocumentKind(Constants.Module.Initialize.CaseInventoryDocumentKind);
if (_obj.DocumentKind.Equals(electronicCaseInventory))
{
var report = CaseArchiving.Reports.GetCaseInventoryMainReport();
report.Entity = _obj;
internalReport = (Sungero.Reporting.Shared.IInternalReport)report;
}
else
{
var report = CaseArchiving.Reports.GetPaperCaseInventoryMainReport();
report.Entity = _obj;
internalReport = (Sungero.Reporting.Shared.IInternalReport)report;
}
if (!_obj.HasVersions)
_obj.Versions.AddNew();
var version = _obj.LastVersion;
using (var reportMS = new System.IO.MemoryStream())
{
internalReport.InternalExecute(reportMS);
version.Body.Write(reportMS);
}
version.Author = Users.Current;
version.AssociatedApplication = Sungero.Content.AssociatedApplications.GetByExtension("docx");
_obj.Save();
return version;
}
/// <summary>
/// Исключить все дела из описи.
/// </summary>
/// <returns>Сообщение об ошибке, либо пустая строка.</returns>
[Public, Remote]
public string RemoveAllCaseFiles()
{
try
{
foreach (var caseFile in CaseArchiving.PublicFunctions.CaseInventory.Remote.GetCaseFiles(_obj))
{
if (!DirRX.LongTermArchive.PublicFunctions.CaseFile.UpdateInventory(caseFile, null))
return CaseInventories.Resources.WarningCanNotUpdateCaseFileFormat(caseFile.DisplayValue);
}
_obj.Save();
return string.Empty;
}
catch (Exception e)
{
Logger.Debug(e.ToString());
return e.Message;
}
}
/// <summary>
/// Изменить ответственного в описи и делах.
/// </summary>
/// <param name="responsible">Ответственный.</param>
/// <returns>Сообщение об ошибке, либо пустая строка.</returns>
[Public, Remote]
public string ChangeCaseFilesResponsible(Sungero.Company.IEmployee responsible)
{
try
{
foreach (var caseFile in CaseArchiving.PublicFunctions.CaseInventory.Remote.GetCaseFiles(_obj))
{
caseFile.LTAResponsibleDirRX = responsible;
caseFile.Save();
}
_obj.Responsible = responsible;
_obj.Save();
return string.Empty;
}
catch (Exception e)
{
Logger.Debug(e.ToString());
return e.Message;
}
}
/// <summary>
/// Запустить передачу дел на архивное хранение.
/// </summary>
[Public, Remote]
public virtual void StartArchieving()
{
// Сбросить статус описи.
AccessRights.AllowRead(
() =>
{
_obj.ArchiveState = null;
_obj.ProcessingDate = Calendar.Now;
_obj.Save();
});
// Запустить передачу в архив.
var job = CaseArchiving.AsyncHandlers.TransferDocumentsToArchive.Create();
job.caseInventoryId = _obj.Id;
job.ExecuteAsync();
}
/// <summary>
/// Получить следующий по порядку номер описи.
/// </summary>
/// <returns>Номер описи.</returns>
public virtual int GetNextDocumentNumber()
{
var result = 1;
var useByDepartments = CaseArchiving.PublicFunctions.Module.Remote.IsCreateCaseInventoryByDepartments();
AccessRights.AllowRead(
() =>
{
// Нумеровать в разрезе видов описей.
var query = CaseArchiving.CaseInventories.GetAll(x => x.Id != _obj.Id && x.DocumentNumber.HasValue && x.EndOfYear == _obj.EndOfYear.Value && x.DocumentKind.Equals(_obj.DocumentKind));
// И в разрезе подразделений, если включена соответствующая настройка.
if (useByDepartments)
query = query.Where(x => x.Department != null && x.Department.Equals(_obj.Department));
var lastDocument = query.OrderByDescending(x => x.Id).FirstOrDefault();
if (lastDocument != null)
result += lastDocument.DocumentNumber.Value;
});
return result;
}
}
}