USP_DATALIST_FAFCOMMUNICATIONPERFORMANCE

FAF Communication Performance Data.

Parameters

Parameter Parameter Type Mode Description
@EVENTID uniqueidentifier IN Input parameter indicating the context ID for the data list.

Definition

Copy


CREATE procedure dbo.USP_DATALIST_FAFCOMMUNICATIONPERFORMANCE(@EVENTID uniqueidentifier)
as
    set nocount on;

  declare @TEMP_CommunicationChannels as table
  (
      CHANNELCODE int,
      CHANNEL nvarchar(20)
  )

  insert into @TEMP_CommunicationChannels (CHANNELCODE, CHANNEL)
  values (1, 'Email')
  insert into @TEMP_CommunicationChannels (CHANNELCODE, CHANNEL)
  values (4, 'Social media')
  insert into @TEMP_CommunicationChannels (CHANNELCODE, CHANNEL)
  values (0, 'Others')

  -- registration

  declare @TEMP_CommunicationChannelRegistrant as table
  (
      CHANNELCODE int,
      REGISTRANTCOUNT int,
      REGISTRATIONAMOUNT money
  )

  insert into @TEMP_CommunicationChannelRegistrant (CHANNELCODE, REGISTRANTCOUNT, REGISTRATIONAMOUNT)
  select
      TCC.CHANNELCODE,
      ISNULL(COUNT(RG.ID), 0),
      ISNULL(SUM(ER.[APPLIED AMOUNT]), 0)

  from @TEMP_CommunicationChannels TCC
  left join dbo.FAFEVENTCOMMUNICATIONCHANNEL FCC (nolock) on TCC.CHANNELCODE = FCC.CHANNELCODE and FCC.TYPECODE = 0
  left join dbo.REGISTRANT RG (nolock) on RG.ID = FCC.TYPEGUID and RG.EVENTID = @EVENTID
  left join dbo.UFN_REVENUE_EVENTREVENUEDETAILS(@EVENTID) ER on ER.CONSTITUENTID = RG.CONSTITUENTID and ER.TRANSACTIONTYPE = 'Event registration'
  group by TCC.CHANNELCODE

  -- get deleted registration 

  Update  tcr
      Set tcr.REGISTRATIONAMOUNT = tcr.REGISTRATIONAMOUNT + DELETEREGISTRATION.DeletedRegistrationAmount
      from @TEMP_CommunicationChannelRegistrant tcr
         inner join 
         (Select Sum(RGH.RegistrationAmount) as DeletedRegistrationAmount, 
            COUNT(RGH.ID) as DeletedRegistrationCount,
            FCC.ChannelCode as DeletedRegistrationChannel
             from dbo.FAFEVENTCOMMUNICATIONCHANNEL FCC (nolock) 
                  inner join dbo.REGISTRATIONDELETEHISTORY RGH (nolock) on RGH.REGISTRANTID = FCC.TYPEGUID 
                  left join dbo.UFN_REVENUE_EVENTREVENUEDETAILS(@EVENTID) ER 
                      on ER.CONSTITUENTID = RGH.CONSTITUENTID and ER.TRANSACTIONTYPE = 'Event registration'
             where RGH.EVENTID = @EVENTID
             group by FCC.ChannelCode) DELETEREGISTRATION
          on DELETEREGISTRATION.DeletedRegistrationChannel = tcr.CHANNELCODE
    where DELETEREGISTRATION.DeletedRegistrationChannel = tcr.CHANNELCODE

  -- donation

  declare @ISUNPAIDPLEDGES bit = 0
  declare @ISUNPAIDRECURRINGGIFTS bit = 0

  select
      @ISUNPAIDPLEDGES = ISUNPAIDPLEDGES,
      @ISUNPAIDRECURRINGGIFTS = ISUNPAIDRECURRINGGIFTS
  from dbo.FAFEVENTDONATIONOPTIONSCONFIG (nolock) where EVENTID = @EVENTID


  declare @TEMP_CommunicationChannelDonation as table
  (
      CHANNELCODE int,
      DONATIONCOUNT int,
      DONATIONAMOUNT money
  )

  insert into @TEMP_CommunicationChannelDonation (CHANNELCODE, DONATIONCOUNT, DONATIONAMOUNT)
  select
      TCC.CHANNELCODE,
      ISNULL(COUNT(ER.REVENUEID), 0),
      SUM
      (
          case
              when ER.TRANSACTIONTYPE = 'donation' then 
                  ER.ORIGINALAMOUNT
              when ER.TRANSACTIONTYPE = 'pledge' then
                  case
                      when @ISUNPAIDPLEDGES = 0 then
                          ER.PAIDAMOUNT
                      else
                          ER.ORIGINALAMOUNT
                  end
              when ER.TRANSACTIONTYPE = 'recurring gift' then
                  case
                      when @ISUNPAIDRECURRINGGIFTS = 0 then
                          ER.PAIDAMOUNT
                      else
                          ER.ORIGINALAMOUNT
                  end
          end
      )
  from @TEMP_CommunicationChannels TCC
  left join dbo.FAFEVENTCOMMUNICATIONCHANNEL FCC (nolock) on TCC.CHANNELCODE = FCC.CHANNELCODE and FCC.TYPECODE = 1
  left join
  (
      select
          REVENUEID,
          TRANSACTIONTYPE,
          case
              when TRANSACTIONTYPE = 'donation' or TRANSACTIONTYPE = 'pledge' then
                  AMOUNT
              when TRANSACTIONTYPE = 'recurring gift' then
                  case
                      when NUMBEROFINSTALLMENTS > 0 then
                          AMOUNT * NUMBEROFINSTALLMENTS
                      when NUMBEROFINSTALLMENTS = 0 then
                          ISNULL(dbo.UFN_RECURRINGGIFT_GETBALANCEASOF(REVENUEID, CURRENT_TIMESTAMP), 0)
                  end
          end as ORIGINALAMOUNT,
          case
              when TRANSACTIONTYPE = 'donation' then
                  AMOUNT
              when TRANSACTIONTYPE = 'pledge' then
                  ISNULL(dbo.UFN_PLEDGE_GETAMOUNTPAID(REVENUEID), 0)
              when TRANSACTIONTYPE = 'recurring gift' then
                  ISNULL(dbo.UFN_RECURRINGGIFT_GETBALANCEASOF(REVENUEID, CURRENT_TIMESTAMP), 0)
          end as PAIDAMOUNT
      from
      (
          select
              RVS.REVENUEID,
              case
                  when RV.TRANSACTIONTYPECODE = 0 and RVS.APPLICATIONCODE = 0 then 'donation'
                  when RV.TRANSACTIONTYPECODE = 1 and RVS.APPLICATIONCODE = 0 then 'pledge'
                  when RV.TRANSACTIONTYPECODE = 2 and RVS.APPLICATIONCODE = 0 then 'recurring gift'
              end as TRANSACTIONTYPE,
              RVS.AMOUNT,
              case
                  when RVSCH.NUMBEROFINSTALLMENTS = 0 and RVSCH.ENDDATE is not null then
                      case RVSCH.FREQUENCYCODE
                          when 0 then -- annually

                              DATEDIFF(MONTH, RVSCH.STARTDATE, RVSCH.ENDDATE) / 12 + 1
                          when 1 then -- semi-annual

                              DATEDIFF(MONTH, RVSCH.STARTDATE, RVSCH.ENDDATE) / 6 + 1
                          when 2 then -- quarterly

                              DATEDIFF(MONTH, RVSCH.STARTDATE, RVSCH.ENDDATE) / 3 + 1
                          when 3 then -- monthly

                              DATEDIFF(MONTH, RVSCH.STARTDATE, RVSCH.ENDDATE) + 1
                          when 5 then -- once

                              1
                          when 6 then -- bimonthly

                              DATEDIFF(MONTH, RVSCH.STARTDATE, RVSCH.ENDDATE) / 2 + 1
                          when 7 then -- semi-monthly

                              DATEDIFF(MONTH, RVSCH.STARTDATE, RVSCH.ENDDATE) * 2 + 1
                          when 8 then -- biweekly

                              DATEDIFF(WEEK, RVSCH.STARTDATE, RVSCH.ENDDATE) / 2 + 1
                          when 9 then -- weekly

                              DATEDIFF(WEEK, RVSCH.STARTDATE, RVSCH.ENDDATE) + 1
                      end
                  else ISNULL(RVSCH.NUMBEROFINSTALLMENTS, 0)
              end as NUMBEROFINSTALLMENTS

          from dbo.REVENUESPLIT RVS (nolock)
          inner join dbo.REVENUE RV (nolock) 
              on RV.ID = RVS.REVENUEID
              and 
              (
                  (RV.TRANSACTIONTYPECODE = 0 and RVS.APPLICATIONCODE = 0) or --Donation

                  (RV.TRANSACTIONTYPECODE = 1 and RVS.APPLICATIONCODE = 0) or --Pending pledge

                  (RV.TRANSACTIONTYPECODE = 2 and RVS.APPLICATIONCODE = 0)    --Pending recurring gift

              )
          inner join dbo.EVENT E (nolock) on E.APPEALID = RV.APPEALID
          left join dbo.REVENUESCHEDULE RVSCH (nolock) on RVSCH.ID = RV.ID

          where E.ID = @EVENTID
      ) FAFEVENTREVENUEAMOUNTDETAIL
  ) as ER on ER.REVENUEID = FCC.TYPEGUID


  group by TCC.CHANNELCODE


  select
      TCC.CHANNELCODE,
      TCC.CHANNEL,
      TCRG.REGISTRANTCOUNT,
      TCRG.REGISTRATIONAMOUNT,
      TCRV.DONATIONCOUNT,
      ISNULL(TCRV.DONATIONAMOUNT, 0) as DONATIONAMOUNT
  from @TEMP_CommunicationChannels TCC
  inner join @TEMP_CommunicationChannelRegistrant TCRG on TCRG.CHANNELCODE = TCC.CHANNELCODE
  inner join @TEMP_CommunicationChannelDonation TCRV on TCRV.CHANNELCODE = TCC.CHANNELCODE