USP_DATALIST_GIFTLIST

Parameters

Parameter Parameter Type Mode Description
@CONSTITUENTID nvarchar(1000) IN
@GIFTTYPE nvarchar(200) IN
@DATEADDED datetime IN
@LASTMODIFIED datetime IN
@DATEFILTER tinyint IN
@STARTDATE datetime IN
@ENDDATE datetime IN
@DESIGNATIONID nvarchar(500) IN
@APPEALID nvarchar(500) IN
@MAXROWS int IN
@SORTPARAMETER nvarchar(100) IN
@SORTORDER nvarchar(20) IN
@CURRENTAPPUSERID uniqueidentifier IN
@SECURITYFEATUREID uniqueidentifier IN
@SECURITYFEATURETYPE tinyint IN

Definition

Copy


        CREATE procedure [dbo].[USP_DATALIST_GIFTLIST] (
            @CONSTITUENTID nvarchar(1000) = null
            ,@GIFTTYPE nvarchar(200) = null
            ,@DATEADDED datetime = null
            ,@LASTMODIFIED datetime = null
            ,@DATEFILTER tinyint = 16
            ,@STARTDATE datetime = null
            ,@ENDDATE datetime = null
            ,@DESIGNATIONID nvarchar(500) = null
            ,@APPEALID nvarchar(500) = null
            ,@MAXROWS int = null
            ,@SORTPARAMETER nvarchar(100) = null
            ,@SORTORDER nvarchar(20) = 'ASC'
            ,@CURRENTAPPUSERID uniqueidentifier = null
            ,@SECURITYFEATUREID uniqueidentifier = null
            ,@SECURITYFEATURETYPE tinyint = null
            ) with execute as OWNER
        as
        begin
            set nocount on;

            declare @PARMDEFINITION nvarchar(1000)
            ,@SQLCOMMAND nvarchar(4000)
            ,@WHERECLAUSE nvarchar(2000)='';

            set @PARMDEFINITION = '@CONSTITUENTID nvarchar(1000), @GIFTTYPE nvarchar(200)
            ,@STARTDATE datetime, @ENDDATE datetime, @MAXROWS int, @SORTPARAMETER nvarchar(100), @SORTORDER nvarchar(20)
            ,@CURRENTAPPUSERID uniqueidentifier, @SECURITYFEATUREID uniqueidentifier, @SECURITYFEATURETYPE tinyint
            ,@DESIGNATIONID nvarchar(500), @APPEALID nvarchar(500) = null,@DATEADDED datetime, @LASTMODIFIED datetime';

            if(@MAXROWS is null)
                set @MAXROWS = 500;

            set @SORTORDER = case 
                    when @SORTORDER = 'DESC'
                        then 'DESC'
                    else 'ASC'
                    end

            --Validate and assigned sortparamter


            if (@SORTPARAMETER = '' or @SORTPARAMETER is null or @SORTPARAMETER = 'constituent_id')
                set @SORTPARAMETER = 'FINANCIALTRANSACTION.CONSTITUENTID';
            else if(@SORTPARAMETER = 'batch_number')
                set @SORTPARAMETER = 'REVENUE_EXT.BATCHNUMBER';
            else if(@SORTPARAMETER = 'date')
                set @SORTPARAMETER = 'FINANCIALTRANSACTION.DATE';
            else if(@SORTPARAMETER = 'date_added')
                set @SORTPARAMETER = 'FINANCIALTRANSACTION.DATEADDED';
            else if(@SORTPARAMETER = 'date_modified')
                set @SORTPARAMETER = 'FINANCIALTRANSACTION.DATECHANGED';
            else if(@SORTPARAMETER = 'given_anonymously')
                set @SORTPARAMETER = 'REVENUE_EXT.GIVENANONYMOUSLY';
            else if(@SORTPARAMETER = 'payment_method')
                set @SORTPARAMETER = 'REVENUEPAYMENTMETHOD.PAYMENTMETHOD';
            else if(@SORTPARAMETER = 'post_status')
                set @SORTPARAMETER = 'FINANCIALTRANSACTION.POSTSTATUS';
            else if(@SORTPARAMETER = 'receipt_amount')
                set @SORTPARAMETER = 'REVENUE_EXT.RECEIPTAMOUNT';
            else if(@SORTPARAMETER = 'reference')
                set @SORTPARAMETER = 'REVENUE_EXT.REFERENCE';
            else if(@SORTPARAMETER = 'appeal_id')
                set @SORTPARAMETER = 'REVENUE_EXT.APPEALID';
            else if(@SORTPARAMETER = 'acknowledgement_status')
                set @SORTPARAMETER = 'ACKNOWLEDGEMENTSTATUS';
            else if(@SORTPARAMETER = 'gift_status')
                set @SORTPARAMETER = 'GIFTSTATUS';
            else if(@SORTPARAMETER = 'lookup_id')
                set @SORTPARAMETER = 'LOOKUPID';
            else if(@SORTPARAMETER = 'transaction_type')
                set @SORTPARAMETER = 'TRANSACTIONTYPE';
            else if(@SORTPARAMETER = 'id')
                set @SORTPARAMETER = 'FINANCIALTRANSACTION.ID';
            else if(@SORTPARAMETER = 'base_currency_id')
                set @SORTPARAMETER = 'BASECURRENCYID';
            else if(@SORTPARAMETER = 'amount' or @SORTPARAMETER = 'balance')
                set @SORTPARAMETER = @SORTPARAMETER;
            else
                begin
                    raiserror(N'The sort field %s is not valid. Only non-collection output fields are usable.', 13, 1,@SORTPARAMETER);
                    return 0;
                end

            if @STARTDATE is null and @ENDDATE is null
                exec [dbo].[USP_RESOLVEDATEFILTER] @DATEFILTER
                    ,@STARTDATE output
                    ,@ENDDATE output;
            else
            begin
                set @STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(@STARTDATE);
                set @ENDDATE = dbo.UFN_DATE_GETLATESTTIME(@ENDDATE);
            end


            set @SQLCOMMAND='with MOSTRECENTRECEIPT as (
            select
                REVENUEID,
                RECEIPTPROCESSDATE = MAX(RECEIPTPROCESSDATE),
                DATEADDED= case when MAX(RECEIPTPROCESSDATE) is null then max(DATEADDED) else null end
            from
                dbo.REVENUERECEIPT with (nolock)
                group by
                REVENUEID
            )
            '


            if @MAXROWS = 0
                set @SQLCOMMAND =@SQLCOMMAND+ ' select ';
            else
                set @SQLCOMMAND =@SQLCOMMAND+ ' select top (@MAXROWS) ';

            set @SQLCOMMAND = @SQLCOMMAND + 
                'FINANCIALTRANSACTION.ID
                    ,dbo.UFN_REVENUETRANSACTION_GETACKNOWLEDGESTATUS(FINANCIALTRANSACTION.ID) as ACKNOWLEDGEMENTSTATUS
                    ,FINANCIALTRANSACTION.BASEAMOUNT as AMOUNT
                    ,case FINANCIALTRANSACTION.TYPECODE when 1 then dbo.UFN_PLEDGE_GETBALANCE(FINANCIALTRANSACTION.ID) else null end as BALANCE
                    ,REVENUE_EXT.BATCHNUMBER
                    ,FINANCIALTRANSACTION.CONSTITUENTID
                    ,cast(FINANCIALTRANSACTION.DATE as datetime) as DATE
                    ,FINANCIALTRANSACTION.DATEADDED
                    ,FINANCIALTRANSACTION.DATECHANGED as DATEMODIFIED
                    ,(select FINANCIALTRANSACTIONLINEITEM.ID,REVENUESPLIT_EXT.DESIGNATIONID as DESIGNATIONID,FINANCIALTRANSACTIONLINEITEM.TRANSACTIONAMOUNT as AMOUNT,
                        REVENUESPLIT_EXT.APPLICATIONCODE as APPLICATION, 
                        REVENUESPLIT_EXT.TYPECODE as TYPE,
                        FINANCIALTRANSACTION.TRANSACTIONCURRENCYID as TRANSACTIONCURRENCYID
                        from FINANCIALTRANSACTIONLINEITEM 
                        left join REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID=REVENUESPLIT_EXT.ID where 
                        FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID=FINANCIALTRANSACTION.ID for xml path(''GIFTSPLITS_DATAITEM''), type, elements,binary base64) as GIFTSPLITS
                    ,case when REVENUESCHEDULE.STATUSCODE is null then PLANNEDGIFT.STATUS 
                        else case REVENUESCHEDULE.STATUSCODE when 3 
                        then ''Canceled'' else REVENUESCHEDULE.STATUS 
                    end end as GIFTSTATUS
                    ,REVENUE_EXT.GIVENANONYMOUSLY
                    ,FINANCIALTRANSACTION.CALCULATEDUSERDEFINEDID as LOOKUPID
                    ,REVENUEPAYMENTMETHOD.PAYMENTMETHOD as PAYMENTMETHOD 
                    ,FINANCIALTRANSACTION.TYPE as TRANSACTIONTYPE
                    ,FINANCIALTRANSACTION.POSTSTATUS as POSTSTATUS
                    ,REVENUE_EXT.RECEIPTAMOUNT
                    ,REVENUE_EXT.REFERENCE as REFERENCE
                    ,(select REVENUE_EXT.RECEIPTAMOUNT as AMOUNT, RR.RECEIPTDATE as DATE from MOSTRECENTRECEIPT WITH (NOLOCK)
                    INNER join REVENUERECEIPT RR on RR.REVENUEID = MOSTRECENTRECEIPT.REVENUEID and 
                    (MOSTRECENTRECEIPT.RECEIPTPROCESSDATE = RR.RECEIPTPROCESSDATE or MOSTRECENTRECEIPT.DATEADDED = RR.DATEADDED)
                    where RR.REVENUEID =FINANCIALTRANSACTION.ID for xml path(''RECEIPTS_DATAITEM''),type, elements,binary base64) as RECEIPTS
                    ,REVENUE_EXT.APPEALID as APPEALID
                    ,isnull(REVENUE_EXT.NONPOSTABLEBASECURRENCYID, CURRENCYSET.BASECURRENCYID) as BASECURRENCYID
                from dbo.FINANCIALTRANSACTION 
                left join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID
                left join dbo.PLANNEDGIFT on PLANNEDGIFT.CONSTITUENTID = FINANCIALTRANSACTION.CONSTITUENTID
                left join dbo.REVENUEPAYMENTMETHOD on FINANCIALTRANSACTION.ID = REVENUEPAYMENTMETHOD.REVENUEID
                left join dbo.REVENUESCHEDULE as REVENUESCHEDULE on REVENUESCHEDULE.ID = FINANCIALTRANSACTION.ID
                left join dbo.PDACCOUNTSYSTEM on PDACCOUNTSYSTEM.ID = FINANCIALTRANSACTION.PDACCOUNTSYSTEMID
                left join dbo.CURRENCYSET on PDACCOUNTSYSTEM.CURRENCYSETID = CURRENCYSET.ID
                '

            if @CONSTITUENTID is not null and @CONSTITUENTID <> ''
                set @WHERECLAUSE = '(FINANCIALTRANSACTION.CONSTITUENTID in (select ID from dbo.fnCSVStringToTable(@CONSTITUENTID))) ';


            if @GIFTTYPE is not null and @GIFTTYPE <> ''
            begin
                if @WHERECLAUSE <> ''
                    set @WHERECLAUSE = @WHERECLAUSE + char(10) + 'and';

                set @WHERECLAUSE = @WHERECLAUSE + ' (FINANCIALTRANSACTION.TYPE in (select ID from dbo.fnCSVStringToTable(@GIFTTYPE))) ';
            end


            if @APPEALID is not null and @APPEALID <> ''
            begin
                if @WHERECLAUSE <> ''
                    set @WHERECLAUSE = @WHERECLAUSE + char(10) + 'and';

                set @WHERECLAUSE = @WHERECLAUSE + ' (REVENUE_EXT.APPEALID in (select ID from dbo.fnCSVStringToTable(@APPEALID))) ';
            end


            if @DATEADDED is not null
            begin
                if @WHERECLAUSE <> ''
                    set @WHERECLAUSE = @WHERECLAUSE + char(10) + 'and';

                set @WHERECLAUSE = @WHERECLAUSE + ' (FINANCIALTRANSACTION.DATEADDED >= @DATEADDED)';
            end


            if @LASTMODIFIED is not null
            begin
                if @WHERECLAUSE <> ''
                    set @WHERECLAUSE = @WHERECLAUSE + char(10) + 'and';

                set @WHERECLAUSE = @WHERECLAUSE + ' (FINANCIALTRANSACTION.DATECHANGED >= @LASTMODIFIED)';
            end


            if @STARTDATE is not null and @ENDDATE is null
            begin
                if @WHERECLAUSE <> ''
                    set @WHERECLAUSE = @WHERECLAUSE + char(10) + 'and';

                set @WHERECLAUSE = @WHERECLAUSE + ' (FINANCIALTRANSACTION.DATE >= @STARTDATE)';
            end


            if @STARTDATE is null and @ENDDATE is not null
            begin
                if @WHERECLAUSE <> ''
                    set @WHERECLAUSE = @WHERECLAUSE + char(10) + 'and';

                set @WHERECLAUSE = @WHERECLAUSE + ' (FINANCIALTRANSACTION.DATE <= @ENDDATE)';
            end


            if @STARTDATE is not null and @ENDDATE is not null
            begin
                if @WHERECLAUSE <> ''
                    set @WHERECLAUSE = @WHERECLAUSE + char(10) + 'and';

                set @WHERECLAUSE = @WHERECLAUSE + ' (FINANCIALTRANSACTION.DATE between @STARTDATE and @ENDDATE)';
            end


            if @DESIGNATIONID is not null and @DESIGNATIONID <> ''
            begin
                if @WHERECLAUSE <> ''
                    set @WHERECLAUSE = @WHERECLAUSE + char(10) + 'and';

                set @WHERECLAUSE = @WHERECLAUSE+' EXISTS (select 1 from FINANCIALTRANSACTIONLINEITEM FINANCIALTRANSACTIONLINEITEM 
                left join REVENUESPLIT_EXT REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID=REVENUESPLIT_EXT.ID where
                FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
                and REVENUESPLIT_EXT.DESIGNATIONID in (select ID from dbo.fnCSVStringToTable(@DESIGNATIONID)))';
            end


            if (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID)) <> 1
            begin
                if @WHERECLAUSE <> ''
                    set @WHERECLAUSE = @WHERECLAUSE + char(10) + 'and';

                set @WHERECLAUSE = @WHERECLAUSE + ' ((select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID, @SECURITYFEATUREID, @SECURITYFEATURETYPE)
                                where (SITEID in (select [SITEID] from UFN_SITEID_MAPFROM_REVENUEID_2(FINANCIALTRANSACTION.ID))) 
                                or (SITEID is null and (select COUNT([SITEID]) from UFN_SITEID_MAPFROM_REVENUEID_2(FINANCIALTRANSACTION.ID)) = 0)) = 1)';
            end

            if len(@WHERECLAUSE) > 0 
                set @SQLCOMMAND = @SQLCOMMAND + ' where ' + @WHERECLAUSE;


            set @SQLCOMMAND = @SQLCOMMAND + ' order by ' + @SORTPARAMETER + ' ' + @SORTORDER;


            /*will execute the final dynamic query*/
            exec sp_executesql @SQLCOMMAND
                ,@PARMDEFINITION
                ,@DATEADDED = @DATEADDED
                ,@LASTMODIFIED = @LASTMODIFIED
                ,@CONSTITUENTID = @CONSTITUENTID
                ,@GIFTTYPE = @GIFTTYPE
                ,@STARTDATE = @STARTDATE
                ,@ENDDATE = @ENDDATE
                ,@MAXROWS = @MAXROWS
                ,@SORTPARAMETER = @SORTPARAMETER
                ,@SORTORDER = @SORTORDER
                ,@CURRENTAPPUSERID = @CURRENTAPPUSERID
                ,@SECURITYFEATUREID = @SECURITYFEATUREID
                ,@SECURITYFEATURETYPE = @SECURITYFEATURETYPE
                ,@DESIGNATIONID =@DESIGNATIONID 
                ,@APPEALID =@APPEALID;

        end