USP_AMPROIMPORT_UPDATEPURCHASERECEIPTAMOUNTS
Updates the receipt amounts for revenue records generated from AuctionMaestro Pro.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@PURCHASEREVENUEID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CHANGEDATE | datetime | IN |
Definition
Copy
CREATE procedure dbo.USP_AMPROIMPORT_UPDATEPURCHASERECEIPTAMOUNTS
(
@PURCHASEREVENUEID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier,
@CHANGEDATE datetime
)
as
set nocount on;
declare @AFFECTEDREVENUE table
(
REVENUEID uniqueidentifier,
NEWRECEIPTAMOUNT money
);
--Get a list of all revenue records which bought auction items which were also bought by @PURCHASEREVENUEID. Naturally,
--@PURCHASEREVENUEID should also be included.
insert into @AFFECTEDREVENUE(REVENUEID, NEWRECEIPTAMOUNT)
select @PURCHASEREVENUEID, 0
union
select distinct [OTHERPURCHASE].REVENUEPURCHASEID, 0
from dbo.AUCTIONITEMREVENUEPURCHASE [OTHERPURCHASE]
inner join dbo.AUCTIONITEMREVENUEPURCHASE [PURCHASE] on [PURCHASE].AUCTIONITEMID = [OTHERPURCHASE].AUCTIONITEMID
where [PURCHASE].REVENUEPURCHASEID = @PURCHASEREVENUEID;
declare @REVENUEID uniqueidentifier;
declare @NEWRECEIPTAMOUNT money = 0;
declare @TEMPRECEIPTAMOUNT money = 0;
declare AFFECTED_REVENUE cursor local fast_forward for
select REVENUEID from @AFFECTEDREVENUE;
open AFFECTED_REVENUE;
fetch next from AFFECTED_REVENUE into @REVENUEID;
while @@FETCH_STATUS = 0
begin
set @NEWRECEIPTAMOUNT = 0;
set @TEMPRECEIPTAMOUNT = 0;
--Assume that AMPro donations don't have benefits, so the full donation amount for any donations contribute to the receipt amount
select
@TEMPRECEIPTAMOUNT = coalesce(sum(FINANCIALTRANSACTIONLINEITEM.TRANSACTIONAMOUNT), 0)
from
dbo.FINANCIALTRANSACTIONLINEITEM
inner join dbo.REVENUESPLIT_EXT ON dbo.FINANCIALTRANSACTIONLINEITEM.ID = dbo.REVENUESPLIT_EXT.ID
where
FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @REVENUEID
and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
and REVENUESPLIT_EXT.TYPECODE = 0
and REVENUESPLIT_EXT.APPLICATIONCODE = 0;
select @NEWRECEIPTAMOUNT = coalesce(@TEMPRECEIPTAMOUNT, 0);
set @TEMPRECEIPTAMOUNT = 0;
--Take benefits and event cost into account when computing the receipt amount for event registrations
select
@TEMPRECEIPTAMOUNT = coalesce(
case when REGISTRANT.BENEFITSWAIVED = 1 then FINANCIALTRANSACTIONLINEITEM.TRANSACTIONAMOUNT - coalesce(EVENTPRICE.COST, 0)
else FINANCIALTRANSACTIONLINEITEM.TRANSACTIONAMOUNT
- coalesce(SUM(REGISTRANTBENEFIT.EVENTBASECURRENCYTOTALVALUE), 0)
- coalesce(EVENTPRICE.COST, 0)
end, 0)
from
dbo.REGISTRANT
inner join dbo.REGISTRANTREGISTRATION on REGISTRANTREGISTRATION.REGISTRANTID = REGISTRANT.ID
inner join dbo.EVENTPRICE on EVENTPRICE.ID = REGISTRANTREGISTRATION.EVENTPRICEID
inner join dbo.EVENTREGISTRANTPAYMENT on EVENTREGISTRANTPAYMENT.REGISTRANTID = REGISTRANT.ID
inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.ID = EVENTREGISTRANTPAYMENT.PAYMENTID
left join dbo.REGISTRANTBENEFIT on REGISTRANTBENEFIT.REGISTRANTID = REGISTRANT.ID
where
FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @REVENUEID
and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
group by
FINANCIALTRANSACTIONLINEITEM.ID, FINANCIALTRANSACTIONLINEITEM.TRANSACTIONAMOUNT, REGISTRANT.BENEFITSWAIVED, EVENTPRICE.COST
set @TEMPRECEIPTAMOUNT = coalesce(@TEMPRECEIPTAMOUNT, 0);
select @NEWRECEIPTAMOUNT = @NEWRECEIPTAMOUNT + case when @TEMPRECEIPTAMOUNT < 0 then 0 else @TEMPRECEIPTAMOUNT end;
set @TEMPRECEIPTAMOUNT = 0;
--UFN_AUCTIONITEM_GETRECEIPTAMOUNTS will pro-rate the gain and loss for an item across all of its buyers. It will return
--0 for losses (instead of a negative receipt amount)
select
@TEMPRECEIPTAMOUNT = sum(coalesce([RECEIPT].AUCTIONITEMRECEIPTAMOUNT, 0))
from
dbo.FINANCIALTRANSACTIONLINEITEM
inner join dbo.AUCTIONITEMPURCHASE on AUCTIONITEMPURCHASE.PURCHASEID = FINANCIALTRANSACTIONLINEITEM.ID
cross apply dbo.UFN_AUCTIONITEM_GETRECEIPTAMOUNTS(AUCTIONITEMPURCHASE.AUCTIONITEMID) as [RECEIPT]
where
FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @REVENUEID
and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
and [RECEIPT].REVENUESPLITID = FINANCIALTRANSACTIONLINEITEM.ID;
set @TEMPRECEIPTAMOUNT = coalesce(@TEMPRECEIPTAMOUNT, 0);
set @NEWRECEIPTAMOUNT = @NEWRECEIPTAMOUNT + @TEMPRECEIPTAMOUNT;
set @TEMPRECEIPTAMOUNT = 0;
select @NEWRECEIPTAMOUNT = case when @NEWRECEIPTAMOUNT < 0 then 0 else @NEWRECEIPTAMOUNT end;
update @AFFECTEDREVENUE
set NEWRECEIPTAMOUNT = @NEWRECEIPTAMOUNT
where REVENUEID = @REVENUEID;
fetch next from AFFECTED_REVENUE into @REVENUEID;
end
close AFFECTED_REVENUE;
deallocate AFFECTED_REVENUE;
merge into dbo.REVENUE_EXT
using @AFFECTEDREVENUE [AFFECTEDREVENUE] on [AFFECTEDREVENUE].REVENUEID = REVENUE_EXT.ID
when matched
then update
set
REVENUE_EXT.RECEIPTAMOUNT = [AFFECTEDREVENUE].NEWRECEIPTAMOUNT,
REVENUE_EXT.CHANGEDBYID = @CHANGEAGENTID,
REVENUE_EXT.DATECHANGED = @CHANGEDATE;