USP_GLOBALCHANGE_AUCTIONDONATIONWRITEOFF
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CHANGEAGENTID | uniqueidentifier | IN | |
@ASOF | datetime | IN | |
@NUMBERADDED | int | INOUT | |
@NUMBEREDITED | int | INOUT | |
@NUMBERDELETED | int | INOUT | |
@CURRENTAPPUSERID | uniqueidentifier | IN | |
@IDSETREGISTERID | uniqueidentifier | IN | |
@RECORDTYPEID | uniqueidentifier | IN | |
@AUCTIONID | uniqueidentifier | IN | |
@POSTSTATUSCODE | tinyint | IN | |
@POSTDATE | datetime | IN | |
@REASONCODEID | uniqueidentifier | IN | |
@REASON | nvarchar(300) | IN | |
@RECOGNITION | int | IN |
Definition
Copy
CREATE procedure dbo.USP_GLOBALCHANGE_AUCTIONDONATIONWRITEOFF
(
@CHANGEAGENTID uniqueidentifier = null,
@ASOF as datetime = null,
@NUMBERADDED int = 0 output,
@NUMBEREDITED int = 0 output,
@NUMBERDELETED int = 0 output,
@CURRENTAPPUSERID uniqueidentifier = null,
@IDSETREGISTERID uniqueidentifier = null,
@RECORDTYPEID uniqueidentifier = null,
@AUCTIONID uniqueidentifier = null,
@POSTSTATUSCODE tinyint,
@POSTDATE datetime = null,
@REASONCODEID uniqueidentifier = null,
@REASON nvarchar(300) = null,
@RECOGNITION int = 0
)
as
set nocount on;
declare @CURRENTDATE datetime;
declare @PLEDGEID uniqueidentifier;
declare @PLEDGEAMOUNT money;
declare @TRANSACTIONTYPECODE tinyint;
declare @RECOGNITIONCREDITS xml;
set @NUMBERADDED = 0;
set @NUMBEREDITED = 0;
set @NUMBERDELETED = 0;
set @ASOF = GetDate();
set @CURRENTDATE = GetDate();
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
declare @ORGANIZATIONCURRENCYID uniqueidentifier;
set @ORGANIZATIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
--select the revenue id of the auction items from the selected
--auction that haven't been purchased or reserved
declare @IDMAPPING table
(
ITEMID uniqueidentifier,
REVENUEID uniqueidentifier,
WRITEOFFID uniqueidentifier
)
-- keeps track of auctionitemid, revenueid, and writeoffid
if @IDSETREGISTERID is not null begin
insert into @IDMAPPING
select
AUCTIONITEM.ID as ITEMID,
AUCTIONITEM.REVENUEAUCTIONDONATIONID as REVENUEID,
NewId() as WRITEOFFID
from
dbo.UFN_IDSETREADER_GETRESULTS_GUID(@IDSETREGISTERID)
inner join
dbo.AUCTIONITEM on dbo.AUCTIONITEM.ID = dbo.UFN_IDSETREADER_GETRESULTS_GUID.ID
left join
dbo.AUCTIONITEMPURCHASE on AUCTIONITEM.ID = AUCTIONITEMPURCHASE.AUCTIONITEMID
where
AUCTIONITEMPURCHASE.PURCHASEID is null
and AUCTIONITEM.ID not in (select AUCTIONITEMRESERVATION.AUCTIONITEMID from dbo.AUCTIONITEMRESERVATION)
and AUCTIONITEM.TYPECODE = 0
and AUCTIONITEM.REVENUEAUCTIONDONATIONID not in (select WRITEOFF.REVENUEID from dbo.WRITEOFF)
end
else begin
insert into @IDMAPPING
select
AUCTIONITEM.ID as ITEMID,
AUCTIONITEM.REVENUEAUCTIONDONATIONID as REVENUEID,
NewId() as WRITEOFFID
from
dbo.AUCTIONITEM
left join dbo.AUCTIONITEMPURCHASE on AUCTIONITEM.ID = AUCTIONITEMPURCHASE.AUCTIONITEMID
where
AUCTIONITEM.EVENTAUCTIONID = @AUCTIONID
and AUCTIONITEMPURCHASE.PURCHASEID is null
and AUCTIONITEM.ID not in (select AUCTIONITEMRESERVATION.AUCTIONITEMID from dbo.AUCTIONITEMRESERVATION)
and AUCTIONITEM.TYPECODE = 0
and AUCTIONITEM.REVENUEAUCTIONDONATIONID not in (select WRITEOFF.REVENUEID from dbo.WRITEOFF)
end
select @NUMBEREDITED = count(*) from @IDMAPPING
if not @RECOGNITION = 2 begin
set @RECOGNITIONCREDITS = (
select
REVENUERECOGNITION.ID,
REVENUESPLIT.ID as REVENUESPLITID,
dbo.UFN_DESIGNATION_BUILDNAME(REVENUESPLIT.DESIGNATIONID) as DESIGNATIONNAME,
CONSTITUENT.NAME as CONSTITUENTNAME,
REVENUERECOGNITIONTYPECODE.DESCRIPTION as RECOGNITIONCREDITTYPE,
REVENUERECOGNITION.EFFECTIVEDATE,
REVENUERECOGNITION.AMOUNT as ORIGINALAMOUNT,
case @RECOGNITION
when 0 then
0
when 1 then
case
when REVENUERECOGNITION.AMOUNT-REVENUE.AMOUNT >= 0
then REVENUERECOGNITION.AMOUNT-REVENUE.AMOUNT
else 0
end
end as ADJUSTEDAMOUNT
from dbo.REVENUE
inner join dbo.REVENUESPLIT on REVENUE.ID = REVENUESPLIT.REVENUEID
inner join dbo.REVENUERECOGNITION on REVENUESPLIT.ID = REVENUERECOGNITION.REVENUESPLITID
inner join dbo.CONSTITUENT on REVENUERECOGNITION.CONSTITUENTID = CONSTITUENT.ID
left join dbo.REVENUERECOGNITIONTYPECODE on REVENUERECOGNITION.REVENUERECOGNITIONTYPECODEID = REVENUERECOGNITIONTYPECODE.ID
inner join @IDMAPPING as MAP on MAP.REVENUEID = REVENUE.ID
for xml raw('ITEM'),type,elements,root('RECOGNITIONCREDITS'),BINARY BASE64
)
end
begin try
--Auction donations have more restrictions around write-offs
declare @WRITEOFFCOUNTTABLE table
(
WRITEOFFCOUNT integer
)
insert into @WRITEOFFCOUNTTABLE
select
count(*)
from
WRITEOFF
inner join
@IDMAPPING as MAP
on MAP.REVENUEID = WRITEOFF.REVENUEID
if (select count(*) from @WRITEOFFCOUNTTABLE where WRITEOFFCOUNT > 0) <> 0
raiserror('BBERR_AUCTIONDONATION_MULTIPLEWRITEOFFS', 13, 1);
insert into dbo.WRITEOFF (ID,REVENUEID,DATE,POSTSTATUSCODE,POSTDATE,REASON,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED, REASONCODEID)
select
MAP.WRITEOFFID,
MAP.REVENUEID,
@CURRENTDATE,
@POSTSTATUSCODE,
@POSTDATE,
@REASON,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE,
@REASONCODEID
from
@IDMAPPING as MAP
insert into dbo.WRITEOFFSPLIT (ID, WRITEOFFID, DESIGNATIONID, AMOUNT,
BASECURRENCYID, ORGANIZATIONAMOUNT, ORGANIZATIONEXCHANGERATEID, TRANSACTIONAMOUNT,
TRANSACTIONCURRENCYID, BASEEXCHANGERATEID,
ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select
NewId(), MAP.WRITEOFFID, REVENUESPLIT.DESIGNATIONID, REVENUESPLIT.AMOUNT,
REVENUESPLIT.BASECURRENCYID, REVENUESPLIT.ORGANIZATIONAMOUNT, REVENUESPLIT.ORGANIZATIONEXCHANGERATEID, REVENUESPLIT.TRANSACTIONAMOUNT,
REVENUESPLIT.TRANSACTIONCURRENCYID, REVENUESPLIT.BASEEXCHANGERATEID,
@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
from
REVENUESPLIT
inner join
@IDMAPPING as MAP
on MAP.REVENUEID = REVENUESPLIT.REVENUEID
--Save the write-off GL distributions
if @POSTSTATUSCODE <> 2 begin
declare @ITEMREVENUEID uniqueidentifier
declare ITEMCURSOR cursor for
select MAP.REVENUEID from @IDMAPPING as MAP
open ITEMCURSOR
fetch next from ITEMCURSOR into @ITEMREVENUEID
while @@FETCH_STATUS = 0
begin
exec dbo.USP_SAVE_WRITEOFFGLDISTRIBUTION @ITEMREVENUEID, @CHANGEAGENTID, @CURRENTDATE;
fetch next from ITEMCURSOR into @ITEMREVENUEID
end
close ITEMCURSOR
deallocate ITEMCURSOR
end
-- Update recognition credit amounts
update dbo.REVENUERECOGNITION set
AMOUNT = UPDATEDRECOGNITIONCREDITS.ADJUSTEDAMOUNT,
ORGANIZATIONAMOUNT =
case
when REVENUERECOGNITION.BASECURRENCYID <> @ORGANIZATIONCURRENCYID
then dbo.UFN_CURRENCY_CONVERT(UPDATEDRECOGNITIONCREDITS.ADJUSTEDAMOUNT, REVENUESPLIT.ORGANIZATIONEXCHANGERATEID)
else
UPDATEDRECOGNITIONCREDITS.ADJUSTEDAMOUNT
end,
DATECHANGED = @CURRENTDATE,
CHANGEDBYID = @CHANGEAGENTID
from dbo.REVENUERECOGNITION
inner join dbo.REVENUESPLIT on REVENUESPLIT.ID = REVENUERECOGNITION.REVENUESPLITID
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