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.OperatingLicences; using Neo.LegitimateLicences.Common.Helpers; using Neo.Afx.Mvc; namespace Neo.LegitimateLicences.OperatingLicences { public partial class OperatingLicencesController : Neo.LegitimateLicences.Common.ControllerBase { #region Action Results #region Default public ActionResult Default() { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.SecurableEnum.OperatingLicencesModule)) { return RedirectToAction("Default", "Applications"); } var model = new DefaultModel { OperatingLicences = new List(), Lookups = GetLookups() }; //WebHelper.SetLastPageVisited(HttpContext, "OperatingLicences/Default"); ViewBag.Controller = "Operating Licences"; ViewBag.Page = "Home"; return View("Default", model); } #endregion #region IssuingExpiries public ActionResult IssuingExpiries() { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.SecurableEnum.OperatingLicencesModule_Issuing_IssuingExpiries)) { return RedirectToAction("Default", "Applications"); } var database = new LegitimateDatabase(); var data = database.SearchLicenceIssueTracking(Profile.UserID); var model = new IssuingExpiriesModel { Toggle30DaysWaitingSendingCount = data.Where(a => (DateTime.Now > a.IssuingExpiryDate_30Days) && a.IssuingExpiryDate_30DaysIsLetterSent == false).Count(), Toggle30DaysSentCount = data.Where(a => (DateTime.Now > a.IssuingExpiryDate_30Days) && (DateTime.Now < a.IssuingExpiryDate_60Days) && a.IssuingExpiryDate_30DaysIsLetterSent == true && a.IssuingExpiryDateIsExtended == false).Count(), Toggle60DaysWaitingSendingCount = data.Where(a => (DateTime.Now > a.IssuingExpiryDate_60Days) && a.IssuingExpiryDate_30DaysIsLetterSent == true && a.IssuingExpiryDate_60DaysIsLetterSent == false && a.IssuingExpiryDateIsExtended == false).Count(), Toggle90DaysWaitingSendingCount = data.Where(a => (DateTime.Now > a.IssuingExpiryDate_90Days) && a.IssuingExpiryDate_30DaysIsLetterSent == true && a.IssuingExpiryDate_90DaysIsLetterSent == false && a.IssuingExpiryDateIsExtended == true).Count() }; ViewBag.Controller = "Operating Licences"; ViewBag.Page = "Home"; return View("IssuingExpiries", model); } #endregion #region Expiries public ActionResult Expiries() { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.SecurableEnum.OperatingLicencesModule_Expiries)) { return RedirectToAction("Default", "Applications"); } var database = new LegitimateDatabase(); var data = database.SearchLicenceIssueTracking(Profile.UserID); var model = new ExpiriesModel { OverdueUpliftmentsCount = database.GetLicencesOverdueUpliftment(Profile.UserID).Count, UpcomingExpiriesCount = database.GetLicencesUpcomingExpiries(Profile.UserID).Count, ExpiredLicencesCount = database.GetLicencesExpiredInGracePeriod(Profile.UserID).Count }; ViewBag.Controller = "Operating Licences"; ViewBag.Page = "Home"; return View("Expiries", 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 #region SearchVerifiedOperatingLicences [HttpPost] public JsonResult SearchVerifiedOperatingLicences(string operatingLicenceNumberSearch, long? memberIdSearch, long? licenceStatusIdSearch, string vechicleRegistrationNumberSearch, long? associationIdSearch, DateTime? issueDateStartDateSearch, DateTime? issueDateEndDateSearch, DateTime? expiryDateStartDateSearch, DateTime? expiryDateEndDateSearch) { var database = new LegitimateDatabase(); IEnumerable data = new List(); var success = true; var errorMessage = ""; try { data = database.SearchVerifiedLicences(operatingLicenceNumberSearch, memberIdSearch, licenceStatusIdSearch, vechicleRegistrationNumberSearch, associationIdSearch, issueDateStartDateSearch, issueDateEndDateSearch, expiryDateStartDateSearch, expiryDateEndDateSearch, Profile.UserID); } catch (Exception ex) { success = false; errorMessage = database.GetInnermostMessage(ex); } return Json(new { data, success, errorMessage }, JsonSerializerOptions.FormatDateTime); } #endregion #region Get30ReminderSentList [HttpPost] public JsonResult Get30ReminderSentList() { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.SecurableEnum.OperatingLicencesModule_Issuing_IssuingExpiries)) { throw new Exception("Security error"); } var database = new LegitimateDatabase(); IEnumerable data = new List(); var success = true; var errorMessage = ""; try { data = database.SearchLicenceIssueTracking(Profile.UserID).Where(a => (DateTime.Now > a.IssuingExpiryDate_30Days) && (DateTime.Now < a.IssuingExpiryDate_60Days) && a.IssuingExpiryDate_30DaysIsLetterSent == true && a.IssuingExpiryDateIsExtended == false).ToList(); } catch (Exception ex) { success = false; errorMessage = database.GetInnermostMessage(ex); } return Json(new { data, success, errorMessage }, JsonSerializerOptions.FormatDateTime); } #endregion #region Get30DaysAwaitingSending [HttpPost] public JsonResult Get30DaysAwaitingSending() { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.SecurableEnum.OperatingLicencesModule_Issuing_IssuingExpiries)) { throw new Exception("Security error"); } var database = new LegitimateDatabase(); IEnumerable data = new List(); var success = true; var errorMessage = ""; try { data = database.SearchLicenceIssueTracking(Profile.UserID).Where(a => (DateTime.Now > a.IssuingExpiryDate_30Days) && a.IssuingExpiryDate_30DaysIsLetterSent == false).ToList(); } catch (Exception ex) { success = false; errorMessage = database.GetInnermostMessage(ex); } return Json(new { data, success, errorMessage }, JsonSerializerOptions.FormatDateTime); } #endregion #region Get60DaysAwaitingSending [HttpPost] public JsonResult Get60DaysAwaitingSending() { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.SecurableEnum.OperatingLicencesModule_Issuing_IssuingExpiries)) { throw new Exception("Security error"); } var database = new LegitimateDatabase(); IEnumerable data = new List(); var success = true; var errorMessage = ""; try { data = database.SearchLicenceIssueTracking(Profile.UserID).Where(a => (DateTime.Now > a.IssuingExpiryDate_60Days) && a.IssuingExpiryDate_30DaysIsLetterSent == true && a.IssuingExpiryDate_60DaysIsLetterSent == false && a.IssuingExpiryDateIsExtended == false).ToList(); } catch (Exception ex) { success = false; errorMessage = database.GetInnermostMessage(ex); } return Json(new { data, success, errorMessage }, JsonSerializerOptions.FormatDateTime); } #endregion #region Get90DaysAwaitingSending [HttpPost] public JsonResult Get90DaysAwaitingSending() { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.SecurableEnum.OperatingLicencesModule_Issuing_IssuingExpiries)) { throw new Exception("Security error"); } var database = new LegitimateDatabase(); IEnumerable data = new List(); var success = true; var errorMessage = ""; try { data = database.SearchLicenceIssueTracking(Profile.UserID).Where(a => (DateTime.Now > a.IssuingExpiryDate_90Days) && a.IssuingExpiryDate_30DaysIsLetterSent == true && a.IssuingExpiryDate_90DaysIsLetterSent == false && a.IssuingExpiryDateIsExtended == true).ToList(); } catch (Exception ex) { success = false; errorMessage = database.GetInnermostMessage(ex); } return Json(new { data, success, errorMessage }, JsonSerializerOptions.FormatDateTime); } #endregion #region FlagLicenseLetterAsSent [HttpPost] public JsonResult FlagLicenseLetterAsSent(string licencesToBeFlaggedAsSent, string DaysLetter) { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.SecurableEnum.OperatingLicencesModule_Issuing_IssuingExpiries)) { throw new Exception("Security error"); } var database = new LegitimateDatabase(); IEnumerable data = new List(); var success = true; var errorMessage = ""; var ThirtyLetterSent = 0; var SixtyDaysLetterSent = 0; var NinetyLetterSent = 0; if (DaysLetter == "30Days") { ThirtyLetterSent = 1; SixtyDaysLetterSent = 0; NinetyLetterSent = 0; } else if (DaysLetter == "60Days") { ThirtyLetterSent = 0; SixtyDaysLetterSent = 1; NinetyLetterSent = 0; } else if (DaysLetter == "90Days") { ThirtyLetterSent = 0; SixtyDaysLetterSent = 0; NinetyLetterSent = 1; } try { database.LicenceIssueTrackingFlag(licencesToBeFlaggedAsSent, ThirtyLetterSent, SixtyDaysLetterSent, NinetyLetterSent, Profile.UserID, out errorMessage); } catch (Exception ex) { success = false; errorMessage = database.GetInnermostMessage(ex); } return Json(new { data, success, errorMessage }, JsonSerializerOptions.FormatDateTime); } #endregion #region GetOverdueUpliftments [HttpPost] public JsonResult GetOverdueUpliftments() { var database = new LegitimateDatabase(); var results = new { data = database.GetLicencesOverdueUpliftment(Profile.UserID), success = true }; return Json(results, JsonSerializerOptions.FormatDateTime); } #endregion #region GetUpcomingExpiries [HttpPost] public JsonResult GetUpcomingExpiries() { var database = new LegitimateDatabase(); var results = new { data = database.GetLicencesUpcomingExpiries(Profile.UserID), success = true }; return Json(results, JsonSerializerOptions.FormatDateTime); } #endregion #region GetExpiredLicences [HttpPost] public JsonResult GetExpiredLicences() { var database = new LegitimateDatabase(); var results = new { data = database.GetLicencesExpiredInGracePeriod(Profile.UserID), success = true }; return Json(results, JsonSerializerOptions.FormatDateTime); } #endregion #endregion #region GetLookups public List GetLookups() { var lookups = new List(); var database = new LegitimateDatabase(); var integrationStore = new SqlIntegrationStore(); try { integrationStore.Open(); lookups.Add(new LookupList("ApplicationActiveWorkflows", integrationStore.GetDataEntities("ActiveWorkflows", string.Empty))); lookups.Add(new LookupList("ApplicationWorkflowInstanceStatus", integrationStore.GetDataEntities("WorkflowInstanceStatus", string.Empty))); lookups.Add(new LookupList("ApplicationWorkflowTemplateSteps", integrationStore.GetDataEntities("WorkflowTemplateSteps", string.Empty))); lookups.Add(new LookupList("LicenceStatuses", database.GetLicenceStatuses())); } finally { integrationStore.Close(); } return lookups; } #endregion } }