USP_PRINTMEMBERSHIPCARDS_GENERATECARDSNUMBER
Generates membership card number.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@PRINTMEMBERSHIPCARDSPROCESSSTATUSID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@OUTPUTTABLENAME | nvarchar(100) | IN |
Definition
Copy
CREATE procedure dbo.USP_PRINTMEMBERSHIPCARDS_GENERATECARDSNUMBER (
@PRINTMEMBERSHIPCARDSPROCESSSTATUSID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@OUTPUTTABLENAME nvarchar(100) = null
)
as
set nocount on;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
begin try
declare @SQL nvarchar(max)
if @OUTPUTTABLENAME is null
select @OUTPUTTABLENAME = TABLENAME
from dbo.BUSINESSPROCESSOUTPUT
where BUSINESSPROCESSSTATUSID = @PRINTMEMBERSHIPCARDSPROCESSSTATUSID
-- Update membership card number
set @SQL = '
update dbo.MEMBERSHIPCARD
set CARDNUMBER = convert(nvarchar(100), COMPUTEDMEMBERSHIPID) +
case
when (case
when M.LASTCARDNUMBER < isnull(CARDNUMERTABLE.SUFFIX, 0)
then isnull(CARDNUMERTABLE.SUFFIX, 0)
else M.LASTCARDNUMBER
end + SUFFIXTABLE.ROWNUMBER < 10) then ''00'' + convert(char(1), case
when M.LASTCARDNUMBER < isnull(CARDNUMERTABLE.SUFFIX, 0)
then isnull(CARDNUMERTABLE.SUFFIX, 0)
else M.LASTCARDNUMBER
end + SUFFIXTABLE.ROWNUMBER)
when (case
when M.LASTCARDNUMBER < isnull(CARDNUMERTABLE.SUFFIX, 0)
then isnull(CARDNUMERTABLE.SUFFIX, 0)
else M.LASTCARDNUMBER
end + SUFFIXTABLE.ROWNUMBER >= 10) and (case
when M.LASTCARDNUMBER < isnull(CARDNUMERTABLE.SUFFIX, 0)
then isnull(CARDNUMERTABLE.SUFFIX, 0)
else M.LASTCARDNUMBER
end + SUFFIXTABLE.ROWNUMBER < 100) then ''0'' + convert(char(2), case
when M.LASTCARDNUMBER < isnull(CARDNUMERTABLE.SUFFIX, 0)
then isnull(CARDNUMERTABLE.SUFFIX, 0)
else M.LASTCARDNUMBER
end + SUFFIXTABLE.ROWNUMBER)
when (case
when M.LASTCARDNUMBER < isnull(CARDNUMERTABLE.SUFFIX, 0)
then isnull(CARDNUMERTABLE.SUFFIX, 0)
else M.LASTCARDNUMBER
end + SUFFIXTABLE.ROWNUMBER >=100) and (case
when M.LASTCARDNUMBER < isnull(CARDNUMERTABLE.SUFFIX, 0)
then isnull(CARDNUMERTABLE.SUFFIX, 0)
else M.LASTCARDNUMBER
end + SUFFIXTABLE.ROWNUMBER < 1000) then convert(char(3), case
when M.LASTCARDNUMBER < isnull(CARDNUMERTABLE.SUFFIX, 0)
then isnull(CARDNUMERTABLE.SUFFIX, 0)
else M.LASTCARDNUMBER
end + SUFFIXTABLE.ROWNUMBER)
end,
PRINTDATE = getdate(),
PRINTEDBYID = ''' + convert(nvarchar(100), @CHANGEAGENTID) + ''',
PRINTMEMBERSHIPCARDSPROCESSSTATUSID = ''' + convert(nvarchar(100), @PRINTMEMBERSHIPCARDSPROCESSSTATUSID) + ''',
DATECHANGED = getdate(),
CHANGEDBYID = ''' + convert(nvarchar(100), @CHANGEAGENTID) + '''
from ' + @OUTPUTTABLENAME + ' OUTPUTTABLE
inner join dbo.MEMBERSHIPCARD MC on OUTPUTTABLE.MEMBERSHIPCARDID = MC.ID
inner join dbo.MEMBERSHIP M on OUTPUTTABLE.ID = M.ID
left join (select MEMBERSHIP.SEQUENCEID, MAX(CONVERT(int, right(MEMBERSHIPCARD.CARDNUMBER, 3))) as SUFFIX
from dbo.MEMBERSHIPCARD
inner join dbo.MEMBER on MEMBERSHIPCARD.MEMBERID = MEMBER.ID
inner join dbo.MEMBERSHIP on MEMBER.MEMBERSHIPID = MEMBERSHIP.ID
where MEMBERSHIPCARD.CARDNUMBER like convert(nvarchar(100), MEMBERSHIP.SEQUENCEID) + ''%''
and ISNUMERIC(right(MEMBERSHIPCARD.CARDNUMBER, 3)) = 1
group by MEMBERSHIP.SEQUENCEID) as CARDNUMERTABLE
on M.SEQUENCEID = CARDNUMERTABLE.SEQUENCEID
inner join (select MEMBERSHIPCARDID,
row_number() over (partition by ID order by COMPUTEDMEMBERSHIPID) as ROWNUMBER
from ' + @OUTPUTTABLENAME + ') as SUFFIXTABLE
on SUFFIXTABLE.MEMBERSHIPCARDID = OUTPUTTABLE.MEMBERSHIPCARDID
where MC.STATUSCODE = 0'
exec (@SQL)
-- Update output table
set @SQL = '
update ' + @OUTPUTTABLENAME + '
set CARDNUMBER = ''*'' + MC.CARDNUMBER + ''*'',
CARDNUMBERDISPLAY = MC.CARDNUMBER
from ' + @OUTPUTTABLENAME + ' OUTPUTTABLE
inner join dbo.MEMBERSHIPCARD MC on OUTPUTTABLE.MEMBERSHIPCARDID = MC.ID
inner join dbo.MEMBERSHIP M on OUTPUTTABLE.ID = M.ID
'
exec (@SQL)
-- Update last card number of the membership
set @SQL = '
update dbo.MEMBERSHIP
set LASTCARDNUMBER = SUFFIX
from dbo.MEMBERSHIP M
inner join (select ID, MAX(CONVERT(int, right(CARDNUMBERDISPLAY, 3))) as SUFFIX from ' + @OUTPUTTABLENAME + '
group by ID) as MC on M.ID = MC.ID
'
exec (@SQL)
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;