USP_GLOBALCHANGE_ADDCAMPAIGNTOMEMBERSHIPPROGRAMPAYMENT

Parameters

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

Definition

Copy


CREATE procedure dbo.USP_GLOBALCHANGE_ADDCAMPAIGNTOMEMBERSHIPPROGRAMPAYMENT
(
  @CHANGEAGENTID uniqueidentifier = null,
  @ASOF as datetime = null,
  @NUMBERADDED int = 0 output,
  @NUMBEREDITED int = 0 output,
  @NUMBERDELETED int = 0 output,
  @MEMBERSHIPPROGRAMID uniqueidentifier = null
)

as
  set nocount on;

  set @NUMBERADDED = 0;
  set @NUMBEREDITED = 0;
  set @NUMBERDELETED = 0;

  declare @CURRENTDATE date = dbo.UFN_DATE_GETEARLIESTTIME(getdate());

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

  begin try

    declare @PROGRAM_CAMPAIGNS table
    (
      MEMBERSHIPLEVELID uniqueidentifier,
      CAMPAIGNID uniqueidentifier,
      CAMPAIGNSUBPRIORITYID uniqueidentifier,
      DATEFROM datetime,
      DATETO datetime
    )

    --All the campaigns on the program

    insert into @PROGRAM_CAMPAIGNS
      select
        ML.ID,
        MPC.CAMPAIGNID,
        MPC.CAMPAIGNSUBPRIORITYID,
        MPC.DATEFROM,
        MPC.DATETO
      from
        dbo.MEMBERSHIPPROGRAM MP
      inner join
        dbo.MEMBERSHIPLEVEL ML on ML.MEMBERSHIPPROGRAMID = MP.ID
      inner join
        dbo.MEMBERSHIPPROGRAMCAMPAIGN MPC on MPC.MEMBERSHIPPROGRAMID = MP.ID
      where
        MP.ID = @MEMBERSHIPPROGRAMID and
        ML.OVERRIDECAMPAIGNS = 0

      union all

      select
        ML.ID,
        MLC.CAMPAIGNID,
        MLC.CAMPAIGNSUBPRIORITYID,
        MLC.DATEFROM,
        MLC.DATETO
      from
        dbo.MEMBERSHIPLEVEL ML
      inner join
        dbo.MEMBERSHIPLEVELCAMPAIGN MLC on MLC.MEMBERSHIPLEVELID = ML.ID
      where
        ML.MEMBERSHIPPROGRAMID = @MEMBERSHIPPROGRAMID and
        ML.OVERRIDECAMPAIGNS = 1;

    declare @EXISTING_MEMBERSHIPS table
    (
      REVENUESPLITID uniqueidentifier,
      MEMBERSHIPLEVELID uniqueidentifier,
      MEMBERSHIPDATE datetime
    );

    --Membership Payments

    insert into @EXISTING_MEMBERSHIPS
    (
      REVENUESPLITID,
      MEMBERSHIPLEVELID,
      MEMBERSHIPDATE
    )
    select distinct
      MST.REVENUESPLITID,
      ML.ID,
      cast(FT.DATE as datetime)
    from
      dbo.MEMBERSHIPTRANSACTION MST
    inner join
      dbo.MEMBERSHIP MS on MS.ID = MST.MEMBERSHIPID
    inner join
      dbo.MEMBERSHIPLEVEL ML on ML.ID = MS.MEMBERSHIPLEVELID
    inner join
      dbo.FINANCIALTRANSACTIONLINEITEM FTLI on MST.REVENUESPLITID = FTLI.ID
    inner join
      dbo.FINANCIALTRANSACTION FT on FTLI.FINANCIALTRANSACTIONID = FT.ID
    where
      MS.MEMBERSHIPPROGRAMID = @MEMBERSHIPPROGRAMID and
      MST.REVENUESPLITID is not null and
      FTLI.DELETEDON is null and
      FTLI.TYPECODE <> 1 and
      FT.DELETEDON is null;

    --Installment Plan Payments

    insert into @EXISTING_MEMBERSHIPS
    (
      REVENUESPLITID,
      MEMBERSHIPLEVELID,
      MEMBERSHIPDATE
    )
    select distinct
      PAYMENTSPLIT.ID,
      ML.ID,
      cast(PAYMENT.DATE as datetime)
    from
      dbo.MEMBERSHIPTRANSACTION MST
    inner join
      dbo.MEMBERSHIP MS on MS.ID = MST.MEMBERSHIPID
    inner join
      dbo.MEMBERSHIPLEVEL ML on ML.ID = MS.MEMBERSHIPLEVELID
    inner join
      dbo.FINANCIALTRANSACTIONLINEITEM FTLI on MST.REVENUESPLITID = FTLI.ID
    inner join
      dbo.FINANCIALTRANSACTION FT on FTLI.FINANCIALTRANSACTIONID = FT.ID
    inner join
      dbo.INSTALLMENTSPLITPAYMENT ISP on FT.ID = ISP.PLEDGEID
    inner join
      dbo.FINANCIALTRANSACTIONLINEITEM PAYMENTSPLIT on PAYMENTSPLIT.ID = ISP.PAYMENTID
    inner join
      dbo.FINANCIALTRANSACTION PAYMENT on PAYMENTSPLIT.FINANCIALTRANSACTIONID = PAYMENT.ID
    where
      MS.MEMBERSHIPPROGRAMID = @MEMBERSHIPPROGRAMID and
      MST.REVENUESPLITID is not null and
      FTLI.DELETEDON is null and
      FTLI.TYPECODE <> 1 and
      FT.DELETEDON is null;

    --Recurring Membership Payments

    insert into @EXISTING_MEMBERSHIPS
    (
      REVENUESPLITID,
      MEMBERSHIPLEVELID,
      MEMBERSHIPDATE
    )
    select distinct
      PAYMENTSPLIT.ID,
      ML.ID,
      cast(PAYMENT.DATE as datetime)
    from
      dbo.MEMBERSHIPTRANSACTION MST
    inner join
      dbo.MEMBERSHIP MS on MS.ID = MST.MEMBERSHIPID
    inner join
      dbo.MEMBERSHIPLEVEL ML on ML.ID = MS.MEMBERSHIPLEVELID
    inner join
      dbo.FINANCIALTRANSACTIONLINEITEM FTLI on MST.REVENUESPLITID = FTLI.ID
    inner join
      dbo.FINANCIALTRANSACTION FT on FTLI.FINANCIALTRANSACTIONID = FT.ID
    inner join
      dbo.RECURRINGGIFTACTIVITY RGA on FT.ID = RGA.SOURCEREVENUEID
    inner join
      dbo.FINANCIALTRANSACTIONLINEITEM PAYMENTSPLIT on RGA.PAYMENTREVENUEID = PAYMENTSPLIT.ID
    inner join
      dbo.FINANCIALTRANSACTION PAYMENT on PAYMENTSPLIT.FINANCIALTRANSACTIONID = PAYMENT.ID
    where
      MS.MEMBERSHIPPROGRAMID = @MEMBERSHIPPROGRAMID and
      MST.REVENUESPLITID is not null and
      FTLI.DELETEDON is null and
      FTLI.TYPECODE <> 1 and
      FT.DELETEDON is null;

    declare @CONTEXTCACHE varbinary(128) = context_info();

    if @CHANGEAGENTID is not null
      set context_info @CHANGEAGENTID;

    --Delete any existing campaigns that do not align with the program/level campaigns

    delete
      RSC
    from
      dbo.REVENUESPLITCAMPAIGN RSC
    inner join
      @EXISTING_MEMBERSHIPS EM on EM.REVENUESPLITID = RSC.REVENUESPLITID
    where
      not exists
      (
        select top 1 1 from
          @PROGRAM_CAMPAIGNS PC
        where
          RSC.CAMPAIGNID = PC.CAMPAIGNID and
          isnull(RSC.CAMPAIGNSUBPRIORITYID, 0X00) = isnull(PC.CAMPAIGNSUBPRIORITYID, 0X00)
      );

    set @NUMBERDELETED  = @@ROWCOUNT;

    if @CONTEXTCACHE is not null
      set context_info @CONTEXTCACHE;

    --Insert any campaigns that fall within the membership's last activity and do not already exist

    insert into dbo.REVENUESPLITCAMPAIGN
    (
      REVENUESPLITID,
      CAMPAIGNID,
      CAMPAIGNSUBPRIORITYID,
      ADDEDBYID, CHANGEDBYID,
      DATEADDED, DATECHANGED
    )
    select
      EM.REVENUESPLITID,
      PC.CAMPAIGNID,
      PC.CAMPAIGNSUBPRIORITYID,
      @CHANGEAGENTID, @CHANGEAGENTID,
      @CURRENTDATE, @CURRENTDATE
    from
      @EXISTING_MEMBERSHIPS EM
    inner join
      @PROGRAM_CAMPAIGNS PC on PC.MEMBERSHIPLEVELID = EM.MEMBERSHIPLEVELID
    where
      (
        --(EM.MEMBERSHIPDATE is null) or

        (EM.MEMBERSHIPDATE between coalesce(DATEFROM, EM.MEMBERSHIPDATE) and coalesce(DATETO, EM.MEMBERSHIPDATE))
      ) and
      not exists
      (
        select top 1 1 from
          dbo.REVENUESPLITCAMPAIGN RSC
        where
          RSC.REVENUESPLITID = EM.REVENUESPLITID and
          RSC.CAMPAIGNID = PC.CAMPAIGNID and
          isnull(RSC.CAMPAIGNSUBPRIORITYID, 0X00) = isnull(PC.CAMPAIGNSUBPRIORITYID, 0X00)
      );

    set @NUMBERADDED = @@ROWCOUNT;

  end try

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