USP_RECORDOPERATION_RECEIPTINGPROCESSCLEARRESULTS

Executes the "Receipting Process: Clear Results" 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_RECORDOPERATION_RECEIPTINGPROCESSCLEARRESULTS
(
  @ID uniqueidentifier,
  @CHANGEAGENTID uniqueidentifier = null
)
as
  set nocount on;

  declare @CURRENTDATE datetime;
  set @CURRENTDATE = getdate();

  -- WI#1903845: Declared id locally to resolve parameter sniffing issue.

  declare @NEW_ID uniqueidentifier;
  set @NEW_ID = @ID;

  --Cache CONTEXT INFO

  declare @contextCache varbinary(128);
  set @contextCache = CONTEXT_INFO();

  if not @CHANGEAGENTID is null
    set CONTEXT_INFO @CHANGEAGENTID;

  if (coalesce((select top 1 RERECEIPTPAYMENTS from dbo.RECEIPTPREFERENCEINFO), 1)) = 1
  begin

    -- If we are clearing results for the most recent revenue, reset the NEEDSRERECEIPT flag on the revenue record

    update dbo.[REVENUE_EXT]
    set 
      [REVENUE_EXT].[NEEDSRERECEIPT] = 1     
    where 
      [REVENUE_EXT].[DONOTRECEIPT] = 0
      and [REVENUE_EXT].[ID] in 
        (
          select 
            [OUTER_RECEIPT].[REVENUEID]
          from dbo.[REVENUERECEIPT] as [OUTER_RECEIPT]
          where 
            [OUTER_RECEIPT].[RECEIPTINGPROCESSSTATUSID] = @NEW_ID

            -- the revenue was already receipted

            and (select count(*) from dbo.[REVENUERECEIPT] as [INNER_RECEIPT] where [INNER_RECEIPT].[REVENUEID] = [OUTER_RECEIPT].[REVENUEID]) > 1

            -- and was not receipted in a later process

            and not exists (select 1 from dbo.[REVENUERECEIPT] as [INNER_RECEIPT] where [INNER_RECEIPT].[REVENUEID] = [OUTER_RECEIPT].[REVENUEID] and [INNER_RECEIPT].[DATEADDED] > [OUTER_RECEIPT].[DATEADDED])
        )   
  end              

  update 
    dbo.REVENUERECEIPT
  set 
    ORIGINALREVENUERECEIPTID = null,
    CHANGEDBYID = @CHANGEAGENTID,
    DATECHANGED = @CURRENTDATE
  where
    ORIGINALREVENUERECEIPTID in (select RR.ID from dbo.REVENUERECEIPT RR where RR.RECEIPTINGPROCESSSTATUSID = @NEW_ID);

  update 
    dbo.REVENUERECEIPT
  set 
    PREVIOUSREVENUERECEIPTID = null,
    CHANGEDBYID = @CHANGEAGENTID,
    DATECHANGED = @CURRENTDATE
  where
    PREVIOUSREVENUERECEIPTID in (select RR.ID from dbo.REVENUERECEIPT RR where RR.RECEIPTINGPROCESSSTATUSID = @NEW_ID);


  declare @NEXTNUMBER int;
  declare @RECEIPTSTACKID uniqueidentifier;
  declare @RECEIPTPROCESSDATE datetime;

  select 
    @NEXTNUMBER = MIN(RECEIPTNUMBER), 
    @RECEIPTSTACKID = RECEIPTSTACKINFOID, 
    @RECEIPTPROCESSDATE = RECEIPTPROCESSDATE
  from dbo.REVENUERECEIPT 
  where RECEIPTINGPROCESSSTATUSID = @NEW_ID
  group by RECEIPTSTACKINFOID,RECEIPTPROCESSDATE;

  if not exists (select ID from REVENUERECEIPT where @RECEIPTSTACKID = RECEIPTSTACKINFOID and RECEIPTPROCESSDATE > @RECEIPTPROCESSDATE and RECEIPTINGPROCESSSTATUSID <> @NEW_ID)
    exec dbo.USP_REVENUE_SETNEXTRECEIPTNUMBER @RECEIPTSTACKID,@NEXTNUMBER

  delete from dbo.REVENUERECEIPT where RECEIPTINGPROCESSSTATUSID = @NEW_ID;

  --Restore CONTEXT_INFO

  if not @contextCache is null
    set CONTEXT_INFO @contextCache;

  update 
    dbo.BUSINESSPROCESSSTATUS 
  set 
    STATUSCODE = 3,
    CHANGEDBYID = @CHANGEAGENTID,
    DATECHANGED = @CURRENTDATE
  where 
    ID = @NEW_ID;

  return 0;