USP_MEMBERSHIPDUESBATCH_ADJUSTSOLICITCODEDATERANGES

Parameters

Parameter Parameter Type Mode Description
@BILLTOCONSTITUENTID uniqueidentifier IN
@SOLICITCODES xml IN
@CHANGEAGENTID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.USP_MEMBERSHIPDUESBATCH_ADJUSTSOLICITCODEDATERANGES
(
  @BILLTOCONSTITUENTID uniqueidentifier,
  @SOLICITCODES xml,
  @CHANGEAGENTID uniqueidentifier = null
)
as
begin
  if @CHANGEAGENTID is null  
    exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;

  declare @CURRENTDATE datetime = getdate();

  declare @INPUT table
  (
    SOLICITCODEID uniqueidentifier,
    NEW_STARTDATE date
  );

  -- Populate temp table with selected data

  insert into @INPUT
  select
    T.c.value('(SOLICITCODEID)[1]','uniqueidentifier') AS 'SOLICITCODEID',
    T.c.value('(STARTDATE)[1]','date') AS 'STARTDATE'
  from @SOLICITCODES.nodes('/SOLICITCODES/ITEM') T(c);

  begin try
    with UPDATEROWS as
    (
      select
        ROW_NUMBER() over (partition by BATCHMEMBERSHIPDUES.BILLTOCONSTITUENTID, BATCHMEMBERSHIPDUESSOLICITCODE.SOLICITCODEID, BATCHMEMBERSHIPDUESSOLICITCODE.BATCHMEMBERSHIPDUESID order by BATCHMEMBERSHIPDUESSOLICITCODE.STARTDATE desc) as ROWNUMBER,
        BATCHMEMBERSHIPDUESSOLICITCODE.ID as BATCHMEMBERSHIPDUESSOLICITCODEID,
        INPUT.NEW_STARTDATE
      from @INPUT INPUT
        inner join dbo.BATCHMEMBERSHIPDUESSOLICITCODE on INPUT.SOLICITCODEID = BATCHMEMBERSHIPDUESSOLICITCODE.SOLICITCODEID
        inner join dbo.BATCHMEMBERSHIPDUES on BATCHMEMBERSHIPDUES.ID = BATCHMEMBERSHIPDUESSOLICITCODE.BATCHMEMBERSHIPDUESID
        inner join dbo.SOLICITCODE on BATCHMEMBERSHIPDUESSOLICITCODE.SOLICITCODEID = SOLICITCODE.ID
      where
        BATCHMEMBERSHIPDUES.BILLTOCONSTITUENTID = @BILLTOCONSTITUENTID
        and SOLICITCODE.CONSENTCODE in (1, 2) -- EU / Advanced Consent

        and BATCHMEMBERSHIPDUESSOLICITCODE.STARTDATE < INPUT.NEW_STARTDATE
        and BATCHMEMBERSHIPDUESSOLICITCODE.ENDDATE is null
    )
    update dbo.BATCHMEMBERSHIPDUESSOLICITCODE
    set
      ENDDATE = dateadd(day, -1, UPDATEROWS.NEW_STARTDATE),
      DATECHANGED = @CURRENTDATE,
      CHANGEDBYID = @CHANGEAGENTID
    from UPDATEROWS
    where
      BATCHMEMBERSHIPDUESSOLICITCODE.ID = UPDATEROWS.BATCHMEMBERSHIPDUESSOLICITCODEID
      and UPDATEROWS.ROWNUMBER = 1;
  end try
  begin catch
    exec dbo.USP_RAISE_ERROR;
    return 1;
  end catch

  return 0;
end