using Neo.Afx.Common; using Neo.Afx.ComponentModel; using Neo.Afx.Mvc; using Neo.Afx.Security; using Neo.Afx.Services.Audits; using Neo.Afx.Services.Integration; using Neo.Afx.Services.Notifications.Entities; using Neo.Afx.Services.Workflows; 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.Data.Entity.Validation; using System.Linq; using System.Web; using System.Web.Mvc; namespace Neo.LegitimateLicences.ApplicationRequest { public partial class ApplicationRequestController { #region AddExistingRouteToLicence public ActionResult AddExistingRouteToLicence(long applicationDetailID, long applicationLicenceID, short serviceTypeID, long applicationLicenceRouteDetailID = 0, long? verifiedRouteID = null) { var model = new ApplicationLicenceAddRouteModel { UserSecurables = (Profile.Securables != null) ? Profile.Securables.ToList() : new List(), }; var applicationDatabase = new ApplicationDatabase(); var db = new LegitimateDatabase(); model.ApplicationDetailID = applicationDetailID; model.ApplicationLicenceID = applicationLicenceID; model.ServiceTypeID = serviceTypeID; model.VerifiedRouteID = verifiedRouteID; model.ApplicationLicenceRouteDetailID = applicationLicenceRouteDetailID; model.Lookups = GetAddExistingRouteLookups(); if(verifiedRouteID != null) { model.Route = db.GetVerifiedRoute(verifiedRouteID.Value); } else { model.Route = new Route(); } 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); } var applicationView = applicationDatabase.GetApplicationView(itemId, Profile.UserID); var applicant = applicationDatabase.GetApplicationDetais(itemId, Profile.UserID); model.AssociationID = applicant.VerifiedAssociationID; if (model.AssociationID == null) { model.AssociationID = -1; } model.WorkflowInstance = WorkflowHelper.GetWorkflowInstanceView(WebHelper.EntityID, WebHelper.ItemID, Profile.UserID); model.ApplicationView = applicationView; model.SetFormEditState(activeUserTask); #endregion return View("Licences.Route.AddExisting", model); } #endregion #region SearchVerifiedRoutes [HttpPost] public JsonNetResult SearchVerifiedRoutes(string searchText, long? associationID) { var database = new LegitimateDatabase(); var data = database.SearchRoutesByTextAndStatus(searchText, -1, false, associationID); return new JsonNetResult() { Data = new JsonBaseResult() { Success = true, Result = data } }; } #endregion #region GetLookups public List GetAddExistingRouteLookups() { var lookups = new List(); var integrationStore = new SqlIntegrationStore(); try { integrationStore.Open(); lookups.Add(new LookupList("ServiceTypes", integrationStore.GetDataEntities("ServiceTypes", string.Empty).OrderBy(a => a.Title))); lookups.Add(new LookupList("Modes", integrationStore.GetDataEntities("Modes", string.Empty).OrderBy(a => a.Title))); lookups.Add(new LookupList("Places", integrationStore.GetDataEntities("VerifiedPlaces", string.Empty).OrderBy(a => a.Title))); } finally { integrationStore.Close(); } return lookups; } #endregion #region AddExistingRoute [HttpPost] public JsonNetResult AddExistingRoute(long applicationLicenceID, long routeID, short serviceTypeID) { var db = new ApplicationDatabase(); var response = new JsonNetResult(); try { #region Check if can save var model = GetModel(); if (!model.Ui.canSubmit) { throw new Exception("#EXPOSE_ERROR#Security error"); } if (!model.CanEditRouteDetails) { throw new Exception("#EXPOSE_ERROR#Security error"); } #endregion var applicationLicenceRoute = db.AddApplicationLicenceRoute_Existing(applicationLicenceID, routeID, serviceTypeID, Profile.UserID); return new JsonNetResult() { Data = new JsonBaseResult() { Success = true, Error = "", ErrorCode = "", Result = applicationLicenceRoute } }; } catch (Exception ex) { #region Error Handling #region Error Additional Data Dictionary additionalData = new Dictionary(); additionalData.Add("applicationLicenceID", applicationLicenceID); additionalData.Add("routeID", routeID); additionalData.Add("serviceTypeID", serviceTypeID); #endregion string error = ErrorHelper.ProcessError(ex, "ApplicationRequest", "AddExistingRoute", additionalData); #endregion return new JsonNetResult() { Data = new JsonBaseResult() { Success = false, ErrorCode = "ERROR", Error = error } }; } } #endregion #region LicenceAreaOfOperation public ActionResult LicenceAreaOfOperation(long applicationDetailID, long applicationLicenceID, short serviceTypeID, long applicationLicenceRouteDetailID) { var db = new ApplicationDatabase(); var lldb = new LegitimateDatabase(); 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 appDetail = db.GetApplicationForm(applicationDetailID, Profile.UserID); var applicationLicenceRouteDetail = db.GetApplicationLicenceRouteDetail(applicationLicenceRouteDetailID, applicationLicenceID, serviceTypeID, Profile.UserID); if (applicationLicenceRouteDetail != null && applicationLicenceRouteDetail.ExistingApplicationLicenceRouteDetailPlaces == null) { applicationLicenceRouteDetail.ExistingApplicationLicenceRouteDetailPlaces = new List(); } var membersApplicationLicenceRouteDetail = new List(); #region ExistingApplicationLicenceRouteDetail var existingApplicationLicenceRouteDetail = db.GetApplicationLicencesRouteDetails(applicationDetailID, Profile.UserID).Where(a => a.ApplicationLicenceRouteDetailID != applicationLicenceRouteDetailID).ToList(); #endregion #region GetApplicationApplicant var applicantionApplicant = db.GetApplicationApplicant(applicationDetailID, Profile.UserID); if(applicantionApplicant.VerifiedMemberID != null) { var licenses = lldb.GetVerifiedLicenceByMember(applicantionApplicant.VerifiedMemberID.Value); if (licenses != null) { foreach(var license in licenses) { foreach (var licenceRoute in license.LicenceRoutes) { ApplicationLicenceRouteDetail r = new ApplicationLicenceRouteDetail(); string routeOrigin = ""; string routeDestination = ""; if (licenceRoute.Route.Origin != null) { routeOrigin = licenceRoute.Route.Origin.Description; } if (licenceRoute.Route.Destination != null) { routeDestination = licenceRoute.Route.Destination.Description; } r.ApplicationLicenceRouteDetailID = applicationLicenceRouteDetailID; r.ApplicationLicenceID = applicationLicenceID; r.ApplicationRouteDetailStatusID = (short)ApplicationRouteDetailStatusEnum.Verified; r.VerifiedRouteID = licenceRoute.RouteID; r.NewRouteRequestDetailID = null; r.RouteOrigin = routeOrigin; r.RouteDestination = routeDestination; r.RouteDescription = licenceRoute.Route.Description; r.NationalRouteNumber = licenceRoute.Route.NationalRouteNumber; r.BoardRouteNumber = licenceRoute.Route.BoardRouteNumber; r.RouteLength = licenceRoute.Route.RouteLength; //r.TimeTableDocumentID = route.TimeTableDocumentID; //r.FareScheduleDocumentID = route.FareScheduleDocumentID; r.RouteNumber = null; r.RouteChangeTypeID = (short)RouteChangeTypeEnum.AddExistingLinkedRouteToLicence; r.IsOriginSameAsPhysicalAddress = false; r.IsDestinationArea = false; r.RelatedApplicationLicenceRouteDetailID = null; membersApplicationLicenceRouteDetail.Add(r); } } } } #endregion var model = new ApplicationLicenceRouteModel(); if (!string.IsNullOrEmpty(appDetail.Applicant.PhysicalAddress)) { model.CurrentPhysicalAddress = appDetail.Applicant.PhysicalAddress.Replace('\r', ' '); } else { model.CurrentPhysicalAddress = ""; } model.ApplicationLicenceRouteDetail = applicationLicenceRouteDetail; #region ExistingApplicationLicenceRouteDetail foreach (var route in existingApplicationLicenceRouteDetail) { route.RouteDescription = route.RouteDescription.Replace(Environment.NewLine, "").Replace("\r\n", "").Replace("\n\n", "").Replace("\n", "").Replace("\r", "").Replace("\"", "'").Replace("\t", ""); } model.ExistingApplicationLicenceRouteDetail = existingApplicationLicenceRouteDetail; #endregion #region MembersApplicationLicenceRouteDetail foreach (var route in membersApplicationLicenceRouteDetail) { route.RouteDescription = route.RouteDescription.Replace(Environment.NewLine, "").Replace("\r\n", "").Replace("\n\n", "").Replace("\n", "").Replace("\r", "").Replace("\"", "'").Replace("\t", ""); } model.MembersApplicationLicenceRouteDetail = membersApplicationLicenceRouteDetail; #endregion model.Lookups = GetAddExistingRouteLookups(); var applicationView = db.GetApplicationView(itemId, Profile.UserID); model.WorkflowInstance = WorkflowHelper.GetWorkflowInstanceView(WebHelper.EntityID, WebHelper.ItemID, Profile.UserID); model.ApplicationView = applicationView; 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); return View("Licences.AreaOfOperation", model); } #endregion #region LicenceCharterServiceAreaOfOperation public ActionResult LicenceCharterServiceAreaOfOperation(long applicationDetailID, long applicationLicenceID, short serviceTypeID, long applicationLicenceRouteDetailID) { var db = new ApplicationDatabase(); var lldb = new LegitimateDatabase(); 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 appDetail = db.GetApplicationForm(applicationDetailID, Profile.UserID); var applicationLicenceRouteDetail = db.GetApplicationLicenceRouteDetail(applicationLicenceRouteDetailID, applicationLicenceID, serviceTypeID, Profile.UserID); if (applicationLicenceRouteDetail != null && applicationLicenceRouteDetail.ExistingApplicationLicenceRouteDetailPlaces == null) { applicationLicenceRouteDetail.ExistingApplicationLicenceRouteDetailPlaces = new List(); } var membersApplicationLicenceRouteDetail = new List(); #region ExistingApplicationLicenceRouteDetail var existingApplicationLicenceRouteDetail = db.GetApplicationLicencesRouteDetails(applicationDetailID, Profile.UserID).Where(a => a.ApplicationLicenceRouteDetailID != applicationLicenceRouteDetailID).ToList(); #endregion #region GetApplicationApplicant var applicantionApplicant = db.GetApplicationApplicant(applicationDetailID, Profile.UserID); if (applicantionApplicant.VerifiedMemberID != null) { var licenses = lldb.GetVerifiedLicenceByMember(applicantionApplicant.VerifiedMemberID.Value); if (licenses != null) { foreach (var license in licenses) { foreach (var licenceRoute in license.LicenceRoutes) { ApplicationLicenceRouteDetail r = new ApplicationLicenceRouteDetail(); r.ApplicationLicenceRouteDetailID = applicationLicenceRouteDetailID; r.ApplicationLicenceID = applicationLicenceID; r.ApplicationRouteDetailStatusID = (short)ApplicationRouteDetailStatusEnum.Verified; r.VerifiedRouteID = licenceRoute.RouteID; r.NewRouteRequestDetailID = null; r.RouteOrigin = licenceRoute.Route.Origin.Description; r.RouteDestination = licenceRoute.Route.Destination.Description; r.RouteDescription = licenceRoute.Route.Description; r.NationalRouteNumber = licenceRoute.Route.NationalRouteNumber; r.BoardRouteNumber = licenceRoute.Route.BoardRouteNumber; r.RouteLength = licenceRoute.Route.RouteLength; //r.TimeTableDocumentID = route.TimeTableDocumentID; //r.FareScheduleDocumentID = route.FareScheduleDocumentID; r.RouteNumber = null; r.RouteChangeTypeID = (short)RouteChangeTypeEnum.AddExistingLinkedRouteToLicence; r.IsOriginSameAsPhysicalAddress = false; r.IsDestinationArea = false; r.RelatedApplicationLicenceRouteDetailID = null; membersApplicationLicenceRouteDetail.Add(r); } } } } #endregion var model = new ApplicationLicenceRouteModel(); if (!string.IsNullOrEmpty(appDetail.Applicant.PhysicalAddress)) { model.CurrentPhysicalAddress = appDetail.Applicant.PhysicalAddress.Replace('\r', ' '); } else { model.CurrentPhysicalAddress = ""; } model.ApplicationLicenceRouteDetail = applicationLicenceRouteDetail; #region ExistingApplicationLicenceRouteDetail foreach (var route in existingApplicationLicenceRouteDetail) { route.RouteDescription = route.RouteDescription.Replace(Environment.NewLine, "").Replace("\r\n", "").Replace("\n\n", "").Replace("\n", "").Replace("\r", "").Replace("\"", "'").Replace("\t", ""); } model.ExistingApplicationLicenceRouteDetail = existingApplicationLicenceRouteDetail; #endregion #region MembersApplicationLicenceRouteDetail foreach (var route in membersApplicationLicenceRouteDetail) { route.RouteDescription = route.RouteDescription.Replace(Environment.NewLine, "").Replace("\r\n", "").Replace("\n\n", "").Replace("\n", "").Replace("\r", "").Replace("\"", "'").Replace("\t", ""); } model.MembersApplicationLicenceRouteDetail = membersApplicationLicenceRouteDetail; #endregion model.Lookups = GetAddExistingRouteLookups(); var applicationView = db.GetApplicationView(itemId, Profile.UserID); model.WorkflowInstance = WorkflowHelper.GetWorkflowInstanceView(WebHelper.EntityID, WebHelper.ItemID, Profile.UserID); model.ApplicationView = applicationView; 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); return View("Licences.LicenceCharterServiceAreaOfOperation", model); } #endregion #region LicenceRadiusRoute public ActionResult LicenceRadiusRoute(long applicationDetailID, long applicationLicenceID, short serviceTypeID, long applicationLicenceRouteDetailID) { var db = new ApplicationDatabase(); var lldb = new LegitimateDatabase(); 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 appDetail = db.GetApplicationForm(applicationDetailID, Profile.UserID); var applicationLicenceRouteDetail = db.GetApplicationLicenceRouteDetail(applicationLicenceRouteDetailID, applicationLicenceID, serviceTypeID, Profile.UserID); if (applicationLicenceRouteDetail != null && applicationLicenceRouteDetail.ExistingApplicationLicenceRouteDetailPlaces == null) { applicationLicenceRouteDetail.ExistingApplicationLicenceRouteDetailPlaces = new List(); } var membersApplicationLicenceRouteDetail = new List(); #region ExistingApplicationLicenceRouteDetail var existingApplicationLicenceRouteDetail = db.GetApplicationLicencesRouteDetails(applicationDetailID, Profile.UserID).Where(a => a.ApplicationLicenceRouteDetailID != applicationLicenceRouteDetailID).ToList(); #endregion #region GetApplicationApplicant var applicantionApplicant = db.GetApplicationApplicant(applicationDetailID, Profile.UserID); if (applicantionApplicant.VerifiedMemberID != null) { var licenses = lldb.GetVerifiedLicenceByMember(applicantionApplicant.VerifiedMemberID.Value); if (licenses != null) { foreach (var license in licenses) { foreach (var licenceRoute in license.LicenceRoutes) { ApplicationLicenceRouteDetail r = new ApplicationLicenceRouteDetail(); r.ApplicationLicenceRouteDetailID = applicationLicenceRouteDetailID; r.ApplicationLicenceID = applicationLicenceID; r.ApplicationRouteDetailStatusID = (short)ApplicationRouteDetailStatusEnum.Verified; r.VerifiedRouteID = licenceRoute.RouteID; r.NewRouteRequestDetailID = null; r.RouteOrigin = licenceRoute.Route.Origin.Description; r.RouteDestination = licenceRoute.Route.Destination.Description; r.RouteDescription = licenceRoute.Route.Description; r.NationalRouteNumber = licenceRoute.Route.NationalRouteNumber; r.BoardRouteNumber = licenceRoute.Route.BoardRouteNumber; r.RouteLength = licenceRoute.Route.RouteLength; //r.TimeTableDocumentID = route.TimeTableDocumentID; //r.FareScheduleDocumentID = route.FareScheduleDocumentID; r.RouteNumber = null; r.RouteChangeTypeID = (short)RouteChangeTypeEnum.AddExistingLinkedRouteToLicence; r.IsOriginSameAsPhysicalAddress = false; r.IsDestinationArea = false; r.RelatedApplicationLicenceRouteDetailID = null; membersApplicationLicenceRouteDetail.Add(r); } } } } #endregion var model = new ApplicationLicenceRouteModel(); if (!string.IsNullOrEmpty(appDetail.Applicant.PhysicalAddress)) { model.CurrentPhysicalAddress = appDetail.Applicant.PhysicalAddress.Replace('\r', ' '); } else { model.CurrentPhysicalAddress = ""; } model.ApplicationLicenceRouteDetail = applicationLicenceRouteDetail; #region ExistingApplicationLicenceRouteDetail foreach (var route in existingApplicationLicenceRouteDetail) { route.RouteDescription = route.RouteDescription.Replace(Environment.NewLine, "").Replace("\r\n", "").Replace("\n\n", "").Replace("\n", "").Replace("\r", "").Replace("\"", "'").Replace("\t", ""); } model.ExistingApplicationLicenceRouteDetail = existingApplicationLicenceRouteDetail; #endregion #region MembersApplicationLicenceRouteDetail foreach (var route in membersApplicationLicenceRouteDetail) { route.RouteDescription = route.RouteDescription.Replace(Environment.NewLine, "").Replace("\r\n", "").Replace("\n\n", "").Replace("\n", "").Replace("\r", "").Replace("\"", "'").Replace("\t", ""); } model.MembersApplicationLicenceRouteDetail = membersApplicationLicenceRouteDetail; #endregion model.Lookups = GetAddExistingRouteLookups(); var applicationView = db.GetApplicationView(itemId, Profile.UserID); model.WorkflowInstance = WorkflowHelper.GetWorkflowInstanceView(WebHelper.EntityID, WebHelper.ItemID, Profile.UserID); model.ApplicationView = applicationView; 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); return View("Licences.LicenceRadiusRoute", model); } #endregion #region AuthorityRoutes public ActionResult AuthorityRoutes(long applicationDetailID, long applicationLicenceID, short serviceTypeID, long? applicationLicenceRouteDetailID) { var db = new ApplicationDatabase(); var lldb = new LegitimateDatabase(); 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 appDetail = db.GetApplicationForm(applicationDetailID, Profile.UserID); var applicationLicenceRouteDetail = new ApplicationLicenceRouteDetail(); if(applicationLicenceRouteDetailID != null) { applicationLicenceRouteDetail = db.GetApplicationLicenceRouteDetail(applicationLicenceRouteDetailID.Value, applicationLicenceID, serviceTypeID, Profile.UserID); applicationLicenceRouteDetail.RouteDescription = applicationLicenceRouteDetail.RouteDescription.Replace(Environment.NewLine, "").Replace("\r\n", "").Replace("\n\n", "").Replace("\n", "").Replace("\r", "").Replace("\"", "'").Replace("\t", ""); } else { applicationLicenceRouteDetail.ApplicationLicenceID = applicationLicenceID; applicationLicenceRouteDetail.ApplicationRouteDetailStatusID = (short)ApplicationRouteDetailStatusEnum.New; applicationLicenceRouteDetail.RouteChangeTypeID = (short)RouteChangeTypeEnum.AddBrandNewRouteToLicence; applicationLicenceRouteDetail.IsOriginSameAsPhysicalAddress = false; applicationLicenceRouteDetail.IsDestinationArea = false; applicationLicenceRouteDetail.ServiceTypeID = serviceTypeID; } var model = new ApplicationLicenceRouteModel(); model.ApplicationLicenceRouteDetail = applicationLicenceRouteDetail; model.Lookups = GetAddExistingRouteLookups(); var applicationView = db.GetApplicationView(itemId, Profile.UserID); model.WorkflowInstance = WorkflowHelper.GetWorkflowInstanceView(WebHelper.EntityID, WebHelper.ItemID, Profile.UserID); model.ApplicationView = applicationView; 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); return View("Authority.Routes", model); } #endregion #region SaveApplicationLicenceRoute [HttpPost] public JsonNetResult SaveApplicationLicenceRoute(ApplicationLicenceRouteDetail value) { var changes = new List(); var auditDb = new AuditsDatabase(); string routeDescription = ""; #region Cleanup if(String.IsNullOrEmpty(value.RouteDescription)) { value.RouteDescription = ""; } if (String.IsNullOrEmpty(value.RouteOrigin)) { value.RouteOrigin = ""; } if (String.IsNullOrEmpty(value.RouteDestination)) { value.RouteDestination = ""; } value.VerifiedRouteID = null; value.RelatedApplicationLicenceRouteDetailID = null; #endregion if (value.ApplicationLicenceRouteDetailID <= 0) { changes.Add("New application licence route created"); #region ApplicationLicenceRoute var appDb = new ApplicationDatabase(); //don't use database context as we need the values refreshed every time var existingModel = appDb.GetApplicationLicenceRouteDetail(value.ApplicationLicenceRouteDetailID, value.ApplicationLicenceID, value.ServiceTypeID, Profile.UserID); if (existingModel == null) { existingModel = new ApplicationLicenceRouteDetail(); } changes.AddRange(auditDb.GetEntityDifferences(existingModel, value, "ApplicationLicenceRouteDetailID")); Database.Insert(value); #region Create value.ApplicationLicenceRouteDetailPlaces foreach (var place in value.ApplicationLicenceRouteDetailPlaces) { Database.Insert(place); changes.Add(string.Format("{0}, Added places{1}", "ApplicationLicenceRouteDetailPlaces", place.ApplicationLicenceRouteDetailPlaceID)); var blankObj = new ApplicationLicenceRouteDetailPlace(); changes.AddRange(auditDb.GetEntityDifferences(blankObj, place, "ApplicationLicenceRouteDetailPlaceID")); } #endregion #endregion } else { var appDb = new ApplicationDatabase(); //don't use database context as we need the values refreshed every time var existingModel = appDb.GetApplicationLicenceRouteDetail(value.ApplicationLicenceRouteDetailID, value.ApplicationLicenceID, value.ServiceTypeID, Profile.UserID); var existingPlaces = existingModel.ApplicationLicenceRouteDetailPlaces; #region value.ApplicationLicenceRouteDetailPlaces foreach (var place in value.ApplicationLicenceRouteDetailPlaces) { Database.Insert(place); changes.Add(string.Format("{0}, Added places{1}", "ApplicationLicenceRouteDetailPlaces", place.ApplicationLicenceRouteDetailPlaceID)); var blankObj = new ApplicationLicenceRouteDetailPlace(); changes.AddRange(auditDb.GetEntityDifferences(blankObj, place, "ApplicationLicenceRouteDetailPlaceID")); } if (value.ExistingApplicationLicenceRouteDetailPlaces != null) { foreach (var removedApplicationLicenceRouteDetailPlaces in value.ExistingApplicationLicenceRouteDetailPlaces) { changes.Add(string.Format("{0}, Removed Application Licence Route Detail Place, PlaceID : {1}", "ApplicationLicenceRouteDetailPlaces", removedApplicationLicenceRouteDetailPlaces.ApplicationLicenceRouteDetailPlaceID)); Database.Context.Entry(removedApplicationLicenceRouteDetailPlaces).State = System.Data.Entity.EntityState.Deleted; } } #endregion Database.Update(value); changes.AddRange(auditDb.GetEntityDifferences(existingModel, value, "ApplicationLicenceRouteDetailID")); } try { #region Check if can save var model = GetModel(); if (!model.CanEditRouteDetails) { throw new Exception("Security error"); } #endregion Database.Save(); var appDb = new ApplicationDatabase(); //don't use database context as we need the values refreshed every time routeDescription = appDb.CalculateApplicationLicenceRouteDetails(value.ApplicationLicenceRouteDetailID, Profile.UserID); value.RouteDescription = routeDescription; } catch (DbEntityValidationException e) { foreach (var eve in e.EntityValidationErrors) { System.Diagnostics.Debug.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:", eve.Entry.Entity.GetType().Name, eve.Entry.State); foreach (var ve in eve.ValidationErrors) { System.Diagnostics.Debug.WriteLine("- Property: \"{0}\", Error: \"{1}\"", ve.PropertyName, ve.ErrorMessage); } } throw; } if (changes.Count > 0) { auditDb.WriteEntries(2 /*Application*/, 2 /*Updated*/, changes, 1000 /*ApplicationRequestDetails*/, value.ApplicationLicenceRouteDetailID, Profile.UserID); } return new JsonNetResult() { Data = new JsonBaseResult() { Success = true, Error = "", Result = value } }; } #endregion #region SaveApplicationAuthorityRoute [HttpPost] public JsonNetResult SaveApplicationAuthorityRoute(ApplicationLicenceRouteDetail value) { var changes = new List(); var auditDb = new AuditsDatabase(); #region Cleanup if (String.IsNullOrEmpty(value.RouteDescription)) { value.RouteDescription = ""; } if (String.IsNullOrEmpty(value.RouteOrigin)) { value.RouteOrigin = ""; } if (String.IsNullOrEmpty(value.RouteDestination)) { value.RouteDestination = ""; } #endregion try { if (value.ApplicationLicenceRouteDetailID > 0) { #region Update Route var appDb = new ApplicationDatabase(); //don't use database context as we need the values refreshed every time var existingModel = appDb.GetApplicationLicenceRouteDetail(value.ApplicationLicenceRouteDetailID, value.ApplicationLicenceID, value.ServiceTypeID, Profile.UserID); var existingPlaces = existingModel.ApplicationLicenceRouteDetailPlaces; Database.Update(value); changes.AddRange(auditDb.GetEntityDifferences(existingModel, value, "ApplicationLicenceRouteDetailID")); #endregion } else { changes.Add("New application licence route created"); #region ApplicationLicenceRoute var appDb = new ApplicationDatabase(); //don't use database context as we need the values refreshed every time var existingModel = appDb.GetApplicationLicenceRouteDetail(value.ApplicationLicenceRouteDetailID, value.ApplicationLicenceID, value.ServiceTypeID, Profile.UserID); if (existingModel == null) { existingModel = new ApplicationLicenceRouteDetail(); } changes.AddRange(auditDb.GetEntityDifferences(existingModel, value, "ApplicationLicenceRouteDetailID")); Database.Insert(value); #endregion } #region Check if can save var model = GetModel(); if (!model.CanEditRouteDetails) { throw new Exception("Security error"); } #endregion Database.Save(); } catch (DbEntityValidationException e) { foreach (var eve in e.EntityValidationErrors) { System.Diagnostics.Debug.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:", eve.Entry.Entity.GetType().Name, eve.Entry.State); foreach (var ve in eve.ValidationErrors) { System.Diagnostics.Debug.WriteLine("- Property: \"{0}\", Error: \"{1}\"", ve.PropertyName, ve.ErrorMessage); } } throw; } if (changes.Count > 0) { auditDb.WriteEntries(2 /*Application*/, 2 /*Updated*/, changes, 1000 /*ApplicationRequestDetails*/, value.ApplicationLicenceRouteDetailID, Profile.UserID); } return new JsonNetResult() { Data = new JsonBaseResult() { Success = true, Error = "", Result = value } }; } #endregion #region SaveApplicationLicenceRadiusRoute [HttpPost] public JsonNetResult SaveApplicationLicenceRadiusRoute(ApplicationLicenceRouteDetail value) { var changes = new List(); var auditDb = new AuditsDatabase(); string routeDescription = ""; #region Cleanup if (String.IsNullOrEmpty(value.RouteDescription)) { value.RouteDescription = ""; } if (String.IsNullOrEmpty(value.RouteOrigin)) { value.RouteOrigin = ""; } if (String.IsNullOrEmpty(value.RouteDestination)) { value.RouteDestination = ""; } value.VerifiedRouteID = null; value.RelatedApplicationLicenceRouteDetailID = null; #endregion if (value.ApplicationLicenceRouteDetailID <= 0) { changes.Add("New application licence route created"); #region ApplicationLicenceRoute var appDb = new ApplicationDatabase(); //don't use database context as we need the values refreshed every time var existingModel = appDb.GetApplicationLicenceRouteDetail(value.ApplicationLicenceRouteDetailID, value.ApplicationLicenceID, value.ServiceTypeID, Profile.UserID); if (existingModel == null) { existingModel = new ApplicationLicenceRouteDetail(); } changes.AddRange(auditDb.GetEntityDifferences(existingModel, value, "ApplicationLicenceRouteDetailID")); Database.Insert(value); #region Create value.ApplicationLicenceRouteDetailPlaces foreach (var place in value.ApplicationLicenceRouteDetailPlaces) { Database.Insert(place); changes.Add(string.Format("{0}, Added places{1}", "ApplicationLicenceRouteDetailPlaces", place.ApplicationLicenceRouteDetailPlaceID)); var blankObj = new ApplicationLicenceRouteDetailPlace(); changes.AddRange(auditDb.GetEntityDifferences(blankObj, place, "ApplicationLicenceRouteDetailPlaceID")); } #endregion #endregion } else { var appDb = new ApplicationDatabase(); //don't use database context as we need the values refreshed every time var existingModel = appDb.GetApplicationLicenceRouteDetail(value.ApplicationLicenceRouteDetailID, value.ApplicationLicenceID, value.ServiceTypeID, Profile.UserID); var existingPlaces = existingModel.ApplicationLicenceRouteDetailPlaces; #region value.ApplicationLicenceRouteDetailPlaces foreach (var place in value.ApplicationLicenceRouteDetailPlaces) { Database.Insert(place); changes.Add(string.Format("{0}, Added places{1}", "ApplicationLicenceRouteDetailPlaces", place.ApplicationLicenceRouteDetailPlaceID)); var blankObj = new ApplicationLicenceRouteDetailPlace(); changes.AddRange(auditDb.GetEntityDifferences(blankObj, place, "ApplicationLicenceRouteDetailPlaceID")); } if (value.ExistingApplicationLicenceRouteDetailPlaces != null) { foreach (var removedApplicationLicenceRouteDetailPlaces in value.ExistingApplicationLicenceRouteDetailPlaces) { changes.Add(string.Format("{0}, Removed Application Licence Route Detail Place, PlaceID : {1}", "ApplicationLicenceRouteDetailPlaces", removedApplicationLicenceRouteDetailPlaces.ApplicationLicenceRouteDetailPlaceID)); Database.Context.Entry(removedApplicationLicenceRouteDetailPlaces).State = System.Data.Entity.EntityState.Deleted; } } #endregion Database.Update(value); changes.AddRange(auditDb.GetEntityDifferences(existingModel, value, "ApplicationLicenceRouteDetailID")); } try { #region Check if can save var model = GetModel(); if (!model.CanEditRouteDetails) { throw new Exception("Security error"); } #endregion Database.Save(); var appDb = new ApplicationDatabase(); //don't use database context as we need the values refreshed every time routeDescription = appDb.CalculateApplicationLicenceRadiusRouteDetails(value.ApplicationLicenceRouteDetailID, Profile.UserID); value.RouteDescription = routeDescription; } catch (DbEntityValidationException e) { foreach (var eve in e.EntityValidationErrors) { System.Diagnostics.Debug.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:", eve.Entry.Entity.GetType().Name, eve.Entry.State); foreach (var ve in eve.ValidationErrors) { System.Diagnostics.Debug.WriteLine("- Property: \"{0}\", Error: \"{1}\"", ve.PropertyName, ve.ErrorMessage); } } throw; } if (changes.Count > 0) { auditDb.WriteEntries(2 /*Application*/, 2 /*Updated*/, changes, 1000 /*ApplicationRequestDetails*/, value.ApplicationLicenceRouteDetailID, Profile.UserID); } return new JsonNetResult() { Data = new JsonBaseResult() { Success = true, Error = "", Result = value } }; } #endregion #region LinkApplicationLicenceRoute [HttpPost] public JsonNetResult LinkApplicationLicenceRoute(ApplicationLicenceRouteDetail value) { var changes = new List(); var auditDb = new AuditsDatabase(); string routeDescription = ""; #region Cleanup if (String.IsNullOrEmpty(value.RouteDescription)) { value.RouteDescription = ""; } if (String.IsNullOrEmpty(value.RouteOrigin)) { value.RouteOrigin = ""; } if (String.IsNullOrEmpty(value.RouteDestination)) { value.RouteDestination = ""; } value.VerifiedRouteID = null; #endregion if (value.ApplicationLicenceRouteDetailID <= 0) { changes.Add("New application licence route created"); #region ApplicationLicenceRoute var appDb = new ApplicationDatabase(); //don't use database context as we need the values refreshed every time var existingModel = appDb.GetApplicationLicenceRouteDetail(value.ApplicationLicenceRouteDetailID, value.ApplicationLicenceID, value.ServiceTypeID, Profile.UserID); if (existingModel == null) { existingModel = new ApplicationLicenceRouteDetail(); } changes.AddRange(auditDb.GetEntityDifferences(existingModel, value, "ApplicationLicenceRouteDetailID")); Database.Insert(value); #region Create value.ApplicationLicenceRouteDetailPlaces foreach (var place in value.ApplicationLicenceRouteDetailPlaces) { Database.Insert(place); changes.Add(string.Format("{0}, Added places{1}", "ApplicationLicenceRouteDetailPlaces", place.ApplicationLicenceRouteDetailPlaceID)); var blankObj = new ApplicationLicenceRouteDetailPlace(); changes.AddRange(auditDb.GetEntityDifferences(blankObj, place, "ApplicationLicenceRouteDetailPlaceID")); } #endregion #endregion } else { var appDb = new ApplicationDatabase(); //don't use database context as we need the values refreshed every time var existingModel = appDb.GetApplicationLicenceRouteDetail(value.ApplicationLicenceRouteDetailID, value.ApplicationLicenceID, value.ServiceTypeID, Profile.UserID); var existingPlaces = existingModel.ApplicationLicenceRouteDetailPlaces; #region value.ApplicationLicenceRouteDetailPlaces foreach (var place in value.ApplicationLicenceRouteDetailPlaces) { Database.Insert(place); changes.Add(string.Format("{0}, Added places{1}", "ApplicationLicenceRouteDetailPlaces", place.ApplicationLicenceRouteDetailPlaceID)); var blankObj = new ApplicationLicenceRouteDetailPlace(); changes.AddRange(auditDb.GetEntityDifferences(blankObj, place, "ApplicationLicenceRouteDetailPlaceID")); } if (value.ExistingApplicationLicenceRouteDetailPlaces != null) { foreach (var removedApplicationLicenceRouteDetailPlaces in value.ExistingApplicationLicenceRouteDetailPlaces) { changes.Add(string.Format("{0}, Removed Application Licence Route Detail Place, PlaceID : {1}", "ApplicationLicenceRouteDetailPlaces", removedApplicationLicenceRouteDetailPlaces.ApplicationLicenceRouteDetailPlaceID)); Database.Context.Entry(removedApplicationLicenceRouteDetailPlaces).State = System.Data.Entity.EntityState.Deleted; } } #endregion Database.Update(value); changes.AddRange(auditDb.GetEntityDifferences(existingModel, value, "ApplicationLicenceRouteDetailID")); } try { #region Check if can save var model = GetModel(); if (!model.CanEditRouteDetails) { throw new Exception("Security error"); } #endregion Database.Save(); var appDb = new ApplicationDatabase(); //don't use database context as we need the values refreshed every time routeDescription = appDb.CalculateApplicationLicenceRouteDetails(value.ApplicationLicenceRouteDetailID, Profile.UserID); value.RouteDescription = routeDescription; } catch (DbEntityValidationException e) { foreach (var eve in e.EntityValidationErrors) { System.Diagnostics.Debug.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:", eve.Entry.Entity.GetType().Name, eve.Entry.State); foreach (var ve in eve.ValidationErrors) { System.Diagnostics.Debug.WriteLine("- Property: \"{0}\", Error: \"{1}\"", ve.PropertyName, ve.ErrorMessage); } } throw; } if (changes.Count > 0) { auditDb.WriteEntries(2 /*Application*/, 2 /*Updated*/, changes, 1000 /*ApplicationRequestDetails*/, value.ApplicationLicenceRouteDetailID, Profile.UserID); } return new JsonNetResult() { Data = new JsonBaseResult() { Success = true, Error = "", Result = value } }; } #endregion #region LinkApplicationLicenceRouteToMemberRoute [HttpPost] public JsonNetResult LinkApplicationLicenceRouteToMemberRoute(ApplicationLicenceRouteDetail value) { var changes = new List(); var auditDb = new AuditsDatabase(); #region Cleanup if (String.IsNullOrEmpty(value.RouteDescription)) { value.RouteDescription = ""; } if (String.IsNullOrEmpty(value.RouteOrigin)) { value.RouteOrigin = ""; } if (String.IsNullOrEmpty(value.RouteDestination)) { value.RouteDestination = ""; } value.RelatedApplicationLicenceRouteDetailID = null; #endregion #region Get Service Types For licence var db = new ApplicationDatabase(); //don't use database context as we need the values refreshed every time var licenceServices = db.GetLicenceServiceDetails(value.ApplicationLicenceID, Profile.UserID); #endregion #region Add Route foreach(var licenceService in licenceServices.Services.Where(a => a.ServiceTypeID != null).ToList()) { value.ServiceTypeID = licenceService.ServiceTypeID.Value; if (value.ApplicationLicenceRouteDetailID <= 0) { changes.Add("New application licence route created"); #region ApplicationLicenceRoute var appDb = new ApplicationDatabase(); //don't use database context as we need the values refreshed every time var existingModel = appDb.GetApplicationLicenceRouteDetail(value.ApplicationLicenceRouteDetailID, value.ApplicationLicenceID, value.ServiceTypeID, Profile.UserID); if (existingModel == null) { existingModel = new ApplicationLicenceRouteDetail(); } changes.AddRange(auditDb.GetEntityDifferences(existingModel, value, "ApplicationLicenceRouteDetailID")); Database.Insert(value); #endregion } else { var appDb = new ApplicationDatabase(); //don't use database context as we need the values refreshed every time var existingModel = appDb.GetApplicationLicenceRouteDetail(value.ApplicationLicenceRouteDetailID, value.ApplicationLicenceID, value.ServiceTypeID, Profile.UserID); var existingPlaces = existingModel.ApplicationLicenceRouteDetailPlaces; #region value.ApplicationLicenceRouteDetailPlaces if (value.ExistingApplicationLicenceRouteDetailPlaces != null) { foreach (var removedApplicationLicenceRouteDetailPlaces in value.ExistingApplicationLicenceRouteDetailPlaces) { changes.Add(string.Format("{0}, Removed Application Licence Route Detail Place, PlaceID : {1}", "ApplicationLicenceRouteDetailPlaces", removedApplicationLicenceRouteDetailPlaces.ApplicationLicenceRouteDetailPlaceID)); Database.Context.Entry(removedApplicationLicenceRouteDetailPlaces).State = System.Data.Entity.EntityState.Deleted; } } #endregion Database.Update(value); changes.AddRange(auditDb.GetEntityDifferences(existingModel, value, "ApplicationLicenceRouteDetailID")); } try { #region Check if can save var model = GetModel(); if (!model.CanEditRouteDetails) { throw new Exception("Security error"); } #endregion Database.Save(); } catch (DbEntityValidationException e) { foreach (var eve in e.EntityValidationErrors) { System.Diagnostics.Debug.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:", eve.Entry.Entity.GetType().Name, eve.Entry.State); foreach (var ve in eve.ValidationErrors) { System.Diagnostics.Debug.WriteLine("- Property: \"{0}\", Error: \"{1}\"", ve.PropertyName, ve.ErrorMessage); } } throw; } if (changes.Count > 0) { auditDb.WriteEntries(2 /*Application*/, 2 /*Updated*/, changes, 1000 /*ApplicationRequestDetails*/, value.ApplicationLicenceRouteDetailID, Profile.UserID); } } #endregion return new JsonNetResult() { Data = new JsonBaseResult() { Success = true, Error = "", Result = value } }; } #endregion #region RemoveLicenceRoute [HttpPost] public JsonNetResult RemoveLicenceRoute(long applicationLicenceID, long applicationLicenceRouteDetailID) { #region Check if can save var model = GetModel(); if (!model.CanEditRouteDetails) { throw new Exception("Security error"); } #endregion var db = new ApplicationDatabase(); var deleteAction = db.RemoveLicenceRoute(applicationLicenceID, applicationLicenceRouteDetailID, Profile.UserID); return new JsonNetResult() { Data = new JsonBaseResult() { Result = deleteAction, Success = true } }; } #endregion } }