USP_UPDATE_BENEFITS

Executes the "Registrant Benefit Extension Update" record operation.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN Input parameter indicating the ID of the record being updated.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the update.

Definition

Copy



  CREATE procedure dbo.USP_UPDATE_BENEFITS
    (
        @ID uniqueidentifier,
        @CHANGEAGENTID uniqueidentifier = null
    )
    as

  set nocount on

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

  DECLARE @EVENTID uniqueidentifier
  SELECT @EVENTID= EVENTID FROM REGISTRANT WHERE EVENTID= @ID
  ----------------------------------------


  IF EXISTS ( SELECT * FROM tempdb.dbo.sysobjects o where o.xtype in ('U') and o.id = object_id( N'tempdb..'+'#TEMP_GETREGISTRANT_EVENT_INFO') )  
  DROP TABLE #TEMP_GETREGISTRANT_EVENT_INFO

  CREATE TABLE #TEMP_GETREGISTRANT_EVENT_INFO    (REGISTRANTID uniqueidentifier NOT NULL, [Total amount raised] money,PROGRESSMEMBERECRUITMENTGOAL money, 
                                                                                  PROGRESSDONORRETENTIONGOAL decimal(5, 2), PROGRESSCOMMUNICATIONGOAL int )
  ----------------------------------------

  INSERT INTO #TEMP_GETREGISTRANT_EVENT_INFO
  ------

  SELECT ID
              , dbo.UFN_REVENUE_GETPARTICIPANTRAISEDTOTAL(REGISTRANT.ID, REGISTRANT.EVENTID) AS [Total amount raised]
                , ((SELECT  COUNT(fc.TYPEGUID) from FAFCOMMUNICATIONSLOG fl join FAFEVENTCOMMUNICATIONCHANNEL fc on fl.EMAILJOBID = fc.EMAILJOBID 
                  WHERE fl.CLIENTUSERSID IN (SELECT dbo.UFN_CLIENTUSERID_GET_BY_CONSTITUENT (REGISTRANT.CONSTITUENTID)) AND EVENTID= REGISTRANT.EVENTID)) AS PROGRESSMEMBERECRUITMENTGOAL  
              , (SELECT DONORRETAINEDNUMBER FROM V_QUERY_REGISTRANT_FUNDRAISINGTOTAL WHERE ID= REGISTRANT.ID) AS PROGRESSDONORRETENTIONGOAL
              , (SELECT  COUNT(ID) FROM FAFCOMMUNICATIONSLOG WHERE CONSTITUENTID= REGISTRANT.CONSTITUENTID AND EVENTID= REGISTRANT.EVENTID) AS PROGRESSCOMMUNICATIONGOAL
  FROM REGISTRANT
  WHERE EVENTID= @EVENTID
  ----------------------------------------------------------------------


  IF EXISTS ( SELECT * FROM tempdb.dbo.sysobjects o where o.xtype in ('U')    and o.id = object_id( N'tempdb..'+'#TEMP_GET_FAFINCENTIVELEVEL_BENEFITS') )  
  DROP TABLE #TEMP_GET_FAFINCENTIVELEVEL_BENEFITS

  CREATE TABLE #TEMP_GET_FAFINCENTIVELEVEL_BENEFITS    (    prim_id int NOT NULL IDENTITY(1,1) PRIMARY KEY, FAFINCENTIVELEVELID uniqueidentifier, TYPECODE tinyint, 
                                                                                              MAXIMUMAMOUNT MONEY, BENEFITID uniqueidentifier, INCENTIVENAME varchar(100), BENEFITNAME varchar(100)
                                                                                              , MAXIMUMNUMBER integer, MAXIMUMRETENTION decimal(5, 2) )
  ----------------------------------------

  INSERT INTO #TEMP_GET_FAFINCENTIVELEVEL_BENEFITS
  ------

  SELECT    FL.ID, FL.TYPECODE, FL.MAXIMUMAMOUNT, FLB.BENEFITID, FL.NAME AS INCENTIVENAME, B.NAME AS BENEFITNAME, FL.MAXIMUMNUMBER    , FL.MAXIMUMRETENTION 
  FROM    FAFINCENTIVELEVEL FL JOIN        FAFINCENTIVELEVELBENEFIT FLB ON FL.ID = FLB.FAFINCENTIVELEVELID JOIN        BENEFIT B ON FLB.BENEFITID= B.ID WHERE    FL.EVENTID= @EVENTID
  ----------------------------------------------------------------------


  DECLARE @i int, @count int,  @FAFINCENTIVELEVELID uniqueidentifier, @TYPECODE tinyint, @MAXIMUMAMOUNT MONEY, @BENEFITID uniqueidentifier
                  , @INCENTIVENAME varchar(100), @BENEFITNAME varchar(100), @MAXIMUMNUMBER integer, @MAXIMUMRETENTION decimal (5,2)

  SELECT @i = 1, @count = count(*) FROM #TEMP_GET_FAFINCENTIVELEVEL_BENEFITS
  ----------------------------------------------------------------------


  --1...Allow participant to only receive benefits from each level

  IF EXISTS (SELECT * FROM EVENTATTRIBUTES WHERE EVENTID= @EVENTID AND ALLOWPARTICIPANTONLYRECEIVEBENEFITLEVELCODE= 0)
  BEGIN
      IF EXISTS (SELECT * FROM FAFINCENTIVELEVEL FL JOIN FAFINCENTIVELEVELBENEFIT FLB ON FL.ID = FLB.FAFINCENTIVELEVELID AND FL.EVENTID= @EVENTID)
      BEGIN
          DELETE FROM REGISTRANTBENEFITEXTENSION WHERE REGISTRANTID IN (SELECT REGISTRANTID FROM #TEMP_GETREGISTRANT_EVENT_INFO) AND BENEFITTYPECODE <> 0
          ---------------------------

          WHILE (@i <= @count
          BEGIN 
              SELECT    @FAFINCENTIVELEVELID= FAFINCENTIVELEVELID, @TYPECODE= TYPECODE, @MAXIMUMAMOUNT= MAXIMUMAMOUNT, @BENEFITID = BENEFITID, 
                          @INCENTIVENAME= INCENTIVENAME, @BENEFITNAME= BENEFITNAME, @MAXIMUMNUMBER= MAXIMUMNUMBER, @MAXIMUMRETENTION= (MAXIMUMRETENTION * 100)
              FROM    #TEMP_GET_FAFINCENTIVELEVEL_BENEFITS WHERE prim_id = @i

              IF @MAXIMUMAMOUNT >0
              INSERT INTO REGISTRANTBENEFITEXTENSION  
                              (ID, REGISTRANTID, BENEFITID, BENEFITTYPECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
              SELECT        newid(), REGISTRANTID, @BENEFITID, @TYPECODE, @CHANGEAGENTID, @CHANGEAGENTID, getdate(), getdate()    
              FROM        #TEMP_GETREGISTRANT_EVENT_INFO
              WHERE        [Total amount raised] >= @MAXIMUMAMOUNT  

              IF @MAXIMUMNUMBER > 0 AND @TYPECODE =2 
              INSERT INTO REGISTRANTBENEFITEXTENSION  
                              (ID, REGISTRANTID, BENEFITID, BENEFITTYPECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
              SELECT        newid(), REGISTRANTID, @BENEFITID, @TYPECODE, @CHANGEAGENTID, @CHANGEAGENTID, getdate(), getdate()    
              FROM        #TEMP_GETREGISTRANT_EVENT_INFO
              WHERE        PROGRESSMEMBERECRUITMENTGOAL >= @MAXIMUMNUMBER 

              IF @MAXIMUMRETENTION  > 0    
              INSERT INTO REGISTRANTBENEFITEXTENSION  
                              (ID, REGISTRANTID, BENEFITID, BENEFITTYPECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
              SELECT        newid(), REGISTRANTID, @BENEFITID, @TYPECODE, @CHANGEAGENTID, @CHANGEAGENTID, getdate(), getdate()    
              FROM        #TEMP_GETREGISTRANT_EVENT_INFO
              WHERE        PROGRESSDONORRETENTIONGOAL >= @MAXIMUMRETENTION

              IF @MAXIMUMNUMBER > 0 AND @TYPECODE =4 
              INSERT INTO REGISTRANTBENEFITEXTENSION  
                              (ID, REGISTRANTID, BENEFITID, BENEFITTYPECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
              SELECT        newid(), REGISTRANTID, @BENEFITID, @TYPECODE, @CHANGEAGENTID, @CHANGEAGENTID, getdate(), getdate()    
              FROM        #TEMP_GETREGISTRANT_EVENT_INFO
              WHERE        PROGRESSCOMMUNICATIONGOAL >= @MAXIMUMNUMBER  

              SET @i = @i + 1
          END
      END
  END    
  ELSE    
  BEGIN
  -----------------------------------------------------------------------------------------------------


  --2...Allow participant to only receive benefits from highest level

  IF EXISTS (SELECT * FROM EVENTATTRIBUTES WHERE EVENTID= @EVENTID AND ALLOWPARTICIPANTONLYRECEIVEBENEFITLEVELCODE= 1)
  BEGIN

      IF EXISTS ( SELECT * FROM tempdb.dbo.sysobjects o where o.xtype in ('U')    and o.id = object_id( N'tempdb..'+'#TEMP_REGISTRANTBENEFITEXTENSION') )  
      DROP TABLE #TEMP_REGISTRANTBENEFITEXTENSION

      CREATE TABLE #TEMP_REGISTRANTBENEFITEXTENSION    (prim_id int NOT NULL IDENTITY(1,1) PRIMARY KEY, REGISTRANTID uniqueidentifier, TYPECODE tinyint, 
                                                                                                  MAXIMUMAMOUNT MONEY, BENEFITID uniqueidentifier, INCENTIVENAME varchar(100), BENEFITNAME varchar(100)
                                                                                                  , MAXIMUMNUMBER integer, MAXIMUMRETENTION decimal(5, 2) )                                                    

      IF EXISTS (SELECT * FROM FAFINCENTIVELEVEL FL JOIN FAFINCENTIVELEVELBENEFIT FLB ON FL.ID = FLB.FAFINCENTIVELEVELID AND FL.EVENTID= @EVENTID)
      BEGIN
          DELETE FROM REGISTRANTBENEFITEXTENSION WHERE REGISTRANTID IN (SELECT REGISTRANTID FROM #TEMP_GETREGISTRANT_EVENT_INFO) AND BENEFITTYPECODE <> 0
          ---------------------------    

          WHILE (@i <= @count
          BEGIN
              SELECT    @FAFINCENTIVELEVELID= FAFINCENTIVELEVELID, @TYPECODE= TYPECODE, @MAXIMUMAMOUNT= MAXIMUMAMOUNT, @BENEFITID = BENEFITID, 
                          @INCENTIVENAME= INCENTIVENAME, @BENEFITNAME= BENEFITNAME, @MAXIMUMNUMBER= MAXIMUMNUMBER, @MAXIMUMRETENTION= (MAXIMUMRETENTION * 100)
              FROM    #TEMP_GET_FAFINCENTIVELEVEL_BENEFITS WHERE prim_id = @i  

              IF @MAXIMUMAMOUNT >0   
              INSERT INTO #TEMP_REGISTRANTBENEFITEXTENSION  
                                  (REGISTRANTID, BENEFITID, TYPECODE, MAXIMUMAMOUNT, MAXIMUMNUMBER, MAXIMUMRETENTION)    
              SELECT        REGISTRANTID, @BENEFITID, @TYPECODE, @MAXIMUMAMOUNT, @MAXIMUMNUMBER, @MAXIMUMRETENTION
              FROM        #TEMP_GETREGISTRANT_EVENT_INFO
              WHERE        [Total amount raised] >= @MAXIMUMAMOUNT    

              IF @MAXIMUMNUMBER > 0     AND @TYPECODE =2 
              INSERT INTO #TEMP_REGISTRANTBENEFITEXTENSION  
                                  (REGISTRANTID, BENEFITID, TYPECODE, MAXIMUMAMOUNT, MAXIMUMNUMBER, MAXIMUMRETENTION)    
              SELECT        REGISTRANTID, @BENEFITID, @TYPECODE, @MAXIMUMAMOUNT, @MAXIMUMNUMBER, @MAXIMUMRETENTION
              FROM        #TEMP_GETREGISTRANT_EVENT_INFO
              WHERE        PROGRESSMEMBERECRUITMENTGOAL >= @MAXIMUMNUMBER

              IF @MAXIMUMRETENTION  > 0
              INSERT INTO #TEMP_REGISTRANTBENEFITEXTENSION  
                                  (REGISTRANTID, BENEFITID, TYPECODE, MAXIMUMAMOUNT, MAXIMUMNUMBER, MAXIMUMRETENTION)    
              SELECT        REGISTRANTID, @BENEFITID, @TYPECODE, @MAXIMUMAMOUNT, @MAXIMUMNUMBER, @MAXIMUMRETENTION
              FROM        #TEMP_GETREGISTRANT_EVENT_INFO
              WHERE        PROGRESSDONORRETENTIONGOAL >=  @MAXIMUMRETENTION

              IF @MAXIMUMNUMBER > 0     AND @TYPECODE = 4 
              INSERT INTO #TEMP_REGISTRANTBENEFITEXTENSION  
                                  (REGISTRANTID, BENEFITID, TYPECODE, MAXIMUMAMOUNT, MAXIMUMNUMBER, MAXIMUMRETENTION)    
              SELECT        REGISTRANTID, @BENEFITID, @TYPECODE, @MAXIMUMAMOUNT, @MAXIMUMNUMBER, @MAXIMUMRETENTION
              FROM        #TEMP_GETREGISTRANT_EVENT_INFO
              WHERE        PROGRESSCOMMUNICATIONGOAL >= @MAXIMUMNUMBER  

              SET @i = @i + 1
          END
              INSERT INTO REGISTRANTBENEFITEXTENSION              
                              (ID, REGISTRANTID, BENEFITID, BENEFITTYPECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)        
              ---------------------------                

              SELECT         newid(), TR01.REGISTRANTID, TR01.BENEFITID, TR01.TYPECODE,@CHANGEAGENTID, @CHANGEAGENTID, getdate(), getdate()
              FROM        #TEMP_REGISTRANTBENEFITEXTENSION TR01
              JOIN            (SELECT MAX (MAXIMUMAMOUNT) as MAXIMUMAMOUNT, REGISTRANTID, TYPECODE FROM #TEMP_REGISTRANTBENEFITEXTENSION WHERE TYPECODE=1 GROUP BY REGISTRANTID, TYPECODE) TR1
                  ON        TR01.REGISTRANTID= TR1.REGISTRANTID AND TR01.MAXIMUMAMOUNT= TR1.MAXIMUMAMOUNT 
              WHERE        TR01.TYPECODE=1    
              UNION  ALL

              SELECT         newid(), TR02.REGISTRANTID, TR02.BENEFITID, TR02.TYPECODE,@CHANGEAGENTID, @CHANGEAGENTID, getdate(), getdate()
              FROM        #TEMP_REGISTRANTBENEFITEXTENSION TR02
              JOIN            (SELECT MAX (MAXIMUMNUMBER) as MAXIMUMNUMBER, REGISTRANTID, TYPECODE FROM #TEMP_REGISTRANTBENEFITEXTENSION WHERE TYPECODE=2 GROUP BY REGISTRANTID, TYPECODE) TR2
                  ON        TR02.REGISTRANTID= TR2.REGISTRANTID AND TR02.MAXIMUMNUMBER= TR2.MAXIMUMNUMBER
              WHERE        TR02.TYPECODE=2        
              UNION  ALL

              SELECT        newid(), TR03.REGISTRANTID, TR03.BENEFITID, TR03.TYPECODE,@CHANGEAGENTID, @CHANGEAGENTID, getdate(), getdate()
              FROM        #TEMP_REGISTRANTBENEFITEXTENSION TR03
              JOIN            (SELECT MAX (MAXIMUMRETENTION) as MAXIMUMRETENTION, REGISTRANTID, TYPECODE FROM #TEMP_REGISTRANTBENEFITEXTENSION WHERE TYPECODE=3 GROUP BY REGISTRANTID, TYPECODE) TR3
                  ON        TR03.REGISTRANTID= TR3.REGISTRANTID AND TR03.MAXIMUMRETENTION= TR3.MAXIMUMRETENTION
              WHERE        TR03.TYPECODE=3        
              UNION  ALL  

              SELECT        newid(), TR04.REGISTRANTID, TR04.BENEFITID, TR04.TYPECODE,@CHANGEAGENTID, @CHANGEAGENTID, getdate(), getdate()
              FROM        #TEMP_REGISTRANTBENEFITEXTENSION TR04
              JOIN            (SELECT MAX (MAXIMUMNUMBER) as MAXIMUMNUMBER, REGISTRANTID, TYPECODE FROM #TEMP_REGISTRANTBENEFITEXTENSION WHERE TYPECODE=4 GROUP BY REGISTRANTID, TYPECODE) TR4
                  ON        TR04.REGISTRANTID= TR4.REGISTRANTID AND TR04.MAXIMUMNUMBER= TR4.MAXIMUMNUMBER 
              WHERE        TR04.TYPECODE=4        

      END
  END    
  END
  -----------------------------------------------------------------------------------------------------


  --3...Allow participant to only waive benefits

  IF EXISTS (SELECT * FROM EVENTATTRIBUTES WHERE EVENTID= @EVENTID AND ALLOWPARTICIPANTSWAIVEBENEFITS= 1)
  BEGIN
      IF EXISTS (SELECT * FROM FAFINCENTIVELEVEL FL JOIN FAFINCENTIVELEVELBENEFIT FLB ON FL.ID = FLB.FAFINCENTIVELEVELID AND FL.EVENTID= @EVENTID)
      BEGIN
          DELETE FROM REGISTRANTBENEFITEXTENSION WHERE REGISTRANTID IN (SELECT REGISTRANTID FROM #TEMP_GETREGISTRANT_EVENT_INFO) AND BENEFITTYPECODE <> 0
                                                                                  AND  REGISTRANTID IN (SELECT ID FROM  REGISTRANT WHERE BENEFITSWAIVED= 1
      END
  END    
                            return 0;