using Neo.Afx.Services.Workflows; using Neo.LegitimateLicences.Common; using Neo.LegitimateLicences.Data.Models; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using Neo.Afx.ViewModels; using Neo.Afx.Services.Integration; using Neo.LegitimateLicences.Admin; using Neo.LegitimateLicences.Common.Helpers; using Neo.Afx.Mvc; using Neo.Afx.Admin.Security; using Neo.Afx.Services.Documents; namespace Neo.LegitimateLicences.Admin { public partial class AdminController : Neo.LegitimateLicences.Common.ControllerBase { #region Action Results #region Users public ActionResult Users() { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.SecurableEnum.AdminModule_ManageUsers)) { return RedirectToAction("Default", "Dashboard"); } var securityDatabase = new SecurityDatabase(); var model = new DefaultModel { Users = securityDatabase.GetUsers() }; WebHelper.SetLastPageVisited(HttpContext, "Admin/Users"); ViewBag.Controller = "Admin"; ViewBag.Page = "Users"; return View("Users", model); } #endregion #region RoleSecurables public ActionResult RoleSecurables() { if (!SecurityHelper.UserHasRole(Profile.Roles, Neo.LegitimateLicences.Common.RoleEnum.LegitimateSystemAdministrator)) { return RedirectToAction("Default", "Dashboard"); } var database = new SecurityDatabase(); var model = new RoleSecurablesModel(); model.Securables = database.GetSecurables().OrderBy(a => a.Name); model.Roles = database.GetRoles().Where(a => a.Name != "System User").OrderBy(a => a.Name); WebHelper.SetLastPageVisited(HttpContext, "Admin/RoleSecurables"); ViewBag.Controller = "Admin"; ViewBag.Page = "Role Security"; return View("RoleSecurables", model); } #endregion #region DocumentTypes public ActionResult DocumentTypes() { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.SecurableEnum.AdminModule_ManageUsers)) { return RedirectToAction("Default", "Dashboard"); } var db = new LegitimateDatabase(); var model = new DocumentTypesModel { DocumentTypes = db.GetDocumentTypes() }; WebHelper.SetLastPageVisited(HttpContext, "Admin/DocumentTypes"); ViewBag.Controller = "Admin"; ViewBag.Page = "DocumentTypes"; return View("DocumentTypes", model); } #endregion #region ApplicationRequestTypeSetup public ActionResult ApplicationRequestTypeSetup() { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.SecurableEnum.AdminModule_ManageUsers)) { return RedirectToAction("Default", "Dashboard"); } var db = new LegitimateDatabase(); var model = new DefaultModel { Lookups = GetLookups(), ApplicationRequestTypeSetup = db.SearchViewApplicationRequestTypeSetup() }; WebHelper.SetLastPageVisited(HttpContext, "Admin/ApplicationRequestTypeSetup"); ViewBag.Controller = "Admin"; ViewBag.Page = "ApplicationRequestTypeSetup"; return View("ApplicationRequestTypeSetup", model); } #endregion #region CloneApplicationRequestTypeSetup public ActionResult CloneApplicationRequestTypeSetup() { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.SecurableEnum.AdminModule_ManageUsers)) { return RedirectToAction("Default", "Dashboard"); } var db = new LegitimateDatabase(); var model = new DefaultModel { Lookups = GetLookups() }; WebHelper.SetLastPageVisited(HttpContext, "Admin/CloneApplicationRequestTypeSetup"); ViewBag.Controller = "Admin"; ViewBag.Page = "CloneApplicationRequestTypeSetup"; return View("CloneApplicationRequestTypeSetup", model); } #endregion #region DivisionTypeAnnexureMappings public ActionResult DivisionTypeAnnexureMappings() { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.SecurableEnum.AdminModule)) { return RedirectToAction("Default", "Dashboard"); } var db = new LegitimateDatabase(); var model = new DivisionTypeAnnexureMappingsModel { DivisionTypeAnnexureMappings = db.GetDivisionTypeAnnexureMappings(), DivisionTypes = db.GetDivisionTypes(), Provinces = db.GetProvinces().ToList(), ServiceTypes = db.GetServiceTypes().ToList(), VehicleTypes = db.GetVehicleTypes().ToList(), }; WebHelper.SetLastPageVisited(HttpContext, "Admin/DivisionTypeAnnexureMappings"); ViewBag.Controller = "Admin"; ViewBag.Page = "DivisionTypeAnnexureMappings"; return View("DivisionTypeAnnexureMappings", model); } #endregion #region OfficeLocations public ActionResult OfficeLocations() { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.SecurableEnum.AdminModule_OfficeLocations)) { return RedirectToAction("Default", "Dashboard"); } var db = new LegitimateDatabase(); var officeLocations = db.GetOfficeLocations(); #region foreach(var officeLocation in officeLocations) { officeLocation.OfficeLocationDescription = officeLocation.OfficeLocationDescription.ToUpper(); } #endregion var model = new OfficeLocationsModel { OfficeLocations = officeLocations }; WebHelper.SetLastPageVisited(HttpContext, "Admin/DocumentTypes"); ViewBag.Controller = "Admin"; ViewBag.Page = "OfficeLocations"; return View("OfficeLocations", model); } #endregion #region LicencingBoards public ActionResult LicencingBoards() { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.SecurableEnum.AdminModule_ManageUsers)) { return RedirectToAction("Default", "Dashboard"); } var db = new LegitimateDatabase(); var model = new LicencingBoardsModel { LicencingBoards = db.GetLicencingBoards(), Lookups = GetLookups() }; ViewBag.Controller = "Admin"; ViewBag.Page = "LicencingBoards"; return View("LicencingBoards", model); } #endregion #region VehicleMakes public ActionResult VehicleMakes() { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.SecurableEnum.AdminModule_ManageUsers)) { return RedirectToAction("Default", "Dashboard"); } var db = new LegitimateDatabase(); var model = new VehicleMakesModel { VehicleMakes = db.GetVehicleMakes(), //Lookups = GetLookups() }; ViewBag.Controller = "Admin"; ViewBag.Page = "VehicleMakes"; return View("VehicleMakes", model); } #endregion #region VehicleModels public ActionResult VehicleModels() { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.SecurableEnum.AdminModule)) { return RedirectToAction("Default", "Dashboard"); } var db = new LegitimateDatabase(); var vehicleModels = db.GetVehicleModels(); var model = new VehicleModelsModel { Vw_VehicleModels = vehicleModels, VehicleModel = new VehicleModel(), Lookups = GetVehicleModelLookups() }; WebHelper.SetLastPageVisited(HttpContext, "Admin/VehicleModels"); ViewBag.Controller = "Admin"; ViewBag.Page = "VehicleModels"; return View("VehicleModels", model); } #endregion #region Settings public ActionResult Settings() { var db = new LegitimateDatabase(); var model = new SettingsModel { Settings = db.GetSettings(), Lookups = GetLookups() }; WebHelper.SetLastPageVisited(HttpContext, "Admin/Settings"); ViewBag.Controller = "Admin"; ViewBag.Page = "Settings"; return View("Settings", model); } #endregion #region Inspectors public ActionResult Inspectors() { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.SecurableEnum.AdminModule_ManageUsers)) { return RedirectToAction("Default", "Dashboard"); } var db = new LegitimateDatabase(); var model = new InspectorsModel { Inspectors = db.GetInspectorsView(), Lookups = GetLookups() }; ViewBag.Controller = "Admin"; ViewBag.Page = "Inspectors"; return View("Inspectors", model); } #endregion #endregion #region JSON endpoints #region SearchApplicationRequestTypeSetup [HttpPost] public JsonResult SearchApplicationRequestTypeSetup(short? applicationRequestTypeID, short? divisionTypeID, short? provinceID) { var database = new LegitimateDatabase(); IEnumerable data = new List(); var success = true; var errorMessage = ""; try { data = database.SearchApplicationRequestTypeSetup(applicationRequestTypeID, divisionTypeID, provinceID, Profile.UserID); } catch (Exception ex) { success = false; errorMessage = database.GetInnermostMessage(ex); } return Json(new { data, success, errorMessage }, JsonSerializerOptions.None); } #endregion #region CloneApplicationRequestTypeSetup [HttpPost] public JsonResult CloneApplicationRequestTypeSetup(short oldApplicationRequestTypeID, short oldDivisionTypeID, short oldProvinceID, short newApplicationRequestTypeID, short newDivisionTypeID, short newProvinceID) { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.SecurableEnum.AdminModule_ManageUsers)) { throw new Exception("Security error"); } var database = new LegitimateDatabase(); ApplicationRequestTypeDivisionSetup data = new ApplicationRequestTypeDivisionSetup(); var Success = true; var errorMessage = ""; try { data = database.CloneApplicationRequestTypeDivisionSetup(oldApplicationRequestTypeID, oldDivisionTypeID, oldProvinceID, newApplicationRequestTypeID, newDivisionTypeID, newProvinceID, Profile.UserID); } catch (Exception ex) { Success = false; errorMessage = database.GetInnermostMessage(ex); } return Json(new { data, Success, errorMessage }, JsonSerializerOptions.None); } #endregion #region SaveDivisionTypeAnnexureMapping [HttpPost] public JsonResult SaveDivisionTypeAnnexureMapping(long DivisionTypeAnnexureMappingID , short DivisionTypeID, short ProvinceID, short ServiceTypeID, short? VehicleTypeID, long? AnnexureDocumentID) { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.SecurableEnum.AdminModule_ManageUsers)) { throw new Exception("Security error"); } var database = new LegitimateDatabase(); List data = new List(); var Success = true; var errorMessage = ""; try { database.SaveDivisionTypeAnnexureMapping( DivisionTypeAnnexureMappingID, DivisionTypeID, ProvinceID, ServiceTypeID, VehicleTypeID, AnnexureDocumentID, Profile.UserID); data = database.GetDivisionTypeAnnexureMappings(); } catch (Exception ex) { Success = false; errorMessage = database.GetInnermostMessage(ex); } return Json(new { data, Success, errorMessage }, JsonSerializerOptions.None); } #endregion #region CancelDivisionTypeAnnexureMapping [HttpPost] public JsonResult CancelDivisionTypeAnnexureMapping(long DivisionTypeAnnexureMappingID, short DivisionTypeID, short ProvinceID, short ServiceTypeID) { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.SecurableEnum.AdminModule_ManageUsers)) { throw new Exception("Security error"); } var database = new LegitimateDatabase(); List data = new List(); var Success = true; var errorMessage = ""; try { database.CancelDivisionTypeAnnexureMapping(DivisionTypeAnnexureMappingID, DivisionTypeID, ProvinceID, ServiceTypeID, Profile.UserID); data = database.GetDivisionTypeAnnexureMappings(); } catch (Exception ex) { Success = false; errorMessage = database.GetInnermostMessage(ex); } return Json(new { data, Success, errorMessage }, JsonSerializerOptions.None); } #endregion #region UpsertVehicleModel [HttpPost] public JsonResult UpsertVehicleModel(VehicleModel vehicleModel) { var database = new LegitimateDatabase(); List data = new List(); var success = true; var errorMessage = ""; try { database.UpsertVehicleModel(vehicleModel, Profile.UserID); data = database.GetVehicleModels(); } catch (Exception ex) { success = false; errorMessage = database.GetInnermostMessage(ex); } return Json(new { data, success, errorMessage }, JsonSerializerOptions.None); } #endregion #region CancelVehicleModel [HttpPost] public JsonResult CancelVehicleModel(short vehicleModelID, string cancelReason) { var database = new LegitimateDatabase(); List data = new List(); var success = true; var errorMessage = ""; try { database.CancelVehicleModel(vehicleModelID, Profile.UserID, cancelReason); data = database.GetVehicleModels(); } catch (Exception ex) { success = false; errorMessage = database.GetInnermostMessage(ex); } return Json(new { data, success, errorMessage }, JsonSerializerOptions.None); } #endregion #region UpsertLicencingBoard [HttpPost] public JsonResult UpsertLicencingBoard(short licencingBoardID, string description, short provinceID, bool isCancelled) { var database = new LegitimateDatabase(); List data = new List(); LicencingBoard licencingBoard = new LicencingBoard() {LicencingBoardID = licencingBoardID, Description = description, ProvinceID = provinceID, IsCancelled = isCancelled}; var success = true; var errorMessage = ""; try { database.UpsertLicencingBoard(licencingBoard, Profile.UserID); data = database.GetLicencingBoards(); } catch (Exception ex) { success = false; errorMessage = database.GetInnermostMessage(ex); } return Json(new { data, success, errorMessage }, JsonSerializerOptions.None); } #endregion #region CancelLicencingBoard [HttpPost] public JsonResult CancelLicencingBoard(short licencingBoardID, string reason) { var database = new LegitimateDatabase(); List data = new List(); var success = true; var errorMessage = ""; try { database.CancelLicencingBoard(licencingBoardID, Profile.UserID, reason); data = database.GetLicencingBoards(); } catch (Exception ex) { success = false; errorMessage = database.GetInnermostMessage(ex); } return Json(new { data, success, errorMessage }, JsonSerializerOptions.None); } #endregion #region UpsertVehicleMake [HttpPost] public JsonResult UpsertVehicleMake(short vehicleMakeID, string description, bool isCancelled) { var database = new LegitimateDatabase(); List data = new List(); VehicleMake vehicleMake = new VehicleMake() {VehicleMakeID = vehicleMakeID, Description = description, IsCancelled = isCancelled}; var success = true; var errorMessage = ""; try { database.UpsertVehicleMake(vehicleMake, Profile.UserID); data = database.GetVehicleMakes(); } catch (Exception ex) { success = false; errorMessage = database.GetInnermostMessage(ex); } return Json(new { data, success, errorMessage }, JsonSerializerOptions.None); } #endregion #region CancelVehicleMake [HttpPost] public JsonResult CancelVehicleMake(short vehicleMakeID, string reason) { var database = new LegitimateDatabase(); List data = new List(); var success = true; var errorMessage = ""; try { database.CancelVehicleMake(vehicleMakeID, Profile.UserID, reason); data = database.GetVehicleMakes(); } catch (Exception ex) { success = false; errorMessage = database.GetInnermostMessage(ex); } return Json(new { data, success, errorMessage }, JsonSerializerOptions.None); } #endregion #region Settings #region UpdateSetting [HttpPost] public JsonResult UpdateSetting(string settingName, string settingValue) { var db = new LegitimateDatabase(); List data = new List(); var success = true; var errorMessage = ""; try { db.UpdateSetting(settingName, settingValue, Profile.UserID, ""); } catch (Exception ex) { errorMessage = db.GetInnermostMessage(ex); } var results = new { ErrorMessage = errorMessage }; return Json(new { data, success, errorMessage }, JsonSerializerOptions.None); } #endregion #endregion #region UpsertInspector [HttpPost] public JsonResult UpsertInspector(short InspectorID, string name, short officeLocationID) { var database = new LegitimateDatabase(); List data = new List(); Inspector Inspector = new Inspector() { InspectorID = InspectorID, Name = name, OfficeLocationID = officeLocationID }; var success = true; var errorMessage = ""; try { database.UpsertInspector(Inspector, Profile.UserID); data = database.GetInspectorsView(); } catch (Exception ex) { success = false; errorMessage = database.GetInnermostMessage(ex); } return Json(new { data, success, errorMessage }, JsonSerializerOptions.None); } #endregion #region CancelInspector [HttpPost] public JsonResult CancelInspector(short InspectorID, string reason) { var database = new LegitimateDatabase(); List data = new List(); var success = true; var errorMessage = ""; try { database.CancelInspector(InspectorID, Profile.UserID, reason); data = database.GetInspectorsView(); } catch (Exception ex) { success = false; errorMessage = database.GetInnermostMessage(ex); } return Json(new { data, success, errorMessage }, JsonSerializerOptions.None); } #endregion #region RetryFailedTasks [HttpPost] public JsonResult RetryFailedTasks(long instanceTaskID) { //if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.SecurableEnum.AfxHandleFailedTasks)) //{ // throw new Exception("Security error"); //} var database = new LegitimateDatabase(); var success = true; var errorMessage = ""; try { database.RetryFailedTasks(instanceTaskID, Profile.UserID); } catch (Exception ex) { success = false; errorMessage = database.GetInnermostMessage(ex); } return Json(new { success, errorMessage }, JsonSerializerOptions.None); } #endregion #region RequestCorrection [HttpPost] public JsonResult RequestCorrection(long instanceTaskID) { //if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.SecurableEnum.AfxHandleFailedTasks)) //{ // throw new Exception("Security error"); //} var database = new LegitimateDatabase(); var success = true; var errorMessage = ""; try { database.RequestCorrection(instanceTaskID, Profile.UserID); } catch (Exception ex) { success = false; errorMessage = database.GetInnermostMessage(ex); } return Json(new { success, errorMessage }, JsonSerializerOptions.None); } #endregion #endregion #region GetLookups public List GetLookups() { var lookups = new List(); var integrationStore = new SqlIntegrationStore(); try { integrationStore.Open(); lookups.Add(new LookupList("ApplicationRequestTypes", integrationStore.GetDataEntities("ApplicationRequestTypes", string.Empty).OrderBy(a => a.Title))); lookups.Add(new LookupList("DivisionTypes", integrationStore.GetDataEntities("DivisionTypes", string.Empty).OrderBy(a => a.Title))); lookups.Add(new LookupList("Provinces", integrationStore.GetDataEntities("Provinces", string.Empty).OrderBy(a => a.Title))); lookups.Add(new LookupList("MasterDataApproverUsers", integrationStore.GetDataEntities("MasterDataApproverUsers", string.Empty).OrderBy(a => a.Title))); lookups.Add(new LookupList("OfficeLocations", integrationStore.GetDataEntities("OfficeLocations", string.Empty).OrderBy(a => a.Title))); } finally { integrationStore.Close(); } return lookups; } #endregion #region public List GetVehicleModelLookups() { var lookups = new List(); var integrationStore = new SqlIntegrationStore(); try { integrationStore.Open(); lookups.Add(new LookupList("VehicleMakes", integrationStore.GetDataEntities("VehicleMakes", string.Empty).OrderBy(a => a.Title))); lookups.Add(new LookupList("CarryingCapacities", integrationStore.GetDataEntities("CarryingCapacities", string.Empty).OrderBy(a => a.Key))); lookups.Add(new LookupList("VehicleTypes", integrationStore.GetDataEntities("VehicleTypes", string.Empty).OrderBy(a => a.Title))); } finally { integrationStore.Close(); } return lookups; } #endregion } }