USP_REPORT_REFUNDS

Parameters

Parameter Parameter Type Mode Description
@ITEMTYPECODE tinyint IN
@REFUNDMETHODTYPECODE tinyint IN
@OTHERPAYMENTMETHODCODEID uniqueidentifier IN
@STARTDATE datetime IN
@ENDDATE datetime IN
@CURRENTAPPUSERID uniqueidentifier IN
@INCLUDESENTCHECKS bit IN

Definition

Copy

create procedure dbo.USP_REPORT_REFUNDS
(
    @ITEMTYPECODE tinyint = null,
    @REFUNDMETHODTYPECODE tinyint = null,
    @OTHERPAYMENTMETHODCODEID uniqueidentifier = null,
    @STARTDATE datetime = null,
    @ENDDATE datetime = null,
    @CURRENTAPPUSERID uniqueidentifier = null,
    @INCLUDESENTCHECKS bit = null
)
as
    set @STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(@STARTDATE);
    set @ENDDATE = dbo.UFN_DATE_GETLATESTTIME(@ENDDATE);

    declare @USERGRANTEDCONSTITUENTPAGE bit = 0
    declare @USERGRANTEDREFUNDPAGE bit = 0;

    if dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1
        begin
            select 
                @USERGRANTEDCONSTITUENTPAGE = 1
                @USERGRANTEDREFUNDPAGE = 1;
        end
    else
        begin
            select 
                @USERGRANTEDCONSTITUENTPAGE = [dbo].[UFN_SECURITY_APPUSER_GRANTED_FORM_IN_SYSTEMROLE](@CURRENTAPPUSERID, '0C836902-A398-47a0-91EB-8B66E434148E'),
                @USERGRANTEDREFUNDPAGE = [dbo].[UFN_SECURITY_APPUSER_GRANTED_FORM_IN_SYSTEMROLE](@CURRENTAPPUSERID, 'b2130dfa-51f6-4205-87e6-7d132573cb4d');                
        end

    declare @REFUNDS table (
        ID uniqueidentifier,
        TRANSACTIONDATE datetime,
        CONSTITUENTID uniqueidentifier,
        SALESORDERID uniqueidentifier,
        AMOUNT money
    );


    insert into @REFUNDS
        select
            FT.ID,
            cast(FT.DATE as datetime),
            FT.CONSTITUENTID,
            CREDIT_EXT.SALESORDERID,
            FT.BASEAMOUNT
        from dbo.FINANCIALTRANSACTION FT
        inner join dbo.CREDIT_EXT on FT.ID = CREDIT_EXT.ID
        where FT.TYPECODE = 23
            and (@STARTDATE is null or FT.CALCULATEDDATE >= @STARTDATE)
            and (@ENDDATE is null or FT.CALCULATEDDATE <= @ENDDATE)
            and (
                (
                    @ITEMTYPECODE in (0,4) and CREDIT_EXT.SALESORDERID is not null -- Orders

                )
                or (
                    @ITEMTYPECODE = 0
                    and exists(
                            select EXT.ID
                            from dbo.CREDITITEM_EXT EXT
                            where EXT.TYPECODE in (1,2,6,16)                        -- Membership, Donation, Event registration, Membership add-ons

                                and EXT.CREDITID = FT.ID
                    )
                )
                or (
                    @ITEMTYPECODE = 1
                    and exists(
                            select EXT.ID
                            from dbo.CREDITITEM_EXT EXT
                            where EXT.TYPECODE = 2                                -- Donation

                                and EXT.CREDITID = FT.ID
                    )
                )
                or (
                    @ITEMTYPECODE = 2
                    and exists(
                            select EXT.ID
                            from dbo.CREDITITEM_EXT EXT
                            where EXT.TYPECODE = 6                                -- Event registration

                                and EXT.CREDITID = FT.ID
                    )
                )
                or (
                    @ITEMTYPECODE = 3
                    and exists(
                            select EXT.ID
                            from dbo.CREDITITEM_EXT EXT
                            where EXT.TYPECODE in (1,16)                                -- Membership, Membership add-ons

                                and EXT.CREDITID = FT.ID
                    )
                )                
            )
            and (
                @REFUNDMETHODTYPECODE = 0
                or exists(
                    select ID
                    from dbo.CREDITPAYMENT
                    where CREDITPAYMENT.CREDITID = FT.ID
                        and CREDITPAYMENT.PAYMENTMETHODCODE = @REFUNDMETHODTYPECODE - 1
                        and (
                            (CREDITPAYMENT.OTHERPAYMENTMETHODCODEID is null and @OTHERPAYMENTMETHODCODEID is null)
                            or CREDITPAYMENT.OTHERPAYMENTMETHODCODEID = @OTHERPAYMENTMETHODCODEID
                        )
                )
            )
            and (
                @INCLUDESENTCHECKS = 1
                or not exists (
                        select CREDITPAYMENT.ID
                        from dbo.CREDITPAYMENT
                        inner join dbo.CREDITPAYMENTCHECKPAYMENTMETHODDETAIL
                            on CREDITPAYMENT.ID = CREDITPAYMENTCHECKPAYMENTMETHODDETAIL.ID
                        where CREDITPAYMENT.CREDITID = FT.ID
                            and CREDITPAYMENT.PAYMENTMETHODCODE = 1
                            and CREDITPAYMENTCHECKPAYMENTMETHODDETAIL.CHECKDATE <> '00000000'
                    )
            );

    declare @DATA table (
        CREDITID uniqueidentifier,
        CONSTITUENTID uniqueidentifier,
        [DATE] datetime,
        ITEMDESCRIPTION nvarchar(max),
        ADDRESSID uniqueidentifier,
        DATEPROCESSED date,
        CHECKNUMBER nvarchar(20),
        AMOUNT money
    );

    -- Populate data table

    insert into @DATA
        select
            FILTERED.ID,
            FILTERED.CONSTITUENTID,
            FILTERED.TRANSACTIONDATE,
            coalesce('Order ' + cast(SALESORDER.SEQUENCEID as nvarchar) + ': ', '') + dbo.UFN_CREDIT_GETITEMLIST(FILTERED.ID),
            CHECKINFO.ADDRESSID,
            case CHECKINFO.CHECKDATE
                when '00000000' then null
                else CHECKINFO.CHECKDATE
            end as DATEPROCESSED,
            CHECKINFO.CHECKNUMBER,
            FILTERED.AMOUNT as AMOUNT
        from @REFUNDS FILTERED
        left outer join dbo.SALESORDER
            on FILTERED.SALESORDERID = SALESORDER.ID
        outer apply (
            select top(1)
                CREDITPAYMENTCHECKPAYMENTMETHODDETAIL.ADDRESSID,
                CREDITPAYMENTCHECKPAYMENTMETHODDETAIL.CHECKDATE,
                CREDITPAYMENTCHECKPAYMENTMETHODDETAIL.CHECKNUMBER
            from dbo.CREDITPAYMENT
            inner join dbo.CREDITPAYMENTCHECKPAYMENTMETHODDETAIL
                on CREDITPAYMENT.ID = CREDITPAYMENTCHECKPAYMENTMETHODDETAIL.ID
            where CREDITPAYMENT.CREDITID = FILTERED.ID
                and CREDITPAYMENT.PAYMENTMETHODCODE = 1
        ) as CHECKINFO;

    select 
        'http://www.blackbaud.com/CREDITID?CREDITID=' + CONVERT(nvarchar(36), DATA.CREDITID) as REFUNDLINK,
        @USERGRANTEDREFUNDPAGE as USERGRANTEDREFUNDLINK,
        'http://www.blackbaud.com/CONSTITUENTID?CONSTITUENTID=' + CONVERT(nvarchar(36), DATA.CONSTITUENTID) as CONSTITUENTLINK,
        @USERGRANTEDCONSTITUENTPAGE as USERGRANTEDCONSTITUENTLINK,
        DATA.[DATE],
        DATA.ITEMDESCRIPTION,
        CONSTITUENTNAMEFORMAT.NAME as CONSTITUENT,
        dbo.UFN_ADDRESS_GETDESCRIPTION(DATA.ADDRESSID) as ADDRESS,
        dbo.UFN_CREDIT_GETPAYMENTMETHODLIST(DATA.CREDITID) as REFUNDMETHOD,
        DATA.DATEPROCESSED,
        DATA.CHECKNUMBER,
        DATA.AMOUNT
    from @DATA DATA
    outer apply dbo.UFN_CONSTITUENT_DISPLAYNAME(DATA.CONSTITUENTID) as CONSTITUENTNAMEFORMAT
    order by DATA.[DATE] desc;

    return 0;