USP_MEMBERSHIPDUESBATCH_VALIDATE_PAYPLEDGEDMEMBERSHIP
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@MEMBERSHIPTRANSACTIONTYPECODE | tinyint | IN | |
@TRANSACTIONDATE | datetime | IN | |
@EXPIRATIONDATE | datetime | IN | |
@MEMBERSHIPPROGRAMID | uniqueidentifier | IN | |
@MEMBERSHIPLEVELID | uniqueidentifier | IN | |
@MEMBERSHIPLEVELTERMID | uniqueidentifier | IN | |
@CONSTITUENTID | uniqueidentifier | IN | |
@REVENUETYPECODE | tinyint | IN | |
@EXISTINGMEMBERSHIPID | uniqueidentifier | IN | |
@MEMBERSHIPPROGRAMADDON | xml | IN | |
@EXISTINGMEMBERS | xml | IN | |
@MEMBERSHIPCARDS | xml | IN | |
@EXISTINGCHILDREN | xml | IN | |
@NUMBEROFCHILDREN | smallint | IN |
Definition
Copy
CREATE procedure dbo.USP_MEMBERSHIPDUESBATCH_VALIDATE_PAYPLEDGEDMEMBERSHIP
(
@MEMBERSHIPTRANSACTIONTYPECODE tinyint,
@TRANSACTIONDATE datetime,
@EXPIRATIONDATE datetime,
@MEMBERSHIPPROGRAMID uniqueidentifier,
@MEMBERSHIPLEVELID uniqueidentifier,
@MEMBERSHIPLEVELTERMID uniqueidentifier,
@CONSTITUENTID uniqueidentifier,
@REVENUETYPECODE tinyint,
@EXISTINGMEMBERSHIPID uniqueidentifier,
@MEMBERSHIPPROGRAMADDON xml,
@EXISTINGMEMBERS xml,
@MEMBERSHIPCARDS xml,
@EXISTINGCHILDREN xml, -- not currently supported
@NUMBEROFCHILDREN smallint -- Temporary workaround for children not being implemented in 2012 Q1
)
as begin
declare @CANBEPAIDINFULL bit = 0;
declare @CURRENTSTATUS tinyint = 0;
declare @JOINDATE datetime;
declare @ORIGINALPROGRAMID uniqueidentifier;
declare @ORIGINALLEVELID uniqueidentifier;
declare @ORIGINALTERMID uniqueidentifier;
declare @ORIGINALEXPIRATIONDATE datetime;
declare @EXISTINGMEMBERSHIPTRANSACTIONID uniqueidentifier;
--Get the pledge or recurring gift that this payment is being applied to
select top 1
@EXISTINGMEMBERSHIPTRANSACTIONID = FINANCIALTRANSACTION.ID,
@CURRENTSTATUS = STATUSCODE
from dbo.MEMBERSHIPTRANSACTION
inner join dbo.MEMBERSHIP
on MEMBERSHIPTRANSACTION.MEMBERSHIPID = MEMBERSHIP.ID
left join dbo.FINANCIALTRANSACTIONLINEITEM
on MEMBERSHIPTRANSACTION.REVENUESPLITID = FINANCIALTRANSACTIONLINEITEM.ID
left join dbo.REVENUESPLIT_EXT
on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
left join dbo.FINANCIALTRANSACTION
on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
left join dbo.REVENUE_EXT
on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID
where
MEMBERSHIPTRANSACTION.MEMBERSHIPID = @EXISTINGMEMBERSHIPID and
(
STATUSCODE = 2 or
(
FINANCIALTRANSACTION.TYPECODE in (2,15)
and FINANCIALTRANSACTION.DELETEDON is null
and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
and FINANCIALTRANSACTIONLINEITEM.TYPECODE <> 1
and ((FINANCIALTRANSACTION.TYPECODE = 15 and MEMBERSHIPTRANSACTION.TRANSACTIONDATE >= coalesce(MEMBERSHIP.LASTRENEWEDON, MEMBERSHIP.JOINDATE)) or (FINANCIALTRANSACTION.TYPECODE = 2 and MEMBERSHIPTRANSACTION.TRANSACTIONDATE >= MEMBERSHIP.JOINDATE))
)
)
order by MEMBERSHIPTRANSACTION.TRANSACTIONDATE desc
if @EXISTINGMEMBERSHIPTRANSACTIONID is null and @CURRENTSTATUS <> 2
raiserror('BBERR_NOCOMMITMENTFORPAY', 13, 1)
select
@ORIGINALPROGRAMID = MEMBERSHIPPROGRAMID,
@ORIGINALLEVELID = MEMBERSHIPLEVELID,
@ORIGINALTERMID = MEMBERSHIPLEVELTERMID,
@ORIGINALEXPIRATIONDATE = EXPIRATIONDATE,
@JOINDATE = JOINDATE
from dbo.MEMBERSHIP
where ID = @EXISTINGMEMBERSHIPID;
if @MEMBERSHIPPROGRAMID <> @ORIGINALPROGRAMID
raiserror('BBERR_INVALIDPROGRAMFORPAY', 13, 1);
if @MEMBERSHIPLEVELID <> @ORIGINALLEVELID
raiserror('BBERR_INVALIDLEVELFORPAY', 13, 1);
if @MEMBERSHIPLEVELTERMID <> @ORIGINALTERMID
raiserror('BBERR_INVALIDTERMFORPAY', 13, 1);
if dbo.UFN_DATE_GETEARLIESTTIME(@EXPIRATIONDATE) <> dbo.UFN_DATE_GETEARLIESTTIME(@ORIGINALEXPIRATIONDATE)
raiserror('BBERR_INVALIDEXPIRATIONDATEFORPAY', 13, 1);
if exists (
select *
from dbo.MEMBERSHIPTRANSACTION
where MEMBERSHIPID = @EXISTINGMEMBERSHIPID and
TRANSACTIONDATE > @TRANSACTIONDATE
) and @CURRENTSTATUS <> 2
raiserror('BBERR_DATEEARLIERTHANLASTMEMBERSHIPTRANSACTION', 13,1);
if @EXPIRATIONDATE < @JOINDATE
raiserror('BBERR_EXPIRATIONDATEB4JOINDATE', 13, 1);
select
@CANBEPAIDINFULL = MEMBERSHIPPROGRAM.ONEPAYMENTEACHTERM
from
dbo.MEMBERSHIPPROGRAM
inner join dbo.MEMBERSHIPLEVEL
on MEMBERSHIPPROGRAM.ID = MEMBERSHIPLEVEL.MEMBERSHIPPROGRAMID
where
MEMBERSHIPPROGRAM.ID = @MEMBERSHIPPROGRAMID
and MEMBERSHIPLEVEL.ID = @MEMBERSHIPLEVELID
if @CANBEPAIDINFULL = 0 and @REVENUETYPECODE = 0
raiserror('BBERR_PROGRAMCANNOTBEPAIDINFULL', 13, 1);
if exists (
select
T.c.value('(CONSTITUENTID)[1]','uniqueidentifier')
from @EXISTINGMEMBERS.nodes('/EXISTINGMEMBERS/ITEM') T(c)
)
raiserror('BBERR_NOADDITIONALMEMBERSWHENPAYING', 13, 1);
if exists (
select
T.c.value('ADDONID [1]', 'uniqueidentifier')
from @MEMBERSHIPPROGRAMADDON.nodes('/MEMBERSHIPPROGRAMADDON/ITEM') T(c)
where T.c.value('APPLY [1]', 'bit') = 1
and T.c.value('NUMBEROFADDONS [1]', 'int') > 0
)
raiserror('BBERR_NOADDONSWHENPAYING', 13, 1);
if exists (
select
T.c.value('(CONSTITUENTID)[1]','uniqueidentifier')
from @EXISTINGCHILDREN.nodes('/EXISTINGCHILDREN/ITEM') T(c)
)
raiserror('BBERR_NOCHILDRENWHENPAYING', 13, 1);
if @NUMBEROFCHILDREN <> (select NUMBEROFCHILDREN from dbo.MEMBERSHIP where ID = @EXISTINGMEMBERSHIPID)
raiserror('BBERR_NOCHILDRENWHENPAYING', 13, 1);
if exists (
select
T.c.value('(CONSTITUENTID)[1]','uniqueidentifier')
from @MEMBERSHIPCARDS.nodes('/MEMBERSHIPCARDS/ITEM') T(c)
)
raiserror('BBERR_NOCARDSWHENPAYING', 13, 1);
end