StampSettingServerFunctions.cs
5.83 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
using System;
using System.Collections.Generic;
using System.Linq;
using Sungero.Core;
using Sungero.CoreEntities;
using Sungero.Docflow.StampSetting;
using Sungero.Docflow.Structures.StampSetting;
namespace Sungero.Docflow.Server
{
partial class StampSettingFunctions
{
/// <summary>
/// Получить дубли настройки отметки в документах.
/// </summary>
/// <returns>Дубли настройки отметки в документах.</returns>
[Public, Remote(IsPure = true)]
public virtual List<IStampSetting> GetStampSettingDuplicates()
{
var otherStampSettings = StampSettings.GetAll().Where(s => !Equals(s, _obj) && s.Status == Status.Active).ToList();
var duplicates = new List<IStampSetting>();
if (_obj.BusinessUnits.Any())
{
foreach (var businessUnit in _obj.BusinessUnits)
duplicates.AddRange(otherStampSettings.Where(s => s.BusinessUnits.Any(b => b.BusinessUnit == businessUnit.BusinessUnit)).ToList());
}
else
duplicates.AddRange(otherStampSettings.Where(s => !s.BusinessUnits.Any()).ToList());
return duplicates;
}
/// <summary>
/// Получить параметры простановки отметки для документа.
/// </summary>
/// <param name="signingDate">Дата и время подписания.</param>
/// <param name="withCertificate">True - подпись с сертификатом, False - простая подпись.</param>
/// <returns>Параметры простановки отметки.</returns>
[Public]
public virtual ISignatureStampParams GetSignatureStampParams(DateTime signingDate, bool withCertificate)
{
var stampParams = SignatureStampParams.Create();
stampParams.Logo = this.GetLogoForSignatureStamp(withCertificate);
stampParams.Title = this.GetTitleForSignatureStamp();
stampParams.SigningDate = this.GetSigningDateForSignatureStamp(signingDate);
return stampParams;
}
/// <summary>
/// Получить подходящие настройки отметки об ЭП для документа.
/// </summary>
/// <param name="document">Документ.</param>
/// <returns>Список подходящих настроек.</returns>
[Public]
public static List<IStampSetting> GetStampSettings(IOfficialDocument document)
{
var activeStampSettings = StampSettings.GetAll().Where(s => s.Status == Status.Active).ToList();
if (document.BusinessUnit != null)
{
var stampSettingsForBusinessUnit = activeStampSettings.Where(s => s.BusinessUnits.Select(b => b.BusinessUnit).Contains(document.BusinessUnit)).ToList();
if (stampSettingsForBusinessUnit.Any())
return stampSettingsForBusinessUnit;
else
return activeStampSettings.Where(s => !s.BusinessUnits.Any()).ToList();
}
return activeStampSettings.Where(s => !s.BusinessUnits.Any()).ToList();
}
/// <summary>
/// Получить логотип для простановки отметки.
/// </summary>
/// <param name="withCertificate">True - подпись с сертификатом, False - простая подпись.</param>
/// <returns>Html-тег с логотипом.</returns>
[Public]
public virtual string GetLogoForSignatureStamp(bool withCertificate)
{
var image = string.Empty;
if (_obj == null)
image = Resources.SignatureStampSampleLogo;
if (_obj.Logo == null)
return string.Empty;
image = _obj.LogoAsBase64;
string logoImage = withCertificate ? Resources.HtmlStampLogoForCertificate : Resources.HtmlStampLogoForSignature;
return logoImage.Replace("{Image}", image);
}
/// <summary>
/// Получить дату и время сервера для простановки отметки.
/// </summary>
/// <param name="signingDate">Дата подписания.</param>
/// <returns>Html-тег с датой и временем сервера или пустая строка.</returns>
[Public]
public virtual string GetSigningDateForSignatureStamp(DateTime signingDate)
{
var htmlSigningDate = string.Empty;
var signingDateLabel = string.Empty;
if (_obj != null && _obj.NeedShowDateTime == true)
{
using (Core.CultureInfoExtensions.SwitchTo(TenantInfo.Culture))
{
htmlSigningDate = Resources.HtmlStampSigningDateForSignature;
var utcOffset = Calendar.UtcOffset.TotalHours;
var utcOffsetLabel = utcOffset >= 0 ? "+" + utcOffset.ToString() : utcOffset.ToString();
signingDateLabel = Docflow.PublicFunctions.Module.ToShortDateShortTime(signingDate.AddHours(utcOffset));
signingDateLabel = string.Format("{0:g} (UTC{1})", signingDateLabel, utcOffsetLabel);
htmlSigningDate = htmlSigningDate.Replace("{SigningDate}", signingDateLabel);
}
}
return htmlSigningDate;
}
/// <summary>
/// Получить заголовок для простановки отметки.
/// </summary>
/// <returns>Отформатированный заголовок.</returns>
[Public]
public virtual string GetTitleForSignatureStamp()
{
if (_obj == null)
return Resources.SignatureStampSampleTitle;
var stampSettingTitle = _obj.Title;
// Убрать из строки html-теги.
stampSettingTitle = System.Text.RegularExpressions.Regex.Replace(stampSettingTitle, @"<[^>]+>", string.Empty);
// Заменить переносы строк на теги <br>.
stampSettingTitle = stampSettingTitle.Replace("\r\n", "<br>").Replace("\n", "<br>");
return stampSettingTitle;
}
}
}