using Neo.Afx.Mvc; using Neo.Afx.Security; using System.Web.Mvc; using System.Linq; using Neo.LegitimateLicences.Common; using Neo.LegitimateLicences.Common.Helpers; using Neo.LegitimateLicences.Data.Models; using Neo.LegitimateLicences.AppProviderIssueRequest.Models.Database; using System.Collections.Generic; namespace Neo.LegitimateLicences.AppProviderIssueRequest { public partial class AppProviderIssueRequestController : Neo.LegitimateLicences.Common.ControllerBase { [HttpGet] public ActionResult Dashboard() { ViewBag.Controller = "App Provider"; ViewBag.Page = "Dashboard"; var itemID = WebHelper.ItemID; // Determine if itemID is AppProviderIssueDetailID or PlatformProviderID var appProviderIssueDetailID = itemID; var 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) { return RedirectToAction("ShowError", "Error", new { msg = "App Provider Issue Details not found" }); } // Sidepane context: Use issuing workflow (EntityID 1042) to show tasks like "Submit request" // This matches Accreditation pattern where sidepane shows tasks from the issuing workflow 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; } } } var model = new AppProviderIssueRequestDashboardModel { UserSecurables = (Profile.Securables != null) ? Profile.Securables.ToList() : new List(), AppProviderIssueView = appProviderIssueView, WorkflowInstance = (link != null && link.WorkflowInstanceID > 0) ? WorkflowHelper.GetWorkflowInstanceView(1042, appProviderIssueDetailID, Profile.UserID) : null, ProviderIssuingStatusSummary = (link != null && link.WorkflowInstanceID > 0) ? Database.GetAppProviderIssuingWorkflowSummary(appProviderIssueDetailID, Profile.UserID) : new List(), Comments = (link != null) ? CommentHelper.GetLatestComments(1042, appProviderIssueDetailID) : new List(), Data = new { Exceptions = new object[0] } // No exceptions for providers }; return View("~/Views/AppProviderIssueRequest/Dashboard.cshtml", model); } } }