using Neo.Afx.Common; using Neo.Afx.Security; using Neo.Afx.Services.Integration; 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 PaymentDetails /// /// Load the payment details /// /// public ActionResult PaymentDetails() { 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() { canSave = (activeUserTask != null && activeUserTask.WorkflowTemplateStepNumber == 2) } }; var applicationDatabase = new ApplicationDatabase(); var application = applicationDatabase.GetApplicationForm(itemId, Profile.UserID); var receipts = applicationDatabase.GetApplicationReceipts(itemId, Profile.UserID); model.Data = receipts; model.AmountDue = application.AmountDue; model.AmountPaid = application.AmountPaid; model.Lookups = GetLookupsForPayment(); model.WorkflowInstance = WorkflowHelper.GetWorkflowInstanceView(WebHelper.EntityID, WebHelper.ItemID, Profile.UserID); model.UnassignedReceipts = applicationDatabase.GetApplicantUnassignedReceipt(WebHelper.ItemID, Profile.UserID); return View("PaymentDetails", model); } #endregion #region CreateApplicationReceipt /// /// Create Application Receipt /// /// /// [HttpPost] public JsonNetResult CreateApplicationReceipt(long applicationDetailID) { try { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), SecurableEnum.ApplicationsModule_Receipts_Generateandprintreceipt)) { throw new Exception("#EXPOSE_ERROR#Security error"); } #region Check if can save var model = GetModel(); if (!model.Ui.canSubmit) { throw new Exception("#EXPOSE_ERROR#Security error"); } if (!model.CanEditPaymentDetails) { throw new Exception("#EXPOSE_ERROR#Security error"); } #endregion var database = new LegitimateDatabase(); var applicationDatabase = new ApplicationDatabase(); var errorMessage = ""; var receiptDetailID = database.ReceiptApplication(applicationDetailID, Profile.UserID, out errorMessage); var itemId = WebHelper.ItemID; var application = applicationDatabase.GetApplicationForm(itemId, Profile.UserID); return new JsonNetResult() { Data = new JsonBaseResult() { Success = true, Error = "", ErrorCode = "", Result = new { ReceiptDetail = (receiptDetailID > 0) ? applicationDatabase.GetApplicationReceipt(applicationDetailID, receiptDetailID, Profile.UserID) : null, AmountDue = application.AmountDue, AmountPaid = application.AmountPaid } } }; } catch(Exception ex) { #region Error Handling #region Error Additional Data Dictionary additionalData = new Dictionary(); additionalData.Add("applicationDetailID", applicationDetailID); #endregion string error = ErrorHelper.ProcessError(ex, "ApplicationRequest", "CreateApplicationReceipt", additionalData); #endregion return new JsonNetResult() { Data = new JsonBaseResult() { Success = false, ErrorCode = "ERROR", Error = error } }; } } #endregion #region AssignApplicationReceipt /// /// Assign a prepaid application receipt /// /// /// /// [HttpPost] public JsonNetResult AssignApplicationReceipt(long receiptDetailID, long applicationDetailID) { try { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), SecurableEnum.ApplicationsModule_Receipts_Generateandprintreceipt)) { throw new Exception("#EXPOSE_ERROR#Security error"); } #region Check if can save var model = GetModel(); if (!model.Ui.canSubmit) { throw new Exception("#EXPOSE_ERROR#Security error"); } if (!model.CanEditPaymentDetails) { throw new Exception("#EXPOSE_ERROR#Security error"); } #endregion var itemId = WebHelper.ItemID; var applicationDatabase = new ApplicationDatabase(); Pr_ApplicationReceiptsGet_Result receipt = new Pr_ApplicationReceiptsGet_Result(); ApplicationDetail application = new ApplicationDetail(); applicationDatabase.AssignReceiptToApplication(receiptDetailID, applicationDetailID, Profile.UserID); receipt = applicationDatabase.GetApplicationReceipt(applicationDetailID, receiptDetailID, Profile.UserID); application = applicationDatabase.GetApplicationForm(itemId, Profile.UserID); return new JsonNetResult() { Data = new JsonBaseResult() { Success = true, Error = "", ErrorCode = "", Result = new { ReceiptDetail = receipt, AmountDue = application.AmountDue, AmountPaid = application.AmountPaid } } }; } catch(Exception ex) { #region Error Handling #region Error Additional Data Dictionary additionalData = new Dictionary(); additionalData.Add("receiptDetailID", receiptDetailID); additionalData.Add("applicationDetailID", applicationDetailID); #endregion var errorMessage = ErrorHelper.ProcessError(ex, "ApplicationRequest", "AssignApplicationReceipt", additionalData); #endregion return new JsonNetResult() { Data = new JsonBaseResult() { Success = false, ErrorCode = "ERROR", Error = errorMessage } }; } } #endregion #region ApplicationReceiptSavePaymentType /// /// Update payment type on receipt /// /// /// /// /// [HttpPost] public JsonNetResult ApplicationReceiptSavePaymentType(long applicationDetailID, long receiptDetailID, short paymentTypeID) { try { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), SecurableEnum.ApplicationsModule_Receipts_Generateandprintreceipt)) { throw new Exception("#EXPOSE_ERROR#Security error"); } #region Check if can save var model = GetModel(); if (!model.Ui.canSubmit) { throw new Exception("#EXPOSE_ERROR#Security error"); } if (!model.CanEditPaymentDetails) { throw new Exception("#EXPOSE_ERROR#Security error"); } #endregion var applicationDatabase = new ApplicationDatabase(); applicationDatabase.ReceiptApplicationPaymentTypeUpdate(applicationDetailID, receiptDetailID, paymentTypeID, Profile.UserID); return new JsonNetResult() { Data = new JsonBaseResult() { Success = true, Error = "", ErrorCode = "", Result = new { } } }; } catch (Exception ex) { #region Error Handling #region Error Additional Data Dictionary additionalData = new Dictionary(); additionalData.Add("receiptDetailID", receiptDetailID); additionalData.Add("applicationDetailID", applicationDetailID); additionalData.Add("paymentTypeID", paymentTypeID); #endregion var errorMessage = ErrorHelper.ProcessError(ex, "ApplicationRequest", "ApplicationReceiptSavePaymentType", additionalData); #endregion return new JsonNetResult() { Data = new JsonBaseResult() { Success = false, ErrorCode = "ERROR", Error = errorMessage } }; } } #endregion #region StartReceiptPrintout [HttpPost] public JsonNetResult StartReceiptPrintout(int entityID, long itemID, short printoutTypeID, bool isReprint, string reprintReason, bool isTestPrint) { try { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), SecurableEnum.ApplicationsModule_Receipts_Createreceipt) && !isReprint) { throw new Exception("#EXPOSE_ERROR#Security error"); } if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), SecurableEnum.ApplicationsModule_ApplicationRequest_ReprintReceipt) && isReprint) { throw new Exception("#EXPOSE_ERROR#Security error"); } var database = new LegitimateDatabase(); database.WriteAuditEntry((int)Profile.UserID, "Application", "Receipt Printed", reprintReason, false, false, "receiptdetails", itemID); var verificationToken = database.CreateVerifiedPrintout(entityID, itemID, printoutTypeID, Profile.UserID, isReprint, reprintReason, isTestPrint, ""); 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 #region GetLookupsForPayment /// /// Get Lookups For Payment /// /// public List GetLookupsForPayment() { var lookups = new List(); var integrationStore = new SqlIntegrationStore(); try { integrationStore.Open(); lookups.Add(new LookupList("PaymentTypes", integrationStore.GetDataEntities("PaymentTypes", string.Empty).OrderBy(a => a.Title))); } finally { integrationStore.Close(); } return lookups; } #endregion } }