USP_FAFDONATION_CALCULATE

Parameters

Parameter Parameter Type Mode Description
@NUMBERPROCESSED int INOUT

Definition

Copy


CREATE procedure dbo.USP_FAFDONATION_CALCULATE
(  
    @NUMBERPROCESSED integer = 0 output  
)  
as
begin
    -- do work 1


  -- get active events

  DECLARE @ACTIVEEVENTS TABLE
  (
       ID       int IDENTITY(1,1),
       EVENTID  uniqueidentifier
  )

  insert into @ACTIVEEVENTS(EVENTID)
    select e.ID from dbo.[EVENT] e 
       inner join dbo.EVENTEXTENSION et
          on e.ID = et.EVENTID
    where ISACTIVE =1

  declare @NUMEVENTS   int
  Select @NUMEVENTS = max(ID) from @ACTIVEEVENTS

  -- get max sequence number of donation data

  declare @curBatchNumber int
  set @curBatchNumber = (select top 1 BatchNumber from dbo.FAFDonation)

  if isnumeric(@curBatchNumber) = 0
     begin
        set @curBatchNumber = 0
     end

  -- remove old data

  truncate table FAFDonation

  declare @CHANGEAGENTID uniqueidentifier,
         @CURRENTDATE datetime;

 if @CHANGEAGENTID is null  
    exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output

 set @CURRENTDATE = getdate()

 -- insert donation data

 declare @count  int
 set @count = 1
 declare @eventID  uniqueidentifier

-- start transaction


while @count <= @NUMEVENTS
begin 
    Select @eventID = eventid from @ACTIVEEVENTS where id = @count

    begin try
         insert into dbo.FAFDONATION
         (
            REVENUEID,
            CONSTITUENTID,
            EVENTID,
            FIRSTNAME,
            LASTNAME,
            [ADDRESS],
            ADDRESSTYPE,
            CITY,
            [STATE],
            ZIP,
            COUNTRY,
            EMAIL,
            PHONENUMBER,
            PHONETYPE,
            TITLE,
            SUFFIX,
            AMOUNT,
            ISANONYMOUSGIFT,
            DONOTCALL,
            DONOTMAIL,
            DONOTEMAIL,
            CREDITCARDTYPE,
            CHECKNUMBER,
            RECEIPTNUMBER,
            CHECKDATE,
            GIFTDATE,
            INBOUNDCHANNEL,
            SOLICITATIONCHANNNEL,
            ISONLINEGIFT,
            TRANSACTIONTYPE,
            PAYMENTMETHOD,
            POSTSTATUS,
            TRIBUTEE,
            TRIBUTEMESSAGE,
            TRIBUTETYPE, 
            MATCHINGGIFTCLAIMED,
            MATCHINGGIFTPAID,
            MATCHINGGIFTORGANIZATION,
            RECOGNITION,
            ISPREVIOUSDONOR,
            REGISTRANTROLE,
            GROUPNAME,
            GROUPTYPE,
            COMPANYNAME,
            COMPANYADDRESS,
            COMPANYADDRESSTYPE,
            COMPANYCITY,
            COMPANYSTATE,
            COMPANYZIP,
            COMPANYPHONE,
            COMPANYEMAIL,
            COMPANYWEBADDRESS,
            ISCOMPANYDONATION,
            REVENUEDATECHANGED,
            REVENUECHANGEDBY,
            DONORLOOKUPID,
            REVENUELOOKUPID,
            RECOGNITIONID,
            BATCHNUMBER,
            ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
        )

        select distinct
         fr.ID as RevenueID,
         c.ID as ConstituentID,
         e.ID as EventID,

         FirstName =
            case c.ISORGANIZATION
               when 0 then isnull(c.FIRSTNAME, '')
               else ''
            end,
         LastName =
            case c.ISORGANIZATION
               when 0 then isnull(c.KEYNAME,'')
               else ''
            end,
         [Address] =
            case c.ISORGANIZATION
               when 0 then isnull(a.ADDRESSBLOCK,'')
               else ''
            end,
         AddressType =
            case c.ISORGANIZATION
               when 0 then isnull(atc.[DESCRIPTION], '')
               else ''
            end,
         City =
             case c.ISORGANIZATION
               when 0 then isnull(a.[CITY], '')
               else ''
             end,
         [STATE] =
             case c.ISORGANIZATION
               when 0 then isnull(st.ABBREVIATION, ''
        else ''
             end,
         ZIP =
             case c.ISORGANIZATION
               when 0 then isnull(a.POSTCODE, '')
               else ''
             end,
          Country =    
             case c.ISORGANIZATION
               when 0 then isnull(ct.DESCRIPTION, '')
               else ''
             end,
          Email =
             case c.ISORGANIZATION
               when 0 then isnull(ea.EMAILADDRESS, '')
               else ''
             end,
         PhoneNumber =
             case c.ISORGANIZATION
               when 0 then isnull(p.NUMBER, '')    
               else ''
             end,
         isnull(ptc.[DESCRIPTION], '') as PhoneType,   
         isnull(tc.[DESCRIPTION], '') as Title,
         isnull(sc.[DESCRIPTION], '') as Suffix, 
         rs.AMOUNT as Amount,
         R_EXT.GIVENANONYMOUSLY as AnonymousGift,
         isnull(p.DONOTCALL, 0) As DoNotCall, 
         isnull(a.DONOTMAIL, 0) As DoNotMail, 
         isnull(ea.DONOTEMAIL, 0) As DoNotEmail,
         isnull(ctp.[DESCRIPTION], '') As CreditcardType,
         isnull(ckpmd.CHECKNUMBER, '') As CheckNumber,
         isnull(rpt.RECEIPTNUMBER, ''),
         CheckDate =  
             case isdate(ckpmd.CHECKDATE) 
               when 1 then ckpmd.CHECKDATE  
               else null  
             end,    
         fr.DATEADDED    As GiftDate,
         isnull(cc.[DESCRIPTION], '') as InboundChannel,
         isnull(fccl.Channel, 'Others') as SOLICITATIONCHANNNEL,
         IsOnlineGift = 
             case rp.PAYMENTMETHODCODE
               when 2 Then 1
               else 0
             end,
         isnull(fr.[TYPE], '') as Transactiontype, 
         isnull(rp.PAYMENTMETHOD, '') as PaymentMethod,
         PostStatus = isnull(fr.PostStatus, ''),
         isnull(tet.TRIBUTEEFIRSTNAME + ' ' + tet.TRIBUTEELASTNAME, '') as Tributee,
         isnull(t.TRIBUTETEXT, '') as TributeMessage,
         isnull(ttc.DESCRIPTION, '') as TributeType,
         isnull(MatchingGift.ClaimAmount, 0) as  MatchingGiftClaimed,
         isnull(MatchingGift.PaidAmount, 0) as MatchingGiftPaid,
         isnull(MatchingGift.CompanyName, '') as MatchingGiftOrganization,
         isnull(C3.NAME, '') as Recognition, 
         0 as ISPREVIOUSDONOR,
         isnull(Registrant.[Role], 'Individual') as [RegistrantRole],
         isnull(Registrant.Groupname,'') As GroupName,
         isnull(Registrant.GroupType, '') As GroupType,
         CompanyName =
            case c.ISORGANIZATION
               when 1 then isnull(c.KEYNAME, '')
               else ''
            end,
         CompanyAddress =
             case c.ISORGANIZATION
               when 1 then isnull(a.ADDRESSBLOCK, '')
               else ''
            end,
         CompanyAddressType =
             case c.ISORGANIZATION
               when 1 then isnull(atc.[DESCRIPTION], '')
               else ''
            end,    
         CompanyCity =
             case c.ISORGANIZATION
               when 1 then isnull(a.[CITY], '')
               else ''
             end,
         COMPANYSTATE =
             case c.ISORGANIZATION
               when 1 then isnull(st.ABBREVIATION, '')
               else ''
             end,
         COMPANYZIP =
             case c.ISORGANIZATION
               when 1 then isnull(a.POSTCODE, '')
               else ''
             end,  

         COMPANYPhoneNumber =
             case c.ISORGANIZATION
               when 1 then isnull(p.NUMBER, '')     
               else ''
             end,

         CompanyEmail =
             case c.ISORGANIZATION
               when 1 then isnull(ea.EMAILADDRESS, '')
               else ''
             end
         isnull(c.WEBADDRESS, '') As Companywebsite,

         IsCompanyDonation =
            case c.ISORGANIZATION
              when 1 Then 1
              else 0
            end,
          fr.DateChanged as RevenueChangedDate,
          ca.UserName as RevenueChangedBy,
          isnull(c.LOOKUPID, '') as DonorLookupID, 
          isnull(fr.CALCULATEDUSERDEFINEDID, '') as RevenueLookUpID,
          C3.ID,
          @curBatchNumber + 1,
          @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE  
      from dbo.FINANCIALTRANSACTION fr (nolock)      
        inner join dbo.FINANCIALTRANSACTIONLINEITEM FTLI (nolock)  
          on FTLI.FINANCIALTRANSACTIONID = fr.ID 
          inner join dbo.REVENUESPLIT_EXT RS_EXT (nolock)  
            on RS_EXT.ID = FTLI.ID 
        inner join dbo.REVENUE_EXT R_EXT (nolock)  
          on fr.ID = R_EXT.ID  
        inner Join dbo.[CONSTITUENT] c (nolock)  
              on fr.CONSTITUENTID = c.id
        left join dbo.CHANGEAGENT ca (nolock)  
          on fr.ChangedByID = ca.ID
        left outer join dbo.TITLECODE tc (nolock)  
              on c.TITLECODEID = tc.ID 
        left outer join dbo.SUFFIXCODE sc (nolock)  
              on c.SUFFIXCODEID = sC.ID
        left Join dbo.[ADDRESS] a (nolock)  
            on c.ID = a.CONSTITUENTID and a.ISPRIMARY = 1
        left outer join dbo.[STATE] st (nolock)  
            on a.STATEID = st.ID   
        left Join dbo.ADDRESSTYPECODE atc    (nolock)  
           on atc.ID = a.ADDRESSTYPECODEID
          left join dbo.EMAILADDRESS ea (nolock)  
             on ea.CONSTITUENTID = c.ID and ea.ISPRIMARY = 1
          left join dbo.phone p (nolock)  
                 on p.CONSTITUENTID = c.ID and p.ISPRIMARY = 1
          left join dbo.PHONETYPECODE ptc (nolock)  
                 on p.PHONETYPECODEID = ptc.ID 
          left join dbo.COUNTRY ct (nolock)  
                 on ct.ID = a.COUNTRYID 
          left Join dbo.[REVENUETRIBUTE] rt (nolock)  
                 on fr.ID = rt.REVENUEID
        left join dbo.[TRIBUTEEXTENSION] tet (nolock)  
             on rt.TRIBUTEID = tet.TRIBUTEID
          left join dbo.TRIBUTE t (nolock)  
                 on rt.TRIBUTEID = t.ID
        left join dbo.TRIBUTETYPECODE ttc (nolock) 
             on ttc.ID = t.TRIBUTETYPECODEID
          left join dbo.REVENUEPAYMENTMETHOD rp (nolock)  
            on fr.ID = rp.REVENUEID
        left join dbo.CHECKPAYMENTMETHODDETAIL ckpmd (nolock)  
            on ckpmd.ID = rp.ID
        left join dbo.CREDITCARDPAYMENTMETHODDETAIL cpmd (nolock)  
            on rp.ID = cpmd.ID
        left join dbo.CREDITTYPECODE ctp (nolock)  
            on ctp.ID = cpmd.CREDITTYPECODEID
        inner join dbo.REVENUESPLIT rs (nolock)  
            on fr.ID = rs.REVENUEID 
        left join dbo.REVENUERECOGNITION rr (nolock)  
            on rs.ID = rr.REVENUESPLITID 
        left join dbo.CONSTITUENT C3 (nolock)    -- recognition

            on rr.CONSTITUENTID = C3.Id 
        left join dbo.REVENUERECEIPT rpt (nolock)  
            on rpt.REVENUEID = fr.ID
        left Join  -- matching gift

           (   -- recurring gift

               select sum(r2.Amount) as ClaimAmount,  
                   sum(ip.AMOUNT) as PaidAmount,
                   rga.SOURCEREVENUEID as SourceRevenueID,
                   c.KEYNAME As CompanyName
              from dbo.REVENUE r (nolock)  
                inner join dbo.REVENUESPLIT rs (nolock)  on r.ID = rs.REVENUEID
                inner join dbo.RECURRINGGIFTACTIVITY rga (nolock) on rga.PAYMENTREVENUEID = rs.ID
                inner join dbo.REVENUEMATCHINGGIFT rm (nolock) on rm.MGSOURCEREVENUEID = r.ID
                inner join dbo.REVENUE r2 (nolock) on r2.ID = rm.ID
                inner join dbo.INSTALLMENT il (nolock) on il.REVENUEID = r2.ID
                inner join dbo.INSTALLMENTPAYMENT ip (nolock) on il.ID = ip.INSTALLMENTID
                inner join CONSTITUENT c (nolock) on c.ID = r2.CONSTITUENTID and c.ISORGANIZATION=1
              where r.TRANSACTIONTYPE = 'Payment'
              group by rga.SOURCEREVENUEID, c.KEYNAME

              union

              -- single gift

              select sum(r2.Amount) as ClaimAmount,  
           sum(ip.AMOUNT) as PaidAmount,
                   rm.MGSOURCEREVENUEID As SourceRevenueID,
                   c.KEYNAME As CompanyName
              from dbo.REVENUE r (nolock)
                inner join dbo.REVENUEMATCHINGGIFT rm (nolock) on rm.MGSOURCEREVENUEID = r.ID
                inner join dbo.REVENUE r2 (nolock) on r2.ID = rm.ID
                inner join dbo.INSTALLMENT il (nolock) on il.REVENUEID = r2.ID
                inner join dbo.INSTALLMENTPAYMENT ip (nolock) on il.ID = ip.INSTALLMENTID
                inner join CONSTITUENT c (nolock) on c.ID = r2.CONSTITUENTID and c.ISORGANIZATION=1
                where r.TRANSACTIONTYPE = 'Payment'
              group by rm.MGSOURCEREVENUEID, c.KEYNAME

              union
              -- pledge

               select  
                      sum(fr2.TRANSACTIONAMOUNT) as ClaimAmount,
                      sum(ip2.AMOUNT) as PaidAmount,
                      ip.PLEDGEID As SourceRevenueID,
                      c.KEYNAME As CompanyName
                from 
                     -- get payment revenueid 

                     dbo.INSTALLMENTPAYMENT ip (nolock)
                     inner join dbo.FINANCIALTRANSACTIONLINEITEM frl (nolock) on frl.ID = ip.PAYMENTID  
                     inner join dbo.REVENUESPLIT_EXT rst (nolock) on frl.ID = rst.ID  
                     inner join dbo.FINANCIALTRANSACTION fr (nolock) on frl.FINANCIALTRANSACTIONID = fr.ID  
                     inner join dbo.REVENUE_EXT (nolock) on fr.ID = REVENUE_EXT.ID
                     -- get matching gift revenueid

                     inner join dbo.REVENUEMATCHINGGIFT rm (nolock) on rm.MGSOURCEREVENUEID = fr.ID
                     inner join dbo.FINANCIALTRANSACTION fr2 (nolock) on fr2.ID = rm.ID
                     inner join CONSTITUENT c (nolock) on c.ID = fr2.CONSTITUENTID and c.ISORGANIZATION=1
                     -- get matching gift payment

                     inner join dbo.INSTALLMENT il (nolock) on il.REVENUEID = fr2.ID
                     inner join dbo.INSTALLMENTPAYMENT ip2 (nolock) on il.ID = ip2.INSTALLMENTID
                     inner join dbo.Revenue r (nolock) on r.ID = ip.PledgeID and r.TransActionType ='Pledge'
                 group by ip.PLEDGEID, c.KEYNAME

           ) MatchingGift
            on MatchingGift.SourceRevenueID = fr.ID
        inner join dbo.[EVENT] e (nolock)  
            on e.APPEALID = R_EXT.APPEALID
        left join -- registrant

           (select distinct
                       rg.CONSTITUENTID,
                       e.ID As EVENTID,
                       tft.NAME as Groupname,
                       ts.[TYPE] As GroupType,
                       case when tftc.ID is not null and ts.TYPECODE = 3 then 'Head of household'  
                       when tftc.ID is null  and ts.TYPECODE = 3 then 'Household member'  
                       when tftc.ID is not null and ts.TYPECODE = 1 then 'Team leader'  
                       when tftc.ID is null and ts.TYPECODE = 1 then 'Team member'  
                       when tftc.ID is not null and ts.TYPECODE = 2 then 'Company leader'  
                       when tftc.ID is null and ts.TYPECODE = 2 then 'Individual'  
                       when tftc.ID is null then 'Individual' end as [Role]  
                  from dbo.REGISTRANT rg With (NOLOCK)
                      inner join dbo.TEAMFUNDRAISER TF With (NOLOCK) on TF.CONSTITUENTID = rg.CONSTITUENTID
                      inner join dbo.TEAMFUNDRAISINGTEAMMEMBER tfm (nolock) on tfm.TEAMFUNDRAISERID = tf.ID
                      inner join dbo.TEAMFUNDRAISINGTEAM tft (nolock) on tfm.TEAMFUNDRAISINGTEAMID = tft.ID
                      inner join dbo.TEAMEXTENSION ts (nolock) on ts.TEAMFUNDRAISINGTEAMID = tft.ID
              inner join dbo.[EVENT] e (nolock) on e.APPEALID = tft.APPEALID
                      left join dbo.TEAMFUNDRAISINGTEAMCAPTAIN tftc (nolock) on tftc.CONSTITUENTID = tf.CONSTITUENTID
            where e.ID = @EventID 
                ) Registrant
               on C3.ID = Registrant.CONSTITUENTID 
         left join dbo.FAFEVENTCOMMUNICATIONCHANNEL fccl (nolock)  
             on fccl.TYPECODE = 1 and fccl.TYPEGUID = fr.ID 
       left join dbo.CHANNELCODE cc (nolock)  
             on cc.ID = R_EXT.CHANNELCODEID
         where (fr.TYPECODE = 0 and rs.APPLICATIONCODE in (0, 7, 17) OR fr.TYPECODE IN (1,2) )
          and fr.[TYPE] <> 'Pending Gift'
          and e.ID = @EventID
          order by fr.DATEADDED desc
    end try
    -- track error

    begin catch
       exec dbo.USP_RAISE_ERROR;    
       return 1
    end catch

    -- add loop count

    set @count = @count + 1
 end   -- end of loop


 -- complete transaction if no error occurs

 begin try

     exec dbo.USP_FAFDonation_Update

 end try
  -- track error

 begin catch
       exec dbo.USP_RAISE_ERROR;  
       return 1
 end catch

  -- get the number of processing

 select @NUMBERPROCESSED=COUNT(*) from dbo.FAFDonation

end