コード例 #1
0
        public async Task <ActionResult> RequestReassign(
            int workflowId,
            [Bind(Include =
                      nameof(RequestForReassignmentViewModel.WorkflowId) + "," +
                      nameof(RequestForReassignmentViewModel.SuggestedReviewerId) + "," +
                      nameof(RequestForReassignmentViewModel.JustificationKey) + "," +
                      nameof(RequestForReassignmentViewModel.Comments))]
            RequestForReassignmentViewModel requestForReassignmentViewModel)
        {
            if (ModelState.IsValid)
            {
                var wf = await FindWorkflowAsync(workflowId);

                if (wf == null)
                {
                    return(HttpNotFound());
                }
                var question = new UnliqudatedObjectsWorkflowQuestion
                {
                    JustificationKey   = requestForReassignmentViewModel.JustificationKey,
                    UserId             = CurrentUserId,
                    Answer             = UnliqudatedObjectsWorkflowQuestion.CommonAnswers.RequestForReasssignment,
                    WorkflowId         = workflowId,
                    Comments           = requestForReassignmentViewModel.Comments,
                    WorkflowRowVersion = wf.WorkflowRowVersion,
                    CreatedAtUtc       = DateTime.UtcNow
                };
                DB.UnliqudatedObjectsWorkflowQuestions.Add(question);
                await DB.SaveChangesAsync();

                return(await RequestReassign(wf, question, requestForReassignmentViewModel.SuggestedReviewerId));
            }

            return(PartialView("~/Views/Ulo/Details/Workflow/RequestForReassignments/_Details.cshtml", requestForReassignmentViewModel));
        }
コード例 #2
0
 public async Task <ActionResult> ReassignFromList(
     int workflowId,
     [Bind(Include =
               nameof(RequestForReassignmentViewModel.SuggestedReviewerId) + "," +
               nameof(RequestForReassignmentViewModel.Comments) + "," +
               nameof(RequestForReassignmentViewModel.JustificationKey)
           )]
     RequestForReassignmentViewModel requestForReassignmentViewModel)
 {
     if (ModelState.IsValid)
     {
         return(await HandleReassignmentRequestAsync(workflowId, requestForReassignmentViewModel) ?? RedirectToHome());
     }
     return(Redirect(Request.UrlReferrer?.ToString()));
 }
コード例 #3
0
 public async Task <IActionResult> ReassignFromList(
     int workflowId,
     [Bind(new[] {
     nameof(RequestForReassignmentViewModel.SuggestedReviewerId),
     nameof(RequestForReassignmentViewModel.Comments),
     nameof(RequestForReassignmentViewModel.JustificationKey)
 }
           )]
     RequestForReassignmentViewModel requestForReassignmentViewModel)
 {
     if (ModelState.IsValid)
     {
         return(await HandleReassignmentRequestAsync(workflowId, requestForReassignmentViewModel) ?? RedirectToHome());
     }
     return(Redirect(Request.Headers["Referer"].ToString()));
 }
コード例 #4
0
        public async Task <ActionResult> Reassign(
            int workflowId,
            [Bind(Include =
                      nameof(RequestForReassignmentViewModel.SuggestedReviewerId) + "," +
                      nameof(RequestForReassignmentViewModel.Comments) + "," +
                      nameof(RequestForReassignmentViewModel.JustificationKey)
                  )]
            RequestForReassignmentViewModel requestForReassignmentViewModel)
        {
            if (ModelState.IsValid)
            {
                return(await HandleReassignmentRequestAsync(workflowId, requestForReassignmentViewModel) ?? RedirectToHome());
            }

            return(PartialView("~/Views/Ulo/Details/Workflow/RequestForReassignments/_Details.cshtml", requestForReassignmentViewModel));
        }
コード例 #5
0
        private async Task <IActionResult> HandleReassignmentRequestAsync(int workflowId, RequestForReassignmentViewModel m)
        {
            var wf = await FindWorkflowAsync(workflowId, false);

            if (wf == null)
            {
                return(NotFound());
            }

            var canHandleReassignment = true;

            User.HasPermission(ApplicationPermissionNames.CanReassign);
            if (!canHandleReassignment && m.SuggestedReviewerId == CurrentUserId)
            {
                canHandleReassignment = UserHelpers.GetUserGroupRegions(User, wf.OwnerUserId).Contains(wf.TargetUlo.RegionId);
            }
            var rfr = new RequestForReassignment
            {
                UnliqudatedWorkflowQuestions = new UnliqudatedObjectsWorkflowQuestion
                {
                    JustificationKey   = m.JustificationKey,
                    UserId             = CurrentUserId,
                    Answer             = UnliqudatedObjectsWorkflowQuestion.CommonAnswers.Reassignment,
                    WorkflowId         = workflowId,
                    Comments           = m.Comments,
                    WorkflowRowVersion = wf.WorkflowRowVersion,
                    CreatedAtUtc       = DateTime.UtcNow
                },
                WorkflowId          = workflowId,
                SuggestedReviewerId = m.SuggestedReviewerId,
                IsActive            = !canHandleReassignment
            };

            DB.RequestForReassignment.Add(rfr);
            try
            {
                if (!canHandleReassignment && wf.OwnerUserId == CurrentUserId)
                {
                    wf.OwnerUserId = UserHelpers.ReassignGroupUserId;
                }
                else if (canHandleReassignment)
                {
                    return(await Manager.ReassignAsync(wf, m.SuggestedReviewerId, UloController.ActionNames.MyTasks));
                }
                return(null);
            }
            finally
            {
                await DB.SaveChangesAsync();
            }
        }