using Neo.Afx.Common; using Neo.Afx.Mvc; using Neo.Afx.Security; using Neo.Afx.Services.Workflows.Entities; using Neo.Afx.ViewModels; using Neo.LegitimateLicences.ApplicationRequest.Models.Database; using Neo.LegitimateLicences.Common; using Neo.LegitimateLicences.Common.Helpers; using Neo.LegitimateLicences.Data.Models; using System; using System.Collections.Generic; using System.Linq; using System.Web.Mvc; namespace Neo.LegitimateLicences.ApplicationRequest { public partial class ApplicationRequestController { #region Licences /// /// Return Licence dxgrid view /// /// public ActionResult Licences() { var itemId = WebHelper.ItemID; var taskId = WebHelper.TaskID; #region Get active user task Vw_WorkflowInstanceTask activeUserTask = null; if (taskId != -1) { activeUserTask = WorkflowHelper.GetActiveUserUserTaskByID((long)EntityEnum.ApplicationRequestDetails, itemId, taskId, Profile.UserID); } if (activeUserTask == null) { activeUserTask = WorkflowHelper.GetActiveUserTask(Profile.UserID, EntityEnum.ApplicationRequestDetails, itemId); } #endregion var model = new ApplicationRequestFormModel { UserSecurables = (Profile.Securables != null) ? Profile.Securables.ToList() : new List(), Ui = new WorkflowConsoleUIProperties() }; var applicationDatabase = new ApplicationDatabase(); model.ApplicationView = applicationDatabase.GetApplicationView(itemId, Profile.UserID); // For conversion applications (type 63) we don't create new licence rows; // instead, the conversion is linked back to the original application/ // licence via CopiedFromApplicationDetailID. To give users full // visibility of the affected licence, we load licences from the // parent application when present. var licencesApplicationDetailID = itemId; if (model.ApplicationView != null && model.ApplicationView.ApplicationRequestTypeID == 63 /*Conversion of Metered Taxi to E-hailing*/ && model.ApplicationView.CopiedFromApplicationDetailID.HasValue) { licencesApplicationDetailID = model.ApplicationView.CopiedFromApplicationDetailID.Value; } model.Data = applicationDatabase.GetApplicationLicences(licencesApplicationDetailID); model.Lookups = GetLookupsForFormGetLookupsFormView(); model.WorkflowInstance = WorkflowHelper.GetWorkflowInstanceView(WebHelper.EntityID, WebHelper.ItemID, Profile.UserID); if (model.ApplicationView.CopiedFromApplicationDetailID != null) { model.ParentApplicationView = Database.GetApplicationView(model.ApplicationView.CopiedFromApplicationDetailID.Value, Profile.UserID); } else { model.ParentApplicationView = new Neo.LegitimateLicences.ApplicationRequest.Models.Database.Vw_ApplicationDetails_Light(); } model.SetFormEditState(activeUserTask); model.TemporarySpecialApplicationLicenceRouteDetail = new ApplicationLicenceRouteDetail(); if(model.ApplicationView.ApplicationRequestTypeID == (short)ApplicationRequestTypeEnum.TemporarySpecialLicence) { var route = applicationDatabase.GetApplicationLicencesRouteDetails(WebHelper.ItemID, Profile.UserID).FirstOrDefault(); if (route != null) { model.TemporarySpecialApplicationLicenceRouteDetail = route; } } return View("Licences", model); } #endregion #region UpdateApplicationLicenceDetails /// /// Update licence details for Temporary (Special) licence request /// /// /// /// /// /// /// [HttpPost] public JsonNetResult UpdateApplicationLicenceDetails(long applicationLicenceID, DateTime? specialLicenceDateFrom, DateTime? specialLicenceDateTo, string specialLicenceDetails, string reasonForAmendment) { var db = new ApplicationDatabase(); try { #region Check if can save var model = GetModel(); if (!model.Ui.canSubmit) { throw new Exception("#EXPOSE_ERROR#Security error"); } #endregion db.UpdateApplicationLicenceDetails(applicationLicenceID, specialLicenceDateFrom, specialLicenceDateTo, specialLicenceDetails, reasonForAmendment, Profile.UserID); return new JsonNetResult() { Data = new JsonBaseResult() { Success = true } }; } catch (Exception ex) { #region Error Handling #region Error Additional Data Dictionary additionalData = new Dictionary(); additionalData.Add("applicationLicenceID", applicationLicenceID); additionalData.Add("specialLicenceDateFrom", specialLicenceDateFrom); additionalData.Add("specialLicenceDateTo", specialLicenceDateTo); additionalData.Add("specialLicenceDetails", specialLicenceDetails); additionalData.Add("reasonForAmendment", reasonForAmendment); #endregion string error = ErrorHelper.ProcessError(ex, "ApplicationRequest", "UpdateApplicationLicenceDetails", additionalData); #endregion return new JsonNetResult() { Data = new JsonBaseResult() { Success = false, ErrorCode = "ERROR", Error = error } }; } } #endregion #region UpdateApplicationSpecialLicenceRouteDetails /// /// /// /// /// /// /// /// /// [HttpPost] public JsonNetResult UpdateApplicationSpecialLicenceRouteDetails(long applicationLicenceID, long applicationLicenceRouteDetailID, string routeOrigin, string routeDestination, string routeDescription) { var db = new ApplicationDatabase(); try { #region Check if can save var model = GetModel(); if (!model.Ui.canSubmit) { throw new Exception("#EXPOSE_ERROR#Security error"); } #endregion db.UpdateApplicationLicenceRouteDetails(applicationLicenceID, applicationLicenceRouteDetailID, routeOrigin, routeDestination, routeDescription, Profile.UserID); return new JsonNetResult() { Data = new JsonBaseResult() { Success = true } }; } catch (Exception ex) { #region Error Handling #region Error Additional Data Dictionary additionalData = new Dictionary(); additionalData.Add("applicationLicenceID", applicationLicenceID); additionalData.Add("applicationLicenceRouteDetailID", applicationLicenceRouteDetailID); additionalData.Add("routeOrigin", routeOrigin); additionalData.Add("routeDestination", routeDestination); additionalData.Add("routeDescription", routeDescription); #endregion string error = ErrorHelper.ProcessError(ex, "ApplicationRequest", "UpdateApplicationLicenceDetails", additionalData); #endregion return new JsonNetResult() { Data = new JsonBaseResult() { Success = false, ErrorCode = "ERROR", Error = error } }; } } #endregion #region StartTemporaryReplacementPrintout /// /// /// /// /// /// /// /// /// /// /// [HttpPost] public JsonNetResult StartTemporaryReplacementPrintout(int entityID, long itemID, short printoutTypeID, string certificateNumber, bool isReprint, string reprintReason, bool isTestPrint) { try { var database = new LegitimateDatabase(); var verificationToken = database.CreateVerifiedPrintout(entityID, itemID, printoutTypeID, Profile.UserID, isReprint, reprintReason, isTestPrint, certificateNumber); return new JsonNetResult() { Data = new JsonBaseResult() { Success = true, Error = "", ErrorCode = "", Result = new { PrintoutToken = verificationToken } } }; } catch (Exception ex) { #region Error Handling #region Error Additional Data Dictionary additionalData = new Dictionary(); additionalData.Add("entityID", entityID); additionalData.Add("itemID", itemID); additionalData.Add("printoutTypeID", printoutTypeID); additionalData.Add("isReprint", isReprint); additionalData.Add("reprintReason", reprintReason); additionalData.Add("isTestPrint", isTestPrint); #endregion var errorMessage = ErrorHelper.ProcessError(ex, "ApplicationRequest", "StartReceiptPrintout", additionalData); #endregion return new JsonNetResult() { Data = new JsonBaseResult() { Success = false, ErrorCode = "ERROR", Error = errorMessage } }; } } #endregion } }