USP_WRITEOFF_FIXSPLITS2

Parameters

Parameter Parameter Type Mode Description
@WRITEOFFID uniqueidentifier IN
@PLEDGEID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CHANGEDATE datetime IN
@POSTDATE datetime IN

Definition

Copy


CREATE procedure dbo.USP_WRITEOFF_FIXSPLITS2 (
  @WRITEOFFID uniqueidentifier
  ,@PLEDGEID uniqueidentifier
  ,@CHANGEAGENTID uniqueidentifier
  ,@CHANGEDATE datetime
  ,@POSTDATE datetime
  )
as
set nocount on;

declare @contextCache varbinary(128);
declare @AdjustmentID uniqueidentifier

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

set @contextCache = CONTEXT_INFO();

if not @CHANGEAGENTID is null
  set CONTEXT_INFO @CHANGEAGENTID;

select @AdjustmentID = ID
from dbo.WRITEOFFADJUSTMENT
where WRITEOFFID = @WRITEOFFID
  and POSTSTATUSCODE = 1

set @AdjustmentID = isnull(@AdjustmentID, newid())

if not exists (
    select 1
    from dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT
    where ID = @AdjustmentID
    )
  insert into dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT (
    ID
    ,[DATE]
    ,ADDEDBYID
    ,CHANGEDBYID
    ,DATEADDED
    ,DATECHANGED
    )
  values (
    @AdjustmentID
    ,convert([DATE], @CHANGEDATE)
    ,@CHANGEAGENTID
    ,@CHANGEAGENTID
    ,@CHANGEDATE
    ,@CHANGEDATE
    )

-- in the case of adjusted unposted lineitems remove REVERSEDLINEITEMID reference before the delete 

update T1
set REVERSEDLINEITEMID = null
from dbo.FINANCIALTRANSACTIONLINEITEM T1
inner join dbo.FINANCIALTRANSACTIONLINEITEM T2 on T1.REVERSEDLINEITEMID = T2.ID
where T2.FINANCIALTRANSACTIONID = @WRITEOFFID
  and T2.POSTSTATUSCODE != 2

delete
from dbo.WRITEOFFSPLIT
where WRITEOFFID = @WRITEOFFID;

if not @contextCache is null
  set CONTEXT_INFO @contextCache;

declare @TRANSACTIONTYPECODE tinyint = 0;

select @TRANSACTIONTYPECODE = FINANCIALTRANSACTION.TYPECODE
from dbo.FINANCIALTRANSACTION
where FINANCIALTRANSACTION.ID = @PLEDGEID
  and DELETEDON is null;

declare @WriteOffLineItems table (
  ID uniqueidentifier
  ,DESIGNATIONID uniqueidentifier
  ,APPLICATIONCODE tinyint default 0
  ,TYPECODE tinyint default 0
  ,TRANSACTIONAMOUNT money
  ,BASEAMOUNT money
  ,ORGAMOUNT money
  ,SEQUENCE int
  ,POSTDATE date
  ,POSTSTATUSCODE tinyint
  ,SOURCELINEITEMID uniqueidentifier
  )

if @TRANSACTIONTYPECODE = 7
  insert into @WriteOffLineItems (
    ID
    ,DESIGNATIONID
    ,TRANSACTIONAMOUNT
    ,BASEAMOUNT
    ,ORGAMOUNT
    ,SEQUENCE
    ,POSTDATE
    ,POSTSTATUSCODE
    ,SOURCELINEITEMID
    )
  select top 1 newid()
    ,REVENUESPLIT_EXT.DESIGNATIONID
    ,FINANCIALTRANSACTIONLINEITEM.TRANSACTIONAMOUNT
    ,FINANCIALTRANSACTIONLINEITEM.BASEAMOUNT
    ,FINANCIALTRANSACTIONLINEITEM.ORGAMOUNT
    ,(
      select max(SEQUENCE)
      from dbo.FINANCIALTRANSACTIONLINEITEM
      where FINANCIALTRANSACTIONID = @WRITEOFFID
      ) + 1
    ,FINANCIALTRANSACTION.POSTDATE
    ,case (
        select POSTSTATUSCODE
        from dbo.FINANCIALTRANSACTION
        where ID = @WRITEOFFID
        )
      when 3
        then 3
      else 1
      end
    ,FINANCIALTRANSACTIONLINEITEM.ID
  from FINANCIALTRANSACTIONLINEITEM
  inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
  inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
  where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @PLEDGEID
    and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
    and FINANCIALTRANSACTIONLINEITEM.TYPECODE = 0
else
  insert into @WriteOffLineItems (
    ID
    ,DESIGNATIONID
    ,APPLICATIONCODE
    ,TYPECODE
    ,TRANSACTIONAMOUNT
    ,BASEAMOUNT
    ,ORGAMOUNT
    ,SEQUENCE
    ,POSTDATE
    ,POSTSTATUSCODE
    ,SOURCELINEITEMID
    )
  select newid()
    ,WOSPLIT.DESIGNATIONID
    ,REVENUESPLIT_EXT.APPLICATIONCODE
    ,REVENUESPLIT_EXT.TYPECODE
    ,WOSPLIT.TRANSACTIONAMOUNT
    ,WOSPLIT.AMOUNT
    ,WOSPLIT.ORGANIZATIONAMOUNT
    ,(
      select max(SEQUENCE)
      from dbo.FINANCIALTRANSACTIONLINEITEM
      where FINANCIALTRANSACTIONID = @WRITEOFFID
      ) + row_number() over (
      order by WOSPLIT.AMOUNT
      )
    ,
    case WO.POSTSTATUSCODE
      when 3
        then null
      else isnull(@POSTDATE, WO.POSTDATE)  -- @POSTDATE is adj postdate; there may be no adjustment involved  (i.e not posted)

      end
    ,case WO.POSTSTATUSCODE
      when 3
        then 3
      else 1
      end
    ,WOSPLIT.REVENUESPLITID
  from (
    select 
      ISPLIT.DESIGNATIONID
      ,sum(IWOSPLIT.TRANSACTIONAMOUNT) TRANSACTIONAMOUNT
      ,sum(IWOSPLIT.AMOUNT) AMOUNT
      ,sum(IWOSPLIT.ORGANIZATIONAMOUNT) ORGANIZATIONAMOUNT
      ,ISPLIT.REVENUESPLITID
      ,IWOSPLIT.WRITEOFFID
    from dbo.INSTALLMENTSPLITWRITEOFF IWOSPLIT
    inner join dbo.INSTALLMENTSPLIT ISPLIT on IWOSPLIT.INSTALLMENTSPLITID = ISPLIT.ID
    where IWOSPLIT.WRITEOFFID = @WRITEOFFID
      and ISPLIT.PLEDGEID = @PLEDGEID
    group by ISPLIT.DESIGNATIONID
      ,ISPLIT.REVENUESPLITID
      ,IWOSPLIT.WRITEOFFID
    ) WOSPLIT
    inner join dbo.REVENUESPLIT_EXT on WOSPLIT.REVENUESPLITID = REVENUESPLIT_EXT.ID
    inner join dbo.FINANCIALTRANSACTION WO on WOSPLIT.WRITEOFFID = WO.ID

insert into dbo.FINANCIALTRANSACTIONLINEITEM (
  ID
  ,FINANCIALTRANSACTIONID
  ,TRANSACTIONAMOUNT
  ,BASEAMOUNT
  ,ORGAMOUNT
  ,ADDEDBYID
  ,CHANGEDBYID
  ,DATEADDED
  ,DATECHANGED
  ,SEQUENCE
  ,POSTDATE
  ,POSTSTATUSCODE
  ,DESCRIPTION
  ,SOURCELINEITEMID
  ,FINANCIALTRANSACTIONLINEITEMADJUSTMENTID
  )
select ID
  ,@WRITEOFFID
  ,TRANSACTIONAMOUNT
  ,BASEAMOUNT
  ,ORGAMOUNT
  ,@CHANGEAGENTID
  ,@CHANGEAGENTID
  ,@CHANGEDATE
  ,@CHANGEDATE
  ,isnull(SEQUENCE, 1)
  ,POSTDATE
  ,POSTSTATUSCODE
  ,''
  ,SOURCELINEITEMID
  ,@AdjustmentID
from @WriteOffLineItems

insert into dbo.REVENUESPLIT_EXT (
  ID
  ,DESIGNATIONID
  ,APPLICATIONCODE
  ,TYPECODE
  ,ADDEDBYID
  ,CHANGEDBYID
  ,DATEADDED
  ,DATECHANGED
  )
select ID
  ,DESIGNATIONID
  ,APPLICATIONCODE
  ,TYPECODE
  ,@CHANGEAGENTID
  ,@CHANGEAGENTID
  ,@CHANGEDATE
  ,@CHANGEDATE
from @WriteOffLineItems

return 0;