USP_DATAFORMTEMPLATE_EDIT_MEMBERSHIPPROGRAMRENEWAL_2

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@MEMBERSHIPTERMTYPE tinyint IN
@DUESBASEDEXPIRATIONDATETYPE tinyint IN
@EXPIRATIONENDOFPRIORMONTH bit IN
@EXPIRATIONENDOFPRIORMONTHCUTOFF tinyint IN
@RENEWALWINDOWSTART tinyint IN
@RENEWALWINDOWEND tinyint IN
@AUTOMATICRENEWALRADIO tinyint IN
@AUTOMATICRENEWALTIMETYPE tinyint IN
@RENEWALWINDOWSTARTCUTOFFDAY tinyint IN
@AFTEREXPIRATIONTIMEPERIOD1 tinyint IN
@AFTEREXPIRATIONCLASSIFICATION1 tinyint IN
@AFTEREXPIRATIONTIMEPERIOD2 tinyint IN
@AFTEREXPIRATIONCLASSIFICATION2 tinyint IN
@AFTEREXPIRATIONTIMEPERIOD3 tinyint IN
@AFTEREXPIRATIONCLASSIFICATION3 tinyint IN
@CLASSIFICATIONAFTERRENEWALWINDOWTYPE tinyint IN
@REVENUEAFTERRENEWALWINDOWTYPE tinyint IN
@DUESBASEDEXPIRATIONDATE UDT_MONTHDAY IN
@AUTOMATICRENEWALNUMBERDAY tinyint IN
@AUTOMATICRENEWALNUMBERMONTH tinyint IN
@AUTOMATICRENEWALDAYOFMONTH int IN
@PROGRAMBASEDONCODE tinyint IN
@EXPIRATIONDATES xml IN

Definition

Copy

CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_MEMBERSHIPPROGRAMRENEWAL_2 (
    @ID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier = null,
    @MEMBERSHIPTERMTYPE tinyint,
  @DUESBASEDEXPIRATIONDATETYPE tinyint,
  @EXPIRATIONENDOFPRIORMONTH bit,
  @EXPIRATIONENDOFPRIORMONTHCUTOFF tinyint,
  @RENEWALWINDOWSTART tinyint,
  @RENEWALWINDOWEND tinyint,
  @AUTOMATICRENEWALRADIO tinyint,
  @AUTOMATICRENEWALTIMETYPE tinyint,
  @RENEWALWINDOWSTARTCUTOFFDAY tinyint,
  @AFTEREXPIRATIONTIMEPERIOD1 tinyint,
  @AFTEREXPIRATIONCLASSIFICATION1 tinyint,
  @AFTEREXPIRATIONTIMEPERIOD2 tinyint,
  @AFTEREXPIRATIONCLASSIFICATION2 tinyint,
  @AFTEREXPIRATIONTIMEPERIOD3 tinyint,
  @AFTEREXPIRATIONCLASSIFICATION3 tinyint,
  @CLASSIFICATIONAFTERRENEWALWINDOWTYPE tinyint,
  @REVENUEAFTERRENEWALWINDOWTYPE tinyint,
  @DUESBASEDEXPIRATIONDATE dbo.UDT_MONTHDAY,
  @AUTOMATICRENEWALNUMBERDAY tinyint,
  @AUTOMATICRENEWALNUMBERMONTH tinyint,
  @AUTOMATICRENEWALDAYOFMONTH int,
  @PROGRAMBASEDONCODE tinyint,
  @EXPIRATIONDATES xml
)
as

    set nocount on;

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

    declare @MEMBERSHIPTERMTYPE_DATEVARIESWITHSTARTDATE tinyint = 0
    declare @MEMBERSHIPTERMTYPE_DATEISFIXED tinyint = 1
    declare @CURRENTDATE datetime
    set @CURRENTDATE = getdate()

  declare @RENEWALINFOID uniqueidentifier

  begin try

  update dbo.MEMBERSHIPPROGRAM set
      EXPIRESONCODE = @DUESBASEDEXPIRATIONDATETYPE,
      BACKDATEMEMBERSHIPS = @EXPIRATIONENDOFPRIORMONTH,
      CUTOFFDAY = case when @EXPIRATIONENDOFPRIORMONTH = 1 then @EXPIRATIONENDOFPRIORMONTHCUTOFF else 0 end,
    RENEWALWINDOWSTARTTYPECODE = @AUTOMATICRENEWALRADIO,
    RENEWALWINDOWSTARTTIMECODE = case when @AUTOMATICRENEWALTIMETYPE = 0 then @AUTOMATICRENEWALNUMBERDAY else @AUTOMATICRENEWALNUMBERMONTH end,
    RENEWALWINDOWSTARTINTERVALCODE = @AUTOMATICRENEWALTIMETYPE,
    RENEWALWINDOWSTARTCUTOFFDAY = case when @AUTOMATICRENEWALRADIO = 1 then @AUTOMATICRENEWALDAYOFMONTH else 1 end,
    RENEWALWINDOWREVENUETYPECODE = @REVENUEAFTERRENEWALWINDOWTYPE,
    NONRENEWALACTIONTYPECODE = @CLASSIFICATIONAFTERRENEWALWINDOWTYPE,
    CHANGEDBYID = @CHANGEAGENTID,
    DATECHANGED = @CURRENTDATE
  where
      ID = @ID

    if @MEMBERSHIPTERMTYPE = @MEMBERSHIPTERMTYPE_DATEISFIXED
    begin
        declare @newexpirationdates table (
            ID uniqueidentifier,
            EXPIRATIONDATE char(4),
            PUSHNEXTDATE char(4),
            SEQUENCE int
        )
        insert into @newexpirationdates
            select  ID = T.c.value('(ID)[1]', 'uniqueidentifier'),
                    EXPIRATIONDATE = T.c.value('(EXPIRATIONDATE)[1]', 'char(4)'),
                    PUSHNEXTDATE = T.c.value('(PUSHNEXTDATE)[1]', 'char(4)'),
                    SEQUENCE = row_number() over (order by T.c.value('(EXPIRATIONDATE)[1]', 'char(4)'), T.c.value('(PUSHNEXTDATE)[1]', 'char(4)'))
            from @EXPIRATIONDATES.nodes('/EXPIRATIONDATES/ITEM') T(c)
        ;with
        target_tbl as (select MEMBERSHIPPROGRAMENDDATE.* from dbo.MEMBERSHIPPROGRAMENDDATE where MEMBERSHIPPROGRAMID = @ID)
        merge target_tbl as MPE
        using (
            select ID, EXPIRATIONDATE, PUSHNEXTDATE, SEQUENCE
            from @newexpirationdates
        ) as src on MPE.ID = src.ID
        when matched then
            update set
                EXPIRATIONDATE = src.EXPIRATIONDATE,
                PUSHNEXTDATE = src.PUSHNEXTDATE,
                SEQUENCE = src.SEQUENCE

        when not matched by target then
            insert 
            (
                ID,
                MEMBERSHIPPROGRAMID,
                EXPIRATIONDATE,
                PUSHNEXTDATE,
                SEQUENCE,
                ADDEDBYID,
                CHANGEDBYID,
                DATEADDED,
                DATECHANGED
            )
            values (
                newid(),
                @ID,
                src.EXPIRATIONDATE,
                src.PUSHNEXTDATE,
                src.SEQUENCE,
                @CHANGEAGENTID,
                @CHANGEAGENTID,
                @CURRENTDATE,
                @CURRENTDATE
            )

        when not matched by source then
            DELETE;
    end
    else
    begin
        -- Remove any outdated date information
        delete from dbo.MEMBERSHIPPROGRAMENDDATE
        where MEMBERSHIPPROGRAMID = @ID
    end

  update dbo.MEMBERSHIPLEVEL set
      MEMBERSHIPTERMTYPECODE = @MEMBERSHIPTERMTYPE,
      BEFOREEXPIRATION = @RENEWALWINDOWSTART,
      AFTEREXPIRATION = @RENEWALWINDOWEND,
      RENEWALWINDOWSTARTTYPECODE = @AUTOMATICRENEWALRADIO,
      RENEWALWINDOWSTARTINTERVALCODE = @AUTOMATICRENEWALTIMETYPE,
      RENEWALWINDOWSTARTCUTOFFDAY = case when @AUTOMATICRENEWALRADIO = 1 then @AUTOMATICRENEWALDAYOFMONTH else 1 end,
      NONRENEWALACTIONTYPECODE = @CLASSIFICATIONAFTERRENEWALWINDOWTYPE,
      RENEWALWINDOWREVENUETYPECODE = @REVENUEAFTERRENEWALWINDOWTYPE,
      RENEWALWINDOWSTARTTIMECODE = case when @AUTOMATICRENEWALTIMETYPE = 0 then @AUTOMATICRENEWALNUMBERDAY else @AUTOMATICRENEWALNUMBERMONTH end,
    MEMBERSHIPLEVELRENEWAL1ID = null,
    MEMBERSHIPLEVELRENEWAL2ID = null,
    MEMBERSHIPLEVELRENEWAL3ID = null
  where
      MEMBERSHIPPROGRAMID = @ID


  delete from 
      dbo.MEMBERSHIPLEVELRENEWALRULES
  where
      MEMBERSHIPLEVELID in (select ID from MEMBERSHIPLEVEL where MEMBERSHIPPROGRAMID = @ID)


  delete from 
    dbo.MEMBERSHIPLEVELRENEWAL
  where
    MEMBERSHIPLEVELID in (select ID from MEMBERSHIPLEVEL where MEMBERSHIPPROGRAMID = @ID)


    if @AFTEREXPIRATIONCLASSIFICATION1 is not null
                    begin
                        set @RENEWALINFOID = newid()

                        -- create new default record
                        insert into dbo.MEMBERSHIPPROGRAMRENEWAL
                        (
                            ID, MEMBERSHIPPROGRAMID, STATUSCODE,
                            INTERVALCODE, ADDEDBYID, CHANGEDBYID,
                            DATEADDED, DATECHANGED
                        )
                        values
                        (
                            @RENEWALINFOID, @ID, @AFTEREXPIRATIONCLASSIFICATION1,
                            @AFTEREXPIRATIONTIMEPERIOD1, @CHANGEAGENTID, @CHANGEAGENTID,
                            @CURRENTDATE, @CURRENTDATE
                        )

                        -- link default record to this one
                        update
                            dbo.MEMBERSHIPPROGRAM
                        set
                            MEMBERSHIPPROGRAMRENEWAL1ID = @RENEWALINFOID
                        where
                            ID = @ID


                        declare @RENEWALIDTABLE1 table (RENEWALID uniqueidentifier, MEMBERSHIPLEVELID uniqueidentifier)
                        insert into @RENEWALIDTABLE1 (RENEWALID,MEMBERSHIPLEVELID) select newid(),ID from dbo.MEMBERSHIPLEVEL where MEMBERSHIPPROGRAMID = @ID
                        -- create new level-specific records
                        insert into dbo.MEMBERSHIPLEVELRENEWAL
                        (
                            ID, MEMBERSHIPLEVELID, STATUSCODE,
                            INTERVALCODE, ADDEDBYID, CHANGEDBYID,
                            DATEADDED, DATECHANGED
                        )
                        select
                            RENEWALID, MEMBERSHIPLEVELID, @AFTEREXPIRATIONCLASSIFICATION1,
                            @AFTEREXPIRATIONTIMEPERIOD1, @CHANGEAGENTID, @CHANGEAGENTID,
                            @CURRENTDATE, @CURRENTDATE
                        from @RENEWALIDTABLE1

                        -- initialize all levels to default
                        update
                            dbo.MEMBERSHIPLEVEL
                        set
                                        MEMBERSHIPLEVELRENEWAL1ID = RIT.RENEWALID
                          from dbo.MEMBERSHIPLEVEL
                          inner join @RENEWALIDTABLE1 RIT on RIT.MEMBERSHIPLEVELID = MEMBERSHIPLEVEL.ID
                    end

                    if @AFTEREXPIRATIONCLASSIFICATION2 is not null
                    begin
                        set @RENEWALINFOID = newid()

                        -- create new default record
                        insert into dbo.MEMBERSHIPPROGRAMRENEWAL
                        (
                            ID, MEMBERSHIPPROGRAMID, STATUSCODE,
                            INTERVALCODE, ADDEDBYID, CHANGEDBYID,
                            DATEADDED, DATECHANGED
                        )
                        values
                        (
                            @RENEWALINFOID, @ID, @AFTEREXPIRATIONCLASSIFICATION2,
                            @AFTEREXPIRATIONTIMEPERIOD2, @CHANGEAGENTID, @CHANGEAGENTID,
                            @CURRENTDATE, @CURRENTDATE
                        )

                        -- link default record to this one
                        update
                            dbo.MEMBERSHIPPROGRAM
                        set
                            MEMBERSHIPPROGRAMRENEWAL2ID = @RENEWALINFOID
                        where
                            ID = @ID

                        declare @RENEWALIDTABLE2 table (RENEWALID uniqueidentifier, MEMBERSHIPLEVELID uniqueidentifier)
                        insert into @RENEWALIDTABLE2 (RENEWALID,MEMBERSHIPLEVELID) select newid(),ID from dbo.MEMBERSHIPLEVEL where MEMBERSHIPPROGRAMID = @ID
                        -- create new level-specific records
                        insert into dbo.MEMBERSHIPLEVELRENEWAL
                        (
                            ID, MEMBERSHIPLEVELID, STATUSCODE,
                            INTERVALCODE, ADDEDBYID, CHANGEDBYID,
                            DATEADDED, DATECHANGED
                        )
                        select
                            RENEWALID, MEMBERSHIPLEVELID, @AFTEREXPIRATIONCLASSIFICATION2,
                            @AFTEREXPIRATIONTIMEPERIOD2, @CHANGEAGENTID, @CHANGEAGENTID,
                            @CURRENTDATE, @CURRENTDATE
                        from
                            @RENEWALIDTABLE2


                        -- initialize all levels to default
                        update
                            dbo.MEMBERSHIPLEVEL
                        set
                                        MEMBERSHIPLEVELRENEWAL2ID =  RIT.RENEWALID
                          from dbo.MEMBERSHIPLEVEL
                          inner join @RENEWALIDTABLE2 RIT on RIT.MEMBERSHIPLEVELID = MEMBERSHIPLEVEL.ID

                    end

                    if @AFTEREXPIRATIONCLASSIFICATION3 is not null
                    begin
                        set @RENEWALINFOID = newid()

                        -- create new default record
                        insert into dbo.MEMBERSHIPPROGRAMRENEWAL
                        (
                            ID, MEMBERSHIPPROGRAMID, STATUSCODE,
                            INTERVALCODE, ADDEDBYID, CHANGEDBYID,
                            DATEADDED, DATECHANGED
                        )
                        values
                        (
                            @RENEWALINFOID, @ID, @AFTEREXPIRATIONCLASSIFICATION3,
                            @AFTEREXPIRATIONTIMEPERIOD3, @CHANGEAGENTID, @CHANGEAGENTID,
                            @CURRENTDATE, @CURRENTDATE
                        )

                        -- link default record to this one
                        update
                            dbo.MEMBERSHIPPROGRAM
                        set
                            MEMBERSHIPPROGRAMRENEWAL3ID = @RENEWALINFOID
                        where
                            ID = @ID

                        -- create new level-specific records
                        declare @RENEWALIDTABLE3 table (RENEWALID uniqueidentifier, MEMBERSHIPLEVELID uniqueidentifier)
                        insert into @RENEWALIDTABLE3 (RENEWALID,MEMBERSHIPLEVELID) select newid(),ID from dbo.MEMBERSHIPLEVEL where MEMBERSHIPPROGRAMID = @ID

                        insert into dbo.MEMBERSHIPLEVELRENEWAL
                        (
                            ID, MEMBERSHIPLEVELID, STATUSCODE,
                            INTERVALCODE, ADDEDBYID, CHANGEDBYID,
                            DATEADDED, DATECHANGED
                        )
                        select
                            RENEWALID, MEMBERSHIPLEVELID, @AFTEREXPIRATIONCLASSIFICATION3,
                            @AFTEREXPIRATIONTIMEPERIOD3, @CHANGEAGENTID, @CHANGEAGENTID,
                            @CURRENTDATE, @CURRENTDATE
                        from
                            @RENEWALIDTABLE3

                        -- initialize all levels to default
                        update
                            dbo.MEMBERSHIPLEVEL
                        set
                                        MEMBERSHIPLEVELRENEWAL3ID =   RIT.RENEWALID
                          from dbo.MEMBERSHIPLEVEL
                          inner join @RENEWALIDTABLE3 RIT on RIT.MEMBERSHIPLEVELID = MEMBERSHIPLEVEL.ID
                    end


      insert into dbo.MEMBERSHIPLEVELRENEWALRULES(
            MEMBERSHIPLEVELID,
            BEFOREEXPIRATION,
            AFTEREXPIRATION,
            STARTDATE,
            MEMBERSHIPLEVELRENEWAL1ID,
            MEMBERSHIPLEVELRENEWAL2ID,
            MEMBERSHIPLEVELRENEWAL3ID,
            NONRENEWALACTIONTYPECODE,
            ADDEDBYID, 
              CHANGEDBYID, 
              DATEADDED, 
              DATECHANGED
          )
          select
          MEMBERSHIPLEVEL.ID,
          MEMBERSHIPLEVEL.BEFOREEXPIRATION,
          MEMBERSHIPLEVEL.AFTEREXPIRATION,
          @CURRENTDATE,
          MEMBERSHIPLEVEL.MEMBERSHIPLEVELRENEWAL1ID,
          MEMBERSHIPLEVEL.MEMBERSHIPLEVELRENEWAL2ID,
          MEMBERSHIPLEVEL.MEMBERSHIPLEVELRENEWAL3ID,
          MEMBERSHIPLEVEL.NONRENEWALACTIONTYPECODE,
          @CHANGEAGENTID,
          @CHANGEAGENTID,
          @CURRENTDATE,
          @CURRENTDATE
          from dbo.MEMBERSHIPLEVEL
          where MEMBERSHIPLEVEL.MEMBERSHIPPROGRAMID = @ID

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

return 0;