/// <summary> /// Раскрывание групп в пользователей с дублями. /// </summary> /// <param name="recipient">Реципиент.</param> /// <returns>Список реципиентов.</returns> public static List <IRecipient> GetUsersFromGroups(IRecipient recipient) { var sourceGroup = Groups.As(recipient); var recipientList = new List <IRecipient>(); if (sourceGroup == null) { recipientList.Add(recipient); } else { var users = Roles.GetAllUsersInGroup(sourceGroup).Where(x => x.Status == Sungero.CoreEntities.DatabookEntry.Status.Active && x.Login != null && x.IsSystem != true); foreach (var user in users) { recipientList.Add(user); } } return(recipientList); }
public override void BeforeStart(Sungero.Workflow.Server.BeforeStartEventArgs e) { var document = _obj.DocumentGroup.OfficialDocuments.FirstOrDefault(); if (document == null) { return; } if (!Sungero.Docflow.Functions.ApprovalTask.ValidateApprovalTaskStart(_obj, e)) { return; } var refreshParameters = Functions.ApprovalTask.GetStagesInfoForRefresh(_obj); // Могли измениться условия, влияющие на обязательность полей. Functions.ApprovalTask.SetRequiredProperties(_obj, refreshParameters); // Сбросить номер текущего этапа при старте и рестарте. _obj.StageNumber = null; // Апнуть Iteration. _obj.Iteration++; // Выдать наблюдателям права на просмотр. Functions.Module.GrantReadRightsForAttachments(_obj.DocumentGroup.All.Concat(_obj.AddendaGroup.All).ToList(), _obj.Observers.Select(o => o.Observer).ToList()); // Обновить обязательных согласующих. Functions.ApprovalTask.UpdateReglamentApprovers(_obj, _obj.ApprovalRule); // Развернуть дополнительных согласующих. var expandedAddApprovers = new List <IRecipient>(); _obj.AddApproversExpanded.Clear(); foreach (var addApprover in _obj.AddApprovers.Select(a => a.Approver).ToList()) { if (!Groups.Is(addApprover)) { expandedAddApprovers.Add(addApprover); } else { var employees = Groups.GetAllUsersInGroup(Groups.As(addApprover)) .Where(r => r.Status == CoreEntities.DatabookEntry.Status.Active) .Select(r => Recipients.As(r)); expandedAddApprovers.AddRange(employees); } } foreach (var addApproverEx in expandedAddApprovers.Distinct().ToList()) { _obj.AddApproversExpanded.AddNew().Approver = addApproverEx; } // Заполнить deliveryMethod документа значением из задачи. var outgoingDocument = OutgoingDocumentBases.As(document); if (_obj.State.Properties.DeliveryMethod.IsVisible == true && outgoingDocument != null && outgoingDocument.IsManyAddressees != true) { document.DeliveryMethod = _obj.DeliveryMethod; } // Заполнить статус согласования документа на момент старта задачи. _obj.DocumentExternalApprovalState = document.ExternalApprovalState ?? ApprovalTask.DocumentExternalApprovalState.Empty; // Сбросить значение свойства "Исполнитель этапа не определен". _obj.IsStageAssigneeNotFound = false; }