Untitled

 avatar
unknown
plain_text
24 days ago
14 kB
3
Indexable
CREATE PROCEDURE [dbo].[proc_rpt_GlobalStatusReport]
    @FyId INT = 4, 
    @MonthId INT = 157, 
    @Conformity INT = NULL, 
    @roleID INT = NULL, 
    @Win_User VARCHAR(50) = 'muskan.jain'
AS
BEGIN
    -- Drop temp tables if they exist
    IF OBJECT_ID(N'tempdb..#tblResult', N'U') IS NOT NULL 
    BEGIN 
        DROP TABLE #tblResult 
    END 

    IF OBJECT_ID(N'tempdb..#tblResult2', N'U') IS NOT NULL 
    BEGIN 
        DROP TABLE #tblResult2 
    END

    -- Declare variables
    DECLARE @month VARCHAR(50),
            @monthNo INT,
            @roleID INT,
            @ScheduleCount INT,
            @sepratedDate INT,
            @sepratedMonth INT,
            @ScheduledId INT,
            @FullDate NVARCHAR(50),
            @tblCOuntForFirst INT,
            @valueForFirst INT,
            @Plant_Id_For_First INT,
            @tblCOuntForSecond INT,
            @valueForSecond INT,
            @updatedtblCOuntForSecond INT,
            @pidcountForSecond INT,
            @tblCOuntForThird INT,
            @valueForThird FLOAT,
            @updatedtblCOuntForThird INT,
            @pidcountForThird INT,
            @tblCOuntForFourth INT,
            @valueForFourth FLOAT,
            @cummValueForFourth FLOAT,
            @finalCummValueFourth INT,
            @updatedtblCOuntForFourth INT,
            @pidcountForFourth INT,
            @tblCOuntForFifth INT,
            @valueForFifth FLOAT,
            @sumvalueforfifth FLOAT,
            @updatedtblCOuntForFifth INT,
            @pidcountForFifth INT,
            @tblCOuntForSixth INT,
            @valueForSixth FLOAT,
            @cummValueForSixth FLOAT,
            @finalCummValueforYTMSixth INT,
            @updatedtblCOuntForSixth INT,
            @pidcountForSixth INT;

    -- Get month and month number
    SET @month = (SELECT Month FROM mst_fy_calendar WHERE ID = @MonthId);
    SET @monthNo = (SELECT MonthNo FROM mst_fy_calendar WHERE ID = @MonthId);

    -- Set roleID
    SET @roleID = (SELECT TOP 1 RoleID 
                   FROM mst_user_mapping 
                   WHERE WinUser = @Win_User 
                   ORDER BY RoleID ASC);

    -- Create temp tables
    CREATE TABLE #tblResult2 (
        Pid INT IDENTITY PRIMARY KEY,
        ScheduleID INT,
        PlanID INT,
        ScheduleWeekId INT,
        ScheduleDate INT,
        ScheduleMonthNo INT
    );

    -- Insert initial values into #tblResult2
    INSERT INTO #tblResult2(ScheduleID, PlanID, ScheduleWeekId, ScheduleDate, ScheduleMonthNo)
    SELECT S1.ScheduleID, S1.PlanID, S1.ScheduleWeekId, 0, 0
    FROM (SELECT ScheduleID, PlanID, ScheduleWeekID 
          FROM tran_auditPlan_schedule) S1;

    -- Calculate schedule count
    SET @ScheduleCount = (SELECT COUNT(1) FROM #tblResult2);

    -- Process each schedule
    WHILE (@ScheduleCount > 0)
    BEGIN
        SET @ScheduledId = (SELECT TOP 1 ScheduleID 
                            FROM #tblResult2 
                            WHERE Pid = @ScheduleCount);
        SET @FullDate = (SELECT ScheduleWeekDate 
                         FROM tran_auditPlan_schedule 
                         WHERE ScheduleID = @ScheduledId);
        SET @sepratedMonth = (SELECT MONTH(@FullDate));
        SET @sepratedDate = SUBSTRING(@FullDate, CHARINDEX('-', @FullDate) + 4, 2);
        
        -- Update #tblResult2 with separated date and month
        UPDATE #tblResult2 
        SET ScheduleDate = @sepratedDate, ScheduleMonthNo = @sepratedMonth 
        WHERE ScheduleID = @ScheduledId;

        SET @ScheduleCount = @ScheduleCount - 1;
    END

    -- Create #tblResult and #tblResult3 temp tables
    CREATE TABLE #tblResult (
        Pid INT IDENTITY PRIMARY KEY,
        SerialNo INT,
        Month VARCHAR(255),
        KPI VARCHAR(255),
        PlantId INT,
        PlantName VARCHAR(255),
        Value VARCHAR(255)
    );

    CREATE TABLE #tblResult3 (
        Pid INT IDENTITY PRIMARY KEY,
        PlantIdAuth INT,
        PlantNameAuth VARCHAR(255)
    );

    -- Insert data based on roleID into #tblResult3
    IF (@roleID = 1)
    BEGIN
        INSERT INTO #tblResult3 (PlantIdAuth, PlantNameAuth)
        SELECT DISTINCT mpc.PlantID AS PlantIdAuth, mpc.PlantName AS PlantNameAuth
        FROM mst_plant AS mpc;
    END
    ELSE
    BEGIN
        INSERT INTO #tblResult3 (PlantIdAuth, PlantNameAuth)
        SELECT DISTINCT MUP.PlantID AS PlantIdAuth, MP.PlantName AS PlantNameAuth
        FROM mst_user_mapping AS MUP
        INNER JOIN mst_plant AS MP ON MUP.PlantID = MP.PlantID
        WHERE MUP.WinUser = @Win_User;
    END

    -- Process and insert first KPI: Planned Audits-Current Month
    INSERT INTO #tblResult(SerialNo, Month, KPI, PlantId, PlantName, Value)
    SELECT T1.SerialNo, T1.Month, T1.KPI, T1.PlantID, T1.PlantName, CAST(0 AS VARCHAR) + '(' + CAST(0 AS VARCHAR) + ')'
    FROM (SELECT DISTINCT 1 AS SerialNo, @month AS Month, 'Planned Audits-Current Month' AS KPI, 
                 mpc.PlantIDAuth AS PlantID, mpc.PlantNameAuth AS PlantName 
          FROM #tblResult3 AS mpc) T1;

    -- Process first KPI values
    SET @tblCOuntForFirst = (SELECT COUNT(1) FROM #tblResult);
    WHILE (@tblCOuntForFirst > 0)
    BEGIN
        SET @Plant_Id_For_First = (SELECT TOP 1 PlantId FROM #tblResult WHERE Pid = @tblCOuntForFirst);
        SET @valueForFirst = (SELECT COUNT(1)
                             FROM #tblResult2 AS TS
                             INNER JOIN tran_auditPlan AS TP ON TP.PlanID = TS.PlanID
                             INNER JOIN tran_auditProgram AS TAP ON TAP.AuditProgramID = TP.AuditProgramID
                             WHERE TP.PlantID = @Plant_Id_For_First
                             AND TS.ScheduleMonthNo = @monthNo
                             AND TP.FyID = @FyId
                             AND TP.IsActive = 1
                             AND TAP.IsActive = 1);
        
        -- Update first KPI value
        UPDATE #tblResult
        SET Value = ISNULL(CAST(@valueForFirst AS VARCHAR), CAST(0 AS VARCHAR))
        WHERE PlantId = @Plant_Id_For_First;

        SET @tblCOuntForFirst = @tblCOuntForFirst - 1;
    END

    -- Process second KPI: Scheduled Audit Value
    SET @tblCOuntForSecond = (SELECT COUNT(1) FROM #tblResult);
    WHILE (@tblCOuntForSecond > 0)
    BEGIN
        SET @Plant_Id_For_Second = (SELECT TOP 1 PlantId FROM #tblResult WHERE Pid = @tblCOuntForSecond);
        SET @valueForSecond = (SELECT COUNT(1)
                              FROM #tblResult2 AS TS
                              INNER JOIN tran_auditPlan AS TP ON TP.PlanID = TS.PlanID
                              WHERE TP.PlantID = @Plant_Id_For_Second
                              AND TS.ScheduleMonthNo = @monthNo
                              AND TP.FyID = @FyId
                              AND TP.IsActive = 1);
        
        -- Update second KPI value
        UPDATE #tblResult
        SET Value = ISNULL(CAST(@valueForSecond AS VARCHAR), CAST(0 AS VARCHAR))
        WHERE PlantId = @Plant_Id_For_Second;

        SET @tblCOuntForSecond = @tblCOuntForSecond - 1;
    END

    -- Repeat similar logic for the third, fourth, fifth, and sixth KPIs
    -- This includes their value calculations and updates based on the logic for each KPI

    -- Example for third KPI (update as necessary)
    SET @tblCOuntForThird = (SELECT COUNT(1) FROM #tblResult);
    WHILE (@tblCOuntForThird > 0)
    BEGIN
        SET @Plant_Id_For_Third = (SELECT TOP 1 PlantId FROM #tblResult WHERE Pid = @tblCOuntForThird);
        SET @valueForThird = (SELECT COUNT(1)
                             FROM #tblResult2 AS TS
                             INNER JOIN tran_auditPlan AS TP ON TP.PlanID = TS.PlanID
                             WHERE TP.PlantID = @Plant_Id_For_Third
                             AND TS.ScheduleMonthNo = @monthNo
                             AND TP.FyID = @FyId
                             AND TP.IsActive = 1);
        
        -- Update third KPI value
        UPDATE #tblResult
        SET Value = ISNULL(CAST(@valueForThird AS VARCHAR), CAST(0 AS VARCHAR))
  -- Third KPI: Audit Planned YTM
    SET @tblCOuntForThird = (SELECT COUNT(1) FROM #tblResult);
    WHILE (@tblCOuntForThird > 0)
    BEGIN
        SET @Plant_Id_For_Third = (SELECT TOP 1 PlantId FROM #tblResult WHERE Pid = @tblCOuntForThird);
        SET @valueForThird = (SELECT COUNT(1)
                             FROM #tblResult2 AS TS
                             INNER JOIN tran_auditPlan AS TP ON TP.PlanID = TS.PlanID
                             WHERE TP.PlantID = @Plant_Id_For_Third
                             AND TS.ScheduleMonthNo <= @monthNo
                             AND TP.FyID = @FyId
                             AND TP.IsActive = 1);
        
        -- Update third KPI value
        UPDATE #tblResult
        SET Value = ISNULL(CAST(@valueForThird AS VARCHAR), CAST(0 AS VARCHAR))
        WHERE PlantId = @Plant_Id_For_Third;

        SET @tblCOuntForThird = @tblCOuntForThird - 1;
    END

    -- Fourth KPI: Audit Completed YTM
    SET @tblCOuntForFourth = (SELECT COUNT(1) FROM #tblResult);
    WHILE (@tblCOuntForFourth > 0)
    BEGIN
        SET @Plant_Id_For_Fourth = (SELECT TOP 1 PlantId FROM #tblResult WHERE Pid = @tblCOuntForFourth);
        SET @valueForFourth = (SELECT COUNT(1)
                              FROM #tblResult2 AS TS
                              INNER JOIN tran_auditPlan AS TP ON TP.PlanID = TS.PlanID
                              WHERE TP.PlantID = @Plant_Id_For_Fourth
                              AND TS.ScheduleMonthNo <= @monthNo
                              AND TP.FyID = @FyId
                              AND TP.IsActive = 1
                              AND TP.AuditStatus = 'Completed');
        
        -- Update fourth KPI value
        UPDATE #tblResult
        SET Value = ISNULL(CAST(@valueForFourth AS VARCHAR), CAST(0 AS VARCHAR))
        WHERE PlantId = @Plant_Id_For_Fourth;

        -- Cumulative value for fourth KPI
        SET @cummValueForFourth = (SELECT SUM(CAST(Value AS INT)) 
                                   FROM #tblResult
                                   WHERE PlantId = @Plant_Id_For_Fourth 
                                   AND KPI = 'Audit Completed YTM');
        
        -- Final cumulative value for fourth KPI
        SET @finalCummValueFourth = @cummValueForFourth;
        
        -- Update final cumulative value for fourth KPI
        UPDATE #tblResult
        SET Value = CAST(@finalCummValueFourth AS VARCHAR)
        WHERE PlantId = @Plant_Id_For_Fourth 
        AND KPI = 'Audit Completed YTM';

        SET @tblCOuntForFourth = @tblCOuntForFourth - 1;
    END

    -- Fifth KPI: Audit Results Achieved
    SET @tblCOuntForFifth = (SELECT COUNT(1) FROM #tblResult);
    WHILE (@tblCOuntForFifth > 0)
    BEGIN
        SET @Plant_Id_For_Fifth = (SELECT TOP 1 PlantId FROM #tblResult WHERE Pid = @tblCOuntForFifth);
        SET @valueForFifth = (SELECT COUNT(1)
                             FROM #tblResult2 AS TS
                             INNER JOIN tran_auditPlan AS TP ON TP.PlanID = TS.PlanID
                             WHERE TP.PlantID = @Plant_Id_For_Fifth
                             AND TS.ScheduleMonthNo <= @monthNo
                             AND TP.FyID = @FyId
                             AND TP.IsActive = 1
                             AND TP.AuditStatus = 'Achieved');
        
        -- Update fifth KPI value
        UPDATE #tblResult
        SET Value = ISNULL(CAST(@valueForFifth AS VARCHAR), CAST(0 AS VARCHAR))
        WHERE PlantId = @Plant_Id_For_Fifth;

        -- Cumulative value for fifth KPI
        SET @sumvalueforfifth = (SELECT SUM(CAST(Value AS FLOAT)) 
                                FROM #tblResult
                                WHERE PlantId = @Plant_Id_For_Fifth 
                                AND KPI = 'Audit Results Achieved');
        
        -- Update cumulative value for fifth KPI
        UPDATE #tblResult
        SET Value = CAST(@sumvalueforfifth AS VARCHAR)
        WHERE PlantId = @Plant_Id_For_Fifth 
        AND KPI = 'Audit Results Achieved';

        SET @tblCOuntForFifth = @tblCOuntForFifth - 1;
    END

    -- Sixth KPI: Audit Completion Rate
    SET @tblCOuntForSixth = (SELECT COUNT(1) FROM #tblResult);
    WHILE (@tblCOuntForSixth > 0)
    BEGIN
        SET @Plant_Id_For_Sixth = (SELECT TOP 1 PlantId FROM #tblResult WHERE Pid = @tblCOuntForSixth);
        SET @valueForSixth = (SELECT COUNT(1)
                             FROM #tblResult2 AS TS
                             INNER JOIN tran_auditPlan AS TP ON TP.PlanID = TS.PlanID
                             WHERE TP.PlantID = @Plant_Id_For_Sixth
                             AND TS.ScheduleMonthNo <= @monthNo
                             AND TP.FyID = @FyId
                             AND TP.IsActive = 1
                             AND TP.AuditStatus = 'Completed');
        
        -- Update sixth KPI value
        UPDATE #tblResult
        SET Value = ISNULL(CAST(@valueForSixth AS VARCHAR), CAST(0 AS VARCHAR))
        WHERE PlantId = @Plant_Id_For_Sixth;

        -- Cumulative value for sixth KPI
        SET @cummValueForSixth = (SELECT SUM(CAST(Value AS FLOAT)) 
                                  FROM #tblResult
                                  WHERE PlantId = @Plant_Id_For_Sixth 
                                  AND KPI = 'Audit Completion Rate');
        
        -- Final cumulative value for sixth KPI
        SET @finalCummValueforYTMSixth = @cummValueForSixth;
        
        -- Update final cumulative value for sixth KPI
        UPDATE #tblResult
        SET Value = CAST(@finalCummValueforYTMSixth AS VARCHAR)
        WHERE PlantId = @Plant_Id_For_Sixth 
        AND KPI = 'Audit Completion Rate';

        SET @tblCOuntForSixth = @tblCOuntForSixth - 1;
    END

    -- Final results from #tblResult can be selected or further processed
    SELECT * FROM #tblResult;

END;
Leave a Comment