namespace ECPDAL.Meeting.QueryBuilders; /// /// Meeting-scoped TTASK queries — a minimal, ECP-owned complement to CRMBLL.ITaskBLL for the one /// thing it doesn't support: filtering by ObjectTypeId+ObjectId. Every column referenced below is /// confirmed directly from CRMDAL.Query.Task.TaskQB.GET_TASK's own SELECT list (TASKID, TASKNAME, /// DUEON, WBCLEVEL, PARENTTASKID, ASSIGNEDTOUSERID, OBJECTTYPEID, OBJECTID, STATUS) — none of /// these are guessed. TTASK has no DATABASENAME/TENANTID columns (confirmed: GET_TASK filters /// only by TASKID, with no tenant-scoping predicate), unlike ECP's own T* tables. /// public static class MeetingActionItemQB { // Index: none confirmed — recommend IX_TTASK_OBJECTTYPEID_OBJECTID if this becomes a hot path. public const string GET_ACTION_ITEMS_FOR_MEETING = @" SELECT T.TASKID AS TaskId, T.OBJECTID AS MeetingId, T.TASKNAME AS Title, T.ASSIGNEDTOUSERID AS AssignedTo, U.USERNAME AS AssignedToName, T.DUEON AS DueDate, T.PARENTTASKID AS ParentTaskId, T.WBCLEVEL AS WbsLevel, T.STATUS AS Status FROM TTASK T LEFT JOIN MUSER U ON T.ASSIGNEDTOUSERID = U.USERID WHERE T.OBJECTTYPEID = @ObjectTypeId AND T.OBJECTID = @ObjectId ORDER BY T.WBCLEVEL ASC, T.TASKID ASC"; // "Parent task" picker for WBS nesting — same scoping as the list above, minimal columns. public const string GET_SELECTLIST_ACTION_ITEMS_FOR_MEETING = @" SELECT T.TASKID AS TaskId, T.TASKNAME AS Title, T.WBCLEVEL AS WbsLevel FROM TTASK T WHERE T.OBJECTTYPEID = @ObjectTypeId AND T.OBJECTID = @ObjectId ORDER BY T.WBCLEVEL ASC, T.TASKID ASC"; }