MobileGetBallotBoxCountBySize
USE [secInventory]
GO
/****** Object: StoredProcedure [sec].[Mobile_GetBallotBoxCountBySize] Script Date: 7/22/2025 5:00:16 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*
EXEC sec.Mobile_GetBallotBoxCountBySize
@userlevelcode = '000',
@usercode = 'AdminState',
@zonecode = '1308000000000',
@action=1,
@is_jurisdiction =0;
EXEC sec.Mobile_GetBallotBoxCountBySize
@userlevelcode = '000',
@usercode = 'AdminState',
@zonecode = '1308001000000',
@action=1,
@is_jurisdiction =1;
EXEC sec.Mobile_GetBallotBoxCountBySize
@userlevelcode = '001',
@usercode = 'dpomandi',
@zonecode = '1308001000000',
@action=1;
EXEC sec.Mobile_GetBallotBoxCountBySize
@userlevelcode = '000',
@usercode = 'AdminState',
@zonecode = '',
@action=3;
EXEC sec.Mobile_GetBallotBoxCountBySize
@userlevelcode = '000',
@usercode = 'AdminState',
@zonecode = '1300000000000',
@action=2;
EXEC sec.Mobile_GetBallotBoxCountBySize
@userlevelcode = '001',
@usercode = 'dpomandi',
@zonecode = '1308000000000';
EXEC sec.Mobile_GetBallotBoxCountBySize
@userlevelcode = '002',
@usercode = 'bdobalh',
@zonecode = '1308001000000';
*/
ALTER PROCEDURE [sec].[Mobile_GetBallotBoxCountBySize]
@userlevelcode CHAR(3),
@usercode CHAR(13),
@zonecode CHAR(13) = NULL,
@action INT = 1, -- 1=Received, 2=In Transit, 3=In Stock, 4=Inward, 5=Outward
@is_jurisdiction INT=0
AS
BEGIN
SET NOCOUNT ON;
-- Resolve actual user code
SET @usercode = [secInventory].[sec].get_user_code(@usercode);
-- Determine jurisdiction scope
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;
-- Derive effective zone from @zonecode or fallback to @usercode
DECLARE @zone CHAR(13);
SET @zone =
CASE
WHEN @zonecode IS NULL OR LTRIM(RTRIM(@zonecode)) = '' THEN @usercode
ELSE @zonecode
END;
-- ACTION 1: Received in jurisdiction
IF @action = 1
BEGIN
IF @is_jurisdiction = 1
BEGIN
-- Use @zone directly for to_user_code filter
SELECT
@zone AS zonecode,
CASE S.box_size
WHEN 'S' THEN 'Small'
WHEN 'M' THEN 'Medium'
WHEN 'L' THEN 'Large'
ELSE 'Un-known'
END AS box_size,
COUNT(*) AS total_boxes, @is_jurisdiction as is_jurisdiction
FROM sec.Ballot_Box_Master_SrNo S WITH (NOLOCK)
WHERE
S.is_received = 1
AND S.to_user_code = @zone
GROUP BY S.box_size
ORDER BY box_size;
END
ELSE
BEGIN
IF @zonecode IS NOT NULL AND LTRIM(RTRIM(@zonecode)) <> ''
BEGIN
DECLARE @tousercode CHAR(13) = @zone;
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
END
SELECT
@zone AS zonecode,
CASE S.box_size
WHEN 'S' THEN 'Small'
WHEN 'M' THEN 'Medium'
WHEN 'L' THEN 'Large'
ELSE 'Un-known'
END AS box_size,
COUNT(*) AS total_boxes,@is_jurisdiction as is_jurisdiction
FROM sec.Ballot_Box_Master_SrNo S WITH (NOLOCK)
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
GROUP BY S.box_size
ORDER BY box_size;
END
END
-- ACTION 2: In Transit
ELSE IF @action = 2
BEGIN
SELECT
@zone AS zonecode,
CASE S.box_size
WHEN 'S' THEN 'Small'
WHEN 'M' THEN 'Medium'
WHEN 'L' THEN 'Large'
ELSE 'Un-known'
END AS box_size,
COUNT(*) AS total_boxes,@is_jurisdiction as is_jurisdiction
FROM sec.Ballot_Box_Master_SrNo S WITH (NOLOCK)
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 S.from_user_code = @zone
GROUP BY S.box_size
ORDER BY box_size;
END
-- ACTION 3: In Stock
ELSE IF @action = 3
BEGIN
IF @is_jurisdiction = 1
BEGIN
SELECT
@zone AS zonecode,
CASE S.box_size
WHEN 'S' THEN 'Small'
WHEN 'M' THEN 'Medium'
WHEN 'L' THEN 'Large'
ELSE 'Un-known'
END AS box_size,
COUNT(*) AS total_boxes,@is_jurisdiction as is_jurisdiction
FROM sec.Ballot_Box_Master_SrNo S WITH (NOLOCK)
WHERE
S.to_user_code = @zone
AND S.is_received = 1
GROUP BY S.box_size
ORDER BY box_size;
END
ELSE
BEGIN
SELECT
@zone AS zonecode,
CASE S.box_size
WHEN 'S' THEN 'Small'
WHEN 'M' THEN 'Medium'
WHEN 'L' THEN 'Large'
ELSE 'Un-known'
END AS box_size,
COUNT(*) AS total_boxes,@is_jurisdiction as is_jurisdiction
FROM sec.Ballot_Box_Master_SrNo S WITH (NOLOCK)
WHERE
S.to_user_code = @usercode
AND S.is_received = 1
AND S.to_user_code = @zone
GROUP BY S.box_size
ORDER BY box_size;
END
END
-- ACTION 4: Inward
ELSE IF @action = 4
BEGIN
SELECT
@zone AS zonecode,
CASE S.box_size
WHEN 'S' THEN 'Small'
WHEN 'M' THEN 'Medium'
WHEN 'L' THEN 'Large'
ELSE 'Un-known'
END AS box_size,
COUNT(*) AS total_boxes,@is_jurisdiction as is_jurisdiction
FROM sec.Ballot_Box_Master_SrNo S WITH (NOLOCK)
WHERE S.to_user_code = @usercode
AND S.is_received = 0
AND S.to_user_code = @zone
GROUP BY S.box_size
ORDER BY box_size;
END
-- ACTION 5: Outward
ELSE IF @action = 5
BEGIN
SELECT
@zone AS zonecode,
CASE S.box_size
WHEN 'S' THEN 'Small'
WHEN 'M' THEN 'Medium'
WHEN 'L' THEN 'Large'
ELSE 'Un-known'
END AS box_size,
COUNT(*) AS total_boxes,@is_jurisdiction as is_jurisdiction
FROM sec.Ballot_Box_Master_SrNo S WITH (NOLOCK)
WHERE S.from_user_code = @usercode
AND S.is_received = 0
AND S.from_user_code = @zone
GROUP BY S.box_size
ORDER BY box_size;
END
END;