USP_DATALIST_DISBURSEMENTPROCESS_FINALIZE

A list of unsuccessful disbursements that are user generated.

Parameters

Parameter Parameter Type Mode Description
@DISBURSEMENTPROCESSID uniqueidentifier IN
@RANGESGRID xml IN
@SELECTEDITEM int IN

Definition

Copy


CREATE procedure dbo.USP_DATALIST_DISBURSEMENTPROCESS_FINALIZE(@DISBURSEMENTPROCESSID uniqueidentifier
                                                               ,@RANGESGRID xml
                                                               ,@SELECTEDITEM int)
as
    set nocount on;

  begin try

    declare @TOTALDISBURSEMENTS int;
    declare @BANKACCOUNTID uniqueidentifier;

      select
        @BANKACCOUNTID = DP.BANKACCOUNTID
    from
        dbo.DISBURSEMENTPROCESS as DP
    where
        DP.ID = @DISBURSEMENTPROCESSID;

    select    
      @TOTALDISBURSEMENTS=COUNT(*)
    from
      dbo.DISBURSEMENTPROCESSDISBURSEMENT as DPD
      inner join dbo.FINANCIALTRANSACTION as FTD on DPD.ID = FTD.ID
    where
      DPD.DISBURSEMENTPROCESSID = @DISBURSEMENTPROCESSID
    group by
      DPD.DISBURSEMENTPROCESSID        

    declare @TempTbl table
    (
      [ID] uniqueidentifier
      ,[DISBURSEMENTPROCESSID] uniqueidentifier
      ,[RANGESTART] int
      ,[RANGEEND] int
      ,[RANGECOUNT] int
      ,[USERACTION] tinyint
      ,[STARTNUMBER] nvarchar(max)
    )
    insert into @TempTbl 
      select
        isnull([ID], newid()) ID
        ,@DISBURSEMENTPROCESSID
        ,[RANGESTART]
        ,[RANGEEND]
        ,case when [RANGEEND]<>0
          THEN
            [RANGEEND]-[RANGESTART]+1 
          ELSE
            0
          END
         as [RANGECOUNT]
        ,[USERACTION]
        ,[STARTNUMBER]
      from dbo.UFN_DISBURSEMENTPROCESSFORMNUMBERRANGE_FROMITEMLISTXML(@RANGESGRID)
      where [RANGESTART] = @SELECTEDITEM

      update @TempTbl
      set RANGECOUNT = @TOTALDISBURSEMENTS - (select SUM(RANGECOUNT) from @TempTbl)
      where RANGECOUNT = 0


    -- Do not allow zero for any check numbers as zero is not a valid check number.

    if dbo.UFN_DISBURSEMENTPROCESS_RANGESGRID_DONOTALLOWZERO(@RANGESGRID) = 1
      raiserror('Zero is not a valid check number.', 16, 1)   --ERR_DISBURSEMENTPROCESSFORMNUMBERRANGE_INVALIDCHECKNUMBERGRID



    -- Do not allow the check number to exceed 9 characters.

    if dbo.UFN_DISBURSEMENTPROCESS_RANGESGRID_DONOTALLOWCHECKNUMBERGREATERTHANNINE(@RANGESGRID)=1
      raiserror('Form number cannot exceed 9 characters.',16,1)   --ERR_DISBURSEMENTPROCESSFORMNUMBERRANGE_9DIGITSONLYGRID



    -- Validate that the start numbers are less than the end numbers.

    if dbo.UFN_DISBURSEMENTPROCESS_RANGESGRID_DONOTALLOWSTARTGREATERTHANEND(@DISBURSEMENTPROCESSID, @RANGESGRID)=1
      raiserror('Starting number cannot be greater than ending number.', 16, 1)   --ERR_DISBURSEMENTPROCESSFORMNUMBERRANGE_RANGESTARTGREATERTHANRANGEEND



    -- Validate that the ranges do not overlap.

    if dbo.UFN_DISBURSEMENTPROCESS_RANGESGRID_DONOTALLOWOVERLAPPINGRANGES(@DISBURSEMENTPROCESSID, @RANGESGRID)=1
      raiserror('Form number ranges cannot overlap.', 16, 1)    --ERR_DISBURSEMENTPROCESSFORMNUMBERRANGE_RANGESCANNOTOVERLAP



    --Check to see if we are trying to renumber any checks.

    if (select count(*) from @TempTbl where [USERACTION] = 3)>0
      begin
        -- Validate that the new numbers are not in the bank account transaction table.

        if dbo.UFN_DISBURSEMENTPROCESS_RANGESGRID_DONOTALLOWDUPLICATECHECKNUMBERS(@DISBURSEMENTPROCESSID, @BANKACCOUNTID, @RANGESGRID, 1, @SELECTEDITEM)=1
          raiserror('One or more form numbers has been used in a previous disbursement process.', 16, 1)   --ERR_DISBURSEMENTPROCESSFORMNUMBERRANGE_CHECKNUMBEREXISTSGRID

      end


    -- Validate that the range falls within the available range.

    if dbo.UFN_DISBURSEMENTPROCESS_RANGESGRID_DONOTALLOWOUTSIDERANGE(@DISBURSEMENTPROCESSID, @RANGESGRID)=1
      raiserror('The form number range you have defined for unsuccessful disbursements contains numbers that are not within the number range for this disbursement process.', 16, 1)    --ERR_DISBURSEMENTPROCESSFORMNUMBERRANGE_INCORRECTRANGE



    declare @InvalidIDs table
    (
      [ROWID] int
      ,[DISBURSEMENTPROCESSDISBURSEMENTID] uniqueidentifier
      ,[USERACTION] tinyint
      ,[STARTNUMBER] nvarchar(max)
    )
    insert into @InvalidIDs
      select 
        case 
          when TEMP.USERACTION=3 then
            ROW_NUMBER() over (order by DPD.DATEADDED) + TEMP.STARTNUMBER - 1 
          else
            ROW_NUMBER() over (order by DPD.DATEADDED) + TEMP.RANGESTART - 1 
        end as ROWID
        ,DPD.ID
        ,TEMP.USERACTION
        ,TEMP.STARTNUMBER
      from dbo.BANKACCOUNTTRANSACTION_EXT as BATEXT 
        inner join dbo.DISBURSEMENTPROCESSDISBURSEMENT as DPD on BATEXT.ID = DPD.ID
        inner join dbo.BANKACCOUNTTRANSACTION as BAT on BATEXT.ID = BAT.ID
        inner join @TempTbl as TEMP on TEMP.DISBURSEMENTPROCESSID = BATEXT.DISBURSEMENTPROCESSID
                and BAT.TRANSACTIONNUMBER >= TEMP.RANGESTART and BAT.TRANSACTIONNUMBER <= TEMP.RANGEEND
      where DPD.DISBURSEMENTPROCESSID = @DISBURSEMENTPROCESSID
        order by TEMP.RANGESTART

    select
      C.KEYNAME as PAYEE
      ,BAT.TRANSACTIONNUMBER as CURRENTNUMBER
      ,BAT.AMOUNT as AMOUNT
      ,INV.USERACTION as USERACTION
      ,INV.ROWID as STARTNUMBER
    from dbo.BANKACCOUNTTRANSACTION as BAT 
      inner join dbo.FINANCIALTRANSACTION as FT on BAT.ID = FT.ID and FT.TYPECODE = 255
      inner join dbo.CONSTITUENT as C on FT.CONSTITUENTID = C.ID
      inner join @InvalidIDs as INV on INV.DISBURSEMENTPROCESSDISBURSEMENTID = FT.ID
    where 
      BAT.ID in (select DISBURSEMENTPROCESSDISBURSEMENTID from @InvalidIDs)    

  end try

  begin catch
    exec dbo.USP_RAISE_ERROR
    return 1
  end catch