using System; namespace FrameworkDAL.Query.ActionPanel { public static class ActionPanelQB { // Column aliases match ActionPanelDTO property names exactly (Dapper maps by name). // Covering index: IX_MACTIONPANEL_MENUID_STATUS (MENUID, STATUS) INCLUDE (SORTORDER). private const string ACTION_PANEL_COLUMNS = @" AP.ACTIONPANELID AS ActionPanelId, AP.MENUID AS MenuId, AP.LABEL AS Label, AP.ICON AS Icon, AP.COLOR AS Color, AP.DESCRIPTION AS Description, AP.SCREENS AS Screens, AP.CHANNEL AS Channel, AP.ACTIONTYPE AS ActionType, AP.ENTITYID AS EntityId, AP.ENTITYNAME AS EntityName, AP.REPORTID AS ReportId, AP.WEBFORMNAME AS WebFormName, AP.WEBFORMSECONDURL AS WebFormSecondURL, AP.WEBFORM AS WebForm, AP.COMMAND AS Command, AP.BIZTRANSACTIONCLASSID AS BizTransactionClassId, AP.MODULENAME AS ModuleName, AP.LISTMENUID AS ListMenuId, AP.CRITERIA AS Criteria, AP.LEVEL AS Level, AP.SORTORDER AS SortOrder, AP.VERSION AS Version, AP.CREATEDBYID AS CreatedById, AP.CREATEDON AS CreatedOn, AP.MODIFIEDBYID AS ModifiedById, AP.MODIFIEDON AS ModifiedOn, AP.TENANTID AS TenantId, AP.STATUS AS Status, AP.SOURCETYPE AS SourceType"; public const string GET_ACTION_PANEL = "SELECT" + ACTION_PANEL_COLUMNS + @" FROM MACTIONPANEL AP WHERE AP.ACTIONPANELID = @ActionPanelId AND (AP.TENANTID = @TenantId OR AP.TENANTID = -1);"; // Hot path used by GbFormActionComponent (Phase 2) to resolve what to show for a screen — // MenuId = -1 means "no screen filter" (global/channel-only actions); TenantId = -1 means // "applies to all tenants" (see TENANTID = @TenantId OR TENANTID = -1 convention used // across the framework, e.g. DirectActionConfigQB/TopicQB/LearningObjectQB). public const string GET_ACTIONS_FOR_SCREEN = "SELECT" + ACTION_PANEL_COLUMNS + @" FROM MACTIONPANEL AP WHERE AP.STATUS = 1 AND (AP.TENANTID = @TenantId OR AP.TENANTID = -1) AND (AP.MENUID = @MenuId OR AP.MENUID = -1) AND (@Channel = '' OR AP.CHANNEL IS NULL OR AP.CHANNEL = @Channel) ORDER BY AP.SORTORDER, AP.ACTIONPANELID;"; public const string SAVE_ACTION_PANEL = @"INSERT INTO MACTIONPANEL ( ACTIONPANELID, MENUID, LABEL, ICON, COLOR, DESCRIPTION, SCREENS, CHANNEL, ACTIONTYPE, ENTITYID, ENTITYNAME, REPORTID, WEBFORMNAME, WEBFORMSECONDURL, WEBFORM, COMMAND, BIZTRANSACTIONCLASSID, MODULENAME, LISTMENUID, CRITERIA, LEVEL, SORTORDER, VERSION, CREATEDBYID, CREATEDON, MODIFIEDBYID, MODIFIEDON, TENANTID, STATUS, SOURCETYPE ) VALUES ( @ActionPanelId, @MenuId, @Label, @Icon, @Color, @Description, @Screens, @Channel, @ActionType, @EntityId, @EntityName, @ReportId, @WebFormName, @WebFormSecondURL, @WebForm, @Command, @BizTransactionClassId, @ModuleName, @ListMenuId, @Criteria, @Level, @SortOrder, @Version, @CreatedById, @CreatedOn, @ModifiedById, @ModifiedOn, @TenantId, @Status, @SourceType );"; public const string UPDATE_ACTION_PANEL = @"UPDATE MACTIONPANEL SET MENUID = @MenuId, LABEL = @Label, ICON = @Icon, COLOR = @Color, DESCRIPTION = @Description, SCREENS = @Screens, CHANNEL = @Channel, ACTIONTYPE = @ActionType, ENTITYID = @EntityId, ENTITYNAME = @EntityName, REPORTID = @ReportId, WEBFORMNAME = @WebFormName, WEBFORMSECONDURL = @WebFormSecondURL, WEBFORM = @WebForm, COMMAND = @Command, BIZTRANSACTIONCLASSID = @BizTransactionClassId, MODULENAME = @ModuleName, LISTMENUID = @ListMenuId, CRITERIA = @Criteria, LEVEL = @Level, SORTORDER = @SortOrder, STATUS = @Status, MODIFIEDBYID = @ModifiedById, MODIFIEDON = @ModifiedOn WHERE ACTIONPANELID = @ActionPanelId AND TENANTID = @TenantId;"; public const string GET_SELECTLIST_ACTION_PANEL = @"WITH ActionPanel AS ( SELECT AP.ACTIONPANELID AS Id, AP.LABEL AS Name, ROW_NUMBER() OVER (ORDER BY AP.SORTORDER, AP.ACTIONPANELID) AS RowNum FROM MACTIONPANEL AP WHERE AP.STATUS = 1 AND (AP.TENANTID = @TenantId OR AP.TENANTID = -1) ) SELECT Id, Name FROM ActionPanel WHERE (@firstnumber = -1 AND @maxresult = -1) OR (RowNum BETWEEN @firstnumber AND @maxresult);"; public const string GET_SELECTLIST_ACTION_PANEL_COUNT = @"SELECT COUNT(1) FROM MACTIONPANEL AP WHERE AP.STATUS = 1 AND (AP.TENANTID = @TenantId OR AP.TENANTID = -1);"; public const string DELETE_ACTION_PANEL = @"DELETE FROM MACTIONPANEL WHERE ACTIONPANELID = @ActionPanelId AND TENANTID = @TenantId;"; // Full-row load for the Action Panel admin screen (mirrors GetAllCommandPanel). public const string GET_ALL_ACTION_PANEL = "SELECT" + ACTION_PANEL_COLUMNS + @" FROM MACTIONPANEL AP WHERE AP.STATUS = 1 AND (AP.TENANTID = @TenantId OR AP.TENANTID = -1) ORDER BY AP.SORTORDER, AP.ACTIONPANELID;"; // ── Quick Actions (MQUICKACTION) — same screen-key concept, distinct table/shape ── // Covering index: IX_MQUICKACTION_MENUID_STATUS (MENUID, STATUS) INCLUDE (SORTORDER). private const string QUICK_ACTION_COLUMNS = @" QA.QUICKACTIONID AS QuickActionId, QA.MENUID AS MenuId, QA.ACTIONCODE AS ActionCode, QA.LABEL AS Label, QA.FIELDSJSON AS FieldsJson, QA.API AS Api, QA.VISIBLEWHEN AS VisibleWhen, QA.SORTORDER AS SortOrder, QA.VERSION AS Version, QA.CREATEDBYID AS CreatedById, QA.CREATEDON AS CreatedOn, QA.MODIFIEDBYID AS ModifiedById, QA.MODIFIEDON AS ModifiedOn, QA.TENANTID AS TenantId, QA.STATUS AS Status, QA.SOURCETYPE AS SourceType"; public const string GET_QUICK_ACTIONS_FOR_SCREEN = "SELECT" + QUICK_ACTION_COLUMNS + @" FROM MQUICKACTION QA WHERE QA.STATUS = 1 AND (QA.TENANTID = @TenantId OR QA.TENANTID = -1) AND QA.MENUID = @MenuId ORDER BY QA.SORTORDER, QA.QUICKACTIONID;"; public const string GET_QUICK_ACTION = "SELECT" + QUICK_ACTION_COLUMNS + @" FROM MQUICKACTION QA WHERE QA.QUICKACTIONID = @QuickActionId AND (QA.TENANTID = @TenantId OR QA.TENANTID = -1);"; public const string GET_ALL_QUICK_ACTION = "SELECT" + QUICK_ACTION_COLUMNS + @" FROM MQUICKACTION QA WHERE QA.STATUS = 1 AND (QA.TENANTID = @TenantId OR QA.TENANTID = -1) ORDER BY QA.MENUID, QA.SORTORDER, QA.QUICKACTIONID;"; public const string SAVE_QUICK_ACTION = @"INSERT INTO MQUICKACTION ( QUICKACTIONID, MENUID, ACTIONCODE, LABEL, FIELDSJSON, API, VISIBLEWHEN, SORTORDER, VERSION, CREATEDBYID, CREATEDON, MODIFIEDBYID, MODIFIEDON, TENANTID, STATUS, SOURCETYPE ) VALUES ( @QuickActionId, @MenuId, @ActionCode, @Label, @FieldsJson, @Api, @VisibleWhen, @SortOrder, @Version, @CreatedById, @CreatedOn, @ModifiedById, @ModifiedOn, @TenantId, @Status, @SourceType );"; public const string UPDATE_QUICK_ACTION = @"UPDATE MQUICKACTION SET MENUID = @MenuId, ACTIONCODE = @ActionCode, LABEL = @Label, FIELDSJSON = @FieldsJson, API = @Api, VISIBLEWHEN = @VisibleWhen, SORTORDER = @SortOrder, STATUS = @Status, MODIFIEDBYID = @ModifiedById, MODIFIEDON = @ModifiedOn WHERE QUICKACTIONID = @QuickActionId AND TENANTID = @TenantId;"; public const string DELETE_QUICK_ACTION = @"DELETE FROM MQUICKACTION WHERE QUICKACTIONID = @QuickActionId AND TENANTID = @TenantId;"; } }