USP_DATAFORMTEMPLATE_VIEW_CREDITMEMBERSHIPVIEW
The load procedure used by the view dataform template "Credit Membership Refund View"
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | The input ID parameter used to load the fields defined on the form. |
@DATALOADED | bit | INOUT | Output parameter indicating whether or not data was actually loaded. |
@ITEMS | xml | INOUT | ITEMS |
@TOTAL | money | INOUT | Order total |
@PAYMENTS | xml | INOUT | PAYMENTS |
@OTHERPAYMENTMETHODS | xml | INOUT | OTHERPAYMENTMETHODS |
@TRANSACTIONID | uniqueidentifier | INOUT | TRANSACTIONID |
@TIMESTAMP | bigint | INOUT | TIMESTAMP |
@CONSTITUENTID | uniqueidentifier | INOUT | |
@CONSTITUENTNAME | nvarchar(154) | INOUT |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_VIEW_CREDITMEMBERSHIPVIEW
(
@ID uniqueidentifier,
@DATALOADED bit = 0 output,
@ITEMS xml = null output,
@TOTAL money = null output,
@PAYMENTS xml = null output,
@OTHERPAYMENTMETHODS xml = null output,
@TRANSACTIONID uniqueidentifier = null output,
@TIMESTAMP bigint = null output,
@CONSTITUENTID uniqueidentifier = null output,
@CONSTITUENTNAME nvarchar(154) = null output
)
as
set nocount on;
set @DATALOADED = 0;
set @DATALOADED = 0;
--Raise error if membership is not active
if (select [STATUSCODE] from dbo.[MEMBERSHIP] where [ID] = @ID) <> 0
begin
raiserror('The membership selected is not active. Only active memberships may be refunded.', 13, 1);
end
if (select [EXPIRATIONDATE] from dbo.[MEMBERSHIP] where [ID] = @ID) < getdate()
begin
raiserror('The membership selected has lapsed. Lapsed memberships may not be refunded.', 13, 1);
end
declare @MEMBERSHIPTRANSACTIONID uniqueidentifier =
(select top(1)
[ID]
from dbo.[MEMBERSHIPTRANSACTION]
where [MEMBERSHIPID] = @ID order by [DATEADDED] desc)
/*Allowing $0 refunds
--Raise error if there is no payment attached to the transaction
if not exists( select [REVENUESPLIT].[ID]
from dbo.[MEMBERSHIPTRANSACTION]
inner join dbo.[REVENUESPLIT]
on [MEMBERSHIPTRANSACTION].[REVENUESPLITID] = [REVENUESPLIT].[ID]
where [MEMBERSHIPTRANSACTION].[ID] = @MEMBERSHIPTRANSACTIONID)
begin
raiserror('The membership selected has $0 available for refund.', 13, 1);
return 0;
end
*/
set @TRANSACTIONID = @MEMBERSHIPTRANSACTIONID
declare @ITEMSTABLE table(
[SALESORDERITEMID] uniqueidentifier,
[DESCRIPTION] nvarchar(500),
[QUANTITY] int,
[PRICE] money,
[TOTAL] money,
[DISCOUNTS] money,
[DISCOUNTED] bit,
[TYPECODE] tinyint,
[SALESORDERID] uniqueidentifier,
[ITEMID] uniqueidentifier,
[REVENUESPLITID] uniqueidentifier,
HASCONTRIBUTEDREVENUE bit
)
declare @PAYMENTSTABLE table(
[INCLUDE] bit,
[DESCRIPTION] nvarchar(500),
[DISPLAYDESCRIPTION] nvarchar(500),
[DISPLAYSOURCE] nvarchar(100),
[SOURCENUMBER] nvarchar(100),
[SOURCETYPE] tinyint,
[REFUNDAMOUNT] money,
[AMOUNTPAID] money,
[PAYMENTTYPECODE] tinyint,
[REVENUEID] uniqueidentifier,
[REVENUESPLITID] uniqueidentifier,
[TRANSACTIONID] uniqueidentifier,
[PAYMENTDATE] datetime
)
select
@OTHERPAYMENTMETHODS =
(select
[ID],
[DESCRIPTION]
from dbo.[OTHERPAYMENTMETHODCODE]
for xml raw ('ITEM'), type, elements, root('OTHERPAYMENTMETHODS'), BINARY BASE64)
declare @SALESORDERID uniqueidentifier
select @SALESORDERID = SALESORDER.ID
from dbo.[SALESORDER]
inner join dbo.[SALESORDERITEM]
on [SALESORDER].[ID] = [SALESORDERITEM].[SALESORDERID]
inner join dbo.[SALESORDERITEMMEMBERSHIP]
on [SALESORDERITEM].[ID] = [SALESORDERITEMMEMBERSHIP].[ID]
where [SALESORDERITEMMEMBERSHIP].[MEMBERSHIPTRANSACTIONID] = @MEMBERSHIPTRANSACTIONID
--If the membership was paid for on an order
--get all the times
if @SALESORDERID is not null
begin
insert into @ITEMSTABLE
select
[SALESORDERITEM].[ID] as [SALESORDERITEMID],
[SALESORDERITEM].[DESCRIPTION],
1 as [QUANTITY],
[SALESORDERITEM].[TOTAL] as [PRICE],
[SALESORDERITEM].[TOTAL] - sum(coalesce([SALESORDERITEMMEMBERSHIPITEMPROMOTION].[AMOUNT], 0)) as [TOTAL],
sum(coalesce([SALESORDERITEMMEMBERSHIPITEMPROMOTION].[AMOUNT], 0)) as [DISCOUNTS],
case count(SALESORDERITEMMEMBERSHIPITEMPROMOTION.ID)
when 0 then 0
else 1
end as [DISCOUNTED],
[SALESORDERITEM].[TYPECODE] as [TYPECODE],
[SALESORDERITEM].[SALESORDERID],
MEMBERSHIPTRANSACTION.ID as ITEMID,
MEMBERSHIPTRANSACTION.REVENUESPLITID,
0 as HASCONTRIBUTEDREVENUE
from dbo.[SALESORDERITEM]
inner join dbo.[SALESORDERITEMMEMBERSHIP]
on [SALESORDERITEM].[ID] = [SALESORDERITEMMEMBERSHIP].[ID]
left outer join dbo.[SALESORDERITEMMEMBERSHIPITEMPROMOTION]
on [SALESORDERITEM].[ID] = [SALESORDERITEMMEMBERSHIPITEMPROMOTION].[SALESORDERITEMID]
inner join dbo.MEMBERSHIPTRANSACTION
on SALESORDERITEMMEMBERSHIP.MEMBERSHIPTRANSACTIONID = MEMBERSHIPTRANSACTION.ID
where [SALESORDERITEM].[SALESORDERID] = @SALESORDERID
and MEMBERSHIPTRANSACTION.ID = @MEMBERSHIPTRANSACTIONID
group by
[SALESORDERITEM].[ID],
[SALESORDERITEM].[DESCRIPTION],
[SALESORDERITEM].[TOTAL],
[SALESORDERITEM].[TYPECODE],
[SALESORDERITEM].[SALESORDERID],
[MEMBERSHIPTRANSACTION].[ID],
MEMBERSHIPTRANSACTION.REVENUESPLITID
end
--The membership was paid for outside of an order
--get all the items
else
begin
--Get membership description
declare @ORDERITEMDESCRIPTION nvarchar(255);
select @ORDERITEMDESCRIPTION = isnull(dbo.UFN_MEMBERSHIPPROGRAM_GETNAME([MEMBERSHIP].[MEMBERSHIPPROGRAMID]) + ' - ' +
dbo.UFN_MEMBERSHIPLEVEL_GETNAME([MEMBERSHIPTRANSACTION].[MEMBERSHIPLEVELID]) + ' (' +
dbo.UFN_MEMBERSHIPLEVELTERM_GETVALUE([MEMBERSHIPTRANSACTION].[MEMBERSHIPLEVELTERMID]) + '): ', '') +
[MEMBERSHIPTRANSACTION].[ACTION]
from dbo.[MEMBERSHIPTRANSACTION]
inner join dbo.[MEMBERSHIP] on [MEMBERSHIPTRANSACTION].[MEMBERSHIPID] = [MEMBERSHIP].[ID]
where [MEMBERSHIPTRANSACTION].[ID] = @MEMBERSHIPTRANSACTIONID
insert into @ITEMSTABLE
select
null as [SALESORDERITEMID],
@ORDERITEMDESCRIPTION as [DESCRIPTION],
1 as [QUANTITY],
[FINANCIALTRANSACTIONLINEITEM].[ORGAMOUNT] as [PRICE],
[FINANCIALTRANSACTIONLINEITEM].[ORGAMOUNT] as [TOTAL],
0 as [DISCOUNTS],
0 as [DISCOUNTED],
1 as [TYPECODE],
null as [SALESORDERID],
@TRANSACTIONID as [ITEMID],
[MEMBERSHIPTRANSACTION].[REVENUESPLITID],
0 as HASCONTRIBUTEDREVENUE
from dbo.[MEMBERSHIP]
inner join dbo.[MEMBERSHIPTRANSACTION] on [MEMBERSHIPTRANSACTION].[MEMBERSHIPID] = [MEMBERSHIPID]
inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.ID = MEMBERSHIPTRANSACTION.REVENUESPLITID
where [MEMBERSHIP].[ID] = @ID
and [MEMBERSHIPTRANSACTION].[ID] = @MEMBERSHIPTRANSACTIONID
end
--find all the addons
insert into @ITEMSTABLE
select
[SALESORDERITEM].[ID] as [SALESORDERITEMID],
[ADDON].[NAME],
[NOTREFUNDED].[QUANTITY],
[MEMBERSHIPADDON].[ORGANIZATIONPURCHASEPRICE],
[MEMBERSHIPADDON].[ORGANIZATIONPURCHASEPRICE] * [MEMBERSHIPADDON].[QUANTITY] - isnull(REFUNDS.TOTAL, 0),
0 as [DISCOUNT],
0 as [DISCOUNTED],
16,
[SALESORDERITEM].[SALESORDERID],
[MEMBERSHIPADDON].[ID] as [ITEMID],
[MEMBERSHIPADDON].[REVENUESPLITID],
0 as HASCONTRIBUTEDREVENUE
from dbo.[MEMBERSHIPADDON]
inner join dbo.[ADDON] on [ADDON].[ID] = [MEMBERSHIPADDON].[ADDONID]
left join dbo.[SALESORDERITEMMEMBERSHIPADDON] on [SALESORDERITEMMEMBERSHIPADDON].[MEMBERSHIPADDONID] = [MEMBERSHIPADDON].[ID]
left join dbo.[SALESORDERITEM] on [SALESORDERITEM].[ID] = [SALESORDERITEMMEMBERSHIPADDON].[ID]
outer apply (
select
sum(QUANTITY) as QUANTITY,
sum(FINANCIALTRANSACTIONLINEITEM.ORGAMOUNT) as TOTAL
from dbo.FINANCIALTRANSACTIONLINEITEM
inner join dbo.FINANCIALTRANSACTION
on FINANCIALTRANSACTION.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
inner join dbo.CREDITITEM_EXT
on CREDITITEM_EXT.ID = FINANCIALTRANSACTIONLINEITEM.ID
where
FINANCIALTRANSACTION.TYPECODE = 23 and --refund
CREDITITEM_EXT.TYPECODE = 16 and --membershipaddon
FINANCIALTRANSACTIONLINEITEM.SOURCELINEITEMID = [MEMBERSHIPADDON].[REVENUESPLITID]
) REFUNDS
cross apply (
select [MEMBERSHIPADDON].[QUANTITY] - isnull([REFUNDS].[QUANTITY], 0) as QUANTITY
) NOTREFUNDED
where
[MEMBERSHIPADDON].[MEMBERSHIPID] = @ID
and [MEMBERSHIPADDON].[MEMBERSHIPTRANSACTIONID] = @MEMBERSHIPTRANSACTIONID
and NOTREFUNDED.QUANTITY > 0
--Get the total of the membership and all the addons
select
@TOTAL = sum([TOTAL])
from @ITEMSTABLE;
--Update it if it has contributed revenue
;with CONTRIBUTEDREVENUE_CTE as
(
select
case
when sum(FTLI.TRANSACTIONAMOUNT) > 0 then
1
else
0
end HASCONTRIBUTEDREVENUE,
I.REVENUESPLITID as ID
from @ITEMSTABLE I
inner join dbo.FINANCIALTRANSACTIONLINEITEM FTLI on FTLI.SOURCELINEITEMID = I.REVENUESPLITID
inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT_EXT.ID = FTLI.ID
where REVENUESPLIT_EXT.TYPECODE = 0 and REVENUESPLIT_EXT.APPLICATIONCODE = 0 --only donations
and FTLI.TYPECODE = 0 --only standard ft line items
group by I.REVENUESPLITID
)
update @ITEMSTABLE
set HASCONTRIBUTEDREVENUE = CTE.HASCONTRIBUTEDREVENUE
from CONTRIBUTEDREVENUE_CTE CTE where CTE.ID = REVENUESPLITID
select @ITEMS =
(
select
[SALESORDERITEMID] as [SALESORDERITEMID],
[DESCRIPTION],
sum([QUANTITY]) as [QUANTITY],
0 as [QUANTITYREFUNDING],
[PRICE],
0 as [FEES],
sum([TOTAL]) as [TOTAL],
0 as [REFUNDTOTAL],
sum([DISCOUNTS]) as [DISCOUNTS],
0 as [INCLUDE],
[DISCOUNTED],
[TYPECODE],
null as [PROGRAMID],
[ITEMID],
[REVENUESPLITID],
HASCONTRIBUTEDREVENUE
from @ITEMSTABLE
group by
[DESCRIPTION],
[PRICE],
[TYPECODE],
[DISCOUNTED],
[SALESORDERITEMID],
[ITEMID],
[REVENUESPLITID],
HASCONTRIBUTEDREVENUE
order by [TYPECODE]
for xml raw ('ITEM'), type, elements, root('ITEMS'), BINARY BASE64)
--if it was paid for on an order, get the payments
if @SALESORDERID is not null
begin
--get all the payments from sales orders
insert into @PAYMENTSTABLE
select
[PAYMENTS].[INCLUDE],
[PAYMENTS].[DESCRIPTION],
case
when [PAYMENTS].[AMOUNTPAID] < [ITEMTOTAL] then
'$' + cast([PAYMENTS].[AMOUNTPAID] as nvarchar(20)) + ' ' + [PAYMENTS].[DESCRIPTION]
else
'$' + cast([ITEMTOTAL] as nvarchar(20)) + ' ' + [PAYMENTS].[DESCRIPTION]
end [DISPLAYDESCRIPTION],
[PAYMENTS].[DISPLAYSOURCE],
[PAYMENTS].[SOURCENUMBER],
[PAYMENTS].[SOURCETYPE],
[PAYMENTS].[REFUNDAMOUNT],
case
when [PAYMENTS].[AMOUNTPAID] < [ITEMTOTAL] then
[PAYMENTS].[AMOUNTPAID]
else
[ITEMTOTAL]
end AMOUNTPAID,
[PAYMENTS].[PAYMENTTYPECODE],
[PAYMENTS].[REVENUEID],
[PAYMENTS].[REVENUESPLITID],
[PAYMENTS].[TRANSACTIONID],
[PAYMENTS].[PAYMENTDATE]
from
(select
0 as [INCLUDE],
case
when [REVENUEPAYMENTMETHOD].[PAYMENTMETHODCODE] = 10 then
dbo.UFN_OTHERPAYMENTMETHODCODE_GETDESCRIPTION([OTHERPAYMENTMETHODCODEID])
else
[REVENUEPAYMENTMETHOD].[PAYMENTMETHOD] +
coalesce(', ' + dbo.UFN_CREDITTYPECODE_GETDESCRIPTION([CREDITCARDPAYMENTMETHODDETAIL].[CREDITTYPECODEID]) + ' #' + [CREDITCARDPAYMENTMETHODDETAIL].[CREDITCARDPARTIALNUMBER], '') +
coalesce(' #' + [CHECKPAYMENTMETHODDETAIL].[CHECKNUMBER], '')
end [DESCRIPTION],
null as [DISPLAYSOURCE],
[SALESORDER].[SEQUENCEID] as [SOURCENUMBER],
0 as [SOURCETYPE],
0 as [REFUNDAMOUNT],
[FINANCIALTRANSACTION].[BASEAMOUNT] - coalesce((select sum(coalesce([CREDITPAYMENT].[AMOUNT], 0))
from dbo.[CREDITPAYMENT]
where [REVENUEID] = [FINANCIALTRANSACTION].[ID]), 0) as [AMOUNTPAID], -- (amount - refunds)
[REVENUEPAYMENTMETHOD].[PAYMENTMETHODCODE] as [PAYMENTTYPECODE],
1 as [AUTOINCLUDED],
[FINANCIALTRANSACTION].[ID] as [REVENUEID],
null as [REVENUESPLITID],
[CREDITCARDPAYMENTMETHODDETAIL].[TRANSACTIONID],
SUM(ITEMSTABLE.TOTAL) as ITEMTOTAL,
cast([FINANCIALTRANSACTION].[DATE] as datetime) as [PAYMENTDATE]
from dbo.[SALESORDER]
inner join dbo.[SALESORDERPAYMENT] on [SALESORDERPAYMENT].[SALESORDERID] = [SALESORDER].[ID]
inner join dbo.[FINANCIALTRANSACTION] on [SALESORDERPAYMENT].[PAYMENTID] = [FINANCIALTRANSACTION].[ID]
inner join dbo.[REVENUEPAYMENTMETHOD] on [FINANCIALTRANSACTION].[ID] = [REVENUEPAYMENTMETHOD].[REVENUEID]
left join dbo.[CREDITCARDPAYMENTMETHODDETAIL] on [CREDITCARDPAYMENTMETHODDETAIL].[ID] = [REVENUEPAYMENTMETHOD].[ID]
left join dbo.[OTHERPAYMENTMETHODDETAIL] on [OTHERPAYMENTMETHODDETAIL].[ID] = [REVENUEPAYMENTMETHOD].[ID]
left join dbo.[CHECKPAYMENTMETHODDETAIL] on [CHECKPAYMENTMETHODDETAIL].[ID] = [REVENUEPAYMENTMETHOD].[ID]
left join @ITEMSTABLE [ITEMSTABLE] on [SALESORDER].[ID] = ITEMSTABLE.SALESORDERID
where [SALESORDER].[ID] = @SALESORDERID
group by [REVENUEPAYMENTMETHOD].[PAYMENTMETHODCODE], [CREDITCARDPAYMENTMETHODDETAIL].[TRANSACTIONID], [FINANCIALTRANSACTION].[ID],
[OTHERPAYMENTMETHODDETAIL].[OTHERPAYMENTMETHODCODEID], [REVENUEPAYMENTMETHOD].[PAYMENTMETHOD], [CREDITCARDPAYMENTMETHODDETAIL].[CREDITTYPECODEID],
[CREDITCARDPAYMENTMETHODDETAIL].[CREDITCARDPARTIALNUMBER], [CHECKPAYMENTMETHODDETAIL].[CHECKNUMBER], [SALESORDER].[SEQUENCEID], [FINANCIALTRANSACTION].[BASEAMOUNT],
[FINANCIALTRANSACTION].[DATE]
) [PAYMENTS]
where [PAYMENTS].[AMOUNTPAID] > 0
end
--if it was paid for through the back office
--get the payments
else
begin
insert into @PAYMENTSTABLE
select
0 as [INCLUDE],
case
when [REVENUEPAYMENTMETHOD].[PAYMENTMETHODCODE] = 10 then
dbo.UFN_OTHERPAYMENTMETHODCODE_GETDESCRIPTION([OTHERPAYMENTMETHODCODEID])
else
[REVENUEPAYMENTMETHOD].[PAYMENTMETHOD] +
coalesce(', ' + dbo.UFN_CREDITTYPECODE_GETDESCRIPTION([CREDITCARDPAYMENTMETHODDETAIL].[CREDITTYPECODEID]) + ' #' + [CREDITCARDPAYMENTMETHODDETAIL].[CREDITCARDPARTIALNUMBER], '') +
coalesce(' #' + [CHECKPAYMENTMETHODDETAIL].[CHECKNUMBER], '')
end [DESCRIPTION],
'$' + cast(@TOTAL as nvarchar(20)) + ' ' +
case
when [REVENUEPAYMENTMETHOD].[PAYMENTMETHODCODE] = 10 then
dbo.UFN_OTHERPAYMENTMETHODCODE_GETDESCRIPTION([OTHERPAYMENTMETHODCODEID])
else
[REVENUEPAYMENTMETHOD].[PAYMENTMETHOD] +
coalesce(', ' + dbo.UFN_CREDITTYPECODE_GETDESCRIPTION([CREDITCARDPAYMENTMETHODDETAIL].[CREDITTYPECODEID]) + ' #' + [CREDITCARDPAYMENTMETHODDETAIL].[CREDITCARDPARTIALNUMBER], '') +
coalesce(' #' + [CHECKPAYMENTMETHODDETAIL].[CHECKNUMBER], '')
end [DISPLAYDESCRIPTION],
'' as [DISPLAYSOURCE],
case
when [REVENUE_EXT].[BATCHNUMBER] <> '' then [REVENUE_EXT].[BATCHNUMBER]
else convert(nvarchar(50), [FINANCIALTRANSACTION].[SEQUENCEGENERATORID])
end as [SOURCENUMBER],
case
when [REVENUE_EXT].[BATCHNUMBER] <> '' then 1
else 2
end as [SOURCETYPE], --Payment (vs. Batch or Order)
0 as [REFUNDAMOUNT],
@TOTAL as [AMOUNTPAID],
[REVENUEPAYMENTMETHOD].[PAYMENTMETHODCODE] as [PAYMENTTYPECODE],
[FINANCIALTRANSACTION].[ID] [REVENUEID],
null as [REVENUESPLITID],
[CREDITCARDPAYMENTMETHODDETAIL].[TRANSACTIONID],
cast([FINANCIALTRANSACTION].[DATE] as datetime) as [PAYMENTDATE]
from dbo.[MEMBERSHIPTRANSACTION]
inner join dbo.[FINANCIALTRANSACTIONLINEITEM] on [MEMBERSHIPTRANSACTION].[REVENUESPLITID] = [FINANCIALTRANSACTIONLINEITEM].[ID]
left join dbo.[FINANCIALTRANSACTION] on [FINANCIALTRANSACTIONLINEITEM].[FINANCIALTRANSACTIONID] = [FINANCIALTRANSACTION].[ID]
left join dbo.[REVENUE_EXT] on [FINANCIALTRANSACTION].[ID] = [REVENUE_EXT].[ID]
inner join dbo.[REVENUEPAYMENTMETHOD] on [FINANCIALTRANSACTION].[ID] = [REVENUEPAYMENTMETHOD].[REVENUEID]
left join dbo.[CREDITCARDPAYMENTMETHODDETAIL] on [CREDITCARDPAYMENTMETHODDETAIL].[ID] = [REVENUEPAYMENTMETHOD].[ID]
left join dbo.[OTHERPAYMENTMETHODDETAIL] on [OTHERPAYMENTMETHODDETAIL].[ID] = [REVENUEPAYMENTMETHOD].[ID]
left join dbo.[CHECKPAYMENTMETHODDETAIL] on [CHECKPAYMENTMETHODDETAIL].[ID] = [REVENUEPAYMENTMETHOD].[ID]
where [MEMBERSHIPTRANSACTION].[ID] = @MEMBERSHIPTRANSACTIONID
end
select @PAYMENTS =
(select * from @PAYMENTSTABLE
for xml raw ('ITEM'), type, elements, root('PAYMENTS'), BINARY BASE64)
select @TIMESTAMP = [TSLONG]
from dbo.[MEMBERSHIPTRANSACTION]
where [ID] = @TRANSACTIONID
select
@CONSTITUENTID = MEMBER.CONSTITUENTID,
@CONSTITUENTNAME = dbo.UFN_CONSTITUENT_BUILDNAME(MEMBER.CONSTITUENTID)
from
dbo.MEMBERSHIP
inner join dbo.MEMBER on MEMBERSHIP.ID = MEMBER.MEMBERSHIPID
where
MEMBERSHIP.ID = @ID
and MEMBER.ISPRIMARY = 1;
set @DATALOADED = 1;
return 0;