namespace SkillManagementDAL.Query.SkillMatrixConfig
{
public static class SkillMatrixConfigQB
{
// ========================================================
// GET_LIST (FIXED)
// ========================================================
public const string GET_LIST = @"
SELECT
C.CONFIGID AS ConfigId,
C.MATRIXCODE AS MatrixCode,
C.MATRIXTITLE AS MatrixTitle,
C.DOMAINID AS DomainId,
C.TARGETDEPT AS TargetDept,
C.TARGETROLEIDS AS TargetRoleIdsJson,
C.PRODUCTFAMILYID AS ProductFamilyId,
IT.ITEMCODE AS ProductFamilyCode,
IT.ITEMNAME AS ProductFamilyName,
C.MODELIDS AS ModelIdsJson,
C.INCLUDESKILLIDS AS IncludeSkillIdsJson,
C.SHOWSUMMARYROW AS ShowSummaryRow,
C.SHOWMINLEVEL AS ShowMinLevel,
C.UPDATEFREQUENCY AS UpdateFrequency,
C.ISACTIVE AS IsActive,
C.VERSION AS Version,
C.STATUS AS Status,
C.SORTORDER AS SortOrder,
C.CREATEDBYID AS CreatedById,
C.CREATEDON AS CreatedOn,
C.MODIFIEDBYID AS ModifiedById,
C.MODIFIEDON AS ModifiedOn,
C.SOURCETYPE AS SourceType,
C.TENANTID AS TenantId,
D.DOMAINNAME AS DomainName,
ISNULL(R.RoleNames, '') AS RoleNames,
ISNULL(M.ModelNames, '') AS ModelNames,
ISNULL(S.SkillNames, '') AS SkillNames
FROM MSKILLMATRIX C
LEFT JOIN MSKILLDOMAIN D
ON D.DOMAINID = C.DOMAINID
AND D.STATUS = 1
LEFT JOIN MITEM IT
ON IT.ITEMID = C.PRODUCTFAMILYID
/* =========================
ROLE NAMES
========================= */
OUTER APPLY
(
SELECT STUFF((
SELECT ', ' + RO.ROLENAME
FROM (
SELECT T.N.value('.', 'INT') AS RoleId
FROM (
SELECT CAST('' + REPLACE(REPLACE(REPLACE(C.TARGETROLEIDS,'[',''),']',''),',','') + '' AS XML) AS X
WHERE C.TARGETROLEIDS IS NOT NULL AND C.TARGETROLEIDS NOT IN ('[]','null','')
) XmlData
CROSS APPLY XmlData.X.nodes('/r/v') AS T(N)
) Ids
INNER JOIN MJOBROLESKILL RO ON RO.ROLEID = Ids.RoleId
FOR XML PATH('')
), 1, 2, '') AS RoleNames
) R
/* =========================
MODEL NAMES
========================= */
OUTER APPLY
(
SELECT STUFF((
SELECT ', ' + MO.MODELNAME
FROM (
SELECT T.N.value('.', 'INT') AS ModelId
FROM (
SELECT CAST('' + REPLACE(REPLACE(REPLACE(C.MODELIDS,'[',''),']',''),',','') + '' AS XML) AS X
WHERE C.MODELIDS IS NOT NULL AND C.MODELIDS NOT IN ('[]','null','')
) XmlData
CROSS APPLY XmlData.X.nodes('/r/v') AS T(N)
) Ids
INNER JOIN MMODEL MO ON MO.MODELID = Ids.ModelId
FOR XML PATH('')
), 1, 2, '') AS ModelNames
) M
/* =========================
SKILL NAMES
========================= */
OUTER APPLY
(
SELECT STUFF((
SELECT ', ' + SK.SKILLNAME
FROM (
SELECT T.N.value('.', 'INT') AS SkillId
FROM (
SELECT CAST('' + REPLACE(REPLACE(REPLACE(C.INCLUDESKILLIDS,'[',''),']',''),',','') + '' AS XML) AS X
WHERE C.INCLUDESKILLIDS IS NOT NULL AND C.INCLUDESKILLIDS NOT IN ('[]','null','')
) XmlData
CROSS APPLY XmlData.X.nodes('/r/v') AS T(N)
) Ids
INNER JOIN MSKILL SK ON SK.SKILLID = Ids.SkillId
FOR XML PATH('')
), 1, 2, '') AS SkillNames
) S
WHERE C.TENANTID = @TenantId
AND C.STATUS = 1
ORDER BY
C.SORTORDER,
C.MATRIXTITLE;
";
// ========================================================
// GET_BY_ID (FIXED)
// ========================================================
public const string GET_BY_ID = @"
SELECT
C.CONFIGID AS ConfigId,
C.MATRIXCODE AS MatrixCode,
C.MATRIXTITLE AS MatrixTitle,
C.DOMAINID AS DomainId,
D.DOMAINCODE AS DomainCode,
D.DOMAINNAME AS DomainName,
C.TARGETDEPT AS TargetDept,
DEP.DEPARTMENTCODE AS DepartmentCode,
DEP.DEPARTMENTNAME AS DepartmentName,
-- JSON FIELDS
C.TARGETROLEIDS AS TargetRoleIdsJson,
C.PRODUCTFAMILYID AS ProductFamilyId,
IT.ITEMCODE AS ProductFamilyCode,
IT.ITEMNAME AS ProductFamilyName,
C.MODELIDS AS ModelIdsJson,
C.INCLUDESKILLIDS AS IncludeSkillIdsJson,
C.SHOWSUMMARYROW AS ShowSummaryRow,
C.SHOWMINLEVEL AS ShowMinLevel,
C.UPDATEFREQUENCY AS UpdateFrequency,
C.ISACTIVE AS IsActive,
C.VERSION AS Version,
C.STATUS AS Status,
C.SORTORDER AS SortOrder,
C.CREATEDBYID AS CreatedById,
C.CREATEDON AS CreatedOn,
C.MODIFIEDBYID AS ModifiedById,
C.MODIFIEDON AS ModifiedOn,
C.SOURCETYPE AS SourceType,
C.TENANTID AS TenantId,
ISNULL(R.RoleNames, '') AS RoleNames,
ISNULL(M.ModelNames, '') AS ModelNames,
ISNULL(S.SkillNames, '') AS SkillNames
FROM MSKILLMATRIX C
LEFT JOIN MSKILLDOMAIN D
ON D.DOMAINID = C.DOMAINID
LEFT JOIN MDEPARTMENT DEP
ON DEP.DEPARTMENTID = C.TARGETDEPT
LEFT JOIN MITEM IT
ON IT.ITEMID = C.PRODUCTFAMILYID
/* =========================
ROLE NAMES
========================= */
OUTER APPLY
(
SELECT STUFF((
SELECT ', ' + RO.ROLENAME
FROM (
SELECT T.N.value('.', 'INT') AS RoleId
FROM (
SELECT CAST('' + REPLACE(REPLACE(REPLACE(C.TARGETROLEIDS,'[',''),']',''),',','') + '' AS XML) AS X
WHERE C.TARGETROLEIDS IS NOT NULL AND C.TARGETROLEIDS NOT IN ('[]','null','')
) XmlData
CROSS APPLY XmlData.X.nodes('/r/v') AS T(N)
) Ids
INNER JOIN MJOBROLESKILL RO ON RO.ROLEID = Ids.RoleId
FOR XML PATH('')
), 1, 2, '') AS RoleNames
) R
/* =========================
MODEL NAMES
========================= */
OUTER APPLY
(
SELECT STUFF((
SELECT ', ' + MO.MODELNAME
FROM (
SELECT T.N.value('.', 'INT') AS ModelId
FROM (
SELECT CAST('' + REPLACE(REPLACE(REPLACE(C.MODELIDS,'[',''),']',''),',','') + '' AS XML) AS X
WHERE C.MODELIDS IS NOT NULL AND C.MODELIDS NOT IN ('[]','null','')
) XmlData
CROSS APPLY XmlData.X.nodes('/r/v') AS T(N)
) Ids
INNER JOIN MMODEL MO ON MO.MODELID = Ids.ModelId
FOR XML PATH('')
), 1, 2, '') AS ModelNames
) M
/* =========================
SKILL NAMES
========================= */
OUTER APPLY
(
SELECT STUFF((
SELECT ', ' + SK.SKILLNAME
FROM (
SELECT T.N.value('.', 'INT') AS SkillId
FROM (
SELECT CAST('' + REPLACE(REPLACE(REPLACE(C.INCLUDESKILLIDS,'[',''),']',''),',','') + '' AS XML) AS X
WHERE C.INCLUDESKILLIDS IS NOT NULL AND C.INCLUDESKILLIDS NOT IN ('[]','null','')
) XmlData
CROSS APPLY XmlData.X.nodes('/r/v') AS T(N)
) Ids
INNER JOIN MSKILL SK ON SK.SKILLID = Ids.SkillId
FOR XML PATH('')
), 1, 2, '') AS SkillNames
) S
WHERE C.CONFIGID = @ConfigId
AND C.TENANTID = @TenantId;
";
// ========================================================
// GET_SELECT_LIST
// ========================================================
public const string GET_SELECT_LIST = @"
SELECT
CONFIGID AS Id,
MATRIXTITLE AS Name,
MATRIXCODE AS Code,
DOMAINID AS DomainId,
SORTORDER AS SortOrder
FROM MSKILLMATRIX
WHERE TENANTID = @TenantId
AND STATUS = 1
AND ISACTIVE = 0
{DYNAMIC_WHERE}
ORDER BY
SortOrder ASC,
Name ASC";
// ========================================================
// INSERT
// ========================================================
public const string INSERT = @"
INSERT INTO MSKILLMATRIX
(
CONFIGID,
MATRIXCODE,
MATRIXTITLE,
DOMAINID,
TARGETDEPT,
TARGETROLEIDS,
PRODUCTFAMILYID,
MODELIDS,
INCLUDESKILLIDS,
SHOWSUMMARYROW,
SHOWMINLEVEL,
UPDATEFREQUENCY,
ISACTIVE,
VERSION,
STATUS,
SORTORDER,
CREATEDBYID,
CREATEDON,
MODIFIEDBYID,
MODIFIEDON,
SOURCETYPE,
TENANTID
)
VALUES
(
@ConfigId,
@MatrixCode,
@MatrixTitle,
@DomainId,
@TargetDept,
@TargetRoleIds,
@ProductFamilyId,
@ModelIds,
@IncludeSkillIds,
@ShowSummaryRow,
@ShowMinLevel,
@UpdateFrequency,
@IsActive,
0,
@Status,
@SortOrder,
@CreatedById,
GETDATE(),
@ModifiedById,
GETDATE(),
@SourceType,
@TenantId
)";
// ========================================================
// UPDATE
// ========================================================
public const string UPDATE = @"
UPDATE MSKILLMATRIX
SET
MATRIXCODE = @MatrixCode,
MATRIXTITLE = @MatrixTitle,
DOMAINID = @DomainId,
TARGETDEPT = @TargetDept,
TARGETROLEIDS = @TargetRoleIds,
PRODUCTFAMILYID = @ProductFamilyId,
MODELIDS = @ModelIds,
INCLUDESKILLIDS = @IncludeSkillIds,
SHOWSUMMARYROW = @ShowSummaryRow,
SHOWMINLEVEL = @ShowMinLevel,
UPDATEFREQUENCY = @UpdateFrequency,
ISACTIVE = @IsActive,
STATUS = @Status,
SORTORDER = @SortOrder,
VERSION = VERSION + 1,
MODIFIEDBYID = @ModifiedById,
MODIFIEDON = GETDATE()
WHERE CONFIGID = @ConfigId
AND TENANTID = @TenantId";
// ========================================================
// SOFT_DELETE
// ========================================================
public const string SOFT_DELETE = @"
UPDATE MSKILLMATRIX
SET
STATUS = 2,
VERSION = VERSION + 1,
MODIFIEDBYID = @ModifiedById,
MODIFIEDON = GETDATE()
WHERE CONFIGID = @ConfigId
AND TENANTID = @TenantId";
// ========================================================
// GET_SKILLMATRIXCONFIG_LIST_PAGED
// ========================================================
public const string GET_SKILLMATRIXCONFIG_LIST_PAGED = @"
SELECT
C.CONFIGID AS ConfigId,
C.MATRIXCODE AS MatrixCode,
C.MATRIXTITLE AS MatrixTitle,
C.DOMAINID AS DomainId,
C.TARGETDEPT AS TargetDept,
C.TARGETROLEIDS AS TargetRoleIdsJson,
C.PRODUCTFAMILYID AS ProductFamilyId,
IT.ITEMCODE AS ProductFamilyCode,
IT.ITEMNAME AS ProductFamilyName,
C.MODELIDS AS ModelIdsJson,
C.INCLUDESKILLIDS AS IncludeSkillIdsJson,
C.SHOWSUMMARYROW AS ShowSummaryRow,
C.SHOWMINLEVEL AS ShowMinLevel,
C.UPDATEFREQUENCY AS UpdateFrequency,
C.ISACTIVE AS IsActive,
C.VERSION AS Version,
C.STATUS AS Status,
C.SORTORDER AS SortOrder,
C.CREATEDBYID AS CreatedById,
C.CREATEDON AS CreatedOn,
C.MODIFIEDBYID AS ModifiedById,
C.MODIFIEDON AS ModifiedOn,
C.SOURCETYPE AS SourceType,
C.TENANTID AS TenantId,
D.DOMAINNAME AS DomainName,
ISNULL(R.RoleNames, '') AS RoleNames,
ISNULL(M.ModelNames, '') AS ModelNames,
ISNULL(S.SkillNames, '') AS SkillNames
FROM MSKILLMATRIX C
LEFT JOIN MSKILLDOMAIN D ON D.DOMAINID = C.DOMAINID AND D.STATUS = 1
LEFT JOIN MITEM IT ON IT.ITEMID = C.PRODUCTFAMILYID
OUTER APPLY (
SELECT STUFF((
SELECT ', ' + RO.ROLENAME
FROM (
SELECT T.N.value('.', 'INT') AS RoleId
FROM (SELECT CAST('' + REPLACE(REPLACE(REPLACE(C.TARGETROLEIDS,'[',''),']',''),',','') + '' AS XML) AS X
WHERE C.TARGETROLEIDS IS NOT NULL AND C.TARGETROLEIDS NOT IN ('[]','null','')) XmlData
CROSS APPLY XmlData.X.nodes('/r/v') AS T(N)
) Ids
INNER JOIN MJOBROLESKILL RO ON RO.ROLEID = Ids.RoleId
FOR XML PATH('')
), 1, 2, '') AS RoleNames
) R
OUTER APPLY (
SELECT STUFF((
SELECT ', ' + MO.MODELNAME
FROM (
SELECT T.N.value('.', 'INT') AS ModelId
FROM (SELECT CAST('' + REPLACE(REPLACE(REPLACE(C.MODELIDS,'[',''),']',''),',','') + '' AS XML) AS X
WHERE C.MODELIDS IS NOT NULL AND C.MODELIDS NOT IN ('[]','null','')) XmlData
CROSS APPLY XmlData.X.nodes('/r/v') AS T(N)
) Ids
INNER JOIN MMODEL MO ON MO.MODELID = Ids.ModelId
FOR XML PATH('')
), 1, 2, '') AS ModelNames
) M
OUTER APPLY (
SELECT STUFF((
SELECT ', ' + SK.SKILLNAME
FROM (
SELECT T.N.value('.', 'INT') AS SkillId
FROM (SELECT CAST('' + REPLACE(REPLACE(REPLACE(C.INCLUDESKILLIDS,'[',''),']',''),',','') + '' AS XML) AS X
WHERE C.INCLUDESKILLIDS IS NOT NULL AND C.INCLUDESKILLIDS NOT IN ('[]','null','')) XmlData
CROSS APPLY XmlData.X.nodes('/r/v') AS T(N)
) Ids
INNER JOIN MSKILL SK ON SK.SKILLID = Ids.SkillId
FOR XML PATH('')
), 1, 2, '') AS SkillNames
) S
WHERE C.TENANTID = @TenantId
AND C.STATUS = 1
ORDER BY C.SORTORDER, C.MATRIXTITLE
OFFSET (@FirstNumber - 1) ROWS
FETCH NEXT @MaxResult ROWS ONLY
OPTION (RECOMPILE);";
// ========================================================
// GET_SKILLMATRIXCONFIG_LIST_ALL
// ========================================================
public const string GET_SKILLMATRIXCONFIG_LIST_ALL = @"
SELECT
C.CONFIGID AS ConfigId,
C.MATRIXCODE AS MatrixCode,
C.MATRIXTITLE AS MatrixTitle,
C.DOMAINID AS DomainId,
C.TARGETDEPT AS TargetDept,
C.TARGETROLEIDS AS TargetRoleIdsJson,
C.PRODUCTFAMILYID AS ProductFamilyId,
IT.ITEMCODE AS ProductFamilyCode,
IT.ITEMNAME AS ProductFamilyName,
C.MODELIDS AS ModelIdsJson,
C.INCLUDESKILLIDS AS IncludeSkillIdsJson,
C.SHOWSUMMARYROW AS ShowSummaryRow,
C.SHOWMINLEVEL AS ShowMinLevel,
C.UPDATEFREQUENCY AS UpdateFrequency,
C.ISACTIVE AS IsActive,
C.VERSION AS Version,
C.STATUS AS Status,
C.SORTORDER AS SortOrder,
C.CREATEDBYID AS CreatedById,
C.CREATEDON AS CreatedOn,
C.MODIFIEDBYID AS ModifiedById,
C.MODIFIEDON AS ModifiedOn,
C.SOURCETYPE AS SourceType,
C.TENANTID AS TenantId,
D.DOMAINNAME AS DomainName,
ISNULL(R.RoleNames, '') AS RoleNames,
ISNULL(M.ModelNames, '') AS ModelNames,
ISNULL(S.SkillNames, '') AS SkillNames
FROM MSKILLMATRIX C
LEFT JOIN MSKILLDOMAIN D ON D.DOMAINID = C.DOMAINID AND D.STATUS = 1
LEFT JOIN MITEM IT ON IT.ITEMID = C.PRODUCTFAMILYID
OUTER APPLY (
SELECT STUFF((
SELECT ', ' + RO.ROLENAME
FROM (
SELECT T.N.value('.', 'INT') AS RoleId
FROM (SELECT CAST('' + REPLACE(REPLACE(REPLACE(C.TARGETROLEIDS,'[',''),']',''),',','') + '' AS XML) AS X
WHERE C.TARGETROLEIDS IS NOT NULL AND C.TARGETROLEIDS NOT IN ('[]','null','')) XmlData
CROSS APPLY XmlData.X.nodes('/r/v') AS T(N)
) Ids
INNER JOIN MJOBROLESKILL RO ON RO.ROLEID = Ids.RoleId
FOR XML PATH('')
), 1, 2, '') AS RoleNames
) R
OUTER APPLY (
SELECT STUFF((
SELECT ', ' + MO.MODELNAME
FROM (
SELECT T.N.value('.', 'INT') AS ModelId
FROM (SELECT CAST('' + REPLACE(REPLACE(REPLACE(C.MODELIDS,'[',''),']',''),',','') + '' AS XML) AS X
WHERE C.MODELIDS IS NOT NULL AND C.MODELIDS NOT IN ('[]','null','')) XmlData
CROSS APPLY XmlData.X.nodes('/r/v') AS T(N)
) Ids
INNER JOIN MMODEL MO ON MO.MODELID = Ids.ModelId
FOR XML PATH('')
), 1, 2, '') AS ModelNames
) M
OUTER APPLY (
SELECT STUFF((
SELECT ', ' + SK.SKILLNAME
FROM (
SELECT T.N.value('.', 'INT') AS SkillId
FROM (SELECT CAST('' + REPLACE(REPLACE(REPLACE(C.INCLUDESKILLIDS,'[',''),']',''),',','') + '' AS XML) AS X
WHERE C.INCLUDESKILLIDS IS NOT NULL AND C.INCLUDESKILLIDS NOT IN ('[]','null','')) XmlData
CROSS APPLY XmlData.X.nodes('/r/v') AS T(N)
) Ids
INNER JOIN MSKILL SK ON SK.SKILLID = Ids.SkillId
FOR XML PATH('')
), 1, 2, '') AS SkillNames
) S
WHERE C.TENANTID = @TenantId
AND C.STATUS = 1
ORDER BY C.SORTORDER, C.MATRIXTITLE;";
// ========================================================
// CHECK_IN_USE
// ========================================================
public const string CHECK_IN_USE = @"
SELECT COUNT(1)
FROM MSKILLMATRIX
WHERE CONFIGID = @ConfigId
AND TENANTID = @TenantId
AND STATUS = 1
AND ISACTIVE = 0";
}
}