UFN_REVENUERECEIPT_GETNEWUNIQUERECEIPTNUMBERS

Returns a set of unique receipt numbers between the supplied numbers

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@STARTINGRECEIPTNUMBER int IN
@COUNT int IN
@RECEIPTSTACKINFOID uniqueidentifier IN

Definition

Copy


CREATE function dbo.UFN_REVENUERECEIPT_GETNEWUNIQUERECEIPTNUMBERS(    
    @STARTINGRECEIPTNUMBER int = 0,
    @COUNT int = 0,
    @RECEIPTSTACKINFOID uniqueidentifier = null)
returns @RESULTS table
(
OLDRECEIPTNUM int,
NEWRECEIPTNUM int
)
as
begin

    if @COUNT = 0 return

    declare @DUPLICATES TABLE (ROWNUM int IDENTITY(0,1), RECEIPTNUM int)
    declare @NUMBEROFDUPLICATES as int
    declare @STARTINGNUMBER as int
    declare @idx as int

    insert into @DUPLICATES
    select RECEIPTNUMBER from dbo.REVENUERECEIPT RR 
    where RECEIPTSTACKINFOID = @RECEIPTSTACKINFOID and RR.RECEIPTNUMBER between @STARTINGRECEIPTNUMBER and (@STARTINGRECEIPTNUMBER+@COUNT-1
    order by RR.RECEIPTNUMBER

    select @NUMBEROFDUPLICATES = count(*) from @DUPLICATES

    set @idx = 0
    declare @NEWNUM int
    set @NEWNUM = @STARTINGRECEIPTNUMBER+@COUNT

  declare @ISMAX bit
  set @ISMAX = 0
  if not exists (select max(RECEIPTNUMBER) from dbo.REVENUERECEIPT where RECEIPTNUMBER>@NEWNUM and RECEIPTSTACKINFOID = @RECEIPTSTACKINFOID)
  set @ISMAX = 1

  if(@ISMAX = 0
  begin
      while @idx < @NUMBEROFDUPLICATES
          begin
        if exists (select * from dbo.REVENUERECEIPT where RECEIPTNUMBER = @NEWNUM and RECEIPTSTACKINFOID = @RECEIPTSTACKINFOID)
          with RRCTE As
          (
          select RECEIPTNUMBER as RECEIPTNUMBER,RECEIPTSTACKINFOID from dbo.REVENUERECEIPT where RECEIPTSTACKINFOID = @RECEIPTSTACKINFOID and RECEIPTNUMBER >= @NEWNUM 
          )
          select @NEWNUM = min(RRCTE.RECEIPTNUMBER)+1 from RRCTE
          left join RRCTE RRCTE2 on RRCTE2.RECEIPTNUMBER = RRCTE.RECEIPTNUMBER +1
          where RRCTE2.RECEIPTNUMBER is null

            insert @RESULTS (OLDRECEIPTNUM,NEWRECEIPTNUM) select top 1 RECEIPTNUM, @NEWNUM from @DUPLICATES where ROWNUM = @idx;
            set @NEWNUM = @NEWNUM+1;
            set @idx = @idx+1;
          end
  end
  else    
    begin
      while @idx < @NUMBEROFDUPLICATES
            begin   
              insert @RESULTS (OLDRECEIPTNUM,NEWRECEIPTNUM) select top 1 RECEIPTNUM, @NEWNUM from @DUPLICATES where ROWNUM = @idx;
              set @NEWNUM = @NEWNUM+1;
              set @idx = @idx+1;
            end
    end

    return

end