USP_DATAFORMTEMPLATE_ADD_AUCTIONDONATIONWRITEOFF

The save procedure used by the add dataform template "Auction Donation Write-Off Add Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT The output parameter indicating the ID of the record added.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@REVENUEID uniqueidentifier IN Input parameter indicating the context ID for the record being added.
@DATE datetime IN Date
@WRITEOFFTOTALAMOUNT money IN Amount
@POSTSTATUSCODE tinyint IN GL post status
@POSTDATE datetime IN GL post date
@REASON nvarchar(300) IN Details
@INSTALLMENTS xml IN
@REASONCODEID uniqueidentifier IN Reason code
@RECOGNITIONCREDITS xml IN Recognition credits

Definition

Copy


                    CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_AUCTIONDONATIONWRITEOFF
                    (
                        @ID uniqueidentifier = null output,
                        @CHANGEAGENTID uniqueidentifier,
                        @REVENUEID uniqueidentifier,
                        @DATE datetime,
                        @WRITEOFFTOTALAMOUNT money = 0,
                        @POSTSTATUSCODE tinyint = 1,
                        @POSTDATE datetime = null,
                        @REASON nvarchar(300) = null,
                        @INSTALLMENTS xml,
                        @REASONCODEID uniqueidentifier = null,
                        @RECOGNITIONCREDITS xml = null
                    )
                    as
                    set nocount on;

                    -- 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 = @ID;

                        declare @ALLOWGLDISTRIBUTIONS bit;
                        set @ALLOWGLDISTRIBUTIONS = dbo.UFN_PDACCOUNTSYSTEM_ALLOWGLDISTRIBUTIONS(@PDACCOUNTSYSTEMID);
                        if @ALLOWGLDISTRIBUTIONS = 0 
                            begin
                                set @POSTSTATUSCODE = 2        -- Do not post

                                set @POSTDATE = null
                            end
                        -- ****        


                    declare @CURRENTDATE datetime;
                        declare @PLEDGEID uniqueidentifier;
                        declare @PLEDGEAMOUNT money;
                        declare @BASEAMOUNT money;
                        declare @TRANSACTIONTYPECODE tinyint;

                        declare @ORGANIZATIONCURRENCYID uniqueidentifier;
                        declare @BASECURRENCYID uniqueidentifier;
                        declare @ORGANIZATIONAMOUNT money;
                        declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;
                        declare @TRANSACTIONAMOUNT money;
                        declare @TRANSACTIONCURRENCYID uniqueidentifier;
                        declare @BASEEXCHANGERATEID uniqueidentifier;

                        if @ID is null
                            set @ID = NewID();

                        set @CURRENTDATE = GetDate();

                        set @ORGANIZATIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();

                        select 
                            @PLEDGEID = REVENUE.ID,
                            @TRANSACTIONTYPECODE = REVENUE.TRANSACTIONTYPECODE,
                            @PLEDGEAMOUNT = REVENUE.TRANSACTIONAMOUNT,
                            @BASEAMOUNT = REVENUE.AMOUNT,
                            @BASECURRENCYID = REVENUE.BASECURRENCYID,
                            @ORGANIZATIONAMOUNT = REVENUE.ORGANIZATIONAMOUNT,
                            @ORGANIZATIONEXCHANGERATEID = REVENUE.ORGANIZATIONEXCHANGERATEID,
                            @TRANSACTIONAMOUNT = REVENUE.TRANSACTIONAMOUNT,
                            @TRANSACTIONCURRENCYID = REVENUE.TRANSACTIONCURRENCYID,
                            @BASEEXCHANGERATEID = REVENUE.BASEEXCHANGERATEID
                        from 
                            dbo.REVENUE
                        where
                            REVENUE.ID = @REVENUEID;

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

                        begin try
                            --Auction donations have more restrictions around write-offs

                            declare @WRITEOFFCOUNT int = 0;
                            select @WRITEOFFCOUNT = count(*) from dbo.WRITEOFF 
                            where WRITEOFF.REVENUEID = @PLEDGEID;

                            if @WRITEOFFCOUNT > 0
                                raiserror('BBERR_AUCTIONDONATION_MULTIPLEWRITEOFFS', 13, 1);

                            if @PLEDGEAMOUNT <> @WRITEOFFTOTALAMOUNT
                                raiserror('BBERR_AUCTIONDONATION_WRITEOFFENTIREAMOUNT', 13, 1);

                            insert into dbo.WRITEOFF (ID,REVENUEID,DATE,POSTSTATUSCODE,POSTDATE,REASON,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED, REASONCODEID)
                                values (@ID,@PLEDGEID,@DATE,@POSTSTATUSCODE,@POSTDATE,@REASON,@CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE, @REASONCODEID);

                            --Auction donations do not have installments

                            insert into dbo.WRITEOFFSPLIT(ID, WRITEOFFID, DESIGNATIONID, AMOUNT, 
                                                          BASECURRENCYID, ORGANIZATIONAMOUNT, ORGANIZATIONEXCHANGERATEID, TRANSACTIONAMOUNT, 
                                                          TRANSACTIONCURRENCYID, BASEEXCHANGERATEID,
                                                          ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                                select top 1 
                                    newid(), @ID, DESIGNATIONID, AMOUNT,
                                    BASECURRENCYID, ORGANIZATIONAMOUNT, ORGANIZATIONEXCHANGERATEID, TRANSACTIONAMOUNT,
                                    TRANSACTIONCURRENCYID, BASEEXCHANGERATEID,
                                    @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
                                from REVENUESPLIT 
                                where REVENUESPLIT.REVENUEID = @PLEDGEID

                            --Save the write-off GL distributions

                            if @POSTSTATUSCODE <> 2
                                exec dbo.USP_SAVE_WRITEOFFGLDISTRIBUTION @PLEDGEID, @CHANGEAGENTID, @CURRENTDATE;

                            -- Update recognition credit amounts

                            update dbo.REVENUERECOGNITION set
                                AMOUNT = UPDATEDRECOGNITIONCREDITS.ADJUSTEDAMOUNT,
                                ORGANIZATIONAMOUNT = 
                                    case 
                                        when @BASECURRENCYID <> @ORGANIZATIONCURRENCYID
                                            then dbo.UFN_CURRENCY_CONVERT(UPDATEDRECOGNITIONCREDITS.ADJUSTEDAMOUNT, @ORGANIZATIONEXCHANGERATEID)
                                        else
                                            UPDATEDRECOGNITIONCREDITS.ADJUSTEDAMOUNT
                                    end,
                                DATECHANGED = @CURRENTDATE,
                                CHANGEDBYID = @CHANGEAGENTID
                            from dbo.REVENUERECOGNITION
                            inner join
                            (
                                select
                                    T.c.value('(ID)[1]','uniqueidentifier') AS 'ID',
                                    T.c.value('(ADJUSTEDAMOUNT)[1]','money') AS 'ADJUSTEDAMOUNT'
                                from @RECOGNITIONCREDITS.nodes('/RECOGNITIONCREDITS/ITEM') T(c)
                            ) UPDATEDRECOGNITIONCREDITS on REVENUERECOGNITION.ID = UPDATEDRECOGNITIONCREDITS.ID
                        end try

                        begin catch
                            exec dbo.USP_RAISE_ERROR;
                            return 1;
                        end catch

                        return 0;