USP_DATAFORMTEMPLATE_VIEW_CREDITEVENTREGISTRATIONVIEW2
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | |
@DATALOADED | bit | INOUT | |
@ITEMS | xml | INOUT | |
@TOTAL | money | INOUT | |
@PAYMENTS | xml | INOUT | |
@OTHERPAYMENTMETHODS | xml | INOUT | |
@TRANSACTIONID | uniqueidentifier | INOUT | |
@TIMESTAMP | bigint | INOUT | |
@CONSTITUENTID | uniqueidentifier | INOUT | |
@CONSTITUENTNAME | nvarchar(154) | INOUT |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_VIEW_CREDITEVENTREGISTRATIONVIEW2
(
@ID uniqueidentifier, -- REGISTRANTID
@DATALOADED bit = 0 output,
@ITEMS xml = null output,
@TOTAL money = null output,
@PAYMENTS xml = null output,
@OTHERPAYMENTMETHODS xml = null output,
@TRANSACTIONID uniqueidentifier = null output, -- same as @ID
@TIMESTAMP bigint = null output,
@CONSTITUENTID uniqueidentifier = null output,
@CONSTITUENTNAME nvarchar(154) = null output
)
as
set nocount on;
set @DATALOADED = 0;
set @TRANSACTIONID = @ID;
--Error if the registration has been fully refunded already
if (
dbo.UFN_REGISTRANT_CALCULATETOTALPAID(@ID) <= 0 and
exists(select 1 from dbo.CREDITITEMEVENTREGISTRATION where REGISTRANTID = @ID)
)
begin
raiserror('The selected event registration has previously been refunded in full.', 13, 1);
return 0;
end
set @OTHERPAYMENTMETHODS = (
select
ID,
[DESCRIPTION]
from dbo.OTHERPAYMENTMETHODCODE
for xml raw ('ITEM'), type, root('OTHERPAYMENTMETHODS'), binary base64
);
select
@TOTAL = sum(LI.BASEAMOUNT)
from
dbo.REGISTRANT
inner join
dbo.EVENTREGISTRANTPAYMENT on EVENTREGISTRANTPAYMENT.REGISTRANTID = REGISTRANT.ID
inner join
dbo.FINANCIALTRANSACTIONLINEITEM as LI on LI.ID = EVENTREGISTRANTPAYMENT.PAYMENTID
where
REGISTRANT.ID = @ID
and LI.DELETEDON is null
and LI.TYPECODE <> 1; -- Reversal
declare @TOTALREFUND money;
select @TOTALREFUND = isnull(sum(LI.UNITVALUE), 0)
from dbo.FINANCIALTRANSACTIONLINEITEM as LI
inner join dbo.CREDITITEMEVENTREGISTRATION on LI.ID = CREDITITEMEVENTREGISTRATION.ID
where REGISTRANTID = @ID;
set @TOTAL -= @TOTALREFUND;
set @ITEMS = (
select
NF.NAME + ' - ' + [EVENT].NAME as [DESCRIPTION],
@TOTAL PRICE,
@TOTAL AMOUNTPAID,
1 TYPECODE,
REGISTRANT.ID as EVENTREGISTRANTID,
case
when exists(
select *
from dbo.EVENTREGISTRANTPAYMENT
inner join dbo.FINANCIALTRANSACTIONLINEITEM as LI on LI.ID = EVENTREGISTRANTPAYMENT.PAYMENTID
inner join dbo.REVENUESPLIT_EXT as EXT on EXT.ID = LI.ID
where
EVENTREGISTRANTPAYMENT.REGISTRANTID = @ID
and EXT.APPLICATIONCODE = 1 -- Event registration
and EXT.TYPECODE = 0 -- Gift
and LI.TYPECODE = 0 -- Standard
and LI.DELETEDON is null
)
then 1
else 0
end HASCONTRIBUTEDREVENUE
from dbo.REGISTRANT
inner join dbo.[EVENT] on REGISTRANT.EVENTID = [EVENT].ID
outer apply dbo.UFN_CONSTITUENT_DISPLAYNAME(REGISTRANT.CONSTITUENTID) as NF
where REGISTRANT.ID = @ID
for xml raw ('ITEM'), type, root('ITEMS'), binary base64
);
with PAYMENTS_CTE as (
--payments made on an order
select
case
when REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE = 10 then
dbo.UFN_OTHERPAYMENTMETHODCODE_GETDESCRIPTION(OTHERPAYMENTMETHODDETAIL.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,
case
when SALESORDERPAYMENT.AMOUNT < SALESORDERITEM.TOTAL then SALESORDERPAYMENT.AMOUNT
else SALESORDERITEM.TOTAL
end REFUNDAMOUNT,
REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE as PAYMENTTYPECODE,
FINANCIALTRANSACTION.ID as REVENUEID,
null as REVENUESPLITID,
CREDITCARDPAYMENTMETHODDETAIL.TRANSACTIONID,
sum(coalesce((LI.QUANTITY * LI.UNITVALUE) - EXT.DISCOUNTS, 0)) as REFUNDS,
SALESORDERITEM.ID as PAYMENTGROUPID,
SALESORDERITEM.PRICE as PAYMENTGROUPMAXAMOUNT,
cast(FINANCIALTRANSACTION.[DATE] as datetime) as PAYMENTDATE
from dbo.SALESORDERITEMEVENTREGISTRATION
inner join dbo.SALESORDERITEM on SALESORDERITEM.ID = SALESORDERITEMEVENTREGISTRATION.ID
inner join dbo.SALESORDER on SALESORDERITEM.SALESORDERID = SALESORDER.ID
inner join dbo.SALESORDERPAYMENT on SALESORDERITEM.SALESORDERID = SALESORDERPAYMENT.SALESORDERID
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 dbo.CREDITITEM_EXT as EXT on EXT.SALESORDERITEMID = SALESORDERITEM.ID
left join dbo.FINANCIALTRANSACTIONLINEITEM as LI on LI.ID = EXT.ID
where SALESORDERITEMEVENTREGISTRATION.REGISTRANTID = @ID
group by
FINANCIALTRANSACTION.ID,
REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE,
OTHERPAYMENTMETHODDETAIL.OTHERPAYMENTMETHODCODEID,
REVENUEPAYMENTMETHOD.PAYMENTMETHOD,
CREDITCARDPAYMENTMETHODDETAIL.CREDITTYPECODEID,
CREDITCARDPAYMENTMETHODDETAIL.CREDITCARDPARTIALNUMBER,
CREDITCARDPAYMENTMETHODDETAIL.CREDITTYPECODEID,
CREDITCARDPAYMENTMETHODDETAIL.CREDITCARDPARTIALNUMBER,
CHECKPAYMENTMETHODDETAIL.CHECKNUMBER,
SALESORDER.SEQUENCEID,
SALESORDERPAYMENT.AMOUNT,
SALESORDERITEM.TOTAL,
CREDITCARDPAYMENTMETHODDETAIL.TRANSACTIONID,
SALESORDERITEM.ID,
SALESORDERITEM.PRICE,
FINANCIALTRANSACTION.[DATE]
union all
--payments made outside an order
select
case
when REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE = 10 then
dbo.UFN_OTHERPAYMENTMETHODCODE_GETDESCRIPTION(OTHERPAYMENTMETHODDETAIL.OTHERPAYMENTMETHODCODEID)
else
REVENUEPAYMENTMETHOD.PAYMENTMETHOD +
coalesce(', ' + dbo.UFN_CREDITTYPECODE_GETDESCRIPTION(CREDITCARDPAYMENTMETHODDETAIL.CREDITTYPECODEID) + ' #' + CREDITCARDPAYMENTMETHODDETAIL.CREDITCARDPARTIALNUMBER, '') +
coalesce(' #' + CHECKPAYMENTMETHODDETAIL.CHECKNUMBER, '')
end [DESCRIPTION],
null as DISPLAYSOURCE,
FINANCIALTRANSACTION.SEQUENCEGENERATORID as SOURCENUMBER,
2 as SOURCETYPE,
case
when REVENUE_EXT.BATCHNUMBER is not null then FINANCIALTRANSACTIONLINEITEM.BASEAMOUNT
else REVENUEPAYMENTMETHOD.AMOUNT
end REFUNDAMOUNT,
REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE as PAYMENTTYPECODE,
null as REVENUEID,
FINANCIALTRANSACTIONLINEITEM.ID as REVENUESPLITID,
CREDITCARDPAYMENTMETHODDETAIL.TRANSACTIONID,
sum(coalesce(CREDITPAYMENT.AMOUNT, 0)) as REFUNDS,
FINANCIALTRANSACTIONLINEITEM.ID as PAYMENTGROUPID,
case
when REVENUE_EXT.BATCHNUMBER is not null then FINANCIALTRANSACTIONLINEITEM.BASEAMOUNT
else REVENUEPAYMENTMETHOD.AMOUNT
end PAYMENTGROUPMAXAMOUNT,
cast(FINANCIALTRANSACTION.[DATE] as datetime) as PAYMENTDATE
from dbo.REGISTRANT
inner join dbo.EVENTREGISTRANTPAYMENT on EVENTREGISTRANTPAYMENT.REGISTRANTID = REGISTRANT.ID
inner join dbo.FINANCIALTRANSACTIONLINEITEM on EVENTREGISTRANTPAYMENT.PAYMENTID = FINANCIALTRANSACTIONLINEITEM.ID
inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
inner join dbo.REVENUEPAYMENTMETHOD on FINANCIALTRANSACTION.ID = REVENUEPAYMENTMETHOD.REVENUEID
left join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID
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 dbo.CREDITPAYMENT on CREDITPAYMENT.REVENUESPLITID = FINANCIALTRANSACTIONLINEITEM.ID
where REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE <> 9
and REGISTRANT.ID = @ID
group by
FINANCIALTRANSACTIONLINEITEM.ID,
REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE,
OTHERPAYMENTMETHODDETAIL.OTHERPAYMENTMETHODCODEID,
REVENUEPAYMENTMETHOD.PAYMENTMETHOD,
CREDITCARDPAYMENTMETHODDETAIL.CREDITTYPECODEID,
CREDITCARDPAYMENTMETHODDETAIL.CREDITCARDPARTIALNUMBER,
CHECKPAYMENTMETHODDETAIL.CHECKNUMBER,
FINANCIALTRANSACTION.SEQUENCEGENERATORID,
REVENUEPAYMENTMETHOD.AMOUNT,
CREDITCARDPAYMENTMETHODDETAIL.TRANSACTIONID,
REVENUE_EXT.BATCHNUMBER,
FINANCIALTRANSACTIONLINEITEM.BASEAMOUNT,
FINANCIALTRANSACTION.[DATE]
)
select @PAYMENTS = (
select
0 as [INCLUDE],
[DESCRIPTION],
'$' + cast(cast(REFUNDAMOUNT as money) as nvarchar(20)) + ' ' + [DESCRIPTION] as DISPLAYDESCRIPTION,
DISPLAYSOURCE,
SOURCENUMBER,
SOURCETYPE,
REFUNDAMOUNT - coalesce(REFUNDS, 0) as AMOUNTPAID,
PAYMENTTYPECODE,
REVENUEID,
REVENUESPLITID,
TRANSACTIONID,
PAYMENTGROUPID,
PAYMENTGROUPMAXAMOUNT,
PAYMENTDATE
from PAYMENTS_CTE
where REFUNDAMOUNT - coalesce(REFUNDS, 0) > 0
order by SOURCETYPE, SOURCENUMBER
for xml raw ('ITEM'), type, root('PAYMENTS'), binary base64
);
select
@DATALOADED = 1,
@TIMESTAMP = REGISTRANT.TSLONG,
@CONSTITUENTID = REGISTRANT.CONSTITUENTID,
@CONSTITUENTNAME = dbo.UFN_CONSTITUENT_BUILDNAME(REGISTRANT.CONSTITUENTID)
from
dbo.REGISTRANT
where
REGISTRANT.ID = @ID;
return 0;