using System; using System.Web.Mvc; using Neo.LegitimateLicences.Data.Models; using System.Linq; using Neo.LegitimateLicences.Common; using Neo.Afx.Security; using System.Configuration; using Neo.Afx.Services.Workflows; using Neo.Afx.Services.Documents; using System.Collections.Generic; namespace Neo.LegitimateLicences.VerificationConsole { public partial class VerificationConsoleController : Neo.LegitimateLicences.Common.ControllerBase { private const long _documentStoreLocationID = 3; //todo - make configurable #region Console public ActionResult Console(long entityID, long itemID, long workflowInstanceID, long workflowInstanceTaskID) { return VerificationConsole(entityID, itemID, workflowInstanceID, workflowInstanceTaskID); } public ActionResult VerificationConsole(long entityID, long itemID, long workflowInstanceID, long workflowInstanceTaskID) { var workflowsDatabase = new WorkflowsDatabase(); var documentDatabase = new DocumentsDatabase(); var database = new LegitimateDatabase(); #region ensure that task is assigned to current user var at = WorkflowHelper.GetActiveTask(entityID, itemID); if (at == null) { throw new Exception("No active task found for this application"); } if (at.WorkflowTemplateStepTypeID != 5 /*document verification*/) { throw new Exception("The task is not in a verification task"); } if (!SecurityHelper.UserHasAccessToSecurable(((UserProfile)Profile).Securables.ToList(), Neo.LegitimateLicences.Common.SecurableEnum.AfxWorkflowDocumentVerification)) { throw new Exception("The user does not have access to workflow document verification."); } if (at.AssignedToID != Profile.UserID) { var user = ConfigurationManager.AppSettings["SystemUsername"].ToString(); var reassign = workflowsDatabase.ReAssignWorkflowInstanceTask(at.WorkflowInstanceTaskID, Profile.UserID, "", user); if (String.IsNullOrEmpty(reassign)) { workflowInstanceTaskID = WorkflowHelper.GetActiveTask(entityID, itemID).WorkflowInstanceTaskID; } else { throw new Exception("Error re-assiging verification task: " + reassign); } } else if (at.AssignedToID == Profile.UserID) { workflowInstanceTaskID = at.WorkflowInstanceTaskID; } else { throw new Exception("The task is currently assigned to " + at.AssignedToName + ". Please refresh the verification list"); } #endregion var documents = documentDatabase.GetDocumentsAwaitingVerification(entityID, itemID); var appDocuments = database.GetAppDocumentsAwaitingVerification(entityID, itemID); if (documents.Count() == 0 && appDocuments.Count() == 0) { throw new Exception("The request does not have any documents to verify."); } List documentsAwaitingVerification = new List(); foreach (var doc in documents) { Pr_AppDocumentsAwaitingVerificationGet_Result d = new Pr_AppDocumentsAwaitingVerificationGet_Result { EntityID = entityID, ItemID = itemID, DocumentID = doc.DocumentID, DocumentTypeID = doc.DocumentTypeID, Description = doc.Description, DocumentVerificationStatusID = doc.DocumentVerificationStatusID, DocumentDescription = doc.DocumentDescription }; documentsAwaitingVerification.Add(d); } foreach (var doc in appDocuments) { Pr_AppDocumentsAwaitingVerificationGet_Result d = new Pr_AppDocumentsAwaitingVerificationGet_Result { EntityID = entityID, ItemID = itemID, DocumentID = doc.DocumentID, DocumentTypeID = doc.DocumentTypeID, Description = doc.Description, DocumentVerificationStatusID = doc.DocumentVerificationStatusID, DocumentDescription = doc.DocumentDescription, ApplicationLicenceID = doc.ApplicationLicenceID, VIN = doc.VIN }; documentsAwaitingVerification.Add(d); } var model = new VerificationConsoleModel { WorkflowInstanceTaskID = workflowInstanceTaskID, Documents = documentsAwaitingVerification, ItemID = itemID, EntityID = entityID, AppOrLir = "APP" }; return View("Console", model); } #endregion } }