public virtual void StartBlock7(Sungero.Docflow.Server.FreeApprovalNotificationArguments e) { // Синхронизировать группу приложений документа. var document = _obj.ForApprovalGroup.ElectronicDocuments.FirstOrDefault(); Functions.Module.SynchronizeAddendaAndAttachmentsGroup(_obj.AddendaGroup, document); if (OfficialDocuments.Is(document)) { Functions.OfficialDocument.AddRelatedDocumentsToAttachmentGroup(OfficialDocuments.As(document), _obj.OtherGroup); } e.Block.Subject = Functions.Module.TrimSpecialSymbols(FreeApprovalTasks.Resources.NewApprovalLapSubject, _obj.ForApprovalGroup.ElectronicDocuments.First().Name); var approvalReworkAssignments = FreeApprovalReworkAssignments.GetAll(asg => asg.Task.Equals(_obj) && asg.TaskStartId == _obj.StartId); if (approvalReworkAssignments.Any()) { var lastApprovalReworkAssignments = approvalReworkAssignments.OrderByDescending(asg => asg.Created).First(); foreach (var recipient in lastApprovalReworkAssignments.Approvers.Where(apr => apr.Action == Sungero.Docflow.FreeApprovalReworkAssignmentApprovers.Action.SendNotice)) { e.Block.Performers.Add(recipient.Approver); } } }
/// <summary> /// Синхронизировать группу приложений документа. /// </summary> public virtual void SynchronizeAddendaAndAttachmentsGroup() { var document = _obj.ForApprovalGroup.ElectronicDocuments.FirstOrDefault(); Functions.Module.SynchronizeAddendaAndAttachmentsGroup(_obj.AddendaGroup, document); if (OfficialDocuments.Is(document)) { Functions.OfficialDocument.AddRelatedDocumentsToAttachmentGroup(OfficialDocuments.As(document), _obj.OtherGroup); } }
public virtual void ForApprovalGroupDeleted(Sungero.Workflow.Interfaces.AttachmentDeletedEventArgs e) { Functions.Module.SynchronizeAddendaAndAttachmentsGroup(_obj.AddendaGroup, null); // Очистить группу "Дополнительно". var document = OfficialDocuments.As(e.Attachment); if (OfficialDocuments.Is(document)) { Functions.OfficialDocument.RemoveRelatedDocumentsFromAttachmentGroup(OfficialDocuments.As(document), _obj.OtherGroup); } _obj.Subject = Docflow.Resources.AutoformatTaskSubject; }
public virtual void StartBlock6(Sungero.Docflow.Server.FreeApprovalNotificationArguments e) { // Синхронизировать группу приложений документа. var document = _obj.ForApprovalGroup.ElectronicDocuments.FirstOrDefault(); Functions.Module.SynchronizeAddendaAndAttachmentsGroup(_obj.AddendaGroup, document); if (OfficialDocuments.Is(document)) { Functions.OfficialDocument.AddRelatedDocumentsToAttachmentGroup(OfficialDocuments.As(document), _obj.OtherGroup); } e.Block.Performers.Add(_obj.Author); e.Block.Subject = Functions.Module.TrimSpecialSymbols(FreeApprovalTasks.Resources.ApprovalCompletedSubject, _obj.ForApprovalGroup.ElectronicDocuments.First().Name); }
/// <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); }
public virtual void StartBlock11(Sungero.Docflow.Server.FreeApprovalNotificationArguments e) { // Синхронизировать группу приложений документа. var document = _obj.ForApprovalGroup.ElectronicDocuments.FirstOrDefault(); Functions.Module.SynchronizeAddendaAndAttachmentsGroup(_obj.AddendaGroup, document); if (OfficialDocuments.Is(document)) { Functions.OfficialDocument.AddRelatedDocumentsToAttachmentGroup(OfficialDocuments.As(document), _obj.OtherGroup); } e.Block.Performers.Add(_obj.Author); var lastIterationId = Functions.FreeApprovalTask.GetApprovalAssignmentLastIterationId(_obj); var firstApprovalAssignment = Functions.FreeApprovalTask.GetLastAssignmentWithoutNotice(_obj, lastIterationId).First(); e.Block.LinkedFreeApprovalAssignment = firstApprovalAssignment; e.Block.Subject = Functions.Module.TrimSpecialSymbols(FreeApprovalTasks.Resources.ReworkNoticeSubject, _obj.ForApprovalGroup.ElectronicDocuments.First().Name); }
/// <summary> /// Установить доступность свойств. /// </summary> /// <param name="refreshParameters">Информация по этапам для обновления формы задачи на согласование по регламенту.</param> public virtual void SetEnabledProperties(Structures.ApprovalTask.RefreshParameters refreshParameters) { var taskProperties = _obj.State.Properties; taskProperties.Addressee.IsEnabled = false; taskProperties.ReqApprovers.IsEnabled = false; if (_obj.ApprovalRule != null) { taskProperties.Addressee.IsEnabled = refreshParameters.AddresseeIsEnabled; } var isExchange = _obj.DeliveryMethod != null && _obj.DeliveryMethod.Sid == Constants.MailDeliveryMethod.Exchange; taskProperties.ExchangeService.IsEnabled = refreshParameters.ExchangeServiceIsEnabled; var document = _obj.DocumentGroup.OfficialDocuments.FirstOrDefault(); if (isExchange && OfficialDocuments.Is(document)) { if (document.Versions.Any()) { var isIncomingDocument = Docflow.PublicFunctions.OfficialDocument.Remote.CanSendAnswer(document); var isFormalizedDocument = Docflow.AccountingDocumentBases.Is(document) && Docflow.AccountingDocumentBases.As(document).IsFormalized == true; taskProperties.DeliveryMethod.IsEnabled = refreshParameters.DeliveryMethodIsEnabled; taskProperties.ExchangeService.IsEnabled = refreshParameters.ExchangeServiceIsEnabled; } } // Не давать менять адресата в согласовании служебных записок. if (Memos.Is(document)) { taskProperties.Addressee.IsEnabled = false; } // Не давать изменять способ доставки для исходящих писем на несколько адресатов. if (OutgoingDocumentBases.Is(document) && OutgoingDocumentBases.As(document).IsManyAddressees == true) { taskProperties.DeliveryMethod.IsEnabled = false; } }
public virtual void ForApprovalGroupAdded(Sungero.Workflow.Interfaces.AttachmentAddedEventArgs e) { var document = _obj.ForApprovalGroup.ElectronicDocuments.First(); // Получить ресурсы в культуре тенанта. using (TenantInfo.Culture.SwitchTo()) _obj.Subject = Functions.Module.TrimSpecialSymbols(FreeApprovalTasks.Resources.TaskSubject, document.Name); if (!_obj.State.IsCopied) { Functions.Module.SynchronizeAddendaAndAttachmentsGroup(_obj.AddendaGroup, document); if (OfficialDocuments.Is(document)) { Functions.OfficialDocument.AddRelatedDocumentsToAttachmentGroup(OfficialDocuments.As(document), _obj.OtherGroup); } } if (OfficialDocuments.Is(document)) { Functions.OfficialDocument.DocumentAttachedInMainGroup(OfficialDocuments.As(document), _obj); } }
public virtual void StartBlock3(Sungero.Docflow.Server.FreeApprovalReworkAssignmentArguments e) { // Синхронизировать группу приложений документа. var document = _obj.ForApprovalGroup.ElectronicDocuments.FirstOrDefault(); Functions.Module.SynchronizeAddendaAndAttachmentsGroup(_obj.AddendaGroup, document); if (OfficialDocuments.Is(document)) { Functions.OfficialDocument.AddRelatedDocumentsToAttachmentGroup(OfficialDocuments.As(document), _obj.OtherGroup); } e.Block.Performers.Add(_obj.Author); e.Block.RelativeDeadlineDays = 3; e.Block.Subject = Functions.Module.TrimSpecialSymbols(FreeApprovalTasks.Resources.RevisionAsgSubject, _obj.ForApprovalGroup.ElectronicDocuments.First().Name); if (_obj.MaxDeadline.HasValue) { e.Block.NewDeadline = _obj.MaxDeadline; } var approvalAssignments = FreeApprovalAssignments.GetAll(asg => asg.Task.Equals(_obj) && asg.TaskStartId == _obj.StartId); var reworkAssignments = FreeApprovalReworkAssignments.GetAll(asg => asg.Task.Equals(_obj) && asg.TaskStartId == _obj.StartId); var lastIterationId = Functions.FreeApprovalTask.GetApprovalAssignmentLastIterationId(_obj); // Если заданий на доработку не было, то заполняем всю таблицу из заданий по задаче, // если были - то исполнителей берем из последнего задания на доработку, а результат и действие заполняем по последним заданиям на согласование. if (!reworkAssignments.Any()) { foreach (var aprAssignment in approvalAssignments.Where(asg => asg.IterationId == lastIterationId).OrderBy(i => i.Created)) { Functions.FreeApprovalTask.AddToReworkAssigneeNewApprover(e, aprAssignment); } } else { var approvalReworkAssignmentFromLastIteration = reworkAssignments.OrderByDescending(asg => asg.Created).First(); foreach (var asgApprover in approvalReworkAssignmentFromLastIteration.Approvers.OrderBy(asg => asg.Id)) { // Копируем все значения. var newApprover = e.Block.Approvers.FirstOrDefault(a => Equals(a.Approver, asgApprover.Approver)) ?? e.Block.Approvers.AddNew(); newApprover.Approver = asgApprover.Approver; newApprover.Approved = asgApprover.Approved; newApprover.Action = asgApprover.Action; // Если результат согласования изменился \ согласование не было выполнено - перебиваем данные. var lastApprovalAsg = approvalAssignments.Where(asg => asg.Performer.Equals(asgApprover.Approver)).OrderByDescending(asg => asg.IterationId).ThenByDescending(asg => asg.Modified).FirstOrDefault(); if (lastApprovalAsg != null) { if (lastApprovalAsg.Result == Sungero.Docflow.FreeApprovalAssignment.Result.Approved) { newApprover.Approved = Sungero.Docflow.FreeApprovalReworkAssignmentApprovers.Approved.IsApproved; newApprover.Action = newApprover.Action == Sungero.Docflow.FreeApprovalReworkAssignmentApprovers.Action.SendForApproval ? Sungero.Docflow.FreeApprovalReworkAssignmentApprovers.Action.SendNotice : Sungero.Docflow.FreeApprovalReworkAssignmentApprovers.Action.DoNotSend; } else if (lastApprovalAsg.Result == Sungero.Docflow.FreeApprovalAssignment.Result.Forward) { newApprover.Approved = Sungero.Docflow.FreeApprovalReworkAssignmentApprovers.Approved.NotApproved; newApprover.Action = Sungero.Docflow.FreeApprovalReworkAssignmentApprovers.Action.DoNotSend; } else { newApprover.Approved = Sungero.Docflow.FreeApprovalReworkAssignmentApprovers.Approved.NotApproved; newApprover.Action = Sungero.Docflow.FreeApprovalReworkAssignmentApprovers.Action.SendForApproval; } } } foreach (var newApproval in approvalAssignments.Where(a => a.IterationId == lastIterationId).OrderBy(i => i.Created)) { Functions.FreeApprovalTask.AddToReworkAssigneeNewApprover(e, newApproval); } } }