using System; using System.Text; using System.Data; using System.Linq; using System.Web.Mvc; using System.Data.Entity.Validation; using System.Collections.Generic; using Neo.Afx.Mvc; using Neo.Afx.ViewModels; using Neo.Afx.ComponentModel; using Neo.Afx.Services.Integration; using Neo.Afx.Services.Workflows; using Neo.Afx.Services.Workflows.Entities; using Neo.Afx.Services.Forms.Entities; using Neo.LegitimateLicences.Common; using Neo.LegitimateLicences.Data.Models; using Neo.LegitimateLicences.NewRouteRequest.Models; using Neo.LegitimateLicences.Data; using Neo.Afx.Services.Audits; using Neo.LegitimateLicences.Common.Helpers; using Neo.LegitimateLicences.NewRouteRequest.Models.Database; using NewRouteRequestDetail = Neo.LegitimateLicences.NewRouteRequest.Models.Database.NewRouteRequestDetail; using Neo.Afx.Common; namespace Neo.LegitimateLicences.NewRouteRequest { public partial class NewRouteRequestController { #region Save [HttpPost] public JsonNetResult Save(NewRouteRequestDetail value) { var changes = new List(); var auditDb = new AuditsDatabase(); var isNew = WebHelper.ItemID == -1; 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.NewRouteRequestDetails, itemId, taskId, Profile.UserID); } if (activeUserTask == null) { activeUserTask = WorkflowHelper.GetActiveUserTask(Profile.UserID, EntityEnum.NewRouteRequestDetails, itemId); } #endregion var canSubmit = (activeUserTask != null && activeUserTask.WorkflowTemplateStepTypeID == (short)WorkflowTemplateStepTypeEnum.DataCapture); if(!canSubmit) { return new JsonNetResult() { Data = new JsonBaseResult() { Success = false, ErrorCode = "ERROR", Error = "Security error." } }; } if (value.NewRouteRequestDetailID == Database.NewID) { value.CreatedDate = DateTime.Now; value.CreatedByID = Profile.UserID; value.UpdatedDate = DateTime.Now; value.UpdatedByID = Profile.UserID; Database.Insert(value); } else { var routeDb = new NewRouteDatabase(); //don't use database as we need the values refreshed every time var existingModel = routeDb.GetNewRouteRequestForm(value.NewRouteRequestDetailID, Profile.UserID); if (existingModel != null && existingModel.UpdatedDate.ToLongTimeString() != value.UpdatedDate.ToLongTimeString()) { return new JsonNetResult() { Data = new JsonBaseResult() { Success = false, ErrorCode = "ERROR", Error = "The record has been modified by someone else. Please try again." } }; } value.UpdatedDate = DateTime.Now; value.UpdatedByID = Profile.UserID; #region value.Nodes foreach (var node in value.Nodes) { if (node.NewRouteRouteNodeID > 0) { Database.Update(node); } else { Database.Insert(node); } } if (value.RemovedNodes != null) { foreach (var removedNode in value.RemovedNodes) { Database.Context.Entry(removedNode).State = System.Data.Entity.EntityState.Deleted; } } #endregion Database.Update(value); changes.AddRange(auditDb.GetEntityDifferences(existingModel, value, "NewRouteRequestDetailID")); } try { Database.Save(); WorkflowsDatabase workflowsDatabase = new WorkflowsDatabase(); workflowsDatabase.ExecutePostFormSave(value.WorkflowInstanceID.Value, Profile.UserID); if (changes.Count > 0) { auditDb.WriteEntries(2 /*Application*/, 2 /*Updated*/, changes, 1002 /*NewRouteRequestDetails*/, value.NewRouteRequestDetailID, Profile.UserID); } } catch (Exception ex) { return new JsonNetResult() { Data = new JsonBaseResult() { Success = false, ErrorCode = "ERROR", Error = string.Format("Error: {0}", new LegitimateDatabase().GetInnermostMessage(ex)) } }; } var formDb = new NewRouteDatabase(); var formData = formDb.GetNewRouteRequestForm(value.NewRouteRequestDetailID, Profile.UserID); return new JsonNetResult() { Data = new JsonBaseResult() { Result = formData, Success = true } }; } #endregion } }