using Neo.Afx.Common; using Neo.Afx.ComponentModel; using Neo.Afx.Mvc; using Neo.Afx.Security; using Neo.Afx.Services.Integration; using Neo.Afx.Services.Notifications.Entities; using Neo.Afx.Services.Workflows.Entities; using Neo.Afx.ViewModels; using Neo.LegitimateLicences.AccreditationIssueRequest.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; using System.Web.Mvc; namespace Neo.LegitimateLicences.AccreditationIssueRequest { public partial class AccreditationIssueRequestController { #region Printing public ActionResult Printing() { var isNew = WebHelper.ItemID == -1; var itemId = WebHelper.ItemID; ////var activeUserTask = WorkflowHelper.GetActiveUserTask(Profile.UserID, Entity.Application, itemId); var model = new AccreditationIssueRequestPrintingModel { UserSecurables = (Profile.Securables != null) ? Profile.Securables.ToList() : new List() ////IsActivityVisible = !isNew, ////IsSettingsVisible = false, ////IsCommentsVisible = !isNew, ////IsSearchVisible = true }; var db = new AccreditationIssueDatabase(); model.Data = db.GetAccreditationIssueForm(itemId, Profile.UserID); model.WorkflowInstance = WorkflowHelper.GetWorkflowInstanceView(WebHelper.EntityID, WebHelper.ItemID, Profile.UserID); ViewBag.IsReadOnly = ((Vw_WorkflowInstance)model.WorkflowInstance).WorkflowInstanceStatusID == 2; /*2=completed*/ return View("Printing", model); } #endregion #region StartPrintout [HttpPost] public JsonResult StartPrintout(int entityID, long itemID, short printoutTypeID, string certificateNumber, bool isReprint, string reprintReason, bool isTestPrint) { var database = new LegitimateDatabase(); if (isTestPrint) { database.WriteAuditEntry((int)Profile.UserID, "Application", "Accreditation Test Print", "", false, false, "licence", itemID); } else { if (!isReprint) { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), SecurableEnum.OperatingLicencesModule_LicenceIssueRequest_PrintLicence_Actual) && !SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), SecurableEnum.OperatingLicencesModule_LicenceIssueRequest_PrintLicence_Test)) { throw new Exception("Security error"); } } else { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), SecurableEnum.OperatingLicencesModule_LicenceIssueRequest_RePrintLicence)) { throw new Exception("Security error"); } } } var verificationToken = ""; try { verificationToken = database.CreateVerifiedPrintout(entityID, itemID, printoutTypeID, Profile.UserID, isReprint, reprintReason, isTestPrint, certificateNumber); } 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); additionalData.Add("certificateNumber", certificateNumber); #endregion string error = ErrorHelper.ProcessError(ex, "AccreditationIssueRequest", "StartPrintout", additionalData); #endregion } var result = new { Success = true, PrintoutToken = verificationToken, ErrorMessage = "" }; return Json(result, JsonSerializerOptions.None); } #endregion #region GetVerifiedOperatingLicence [HttpPost] public JsonResult GetVerifiedOperatingLicence(long licenceID, string documentNumber, bool isReprint, string reprintReason) { if (!isReprint) { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), SecurableEnum.OperatingLicencesModule_LicenceIssueRequest_PrintLicence_Actual) && !SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), SecurableEnum.OperatingLicencesModule_LicenceIssueRequest_PrintLicence_Test)) { throw new Exception("Security error"); } } else { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), SecurableEnum.OperatingLicencesModule_LicenceIssueRequest_RePrintLicence)) { throw new Exception("Security error"); } } var database = new LegitimateDatabase(); var errorMessage = ""; var ol = database.UpdateOperatingLicence(licenceID, documentNumber, isReprint, reprintReason, Profile.UserID, out errorMessage); if (isReprint) { database.WriteAuditEntry((int)Profile.UserID, "Application", "LIR Reprint", reprintReason, false, false, "licence", licenceID); } else { database.WriteAuditEntry((int)Profile.UserID, "Application", "LIR Print", reprintReason, false, false, "licence", licenceID); } if (errorMessage == "" && !string.IsNullOrEmpty(ol.LicenceExceptions)) { errorMessage = ol.LicenceExceptions; ol = null; } var result = new { OperatingLicence = ol, ServerDate = DateTime.Now.ToString("dd MMM yyyy HH:mm"), ErrorMessage = errorMessage }; return Json(result, JsonSerializerOptions.None); } #endregion #region GetOperatingLicenceDetails [HttpPost] public JsonResult GetOperatingLicenceDetails(long licenceID) { var database = new LegitimateDatabase(); var licence = database.GetVerifiedOperatingLicence(licenceID); var result = new { OperatingLicence = (string.IsNullOrEmpty(licence.LicenceExceptions)) ? licence : null, ServerDate = DateTime.Now.ToString("dd MMM yyyy HH:mm"), ErrorMessage = licence.LicenceExceptions }; return Json(result, JsonSerializerOptions.None); } #endregion #region IssueWithoutPrint [HttpPost] public JsonResult IssueWithoutPrint(long licenceID, string reason) { var database = new LegitimateDatabase(); var errorMessage = ""; if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), SecurableEnum.OperatingLicencesModule_LicenceIssueRequest_IssueWithoutPrint)) { throw new Exception("Security error"); } try { database.IssueLicenceWithoutPrint(licenceID, reason, Profile.UserID); } catch (Exception ex) { errorMessage = database.GetInnermostMessage(ex); #region Error Handling #region Error Additional Data Dictionary additionalData = new Dictionary(); additionalData.Add("licenceID", licenceID); additionalData.Add("reason", reason); #endregion string error = ErrorHelper.ProcessError(ex, "AccreditationIssueRequest", "IssueWithoutPrint", additionalData); #endregion } var result = new { ErrorMessage = errorMessage }; return Json(result, JsonSerializerOptions.None); } #endregion #region GetStationeryNumber [HttpPost] public JsonResult GetStationeryNumber() { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), Common.SecurableEnum.OperatingLicencesModule_Issuing_LicencesAwaitingVerificationandPrinting)) { throw new Exception("Security error"); } var db = new LegitimateDatabase(); var success = true; var errorMessage = ""; Stationery stationery = new Stationery(); try { stationery = db.GetIssuedToStationery(Profile.UserID); if (stationery == null) { throw new Exception("No issued stationary found for " + Profile.FullName); } } catch (Exception ex) { success = false; errorMessage = db.GetInnermostMessage(ex); #region Error Handling #region Error Additional Data Dictionary additionalData = new Dictionary(); #endregion string error = ErrorHelper.ProcessError(ex, "AccreditationIssueRequest", "GetStationeryNumber", additionalData); #endregion } return Json(new { success, stationery, errorMessage }, JsonSerializerOptions.None); } #endregion #region MarkAsPrinted [HttpPost] public JsonResult MarkAsPrinted(int entityID, long itemID, short printoutTypeID, string certificateNumber, bool isReprint, string reprintReason, bool isTestPrint, string verificationToken, long stationeryID) { var database = new LegitimateDatabase(); if (isTestPrint) { database.WriteAuditEntry((int)Profile.UserID, "Application", "LIR Test Print", "", false, false, "licence", itemID); } else { if (!isReprint) { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), SecurableEnum.OperatingLicencesModule_LicenceIssueRequest_PrintLicence_Actual) && !SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), SecurableEnum.OperatingLicencesModule_LicenceIssueRequest_PrintLicence_Test)) { throw new Exception("Security error"); } } else { if (!SecurityHelper.UserHasAccessToSecurable(Profile.Securables.ToList(), SecurableEnum.OperatingLicencesModule_LicenceIssueRequest_RePrintLicence)) { throw new Exception("Security error"); } } var errorMessage = ""; var acc = database.UpdateAccreditation(itemID, certificateNumber, isReprint, reprintReason, Profile.UserID, out errorMessage); if (string.IsNullOrEmpty(errorMessage)) { if (isReprint) { database.WriteAuditEntry((int)Profile.UserID, "Application", "Accreditation Reprint", reprintReason, false, false, "accreditation", itemID); } else { database.WriteAuditEntry((int)Profile.UserID, "Application", "Accreditation Print", reprintReason, false, false, "accreditation", itemID); } } else { var errorResult = new { Success = false, ErrorMessage = errorMessage }; return Json(errorResult, JsonSerializerOptions.None); } } #region Flag Printing Request is Successful database.UpdateVerifiedPrintout(entityID, itemID, verificationToken, certificateNumber, true, Profile.UserID); database.UpdateStationeryStatus(stationeryID, (short)StationeryStatusEnum.Used, "", Profile.UserID); #endregion var result = new { Success = true, PrintoutToken = verificationToken, ErrorMessage = "" }; return Json(result, JsonSerializerOptions.None); } #endregion #region UpdateStationeryStatus [HttpPost] public JsonResult UpdateStationeryStatus(long stationeryID, short stationeryStatusID, string comments) { var database = new LegitimateDatabase(); try { #region Flag Printing Request is Successful database.UpdateStationeryStatus(stationeryID, stationeryStatusID, comments, Profile.UserID); #endregion } catch (Exception ex) { #region Error Handling #region Error Additional Data Dictionary additionalData = new Dictionary(); additionalData.Add("stationeryID", stationeryID); additionalData.Add("stationeryStatusID", stationeryStatusID); additionalData.Add("comments", comments); #endregion string error = ErrorHelper.ProcessError(ex, "AccreditationIssueRequest", "UpdateStationeryStatus", additionalData); #endregion } var result = new { Success = true, ErrorMessage = "" }; return Json(result, JsonSerializerOptions.None); } #endregion } }