using System.Collections.Generic; using System.Linq; using System.Web.Mvc; using Neo.Legitimate.VerificationConsole.Models; using Neo.Legitimate.Data.Models; using Pilotfish.Afx.Mvc; using Pilotfish.Afx.Services.Forms; using Pilotfish.Afx.Services.Forms.Entities; using Neo.Legitimate.Data; using System; using Pilotfish.Afx.Services.Comments; namespace Neo.Legitimate.VerificationConsole.Controllers { [Authorize] public partial class VerificationConsoleController : Neo.Legitimate.Common.ControllerBase { private const int _auditEntityID = 1018; #region Action Results #region VerificationAudit public ActionResult VerificationAudit(long applicationAuditID) { var database = new LegitimateDatabase(); var formDatabase = new FormsDatabase(); var commentDatabase = new CommentsDatabase(); var applicationAudit = database.GetApplicationAudit(applicationAuditID); var application = database.GetApplicationRequestDetail_ViewOnly(applicationAudit.ApplicationRequestDetailID); var canAction = !applicationAudit.AuditCompletedDate.HasValue && applicationAudit.AssignedToID == Profile.UserID; var documents = database.GetApplicationDocuments(applicationAudit.ApplicationRequestDetailID).OrderBy(a => a.Value).ToList(); var allChecklistTemplates = formDatabase.GetChecklistTemplates(_auditEntityID, -1, (short)ChecklistTemplateStatusEnum.Active); var checklistTemplates = ChecklistHelpers.CleanChecklistTemplate(allChecklistTemplates, application.ApplicationRequestTypeID, (short)application.ModeID, application.IsRenewal, application.IsLtpsConversion.Value, _applicationWorkflowID).OrderBy(a => a.ChecklistTitle).ToList(); var checklistResults = formDatabase.GetChecklistResults(_auditEntityID, applicationAuditID).ToList(); if (checklistResults == null || checklistResults.Count == 0) { foreach (var ctq in formDatabase.GetChecklistTemplateQuestionsAll(_auditEntityID, -1)) { checklistResults.Add(new ChecklistResult() { EntityID = _auditEntityID, ItemID = applicationAuditID, ChecklistTemplateQuestionID = ctq.ChecklistTemplateQuestionID, ChecklistTemplateQuestion = ctq }); } } var cleanedChecklistTemplates = new List(); #region Limit document checks to uploaded documents only if (documents != null && checklistTemplates != null) { foreach (var checklistTemplate in checklistTemplates) { foreach (var doc in documents) { if (doc.Value == checklistTemplate.ChecklistTitle) { cleanedChecklistTemplates.Add(checklistTemplate); } } } } #endregion var model = new AuditModel { Comments = commentDatabase.GetComments(_applicationEntityID, applicationAudit.ApplicationRequestDetailID), Documents = documents, DocumentChecks = cleanedChecklistTemplates, FormChecklistResults = checklistResults, Application = application, CanAction = canAction, entityID = _auditEntityID, itemID = applicationAuditID }; ViewBag.Controller = "Audit Details"; ViewBag.Page = "Audit Details"; return View("Audit", model); } #endregion #endregion #region JSON endpoints // All JSON endpoints require [HttpPost] to prevent JSON hijacking. // With [HttpPost], returning arrays is allowed. // See http://haacked.com/archive/2009/06/25/json-hijacking.aspx [HttpPost] public JsonResult SaveAuditResults(List documentChecks, long itemID) { var database = new FormsDatabase(); database.UpdateChecklistResults(documentChecks, itemID); return Json(true, JsonSerializerOptions.None); } [HttpPost] public JsonResult CompleteAudit(long applicationAuditID) { var database = new LegitimateDatabase(); var errorMessage = ""; var result = true; try { database.CompleteApplicationAudit(applicationAuditID, Profile.UserID); } catch (Exception ex) { result = false; errorMessage = ex.Message; } var results = new { Success = result, ErrorMessage = errorMessage }; return Json(results, JsonSerializerOptions.None); } #endregion } }