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(); }
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(); } }
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); }
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(); } }
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); }
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); }
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; }
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); } }
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(); } }
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(); } }
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; }
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); }
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)); }
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(); } }
/// <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 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); } }
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 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); }
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; } } }