USP_SAVE_GIFTFEEADJUSTMENT_2

Parameters

Parameter Parameter Type Mode Description
@REVENUEID uniqueidentifier IN
@ADJUSTMENTID uniqueidentifier INOUT
@CHANGEAGENTID uniqueidentifier IN
@CHANGEDATE datetime IN
@DATE datetime IN
@POSTDATE datetime IN
@ADJUSTMENTREASON nvarchar(300) IN
@ISNEWREVENUE bit IN
@ADJUSTMENTREASONCODEID uniqueidentifier IN
@POSTSTATUSCODE tinyint IN
@UPDATEGIFTFEEOPTION tinyint IN
@TEMP_REVENUESPLITGIFTFEE_XML xml IN

Definition

Copy


CREATE procedure dbo.USP_SAVE_GIFTFEEADJUSTMENT_2
(
    @REVENUEID uniqueidentifier = null,
    @ADJUSTMENTID uniqueidentifier = null output,
    @CHANGEAGENTID uniqueidentifier = null,
    @CHANGEDATE datetime = null,
    @DATE datetime = null,
    @POSTDATE datetime = null,
    @ADJUSTMENTREASON nvarchar(300) = null,
    @ISNEWREVENUE bit = 0,
    @ADJUSTMENTREASONCODEID uniqueidentifier = null,
    @POSTSTATUSCODE tinyint = 1,
    @UPDATEGIFTFEEOPTION tinyint = null,
    @TEMP_REVENUESPLITGIFTFEE_XML xml = null
)
with execute as owner
as
/*call this procedure before making changes to the revenue tables.*/

set nocount on;

declare @REVENUEPOSTDATE datetime;
declare @CONSTITUENTID uniqueidentifier;

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

if @CHANGEDATE is null
    set @CHANGEDATE = getdate();

--JamesWill WI197067 2012-03-08 Ensure that the date used does not have a timestamp

if not @DATE is null
    set @DATE = dbo.UFN_DATE_GETEARLIESTTIME(@DATE);

if @UPDATEGIFTFEEOPTION is null
    set @UPDATEGIFTFEEOPTION = 1

declare @FTMPOSTSTATUSCODE tinyint;
set @FTMPOSTSTATUSCODE = case @POSTSTATUSCODE when 2 then 3 when 0 then 2 else 1 end;

-- Check GL business rule for this account system and set to 'Do not post' if needed.

declare @PDACCOUNTSYSTEMID uniqueidentifier;
select @PDACCOUNTSYSTEMID = PDACCOUNTSYSTEMID from dbo.PDACCOUNTSYSTEMFORREVENUE where ID = @REVENUEID;
if dbo.UFN_PDACCOUNTSYSTEM_ALLOWGLDISTRIBUTIONS(@PDACCOUNTSYSTEMID) = 0
begin
  set @POSTSTATUSCODE = 2  -- Do not post

  set @POSTDATE = null
end

--Is the revenue posted?

if (    select count(REVENUE.ID) from dbo.REVENUE
        inner join dbo.REVENUEPOSTED on REVENUEPOSTED.ID = REVENUE.ID
        where REVENUE.ID = @REVENUEID) = 0
    raiserror('You cannot adjust an unposted gift fee', 13, 1)

--kwb Create FINANCIALTRANSACTIONLINEITEMADJUSTMENT records for original write-offs that will be adjusted

exec dbo.USP_CREATEINITIALADJUSTMENTHISTORY @REVENUEID, @CHANGEAGENTID

select @CONSTITUENTID = CONSTITUENTID from dbo.FINANCIALTRANSACTION where ID = @REVENUEID

--Update unposted adjustment if existing

select @ADJUSTMENTID = ID
from dbo.GIFTFEEADJUSTMENT
where GIFTFEEADJUSTMENT.REVENUEID = @REVENUEID and POSTSTATUSCODE <> 0;

if @ADJUSTMENTID is null
    set @ADJUSTMENTID = newid();

if @ADJUSTMENTID is not null and exists(select 1 from dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT where ID = @ADJUSTMENTID)
    update dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT set
        ADJUSTMENTREASONCODEID = @ADJUSTMENTREASONCODEID
        ,REASON = @ADJUSTMENTREASON
        ,CONSTITUENTID = @CONSTITUENTID
        ,DATE = @DATE
        ,CHANGEDBYID = @CHANGEAGENTID
        ,DATECHANGED = @CHANGEDATE
    where ID = @ADJUSTMENTID;
else if @ADJUSTMENTID is not null
    insert into dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT (
        ID
        ,ADJUSTMENTREASONCODEID
        ,REASON
        ,CONSTITUENTID
        ,DATE
        ,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
    values (@ADJUSTMENTID
        ,@ADJUSTMENTREASONCODEID
        ,@ADJUSTMENTREASON
        ,@CONSTITUENTID
        ,@DATE
        ,@CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);

update dbo.GIFTFEEADJUSTMENT
set DATE = @DATE
    POSTDATE = @POSTDATE,
    REASON = @ADJUSTMENTREASON,
    REASONCODEID = @ADJUSTMENTREASONCODEID,
    CHANGEDBYID = @CHANGEAGENTID,
    DATECHANGED = @CHANGEDATE,
    POSTSTATUSCODE = @POSTSTATUSCODE
where ID = @ADJUSTMENTID;

if @@ROWCOUNT = 0
begin
    declare @TRANSACTIONAMOUNT money;
    declare @AMOUNT money;
    declare @ORGANIZATIONAMOUNT money;
    declare @TRANSACTIONCURRENCYID uniqueidentifier;
    declare @BASECURRENCYID uniqueidentifier;
    declare @BASEEXCHANGERATEID uniqueidentifier;
    declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;

    select
        @TRANSACTIONAMOUNT = sum(RSGF.TRANSACTIONAMOUNT),
        @AMOUNT = sum(RSGF.FEE),
        @ORGANIZATIONAMOUNT = sum(RSGF.ORGANIZATIONAMOUNT),
        @TRANSACTIONCURRENCYID = RSGF.TRANSACTIONCURRENCYID,
        @BASECURRENCYID = RSGF.BASECURRENCYID,
        @BASEEXCHANGERATEID = RSGF.BASEEXCHANGERATEID,
        @ORGANIZATIONEXCHANGERATEID = RSGF.ORGANIZATIONEXCHANGERATEID
    from dbo.REVENUESPLITGIFTFEE RSGF
    left join dbo.REVENUESPLIT RS on RS.ID = RSGF.ID
    where RS.REVENUEID = @REVENUEID
    group by RSGF.TRANSACTIONCURRENCYID, RSGF.BASECURRENCYID, RSGF.BASEEXCHANGERATEID, RSGF.ORGANIZATIONEXCHANGERATEID;

    --Log Adjustment if new

    insert into dbo.GIFTFEEADJUSTMENT(
        ID,
        REVENUEID,
        PREVIOUSAMOUNT,
        DATE,
        POSTDATE,
        POSTSTATUSCODE,
        REASON,
        REASONCODEID,
        ADDEDBYID,
        CHANGEDBYID,
        DATEADDED,
        DATECHANGED,
        BASECURRENCYID,
        TRANSACTIONCURRENCYID,
        TRANSACTIONPREVIOUSAMOUNT,
        BASEEXCHANGERATEID,
        ORGANIZATIONPREVIOUSAMOUNT,
        ORGANIZATIONEXCHANGERATEID
    )
    select
        @ADJUSTMENTID,
        @REVENUEID,
        coalesce(@AMOUNT, 0),
        @DATE,
        @POSTDATE,
        @POSTSTATUSCODE,
        @ADJUSTMENTREASON,
        @ADJUSTMENTREASONCODEID,
        @CHANGEAGENTID,
        @CHANGEAGENTID,
        @CHANGEDATE,
        @CHANGEDATE,
        coalesce(@BASECURRENCYID, R.BASECURRENCYID),
        coalesce(@TRANSACTIONCURRENCYID, R.TRANSACTIONCURRENCYID),
        coalesce(@TRANSACTIONAMOUNT, 0),
        coalesce(@BASEEXCHANGERATEID, R.BASEEXCHANGERATEID),
        coalesce(@ORGANIZATIONAMOUNT, 0),
        coalesce(@ORGANIZATIONEXCHANGERATEID, R.ORGANIZATIONEXCHANGERATEID)
    from
        dbo.REVENUE R
    where
        R.ID = @REVENUEID;

    declare @LINEITEMS UDT_GENERICID

    if @UPDATEGIFTFEEOPTION = 0 and @TEMP_REVENUESPLITGIFTFEE_XML is not null
    begin

        declare @LINEITEMSFROMXML table
        (
            ID uniqueidentifier,
            FEE money,
            FTLIDELETED bit
        )

        insert into @LINEITEMSFROMXML (ID, FEE, FTLIDELETED)
        select 
            T.c.value('(ID)[1]','uniqueidentifier') as ID, 
            T.c.value('(FEE)[1]','money') as FEE,
            T.c.value('(FTLIDELETED)[1]','bit') as FTLIDELETED
        from 
            @TEMP_REVENUESPLITGIFTFEE_XML.nodes('REVENUESPLITGIFTFEES/ITEM') T(c)

        insert into @LINEITEMS (ID) 
        select FTLIGIFTFEE.ID
        from     
        dbo.FINANCIALTRANSACTION FT
           inner join dbo.FINANCIALTRANSACTIONLINEITEM FTLIREVERSAL on FT.ID = FTLIREVERSAL.FINANCIALTRANSACTIONID 
          inner join dbo.FINANCIALTRANSACTIONLINEITEM FTLIGIFTFEE on FTLIGIFTFEE.SOURCELINEITEMID = FTLIREVERSAL.ID
          inner join @LINEITEMSFROMXML LI on LI.ID = FTLIREVERSAL.REVERSEDLINEITEMID
        where
            FTLIREVERSAL.[TYPECODE] = 0 and 
            FT.ID = @REVENUEID and LI.FTLIDELETED = 1

    end

    if @UPDATEGIFTFEEOPTION <> 0
    begin
        insert into @LINEITEMS (ID)
        select distinct
            LI.ID
        from
            dbo.FINANCIALTRANSACTIONLINEITEM LI
        where
            LI.FINANCIALTRANSACTIONID = @REVENUEID 
            and LI.TYPECODE = 7 
            and LI.DELETEDON is null
    end

    --Log reversals in the GLTRANSACTION table

    if @POSTSTATUSCODE <> 2 
    begin
        exec dbo.USP_SAVE_REVERSAL_LINEITEM @LINEITEMS, @ADJUSTMENTID, @CHANGEAGENTID, @CHANGEDATE, @POSTDATE, @FTMPOSTSTATUSCODE

        exec dbo.USP_SAVE_HISTORICAL_LINEITEM @LINEITEMS, @ADJUSTMENTID, @CHANGEAGENTID, @CHANGEDATE, @POSTDATE, @FTMPOSTSTATUSCODE

        update FTLI set
            SOURCELINEITEMID = isnull(PAYMENTLI.REVERSEDLINEITEMID, FTLI.SOURCELINEITEMID)
            ,DATECHANGED = @CHANGEDATE
            ,CHANGEDBYID = @CHANGEAGENTID
        from dbo.FINANCIALTRANSACTIONLINEITEM as FTLI
        inner join dbo.FINANCIALTRANSACTIONLINEITEM PAYMENTLI on PAYMENTLI.ID = FTLI.SOURCELINEITEMID
        where FTLI.FINANCIALTRANSACTIONID = @REVENUEID
            and FTLI.POSTSTATUSCODE != 2
            and FTLI.FINANCIALTRANSACTIONLINEITEMADJUSTMENTID = @ADJUSTMENTID
            and FTLI.DELETEDON is null;

    end
end
else /*make sure @ADJUSTMENTID gets set to the correct value*/
begin
    --declare @FTMPOSTSTATUSCODE tinyint;

    --set @FTMPOSTSTATUSCODE = case @POSTSTATUSCODE when 2 then 3 when 0 then 2 else 1 end;


    update dbo.FINANCIALTRANSACTIONLINEITEM set
        POSTDATE = @POSTDATE
        ,POSTSTATUSCODE = @FTMPOSTSTATUSCODE
        ,SOURCELINEITEMID = isnull((select REVERSEDLINEITEMID from dbo.FINANCIALTRANSACTIONLINEITEM where ID = FTLI.SOURCELINEITEMID), FTLI.SOURCELINEITEMID)
        ,DATECHANGED = @CHANGEDATE
        ,CHANGEDBYID = @CHANGEAGENTID
    from dbo.FINANCIALTRANSACTIONLINEITEM as FTLI
    where FTLI.FINANCIALTRANSACTIONID = @REVENUEID
        and FTLI.POSTSTATUSCODE != 2
        and FTLI.FINANCIALTRANSACTIONLINEITEMADJUSTMENTID = @ADJUSTMENTID
        and FTLI.DELETEDON is null;

    -- Update the post date on the GL transaction records

    update dbo.JOURNALENTRY set
        JOURNALENTRY.POSTDATE = @POSTDATE
        ,JOURNALENTRY.DATECHANGED = @CHANGEDATE
        ,JOURNALENTRY.CHANGEDBYID = @CHANGEAGENTID
    from dbo.FINANCIALTRANSACTIONLINEITEM as FTLI
    inner join dbo.JOURNALENTRY as JE on JE.FINANCIALTRANSACTIONLINEITEMID = FTLI.ID
    inner join dbo.JOURNALENTRY_EXT as JEE on JE.ID = JEE.ID
    where FTLI.FINANCIALTRANSACTIONID = @REVENUEID
        and FTLI.POSTSTATUSCODE != 2
        and FTLI.FINANCIALTRANSACTIONLINEITEMADJUSTMENTID = @ADJUSTMENTID
        and FTLI.DELETEDON is null
        and (JEE.OUTDATED = 0 or JEE.TABLENAMECODE = 0);
end

-- create gift fees if USP_SAVE_HISTORICAL_LINEITEM does not handle creating it

if @POSTSTATUSCODE <> 2
begin
    if (
            not exists (
                select 1
                from dbo.FINANCIALTRANSACTIONLINEITEM LI
                where LI.FINANCIALTRANSACTIONID = @REVENUEID
                    and LI.TYPECODE = 7
                    and LI.DELETEDON is null
                    and LI.FINANCIALTRANSACTIONLINEITEMADJUSTMENTID is null
                )
            )
    begin
        insert FINANCIALTRANSACTIONLINEITEM (
            ID
            ,FINANCIALTRANSACTIONID
            ,TRANSACTIONAMOUNT
            ,VISIBLE
            ,DESCRIPTION
            ,SEQUENCE
            ,TYPECODE
            ,POSTDATE
            ,POSTSTATUSCODE
            ,BASEAMOUNT
            ,ORGAMOUNT
            ,SOURCELINEITEMID
            ,FINANCIALTRANSACTIONLINEITEMADJUSTMENTID
            ,BATCHID
            ,ADDEDBYID
            ,CHANGEDBYID
            ,DATEADDED
            ,DATECHANGED
            )
        select newid()
            ,@REVENUEID
            ,RSGF.TRANSACTIONAMOUNT
            ,1
            ,'Gift Fee'
            ,row_number() over (
                order by FTLI.sequence
                )
            ,7
            ,@POSTDATE
            ,1
            ,RSGF.FEE
            ,RSGF.ORGANIZATIONAMOUNT
            ,RSGF.ID
            ,@ADJUSTMENTID
            ,null
            ,@CHANGEAGENTID
            ,@CHANGEAGENTID
            ,@CHANGEDATE
            ,@CHANGEDATE
        from dbo.REVENUESPLITGIFTFEE RSGF
        inner join dbo.FINANCIALTRANSACTIONLINEITEM as FTLI on RSGF.ID = FTLI.ID
        left join dbo.FINANCIALTRANSACTIONLINEITEM as GIFTFEELI on GIFTFEELI.SOURCELINEITEMID =  RSGF.ID and GIFTFEELI.FINANCIALTRANSACTIONID = @REVENUEID
        where FTLI.FINANCIALTRANSACTIONID = @REVENUEID
        and GIFTFEELI.DELETEDON is null
        and (GIFTFEELI.FINANCIALTRANSACTIONLINEITEMADJUSTMENTID != @ADJUSTMENTID or GIFTFEELI.FINANCIALTRANSACTIONLINEITEMADJUSTMENTID is null)
    end
end


declare @Error nvarchar(255) = ''
if @@ROWCOUNT > 0 and @POSTSTATUSCODE <> 2
    set @Error = dbo.UFN_GLDISTRIBUTION_VALIDPOSTDATE(@POSTDATE)

if @Error <> '' 
    raiserror(@Error, 13, 1)