public virtual void ForRevision(Sungero.Workflow.Client.ExecuteResultActionArgs e)
        {
            // Валидация заполнения ответственного за доработку.
            if (_obj.ReworkPerformer == null)
            {
                e.AddError(ApprovalTasks.Resources.CantSendForReworkWithoutPerformer);
                e.Cancel();
            }

            // Проверить заполненность активного текста.
            if (!Functions.ApprovalTask.ValidateBeforeRework(_obj, ApprovalTasks.Resources.NeedTextForRework, e))
            {
                e.Cancel();
            }

            // Вызов диалога запроса выдачи прав на вложения (при отсутствии прав).
            Functions.ApprovalTask.ShowReworkConfirmationDialog(ApprovalTasks.As(_obj.Task), _obj, _obj.OtherGroup.All.ToList(), new List <IRecipient>(), _obj.ReworkPerformer, e,
                                                                Constants.ApprovalTask.ApprovalExecutionAssignmentConfirmDialogID.ForRevision);
        }
Beispiel #2
0
        public override void Refresh(Sungero.Presentation.FormRefreshEventArgs e)
        {
            if (!_obj.DocumentGroup.OfficialDocuments.Any())
            {
                e.AddError(ApprovalTasks.Resources.NoRightsToDocument);
            }

            _obj.State.Properties.DeliveryMethodDescription.IsVisible = !string.IsNullOrEmpty(_obj.DeliveryMethodDescription);

            // Скрывать контрол состояния со сводкой, если сводка пустая.
            var needViewDocumentSummary = Functions.ApprovalSigningAssignment.NeedViewDocumentSummary(_obj);

            _obj.State.Controls.DocumentSummary.IsVisible = needViewDocumentSummary;

            var reworkParameters = Functions.ApprovalTask.Remote.GetReworkParameters(ApprovalTasks.As(_obj.Task), _obj.StageNumber.Value);

            _obj.State.Properties.ReworkPerformer.IsEnabled = reworkParameters.AllowChangeReworkPerformer;
            _obj.State.Properties.ReworkPerformer.IsVisible = reworkParameters.AllowViewReworkPerformer;
        }
Beispiel #3
0
        public virtual void Abort(Sungero.Workflow.Client.ExecuteResultActionArgs e)
        {
            if (!Functions.ApprovalTask.Remote.HasDocumentAndCanRead(ApprovalTasks.As(_obj.Task)))
            {
                e.AddError(ApprovalTasks.Resources.NoRightsToDocument);
                return;
            }

            // Проверить заполненность активного текста.
            if (!Functions.ApprovalTask.ValidateBeforeRework(_obj, ApprovalReviewAssignments.Resources.NeedTextForAbortReview, e))
            {
                e.Cancel();
            }

            if (!Functions.Module.ShowDialogGrantAccessRightsWithConfirmationDialog(_obj, _obj.OtherGroup.All.ToList(), e.Action,
                                                                                    Constants.ApprovalTask.ApprovalReviewAssignmentConfirmDialogID.Abort))
            {
                e.Cancel();
            }
        }
Beispiel #4
0
        public Structures.ApprovalTask.BeforeSign ValidateBeforeSign()
        {
            var task            = ApprovalTasks.As(_obj.Task);
            var currentEmployee = Company.Employees.Current;
            var document        = _obj.DocumentGroup.OfficialDocuments.First();

            var errors  = Functions.OfficialDocument.GetApprovalValidationErrors(document, false);
            var addenda = task.AddendaGroup.OfficialDocuments.Where(a => a.HasVersions).ToList();

            foreach (var addendum in addenda)
            {
                errors.AddRange(Functions.OfficialDocument.GetDocumentLockErrors(addendum));
            }

            var signatories = Functions.OfficialDocument.GetSignatories(document);
            var canApprove  = document.AccessRights.CanApprove() && signatories.Any(s => currentEmployee != null && Equals(s.EmployeeId, currentEmployee.Id));
            var bodyChanged = Functions.ApprovalTask.DocumentHasBodyUpdateAfterLastView(document);

            return(Structures.ApprovalTask.BeforeSign.Create(errors, canApprove, bodyChanged));
        }
Beispiel #5
0
        /// <summary>
        /// Проверить возможность отправки задания подписания на доработку.
        /// </summary>
        /// <param name="assignment">Задание.</param>
        /// <param name="errorMessage">Сообщение об ошибке.</param>
        /// <param name="eventArgs">Аргумент обработчика вызова.</param>
        /// <returns>True - разрешить отправку, иначе false.</returns>
        public static bool ValidateBeforeRework(IAssignment assignment, string errorMessage, Sungero.Domain.Client.ExecuteActionArgs eventArgs)
        {
            if (!Functions.ApprovalTask.Remote.HasDocumentAndCanRead(ApprovalTasks.As(assignment.Task)))
            {
                eventArgs.AddError(ApprovalTasks.Resources.NoRightsToDocument);
                return(false);
            }
            if (string.IsNullOrWhiteSpace(assignment.ActiveText))
            {
                eventArgs.AddError(errorMessage);
                return(false);
            }

            if (!eventArgs.Validate())
            {
                return(false);
            }

            return(true);
        }
 public override void BeforeComplete(Sungero.Workflow.Server.BeforeCompleteEventArgs e)
 {
     // Проверить зарегистрированность документа, если схлопнуто с этапом регистрации.
     if (_obj.Result == Result.Complete && Functions.ApprovalTask.CurrentStageCollapsedWithSpecificStage(ApprovalTasks.As(_obj.Task), _obj.StageNumber, Docflow.ApprovalStage.StageType.Register))
     {
         var registrationState = _obj.DocumentGroup.OfficialDocuments.First().RegistrationState;
         if (registrationState == null || registrationState != Docflow.OfficialDocument.RegistrationState.Registered)
         {
             e.AddError(ApprovalTasks.Resources.ToPerformNeedRegisterDocument);
             return;
         }
     }
     if (_obj.Result == Result.ForRevision)
     {
         e.Result = ApprovalTasks.Resources.ForRework;
     }
     else
     {
         e.Result = Functions.ApprovalTask.GetCollapsedResult(ApprovalTasks.As(_obj.Task), _obj.Result);
     }
 }
 public override void BeforeComplete(Sungero.Workflow.Server.BeforeCompleteEventArgs e)
 {
     if (_obj.Result == Result.Execute)
     {
         // Проверить зарегистрированность документа.
         var document          = _obj.DocumentGroup.OfficialDocuments.First();
         var registrationState = document.RegistrationState;
         if (registrationState == null || (Enumeration)registrationState != OfficialDocument.RegistrationState.Registered)
         {
             e.AddError(ApprovalTasks.Resources.ToPerformNeedRegisterDocument);
             return;
         }
     }
     if (_obj.Result == Result.ForRevision)
     {
         e.Result = ApprovalTasks.Resources.ForRework;
     }
     else
     {
         e.Result = Functions.ApprovalTask.GetCollapsedResult(ApprovalTasks.As(_obj.Task), _obj.Result);
     }
 }
Beispiel #8
0
        public override void Showing(Sungero.Presentation.FormShowingEventArgs e)
        {
            // Скрыть действие по созданию сопроводительного письма.
            var collapsedStageTypes = _obj.CollapsedStagesTypesSig.Select(s => s.StageType).ToList();

            if (Functions.ApprovalTask.NeedHideCoverLetterAction(ApprovalTasks.As(_obj.Task), collapsedStageTypes))
            {
                e.HideAction(_obj.Info.Actions.CreateCoverLetter);
            }

            // Скрыть действие по созданию поручения и ознакомления.
            if (!collapsedStageTypes.Any(s => s == Docflow.ApprovalStage.StageType.Execution))
            {
                e.HideAction(_obj.Info.Actions.CreateActionItem);
                e.HideAction(_obj.Info.Actions.CreateAcquaintance);
            }

            // Скрыть действия по отправке документа контрагенту через сервис обмена и отправке вложением в письмо.
            if (collapsedStageTypes.All(x => x != Docflow.ApprovalStage.StageType.Sending))
            {
                e.HideAction(_obj.Info.Actions.SendViaExchangeService);
                e.HideAction(_obj.Info.Actions.SendByMail);
            }

            // Заменить "Подписать" на "Подтвердить подписание", если помощнику приходит задание подтверждения.
            var task      = ApprovalTasks.As(_obj.Task);
            var isConfirm = _obj.Stage.IsConfirmSigning == true && !Equals(_obj.Performer, task.Signatory);

            if (isConfirm != true)
            {
                e.HideAction(_obj.Info.Actions.ExtendDeadline);
                e.HideAction(_obj.Info.Actions.ConfirmSign);
            }
            else
            {
                e.HideAction(_obj.Info.Actions.Sign);
            }
        }
        public virtual void Approved(Sungero.Workflow.Client.ExecuteResultActionArgs e)
        {
            if (!Functions.ApprovalTask.Remote.HasDocumentAndCanRead(ApprovalTasks.As(_obj.Task)))
            {
                e.AddError(ApprovalTasks.Resources.NoRightsToDocument);
                return;
            }

            var document       = _obj.DocumentGroup.OfficialDocuments.First();
            var needStrongSign = _obj.Stage.NeedStrongSign ?? false;

            if (document.HasVersions && needStrongSign && !PublicFunctions.Module.Remote.GetCertificates(document).Any())
            {
                e.AddError(ApprovalTasks.Resources.CertificateNeeded);
                e.Cancel();
            }

            var accessRightsGranted = Functions.Module.ShowDialogGrantAccessRights(_obj, _obj.OtherGroup.All.ToList());

            if (accessRightsGranted == false)
            {
                e.Cancel();
            }

            var confirmationMessage = e.Action.ConfirmationMessage;

            if (_obj.AddendaGroup.OfficialDocuments.Any())
            {
                confirmationMessage = Docflow.ApprovalAssignments.Resources.ApprovalConfirmationMessage;
            }
            if (accessRightsGranted == null && !Functions.ApprovalTask.ConfirmCompleteAssignment(document, confirmationMessage, Constants.ApprovalTask.ApprovalAssignmentConfirmDialogID.Approved, false))
            {
                e.Cancel();
            }

            Functions.Module.EndorseDocument(_obj, true, needStrongSign, e);
        }
Beispiel #10
0
        public bool NeedHideAddResolutionAction()
        {
            // Скрыть вынесение резолюции, если этапа создания поручений нет в правиле.
            var stages         = Functions.ApprovalTask.GetStages(ApprovalTasks.As(_obj.Task)).Stages;
            var executionStage = stages.FirstOrDefault(s => s.StageType == Docflow.ApprovalStage.StageType.Execution);

            if (executionStage == null)
            {
                return(true);
            }

            // Скрыть вынесение резолюции, если этап создания поручений схлопнут.
            var isExecutionStageCollapsed = _obj.CollapsedStagesTypesRe.Any(cst => cst.StageType == Docflow.ApprovalReviewAssignmentCollapsedStagesTypesRe.StageType.Execution);

            if (isExecutionStageCollapsed)
            {
                return(true);
            }

            var task = ApprovalTasks.As(_obj.Task);

            // Скрыть вынесение резолюции, если у этапа создания поручений нет исполнителя.
            if (Functions.ApprovalStage.GetStagePerformer(task, executionStage.Stage) == null)
            {
                return(true);
            }

            // Скрыть вынесение резолюции, если это обработка резолюции.
            var reviewStage = stages.FirstOrDefault(s => s.StageType == Docflow.ApprovalStage.StageType.Review);

            if (reviewStage.Stage.IsResultSubmission == true && !Equals(task.Addressee, _obj.Performer))
            {
                return(true);
            }

            return(false);
        }
Beispiel #11
0
        public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
        {
            var deletedApprovers = _obj.State.Properties.Approvers.Deleted;
            var addedApprovers   = _obj.State.Properties.Approvers.Added;
            var changedApprovers = _obj.State.Properties.Approvers.Changed;

            var createFromSchema = false;

            e.Params.TryGetValue(Constants.ApprovalTask.CreateFromSchema, out createFromSchema);
            if (!createFromSchema)
            {
                var stages = Functions.ApprovalTask.GetStages(ApprovalTasks.As(_obj.Task));
                Functions.ApprovalReworkAssignment.ValidateApprovalReworkAssignment(_obj, stages, e);
            }
            else
            {
                e.Params.Remove(Constants.ApprovalTask.CreateFromSchema);
            }

            // Синхронизация грида согласующих со списком доп. согласующих.
            foreach (var deletedApprover in deletedApprovers)
            {
                var deleted = _obj.AddApprovers.Where(a => Equals(a.Approver, deletedApprover.Approver)).FirstOrDefault();
                _obj.AddApprovers.Remove(deleted);
            }

            if (addedApprovers.Any(a => a.IsRequiredApprover != true) || changedApprovers.Any(a => a.IsRequiredApprover != true))
            {
                _obj.AddApprovers.Clear();
                foreach (var approver in _obj.Approvers.Where(a => a.IsRequiredApprover != true))
                {
                    var newApprover = _obj.AddApprovers.AddNew();
                    newApprover.Approver = approver.Approver;
                }
            }
        }
        public virtual void ForRevision(Sungero.Workflow.Client.ExecuteResultActionArgs e)
        {
            // Валидация заполнения ответственного за доработку.
            if (_obj.ReworkPerformer == null)
            {
                e.AddError(ApprovalTasks.Resources.CantSendForReworkWithoutPerformer);
                e.Cancel();
            }

            // Валидация заполненности активного текста.
            if (!Functions.ApprovalTask.ValidateBeforeRework(_obj, ApprovalTasks.Resources.NeedTextForRework, e))
            {
                e.Cancel();
            }

            // Вызов диалога запроса выдачи прав на вложения (при отсутствии прав).
            Functions.ApprovalTask.ShowReworkConfirmationDialog(ApprovalTasks.As(_obj.Task), _obj, _obj.OtherGroup.All.ToList(), new List <IRecipient>(), _obj.ReworkPerformer, e,
                                                                Constants.ApprovalTask.ApprovalAssignmentConfirmDialogID.ForRevision);

            // Подписание согласующей подписью с результатом "не согласовано".
            var needStrongSign = _obj.Stage.NeedStrongSign ?? false;

            Functions.Module.EndorseDocument(_obj, false, needStrongSign, e);
        }
Beispiel #13
0
        public override void Showing(Sungero.Presentation.FormShowingEventArgs e)
        {
            var reworkParameters            = Functions.ApprovalTask.Remote.GetReworkParameters(ApprovalTasks.As(_obj.Task), _obj.StageNumber.Value);
            var schemeVersionSupportsRework = Functions.ApprovalTask.SchemeVersionSupportsRework(ApprovalTasks.As(_obj.Task));

            if ((!schemeVersionSupportsRework) || (schemeVersionSupportsRework && !reworkParameters.AllowSendToRework))
            {
                e.HideAction(_obj.Info.Actions.ForRevision);
            }
        }
        public virtual void Sign(Sungero.Workflow.Client.ExecuteResultActionArgs e)
        {
            if (!Functions.ApprovalTask.Remote.HasDocumentAndCanRead(ApprovalTasks.As(_obj.Task)))
            {
                e.AddError(ApprovalTasks.Resources.NoRightsToDocument);
                return;
            }

            var task            = ApprovalTasks.As(_obj.Task);
            var currentEmployee = Company.Employees.Current;
            var document        = _obj.DocumentGroup.OfficialDocuments.First();
            var validate        = Functions.ApprovalSigningAssignment.Remote.ValidateBeforeSign(_obj);

            foreach (var error in validate.Errors)
            {
                e.AddError(error);
            }
            var haveError = validate.Errors.Any();

            var needStrongSign = _obj.Stage.NeedStrongSign ?? false;

            if (document.HasVersions && needStrongSign && !PublicFunctions.Module.Remote.GetCertificates(document).Any())
            {
                e.AddError(ApprovalTasks.Resources.CertificateNeededToSign);
                haveError = true;
            }

            // Проверить зарегистрированность документа, если схлопнуто с этапом регистрации.
            if (_obj.CollapsedStagesTypesSig.Any(s => s.StageType == Docflow.ApprovalStage.StageType.Register))
            {
                var registrationState = _obj.DocumentGroup.OfficialDocuments.First().RegistrationState;
                if (registrationState == null || registrationState != Docflow.OfficialDocument.RegistrationState.Registered)
                {
                    e.AddError(ApprovalTasks.Resources.ToPerformNeedRegisterDocument);
                    haveError = true;
                }
            }

            if (!validate.CanApprove)
            {
                if (!document.AccessRights.CanApprove())
                {
                    e.AddError(ApprovalSigningAssignments.Resources.NoRigthToApproveDocumentForSubstituteFormat(currentEmployee.Name, _obj.Performer.Name));
                }
                else
                {
                    e.AddError(Docflow.Resources.NoRightsToApproveDocument);
                }
                haveError = true;
            }
            if (haveError)
            {
                return;
            }

            // Запросить подтверждение "не создания" поручений, если схлопнуто с созданием поручений.
            var confirmationAccepted = false;

            if (_obj.CollapsedStagesTypesSig.Any(s => s.StageType == Docflow.ApprovalStage.StageType.Execution))
            {
                confirmationAccepted = Functions.Module.ShowConfirmationDialogCreationActionItem(_obj, _obj.DocumentGroup.OfficialDocuments.FirstOrDefault(), e);
            }

            ((Domain.Shared.IExtendedEntity)document).Params[Exchange.PublicConstants.Module.DefaultSignResult] = true;
            confirmationAccepted = confirmationAccepted || Functions.Module.ShowConfirmationDialogSendToCounterparty(_obj, _obj.CollapsedStagesTypesSig.Select(x => x.StageType), e);
            ((Domain.Shared.IExtendedEntity)document).Params.Remove(Exchange.PublicConstants.Module.DefaultSignResult);

            var accessRightsGranted = Functions.Module.ShowDialogGrantAccessRights(_obj, _obj.OtherGroup.All.ToList());

            if (accessRightsGranted == false)
            {
                e.Cancel();
            }

            var confirmationMessage = e.Action.ConfirmationMessage;
            var documentViewed      = Functions.ApprovalTask.Remote.DocumenHasBeenViewed(document);

            if (_obj.AddendaGroup.OfficialDocuments.Any())
            {
                confirmationMessage = Docflow.ApprovalSigningAssignments.Resources.SignConfirmationMessage;
            }
            if (!confirmationAccepted && accessRightsGranted == null && !Functions.ApprovalTask.ConfirmCompleteAssignment(validate.DocumentBodyChanged, documentViewed, confirmationMessage,
                                                                                                                          Constants.ApprovalTask.ApprovalSigningAssignmentConfirmDialogID.Sign, true))
            {
                e.Cancel();
            }

            // Подписание утверждающей подписью.
            Functions.Module.ApproveDocument(_obj, needStrongSign, e);
        }
        public override void Refresh(Sungero.Presentation.FormRefreshEventArgs e)
        {
            // Если в регламенте запрещен уменьшающийся круг рецензентов, то не даем изменять действие в гриде.
            if (ApprovalTasks.As(_obj.Task).ApprovalRule.IsSmallApprovalAllowed != true)
            {
                _obj.State.Properties.Approvers.Properties.Action.IsEnabled = false;
            }

            var document          = _obj.DocumentGroup.OfficialDocuments.FirstOrDefault();
            var refreshParameters = Functions.ApprovalTask.Remote.GetStagesInfoForRefresh(ApprovalTasks.As(_obj.Task));

            _obj.State.Properties.Addressee.IsVisible  = refreshParameters.AddresseeIsVisible;
            _obj.State.Properties.Addressee.IsRequired = refreshParameters.AddresseeIsRequired;

            _obj.State.Properties.Signatory.IsVisible        = refreshParameters.SignatoryIsVisible;
            _obj.State.Properties.Signatory.IsRequired       = refreshParameters.SignatoryIsRequired;
            _obj.State.Properties.AddApprovers.IsVisible     = refreshParameters.AddApproversIsVisible;
            _obj.State.Properties.DeliveryMethod.IsVisible   = refreshParameters.DeliveryMethodIsVisible;
            _obj.State.Properties.ExchangeService.IsVisible  = refreshParameters.ExchangeServiceIsVisible;
            _obj.State.Properties.ForwardPerformer.IsVisible = Functions.ApprovalTask.SchemeVersionSupportsRework(ApprovalTasks.As(_obj.Task));

            Functions.ApprovalReworkAssignment.UpdatePropertiesEnableState(_obj);

            if (_obj.Status == Status.InProcess && !Functions.Module.IsLockedByOther(_obj) && _obj.AccessRights.CanUpdate())
            {
                Functions.ApprovalTask.ShowExchangeHint(ApprovalTasks.As(_obj.Task), _obj.State.Properties.DeliveryMethod, _obj.Info.Properties.DeliveryMethod, _obj.DeliveryMethod, e);
            }

            if (!_obj.DocumentGroup.OfficialDocuments.Any())
            {
                e.AddError(ApprovalTasks.Resources.NoRightsToDocument);
            }
        }
Beispiel #16
0
        public override void Refresh(Sungero.Presentation.FormRefreshEventArgs e)
        {
            if (!_obj.DocumentGroup.OfficialDocuments.Any())
            {
                e.AddError(ApprovalTasks.Resources.NoRightsToDocument);
            }

            // Если схлопнуто с печатью, то отобразить кому нести на подпись, рассмотрение.
            _obj.State.Properties.Signatory.IsVisible = _obj.Signatory != null;
            _obj.State.Properties.Addressee.IsVisible = _obj.Addressee != null;

            _obj.State.Properties.DeliveryMethodDescription.IsVisible = !string.IsNullOrEmpty(_obj.DeliveryMethodDescription);

            var reworkParameters            = Functions.ApprovalTask.Remote.GetReworkParameters(ApprovalTasks.As(_obj.Task), _obj.StageNumber.Value);
            var schemeVersionSupportsRework = Functions.ApprovalTask.SchemeVersionSupportsRework(ApprovalTasks.As(_obj.Task));

            _obj.State.Properties.ReworkPerformer.IsEnabled = reworkParameters.AllowChangeReworkPerformer && schemeVersionSupportsRework;
            _obj.State.Properties.ReworkPerformer.IsVisible = reworkParameters.AllowViewReworkPerformer && schemeVersionSupportsRework;
        }
Beispiel #17
0
        public override void Showing(Sungero.Presentation.FormShowingEventArgs e)
        {
            var collapsedStageTypes = _obj.CollapsedStagesTypesExe.Select(s => s.StageType).ToList();

            // Скрыть действия по отправке документа контрагенту через сервис обмена и отправке вложением в письмо.
            if (collapsedStageTypes.All(x => x != Docflow.ApprovalStage.StageType.Sending))
            {
                e.HideAction(_obj.Info.Actions.SendViaExchangeService);
                e.HideAction(_obj.Info.Actions.SendByMail);
            }

            var schemeVersionSupportsRework = Functions.ApprovalTask.SchemeVersionSupportsRework(ApprovalTasks.As(_obj.Task));
            var reworkParameters            = Functions.ApprovalTask.Remote.GetReworkParameters(ApprovalTasks.As(_obj.Task), _obj.StageNumber.Value);

            if ((!schemeVersionSupportsRework) || (schemeVersionSupportsRework && !reworkParameters.AllowSendToRework))
            {
                e.HideAction(_obj.Info.Actions.ForRevision);
            }
        }
        public override void Refresh(Sungero.Presentation.FormRefreshEventArgs e)
        {
            var refreshParameters = Functions.ApprovalTask.Remote.GetStagesInfoForRefresh(ApprovalTasks.As(_obj.Task));

            _obj.State.Properties.Addressee.IsVisible  = refreshParameters.AddresseeIsVisible;
            _obj.State.Properties.Addressee.IsRequired = refreshParameters.AddresseeIsRequired;
            _obj.State.Properties.Addressee.IsEnabled  = false;

            _obj.State.Properties.Signatory.IsVisible  = refreshParameters.SignatoryIsVisible;
            _obj.State.Properties.Signatory.IsRequired = refreshParameters.SignatoryIsRequired;
            _obj.State.Properties.Signatory.IsEnabled  = false;

            _obj.State.Attachments.ForPrinting.IsVisible = _obj.CollapsedStagesTypesPr.Count <= 1;
            _obj.State.Properties.DeliveryMethodDescription.IsVisible = !string.IsNullOrEmpty(_obj.DeliveryMethodDescription);

            var reworkParameters            = Functions.ApprovalTask.Remote.GetReworkParameters(ApprovalTasks.As(_obj.Task), _obj.StageNumber.Value);
            var schemeVersionSupportsRework = Functions.ApprovalTask.SchemeVersionSupportsRework(ApprovalTasks.As(_obj.Task));

            _obj.State.Properties.ReworkPerformer.IsEnabled = reworkParameters.AllowChangeReworkPerformer && schemeVersionSupportsRework;
            _obj.State.Properties.ReworkPerformer.IsVisible = reworkParameters.AllowViewReworkPerformer && schemeVersionSupportsRework;
        }
        public virtual void DeliveryMethodChanged(Sungero.Docflow.Shared.ApprovalManagerAssignmentDeliveryMethodChangedEventArgs e)
        {
            if (Equals(e.NewValue, e.OldValue))
            {
                return;
            }

            if (e.NewValue == null || e.NewValue.Sid != Constants.MailDeliveryMethod.Exchange)
            {
                _obj.ExchangeService = null;
                _obj.State.Properties.ExchangeService.IsEnabled  = false;
                _obj.State.Properties.ExchangeService.IsRequired = false;
            }
            else
            {
                _obj.State.Properties.ExchangeService.IsEnabled  = true;
                _obj.State.Properties.ExchangeService.IsRequired = true;
                _obj.ExchangeService = Functions.ApprovalTask.Remote.GetExchangeServices(ApprovalTasks.As(_obj.Task)).DefaultService;
            }
            Functions.ApprovalManagerAssignment.UpdateDeliveryMethod(_obj);

            _obj.State.Controls.Control.Refresh();
        }
Beispiel #20
0
        public virtual void ForReapproving(Sungero.Workflow.Client.ExecuteResultActionArgs e)
        {
            if (!e.Validate())
            {
                return;
            }

            if (!Functions.ApprovalTask.Remote.HasDocumentAndCanRead(ApprovalTasks.As(_obj.Task)))
            {
                e.AddError(ApprovalTasks.Resources.NoRightsToDocument);
                return;
            }

            // Если регламент указан, но есть ошибки в определении условий - значит, не все поля документа заполнены.
            var stages = Functions.ApprovalTask.Remote.GetStages(ApprovalTasks.As(_obj.Task));

            if (!stages.IsConditionsDefined)
            {
                e.AddError(stages.ErrorMessage);
                e.Cancel();
            }

            var document     = _obj.DocumentGroup.OfficialDocuments.FirstOrDefault();
            var hasSignStage = Functions.ApprovalRuleBase.HasApprovalStage(_obj.ApprovalRule, Docflow.ApprovalStage.StageType.Sign, document, stages.Stages);

            // Проверить, имеет ли право подписывающий на подпись.
            if (hasSignStage &&
                !Functions.ApprovalTask.Remote.CheckSignatory(ApprovalTasks.As(_obj.Task), _obj.Signatory, stages.Stages))
            {
                e.AddError(ApprovalTasks.Resources.IncorrectSignatory);
                return;
            }

            if (!Functions.ApprovalReworkAssignment.ValidateApprovalReworkAssignment(_obj, stages, e))
            {
                e.Cancel();
            }

            var assignees = new List <IRecipient>();

            if (_obj.Signatory != null)
            {
                assignees.Add(_obj.Signatory);
            }
            if (_obj.Addressee != null)
            {
                assignees.Add(_obj.Addressee);
            }
            assignees.AddRange(_obj.AddApprovers.Where(a => a.Approver != null).Select(a => a.Approver));
            if (!Functions.Module.ShowDialogGrantAccessRightsWithConfirmationDialog(_obj, _obj.OtherGroup.All.ToList(), assignees, e.Action,
                                                                                    Constants.ApprovalTask.ApprovalReworkAssignmentConfirmDialogID.ForReapproving))
            {
                e.Cancel();
            }

            // Если инициатор указан в этапе согласования с руководителем, то установить его подпись сразу.
            var approvalStage = Functions.ApprovalTask.Remote.AuthorMustApproveDocument(ApprovalTasks.As(_obj.Task), _obj.Performer,
                                                                                        _obj.Approvers.Select(app => Recipients.As(app.Approver)).Where(app => app != null).ToList());

            if (approvalStage.HasApprovalStage && document.Versions.Any())
            {
                if (document.HasVersions && approvalStage.NeedStrongSign && !PublicFunctions.Module.Remote.GetCertificates(document).Any())
                {
                    e.AddError(ApprovalTasks.Resources.CertificateNeeded);
                    return;
                }
                Functions.Module.EndorseDocument(_obj, true, approvalStage.NeedStrongSign, e);
            }
        }
        public override void Showing(Sungero.Presentation.FormShowingEventArgs e)
        {
            // Скрыть действие по созданию сопроводительного письма.
            var collapsedStageTypes = _obj.CollapsedStagesTypesPr.Select(s => s.StageType).ToList();

            if (Functions.ApprovalTask.NeedHideCoverLetterAction(ApprovalTasks.As(_obj.Task), collapsedStageTypes))
            {
                e.HideAction(_obj.Info.Actions.CreateCoverLetter);
            }

            // Скрыть действия по отправке документа контрагенту через сервис обмена и отправке вложением в письмо.
            if (collapsedStageTypes.All(x => x != Docflow.ApprovalStage.StageType.Sending))
            {
                e.HideAction(_obj.Info.Actions.SendViaExchangeService);
                e.HideAction(_obj.Info.Actions.SendByMail);
            }

            var reworkParameters            = Functions.ApprovalTask.Remote.GetReworkParameters(ApprovalTasks.As(_obj.Task), _obj.StageNumber.Value);
            var schemeVersionSupportsRework = Functions.ApprovalTask.SchemeVersionSupportsRework(ApprovalTasks.As(_obj.Task));

            if ((!schemeVersionSupportsRework) || (schemeVersionSupportsRework && !reworkParameters.AllowSendToRework))
            {
                e.HideAction(_obj.Info.Actions.ForRevision);
            }

            if (!_obj.DocumentGroup.OfficialDocuments.Any())
            {
                e.AddError(ApprovalTasks.Resources.NoRightsToDocument);
            }
        }
        public override void Showing(Sungero.Presentation.FormShowingEventArgs e)
        {
            // Нельзя изменить состав доп. согласующих, если их этап идет до этапа руководителя.
            var canAddApprovers = Functions.ApprovalTask.Remote.CheckSequenceOfCoupleStages(ApprovalTasks.As(_obj.Task),
                                                                                            ApprovalStage.StageType.Manager,
                                                                                            ApprovalStage.StageType.Approvers, true);

            e.Params.AddOrUpdate(Constants.ApprovalManagerAssignment.CanAddApprovers, canAddApprovers);
        }
Beispiel #23
0
 public virtual void SendByMail(Sungero.Domain.Client.ExecuteActionArgs e)
 {
     Functions.ApprovalSendingAssignment.SendByMail(ApprovalTasks.As(_obj.Task));
 }
        public override void Refresh(Sungero.Presentation.FormRefreshEventArgs e)
        {
            var document = _obj.DocumentGroup.OfficialDocuments.FirstOrDefault();

            var refreshParameters = Functions.ApprovalTask.Remote.GetStagesInfoForRefresh(ApprovalTasks.As(_obj.Task));

            _obj.State.Properties.Addressee.IsVisible  = refreshParameters.AddresseeIsVisible;
            _obj.State.Properties.Addressee.IsRequired = refreshParameters.AddresseeIsRequired;

            // Не давать менять адресата в согласовании служебных записок.
            if (Memos.Is(document))
            {
                _obj.State.Properties.Addressee.IsEnabled = false;
            }

            _obj.State.Properties.Signatory.IsVisible       = refreshParameters.SignatoryIsVisible;
            _obj.State.Properties.Signatory.IsRequired      = refreshParameters.SignatoryIsRequired;
            _obj.State.Properties.AddApprovers.IsVisible    = refreshParameters.AddApproversIsVisible;
            _obj.State.Properties.DeliveryMethod.IsVisible  = refreshParameters.DeliveryMethodIsVisible;
            _obj.State.Properties.ExchangeService.IsVisible = refreshParameters.ExchangeServiceIsVisible;

            Functions.ApprovalManagerAssignment.UpdateDeliveryMethod(_obj);

            _obj.State.Properties.Signatory.IsEnabled = _obj.ApprovalRule == null ? false : refreshParameters.SignatoryIsVisible && _obj.Status.Value == Workflow.AssignmentBase.Status.InProcess;

            if (_obj.Status == Status.InProcess && !Functions.Module.IsLockedByOther(_obj) && _obj.AccessRights.CanUpdate())
            {
                Functions.ApprovalTask.ShowExchangeHint(ApprovalTasks.As(_obj.Task), _obj.State.Properties.DeliveryMethod, _obj.Info.Properties.DeliveryMethod, _obj.DeliveryMethod, e);
            }

            if (!_obj.DocumentGroup.OfficialDocuments.Any())
            {
                e.AddError(ApprovalTasks.Resources.NoRightsToDocument);
            }

            // Скрывать контрол состояния со сводкой, если сводка пустая.
            var needViewDocumentSummary = Functions.ApprovalManagerAssignment.NeedViewDocumentSummary(_obj);

            _obj.State.Controls.DocumentSummary.IsVisible = needViewDocumentSummary;

            bool canAddApprovers;

            if (e.Params.TryGetValue(Constants.ApprovalManagerAssignment.CanAddApprovers, out canAddApprovers))
            {
                _obj.State.Properties.AddApprovers.IsEnabled = canAddApprovers;
            }

            var reworkParameters = Functions.ApprovalTask.Remote.GetReworkParameters(ApprovalTasks.As(_obj.Task), _obj.StageNumber.Value);

            _obj.State.Properties.ReworkPerformer.IsEnabled = reworkParameters.AllowChangeReworkPerformer;
            _obj.State.Properties.ReworkPerformer.IsVisible = reworkParameters.AllowViewReworkPerformer;
        }
Beispiel #25
0
        public override void Refresh(Sungero.Presentation.FormRefreshEventArgs e)
        {
            if (!_obj.DocumentGroup.OfficialDocuments.Any())
            {
                e.AddError(ApprovalTasks.Resources.NoRightsToDocument);
            }

            _obj.State.Properties.DeliveryMethodDescription.IsVisible = !string.IsNullOrEmpty(_obj.DeliveryMethodDescription);

            var schemeVersionSupportsRework = Functions.ApprovalTask.SchemeVersionSupportsRework(ApprovalTasks.As(_obj.Task));
            var reworkParameters            = Functions.ApprovalTask.Remote.GetReworkParameters(ApprovalTasks.As(_obj.Task), _obj.StageNumber.Value);

            _obj.State.Properties.ReworkPerformer.IsEnabled = reworkParameters.AllowChangeReworkPerformer && schemeVersionSupportsRework;
            _obj.State.Properties.ReworkPerformer.IsVisible = reworkParameters.AllowViewReworkPerformer && schemeVersionSupportsRework;
        }
        /// <summary>
        /// Обновить доступность полей карточки задачи.
        /// </summary>
        public virtual void UpdatePropertiesEnableState()
        {
            var document          = _obj.DocumentGroup.OfficialDocuments.FirstOrDefault();
            var refreshParameters = Functions.ApprovalTask.Remote.GetStagesInfoForRefresh(ApprovalTasks.As(_obj.Task));

            if (_obj.ForwardPerformer == null)
            {
                if (_obj.Status.Value == Workflow.AssignmentBase.Status.InProcess)
                {
                    _obj.State.Properties.Signatory.IsEnabled       = true;
                    _obj.State.Properties.Addressee.IsEnabled       = true;
                    _obj.State.Properties.DeliveryMethod.IsEnabled  = true;
                    _obj.State.Properties.ExchangeService.IsEnabled = true;
                    _obj.State.Properties.Approvers.IsEnabled       = true;
                }

                // Не давать менять адресата в согласовании служебных записок.
                if (Memos.Is(document))
                {
                    _obj.State.Properties.Addressee.IsEnabled = false;
                }

                Functions.ApprovalReworkAssignment.UpdateDeliveryMethod(_obj);
            }
            else
            {
                _obj.State.Properties.Signatory.IsEnabled       = false;
                _obj.State.Properties.Addressee.IsEnabled       = false;
                _obj.State.Properties.DeliveryMethod.IsEnabled  = false;
                _obj.State.Properties.ExchangeService.IsEnabled = false;
                _obj.State.Properties.Approvers.IsEnabled       = false;
            }
        }
        public virtual void Script5Execute()
        {
            // Если родительское задание прекращено, то срок не продлять.
            if (_obj.ParentAssignment.Status != Workflow.AssignmentBase.Status.InProcess)
            {
                return;
            }

            var desiredDeadline = _obj.NewDeadline;

            if (RecordManagement.ActionItemExecutionAssignments.As(_obj.ParentAssignment) != null)
            {
                // Обновить срок у задания.
                var actionItemAssignment = RecordManagement.ActionItemExecutionAssignments.Get(_obj.ParentAssignment.Id);
                actionItemAssignment.Deadline      = desiredDeadline;
                actionItemAssignment.ScheduledDate = desiredDeadline;

                // Обновить срок у задачи.
                var actionItemExecution = RecordManagement.ActionItemExecutionTasks.Get(actionItemAssignment.Task.Id);
                actionItemExecution.Deadline    = desiredDeadline;
                actionItemExecution.MaxDeadline = desiredDeadline;

                // Обновить срок у составной задачи.
                if (actionItemExecution.ActionItemType == RecordManagement.ActionItemExecutionTask.ActionItemType.Component)
                {
                    var component  = RecordManagement.ActionItemExecutionTasks.Get(actionItemExecution.ParentTask.Id);
                    var actionItem = component.ActionItemParts.FirstOrDefault(j => Equals(j.Assignee, actionItemExecution.Assignee) &&
                                                                              (Equals(j.ActionItemPart, actionItemExecution.ActionItem) || string.IsNullOrEmpty(j.ActionItemPart)) &&
                                                                              (j.Deadline == _obj.CurrentDeadline || j.Deadline == null));
                    if (actionItem != null)
                    {
                        actionItem.Deadline = desiredDeadline;
                    }
                }

                // Продлить сроки соисполнителей.
                foreach (var performer in actionItemExecution.CoAssignees)
                {
                    var subTasks = RecordManagement.ActionItemExecutionTasks.GetAll(t => Equals(t.MainTask, actionItemExecution) &&
                                                                                    t.Status == Sungero.Workflow.Task.Status.InProcess &&
                                                                                    Equals(t.Assignee, performer.Assignee));
                    foreach (var subTask in subTasks)
                    {
                        subTask.Deadline    = desiredDeadline;
                        subTask.MaxDeadline = desiredDeadline;

                        // Продлить срок у активного задания соисполнителя.
                        var assignment = RecordManagement.ActionItemExecutionAssignments.GetAll()
                                         .FirstOrDefault(a => Equals(a.Task, subTask) && a.Status == Sungero.Workflow.AssignmentBase.Status.InProcess);

                        if (assignment != null)
                        {
                            assignment.Deadline      = desiredDeadline;
                            assignment.ScheduledDate = desiredDeadline;
                        }
                    }
                }
            }
            else if (RecordManagement.ReportRequestAssignments.Is(_obj.ParentAssignment))
            {
                // Обновить срок у задания.
                _obj.ParentAssignment.Deadline = desiredDeadline;
                // Обновить срок у задачи.
                var reportRequestTask = RecordManagement.StatusReportRequestTasks.Get(_obj.ParentAssignment.Task.Id);
                reportRequestTask.MaxDeadline = desiredDeadline;
            }
            else if (FreeApprovalAssignments.Is(_obj.ParentAssignment))
            {
                // Обновить срок у задания.
                var freeApprovalAssignment = FreeApprovalAssignments.Get(_obj.ParentAssignment.Id);
                freeApprovalAssignment.Deadline = desiredDeadline;

                // Обновить срок у задачи.
                var freeApprovalTask = FreeApprovalTasks.Get(_obj.ParentAssignment.Task.Id);
                if (Functions.Module.CheckDeadline(desiredDeadline, freeApprovalTask.MaxDeadline))
                {
                    freeApprovalTask.MaxDeadline = desiredDeadline;
                }
            }
            else if (ApprovalCheckReturnAssignments.Is(_obj.ParentAssignment))
            {
                // Обновить срок у задания.
                var checkReturnAssignment = ApprovalCheckReturnAssignments.As(_obj.ParentAssignment);
                checkReturnAssignment.Deadline = desiredDeadline;

                // Обновить срок на вкладке "Выдача" документа.
                if (checkReturnAssignment.DocumentGroup.OfficialDocuments.Any())
                {
                    var document = checkReturnAssignment.DocumentGroup.OfficialDocuments.FirstOrDefault();
                    ((Domain.Shared.IExtendedEntity)document).Params[Docflow.Constants.Module.DeadlineExtentsionTaskCallContext] = true;
                    var tracks = document.Tracking.Where(t => Equals(t.ReturnTask, checkReturnAssignment.Task) &&
                                                         t.ReturnResult == null && t.ReturnDeadline != null);
                    foreach (var track in tracks)
                    {
                        track.ReturnDeadline = desiredDeadline;
                    }
                }
            }
            else if (CheckReturnAssignments.Is(_obj.ParentAssignment))
            {
                // Обновить срок у задания.
                var checkReturnAssignment = CheckReturnAssignments.As(_obj.ParentAssignment);
                checkReturnAssignment.Deadline = desiredDeadline;
                if (CheckReturnTasks.Is(checkReturnAssignment.Task))
                {
                    var checkReturnTask = CheckReturnTasks.As(checkReturnAssignment.Task);
                    checkReturnTask.MaxDeadline = desiredDeadline;
                }
                // Обновить срок на вкладке "Выдача" документа.
                if (checkReturnAssignment.DocumentGroup.OfficialDocuments.Any())
                {
                    var document = checkReturnAssignment.DocumentGroup.OfficialDocuments.FirstOrDefault();
                    ((Domain.Shared.IExtendedEntity)document).Params[Docflow.Constants.Module.DeadlineExtentsionTaskCallContext] = true;
                    var tracks = document.Tracking.Where(t => Equals(t.ReturnTask, checkReturnAssignment.Task) &&
                                                         t.ReturnResult == null && t.ReturnDeadline != null);
                    foreach (var track in tracks)
                    {
                        track.ReturnDeadline = desiredDeadline;
                    }
                }
            }
            else
            {
                // Обновить срок у задания.
                _obj.ParentAssignment.Deadline = desiredDeadline;
            }

            // Обновить срок у задач.
            var parentAssignment = _obj.ParentAssignment;

            if (ApprovalTasks.Is(parentAssignment.MainTask))
            {
                var approvalTask = ApprovalTasks.As(parentAssignment.MainTask);
                approvalTask.MaxDeadline = Functions.ApprovalTask.GetExpectedDate(approvalTask);
            }
            else if (RecordManagement.AcquaintanceTasks.Is(parentAssignment.MainTask))
            {
                var acquaintanceTask = RecordManagement.AcquaintanceTasks.As(parentAssignment.MainTask);
                if (Functions.Module.CheckDeadline(desiredDeadline, acquaintanceTask.Deadline))
                {
                    acquaintanceTask.Deadline = desiredDeadline;
                }
            }
        }
        public virtual void TrackingReturnTaskChanged(Sungero.Docflow.Shared.OfficialDocumentTrackingReturnTaskChangedEventArgs e)
        {
            var approvalTask = ApprovalTasks.As(e.NewValue);

            _obj.Iteration = approvalTask != null ? approvalTask.Iteration : null;
        }