USP_FAFREGISTRANT_EXTEND_CALCULATE

Parameters

Parameter Parameter Type Mode Description
@NUMBERPROCESSED int INOUT
@CHANGEAGENTID uniqueidentifier IN
@CURRENTDATE datetime IN

Definition

Copy


CREATE procedure dbo.USP_FAFREGISTRANT_EXTEND_CALCULATE
(
    @NUMBERPROCESSED integer = 0 output,
    @CHANGEAGENTID uniqueidentifier = null,
    @CURRENTDATE datetime = null
)
as

begin

    DECLARE @TOPID uniqueidentifier
    set @TOPID = ( select top 1 id
    from [FAFREGISTRANTPENDINGSUMMARY] )

    declare @STARTDATE datetime 

    -- This will come from SCHEDULE       

    set @STARTDATE = ( select coalesce(max(DATECHANGED),'7/4/1776') from [FAFREGISTRANTPENDINGSUMMARY] )      
    -- This will come from SCHEDULE       


    if @STARTDATE is null or @TOPID is null
        SET @STARTDATE = '7/4/1776 00:00:00'

    if @CURRENTDATE is null
      set @CURRENTDATE = GETDATE();

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

 /* no longer needed       
;With RegistrantMembers as
(
    select distinct constituentid 
    from dbo.REVENUERECOGNITION (nolock)
    where DATECHANGED >= @STARTDATE
)
,Donors as 
(
    select R.ID as REVENUEID, 
    RS.ID as REVENUESPLITID, 
    RS.AMOUNT ,
    R.DATEADDED, 
    RR.CONSTITUENTID as RECOGNITIONCONSTITUENTID
    from dbo.EVENT E With (NOLOCK)
    join dbo.REVENUE R With (NOLOCK) on E.APPEALID = R.APPEALID --and E.ID = @EVENTID 
    join dbo.REVENUESPLIT RS With (NOLOCK) on R.ID = RS.REVENUEID and R.TRANSACTIONTYPECODE = 9 
    left join dbo.REVENUERECOGNITION RR (nolock) on RR.REVENUESPLITID = RS.ID 
    inner join RegistrantMembers rm on RR.CONSTITUENTID = rm.CONSTITUENTID 


),
EventMembers as 
(
    select R.ID as RECORDID, 
    0 as TYPECODE, 
    C.ID as CONSTITUENTID,
    R.EVENTID
    from dbo.REGISTRANT R With (NOLOCK)
    join dbo.CONSTITUENT C With (NOLOCK) on R.CONSTITUENTID = C.ID 
    inner join RegistrantMembers rm on r.CONSTITUENTID = rm.CONSTITUENTID 
)

*/

declare  @REGTEMP TABLE
(
    TRANSACTIONAMOUNT decimal,
    TOTALAMOUNTRECEIVED decimal,
    EVENTID uniqueidentifier,
    CONSTITUENTID uniqueidentifier,
    ADDEDBYID uniqueidentifier,
    [CHANGEDBYID] uniqueidentifier
)

-- use temp table to avoid microsoft defect. 

    insert into @REGTEMP
    select   
     isnull( F.[AMOUNTPENDING],0) AS TRANSACTIONAMOUNT,  
     0 as TOTALAMOUNTRECEIVED,  
     F.EVENTID,  
     F.CONSTITUENTID ,  
     @CHANGEAGENTID [ADDEDBYID],  
     @CHANGEAGENTID [CHANGEDBYID]
 from FAFRAISEDTOTAL_CATEGORIZED F  
 where f.[DATECHANGED] >= @STARTDATE  


 insert into dbo.[FAFREGISTRANTPENDINGSUMMARY]   
( [TRANSACTIONAMOUNT], [TOTALAMOUNTRECEIVED], [EVENTID], [CONSTITUENTID], [ADDEDBYID], [CHANGEDBYID] )  
    select       
     isnull( r.TRANSACTIONAMOUNT, 0 ),     
     isnull( r.TOTALAMOUNTRECEIVED,  0 )  ,  
     r.EVENTID,      
     r.CONSTITUENTID ,      
     r.[ADDEDBYID],      
     r.[CHANGEDBYID]      
 from @REGTEMP r  
 left join dbo.[FAFREGISTRANTPENDINGSUMMARY] f  
 on f.[EVENTID] = r.[EVENTID] and f.[CONSTITUENTID] = r.[CONSTITUENTID]  
 where f.[CONSTITUENTID] is null  


 update fp    
 set  
  fp.[TRANSACTIONAMOUNT]  = isnull( r.[TRANSACTIONAMOUNT],0) ,  
     fp.[TOTALAMOUNTRECEIVED] = isnull( r.[TOTALAMOUNTRECEIVED], 0) ,  
     fp.[CHANGEDBYID]   = isnull( r.[CHANGEDBYID], @CHANGEAGENTID )   
 from dbo.[FAFREGISTRANTPENDINGSUMMARY] fp  
 left join @REGTEMP r  
 on fp.[EVENTID] = r.[EVENTID] and fp.[CONSTITUENTID] = r.[CONSTITUENTID]  
--where r.[TRANSACTIONAMOUNT] <> fp.[TRANSACTIONAMOUNT] or r.[TOTALAMOUNTRECEIVED] <> fp.[TOTALAMOUNTRECEIVED]  



 /*
merge dbo.[FAFREGISTRANTPENDINGSUMMARY] as t
using (
    select   
     TRANSACTIONAMOUNT,  
     TOTALAMOUNTRECEIVED,  
     EVENTID,  
     CONSTITUENTID ,  
     [ADDEDBYID],  
     [CHANGEDBYID]  
 from @REGTEMP 
) as s
on (t.[EVENTID] = s.[EVENTID] and t.[CONSTITUENTID] = s.[CONSTITUENTID])
when not matched by target
  then insert(
    [TRANSACTIONAMOUNT],
    [TOTALAMOUNTRECEIVED],
    [EVENTID],
    [CONSTITUENTID],
    [ADDEDBYID],
    [CHANGEDBYID]
  )
  values(
    s.[TRANSACTIONAMOUNT],
    s.[TOTALAMOUNTRECEIVED],
    s.[EVENTID],
    s.[CONSTITUENTID],
    s.[CHANGEDBYID],
    s.[ADDEDBYID]
  )
when matched and   t.[TRANSACTIONAMOUNT] <> s.[TRANSACTIONAMOUNT] or t.[TOTALAMOUNTRECEIVED] <> s.[TOTALAMOUNTRECEIVED]
  then update
    set 
    t.[CHANGEDBYID] = s.[CHANGEDBYID],
    t.[TRANSACTIONAMOUNT] = s.[TRANSACTIONAMOUNT],
    t.[TOTALAMOUNTRECEIVED] = s.[TOTALAMOUNTRECEIVED]    ,
      t.[DATECHANGED] = @CURRENTDATE;
    */

  select @NUMBERPROCESSED= isnull(@@ROWCOUNT, 0)


    set @TOPID = ( select top 1 id
    from [FAFREGISTRANTPREVIOUSSUMMARY] )

     set @STARTDATE = ( select coalesce(max(DATECHANGED),'7/4/1776') from [FAFREGISTRANTPREVIOUSSUMMARY] )     

    if @STARTDATE is null or @TOPID is null
        SET @STARTDATE = '7/4/1776 00:00:00';

With DonorsRetained as
(
select  
    f.CONSTITUENTID, 
    f.EVENTID, 
    dbo.UFN_REVENUE_GETDONORRETENTION( f.CONSTITUENTID, f.EVENTID ) PreviousValue
from FAFRAISEDTOTAL f (nolock)
join EVENTEXTENSION e (nolock)
    on f.EVENTID = e.EVENTID
where f.DATECHANGED >= @STARTDATE
and e.PRIORYEAREVENTID is not null
)    

merge dbo.[FAFREGISTRANTPREVIOUSSUMMARY] as t
using (
     select  top 100 percent
         [CONSTITUENTID],
         [EVENTID],
         [PREVIOUSVALUE][DONORRETENTION],
       @CHANGEAGENTID [ADDEDBYID],
       @CHANGEAGENTID [CHANGEDBYID]
    from DonorsRetained
) as s
on (t.[EVENTID] = s.[EVENTID] and t.[CONSTITUENTID] = s.[CONSTITUENTID])
when not matched by target
  then insert(
    [CONSTITUENTID],
    [EVENTID],
    [DONORRETENTION],
    [ADDEDBYID],
    [CHANGEDBYID]
  )
  values(
    s.[CONSTITUENTID],
    s.[EVENTID],
    s.[DONORRETENTION],
    s.[ADDEDBYID],
    s.[CHANGEDBYID]
  )
when matched  and   t.[DONORRETENTION] <> s.[DONORRETENTION] 
  then update
    set 
    t.[CHANGEDBYID] = s.[CHANGEDBYID],
    t.[DONORRETENTION] = s.[DONORRETENTION],
      t.[DATECHANGED] = @CURRENTDATE;

  select @NUMBERPROCESSED = @NUMBERPROCESSED + isnull(@@ROWCOUNT, 0)

end