namespace MMDAL.Query.Scheduling { // Queries TTASK and TCALL directly — same DB as MM, no cross-service HTTP calls. // Indexes required: // TTASK: (MACHINEID, TASKNATURE, STATUS, TENANTID) // TCALL: (MACHINEID, CALLSTATUS, TENANTID) public static class CalendarQB { // Planned downtime windows: TTASK rows where TASKNATURE=2 (planned maintenance/downtime) // Excludes STATUS=3 (Closed) — only open or in-progress downtime blocks the calendar. public const string GET_MACHINE_PLANNED_DOWNTIME = @" SELECT T.PLANSTARTON AS TaskStart, T.PLANENDON AS TaskEnd FROM TTASK T WHERE T.MACHINEID = @MachineId AND T.TASKNATURE = 2 AND T.STATUS <> 3 AND T.PLANSTARTON < @RangeTo AND T.PLANENDON > @RangeFrom AND T.TENANTID = @TenantId;"; // Breakdown windows: TCALL rows not yet resolved (CALLSTATUS != 4) // Uses CALLSTARTTIME as the start; uses CLOSEDDATE if resolved else a far-future sentinel. public const string GET_MACHINE_BREAKDOWN_CALLS = @" SELECT C.CALLDATE AS TaskStart, CASE WHEN C.CALLSTATUS = 4 THEN C.CLOSEDON ELSE '9999-12-31' END AS TaskEnd FROM TCALL C WHERE C.CALLONOBJECTID = @MachineId AND C.CALLONOBJECTTYPEID=-1899996694 AND C.CALLSTATUS <> 4 AND C.CALLDATE < @RangeTo AND C.TENANTID = @TenantId;"; } }