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
}
}