using System.Web.Mvc; using System.Web.UI; using Neo.Afx.Security; using System; using System.Configuration; using System.Web.Profile; using System.Linq; using Neo.LegitimateLicences.Common; using System.Web.Security; using Neo.Afx.Services.Audits; using Neo.LegitimateLicences.Common.ViewModels; using Neo.LegitimateLicences.Common.Helpers; using Neo.Afx.Services.Workflows; using Neo.LegitimateLicences.Web.Models.Afx; using Neo.Afx.Services.Workflows.Entities; using Neo.Afx.Services.Documents; namespace Neo.LegitimateLicences.Web.Controllers { public partial class AfxController { #region Documents public ActionResult Documents(long entityID, long itemID) { var isNew = WebHelper.ItemID == -1; var itemId = WebHelper.ItemID; var taskId = WebHelper.TaskID; #region Get active user task Vw_WorkflowInstanceTask activeUserTask = null; if (taskId != -1) { activeUserTask = WorkflowHelper.GetActiveUserUserTaskByID(entityID, itemId, taskId, Profile.UserID); } if (activeUserTask == null) { activeUserTask = WorkflowHelper.GetActiveUserTask(Profile.UserID, entityID, itemId); } #endregion var model = new AfxDocumentsModel() { DocumentUploadEnabled = false, DocumentStoreLocationID = 3, //todo - make this configurable EntityID = entityID, UserEmail = Profile.Email, Ui = new Afx.ViewModels.WorkflowConsoleUIProperties() { canSave = ( activeUserTask != null && activeUserTask.WorkflowTemplateStepTypeID == (short)WorkflowTemplateStepTypeEnum.DataCapture && ( (entityID == 1000 /*APP*/ && activeUserTask.WorkflowTemplateStepNumber == 1) || (entityID == 1014 /*LIR*/ && activeUserTask.WorkflowTemplateStepNumber == 2) ) ) } }; var db = new WorkflowsDatabase(); var instance = db.GetWorkflowInstanceView(entityID, itemID); var at = WorkflowHelper.GetActiveUserTask(Profile.UserID, entityID, itemID); model.DocumentUploadEnabled = (at != null && at.WorkflowTemplateStepTypeID == 2); var documents = db.GetWorkflowInstanceDocuments(instance.WorkflowInstanceID, Profile.UserID); var additionalDocuments = documents.Where(a => a.IsDocumentTitleEditable).OrderBy(a => a.Title).ToList(); var entityDocuments = documents.Where(a => !a.IsDocumentTitleEditable).OrderBy(a => a.Title).ToList(); //hack to move additional documents to the bottom of the list model.Documents = new System.Collections.Generic.List(); model.Documents.AddRange(entityDocuments); model.Documents.AddRange(additionalDocuments); if (instance != null) { ViewBag.Title = "Documents for " + instance.ReferenceNumber + ", " + instance.WorkflowInstanceDescription; model.RequiredDocumentsTitle = "Required Documents for " + instance.ReferenceNumber + ", " + instance.WorkflowInstanceDescription; model.OptionalDocumentsTitle = "Optional Documents for " + instance.ReferenceNumber + ", " + instance.WorkflowInstanceDescription; } else { ViewBag.Title = "Documents"; model.RequiredDocumentsTitle = "Required Documents"; model.OptionalDocumentsTitle = "Optional Documents"; } return View("~/Views/Shared/Afx/Documents/Documents.cshtml", model); } #endregion #region DocumentsScan public ActionResult DocumentScan(long entityID, long itemID, long documentTypeID, long documentStoreLocationID, long workflowInstanceDocumentID) { var wdDatabase = new WorkflowsDatabase(); var documentsDatabase = new DocumentsDatabase(); var instance = wdDatabase.GetWorkflowInstanceView(entityID, itemID); var document = wdDatabase.GetWorkflowInstanceDocuments(instance.WorkflowInstanceID, Profile.UserID).Where(a => a.WorkflowInstanceDocumentID == workflowInstanceDocumentID).FirstOrDefault(); string documentName = document.DocumentDescription; var model = new AfxDocumentScanModel() { UserID = Profile.UserID, UserRoles = Profile.Roles, DocumentTypeID = documentTypeID, DocumentStoreLocationID = documentStoreLocationID, WorkflowInstanceDocumentID = workflowInstanceDocumentID, DocumentName = documentName }; return View("~/Views/Shared/Afx/Documents/DocumentScan.cshtml", model); } #endregion #region WorkflowInstanceDocumentUpdateDocumentID [HttpPost] public JsonResult WorkflowInstanceDocumentUpdateDocumentID(long workflowInstanceDocumentID, long documentID) { var success = true; var message = ""; try { var db = new WorkflowsDatabase(); db.UpdateWorkflowInstanceDocumentID(workflowInstanceDocumentID, documentID, Profile.UserID); } catch (Exception ex) { success = false; message = ex.Message; } return Json(new { success, message }); } #endregion #region UpdateDocumentIDOnEntity [HttpPost] public JsonResult UpdateDocumentIDOnEntity(long documentID, int entityID, long itemID, string relatedFieldKey) { var success = true; var message = ""; try { var documentDb = new DocumentsDatabase(); documentDb.UpdateDocumentIDOnEntity(documentID, entityID, itemID, relatedFieldKey, Profile.UserID); } catch (Exception ex) { success = false; message = ex.Message; } return Json(new { success, message }); } #endregion #region WorkflowInstanceDocumentUpdateExpiryDate [HttpPost] public JsonResult WorkflowInstanceDocumentUpdateExpiryDate(long workflowInstanceDocumentID, DateTime expiryDate) { var success = true; var message = ""; try { var db = new WorkflowsDatabase(); db.UpdateWorkflowInstanceDocumentExpiryDate(workflowInstanceDocumentID, expiryDate, Profile.UserID); } catch (Exception ex) { success = false; message = ex.Message; } return Json(new { success, message }); } #endregion #region WorkflowInstanceDocumentUpdateTitle [HttpPost] public JsonResult WorkflowInstanceDocumentUpdateTitle(long workflowInstanceDocumentID, string documentTitle) { var success = true; var message = ""; try { var db = new WorkflowsDatabase(); db.UpdateWorkflowInstanceDocumentTitle(workflowInstanceDocumentID, documentTitle, Profile.UserID); } catch (Exception ex) { success = false; message = ex.Message; } return Json(new { success, message }); } #endregion #region EntityDocuments public ActionResult EntityDocuments(int entityID, long itemID) { ////if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), SecurableEnum.VerifiedEmployeeModule_Console_ViewConsole)) ////{ //// throw new Exception("Security error"); ////} var database = new DocumentsDatabase(); var model = new AfxEntityDocumentsModel { //VerifiedEmployee = employee, Documents = database.GetEntityDocuments(entityID, itemID), entityID = entityID, itemID = itemID, DocumentStoreLocationID = 3 //, //todo - make this configurable //UserIsEmployeeSelfServiceImpersonator = (Profile.Email.ToLower() == "employee@mailinator.com") }; //model.BrowserTitle = (model.VerifiedEmployee.EmployeeID == -1) ? "New employee" : model.VerifiedEmployee.FullName; ViewBag.Controller = "Documents"; ViewBag.Page = "Documents"; return View("~/Views/Shared/Afx/Documents/EntityDocuments.cshtml", model); } #endregion } }