using System.Linq; using System.Web.Mvc; using System; using Neo.LegitimateLicences.Common; using Neo.LegitimateLicences.Common.Helpers; using Neo.Afx.Services.Workflows; using Neo.LegitimateLicences.Web.Models.Afx; using System.Collections.Generic; namespace Neo.LegitimateLicences.Web.Controllers { public partial class AfxController { #region Submit public ActionResult Submit(long entityID, long itemID, long? taskID) { return View("~/Views/Shared/Afx/Actions/Submit.cshtml", GetWorkflowTaskActionModel("Submit", entityID, itemID, taskID)); } #endregion #region Approve public ActionResult Approve(long entityID, long itemID, long? taskID) { return View("~/Views/Shared/Afx/Actions/Approve.cshtml", GetWorkflowTaskActionModel("Approve", entityID, itemID, taskID)); } #endregion #region Reject public ActionResult Reject(long entityID, long itemID, long? taskID) { return View("~/Views/Shared/Afx/Actions/Reject.cshtml", GetWorkflowTaskActionModel("Reject", entityID, itemID, taskID)); } #endregion #region Cancel public ActionResult Cancel(long entityID, long itemID, long? taskID) { return View("~/Views/Shared/Afx/Actions/Cancel.cshtml", GetWorkflowTaskActionModel("Cancel", entityID, itemID, taskID)); } #endregion #region RequestChange public ActionResult RequestChange(long entityID, long itemID, long? taskID) { return View("~/Views/Shared/Afx/Actions/RequestChange.cshtml", GetWorkflowTaskActionModel("Request a Change", entityID, itemID, taskID)); } #endregion #region Escalate public ActionResult Escalate(long entityID, long itemID, long? taskID) { return View("~/Views/Shared/Afx/Actions/Escalate.cshtml", GetWorkflowTaskActionModel("Escalate", entityID, itemID, taskID)); } #endregion #region ReturnEscalation public ActionResult ReturnEscalation(long entityID, long itemID, long? taskID) { return View("~/Views/Shared/Afx/Actions/ReturnEscalation.cshtml", GetWorkflowTaskActionModel("ReturnEscalation", entityID, itemID, taskID)); } #endregion #region GetWorkflowTaskActionModel protected AfxTaskActionModel GetWorkflowTaskActionModel(string action, long entityID, long itemID, long? taskID) { var activeTask = (!taskID.HasValue || taskID == -1) ? WorkflowHelper.GetActiveUserTask(Profile.UserID, entityID, itemID) : WorkflowHelper.GetActiveUserUserTaskByID(entityID, itemID, taskID.Value, Profile.UserID); var db = new WorkflowsDatabase(); var submitToNextStepChecks = db.PerformCanSubmitToNextStepChecks(activeTask.WorkflowInstanceID, activeTask.WorkflowInstanceTaskID, Profile.UserID); var role = Profile.Roles.FirstOrDefault(); var isComplete = submitToNextStepChecks.All(o => o.IsSuccessfull); var canSubmit = false; var canApproveReject = false; var canRequestCorrection = false; var canCancel = false; var canEscalate = false; var canReturnEscalation = false; #region CanSubmit if (!submitToNextStepChecks.Any(o => !o.IsSuccessfull && o.RequiredForSubmitting) && activeTask != null) { canSubmit = activeTask.WorkflowTemplateStepTypeID == 2 /*data capture*/ || activeTask.WorkflowTemplateStepTypeID == 5 /*document verification*/; canApproveReject = activeTask.WorkflowTemplateStepTypeID == 1; /*approval*/ } #endregion #region CanRequestCorrection //Ensure that // that the user does have a task assigned // that the workflow is not in step 1 if (activeTask != null && activeTask.WorkflowTemplateStepNumber > 1) { canRequestCorrection = true; } #endregion #region CanCancel //Ensure that // that the user does have a task assigned // that the workflow is not in step 1 if (activeTask != null) { canCancel = true; } #endregion #region CanEscalate List escalateToUsers = WorkflowHelper.GetEscalateToUsers(activeTask.WorkflowInstanceTaskID, true).ToList(); if (escalateToUsers == null) { escalateToUsers = new List(); } else { escalateToUsers = escalateToUsers.Where(a => a.UserID != Profile.UserID).ToList(); } //Ensure that // that the user does have a task assigned // that the workflow is not in step 1 if (activeTask != null && escalateToUsers.Any()) { canEscalate = true; } #endregion #region CanReturnEscalation if (activeTask != null) { if (activeTask.EscalatedFromID != null) { canReturnEscalation = true; } } #endregion var model = new AfxTaskActionModel { Outcomes = submitToNextStepChecks.Cast().ToList(), WorkflowInstanceTaskID = (activeTask == null ? -1 : activeTask.WorkflowInstanceTaskID), IsComplete = isComplete, WorkflowID = activeTask.WorkflowID, CanSubmit = canSubmit, CanApproveReject = canApproveReject, CanRequestCorrection = canRequestCorrection, CanCancel = canCancel, CanViewComments = true, CanEscalate = canEscalate, CanReturnEscalation = canReturnEscalation, EscalateToUsers = escalateToUsers }; var wd = new WorkflowsDatabase(); var instance = wd.GetWorkflowInstanceView(model.EntityID, model.ItemID); if (canRequestCorrection) { model.RequestCorrectionSteps = wd.GetWorkflowInstanceTaskStepsForCorrection(activeTask.WorkflowInstanceTaskID); } if (instance != null) { ViewBag.Title = action + " request " + instance.ReferenceNumber + ", " + instance.WorkflowInstanceDescription; model.WorkflowInstanceID = instance.WorkflowInstanceID; } else { ViewBag.Title = action + " request "; } return model; } #endregion } }