USP_GLOBALCHANGE_UPDATEMEMBERSHIPSTATUS

Parameters

Parameter Parameter Type Mode Description
@CHANGEAGENTID uniqueidentifier IN
@ASOF datetime IN
@NUMBERADDED int INOUT
@NUMBEREDITED int INOUT
@NUMBERDELETED int INOUT
@IDSETREGISTERID uniqueidentifier IN

Definition

Copy


        CREATE procedure dbo.USP_GLOBALCHANGE_UPDATEMEMBERSHIPSTATUS
        (
            @CHANGEAGENTID uniqueidentifier = null,
            @ASOF as datetime = null,
            @NUMBERADDED int = 0 output,
            @NUMBEREDITED int = 0 output,
            @NUMBERDELETED int = 0 output,
            @IDSETREGISTERID uniqueidentifier = null
        )
        as            
            set nocount off;

            declare @CURRENTDATE date
            set @CURRENTDATE = getdate()
            set @NUMBERADDED = 0;
            set @NUMBEREDITED = 0;
            set @NUMBERDELETED = 0

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

          begin try
                      if @IDSETREGISTERID is null
            begin
              update dbo.MEMBERSHIP set STATUSCODE = NEWMEMBERSHIP.NEWSTATUSCODE,
                                              CHANGEDBYID = @CHANGEAGENTID,
                                              DATECHANGED = @CURRENTDATE    
             from (select case
                          when @CURRENTDATE > DATEADD(month,MEMBERSHIPLEVEL.AFTEREXPIRATION,MEMBERSHIP.EXPIRATIONDATE) then (MEMBERSHIPLEVEL.NONRENEWALACTIONTYPECODE) --When the current date is greater than the after expiration date renewal period.

                          when (MEMBERSHIPLEVEL.MEMBERSHIPLEVELRENEWAL1ID is not null and MLR1.INTERVALCODE = 12 or @CURRENTDATE <= DATEADD(month,MLR1.INTERVALCODE+1,MEMBERSHIP.EXPIRATIONDATE)) then MLR1.STATUSCODE -- When the current date is within the first rules period

                          when (MEMBERSHIPLEVEL.MEMBERSHIPLEVELRENEWAL2ID is not null and MLR2.INTERVALCODE = 12 or @CURRENTDATE <= DATEADD(month,(MLR1.INTERVALCODE+1 + MLR2.INTERVALCODE+1),MEMBERSHIP.EXPIRATIONDATE)) then MLR2.STATUSCODE -- When the current date is within the second rules period

                          when (MEMBERSHIPLEVEL.MEMBERSHIPLEVELRENEWAL3ID is not null and MLR3.INTERVALCODE = 12 or @CURRENTDATE <= DATEADD(month,(MLR3.INTERVALCODE+1 + MLR1.INTERVALCODE+1 + MLR2.INTERVALCODE+1),MEMBERSHIP.EXPIRATIONDATE)) then MLR3.STATUSCODE-- When the current date is within the third rules period

                          else MEMBERSHIP.STATUSCODE
                          end as NEWSTATUSCODE,
                          MEMBERSHIP.MEMBERSHIPLEVELID,
                          MEMBERSHIP.MEMBERSHIPPROGRAMID,
                          MEMBERSHIP.ID as MEMBERSHIPID
                         from dbo.MEMBERSHIP 
                         inner join dbo.MEMBERSHIPLEVEL on MEMBERSHIPLEVEL.ID = MEMBERSHIP.MEMBERSHIPLEVELID   
                         left join dbo.MEMBERSHIPLEVELRENEWAL MLR1 on MEMBERSHIPLEVEL.MEMBERSHIPLEVELRENEWAL1ID = MLR1.ID
                         left join dbo.MEMBERSHIPLEVELRENEWAL MLR2 on MEMBERSHIPLEVEL.MEMBERSHIPLEVELRENEWAL2ID = MLR2.ID
                         left join dbo.MEMBERSHIPLEVELRENEWAL MLR3 on MEMBERSHIPLEVEL.MEMBERSHIPLEVELRENEWAL3ID = MLR3.ID
                         where (MEMBERSHIP.STATUSCODE <> MEMBERSHIPLEVEL.NONRENEWALACTIONTYPECODE or
                               ( MEMBERSHIP.STATUSCODE = MEMBERSHIPLEVEL.NONRENEWALACTIONTYPECODE and @CURRENTDATE < DATEADD(month,MEMBERSHIPLEVEL.AFTEREXPIRATION,MEMBERSHIP.EXPIRATIONDATE)) )
                               and MEMBERSHIP.STATUSCODE not in (1,2)) as NEWMEMBERSHIP      
             where @CURRENTDATE > MEMBERSHIP.EXPIRATIONDATE     
             and NEWMEMBERSHIP.NEWSTATUSCODE <> MEMBERSHIP.STATUSCODE  
             and NEWMEMBERSHIP.MEMBERSHIPID = MEMBERSHIP.ID
             set @NUMBEREDITED = @@ROWCOUNT
            end
            else
            begin
              update dbo.MEMBERSHIP set STATUSCODE = NEWMEMBERSHIP.NEWSTATUSCODE,
                                              CHANGEDBYID = @CHANGEAGENTID,
                                              DATECHANGED = @CURRENTDATE    
             from (select case
                          when @CURRENTDATE > DATEADD(month,MEMBERSHIPLEVEL.AFTEREXPIRATION,MEMBERSHIP.EXPIRATIONDATE) then (MEMBERSHIPLEVEL.NONRENEWALACTIONTYPECODE)  --When the current date is greater than the after expiration date renewal period.

                          when (MEMBERSHIPLEVEL.MEMBERSHIPLEVELRENEWAL1ID is not null and MLR1.INTERVALCODE = 12 or @CURRENTDATE <= DATEADD(month,MLR1.INTERVALCODE+1,MEMBERSHIP.EXPIRATIONDATE)) then MLR1.STATUSCODE -- When the current date is within the first rules period

                          when (MEMBERSHIPLEVEL.MEMBERSHIPLEVELRENEWAL2ID is not null and MLR2.INTERVALCODE = 12 or @CURRENTDATE <= DATEADD(month,(MLR1.INTERVALCODE+1 + MLR2.INTERVALCODE+1),MEMBERSHIP.EXPIRATIONDATE)) then MLR2.STATUSCODE -- When the current date is within the second rules period

                          when (MEMBERSHIPLEVEL.MEMBERSHIPLEVELRENEWAL3ID is not null and MLR3.INTERVALCODE = 12 or @CURRENTDATE <= DATEADD(month,(MLR3.INTERVALCODE+1 + MLR1.INTERVALCODE+1 + MLR2.INTERVALCODE+1),MEMBERSHIP.EXPIRATIONDATE)) then MLR3.STATUSCODE-- When the current date is within the third rules period

                          else MEMBERSHIP.STATUSCODE
                          end as NEWSTATUSCODE,
                          MEMBERSHIP.MEMBERSHIPLEVELID,
                          MEMBERSHIP.MEMBERSHIPPROGRAMID,
                          MEMBERSHIP.ID as MEMBERSHIPID
                         from dbo.MEMBERSHIP 
                         inner join dbo.MEMBERSHIPLEVEL on MEMBERSHIPLEVEL.ID = MEMBERSHIP.MEMBERSHIPLEVELID
                         inner join dbo.UFN_IDSETREADER_GETRESULTS_GUID(@IDSETREGISTERID) as SELECTION on MEMBERSHIP.MEMBERSHIPPROGRAMID = SELECTION.ID        
                         left join dbo.MEMBERSHIPLEVELRENEWAL MLR1 on MEMBERSHIPLEVEL.MEMBERSHIPLEVELRENEWAL1ID = MLR1.ID
                         left join dbo.MEMBERSHIPLEVELRENEWAL MLR2 on MEMBERSHIPLEVEL.MEMBERSHIPLEVELRENEWAL2ID = MLR2.ID
                         left join dbo.MEMBERSHIPLEVELRENEWAL MLR3 on MEMBERSHIPLEVEL.MEMBERSHIPLEVELRENEWAL3ID = MLR3.ID
                           where (MEMBERSHIP.STATUSCODE <> MEMBERSHIPLEVEL.NONRENEWALACTIONTYPECODE or
                               ( MEMBERSHIP.STATUSCODE = MEMBERSHIPLEVEL.NONRENEWALACTIONTYPECODE and @CURRENTDATE < DATEADD(month,MEMBERSHIPLEVEL.AFTEREXPIRATION,MEMBERSHIP.EXPIRATIONDATE)) )
                               and MEMBERSHIP.STATUSCODE not in (1,2)) as NEWMEMBERSHIP      
             inner join dbo.UFN_IDSETREADER_GETRESULTS_GUID(@IDSETREGISTERID) as SELECTION on NEWMEMBERSHIP.MEMBERSHIPPROGRAMID = SELECTION.ID            
             where @CURRENTDATE > MEMBERSHIP.EXPIRATIONDATE     
             and NEWMEMBERSHIP.NEWSTATUSCODE <> MEMBERSHIP.STATUSCODE 
             and NEWMEMBERSHIP.MEMBERSHIPID = MEMBERSHIP.ID
             set @NUMBEREDITED = @@ROWCOUNT
            end
            end try

            begin catch
                exec dbo.USP_RAISE_ERROR;
                return 1;
            end catch