using Neo.Afx.Mvc; using Neo.LegitimateLicences.Data.Models; using Neo.LegitimateLicences.AppProviderIssueRequest.Models.Database; using Neo.LegitimateLicences.Common; using Neo.LegitimateLicences.Common.Helpers; using System.Linq; using System.Web.Mvc; using System.Collections.Generic; using Neo.Afx.Security; namespace Neo.LegitimateLicences.AppProviderIssueRequest { public partial class AppProviderIssueRequestController : Neo.LegitimateLicences.Common.ControllerBase { [HttpGet] public ActionResult Form() { ViewBag.Controller = "App Provider"; ViewBag.Page = "App Provider Details"; var itemID = WebHelper.ItemID; if (itemID == -1 && Request != null && Request.UrlReferrer != null) { try { var nvc = System.Web.HttpUtility.ParseQueryString(Request.UrlReferrer.Query ?? ""); long parsed; if (long.TryParse(nvc["itemID"], out parsed)) itemID = parsed; } catch { /* ignore */ } } if (itemID == -1 && Request != null) { try { var referer = Request.Headers["Referer"]; if (!string.IsNullOrWhiteSpace(referer)) { var uri = new System.Uri(referer); var nvc = System.Web.HttpUtility.ParseQueryString(uri.Query ?? ""); long parsed; if (long.TryParse(nvc["itemID"], out parsed)) itemID = parsed; } } catch { /* ignore */ } } // Declare variables outside if block for use in model initialization long appProviderIssueDetailID = -1; WorkflowLink link = null; if (itemID != -1) { // Determine if itemID is AppProviderIssueDetailID or PlatformProviderID appProviderIssueDetailID = itemID; link = ResolveAppProviderIssueWorkflow(appProviderIssueDetailID); // If not found, try to resolve from PlatformProviderID (backward compatibility) if (link == null) { var resolvedID = ResolveAppProviderIssueDetailID(itemID); if (resolvedID.HasValue) { appProviderIssueDetailID = resolvedID.Value; link = ResolveAppProviderIssueWorkflow(appProviderIssueDetailID); } } // Get AppProviderIssueDetails view var appProviderIssueView = Database.GetAppProviderIssueView(appProviderIssueDetailID, Profile.UserID); if (appProviderIssueView != null) { // Sidepane context: Use issuing workflow (EntityID 1042) to show tasks like "Submit request" // This matches Dashboard pattern and ensures correct workflow information is shown if (link != null && link.WorkflowInstanceID > 0) { ViewBag.SidepaneEntityID = 1042; // AppProviderIssueRequest ViewBag.SidepaneItemID = appProviderIssueDetailID; // AppProviderIssueDetailID } else { // Fallback: Use related application workflow if issuing workflow doesn't exist var db = new LegitimateDatabase(); var platformProviderID = db.Context.Database.SqlQuery( @"SELECT PC.PlatformProviderID FROM Verified.ProviderCertificates PC WHERE PC.ProviderCertificateID = @p0", new object[] { appProviderIssueView.VerifiedProviderCertificateID }).FirstOrDefault(); if (platformProviderID.HasValue) { var appLink = ResolveProviderWorkflow(platformProviderID.Value); if (appLink != null) { ViewBag.SidepaneEntityID = appLink.EntityID; ViewBag.SidepaneItemID = appLink.ItemID; } } } // Populate ViewBag.Provider for Form view (same as Console) var dbProvider = new LegitimateDatabase(); var platformProviderIDForProvider = dbProvider.Context.Database.SqlQuery( @"SELECT PC.PlatformProviderID FROM Verified.ProviderCertificates PC WHERE PC.ProviderCertificateID = @p0", new object[] { appProviderIssueView.VerifiedProviderCertificateID }).FirstOrDefault(); if (platformProviderIDForProvider.HasValue) { var provider = dbProvider.Context.Database.SqlQuery( @"SELECT PP.PlatformProviderID, PP.LegalName, PP.TradingName, PP.BusinessRegNumber, VC.CertificateNumber, VC.IssuedAt, VC.ExpiresAt FROM Verified.PlatformProviders PP OUTER APPLY ( SELECT TOP 1 CertificateNumber, IssuedAt, ExpiresAt FROM Verified.ProviderCertificates PC WHERE PC.PlatformProviderID = PP.PlatformProviderID ORDER BY PC.IssuedAt DESC ) VC WHERE PP.PlatformProviderID = @p0", new object[] { platformProviderIDForProvider.Value }).FirstOrDefault(); ViewBag.Provider = provider; } ViewBag.AppProviderIssueView = appProviderIssueView; } } var model = new AppProviderIssueRequestFormModel { UserSecurables = (Profile.Securables != null) ? Profile.Securables.ToList() : new List(), Data = (appProviderIssueDetailID != -1) ? Database.GetAppProviderIssueForm(appProviderIssueDetailID, Profile.UserID) : null, WorkflowInstance = (link != null && link.WorkflowInstanceID > 0) ? WorkflowHelper.GetWorkflowInstanceView(1042, appProviderIssueDetailID, Profile.UserID) : null }; ViewBag.IsReadOnly = false; // Can be set based on workflow status if needed return View("~/Views/AppProviderIssueRequest/Form.cshtml", model); } } }