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;