public virtual void ExtendDeadline(Sungero.Domain.Client.ExecuteActionArgs e)
        {
            if (!Functions.ApprovalTask.Remote.HasDocumentAndCanRead(ApprovalTasks.As(_obj.Task)))
            {
                e.AddError(ApprovalTasks.Resources.NoRightsToDocument);
                return;
            }

            var task = Docflow.PublicFunctions.DeadlineExtensionTask.Remote.GetDeadlineExtension(_obj);

            task.Show();
        }
Beispiel #2
0
        public virtual void ApprovalForm(Sungero.Domain.Client.ExecuteActionArgs e)
        {
            if (!Functions.ApprovalTask.Remote.HasDocumentAndCanRead(ApprovalTasks.As(_obj.Task)))
            {
                e.AddError(ApprovalTasks.Resources.NoRightsToDocument);
                return;
            }

            var document = _obj.DocumentGroup.OfficialDocuments.Single();

            Functions.Module.RunApprovalSheetReport(document);
        }
        public virtual void SendViaExchangeService(Sungero.Domain.Client.ExecuteActionArgs e)
        {
            if (!Functions.ApprovalTask.Remote.HasDocumentAndCanRead(ApprovalTasks.As(_obj.Task)))
            {
                e.AddError(ApprovalTasks.Resources.NoRightsToDocument);
                return;
            }

            var document = _obj.DocumentGroup.OfficialDocuments.FirstOrDefault();

            Functions.ApprovalSendingAssignment.SendToCounterparty(document, _obj.Task);
        }
        public virtual void AddApprover(Sungero.Domain.Client.ExecuteActionArgs e)
        {
            if (!Functions.ApprovalTask.Remote.HasDocumentAndCanRead(ApprovalTasks.As(_obj.Task)))
            {
                e.AddError(ApprovalTasks.Resources.NoRightsToDocument);
                return;
            }

            var dialog   = Dialogs.CreateInputDialog(FreeApprovalTasks.Resources.AddApprover);
            var employee = dialog.AddSelect <Sungero.Company.IEmployee>(FreeApprovalTasks.Resources.Approver, true, null)
                           .Where(x => x.Status != Company.Employee.Status.Closed);
            var addButton = dialog.Buttons.AddCustom(FreeApprovalTasks.Resources.Add);

            dialog.Buttons.AddCancel();
            dialog.SetOnButtonClick(a =>
            {
                if (a.IsValid && a.Button == addButton)
                {
                    if (Functions.ApprovalAssignment.Remote.CanForwardTo(_obj, employee.Value))
                    {
                        // Довыдаем права новому согласующему на вложения.
                        if (Functions.Module.ShowDialogGrantAccessRights(_obj,
                                                                         _obj.OtherGroup.All.ToList(),
                                                                         new List <IRecipient>()
                        {
                            employee.Value
                        }) == false)
                        {
                            a.CloseAfterExecute = false;
                            return;
                        }

                        Docflow.Functions.Module.Remote.AddApprover(_obj, employee.Value);
                        _obj.State.Controls.Control.Refresh();
                        var employeeNameInDative = Company.PublicFunctions.Employee.GetShortName(employee.Value, DeclensionCase.Dative, false);
                        if (_obj.Stage.Sequence == ApprovalStage.Sequence.Parallel)
                        {
                            Dialogs.NotifyMessage(FreeApprovalTasks.Resources.SendedToFormat(employeeNameInDative));
                        }
                        else
                        {
                            Dialogs.NotifyMessage(ApprovalTasks.Resources.TaskWillBeSendedFormat(employeeNameInDative));
                        }
                    }
                    else
                    {
                        a.AddError(FreeApprovalAssignments.Resources.ApproverAlreadyExistsFormat(employee.Value.Person.ShortName));
                    }
                }
            });
            var result = dialog.Show();
        }
        public virtual void ConfirmSign(Sungero.Workflow.Client.ExecuteResultActionArgs e)
        {
            if (!Functions.ApprovalTask.Remote.HasDocumentAndCanRead(ApprovalTasks.As(_obj.Task)))
            {
                e.AddError(ApprovalTasks.Resources.NoRightsToDocument);
                return;
            }

            // Проверить зарегистрированность документа, если схлопнуто с этапом регистрации.
            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);
                    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);
            }

            confirmationAccepted = confirmationAccepted || Functions.Module.ShowConfirmationDialogSendToCounterparty(_obj, _obj.CollapsedStagesTypesSig.Select(x => x.StageType), e);
            var accessRightsGranted = Functions.Module.ShowDialogGrantAccessRights(_obj, _obj.OtherGroup.All.ToList());

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

            var document = _obj.DocumentGroup.OfficialDocuments.First();

            if (!confirmationAccepted && accessRightsGranted == null &&
                !Functions.ApprovalTask.ConfirmCompleteAssignment(document, e.Action.ConfirmationMessage, Constants.ApprovalTask.ApprovalSigningAssignmentConfirmDialogID.ConfirmSign, true))
            {
                e.Cancel();
            }

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

            // TODO Котегов: запилить в одну функцию, чтобы уменьшить число запросов.
            // Заполнить статус согласования "Подписан".
            Functions.OfficialDocument.Remote.SetInternalApprovalStateToSigned(document);

            // Заполнить подписывающего в карточке документа.
            Functions.OfficialDocument.Remote.SetDocumentSignatory(document, task.Signatory);
        }
        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;
        }
        public virtual void Accept(Sungero.Workflow.Client.ExecuteResultActionArgs e)
        {
            if (!Functions.ApprovalTask.Remote.HasDocumentAndCanRead(ApprovalTasks.As(_obj.Task)))
            {
                e.AddError(ApprovalTasks.Resources.NoRightsToDocument);
                return;
            }

            if (!Docflow.PublicFunctions.Module.ShowDialogGrantAccessRightsWithConfirmationDialog(_obj, _obj.OtherGroup.All.ToList(), e.Action, Constants.ApprovalTask.ApprovalCheckingAssignmentConfirmDialogID.Accept))
            {
                e.Cancel();
            }
        }
Beispiel #8
0
        public virtual void AddResolution(Sungero.Workflow.Client.ExecuteResultActionArgs e)
        {
            if (!Functions.ApprovalTask.Remote.HasDocumentAndCanRead(ApprovalTasks.As(_obj.Task)))
            {
                e.AddError(ApprovalTasks.Resources.NoRightsToDocument);
                return;
            }

            var haveError = false;

            if (string.IsNullOrWhiteSpace(_obj.ActiveText))
            {
                e.AddError(ApprovalReviewAssignments.Resources.ResolutionTextNeeded);
                haveError = true;
            }
            // Проверить зарегистрированность документа, если схлопнуто с этапом регистрации.
            if (_obj.CollapsedStagesTypesRe.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;
                }
            }

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

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

            if (haveError)
            {
                return;
            }

            var sendDialog = Functions.Module.ShowConfirmationDialogSendToCounterparty(_obj, _obj.CollapsedStagesTypesRe.Select(x => x.StageType), e);

            if (!Functions.Module.ShowDialogGrantAccessRightsWithConfirmationDialog(_obj, _obj.OtherGroup.All.ToList(), sendDialog ? null : e.Action,
                                                                                    Constants.ApprovalTask.ApprovalReviewAssignmentConfirmDialogID.AddResolution))
            {
                e.Cancel();
            }

            // Подписать ЭП.
            Functions.ApprovalReviewAssignment.SetSignature(_obj, e, ApprovalReviewAssignments.Resources.ResolutionAdded);
        }
Beispiel #9
0
        public virtual void Forward(Sungero.Workflow.Client.ExecuteResultActionArgs e)
        {
            if (!e.Validate())
            {
                return;
            }

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

            if (_obj.ForwardPerformer == null)
            {
                e.AddError(ApprovalReworkAssignments.Resources.CantRedirectWithoutForwardPerformer);
                e.Cancel();
            }

            var document     = _obj.DocumentGroup.OfficialDocuments.FirstOrDefault();
            var stages       = Functions.ApprovalTask.Remote.GetStages(ApprovalTasks.As(_obj.Task));
            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;
            }

            var giveRights = Functions.Module.ShowDialogGrantAccessRights(_obj, _obj.OtherGroup.All.ToList(), new List <IRecipient>()
            {
                _obj.ForwardPerformer
            });

            // Замена стандартного диалога подтверждения выполнения действия.
            if (giveRights == null)
            {
                if (!Functions.Module.ShowConfirmationDialog(e.Action.ConfirmationMessage, e.Action.ConfirmationDescription, null,
                                                             Constants.ApprovalTask.ApprovalReworkAssignmentConfirmDialogID.Forward))
                {
                    e.Cancel();
                }
            }
            else if (giveRights == false)
            {
                e.Cancel();
            }
        }
Beispiel #10
0
        public virtual void Approved(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 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 assignees = new List <IRecipient>();

            if (_obj.Signatory != null)
            {
                assignees.Add(_obj.Signatory);
            }
            assignees.AddRange(_obj.AddApprovers.Where(a => a.Approver != null).Select(a => a.Approver));
            var accessRightsGranted = Functions.Module.ShowDialogGrantAccessRights(_obj, _obj.OtherGroup.All.ToList(), assignees);

            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.ApprovalManagerAssignmentConfirmDialogID.Approved, false))
            {
                e.Cancel();
            }

            Functions.Module.EndorseDocument(_obj, true, needStrongSign, e);
        }
Beispiel #11
0
        public virtual void Complete(Sungero.Workflow.Client.ExecuteResultActionArgs e)
        {
            if (!Functions.ApprovalTask.Remote.HasDocumentAndCanRead(ApprovalTasks.As(_obj.Task)))
            {
                e.AddError(ApprovalTasks.Resources.NoRightsToDocument);
                return;
            }

            var sendDialog = Functions.Module.ShowConfirmationDialogSendToCounterparty(_obj, _obj.CollapsedStagesTypesSen.Select(x => x.StageType), e);

            if (!Docflow.PublicFunctions.Module.ShowDialogGrantAccessRightsWithConfirmationDialog(_obj,
                                                                                                  _obj.OtherGroup.All.ToList(),
                                                                                                  sendDialog ? null : e.Action, Constants.ApprovalTask.ApprovalSendingAssignmentConfirmDialogID.Complete))
            {
                e.Cancel();
            }
        }
        public virtual void DeliveryMethodValueInput(Sungero.Docflow.Client.ApprovalReworkAssignmentDeliveryMethodValueInputEventArgs e)
        {
            var task = ApprovalTasks.As(_obj.Task);

            if (e.NewValue != null && e.NewValue.Sid == Constants.MailDeliveryMethod.Exchange)
            {
                var services = Functions.ApprovalTask.Remote.GetExchangeServices(task).Services;
                if (!services.Any())
                {
                    e.AddError(ApprovalTasks.Resources.DeliveryByExchangeNotAllowed, e.Property);
                }

                return;
            }

            Functions.ApprovalTask.ShowExchangeHint(task, _obj.State.Properties.DeliveryMethod, _obj.Info.Properties.DeliveryMethod, e.NewValue, e);
        }
Beispiel #13
0
        public override void Refresh(Sungero.Presentation.FormRefreshEventArgs e)
        {
            if (!_obj.DocumentGroup.OfficialDocuments.Any())
            {
                e.AddError(ApprovalTasks.Resources.NoRightsToDocument);
            }

            // Если схлопнуто с печатью, то отобразить адресата.
            _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);

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

            var newDeadline = Functions.ApprovalTask.GetNewDeadline(_obj.Deadline);

            if (newDeadline != null)
            {
                _obj.Deadline = newDeadline.Value;
                _obj.Save();
                Dialogs.NotifyMessage(Docflow.Resources.CurrentAssignmentNewDeadline);
            }
        }
Beispiel #15
0
        public virtual void CreateAcquaintance(Sungero.Domain.Client.ExecuteActionArgs e)
        {
            if (!Functions.ApprovalTask.Remote.HasDocumentAndCanRead(ApprovalTasks.As(_obj.Task)))
            {
                e.AddError(ApprovalTasks.Resources.NoRightsToDocument);
                return;
            }

            _obj.Save();
            var document = _obj.DocumentGroup.OfficialDocuments.First();

            var subTask = RecordManagement.PublicFunctions.Module.Remote.CreateAcquaintanceTaskAsSubTask(document, _obj);

            if (subTask != null)
            {
                subTask.ShowModal();
            }
        }
Beispiel #16
0
        public virtual void CreateActionItem(Sungero.Domain.Client.ExecuteActionArgs e)
        {
            if (!Functions.ApprovalTask.Remote.HasDocumentAndCanRead(ApprovalTasks.As(_obj.Task)))
            {
                e.AddError(ApprovalTasks.Resources.NoRightsToDocument);
                return;
            }

            _obj.Save();
            var parentAssignmentId = _obj.Id;
            var document           = _obj.DocumentGroup.OfficialDocuments.First();
            var assignedBy         = ApprovalTasks.As(_obj.Task).Addressee;
            var hackTask           = Functions.Module.CreateActionItemExecutionWithResolution(document, parentAssignmentId, _obj.ActiveText, assignedBy);

            if (hackTask != null)
            {
                hackTask.ShowModal();
            }
        }
Beispiel #17
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 #18
0
        public virtual void ForRework(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.ApprovalReviewAssignmentConfirmDialogID.ForRework);
        }
        public bool AnyApprovalTasksWithCurrentDocument()
        {
            var anyTasks = false;

            AccessRights.AllowRead(
                () =>
            {
                var docGuid = _obj.GetEntityMetadata().GetOriginal().NameGuid;
                var approvalTaskDocumentGroupGuid = Constants.Module.TaskMainGroup.ApprovalTask;
                anyTasks = ApprovalTasks.GetAll()
                           .Where(t => t.Status == Workflow.Task.Status.InProcess ||
                                  t.Status == Workflow.Task.Status.Suspended)
                           .Where(t => t.AttachmentDetails
                                  .Any(att => att.AttachmentId == _obj.Id && att.EntityTypeGuid == docGuid &&
                                       att.GroupId == approvalTaskDocumentGroupGuid))
                           .Any();
            });

            return(anyTasks);
        }
Beispiel #20
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 #21
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 #22
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);
        }
Beispiel #23
0
        public virtual IQueryable <Sungero.Workflow.ITask> ApprovalDataQuery(IQueryable <Sungero.Workflow.ITask> query)
        {
            // Фильтр по типу.
            var typeFilterEnabled     = _filter != null && (_filter.RuleBased || _filter.Free);
            var showRuleBasedApproval = !typeFilterEnabled || _filter.RuleBased;
            var showFreeApproval      = !typeFilterEnabled || _filter.Free;
            var result = query
                         .Where(t => showRuleBasedApproval && ApprovalTasks.Is(t) ||
                                showFreeApproval && FreeApprovalTasks.Is(t));

            if (_filter == null)
            {
                return(RecordManagement.PublicFunctions.Module.ApplyCommonSubfolderFilters(result));
            }

            // Фильтры по статусу и периоду.
            result = RecordManagement.PublicFunctions.Module.ApplyCommonSubfolderFilters(result, _filter.InProcess,
                                                                                         _filter.Last30Days, _filter.Last90Days, _filter.Last180Days, false);

            return(result);
        }
 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 #26
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);
            }
        }
Beispiel #27
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 #28
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);
        }
        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;
                }
            }
        }