using Neo.Afx.Mvc;
using Neo.Afx.Services.Correspondence;
using Neo.Afx.Services.Integration;
using Neo.Afx.Services.Reports;
using Neo.Afx.Services.Workflows;
using Neo.Afx.ViewModels;
using Neo.LegitimateLicences.ApplicationRequest;
using Neo.LegitimateLicences.ApplicationRequest.Models.Database;
using Neo.LegitimateLicences.Common;
using Neo.LegitimateLicences.Data.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using AdjudicationDetail = Neo.LegitimateLicences.Data.Models.AdjudicationDetail;
using Neo.Afx.Common;
namespace Neo.LegitimateLicences.AdjudicationConsole
{
public partial class AdjudicationConsoleController : Neo.LegitimateLicences.Common.ControllerBase
{
private const long ADJUDICATION_ENTITY_ID = 1007;
private const long DOCUMENT_STORE_LOCATION_ID = 3;
#region Console
///
/// Load the main Adjudication Console
///
///
///
///
public ActionResult Console(long adjudicationDetailID, short? adjudicationTypeID)
{
if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), SecurableEnum.ApplicationsModule_Adjudication))
{
return RedirectToAction("ShowError", "Error", new { msg = "Security error" });
}
var adjudicationType = (short)((adjudicationTypeID.HasValue) ? adjudicationTypeID.Value : 0);
var database = new LegitimateDatabase();
var model = new ConsoleModel()
{
AdjudicationDetailID = adjudicationDetailID,
AdjudicationDetail = database.GetAdjudicationDetail(adjudicationDetailID, adjudicationType, Profile.OfficeLocationID.Value, Profile.UserID)
};
ViewBag.Controller = "Adjudication Details";
ViewBag.Page = "Adjudication Details";
return View("Console", model);
}
#endregion
#region Default
///
/// Load the main Adjudication details view
///
///
///
///
public ActionResult Default(long adjudicationDetailID, short? adjudicationTypeID)
{
#region Securable Check
if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), SecurableEnum.ApplicationsModule_Adjudication))
{
return RedirectToAction("ShowError", "Error", new { msg = "Security error" });
}
#endregion
var database = new LegitimateDatabase();
var adjudicationType = (short)((adjudicationTypeID.HasValue) ? adjudicationTypeID.Value : 0);
var model = new DefaultModel
{
AdjudicationDetail = database.GetAdjudicationDetail(adjudicationDetailID, adjudicationType, Profile.OfficeLocationID.Value, Profile.UserID),
OfficeLocations = database.GetOfficeLocations(Profile.UserID),
AdjudicationTypes = database.GetAdjudicationTypes()
};
model.IsAdjudicationDetailsLinkVisible = true;
model.IsPanelLinkVisible = model.AdjudicationDetail.AdjudicationDetailID > 0 && model.AdjudicationDetail.AdjudicationDetailStatusID != 1;
model.IsApplicationsLinkVisible = model.AdjudicationDetail.AdjudicationDetailID > 0;
ViewBag.Controller = "Adjudication Details";
ViewBag.Page = "Adjudication Details";
return View("Default", model);
}
#endregion
#region Notifications
///
/// Load the Adjudication Notifications view
///
///
///
///
public ActionResult Notifications(long adjudicationDetailID, short? adjudicationTypeID)
{
#region Securable Check
if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), SecurableEnum.ApplicationsModule_Adjudication))
{
return RedirectToAction("ShowError", "Error", new { msg = "Security error" });
}
#endregion
var database = new LegitimateDatabase();
var adjudicationType = (short)((adjudicationTypeID.HasValue) ? adjudicationTypeID.Value : 0);
var model = new DefaultModel
{
AdjudicationDetail = database.GetAdjudicationDetail(adjudicationDetailID, adjudicationType, Profile.OfficeLocationID.Value, Profile.UserID),
OfficeLocationDocumentTemplates = database.GetOfficeLocationSetupDocumentTemplate(Profile.OfficeLocationID.Value)
};
ViewBag.Controller = "Adjudication Notifications";
ViewBag.Page = "Adjudication Notifications";
return View("Notifications", model);
}
#endregion
#region AdjudicationDecisionCapture
///
/// Capture an adjudication decision
///
///
///
///
public ActionResult AdjudicationDecisionCapture(long applicationAdjudicationID, short adjudicationDecisionID)
{
var database = new LegitimateDatabase();
var appDb = new ApplicationDatabase();
var applicationAdjudication = database.GetApplicationAdjudication(applicationAdjudicationID, Profile.UserID);
var application = appDb.GetApplicationView(applicationAdjudication.ApplicationDetailID, Profile.UserID);
bool IsAuthorityRequest = false;
var model = new AdjudicationDecisionCaptureModel
{
AdjudicationDetail = database.GetAdjudicationDetail(applicationAdjudication.AdjudicationDetailID, -1, Profile.OfficeLocationID.Value, Profile.UserID),
AdjudicationDecisionID = adjudicationDecisionID,
ApplicationDetail = application,
ApplicationAdjudicationID = applicationAdjudicationID,
LicenceDurations = database.GetLicenceDurations(Profile.UserID),
entityID = ADJUDICATION_ENTITY_ID,
itemID = applicationAdjudication.AdjudicationDetailID,
DocumentStoreLocationID = DOCUMENT_STORE_LOCATION_ID,
IsAuthorityRequest = IsAuthorityRequest
};
ViewBag.Controller = "AdjudicationDecisionCapture";
ViewBag.Page = "AdjudicationDecisionCapture";
return View("AdjudicationDecisionCapture", model);
}
#endregion
#region Save
///
/// Save Adjudication Details
///
///
///
[HttpPost]
public JsonNetResult Save(AdjudicationDetail value)
{
try
{
var database = new LegitimateDatabase();
var errorMessage = "";
var currentAdjudication = database.SaveAdjudicationDetail(value, Profile.UserID, out errorMessage);
var results = new
{
AdjudicationDetail = currentAdjudication,
ErrorMessage = errorMessage
};
return new JsonNetResult()
{
Data = new JsonBaseResult()
{
Success = true,
Error = "",
ErrorCode = "",
Result = new
{
AdjudicationDetail = currentAdjudication,
ErrorMessage = errorMessage
}
}
};
}
catch (Exception ex)
{
#region Error Handling
#region Error Additional Data
Dictionary additionalData = new Dictionary();
additionalData.Add("value", value);
#endregion
var errorMessage = ErrorHelper.ProcessError(ex, "AdjudicationConsole", "Save", additionalData);
#endregion
return new JsonNetResult()
{
Data = new JsonBaseResult()
{
Success = false,
ErrorCode = "ERROR",
Error = errorMessage
}
};
}
}
#endregion
#region FinaliseAndEmailAgenda
///
/// Finalise adjudication and email agenda
///
///
///
///
///
[HttpPost]
public JsonResult FinaliseAndEmailAgenda(long adjudicationDetailID, string comments, short adjudicationTypeID)
{
var database = new LegitimateDatabase();
var reportDatabase = new ReportDatabase();
var correspondenceDatabase = new CorrespondenceDatabase();
var errorMessage = "";
var success = database.AdjudicationStatusUpdate(adjudicationDetailID, (short)Common.AdjudicationDetailStatusEnum.AwaitingPanelMembers, Profile.UserID, comments, out errorMessage);
var receiversData = database.GetAdjudicationAgendaEmails();
var receiversEmails = "";
var adjudicationDetail = database.GetAdjudicationDetail(adjudicationDetailID, adjudicationTypeID, Profile.OfficeLocationID.Value, Profile.UserID);
string error;
var reportDefinitionID = (short)ReportDefinitionEnum.AdjudicationAgenda;
var reportDefinition = reportDatabase.GetReportDefinitionWithServer(reportDefinitionID);
var reportFormat = "PDF";
var reportParameters = new List>();
reportParameters.Add(new KeyValuePair("UserID", Profile.UserID.ToString()));
reportParameters.Add(new KeyValuePair("AdjudicationDetailID", adjudicationDetailID.ToString()));
var content = ReportGenerator.Render(reportDefinition, reportFormat, reportParameters, out error);
if (success == true)
{
foreach (var i in receiversData)
{
receiversEmails = i.ToString();
}
List receiversEmailsList = receiversEmails.Split(',').ToList();
foreach (var a in receiversEmailsList)
{
var messageid = correspondenceDatabase.Create(9, 0, 1, a, null, null, "Adjudication Agenda for adjudication to be held on " + adjudicationDetail.MeetingDate.Day + "/" + adjudicationDetail.MeetingDate.Month + "/" + adjudicationDetail.MeetingDate.Year + " at " + adjudicationDetail.MeetingTime, "Please Find attached the adjudication agenda", false);
correspondenceDatabase.CreateAttachment(messageid.Key, 1/*System*/, content, "application/pdf", 10, "AdjudicationAgenda.pdf", "AdjudicationAgenda");
}
}
var results = new
{
Success = success,
ErrorMessage = errorMessage
};
return Json(results, JsonSerializerOptions.None);
}
#endregion
#region GetPanelMembers
///
/// Get Panel Members for the adjudication
///
///
///
[HttpPost]
public JsonResult GetPanelMembers(long adjudicationDetailID)
{
var database = new LegitimateDatabase();
return Json(database.GetAdjudicationPanelMembers(adjudicationDetailID), JsonSerializerOptions.EscapeBackSlash | JsonSerializerOptions.FormatDateTime);
}
#endregion
#region CommitAdjudicationDecision
///
/// Commit a single Adjudication Decision per member
///
///
///
///
///
///
///
[HttpPost]
public JsonResult CommitAdjudicationDecision(long applicationAdjudicationID, short decisionID, int? licenceDurationID, DateTime? licenceExpiryDate, string comment)
{
if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), SecurableEnum.ApplicationsModule_ApplicationRequest_Adjudication_CaptureDecision))
{
throw new Exception("Security error");
}
var database = new LegitimateDatabase();
var errorMessage = "";
database.CommitAdjudicationDecision(applicationAdjudicationID, decisionID, licenceDurationID, licenceExpiryDate, comment, Profile.UserID, out errorMessage);
if (String.IsNullOrEmpty(errorMessage))
{
return Json(new { Success = true, ErrorMessage = "" }, JsonSerializerOptions.None);
}
else
{
return Json(new { Success = false, ErrorMessage = errorMessage }, JsonSerializerOptions.None);
}
}
#endregion
#region AddToAdjudication
///
/// Restart Adjudication Decisions
///
///
///
[HttpPost]
public JsonResult AddToAdjudication(long applicationDetailID)
{
if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), SecurableEnum.ApplicationsModule_ApplicationRequest_Adjudication_Addtoadjudication))
{
throw new Exception("Security error");
}
var database = new LegitimateDatabase();
var errorMessage = "";
var success = database.AddApplicationsToAdjudication(applicationDetailID.ToString(), Profile.OfficeLocationID.Value, (long)Profile.UserID, out errorMessage);
if (String.IsNullOrEmpty(errorMessage))
{
return Json(new { Success = true, ErrorMessage = "" }, JsonSerializerOptions.None);
}
else
{
return Json(new { Success = false, ErrorMessage = errorMessage }, JsonSerializerOptions.None);
}
}
#endregion
#region RestartAdjudicationDecisions
///
/// Restart Adjudication Decisions
///
///
///
[HttpPost]
public JsonResult RestartAdjudicationDecisions(long applicationAdjudicationID)
{
if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), SecurableEnum.ApplicationsModule_ApplicationRequest_Adjudication_RestartDecisions))
{
throw new Exception("Security error");
}
var database = new LegitimateDatabase();
var errorMessage = "";
var success = database.RestartAdjudicationDecisions(applicationAdjudicationID, (long)Profile.UserID, out errorMessage);
if (String.IsNullOrEmpty(errorMessage))
{
return Json(new { Success = true, ErrorMessage = "" }, JsonSerializerOptions.None);
}
else
{
return Json(new { Success = false, ErrorMessage = errorMessage }, JsonSerializerOptions.None);
}
}
#endregion
#region BypassAdjudication
///
/// Bypass Adjudication
///
///
///
///
///
///
///
///
[HttpPost]
public JsonResult BypassAdjudication(long applicationAdjudicationID, short decisionID, int? licenceDurationID, DateTime? licenceExpiryDate, DateTime actualAdjudicationDate, string comment)
{
if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), SecurableEnum.ApplicationsModule_ApplicationRequest_Adjudication_BypassAdjudication))
{
throw new Exception("Security error");
}
var database = new LegitimateDatabase();
var errorMessage = "";
database.BypassAdjudication(applicationAdjudicationID, decisionID, licenceDurationID, licenceExpiryDate, actualAdjudicationDate, comment, Profile.UserID, out errorMessage);
if (String.IsNullOrEmpty(errorMessage))
{
return Json(new { Success = true, ErrorMessage = "" }, JsonSerializerOptions.None);
}
else
{
return Json(new { Success = false, ErrorMessage = errorMessage }, JsonSerializerOptions.None);
}
}
#endregion
#region GetLookups
public List GetLookupsForFormGetLookupsFormView()
{
var lookups = new List();
var integrationStore = new SqlIntegrationStore();
try
{
integrationStore.Open();
lookups.Add(new LookupList("NewOLIDTypes", integrationStore.GetDataEntities("IDTypes", string.Empty).OrderBy(a => a.Title)));
lookups.Add(new LookupList("NewOLIDTypesIndividual", integrationStore.GetDataEntities("IDTypes", "IndvidualTypesOnly=1").OrderBy(a => a.Title)));
lookups.Add(new LookupList("NewOLModes", integrationStore.GetDataEntities("Modes", string.Empty).OrderBy(a => a.Title)));
lookups.Add(new LookupList("NewOLServiceTypes", integrationStore.GetDataEntities("ServiceTypes", string.Empty)));
lookups.Add(new LookupList("NewOLContractTypes", integrationStore.GetDataEntities("ContractTypes", string.Empty).OrderBy(a => a.Title)));
lookups.Add(new LookupList("NewOLPaymentTypes", integrationStore.GetDataEntities("PaymentTypes", string.Empty).OrderBy(a => a.Title)));
lookups.Add(new LookupList("NewOLVehicleTypes", integrationStore.GetDataEntities("VehicleTypes", string.Empty).OrderBy(a => a.Title)));
lookups.Add(new LookupList("NewOLBusinessTypes", integrationStore.GetDataEntities("BusinessTypes", string.Empty).OrderBy(a => a.Title)));
lookups.Add(new LookupList("NewOLCarryingCapacities", integrationStore.GetDataEntities("CarryingCapacities", string.Empty)));
lookups.Add(new LookupList("AdjudicationDecisions", integrationStore.GetDataEntities("Decisions", string.Empty).OrderBy(a => a.Title)));
lookups.Add(new LookupList("LicenceDurations", integrationStore.GetDataEntities("LicenceDurations", string.Empty)));
}
finally
{
integrationStore.Close();
}
return lookups;
}
public List GetLookupsForReferral()
{
var lookups = new List();
var integrationStore = new SqlIntegrationStore();
try
{
integrationStore.Open();
lookups.Add(new LookupList("ReferralTypes", integrationStore.GetDataEntities("ReferralTypes", string.Empty).OrderBy(a => a.Title)));
}
finally
{
integrationStore.Close();
}
return lookups;
}
#endregion
#region Panel Members Methods
#region Panel
///
/// Return Adjudication Panel members view
///
///
///
public ActionResult Panel(long adjudicationDetailID)
{
#region Securable Check
if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), SecurableEnum.ApplicationsModule_Adjudication))
{
return RedirectToAction("ShowError", "Error", new { msg = "Security error" });
}
#endregion
var database = new LegitimateDatabase();
var model = new PanelModel
{
AdjudicationDetail = database.GetAdjudicationDetail(adjudicationDetailID, -1, Profile.OfficeLocationID.Value, Profile.UserID),
};
if
(
model.AdjudicationDetail.AdjudicationDetailStatusID == (short)Neo.LegitimateLicences.Common.AdjudicationDetailStatusEnum.AwaitingPanelMembers
||
model.AdjudicationDetail.AdjudicationDetailStatusID == (short)Neo.LegitimateLicences.Common.AdjudicationDetailStatusEnum.AwaitingAdjudicationHearingDecisions
&&
(
SecurityHelper.UserHasRole(Profile.Roles, Neo.LegitimateLicences.Common.RoleEnum.ChairmanOfTheAdjudicationPanel) ||
SecurityHelper.UserHasRole(Profile.Roles, Neo.LegitimateLicences.Common.RoleEnum.AdjudicationPanelmember)
)
)
{
var error = "";
database.UpdateAttendance(model.AdjudicationDetail.AdjudicationDetailID, Profile.UserID, out error);
}
var panelMember = database.GetAdjudicationPanelMembers(adjudicationDetailID);
model.PanelMembers = panelMember.Where(a => !a.AddedAfterStart);
model.PanelMembersAddedAfterStart = panelMember.Where(a => a.AddedAfterStart);
ViewBag.Controller = "Panel";
ViewBag.Page = "Panel";
return View("Panel", model);
}
#endregion
#region RemovePanelMember
///
/// Remove Panel Member from Adjudication
///
///
///
///
[HttpPost]
public JsonNetResult RemovePanelMember(long adjudicationDetailID, long adjudicationPanelID)
{
try
{
var database = new LegitimateDatabase();
var errorMessage = "";
var success = database.RemoveAdjudicationPanelMember(adjudicationDetailID, adjudicationPanelID, Profile.UserID, out errorMessage);
if(!String.IsNullOrEmpty(errorMessage))
{
throw new Exception(errorMessage);
}
return new JsonNetResult()
{
Data = new JsonBaseResult()
{
Success = true,
Error = "",
ErrorCode = ""
}
};
}
catch (Exception ex)
{
#region Error Handling
#region Error Additional Data
Dictionary additionalData = new Dictionary();
additionalData.Add("adjudicationDetailID", adjudicationDetailID);
additionalData.Add("adjudicationPanelID", adjudicationPanelID);
#endregion
var errorMessage = ErrorHelper.ProcessError(ex, "AdjudicationConsole", "RemovePanelMember", additionalData);
#endregion
return new JsonNetResult()
{
Data = new JsonBaseResult()
{
Success = false,
ErrorCode = "ERROR",
Error = errorMessage
}
};
}
}
#endregion
#region ReplaceAdjudicationPanelMember
///
/// Replace a panel member on a Adjudication request
///
///
///
///
///
[HttpPost]
public JsonNetResult ReplaceAdjudicationPanelMember(long AdjudicationDetailID, long FromAdjudicationPanelID, long ToAdjudicationPanelID)
{
try
{
var database = new LegitimateDatabase();
var errorMessage = "";
var success = database.ReplaceAdjudicationPanelMember(AdjudicationDetailID, FromAdjudicationPanelID, ToAdjudicationPanelID, Profile.UserID, out errorMessage);
if (!String.IsNullOrEmpty(errorMessage))
{
throw new Exception(errorMessage);
}
return new JsonNetResult()
{
Data = new JsonBaseResult()
{
Success = true,
Error = "",
ErrorCode = ""
}
};
}
catch (Exception ex)
{
#region Error Handling
#region Error Additional Data
Dictionary additionalData = new Dictionary();
additionalData.Add("AdjudicationDetailID", AdjudicationDetailID);
additionalData.Add("FromAdjudicationPanelID", FromAdjudicationPanelID);
additionalData.Add("ToAdjudicationPanelID", ToAdjudicationPanelID);
#endregion
var errorMessage = ErrorHelper.ProcessError(ex, "AdjudicationConsole", "ReplaceAdjudicationPanelMember", additionalData);
#endregion
return new JsonNetResult()
{
Data = new JsonBaseResult()
{
Success = false,
ErrorCode = "ERROR",
Error = errorMessage
}
};
}
}
#endregion
#region StartAdjudication
///
/// Start Adjudication
///
///
///
///
[HttpPost]
public JsonNetResult StartAdjudication(long AdjudicationDetailID, long ChairmanID)
{
try
{
var database = new LegitimateDatabase();
var errorMessage = "";
var success = database.StartAdjudication(AdjudicationDetailID, ChairmanID, Profile.UserID, out errorMessage);
if (!String.IsNullOrEmpty(errorMessage))
{
throw new Exception(errorMessage);
}
return new JsonNetResult()
{
Data = new JsonBaseResult()
{
Success = true,
Error = "",
ErrorCode = ""
}
};
}
catch (Exception ex)
{
#region Error Handling
#region Error Additional Data
Dictionary additionalData = new Dictionary();
additionalData.Add("AdjudicationDetailID", AdjudicationDetailID);
additionalData.Add("ChairmanID", ChairmanID);
#endregion
var errorMessage = ErrorHelper.ProcessError(ex, "AdjudicationConsole", "StartAdjudication", additionalData);
#endregion
return new JsonNetResult()
{
Data = new JsonBaseResult()
{
Success = false,
ErrorCode = "ERROR",
Error = errorMessage
}
};
}
}
#endregion
#region PostponeAdjudication
///
/// Flag Adjudication as postponed
///
///
///
///
[HttpPost]
public JsonNetResult PostponeAdjudication(long AdjudicationDetailID, string Reason)
{
try
{
var database = new LegitimateDatabase();
var errorMessage = "";
var success = database.PostponeAdjudication(AdjudicationDetailID, Reason, Profile.UserID, out errorMessage);
if (!String.IsNullOrEmpty(errorMessage))
{
throw new Exception(errorMessage);
}
return new JsonNetResult()
{
Data = new JsonBaseResult()
{
Success = true,
Error = "",
ErrorCode = ""
}
};
}
catch (Exception ex)
{
#region Error Handling
#region Error Additional Data
Dictionary additionalData = new Dictionary();
additionalData.Add("AdjudicationDetailID", AdjudicationDetailID);
additionalData.Add("Reason", Reason);
#endregion
var errorMessage = ErrorHelper.ProcessError(ex, "AdjudicationConsole", "PostponeAdjudication", additionalData);
#endregion
return new JsonNetResult()
{
Data = new JsonBaseResult()
{
Success = false,
ErrorCode = "ERROR",
Error = errorMessage
}
};
}
}
#endregion
#endregion
#region Applications
#region Applications
///
/// Return a list of applications linked to a adjudication
///
///
///
public ActionResult Applications(long adjudicationDetailID)
{
var database = new LegitimateDatabase();
var model = new ApplicationsModel
{
AdjudicationDetail = database.GetAdjudicationDetail(adjudicationDetailID, -1, Profile.OfficeLocationID.Value, Profile.UserID),
Applications = database.GetApplicationsLinkedToAdjudication(adjudicationDetailID, Profile.UserID),
OfficeLocationSetupDocumentTemplate = database.GetOfficeLocationSetupDocumentTemplate(Profile.OfficeLocationID.Value)
};
ViewBag.Controller = "Applications";
ViewBag.Page = "Applications";
return View("Applications", model);
}
#endregion
#region ApplicationDetails
///
/// Returns a view with all of an applicants details, view functions on a single licence level
///
///
///
public ActionResult ApplicationDetails(long applicationAdjudicationID)
{
var database = new LegitimateDatabase();
var appDb = new ApplicationDatabase();
string parentApplicationNumber = "";
var applicationAdjudication = database.GetApplicationAdjudication(applicationAdjudicationID, Profile.UserID);
var application = appDb.GetAdjudicationApplicationLicences(applicationAdjudication.ApplicationDetailID, Profile.UserID);
#region Get Gazette Details
List gazetteDetails = appDb.GazetteApplicationsGet(application.ApplicationDetailID, Profile.UserID);
#endregion
#region Get parent application detail if split from a main application
if (application.CopiedFromApplicationDetailID != null)
{
application.Receipts = appDb.GetPaymentDetails(application.CopiedFromApplicationDetailID.Value, Profile.UserID);
if (application.Receipts == null)
{
application.Receipts = new List();
}
parentApplicationNumber = appDb.GetApplicationView(application.CopiedFromApplicationDetailID.Value, Profile.UserID).ApplicationNumber;
}
#endregion
#region limit to current licence
//todo optomize!
var licencesToRemove = new List();
foreach (var licence in application.Licences)
{
if (licence.ApplicationLicenceID != applicationAdjudication.ApplicationLicenceID)
{
licencesToRemove.Add(licence);
}
}
foreach (var licence in licencesToRemove)
{
application.Licences.Remove(licence);
}
foreach (var licence in application.Licences)
{
foreach (var route in licence.Routes)
{
route.RouteDescription = route.RouteDescription.Replace(Environment.NewLine, "").Replace("\r\n", "").Replace("\n\n", "").Replace("\n", "").Replace("\r", "").Replace("\"", "'").Replace("\t", "");
}
}
#endregion
var workflowDatabase = new WorkflowsDatabase();
var applicationDatabase = new ApplicationDatabase();
var db = new LegitimateDatabase();
var office = db.GetOfficeLocation(Profile.OfficeLocationID.Value);
bool isTAT = false;
if (office.DivisionTypeID == (short)DivisionTypeEnum.TAT)
{
isTAT = true;
}
string LicenceReferenceNumber = "";
if(application.Licences.Count() > 0)
{
LicenceReferenceNumber = application.Licences.FirstOrDefault().ApplicationLicenceReferenceNumber;
}
var model = new ApplicationDetailsModel
{
AdjudicationDetail = database.GetAdjudicationDetail(applicationAdjudication.AdjudicationDetailID, -1, Profile.OfficeLocationID.Value, Profile.UserID),
ApplicationView = database.GetApplicationDetail_ViewOnly(applicationAdjudication.ApplicationDetailID),
GazetteDetails = gazetteDetails,
Application = application,
ApplicationAdjudicationID = applicationAdjudicationID,
entityID = ADJUDICATION_ENTITY_ID,
itemID = applicationAdjudication.AdjudicationDetailID,
DocumentStoreLocationID = DOCUMENT_STORE_LOCATION_ID,
CanCaptureDecision = applicationAdjudication.IsReadyForAdjudication,
LicenceReferenceNumber = LicenceReferenceNumber,
Lookups = GetLookupsForFormGetLookupsFormView(),
Documents = workflowDatabase.GetWorkflowInstanceDocuments(application.WorkflowInstanceID.Value, Profile.UserID),
ParentApplicationNumber = parentApplicationNumber,
IsTAT = isTAT,
FinalDecisionID = applicationAdjudication.FinalAdjudicationDecisionID
};
if (application.CopiedFromApplicationDetailID != null)
{
model.IsChildApplication = true;
}
#region Check for related TAT Request
if (application.RelatedTATApplicationRequestID != null)
{
model.RelatedTATApplicationDetails = applicationDatabase.GetApplicationTATDetails(application.RelatedTATApplicationRequestID.Value, Profile.UserID);
}
else
{
model.RelatedTATApplicationDetails = new ApplicationDetail();
}
#endregion
#region Get form state
var ApplicationRequestBaseModel = new ApplicationRequestFormModel
{
ApplicationView = applicationDatabase.GetApplicationView(applicationAdjudication.ApplicationDetailID, Profile.UserID),
WorkflowInstance = WorkflowHelper.GetWorkflowInstanceView((short)EntityEnum.ApplicationRequestDetails, applicationAdjudication.ApplicationDetailID, Profile.UserID)
};
ApplicationRequestBaseModel.SetFormEditState(null);
if(applicationAdjudication.ApplicationRequestTypeID == (short)ApplicationRequestTypeEnum.ApplicationForAccreditation)
{
ApplicationRequestBaseModel.CanViewLicenceDetails = false;
}
model.ApplicationRequestBaseModel = ApplicationRequestBaseModel;
#endregion
#region Get Previous Adjudication
if(applicationAdjudication.ApplicationRequestTypeID == (short)ApplicationRequestTypeEnum.ApplicationForAccreditation)
{
List applicationAdjudications = applicationDatabase.GetApplicationLicenceAdjudicationDetails(applicationAdjudication.ApplicationDetailID, Profile.UserID);
model.ApplicationAdjudications = applicationAdjudications;
}
else
{
List applicationAdjudications = applicationDatabase.GetApplicationLicenceAdjudicationDetails(applicationAdjudication.ApplicationDetailID, applicationAdjudication.ApplicationLicenceID.Value, Profile.UserID);
model.ApplicationAdjudications = applicationAdjudications;
}
#endregion
ViewBag.Controller = "ApplicationDetails";
ViewBag.Page = "ApplicationDetails";
return View("ApplicationDetails", model);
}
#endregion
#region AddApplicationToAdjudication
///
/// Add an application from the manual Adjudication queue
///
///
///
///
[HttpPost]
public JsonNetResult AddApplicationToAdjudication(long adjudicationDetailID, string referenceNumber)
{
try
{
if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), SecurableEnum.ApplicationsModule_Adjudication_Console_AddApplication))
{
throw new Exception("#EXPOSE_ERROR#Security error");
}
var database = new LegitimateDatabase();
var errorMessage = "";
var appDetail = database.GetApplicationDetail_ViewOnly(referenceNumber);
if (appDetail != null)
{
if ((appDetail.ApplicationCannoutBeAutoAssignedForAdjudication != true) && (appDetail.ApplicationSubStatusID == (short)ApplicationSubStatusEnum.AwaitingNextAvailableAdjudication_Automated))
{
throw new Exception("#EXPOSE_ERROR#Application is in the automated queue, cannot be manually added");
}
if (appDetail.AdjudicationOfficeLocationID != Profile.OfficeLocationID)
{
throw new Exception("#EXPOSE_ERROR#Application is not linked to adjudication location");
}
database.AddApplicationToAdjudication(appDetail.ApplicationDetailID, adjudicationDetailID, Profile.UserID);
}
else
{
errorMessage = "#EXPOSE_ERROR#No record found for reference " + referenceNumber;
}
if(!String.IsNullOrEmpty(errorMessage))
{
throw new Exception(errorMessage);
}
return new JsonNetResult()
{
Data = new JsonBaseResult()
{
Success = true,
Error = "",
ErrorCode = ""
}
};
}
catch (Exception ex)
{
#region Error Handling
#region Error Additional Data
Dictionary additionalData = new Dictionary();
additionalData.Add("adjudicationDetailID", adjudicationDetailID);
additionalData.Add("referenceNumber", referenceNumber);
#endregion
var errorMessage = ErrorHelper.ProcessError(ex, "AdjudicationConsole", "AddApplicationToAdjudication", additionalData);
#endregion
return new JsonNetResult()
{
Data = new JsonBaseResult()
{
Success = false,
ErrorCode = "ERROR",
Error = errorMessage
}
};
}
}
#endregion
#region RemoveApplicationFromAdjudication
///
/// Remove application from adjudication
///
///
///
///
///
[HttpPost]
public JsonNetResult RemoveApplicationFromAdjudication(long AdjudicationDetailID, long ApplicationDetailID, string comments)
{
try
{
if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), SecurableEnum.ApplicationsModule_Adjudication_Console_RemoveApplication))
{
throw new Exception("Security error");
}
var database = new LegitimateDatabase();
database.RemoveApplicationFromAdjudication(ApplicationDetailID, AdjudicationDetailID, comments, Profile.UserID);
return new JsonNetResult()
{
Data = new JsonBaseResult()
{
Success = true,
Error = "",
ErrorCode = ""
}
};
}
catch (Exception ex)
{
#region Error Handling
#region Error Additional Data
Dictionary additionalData = new Dictionary();
additionalData.Add("AdjudicationDetailID", AdjudicationDetailID);
additionalData.Add("ApplicationDetailID", ApplicationDetailID);
additionalData.Add("comments", comments);
#endregion
var errorMessage = ErrorHelper.ProcessError(ex, "AdjudicationConsole", "AddApplicationToAdjudication", additionalData);
#endregion
return new JsonNetResult()
{
Data = new JsonBaseResult()
{
Success = false,
ErrorCode = "ERROR",
Error = errorMessage
}
};
}
}
#endregion
#region ReverseAdjudicationDecision
///
/// Reverse the decision linked to an application
///
///
///
///
[HttpPost]
public JsonResult ReverseAdjudicationDecision(long applicationAdjudicationID, string comments)
{
try
{
if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), SecurableEnum.ApplicationsModule_Adjudication_Console_ReverseDecision))
{
throw new Exception("Security error");
}
var database = new LegitimateDatabase();
database.ReverseAdjudicationDecision(applicationAdjudicationID, Profile.UserID, comments);
return new JsonNetResult()
{
Data = new JsonBaseResult()
{
Success = true,
Error = "",
ErrorCode = ""
}
};
}
catch (Exception ex)
{
#region Error Handling
#region Error Additional Data
Dictionary additionalData = new Dictionary();
additionalData.Add("applicationAdjudicationID", applicationAdjudicationID);
additionalData.Add("comments", comments);
#endregion
var errorMessage = ErrorHelper.ProcessError(ex, "AdjudicationConsole", "ReverseAdjudicationDecision", additionalData);
#endregion
return new JsonNetResult()
{
Data = new JsonBaseResult()
{
Success = false,
ErrorCode = "ERROR",
Error = errorMessage
}
};
}
}
#endregion
#endregion
}
}