Editing: MobileBallotBoxGetPagedItems


MobileBallotBoxGetPagedItems

USE [secInventory]
GO
/****** Object:  StoredProcedure [dbo].[Mobile_BallotBox_GetPagedItems]    Script Date: 7/22/2025 5:02:31 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*
exec Mobile_BallotBox_GetPagedItems 1,20,'000','adminstate',1,'130800000000000','L',0
exec Mobile_BallotBox_GetPagedItems 1,20,'000','adminstate',1,'130800100000000','L',1
exec Mobile_BallotBox_GetPagedItems 1,20,'000','adminstate',1,'130800000000000','L'
exec Mobile_BallotBox_GetPagedItems 1,20,'001','dpomandi',1,'130800000000000','M'
exec Mobile_BallotBox_GetPagedItems 1,20,'002','bdobalh',1,'130800100000000','L'
exec Mobile_BallotBox_GetPagedItems 1,20,'000','adminstate',5,'130000000000000','L',0
*/

ALTER PROCEDURE [dbo].[Mobile_BallotBox_GetPagedItems]
    @PageNumber INT,
    @PageSize INT,
    @userlevelcode VARCHAR(5),
    @usercode CHAR(13),
    @action INT = 0,                  -- 0 for all, 1-5 for specific categories
    @zonecode CHAR(13) = NULL,       -- Optional filter
    @box_size CHAR(1) = NULL,        -- Optional filter ('S', 'M', 'L')
    @is_jurisdiction INT
AS
BEGIN
    SET NOCOUNT ON;

    SET @usercode = [secInventory].[sec].get_user_code(@usercode);

    IF @PageNumber < 1 SET @PageNumber = 1;
    IF @PageSize < 1 SET @PageSize = 10;

    DECLARE @JurisdictionLeftLength INT;
    SET @JurisdictionLeftLength =
        CASE
            WHEN @userlevelcode IN ('000', '012', '013') THEN 2
            WHEN @userlevelcode = '001' THEN 4
            WHEN @userlevelcode IN ('002', '003') THEN 7
            WHEN @userlevelcode = '999' THEN 100
            ELSE 0
        END;

    DECLARE @zonecodeFilter CHAR(13) = ISNULL(@zonecode, '');
    DECLARE @boxsizeFilter CHAR(1) = ISNULL(@box_size, '');

    -- ACTION 1: Received in jurisdiction
    IF @action = 0 OR @action = 1
    BEGIN
        IF @is_jurisdiction = 1
        BEGIN
            SELECT
                S.qr_text,
                CASE M.box_size WHEN 'S' THEN 'Small' WHEN 'M' THEN 'Medium' WHEN 'L' THEN 'Large' ELSE 'Un-known' END AS box_size,
                S.entry_date,
                ls.Name AS senderlocation,
                lr.Name AS receiverlocation,
                S.Problem_remarks,
                S.latitude,
                S.longitude
            FROM sec.Ballot_Box_Master_SrNo AS S WITH (NOLOCK)
            LEFT JOIN sec.Ballot_Box_Master AS M WITH (NOLOCK) ON M.qrtext = S.qr_text
            LEFT JOIN [sec].view_EvmLocation AS ls ON S.from_user_code = ls.code
            LEFT JOIN [sec].view_EvmLocation AS lr ON S.to_user_code = lr.code
            WHERE
                S.is_received = 1
                AND S.to_user_code = @zonecode
                AND (@box_size IS NULL OR @box_size = '' OR M.box_size = @box_size)
            ORDER BY S.sr_no ASC
            OFFSET (@PageNumber - 1) * @PageSize ROWS
            FETCH NEXT @PageSize ROWS ONLY;
        END
        ELSE
        BEGIN
            DECLARE @tousercode CHAR(13) = @zonecode;
            DECLARE @ToUserCodeComparisonLength INT;

            IF @userlevelcode = '000'
            BEGIN
                SET @tousercode = LEFT(@tousercode, 4);
                SET @ToUserCodeComparisonLength = 4;
            END
            ELSE IF @userlevelcode = '001'
            BEGIN
                SET @tousercode = LEFT(@tousercode, 7);
                SET @ToUserCodeComparisonLength = 7;
            END
            ELSE IF @userlevelcode = '002'
            BEGIN
                SET @tousercode = LEFT(@tousercode, 10);
                SET @ToUserCodeComparisonLength = 10;
            END
            ELSE IF @userlevelcode = '999'
            BEGIN
                SET @tousercode = LEFT(@tousercode, 13);
                SET @ToUserCodeComparisonLength = 13;
            END

            SELECT
                S.qr_text,
                CASE M.box_size WHEN 'S' THEN 'Small' WHEN 'M' THEN 'Medium' WHEN 'L' THEN 'Large' ELSE 'Un-known' END AS box_size,
                S.entry_date,
                ls.Name AS senderlocation,
                lr.Name AS receiverlocation,
                S.Problem_remarks,
                S.latitude,
                S.longitude
            FROM sec.Ballot_Box_Master_SrNo AS S WITH (NOLOCK)
            LEFT JOIN sec.Ballot_Box_Master AS M WITH (NOLOCK) ON M.qrtext = S.qr_text
            LEFT JOIN [sec].view_EvmLocation AS ls ON S.from_user_code = ls.code
            LEFT JOIN [sec].view_EvmLocation AS lr ON S.to_user_code = lr.code
            WHERE
                (
                    (@JurisdictionLeftLength > 0 AND LEFT(S.to_user_code, @JurisdictionLeftLength) = LEFT(@usercode, @JurisdictionLeftLength)) OR
                    (@userlevelcode = '999' AND S.to_user_code = @usercode)
                )
                AND S.is_received = 1
                AND LEFT(S.to_user_code, @ToUserCodeComparisonLength) = @tousercode
                AND (@box_size IS NULL OR @box_size = '' OR M.box_size = @box_size)
            ORDER BY S.sr_no ASC
            OFFSET (@PageNumber - 1) * @PageSize ROWS
            FETCH NEXT @PageSize ROWS ONLY;
        END
    END

    -- ACTION 2: In Transit
    IF @action = 0 OR @action = 2
    BEGIN
        SELECT
            S.qr_text,
            CASE M.box_size WHEN 'S' THEN 'Small' WHEN 'M' THEN 'Medium' WHEN 'L' THEN 'Large' ELSE 'Un-known' END AS box_size,
            S.entry_date,
            ls.Name AS senderlocation,
             CASE WHEN lr.Name IS NOT NULL THEN lr.Name ELSE st.State_Name END AS receiverlocation,
            S.Problem_remarks,
            S.latitude,
            S.longitude
        FROM sec.Ballot_Box_Master_SrNo AS S WITH (NOLOCK)
        LEFT JOIN sec.Ballot_Box_Master AS M WITH (NOLOCK) ON M.qrtext = S.qr_text
        LEFT JOIN [sec].view_EvmLocation AS ls ON S.from_user_code = ls.code
        LEFT JOIN [sec].view_EvmLocation AS lr ON S.to_user_code = lr.code
        LEFT JOIN sec.sec.states AS st ON LEFT(S.to_user_code, 2) = st.State_Code 
        WHERE
            (
                (@JurisdictionLeftLength > 0 AND LEFT(S.from_user_code, @JurisdictionLeftLength) = LEFT(@usercode, @JurisdictionLeftLength)) OR
                (@userlevelcode = '999' AND S.from_user_code = @usercode)
            )
            AND S.is_received = 0
            AND (@zonecode IS NULL OR @zonecode = '' OR S.from_user_code = @zonecode)
            AND (@box_size IS NULL OR @box_size = '' OR M.box_size = @box_size)
        ORDER BY S.entry_date DESC
        OFFSET (@PageNumber - 1) * @PageSize ROWS
        FETCH NEXT @PageSize ROWS ONLY;
    END

    -- ACTION 3: In Stock
    IF @action = 0 OR @action = 3
    BEGIN
        IF @is_jurisdiction = 1
        BEGIN
            SELECT
                S.qr_text,
                CASE M.box_size WHEN 'S' THEN 'Small' WHEN 'M' THEN 'Medium' WHEN 'L' THEN 'Large' ELSE 'Un-known' END AS box_size,
                S.entry_date,
                ls.Name AS senderlocation,
                lr.Name AS receiverlocation,
                S.Problem_remarks,
                S.latitude,
                S.longitude
            FROM sec.Ballot_Box_Master_SrNo AS S WITH (NOLOCK)
            LEFT JOIN sec.Ballot_Box_Master AS M WITH (NOLOCK) ON M.qrtext = S.qr_text
            LEFT JOIN [sec].view_EvmLocation AS ls ON S.from_user_code = ls.code
            LEFT JOIN [sec].view_EvmLocation AS lr ON S.to_user_code = lr.code
            WHERE
                S.to_user_code = @zonecode
                AND S.is_received = 1
                AND (@box_size IS NULL OR @box_size = '' OR M.box_size = @box_size)
            ORDER BY S.entry_date DESC
            OFFSET (@PageNumber - 1) * @PageSize ROWS
            FETCH NEXT @PageSize ROWS ONLY;
        END
        ELSE
        BEGIN
            SELECT
                S.qr_text,
                CASE M.box_size WHEN 'S' THEN 'Small' WHEN 'M' THEN 'Medium' WHEN 'L' THEN 'Large' ELSE 'Un-known' END AS box_size,
                S.entry_date,
                ls.Name AS senderlocation,
                lr.Name AS receiverlocation,
                S.Problem_remarks,
                S.latitude,
                S.longitude
            FROM sec.Ballot_Box_Master_SrNo AS S WITH (NOLOCK)
            LEFT JOIN sec.Ballot_Box_Master AS M WITH (NOLOCK) ON M.qrtext = S.qr_text
            LEFT JOIN [sec].view_EvmLocation AS ls ON S.from_user_code = ls.code
            LEFT JOIN [sec].view_EvmLocation AS lr ON S.to_user_code = lr.code
            WHERE
                S.to_user_code = @usercode
                AND S.is_received = 1
                AND (@zonecode IS NULL OR @zonecode = '' OR S.to_user_code = @zonecode)
                AND (@box_size IS NULL OR @box_size = '' OR M.box_size = @box_size)
            ORDER BY S.entry_date DESC
            OFFSET (@PageNumber - 1) * @PageSize ROWS
            FETCH NEXT @PageSize ROWS ONLY;
        END
    END

    -- ACTION 4: Inward
    IF @action = 0 OR @action = 4
    BEGIN
        SELECT
            S.qr_text,
            CASE M.box_size WHEN 'S' THEN 'Small' WHEN 'M' THEN 'Medium' WHEN 'L' THEN 'Large' ELSE 'Un-known' END AS box_size,
            S.entry_date,
            ls.Name AS senderlocation,
            lr.Name AS receiverlocation,
            S.Problem_remarks,
            S.latitude,
            S.longitude
        FROM sec.Ballot_Box_Master_SrNo AS S WITH (NOLOCK)
        LEFT JOIN sec.Ballot_Box_Master AS M WITH (NOLOCK) ON M.qrtext = S.qr_text
        LEFT JOIN [sec].view_EvmLocation AS ls ON S.from_user_code = ls.code
        LEFT JOIN [sec].view_EvmLocation AS lr ON S.to_user_code = lr.code
        WHERE
            S.to_user_code = @usercode
            AND S.is_received = 0
            AND (@zonecode IS NULL OR @zonecode = '' OR S.to_user_code = @zonecode)
            AND (@box_size IS NULL OR @box_size = '' OR M.box_size = @box_size)
        ORDER BY S.entry_date DESC
        OFFSET (@PageNumber - 1) * @PageSize ROWS
        FETCH NEXT @PageSize ROWS ONLY;
    END

    -- ACTION 5: Outward
    IF @action = 0 OR @action = 5
    BEGIN
        SELECT
            S.qr_text,
            CASE M.box_size WHEN 'S' THEN 'Small' WHEN 'M' THEN 'Medium' WHEN 'L' THEN 'Large' ELSE 'Un-known' END AS box_size,
            S.entry_date,
            ls.Name AS senderlocation,
            --lr.Name AS receiverlocation,
            CASE WHEN lr.Name IS NOT NULL THEN lr.Name ELSE st.State_Name END AS receiverlocation,
            S.Problem_remarks,
            S.latitude,
            S.longitude
        FROM sec.Ballot_Box_Master_SrNo AS S WITH (NOLOCK)
        LEFT JOIN sec.Ballot_Box_Master AS M WITH (NOLOCK) ON M.qrtext = S.qr_text
        LEFT JOIN [sec].view_EvmLocation AS ls ON S.from_user_code = ls.code
        LEFT JOIN [sec].view_EvmLocation AS lr ON S.to_user_code = lr.code
        LEFT JOIN sec.sec.states AS st ON LEFT(S.to_user_code, 2) = st.State_Code 
        WHERE
            S.from_user_code = @usercode
            AND S.is_received = 0
            AND (@zonecode IS NULL OR @zonecode = '' OR S.from_user_code = @zonecode)
            AND (@box_size IS NULL OR @box_size = '' OR M.box_size = @box_size)
        ORDER BY S.entry_date DESC
        OFFSET (@PageNumber - 1) * @PageSize ROWS
        FETCH NEXT @PageSize ROWS ONLY;
    END


--    -- ACTION 4: Inward
--    IF @action = 0 OR @action = 4
--    BEGIN
--  select
--         S.qr_text,            
--            CASE M.box_size WHEN 'S' THEN 'Small' WHEN 'M' THEN 'Medium' WHEN 'L' THEN 'Large' ELSE 'Un-known' END AS box_size,            

--            S.entry_date,
--            ls.Name AS senderlocation,
--            lr.Name AS receiverlocation,                  
--            S.Problem_remarks,
--            S.latitude,
--            S.longitude
--        FROM sec.Ballot_Box_Master_SrNo AS S WITH (NOLOCK)
--        LEFT JOIN sec.Ballot_Box_Master AS M WITH (NOLOCK) ON M.qrtext = S.qr_text
--        LEFT JOIN [sec].view_EvmLocation AS ls ON S.from_user_code = ls.code
--        LEFT JOIN [sec].view_EvmLocation AS lr ON S.to_user_code = lr.code

--        WHERE 
--            S.to_user_code = @usercode 
--            AND S.is_received = 0
--          AND (@zonecode IS NULL OR @zonecode = '' OR S.to_user_code = @zonecode)
--AND (@box_size IS NULL OR @box_size = '' OR M.box_size = @box_size)
--        ORDER BY S.entry_date DESC
--        OFFSET (@PageNumber - 1) * @PageSize ROWS
--        FETCH NEXT @PageSize ROWS ONLY;
--    END

--    -- ACTION 5: Outward
--    IF @action = 0 OR @action = 5
--    BEGIN
--        SELECT
--             S.qr_text,            
--            CASE M.box_size WHEN 'S' THEN 'Small' WHEN 'M' THEN 'Medium' WHEN 'L' THEN 'Large' ELSE 'Un-known' END AS box_size,            

--            S.entry_date,
--            ls.Name AS senderlocation,
--            lr.Name AS receiverlocation,                  
--            S.Problem_remarks,
--            S.latitude,
--            S.longitude
--        FROM sec.Ballot_Box_Master_SrNo AS S WITH (NOLOCK)
--        LEFT JOIN sec.Ballot_Box_Master AS M WITH (NOLOCK) ON M.qrtext = S.qr_text
--        LEFT JOIN [sec].view_EvmLocation AS ls ON S.from_user_code = ls.code
--        LEFT JOIN [sec].view_EvmLocation AS lr ON S.to_user_code = lr.code

--        WHERE 
--            S.from_user_code = @usercode 
--          AND S.is_received = 0
--          AND (@zonecode IS NULL OR @zonecode = '' OR S.from_user_code = @zonecode)
--          AND (@box_size IS NULL OR @box_size = '' OR M.box_size = @box_size)
--        ORDER BY S.entry_date DESC
--        OFFSET (@PageNumber - 1) * @PageSize ROWS
--        FETCH NEXT @PageSize ROWS ONLY;
--    END
END;