USP_MEMBERSHIP_ADDPAYMENT
Adds a membership transaction and related revenue split.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@REVENUEID | uniqueidentifier | IN | |
@CONSTITUENTID | uniqueidentifier | IN | |
@MEMBERSHIPID | uniqueidentifier | INOUT | |
@AMOUNT | money | IN | |
@TRANSACTIONDATE | datetime | IN | |
@MEMBERSHIPS | xml | IN | |
@CREATIONDATE | datetime | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@MEMBERSHIPTRANSACTIONID | uniqueidentifier | INOUT | |
@BASEAMOUNT | money | IN | |
@ORGANIZATIONAMOUNT | money | IN |
Definition
Copy
CREATE procedure dbo.USP_MEMBERSHIP_ADDPAYMENT
(
@REVENUEID uniqueidentifier,
@CONSTITUENTID uniqueidentifier,
@MEMBERSHIPID uniqueidentifier output,
@AMOUNT money,
@TRANSACTIONDATE datetime,
@MEMBERSHIPS xml,
@CREATIONDATE datetime,
@CHANGEAGENTID uniqueidentifier,
@MEMBERSHIPTRANSACTIONID uniqueidentifier = null output,
@BASEAMOUNT money = null,
@ORGANIZATIONAMOUNT money = null
)
as
begin
set nocount on;
declare @ID uniqueidentifier;
set @ID = newid();
-- Get multicurrency values from the revenue.
declare @TRANSACTIONCURRENCYID uniqueidentifier;
declare @BASECURRENCYID uniqueidentifier;
declare @BASEEXCHANGERATEID uniqueidentifier;
declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;
declare @DATE datetime;
declare @POSTDATE date;
declare @POSTSTATUSCODE tinyint;
select
@TRANSACTIONCURRENCYID = FT.TRANSACTIONCURRENCYID,
@BASECURRENCYID = V.BASECURRENCYID,
@BASEEXCHANGERATEID = FT.BASEEXCHANGERATEID,
@ORGANIZATIONEXCHANGERATEID = FT.ORGEXCHANGERATEID,
@DATE = cast(FT.DATE as datetime),
@POSTDATE = FT.POSTDATE,
@POSTSTATUSCODE = FT.POSTSTATUSCODE
from dbo.FINANCIALTRANSACTION FT
inner join dbo.V_BASECURRENCYFORFINANCIALTRANSACTION_I V on V.FINANCIALTRANSACTIONID = FT.ID
where FT.ID = @REVENUEID;
-- Convert the applied amount into base and organization amounts if it is not provided by the caller
if @BASEAMOUNT is null or @ORGANIZATIONAMOUNT is null
exec dbo.USP_CURRENCY_GETCURRENCYVALUES @AMOUNT, @DATE, @BASECURRENCYID, @BASEEXCHANGERATEID output, @TRANSACTIONCURRENCYID output, @BASEAMOUNT output, null, @ORGANIZATIONAMOUNT output, @ORGANIZATIONEXCHANGERATEID output, 0;
insert into dbo.FINANCIALTRANSACTIONLINEITEM
(ID
,FINANCIALTRANSACTIONID
,TRANSACTIONAMOUNT
,VISIBLE
,DESCRIPTION
,SEQUENCE
,TYPECODE
,POSTDATE
,POSTSTATUSCODE
,BASEAMOUNT
,ORGAMOUNT
-- Boilerplate
,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values
(@ID
,@REVENUEID
,@AMOUNT
,1
,''
,1
,0
,@POSTDATE
,@POSTSTATUSCODE
,@BASEAMOUNT
,@ORGANIZATIONAMOUNT
,@CHANGEAGENTID, @CHANGEAGENTID, @CREATIONDATE, @CREATIONDATE)
merge dbo.REVENUESPLIT_EXT as target
using (select @ID [ID]) as source
on (source.ID = target.ID)
when matched then
update set
DESIGNATIONID = null
,CHANGEDBYID = @CHANGEAGENTID
,DATECHANGED = @CREATIONDATE
when not matched then
insert
(
ID
,DESIGNATIONID
,TYPECODE
,APPLICATIONCODE
,OVERRIDEBUSINESSUNITS
,REVENUESPLITBUSINESSUNITOVERRIDECODEID
-- boilerplate
,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
)
values
(
@ID
,null
,2
,5
,0
,null
-- boilerplate
,@CHANGEAGENTID, @CHANGEAGENTID, @CREATIONDATE, @CREATIONDATE);
-- create recognitions
exec dbo.USP_REVENUEDETAIL_CREATERECOGNITIONS @ID, @CHANGEAGENTID, @CREATIONDATE;
declare @MEMBERSHIPLEVELID uniqueidentifier;
declare @MEMBERSHIPLEVELTERMID uniqueidentifier;
declare @MEMBERSHIPTYPECODEID uniqueidentifier;
declare @NUMBEROFCHILDREN tinyint;
declare @COMMENTS nvarchar(1000);
declare @ISGIFT bit;
declare @SENDRENEWALCODE tinyint;
declare @EXPIRATIONDATE datetime;
declare @MEMBERS xml;
declare @GIVENBYID uniqueidentifier;
select
@MEMBERSHIPLEVELID = T.c.value('(MEMBERSHIPLEVELID)[1]','uniqueidentifier'),
@MEMBERSHIPLEVELTERMID = T.c.value('(MEMBERSHIPLEVELTERMID)[1]','uniqueidentifier'),
--Bug 81099 - AdamBu 3/23/10 - Depending on where the call into this SP comes from (Payment Add form vs. Revenue Batch),
-- the following node's name is different. Given that changing it in either place would be a breaking change and the
-- large number of existing code paths that lead to this SP, we're forced to handle both possible names here.
@MEMBERSHIPTYPECODEID = coalesce(T.c.value('(MEMBERSHIPTYPECODEID)[1]','uniqueidentifier'),T.c.value('(MEMBERSHIPLEVELTYPECODEID)[1]','uniqueidentifier')),
@NUMBEROFCHILDREN = T.c.value('(NUMBEROFCHILDREN)[1]','tinyint'),
@COMMENTS = T.c.value('(COMMENTS)[1]','nvarchar(1000)'),
@ISGIFT = T.c.value('(ISGIFT)[1]','bit'),
@SENDRENEWALCODE = T.c.value('(SENDRENEWALCODE)[1]','tinyint'),
@EXPIRATIONDATE = T.c.value('(EXPIRATIONDATE)[1]','datetime'),
@MEMBERS = T.c.query('./MEMBERS'),
@GIVENBYID = T.c.value('(GIVENBYID)[1]','uniqueidentifier')
from
@MEMBERSHIPS.nodes('/MEMBERSHIPFIELDS/ITEM') T(c)
declare @BENEFITSWAIVED bit
select @BENEFITSWAIVED = BENEFITSWAIVED from dbo.REVENUE where ID = @REVENUEID;
if @BENEFITSWAIVED = 0 and @CONSTITUENTID is not null
begin
declare @NEWBENEFITS xml;
set @NEWBENEFITS = dbo.UFN_REVENUE_GETBENEFITS2_TOITEMLISTXML(@REVENUEID);
insert into dbo.BENEFITCONSTITUENTDECLINED
(
BENEFITID,
CONSTITUENTID,
ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
)
select
MLB.BENEFITID,
@CONSTITUENTID,
@CHANGEAGENTID, @CHANGEAGENTID, @CREATIONDATE, @CREATIONDATE
from
dbo.MEMBERSHIPLEVELBENEFIT MLB
where
MLB.MEMBERSHIPLEVELID = @MEMBERSHIPLEVELID and
MLB.BENEFITID not in
(
select BCD.BENEFITID
from dbo.BENEFITCONSTITUENTDECLINED BCD
where BCD.CONSTITUENTID = @CONSTITUENTID
) and
MLB.BENEFITID not in
(
select T.c.value('(BENEFITID)[1]','uniqueidentifier')
from @NEWBENEFITS.nodes('/BENEFITS/ITEM') T(c)
);
-- If benefit is added constituent is no longer declining it
delete from
dbo.BENEFITCONSTITUENTDECLINED
where
CONSTITUENTID = @CONSTITUENTID
and BENEFITID in
(
select T.c.value('(BENEFITID)[1]','uniqueidentifier')
from @NEWBENEFITS.nodes('/BENEFITS/ITEM') T(c)
)
end
exec dbo.USP_MEMBERSHIP_ADDFROMSALE
@CONSTITUENTID,
@TRANSACTIONDATE,
@MEMBERSHIPID output,
@MEMBERSHIPLEVELID,
@MEMBERSHIPLEVELTERMID,
@MEMBERSHIPTYPECODEID,
@NUMBEROFCHILDREN,
@COMMENTS,
@ISGIFT,
@SENDRENEWALCODE,
@EXPIRATIONDATE,
@MEMBERS,
@GIVENBYID,
@CHANGEAGENTID,
@ID,
@MEMBERSHIPTRANSACTIONID output;
-- Insert campaigns into revenuesplitcampaign for this payment.
insert into dbo.REVENUESPLITCAMPAIGN
(
REVENUESPLITID,
CAMPAIGNID,
CAMPAIGNSUBPRIORITYID,
ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
)
select
@ID,
-- Check override setting on this program/level. If on, use campaign on level if not use program.
case ML.OVERRIDECAMPAIGNS when 1 then MLC.CAMPAIGNID else MPC.CAMPAIGNID end CAMPAIGNID,
case ML.OVERRIDECAMPAIGNS when 1 then MLC.CAMPAIGNSUBPRIORITYID else MPC.CAMPAIGNSUBPRIORITYID end CAMPAIGNSUBPRIORITYID,
@CHANGEAGENTID, @CHANGEAGENTID, @CREATIONDATE, @CREATIONDATE
from
dbo.MEMBER M
inner join
dbo.MEMBERSHIP MS on M.MEMBERSHIPID = MS.ID
inner join
dbo.MEMBERSHIPLEVEL ML on ML.ID = MS.MEMBERSHIPLEVELID
left outer join
dbo.MEMBERSHIPPROGRAMCAMPAIGN MPC on MS.MEMBERSHIPPROGRAMID = MPC.MEMBERSHIPPROGRAMID
left outer join
dbo.MEMBERSHIPLEVELCAMPAIGN MLC on MS.MEMBERSHIPLEVELID = MLC.MEMBERSHIPLEVELID
where
MS.ID = @MEMBERSHIPID and
MS.MEMBERSHIPLEVELID = @MEMBERSHIPLEVELID and
(isnull(MS.LASTRENEWEDON,MS.JOINDATE) between MPC.DATEFROM and MPC.DATETO or (MPC.DATEFROM IS NULL and MPC.DATETO IS NULL)) and
(isnull(MS.LASTRENEWEDON,MS.JOINDATE) between MLC.DATEFROM and MLC.DATETO or (MLC.DATEFROM IS NULL and MLC.DATETO IS NULL)) and
(isnull(MLC.CAMPAIGNID,MPC.CAMPAIGNID) is not null) and
(select CAMPAIGN.ISACTIVE from dbo.CAMPAIGN where CAMPAIGN.ID = (case ML.OVERRIDECAMPAIGNS when 1 then MLC.CAMPAIGNID else MPC.CAMPAIGNID end)) = 1;
return 0;
end