ApprovalSendingAssignmentClientFunctions.cs
4.63 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
using System;
using System.Collections.Generic;
using System.Linq;
using Sungero.Core;
using Sungero.CoreEntities;
using Sungero.Docflow.ApprovalSendingAssignment;
namespace Sungero.Docflow.Client
{
partial class ApprovalSendingAssignmentFunctions
{
#region Отправка по email
/// <summary>
/// Создать и отправить письмо по почте.
/// </summary>
/// <param name="task">Задача.</param>
public static void SendByMail(IApprovalTask task)
{
var doc = task.DocumentGroup.OfficialDocuments.FirstOrDefault();
var addenda = task.AddendaGroup.OfficialDocuments.Where(x => !Equals(x, OfficialDocuments.Null) && x.HasVersions).ToList();
var other = task.OtherGroup.All.Where(x => OfficialDocuments.Is(x)).Cast<IOfficialDocument>().ToList();
other = other.Where(x => !Equals(x, OfficialDocuments.Null) && x.HasVersions).ToList();
var relatedDocuments = new List<IOfficialDocument>();
relatedDocuments.AddRange(addenda);
relatedDocuments.AddRange(other);
Sungero.Docflow.Functions.OfficialDocument.SelectRelatedDocumentsAndCreateEmail(doc, relatedDocuments);
}
#endregion
/// <summary>
/// Создать сопроводительное письмо.
/// </summary>
/// <param name="document">Документ, к которому создается сопроводительное письмо.</param>
/// <param name="attachmentsGroup">Группа вложений.</param>
public static void CreateCoverLetter(IOfficialDocument document, Workflow.Interfaces.IWorkflowEntityAttachmentGroup attachmentsGroup)
{
// TODO Reshetnikov_MA переполучаем документ для обновления связей в десктоп, #71595.
var officialDocument = Docflow.PublicFunctions.OfficialDocument.Remote.GetOfficialDocument(document.Id);
var correspondence = officialDocument.Relations.GetRelated(Constants.Module.CorrespondenceRelationName)
.Where(r => attachmentsGroup.All.Contains(r)).ToList();
if (correspondence.Count == 1)
{
var dialog = Dialogs.CreateTaskDialog(ApprovalSendingAssignments.Resources.LetterAlreadyExist,
ApprovalSendingAssignments.Resources.LetterAlreadyExistQuestion,
MessageType.Question);
dialog.Buttons.AddYesNo();
dialog.Buttons.Default = DialogButtons.No;
if (dialog.Show() == DialogButtons.Yes)
correspondence.First().ShowModal();
}
else if (correspondence.Any())
{
Dialogs.ShowMessage(ApprovalSendingAssignments.Resources.LetterAlreadyExists, MessageType.Information);
}
else
{
var letter = Functions.Module.CreateCoverLetter(document);
if (letter == null)
return;
// Открываем модально, чтобы следующая проверка прошла уже после того, как мы закончили создавать письмо, иначе условие не выполнится никогда.
letter.ShowModal();
// Если письмо сохранили - добавляем в задание.
if (!letter.State.IsChanged)
attachmentsGroup.All.Add(letter);
}
}
/// <summary>
/// Отправка документа, либо ответа контрагенту с учетом выбранного сервиса обмена и приложений в задаче на согласование.
/// </summary>
/// <param name="document">Документ.</param>
/// <param name="task">Задача.</param>
public static void SendToCounterparty(IOfficialDocument document, Workflow.ITask task)
{
var approvalTask = ApprovalTasks.As(task);
var addenda = approvalTask.AddendaGroup.OfficialDocuments.ToList();
Exchange.PublicFunctions.Module.SendResultToCounterparty(document, approvalTask.ExchangeService, addenda);
}
/// <summary>
/// Проверить возможность отправки документа контрагенту.
/// </summary>
/// <param name="document">Документ.</param>
/// <returns>True, если можно отправить, иначе - false.</returns>
public static bool CanSendToCounterparty(IOfficialDocument document)
{
return !document.State.IsInserted && !document.State.IsChanged && document.AccessRights.CanUpdate() &&
document.AccessRights.CanSendByExchange() && document.HasVersions;
}
}
}