USP_DATALIST_PROSPECT_CONSTITUENTGROUPPLANNEDGIFTS

List of planned gifts owned by a constituent group and its members.

Parameters

Parameter Parameter Type Mode Description
@PROSPECTID uniqueidentifier IN Input parameter indicating the context ID for the data list.
@CURRENTAPPUSERID uniqueidentifier IN Input parameter indicating the ID of the current user.
@SITEFILTERMODE tinyint IN Sites
@SITESSELECTED xml IN
@SECURITYFEATUREID uniqueidentifier IN Input parameter indicating the ID of the feature to use for site security checking.
@SECURITYFEATURETYPE tinyint IN Input parameter indicating the type of the feature to use for site security checking.
@CURRENCYCODE tinyint IN Currency
@CAMPAIGNFILTERMODE tinyint IN Campaigns
@CAMPAIGNSSELECTED xml IN

Definition

Copy


CREATE procedure dbo.USP_DATALIST_PROSPECT_CONSTITUENTGROUPPLANNEDGIFTS
(
  @PROSPECTID uniqueidentifier,
  @CURRENTAPPUSERID uniqueidentifier,
  @SITEFILTERMODE tinyint = 0,
  @SITESSELECTED xml = null,
  @SECURITYFEATUREID uniqueidentifier = null,
  @SECURITYFEATURETYPE tinyint = null,
  @CURRENCYCODE tinyint = 2,
  @CAMPAIGNFILTERMODE tinyint = 0,
  @CAMPAIGNSSELECTED xml = null
)
as
begin

  set nocount on;

  -------------------------------------

  --CAMPAIGNSSELECTED

  -------------------------------------

  declare @CAMPAIGNFILTERTABLE table
  (
    ID uniqueidentifier
  );

  if @CAMPAIGNFILTERMODE != 0
  begin
    insert into
      @CAMPAIGNFILTERTABLE
    select
      T.c.value('(ID)[1]','uniqueidentifier')
    from
      @CAMPAIGNSSELECTED.nodes('/CAMPAIGNSSELECTED/ITEM') T(c);
  end

  -------------------------------------

  --MULTICURRENCY

  -------------------------------------

  declare @MULTICURRENCYENABLED bit = dbo.UFN_CONDITIONSETTING_EVALUATEEXISTSCONDITION('Multicurrency');

  if @MULTICURRENCYENABLED = 0
    set @CURRENCYCODE = 1;

  declare @CURRENCYID uniqueidentifier;

  if @CURRENCYCODE = 1
    set @CURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();

  if @CURRENCYCODE = 3
  begin
    set @CURRENCYID = dbo.UFN_APPUSER_GETBASECURRENCY(@CURRENTAPPUSERID);

    if @CURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY()
    begin
      set @CURRENCYCODE = 1
    end
  end

  -------------------------------------

  --GET PROSPECTIDS

  -------------------------------------

  declare @PROSPECTIDS table
  (
    ID uniqueidentifier,
    NAME nvarchar(300),
    PLANNEDGIFTID uniqueidentifier
  );

  insert into
    @PROSPECTIDS
  select distinct
    PG.CONSTITUENTID as ID,
    NF.NAME,
    PG.ID as PLANNEDGIFTID
  from
    dbo.PLANNEDGIFT PG
  outer apply
    dbo.UFN_CONSTITUENT_DISPLAYNAME(PG.CONSTITUENTID) NF
  where
    PG.CONSTITUENTID in
    (
      select
        @PROSPECTID

      union all

      select
        ID
      from
        dbo.UFN_GROUP_GETCURRENTMEMBERSNOPERMISSIONCHECK(@PROSPECTID)
    )

  union all

  select distinct
    RELATEDCONSTITUENT.ID as ID,
    NF.NAME,
    PG.ID as PLANNEDGIFTID
  from
    dbo.PLANNEDGIFT PG
  left join
    dbo.PLANNEDGIFTRELATIONSHIP on PLANNEDGIFTRELATIONSHIP.PLANNEDGIFTID = PG.ID
  left join
    dbo.RELATIONSHIP on RELATIONSHIP.ID = PLANNEDGIFTRELATIONSHIP.RELATIONSHIPID
  left join
    dbo.CONSTITUENT RELATEDCONSTITUENT on
      (RELATEDCONSTITUENT.ID = RELATIONSHIP.RECIPROCALCONSTITUENTID and RELATIONSHIP.RELATIONSHIPCONSTITUENTID = @PROSPECTID) or
      (RELATEDCONSTITUENT.ID = RELATIONSHIP.RELATIONSHIPCONSTITUENTID and RELATIONSHIP.RECIPROCALCONSTITUENTID = @PROSPECTID)
  outer apply
    dbo.UFN_CONSTITUENT_DISPLAYNAME(RELATEDCONSTITUENT.ID) NF;

  -------------------------------------

  --MAIN WORK

  -------------------------------------

  declare @DATALISTID uniqueidentifier = '5a514950-deef-48c7-8e86-47b67cfcb3c1';

  declare @PLANNEDGIFTINFO table
  (
    PROSPECTID uniqueidentifier,
    PROSPECTNAME nvarchar(400),
    ID uniqueidentifier,
    VEHICLE nvarchar(100),
    DATE date,
    AMOUNT money,
    STATUS nvarchar(100),
    ISANONYMOUS bit,
    ISREVOCABLE bit,
    GROUPORPRIMARYSORT nvarchar(300),
    HASPERMISSIONS bit,
    EXPECTEDMATURITY smallint,
    SITES nvarchar(400),
    DISPLAYCURRENCY uniqueidentifier,
    BALANCE money,
    PAYMENTS money,
    PARENTID uniqueidentifier,
    VIEWFORMID uniqueidentifier,
    CAMPAIGNS nvarchar(max)
  );

  insert into
    @PLANNEDGIFTINFO
  select
    PROSPECT.ID as PROSPECTID,
    PROSPECT.NAME as PROSPECTNAME,
    PG.ID,
    PG.VEHICLE,
    PG.GIFTDATE as [DATE],
    dbo.UFN_PLANNEDGIFTREVENUE_GETTOTALAMOUNT(PG.ID, @CURRENCYCODE, @CURRENCYID) as AMOUNT,
    PG.[STATUS],
    PG.ISANONYMOUS,
    PG.ISREVOCABLE,
    case
      when PG.CONSTITUENTID = @PROSPECTID
        then '0'
      when (select ISPRIMARY from dbo.GROUPMEMBER where GROUPID = @PROSPECTID and MEMBERID = PG.CONSTITUENTID) = 1
        then '1'
      else
        '2' + PROSPECT.NAME + ' ' + cast(PROSPECT.ID as nvarchar(36))
    end as GROUPORPRIMARYSORT,
    case
      when dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1
        then 1
      else 
        dbo.UFN_SECURITY_APPUSER_GRANTED_DATALIST_FORCONSTIT(@CURRENTAPPUSERID, @DATALISTID, PROSPECT.ID)
    end as HASPERMISSIONS,
    PG.EXPECTEDMATURITY,
    dbo.UFN_PLANNEDGIFT_GETSITELIST(PG.ID) as SITES,
    dbo.UFN_PLANNEDGIFTREVENUE_GETCURRENCYIDFROMCODE(PG.ID, @CURRENCYCODE, @CURRENCYID) as DISPLAYCURRENCY,
    dbo.UFN_PLANNEDGIFT_GETBALANCE(PG.ID, @CURRENCYID, @CURRENCYCODE) as BALANCE,
    dbo.UFN_PLANNEDGIFT_GETPAYMENTS(PG.ID, @CURRENCYID, @CURRENCYCODE) as PAYMENTS,
    null as PARENTID,
    'C1FBFDA5-2EF8-4211-8B9A-B1E30689D08C' as VIEWFORMID,
    (
      select
        dbo.UDA_BUILDLIST(distinct CAMPAIGN.NAME)
      from
        dbo.PLANNEDGIFTDESIGNATION
      inner join
        dbo.PLANNEDGIFTDESIGNATIONCAMPAIGN on PLANNEDGIFTDESIGNATIONCAMPAIGN.PLANNEDGIFTDESIGNATIONID = PLANNEDGIFTDESIGNATION.ID
      inner join
        dbo.CAMPAIGN on CAMPAIGN.ID = PLANNEDGIFTDESIGNATIONCAMPAIGN.CAMPAIGNID
      where
        PLANNEDGIFTDESIGNATION.PLANNEDGIFTID = PG.ID
    ) as CAMPAIGNS
  from
    dbo.PLANNEDGIFT as PG
  inner join
    @PROSPECTIDS as PROSPECT on PROSPECT.ID = PG.CONSTITUENTID and PROSPECT.PLANNEDGIFTID = PG.ID
  where
  (
    select
      count(*
    from
      dbo.UFN_SITEID_MAPFROM_PLANNEDGIFTID(PG.ID) as PLANNEDGIFTSITE 
    where
      (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[PLANNEDGIFTSITE].[SITEID] or (SITEID is null and [PLANNEDGIFTSITE].[SITEID] is null)))
  ) > 0
  and 
  (
    @SITEFILTERMODE = 0 or 
    PG.ID in
    (
      select
        PLANNEDGIFTSITE.PLANNEDGIFTID
      from
        dbo.UFN_SITE_BUILDDATALISTSITEFILTER (@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED) as SITEFILTER
      inner join
        dbo.PLANNEDGIFTSITE on PLANNEDGIFTSITE.SITEID = SITEFILTER.SITEID
    )
  )
  and
  (
    @CAMPAIGNFILTERMODE = 0 or
    exists
    (
    select
      1
    from
      dbo.PLANNEDGIFTDESIGNATION
    inner join
      dbo.PLANNEDGIFTDESIGNATIONCAMPAIGN on PLANNEDGIFTDESIGNATIONCAMPAIGN.PLANNEDGIFTDESIGNATIONID = PLANNEDGIFTDESIGNATION.ID
    inner join
      @CAMPAIGNFILTERTABLE as CAMPAIGNFILTER on CAMPAIGNFILTER.ID = PLANNEDGIFTDESIGNATIONCAMPAIGN.CAMPAIGNID
    where
      PLANNEDGIFTDESIGNATION.PLANNEDGIFTID = PG.ID
    )
  )

  union all

  --get all planned gift additions

  select
    PROSPECT.ID as PROSPECTID,
    PROSPECT.NAME as PROSPECTNAME,
    PGA.ID,
    PG.VEHICLE,
    PGA.GIFTDATE as [DATE],
    dbo.UFN_PLANNEDGIFTADDITIONREVENUE_GETTOTALAMOUNT(PGA.ID, @CURRENCYCODE, @CURRENCYID) as AMOUNT,
    PG.[STATUS],
    PG.ISANONYMOUS,
    PG.ISREVOCABLE,
    case
      when PG.CONSTITUENTID = @PROSPECTID
        then '0'
      when (select ISPRIMARY from dbo.GROUPMEMBER where GROUPID = @PROSPECTID and MEMBERID = PG.CONSTITUENTID) = 1
        then '1'
      else
        '2' + PROSPECT.NAME + ' ' + cast(PROSPECT.ID as nvarchar(36))
    end as GROUPORPRIMARYSORT,
    case
      when dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1
        then 1
      else 
        dbo.UFN_SECURITY_APPUSER_GRANTED_DATALIST_FORCONSTIT(@CURRENTAPPUSERID, @DATALISTID, PROSPECT.ID)
    end as HASPERMISSIONS,
    PG.EXPECTEDMATURITY,
    dbo.UFN_PLANNEDGIFT_GETSITELIST(PG.ID) as SITES,
    dbo.UFN_PLANNEDGIFTADDITIONREVENUE_GETCURRENCYIDFROMCODE(PGA.ID, @CURRENCYCODE, @CURRENCYID) as DISPLAYCURRENCY,
    dbo.UFN_PLANNEDGIFTADDITION_GETBALANCE(PGA.ID, @CURRENCYID, @CURRENCYCODE) as BALANCE,
    dbo.UFN_PLANNEDGIFTADDITION_GETPAYMENTS(PGA.ID, @CURRENCYID, @CURRENCYCODE) as PAYMENTS,
    PG.ID PARENTID,
    'd8e2f2b5-4c4f-46de-a2f7-39c595dd2892' as VIEWFORMID,
    (
      select dbo.UDA_BUILDLIST(distinct CAMPAIGN.NAME)
      from dbo.PLANNEDGIFTADDITIONDESIGNATION
      inner join dbo.PLANNEDGIFTADDITIONDESIGNATIONCAMPAIGN on PLANNEDGIFTADDITIONDESIGNATION.ID = PLANNEDGIFTADDITIONDESIGNATIONCAMPAIGN.PLANNEDGIFTADDITIONDESIGNATIONID
      inner join dbo.CAMPAIGN on CAMPAIGN.ID = PLANNEDGIFTADDITIONDESIGNATIONCAMPAIGN.CAMPAIGNID
      where PLANNEDGIFTADDITIONDESIGNATION.PLANNEDGIFTADDITIONID = PGA.ID
    ) as CAMPAIGNS
  from
    dbo.PLANNEDGIFT PG
  inner join
    @PROSPECTIDS as PROSPECT on PROSPECT.ID = PG.CONSTITUENTID and PROSPECT.PLANNEDGIFTID = PG.ID
  inner join
    dbo.PLANNEDGIFTADDITION as PGA on PG.ID = PGA.PLANNEDGIFTID
  where
  (
    select
      count(*
    from
      dbo.UFN_SITEID_MAPFROM_PLANNEDGIFTID(PG.ID) as PLANNEDGIFTSITE
    where
      (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[PLANNEDGIFTSITE].[SITEID] or (SITEID is null and [PLANNEDGIFTSITE].[SITEID] is null)))
  ) > 0
  and 
  (
    @SITEFILTERMODE = 0 or 
    PG.ID in
    (
      select
        PLANNEDGIFTSITE.PLANNEDGIFTID
      from
        dbo.UFN_SITE_BUILDDATALISTSITEFILTER(@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED) as SITEFILTER
      inner join
        dbo.PLANNEDGIFTSITE on PLANNEDGIFTSITE.SITEID = SITEFILTER.SITEID
    )
  )
  and
  (
    @CAMPAIGNFILTERMODE = 0 or
    exists
    (
      select
        1
      from
        dbo.PLANNEDGIFTADDITIONDESIGNATION
      inner join
        dbo.PLANNEDGIFTADDITIONDESIGNATIONCAMPAIGN on PLANNEDGIFTADDITIONDESIGNATIONCAMPAIGN.PLANNEDGIFTADDITIONDESIGNATIONID = PLANNEDGIFTADDITIONDESIGNATION.ID
      inner join
        @CAMPAIGNFILTERTABLE as CAMPAIGNFILTER on CAMPAIGNFILTER.ID = PLANNEDGIFTADDITIONDESIGNATIONCAMPAIGN.CAMPAIGNID 
      where
        PLANNEDGIFTADDITIONDESIGNATION.PLANNEDGIFTADDITIONID = PGA.ID
    )
  );


  --TOP ROLLUP LEVEL

  select
    PGINFO.PROSPECTID,
    PGINFO.PROSPECTNAME,
    PGINFO.ID,
    PGINFO.VEHICLE,
    case
      when PGCHILDNODEINFO.PARENTID is null
        then PGINFO.[DATE]
      else
        null
    end as [DATE],
    case
      when coalesce(PGCHILDNODEINFO.CURRENCYCOUNT, 1) = 1 and coalesce((select top 1 DISPLAYCURRENCY from @PLANNEDGIFTINFO PGADDITIONINFO where PGINFO.ID = PGADDITIONINFO.PARENTID),PGINFO.DISPLAYCURRENCY) = PGINFO.DISPLAYCURRENCY
        then
          case 
            when PGINFO.AMOUNT is not null and PGCHILDNODEINFO.TOTALAMOUNT is not null
              then PGINFO.AMOUNT + PGCHILDNODEINFO.TOTALAMOUNT
            when PGINFO.AMOUNT is not null and PGCHILDNODEINFO.TOTALAMOUNT is null
              then PGINFO.AMOUNT
            when PGINFO.AMOUNT is null and PGCHILDNODEINFO.TOTALAMOUNT is not null
              then PGCHILDNODEINFO.TOTALAMOUNT
            else
              null
          end
    end as AMOUNT,
    PGINFO.[STATUS],
    PGINFO.ISANONYMOUS,
    PGINFO.ISREVOCABLE,
    PGINFO.GROUPORPRIMARYSORT,
    PGINFO.HASPERMISSIONS,
    PGINFO.EXPECTEDMATURITY,
    PGINFO.SITES,
    PGINFO.DISPLAYCURRENCY,
    case
      when coalesce(PGCHILDNODEINFO.CURRENCYCOUNT, 1) = 1 and coalesce((select top 1 DISPLAYCURRENCY from @PLANNEDGIFTINFO PGADDITIONINFO where PGINFO.ID = PGADDITIONINFO.PARENTID),PGINFO.DISPLAYCURRENCY) = PGINFO.DISPLAYCURRENCY
        then
          case
            when PGINFO.BALANCE is not null and PGCHILDNODEINFO.TOTALBALANCE is not null
              then PGINFO.BALANCE + PGCHILDNODEINFO.TOTALBALANCE
            when PGINFO.BALANCE is not null and PGCHILDNODEINFO.TOTALBALANCE is null
              then PGINFO.BALANCE
            when PGINFO.BALANCE is null and PGCHILDNODEINFO.TOTALBALANCE is not null
              then PGCHILDNODEINFO.TOTALBALANCE
            else
              null
          end
    end as BALANCE,
    case
      when coalesce(PGCHILDNODEINFO.CURRENCYCOUNT, 1) = 1 and coalesce((select top 1 DISPLAYCURRENCY from @PLANNEDGIFTINFO PGADDITIONINFO where PGINFO.ID = PGADDITIONINFO.PARENTID),PGINFO.DISPLAYCURRENCY) = PGINFO.DISPLAYCURRENCY
        then 
          case
            when PGINFO.PAYMENTS is not null and PGCHILDNODEINFO.TOTALPAYMENTS is not null
              then PGINFO.PAYMENTS + PGCHILDNODEINFO.TOTALPAYMENTS
            when PGINFO.PAYMENTS is not null and PGCHILDNODEINFO.TOTALPAYMENTS is null
              then PGINFO.PAYMENTS
            when PGINFO.PAYMENTS is null and PGCHILDNODEINFO.TOTALPAYMENTS is not null
              then PGCHILDNODEINFO.TOTALPAYMENTS
            else
              null
          end
    end as PAYMENTS,
    null as PARENTID,
    PGINFO.ID as IDFORTREE,
    PGINFO.VIEWFORMID,
    0 as ISADDITION,
    PGINFO.CAMPAIGNS
  from
    @PLANNEDGIFTINFO as PGINFO
  left join
  (
    select 
      PGADDITIONINFO.PARENTID,
      count(distinct PGADDITIONINFO.DISPLAYCURRENCY) as CURRENCYCOUNT,
      sum(PGADDITIONINFO.AMOUNT) as TOTALAMOUNT,
      sum(PGADDITIONINFO.BALANCE) as TOTALBALANCE,
      sum(PGADDITIONINFO.PAYMENTS) as TOTALPAYMENTS
    from
      @PLANNEDGIFTINFO as PGADDITIONINFO 
    group by
      PGADDITIONINFO.PARENTID
  ) PGCHILDNODEINFO on PGCHILDNODEINFO.PARENTID = PGINFO.ID
  where 
    PGINFO.PARENTID is null

  union all

  --PLANNED GIFTS

  select
    PROSPECTID,
    'Original gift' as PROSPECTNAME,
    ID,
    VEHICLE,
    [DATE],
    AMOUNT,
    [STATUS],
    ISANONYMOUS,
    ISREVOCABLE,
    GROUPORPRIMARYSORT,
    HASPERMISSIONS,
    EXPECTEDMATURITY,
    SITES,
    DISPLAYCURRENCY,
    BALANCE,
    PAYMENTS,
    ID as PARENTID,
    null as IDFORTREE,
    VIEWFORMID,
    0 as ISADDITION,
    CAMPAIGNS
  from
    @PLANNEDGIFTINFO PGINFO
  where 
    PARENTID is null and
    ID in (select PGINFOSUB.PARENTID from @PLANNEDGIFTINFO as PGINFOSUB)

  union all

  --PLANNED GIFT ADDITIONS

  select
    PROSPECTID,
    'Addition' as PROSPECTNAME,
    ID,
    VEHICLE,
    [DATE],
    AMOUNT,
    [STATUS],
    ISANONYMOUS,
    ISREVOCABLE,
    GROUPORPRIMARYSORT,
    HASPERMISSIONS,
    EXPECTEDMATURITY,
    SITES,
    DISPLAYCURRENCY,
    BALANCE,
    PAYMENTS,
    PARENTID,
    null as IDFORTREE,
    VIEWFORMID,
    1 as ISADDITION,
    CAMPAIGNS
  from
    @PLANNEDGIFTINFO PGINFO
  where 
    PARENTID is not null
  order by
    PROSPECTNAME desc,
    GROUPORPRIMARYSORT,
    [DATE] desc;

end