USP_DATALIST_PLANNEDGIFTDETAIL

Fetches planned gift detail information.

Parameters

Parameter Parameter Type Mode Description
@SELECTIONID uniqueidentifier IN Selection
@FROMDATE datetime IN From
@TODATE datetime IN To
@VEHICLECODE tinyint IN Vehicle
@STATUSCODE tinyint IN Status
@CURRENTAPPUSERID uniqueidentifier IN Input parameter indicating the ID of the current user.

Definition

Copy


                    CREATE procedure dbo.USP_DATALIST_PLANNEDGIFTDETAIL
                    (
                        @SELECTIONID uniqueidentifier,
                        @FROMDATE datetime = null,
                        @TODATE datetime = null,
                        @VEHICLECODE tinyint = null,
                        @STATUSCODE tinyint = null,
                        @CURRENTAPPUSERID uniqueidentifier = null
                    )
                    as begin
                        set nocount on;

                        declare @ISADMIN bit;
                         declare @APPUSER_IN_NONRACROLE bit;
                        declare @APPUSER_IN_NOSECGROUPROLE bit;
                         declare @APPUSER_IN_NONSITEROLE bit;
                        declare @APPUSER_IN_NOSITEROLE bit;

                        set @ISADMIN = dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID);
                        set @APPUSER_IN_NONRACROLE = dbo.UFN_SECURITY_APPUSER_IN_NONRACROLE(@CURRENTAPPUSERID);
                        set @APPUSER_IN_NOSECGROUPROLE = dbo.UFN_SECURITY_APPUSER_IN_NO_SECURITY_GROUP_ROLE(@CURRENTAPPUSERID);
                        set @APPUSER_IN_NONSITEROLE = dbo.UFN_SECURITY_APPUSER_IN_NONSITEROLE(@CURRENTAPPUSERID);
                        set @APPUSER_IN_NOSITEROLE = dbo.UFN_SECURITY_APPUSER_IN_NO_SITE_ROLE(@CURRENTAPPUSERID);

                        -- Temp table to hold selection

                        declare @TMP1 table
                        (
                            PLANNEDGIFTID uniqueidentifier,
                            CONSTITUENTNAME nvarchar(128),
                            GIFTDATE datetime,
                            GIFTVEHICLE nvarchar(64),
                            DESIGNATIONNAME nvarchar(256),
                            DESIGNATIONVANITYNAME nvarchar(256),
                            GIFTAMOUNT money,
                            REMAINDERVALUE decimal(30,10),
                            TOTALREMAINDERVALUE money,
                            EXPECTEDMATURITYYEAR nvarchar(4),
                            STATUS nvarchar(64),
                            SUBTYPE nvarchar(64),
                            PLANTYPE nvarchar(64),
                            PGDESIGNATIONID uniqueidentifier,
                            PGDSEQUENCE tinyint);

                        if @SELECTIONID is null
                            insert into @TMP1
                            (
                                PLANNEDGIFTID,
                                CONSTITUENTNAME,
                                GIFTDATE,
                                GIFTVEHICLE,
                                DESIGNATIONNAME,
                                DESIGNATIONVANITYNAME,
                                GIFTAMOUNT,
                                REMAINDERVALUE,
                                TOTALREMAINDERVALUE,
                                EXPECTEDMATURITYYEAR,
                                STATUS,
                                SUBTYPE,
                                PLANTYPE,
                                PGDESIGNATIONID,
                                PGDSEQUENCE
                            )
                            (select
                                PG.ID as PLANNEDGIFTID,
                                NF_C.NAME as CONSTITUENTNAME,
                                PG.GIFTDATE as GIFTDATE,
                                PG.VEHICLE as GIFTVEHICLE,
                                DESIGNATION.NAME as DESIGNATIONNAME,
                                DESIGNATION.VANITYNAME as DESIGNATIONVANITYNAME,
                                coalesce(PGD.AMOUNT, PG.GIFTAMOUNT) as GIFTAMOUNT,
                                case when PG.GIFTAMOUNT = 0 then 
                                    0 else
                                    coalesce(cast(PG.REMAINDERVALUE as decimal(30,10)) * (cast(PGD.AMOUNT as decimal(30,10)) / cast(PG.GIFTAMOUNT as decimal(30,10))),PG.REMAINDERVALUE) end
                                    as REMAINDERVALUE,
                                PG.REMAINDERVALUE as TOTALREMAINDERVALUE,
                                case when PG.EXPECTEDMATURITY = 0 then null else PG.EXPECTEDMATURITY end as EXPECTEDMATURITYYEAR,
                                PG.STATUS as STATUS,
                                coalesce(OST.DESCRIPTION, PG.SUBTYPE) as SUBTYPE,
                                dbo.UFN_PROSPECTPLANTYPECODE_GETDESCRIPTION(PP.PROSPECTPLANTYPECODEID) as PLANTYPE,
                                PGD.ID as PGDESIGNATIONID,
                                PGD.SEQUENCE as PGDSEQUENCE
                            from
                                dbo.PLANNEDGIFT PG
                            left join dbo.PLANNEDGIFTDESIGNATION PGD on PGD.PLANNEDGIFTID = PG.ID
                            left join dbo.DESIGNATION on DESIGNATION.ID = PGD.DESIGNATIONID
                            left join dbo.PROSPECTPLAN PP on PP.ID = PG.PROSPECTPLANID
                            left join dbo.PLANNEDGIFTOTHERSUBTYPECODE OST on OST.ID = PG.OTHERSUBTYPECODEID
                            cross apply dbo.UFN_CONSTITUENT_DISPLAYNAME(PG.CONSTITUENTID) NF_C
                            where
                                (PG.GIFTDATE between @FROMDATE and @TODATE or @FROMDATE is null or @TODATE is null) and
                                (PG.VEHICLECODE = @VEHICLECODE or @VEHICLECODE is null) and
                                (PG.STATUSCODE = @STATUSCODE or @STATUSCODE is null) and
                                (@ISADMIN = 1 or
                                    (@APPUSER_IN_NONRACROLE = 1 or
                                    dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITID_FORREPORT(@CURRENTAPPUSERID, PG.CONSTITUENTID, @APPUSER_IN_NOSECGROUPROLE) = 1)
                                    and
                                    (@APPUSER_IN_NONSITEROLE = 1 or
                                    dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITID_FORREPORT_BYSITE(@CURRENTAPPUSERID, PG.CONSTITUENTID, @APPUSER_IN_NOSITEROLE) = 1)
                                )
                            );
                        else
                            insert into @TMP1
                            (
                                PLANNEDGIFTID,
                                CONSTITUENTNAME,
                                GIFTDATE,
                                GIFTVEHICLE,
                                DESIGNATIONNAME,
                                DESIGNATIONVANITYNAME,
                                GIFTAMOUNT,
                                REMAINDERVALUE,
                                TOTALREMAINDERVALUE,
                                EXPECTEDMATURITYYEAR,
                                STATUS,
                                SUBTYPE,
                                PLANTYPE,
                                PGDESIGNATIONID,
                                PGDSEQUENCE
                            )
                            (select
                                PG.ID as PLANNEDGIFTID,
                                NF_C.NAME as CONSTITUENTNAME,
                                PG.GIFTDATE as GIFTDATE,
                                PG.VEHICLE as GIFTVEHICLE,
                                DESIGNATION.NAME as DESIGNATIONNAME,
                                DESIGNATION.VANITYNAME as DESIGNATIONVANITYNAME,
                                coalesce(PGD.AMOUNT, PG.GIFTAMOUNT) as GIFTAMOUNT,
                                case when PG.GIFTAMOUNT = 0 then
                                    0 else
                                    coalesce(cast(PG.REMAINDERVALUE as decimal(30,10)) * (cast(PGD.AMOUNT as decimal(30,10)) / cast(PG.GIFTAMOUNT as decimal(30,10))),PG.REMAINDERVALUE) end
                                    as REMAINDERVALUE,
                                PG.REMAINDERVALUE as TOTALREMAINDERVALUE,
                                case when PG.EXPECTEDMATURITY = 0 then null else PG.EXPECTEDMATURITY end as EXPECTEDMATURITYYEAR,
                                PG.STATUS as STATUS,
                                coalesce(OST.DESCRIPTION, PG.SUBTYPE) as SUBTYPE,
                                dbo.UFN_PROSPECTPLANTYPECODE_GETDESCRIPTION(PP.PROSPECTPLANTYPECODEID) as PLANTYPE,
                                PGD.ID as PGDESIGNATIONID,
                                PGD.SEQUENCE as PGDSEQUENCE
                            from
                                dbo.PLANNEDGIFT PG
                            left join dbo.PLANNEDGIFTDESIGNATION PGD on PGD.PLANNEDGIFTID = PG.ID
                            left join dbo.DESIGNATION on DESIGNATION.ID = PGD.DESIGNATIONID
                            left join dbo.PROSPECTPLAN PP on PP.ID = PG.PROSPECTPLANID
                            inner join dbo.UFN_IDSETREADER_GETRESULTS_GUID(@SELECTIONID) SELECTION on PG.ID = SELECTION.ID
                            left join dbo.PLANNEDGIFTOTHERSUBTYPECODE OST on OST.ID = PG.OTHERSUBTYPECODEID
                            cross apply dbo.UFN_CONSTITUENT_DISPLAYNAME(PG.CONSTITUENTID) NF_C
                            where
                                (PG.GIFTDATE between @FROMDATE and @TODATE or @FROMDATE is null or @TODATE is null) and
                                (PG.VEHICLECODE = @VEHICLECODE or @VEHICLECODE is null) and
                                (PG.STATUSCODE = @STATUSCODE or @STATUSCODE is null) and
                                (@ISADMIN = 1 or 
                                    (@APPUSER_IN_NONRACROLE = 1 or
                                    dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITID_FORREPORT(@CURRENTAPPUSERID, PG.CONSTITUENTID, @APPUSER_IN_NOSECGROUPROLE) = 1)
                                    and
                                    (@APPUSER_IN_NONSITEROLE = 1 or
                                    dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITID_FORREPORT_BYSITE(@CURRENTAPPUSERID, PG.CONSTITUENTID, @APPUSER_IN_NOSITEROLE) = 1)
                                )
                            );

                        -- Update original selection with corrected remainder values based upon the split between designations

                        update TMP1
                        set TMP1.REMAINDERVALUE = round(TMP1.REMAINDERVALUE, 2) + (TMP1.TOTALREMAINDERVALUE - (round(TMP1.REMAINDERVALUE, 2) * TMP1.PGDSEQUENCE))
                        from @TMP1 TMP1
                        inner join 
                        (select
                            TMP1.PLANNEDGIFTID as PLANNEDGIFTID,
                            max(TMP1.PGDSEQUENCE) as PGDSEQUENCE
                        from
                            @TMP1 TMP1
                        where
                            TMP1.TOTALREMAINDERVALUE <> (select sum(round(NESTED_TMP1.REMAINDERVALUE, 2)) from @TMP1 NESTED_TMP1 where NESTED_TMP1.PLANNEDGIFTID = TMP1.PLANNEDGIFTID)
                        group by TMP1.PLANNEDGIFTID) TMP2
                        on TMP2.PLANNEDGIFTID = TMP1.PLANNEDGIFTID and TMP2.PGDSEQUENCE = TMP1.PGDSEQUENCE;

                        -- Return original selection with corrected remainder value for report

                        select
                            TMP1.PLANNEDGIFTID,
                            TMP1.CONSTITUENTNAME,
                            TMP1.GIFTDATE,
                            TMP1.GIFTVEHICLE,
                            TMP1.DESIGNATIONNAME,
                            TMP1.DESIGNATIONVANITYNAME,
                            TMP1.GIFTAMOUNT,
                            round(TMP1.REMAINDERVALUE, 2),
                            TMP1.EXPECTEDMATURITYYEAR,
                            TMP1.STATUS,
                            TMP1.SUBTYPE,
                            TMP1.PLANTYPE,
                            TMP1.PGDESIGNATIONID
                        from @TMP1 TMP1;

                        return 0;
                    end