Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        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;
        }