USP_DATALIST_REFUNDABLEITEMS

Parameters

Parameter Parameter Type Mode Description
@CONSTITUENTID uniqueidentifier IN
@SALESORDERID uniqueidentifier IN
@DATETYPECODE tinyint IN
@STARTDATE datetime IN
@ENDDATE datetime IN
@APPUSERID uniqueidentifier IN
@ITEMTYPECODE tinyint IN
@PAYMENTMETHODTYPECODE tinyint IN
@SALESMETHODID uniqueidentifier IN
@LOWAMOUNT money IN
@HIGHAMOUNT money IN
@MAXROWS int IN

Definition

Copy


CREATE procedure dbo.USP_DATALIST_REFUNDABLEITEMS
(
    @CONSTITUENTID uniqueidentifier = null,
    @SALESORDERID uniqueidentifier = null,
    @DATETYPECODE tinyint = 0,
    @STARTDATE datetime = null,
    @ENDDATE datetime = null,
    @APPUSERID uniqueidentifier = null,
    @ITEMTYPECODE tinyint = null,
    @PAYMENTMETHODTYPECODE tinyint = null,
    @SALESMETHODID uniqueidentifier = null,
    @LOWAMOUNT money = null,
    @HIGHAMOUNT money = null,
    @MAXROWS int = 500
)
as
    set nocount on;

    declare @RESULTS table (CONTEXTID uniqueidentifier, CONTEXTTYPE tinyint, ITEMDESCRIPTION nvarchar(255), CONSTITUENT nvarchar(255), LATESTDATE datetime, [DATE] nvarchar(max), [USER] nvarchar(255), SALESMETHOD nvarchar(100), PAYMENTMETHOD nvarchar(max), AMOUNT money);

    declare @DATE date = dbo.UFN_TIMEZONEENTRY_GETSYSTEMDEFAULTDATEFROMUTC(getutcdate());

    if @DATETYPECODE = 0 begin     -- Today

        set @STARTDATE = @DATE;
        set @ENDDATE = @DATE;
    end
    else if @DATETYPECODE = 1 begin     -- Yesterday

        set @STARTDATE = dateadd(day, -1, @DATE);
        set @ENDDATE = @STARTDATE;
    end
    else if @DATETYPECODE = 2 begin     -- This week

        set @STARTDATE = dbo.UFN_DATE_THISWEEK_FIRSTDAY(@DATE, 0);
        set @ENDDATE = dbo.UFN_DATE_THISWEEK_LASTDAY(@DATE, 0);
    end
    else if @DATETYPECODE = 3 begin     -- This month

        set @STARTDATE = dbo.UFN_DATE_THISMONTH_FIRSTDAY(@DATE, 0);
        set @ENDDATE = dbo.UFN_DATE_THISMONTH_LASTDAY(@DATE, 0);
    end
    else if @DATETYPECODE = 4 begin     -- This quarter

        set @STARTDATE = dbo.UFN_DATE_THISQUARTER_FIRSTDAY(@DATE, 0);
        set @ENDDATE = dbo.UFN_DATE_THISQUARTER_LASTDAY(@DATE, 0);
    end
    else if @DATETYPECODE = 5 begin     -- This year

        set @STARTDATE = dbo.UFN_DATE_THISCALENDARYEAR_FIRSTDAY(@DATE, 0);
        set @ENDDATE = dbo.UFN_DATE_THISCALENDARYEAR_LASTDAY(@DATE, 0);
    end
    else if @DATETYPECODE = 6 begin     -- Last week

        set @STARTDATE = dbo.UFN_DATE_LASTWEEK_FIRSTDAY(@DATE, 0);
        set @ENDDATE = dbo.UFN_DATE_LASTWEEK_LASTDAY(@DATE, 0);
    end
    else if @DATETYPECODE = 7 begin     -- Last month

        set @STARTDATE = dbo.UFN_DATE_LASTMONTH_FIRSTDAY(@DATE, 0);
        set @ENDDATE = dbo.UFN_DATE_LASTMONTH_LASTDAY(@DATE, 0);
    end
    else if @DATETYPECODE = 8 begin     -- Last quarter

        set @STARTDATE = dbo.UFN_DATE_LASTQUARTER_FIRSTDAY(@DATE, 0);
        set @ENDDATE = dbo.UFN_DATE_LASTQUARTER_LASTDAY(@DATE, 0);
    end
    else if @DATETYPECODE = 9 begin     -- Last year

        set @STARTDATE = dbo.UFN_DATE_LASTCALENDARYEAR_FIRSTDAY(@DATE, 0);
        set @ENDDATE = dbo.UFN_DATE_LASTCALENDARYEAR_LASTDAY(@DATE, 0);
    end
    else if @DATETYPECODE = 10 begin     -- All dates

        set @STARTDATE = null;
        set @ENDDATE = null;
    end

    set @STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(@STARTDATE);
    set @ENDDATE = dbo.UFN_DATE_GETLATESTTIME(@ENDDATE);

    declare @SALESMETHODTYPECODE tinyint;
    select @SALESMETHODTYPECODE = TYPECODE from dbo.SALESMETHOD where ID = @SALESMETHODID;

    declare @PAYMENTMETHODTYPECODETRANSLATION tinyint =
        case @PAYMENTMETHODTYPECODE
            when 0 then null  -- All

            when 1 then 0  -- Cash

            when 2 then 1  -- Check

            when 3 then 2  -- Credit card

            when 4 then 3  -- Debit card

            when 5 then 10  -- Other

        end;

    -- Orders

    if (@ITEMTYPECODE in (0,3)) begin
        insert into @RESULTS
        select top (@MAXROWS)
            SALESORDER.ID as CONTEXTID,
            0 as CONTEXTTYPE,
            cast(SALESORDER.SEQUENCEID as nvarchar) as ITEMDESCRIPTION,
            NF.NAME as CONSTITUENT,
            cast(SALESORDER.TRANSACTIONDATE as date) as LATESTDATE,
            cast(SALESORDER.TRANSACTIONDATE as date) as [DATE],
            isnull(APPUSER.DISPLAYNAME, '') as [USER],
            SALESORDER.SALESMETHODTYPE as SALESMETHOD,
            dbo.UFN_SALESORDER_GETPAYMENTMETHODLIST(SALESORDER.ID) as PAYMENTMETHOD,
            TOTALS.TOTAL
        from
            dbo.SALESORDER
        left outer join
            dbo.APPUSER on APPUSER.ID = SALESORDER.APPUSERID
        outer apply
            dbo.UFN_CONSTITUENT_DISPLAYNAME(SALESORDER.CONSTITUENTID) as NF
        outer apply
            dbo.UFN_SALESORDER_TOTALS(SALESORDER.ID) as TOTALS
        where
            SALESORDER.STATUSCODE = 1      -- Complete orders

            and SALESORDER.SALESMETHODTYPECODE <> 3    -- Exclude Group Sales

            and exists (
                -- Has at least one item that hasn't been fully refunded

                -- Exclude orders with only unavailable tickets -- WI 180624

                select *
                from dbo.SALESORDERITEM
                left outer join dbo.TICKET on TICKET.SALESORDERITEMTICKETID = SALESORDERITEM.ID
                where
                    SALESORDERITEM.SALESORDERID = SALESORDER.ID
                    and (
                        TICKET.ID is null
                        or (
                            TICKET.APPLIEDTOMEMBERSHIP = 0
                            and TICKET.ISREFUNDED = 0
                        )
                    )
                    and SALESORDERITEM.TYPECODE in (0, 1, 2, 3, 6, 14, 16)  -- Ticket, Membership, Donation, Fee, Event Registration, Merchandise, Membership add-on

                    and SALESORDERITEM.QUANTITY > coalesce(
                        (
                            select sum(LI.QUANTITY)
                            from dbo.FINANCIALTRANSACTIONLINEITEM as LI
                            inner join dbo.CREDITITEM_EXT as EXT on EXT.ID = LI.ID
                            inner join dbo.FINANCIALTRANSACTION as FT on FT.ID = LI.FINANCIALTRANSACTIONID
                            where
                                FT.TYPECODE = 23  -- Refunds

                                and EXT.SALESORDERITEMID = SALESORDERITEM.ID
                        )
                    , 0)
            )
            and (@CONSTITUENTID is null or SALESORDER.CONSTITUENTID = @CONSTITUENTID)
            and (@SALESORDERID is null or SALESORDER.ID = @SALESORDERID)
            and (@STARTDATE is null or SALESORDER.TRANSACTIONDATE >= @STARTDATE)
            and (@ENDDATE is null or SALESORDER.TRANSACTIONDATE <= @ENDDATE)
            and (@APPUSERID is null or SALESORDER.APPUSERID = @APPUSERID)
            and (
                @PAYMENTMETHODTYPECODETRANSLATION is null
                or exists (
                    select *
                    from dbo.SALESORDERPAYMENT 
                    inner join dbo.REVENUEPAYMENTMETHOD on SALESORDERPAYMENT.PAYMENTID = REVENUEPAYMENTMETHOD.REVENUEID 
                    where
                        SALESORDERPAYMENT.SALESORDERID = SALESORDER.ID 
                        and REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE = @PAYMENTMETHODTYPECODETRANSLATION
                )
            )
            and (@SALESMETHODID is null or SALESORDER.SALESMETHODTYPECODE = @SALESMETHODTYPECODE)
            and (@LOWAMOUNT is null or TOTALS.TOTAL >= @LOWAMOUNT)
            and (@HIGHAMOUNT is null or TOTALS.TOTAL <= @HIGHAMOUNT)
        order by
            SALESORDER.TRANSACTIONDATE desc, SALESORDER.SEQUENCEID
        option (recompile);
    end

    -- Event registrations

    if (@ITEMTYPECODE in (0, 1)) begin
        ;with REGISTRANTREFUNDS_CTE as (
            select
                CREDITITEMEVENTREGISTRATION.REGISTRANTID,
                sum((LI.QUANTITY * LI.UNITVALUE) - EXT.DISCOUNTS) as TOTAL
            from
                dbo.CREDITITEMEVENTREGISTRATION
            inner join
                dbo.FINANCIALTRANSACTIONLINEITEM as LI on LI.ID = CREDITITEMEVENTREGISTRATION.ID
            inner join
                dbo.CREDITITEM_EXT as EXT on EXT.ID = LI.ID
            inner join
                dbo.FINANCIALTRANSACTION as FT on FT.ID = LI.FINANCIALTRANSACTIONID
            where
                FT.TYPECODE = 23  -- Refund

            group by
                CREDITITEMEVENTREGISTRATION.REGISTRANTID
        ),
        REGISTRANTREVENUE_CTE as (
            select
                FT.ID,
                EVENTREGISTRANTPAYMENT.REGISTRANTID,
                EVENTREGISTRANTPAYMENT.AMOUNT,
                cast(FT.DATE as datetime) as DATE,
                FT.CALCULATEDDATE,
                FT.CONSTITUENTID,
                FT.TYPECODE
            from
                dbo.FINANCIALTRANSACTION as FT
            inner join
                dbo.FINANCIALTRANSACTIONLINEITEM as LI on LI.FINANCIALTRANSACTIONID = FT.ID
            inner join
                dbo.EVENTREGISTRANTPAYMENT on EVENTREGISTRANTPAYMENT.PAYMENTID = LI.ID  -- Don't know why payment ID is the line item

            where
                FT.DELETEDON is null
                and LI.DELETEDON is null
                and LI.TYPECODE <> 1  -- Reversal

        ),
        REGISTRANTTOTALS_CTE as (
            select
                REGISTRANTREVENUE_CTE.REGISTRANTID,
                sum(REGISTRANTREVENUE_CTE.AMOUNT) as TOTALPAID,
                isnull(REGISTRANTREFUNDS_CTE.TOTAL, 0) as TOTALREFUNDED,
                max(REGISTRANTREVENUE_CTE.DATE) as MAXPAYMENTDATE
            from
                REGISTRANTREVENUE_CTE
            left outer join
                REGISTRANTREFUNDS_CTE on REGISTRANTREFUNDS_CTE.REGISTRANTID = REGISTRANTREVENUE_CTE.REGISTRANTID
            group by
                REGISTRANTREVENUE_CTE.REGISTRANTID,
                REGISTRANTREFUNDS_CTE.TOTAL
        )
        insert into @RESULTS
        select distinct top (@MAXROWS)
            REGISTRANTREVENUE_CTE.REGISTRANTID,
            2 as CONTEXTTYPE,
            EVENT.NAME as ITEMDESCRIPTION,
            CONSTITUENTNAMEFORMAT.NAME as CONSTITUENT,
            REGISTRANTTOTALS_CTE.MAXPAYMENTDATE as LATESTDATE,
            LISTS.DATELIST as [DATE],
            LISTS.APPUSERLIST as [USER],
            LISTS.SALESMETHODLIST as SALESMETHOD,
            LISTS.PAYMENTMETHODLIST as PAYMENTMETHOD,
            REGISTRANTTOTALS_CTE.TOTALPAID - REGISTRANTTOTALS_CTE.TOTALREFUNDED as AMOUNT
        from
            REGISTRANTREVENUE_CTE
        inner join
            REGISTRANTTOTALS_CTE on REGISTRANTTOTALS_CTE.REGISTRANTID = REGISTRANTREVENUE_CTE.REGISTRANTID
        inner join
            dbo.REGISTRANT on REGISTRANT.ID = REGISTRANTREVENUE_CTE.REGISTRANTID
        inner join
            dbo.EVENT on EVENT.ID = REGISTRANT.EVENTID
        outer apply
            dbo.UFN_CONSTITUENT_DISPLAYNAME(REGISTRANTREVENUE_CTE.CONSTITUENTID) as CONSTITUENTNAMEFORMAT
        outer apply
            dbo.UFN_REGISTRANT_GETDATEANDPAYMENTMETHODLISTS(REGISTRANT.ID) as LISTS
        where
            (@STARTDATE is null or REGISTRANTREVENUE_CTE.CALCULATEDDATE >= @STARTDATE)
            and (@ENDDATE is null or REGISTRANTREVENUE_CTE.CALCULATEDDATE <= @ENDDATE)
            and REGISTRANTTOTALS_CTE.TOTALPAID > REGISTRANTTOTALS_CTE.TOTALREFUNDED
            and (@CONSTITUENTID is null or REGISTRANTREVENUE_CTE.CONSTITUENTID = @CONSTITUENTID)
            and (
                (
                    REGISTRANTREVENUE_CTE.TYPECODE = 0  -- Payment

                    and (@SALESMETHODID is null or @SALESMETHODID = '3D858097-FD54-4BB8-9276-A4028E9B400C')    -- Static guid for Back office

                    and exists (
                        select *
                        from dbo.REVENUEPAYMENTMETHOD
                        where
                            REVENUEPAYMENTMETHOD.REVENUEID = REGISTRANTREVENUE_CTE.ID
                            and (
                                (@PAYMENTMETHODTYPECODETRANSLATION is null and REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE in (0,1,2,3,10))  -- Cash, Check, Credit card, Direct debit, Other

                                or REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE = @PAYMENTMETHODTYPECODETRANSLATION
                            )
                    )
                )
                or (
                    REGISTRANTREVENUE_CTE.TYPECODE = 5  -- Order

                    and exists (
                        select *
                        from dbo.SALESORDER
                        where
                            SALESORDER.REVENUEID = REGISTRANTREVENUE_CTE.ID
                            and (@SALESORDERID is null or SALESORDER.ID = @SALESORDERID)
                            and (@SALESMETHODID is null or SALESORDER.SALESMETHODTYPECODE = @SALESMETHODTYPECODE)
                            and (@APPUSERID is null or SALESORDER.APPUSERID = @APPUSERID)
                            and (
                                @PAYMENTMETHODTYPECODETRANSLATION is null
                                or exists (
                                    select *
                                    from dbo.SALESORDERPAYMENT
                                    inner join dbo.REVENUEPAYMENTMETHOD on REVENUEPAYMENTMETHOD.REVENUEID = SALESORDERPAYMENT.PAYMENTID
                                    where
                                        SALESORDERPAYMENT.SALESORDERID = SALESORDER.ID
                                        and REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE = @PAYMENTMETHODTYPECODETRANSLATION
                                )
                            )
                    )
                )
            )
            and (@LOWAMOUNT is null or (REGISTRANTTOTALS_CTE.TOTALPAID - REGISTRANTTOTALS_CTE.TOTALREFUNDED) >= @LOWAMOUNT)
            and (@HIGHAMOUNT is null or (REGISTRANTTOTALS_CTE.TOTALPAID - REGISTRANTTOTALS_CTE.TOTALREFUNDED) <= @HIGHAMOUNT)
        order by
            LATESTDATE desc, ITEMDESCRIPTION
        option (recompile);
    end

    -- Memberships

    if (@ITEMTYPECODE in (0,2)) begin
        ;with REFUNDEDTICKETITEMS_CTE as (
            select
                LI.ID,
                LI.SOURCELINEITEMID,
                EXT.SALESORDERITEMID
            from dbo.FINANCIALTRANSACTIONLINEITEM as LI
            inner join dbo.CREDITITEM_EXT as EXT on EXT.ID = LI.ID
            inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTION.ID = LI.FINANCIALTRANSACTIONID
            where
                FINANCIALTRANSACTION.TYPECODE = 23  -- Refund

                and EXT.TYPECODE = 0  -- Ticket

        ),
        ADDONS_CTE as (
            select
                MEMBERSHIPTRANSACTIONID,
                sum(ORGANIZATIONPURCHASEPRICE * QUANTITY) as AMOUNT
            from
                dbo.MEMBERSHIPADDON
            group by
                MEMBERSHIPTRANSACTIONID
        )
        insert into @RESULTS
        select top (@MAXROWS)
            MEMBERSHIPTRANSACTION.MEMBERSHIPID as CONTEXTID,
            1 as CONTEXTTYPE,
            MEMBERSHIPLEVEL.NAME + ' - ' + MEMBERSHIPTRANSACTION.ACTION as ITEMDESCRIPTION,
            CONSTITUENTNAMEFORMAT.NAME as CONSTITUENT,
            FT.CALCULATEDDATE as LATESTDATE,
            FT.CALCULATEDDATE as [DATE],
            coalesce((select APPUSER.DISPLAYNAME from dbo.APPUSER where ID = SALESORDER.APPUSERID), '') as [USER],
            coalesce(SALESORDER.SALESMETHODTYPE, 'Back office') as SALESMETHOD,
            case REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE
                when 10 then  -- Other

                    dbo.UFN_OTHERPAYMENTMETHODCODE_GETDESCRIPTION(OTHERPAYMENTMETHODDETAIL.OTHERPAYMENTMETHODCODEID)
                when 9 then  -- None (The case when the membership is on an order transaction)

                    dbo.UFN_SALESORDER_GETPAYMENTMETHODLIST(SALESORDER.ID)
                else
                    REVENUEPAYMENTMETHOD.PAYMENTMETHOD
            end as PAYMENTMETHOD,
            LI.BASEAMOUNT
            - (
                coalesce(
                    (
                        select
                            sum(FINANCIALTRANSACTIONLINEITEM.TRANSACTIONAMOUNT)
                        from
                            dbo.FINANCIALTRANSACTION
                        inner join
                            dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
                        inner join
                            dbo.CREDITITEM_EXT on CREDITITEM_EXT.ID = FINANCIALTRANSACTIONLINEITEM.ID
                        where
                            FINANCIALTRANSACTIONLINEITEM.SOURCELINEITEMID = LI.ID
                            and FINANCIALTRANSACTIONLINEITEM.TYPECODE = 5  -- Discount

                            and FINANCIALTRANSACTION.TYPECODE in (5, 99)  -- Order, Deleted Revenue

                            and CREDITITEM_EXT.TYPECODE = 1  -- Membership

                    ), 0)
                )
            + coalesce([ADDONS].[AMOUNT], 0)
            + coalesce(CONTRIBUTEDREVENUE.AMOUNT, 0)
        from
            dbo.FINANCIALTRANSACTION as FT
        inner join
            dbo.FINANCIALTRANSACTIONLINEITEM as LI on LI.FINANCIALTRANSACTIONID = FT.ID
        inner join
            dbo.REVENUESPLIT_EXT on REVENUESPLIT_EXT.ID = LI.ID
        inner join
            dbo.REVENUEPAYMENTMETHOD on FT.ID = REVENUEPAYMENTMETHOD.REVENUEID
        inner join
            dbo.UFN_MEMBERSHIP_LATESTTRANSACTIONASOF_BULK(null) as MEMBERSHIPTRANSACTION on LI.ID = MEMBERSHIPTRANSACTION.REVENUESPLITID
        inner join
            dbo.MEMBERSHIPLEVEL on MEMBERSHIPTRANSACTION.MEMBERSHIPLEVELID = MEMBERSHIPLEVEL.ID
        inner join
            dbo.MEMBERSHIP on MEMBERSHIP.ID = MEMBERSHIPTRANSACTION.MEMBERSHIPID
        inner join
            dbo.MEMBERSHIPPROGRAM on MEMBERSHIPPROGRAM.ID = MEMBERSHIP.MEMBERSHIPPROGRAMID
        left outer join
            dbo.OTHERPAYMENTMETHODDETAIL on OTHERPAYMENTMETHODDETAIL.ID = REVENUEPAYMENTMETHOD.ID
        left outer join
            REFUNDEDTICKETITEMS_CTE as REFUNDEDITEM on REFUNDEDITEM.SOURCELINEITEMID = LI.ID
        left outer join
            dbo.SALESORDERITEMMEMBERSHIP on MEMBERSHIPTRANSACTION.ID = SALESORDERITEMMEMBERSHIP.MEMBERSHIPTRANSACTIONID
        left outer join
            REFUNDEDTICKETITEMS_CTE as REFUNDEDORDERITEM on SALESORDERITEMMEMBERSHIP.ID = REFUNDEDORDERITEM.SALESORDERITEMID
        left outer join
            dbo.SALESORDERITEM on SALESORDERITEMMEMBERSHIP.ID = SALESORDERITEM.ID
        left outer join
            dbo.SALESORDER on SALESORDERITEM.SALESORDERID = SALESORDER.ID
        left join
            ADDONS_CTE as ADDONS on ADDONS.MEMBERSHIPTRANSACTIONID = MEMBERSHIPTRANSACTION.ID
        outer apply
            dbo.UFN_CONSTITUENT_DISPLAYNAME(FT.CONSTITUENTID) as CONSTITUENTNAMEFORMAT
        outer apply
        (
            select
                sum(DONATIONLI.ORGAMOUNT) as AMOUNT
            from dbo.FINANCIALTRANSACTIONLINEITEM MEMBERSHIPLI
            inner join dbo.FINANCIALTRANSACTIONLINEITEM DONATIONLI on DONATIONLI.SOURCELINEITEMID = MEMBERSHIPLI.ID
            inner join dbo.REVENUESPLIT_EXT as DONATIONEXT on DONATIONEXT.ID = DONATIONLI.ID
            where MEMBERSHIPLI.ID = LI.ID
                and DONATIONEXT.TYPECODE = 0
                and DONATIONEXT.APPLICATIONCODE = 0
            group by MEMBERSHIPLI.ID
        ) CONTRIBUTEDREVENUE
        where
            (@SALESORDERID is null or SALESORDER.ID = @SALESORDERID)
            and (@APPUSERID is null or SALESORDER.APPUSERID = @APPUSERID)
            and REFUNDEDITEM.ID is null
            and REFUNDEDORDERITEM.ID is null
            and (@CONSTITUENTID is null or FT.CONSTITUENTID = @CONSTITUENTID)
            and (
                (
                    FT.TYPECODE = 0  -- Payment

                    and (
                        (@PAYMENTMETHODTYPECODETRANSLATION is null and REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE in (0,1,2,3,10))  -- Cash, Check, Credit card, Direct Debit Other

                        or REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE = @PAYMENTMETHODTYPECODETRANSLATION
                    )
                )
                or (
                    FT.TYPECODE = 5  -- Order

                    and (
                        @PAYMENTMETHODTYPECODETRANSLATION is null
                        or exists (
                            select *
                            from dbo.SALESORDERPAYMENT
                            inner join dbo.REVENUEPAYMENTMETHOD on REVENUEPAYMENTMETHOD.REVENUEID = SALESORDERPAYMENT.PAYMENTID
                            where
                                SALESORDERPAYMENT.SALESORDERID = SALESORDER.ID
                                and REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE = @PAYMENTMETHODTYPECODETRANSLATION
                        )
                    )
                )
            )
            and (@STARTDATE is null or FT.CALCULATEDDATE >= @STARTDATE)
            and (@ENDDATE is null or FT.CALCULATEDDATE <= @ENDDATE)
            and (
                @SALESMETHODID is null 
                or (
                    @SALESMETHODID = '3D858097-FD54-4BB8-9276-A4028E9B400C'    -- Static guid for Back office

                    and SALESORDER.ID is null
                )
                or SALESORDER.SALESMETHODTYPECODE = @SALESMETHODTYPECODE
            )
            and (@LOWAMOUNT is null or LI.BASEAMOUNT >= @LOWAMOUNT)
            and (@HIGHAMOUNT is null or LI.BASEAMOUNT <= @HIGHAMOUNT)
            and MEMBERSHIPPROGRAM.PROGRAMTYPECODE = 0  -- Annual

            -- Bug #191252

            and MEMBERSHIP.STATUSCODE = 0  -- Active

            and MEMBERSHIP.EXPIRATIONDATE >= @DATE
            and FT.DELETEDON is null
            and LI.DELETEDON is null
            and LI.TYPECODE <> 1  -- Reversal

        order by
            FT.DATE desc, MEMBERSHIPLEVEL.NAME, MEMBERSHIPTRANSACTION.ACTION
        option (recompile);
    end

    select top(@MAXROWS
        CONTEXTID,
        CONTEXTTYPE,
        ITEMDESCRIPTION,
        CONSTITUENT,
        [DATE],
        [USER],
        SALESMETHOD,
        PAYMENTMETHOD,
        AMOUNT
    from @RESULTS RESULTS
    order by LATESTDATE desc, ITEMDESCRIPTION;