USP_REPORT_EVENTREGISTRATIONPAYMENT

Registration data source for event revenue report.

Parameters

Parameter Parameter Type Mode Description
@EVENTID uniqueidentifier IN
@STARTDATE datetime IN
@ENDDATE datetime IN
@INCLUDESUBEVENTS bit IN
@CURRENCYCODE tinyint IN

Definition

Copy


            CREATE procedure dbo.USP_REPORT_EVENTREGISTRATIONPAYMENT
            (
                @EVENTID uniqueidentifier = null,
                @STARTDATE datetime = null,
                @ENDDATE datetime = null,
                @INCLUDESUBEVENTS bit = 0,
                @CURRENCYCODE tinyint = 0
            )
            as
            set nocount on;

            begin try
                declare @ORGANIZATIONCURRENCYID uniqueidentifier = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();

                declare @SELECTEDCURRENCYID uniqueidentifier;
                declare @DECIMALDIGITS tinyint;
                declare @ROUNDINGTYPECODE tinyint;

                --0 == use base of main event, anything else == use org currency

                if @CURRENCYCODE = 0 
                begin
                    select 
                        @SELECTEDCURRENCYID = EVENT.BASECURRENCYID,
                        @DECIMALDIGITS = CURRENCY.DECIMALDIGITS,
                        @ROUNDINGTYPECODE = CURRENCY.ROUNDINGTYPECODE
                    from dbo.EVENT
                    inner join dbo.CURRENCY on CURRENCY.ID = EVENT.BASECURRENCYID
                    where EVENT.ID = @EVENTID;
                end
                else
                begin
                    select 
                        @SELECTEDCURRENCYID = CURRENCY.ID,
                        @DECIMALDIGITS = CURRENCY.DECIMALDIGITS,
                        @ROUNDINGTYPECODE = CURRENCY.ROUNDINGTYPECODE
                    from dbo.CURRENCY 
                    where CURRENCY.ID = @ORGANIZATIONCURRENCYID;
                end 

                --Pull events and (if necessary) sub events. Include the base currency of the event so we don't need to look it up later

                declare @EVENTS table (ID uniqueidentifier, CURRENCYID uniqueidentifier);
                if @INCLUDESUBEVENTS = 0
                    insert into @EVENTS(ID, CURRENCYID)
                        select
                            EVENT.ID,
                            EVENT.BASECURRENCYID
                        from dbo.EVENT
                        where EVENT.ID = @EVENTID;
                else
                    insert into @EVENTS(ID, CURRENCYID)
                        select 
                            RELATEDEVENT.ID, 
                            EVENT.BASECURRENCYID
                        from dbo.EVENTHIERARCHY as RELATEDEVENT
                        inner join dbo.EVENTHIERARCHY as SOURCEEVENT on SOURCEEVENT.ID = @EVENTID
                        inner join dbo.EVENT on EVENT.ID = RELATEDEVENT.ID
                        where RELATEDEVENT.HIERARCHYPATH.IsDescendantOf(SOURCEEVENT.HIERARCHYPATH) = 1;

                declare @PAID money = 0;
                declare @UNPAID money = 0

                --Use UFN_REVENUESPLIT_GETAMOUNTINCURRENCY_BULK to convert the payment amounts for @PAID. This is the most accurate accounting of how much we took in

                select @PAID = coalesce    (
                                            (
                                                select sum(RSA.AMOUNTINCURRENCY)
                                                from dbo.FINANCIALTRANSACTIONLINEITEM FTLI
                                                inner join dbo.EVENTREGISTRANTPAYMENT ERP on ERP.PAYMENTID = FTLI.ID
                                                inner join dbo.REGISTRANT R on R.ID = ERP.REGISTRANTID
                                                left join dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY_BULK(@SELECTEDCURRENCYID,dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY(),@DECIMALDIGITS,@ROUNDINGTYPECODE) as RSA on RSA.ID = FTLI.ID  
                                                where R.EVENTID in (select ID from @EVENTS)
                                            )
                                        ,0) - 
                               coalesce (
                                            (
                                                select sum(FTLI.TRANSACTIONAMOUNT)
                                                from dbo.FINANCIALTRANSACTIONLINEITEM FTLI
                                                left join dbo.FINANCIALTRANSACTIONLINEITEM REFUND on REFUND.SOURCELINEITEMID = FTLI.ID
                                                inner join dbo.FINANCIALTRANSACTION FT on REFUND.FINANCIALTRANSACTIONID = FT.ID
                                                inner join dbo.EVENTREGISTRANTPAYMENT ERP on ERP.PAYMENTID = FTLI.ID
                                                inner join dbo.REGISTRANT R on R.ID = ERP.REGISTRANTID
                                                where R.EVENTID in (select ID from @EVENTS) and FT.TYPECODE = 23
                                            )
                                        ,0);

                select
                    @UNPAID = sum(coalesce(REGISTRANT.BALANCEINCURRENCY,0))
                from
                    dbo.UFN_EVENTREGISTRANT_GETBALANCEINCURRENCY_BULK(@SELECTEDCURRENCYID) as REGISTRANT
    where
                    REGISTRANT.EVENTID = @EVENTID;

                --Return our information to the report

                select
                    @PAID PAID,
                    @UNPAID UNPAID,
                    CURRENCYPROPERTIES.ISO4217 [ISOCURRENCYCODE],
                    CURRENCYPROPERTIES.CURRENCYSYMBOL,
                    CURRENCYPROPERTIES.SYMBOLDISPLAYSETTINGCODE [CURRENCYSYMBOLDISPLAYSETTINGCODE],
                    CURRENCYPROPERTIES.DECIMALDIGITS
                from dbo.UFN_CURRENCY_GETPROPERTIES(@SELECTEDCURRENCYID) CURRENCYPROPERTIES
            end try
            begin catch
                exec dbo.USP_RAISE_ERROR;
                return 1;
            end catch

            return 0;