namespace JdeScoping.DataAccess.Queries; /// /// Lookup related SQL queries (Status Codes, Function Codes) /// public static partial class JdeQueries { /// /// Gets all work order status codes from production schema. /// Status codes are stored in UDC table F0005 with SY='00' and RT='SS'. /// public const string SqlGetStatusCodes = @" SELECT TRIM(sc.DRKY) AS Code, TRIM(sc.DRDL01) AS Description, sc.DRUPMJ AS LastUpdateDate, sc.DRUPMT AS LastUpdateTime FROM {ProductionSchema}.F0005 sc WHERE TRIM(sc.DRSY) = '00' AND sc.DRRT = 'SS' AND TRIM(sc.DRKY) IS NOT NULL"; /// /// Gets status codes updated since specified date from production schema. /// public const string SqlGetStatusCodesFiltered = SqlGetStatusCodes + @" AND (sc.DRUPMJ > :dateUpdated OR (sc.DRUPMJ = :dateUpdated AND sc.DRUPMT >= :timeUpdated))"; /// /// Gets all function codes from production schema. /// Function codes are stored in F00192 (MES codes table). /// Uses LISTAGG to concatenate multiple descriptions for same code. /// public const string SqlGetFunctionCodes = @" SELECT Code, TRIM(LISTAGG(Description, ' ') WITHIN GROUP(ORDER BY Description) || CASE WHEN MAX(total_lengthb) > 4000 THEN '...' ELSE '' END) AS Description, SYSDATE AS LastUpdateDt FROM ( SELECT TRIM(fc.CFKY) AS Code, TRIM(ASCIISTR(fc.CFDS80)) AS Description, SUM(LENGTHB(TRIM(fc.CFDS80))+1) OVER(PARTITION BY TRIM(fc.CFKY) ORDER BY TRIM(fc.CFDS80)) - 1 cumul_lengthb, SUM(LENGTHB(TRIM(fc.CFDS80))+1) OVER(PARTITION BY TRIM(fc.CFKY)) - 1 total_lengthb, COUNT(*) OVER(PARTITION BY TRIM(fc.CFKY)) num_values FROM {ProductionSchema}.F00192 fc WHERE TRIM(fc.CFKY) IS NOT NULL ) WHERE total_lengthb <= 4000 OR cumul_lengthb <= 4000 - length('...') GROUP BY Code"; }