USP_AUCTIONPURCHASE_ADDPAYMENT
Handles creating the revenue splits for auction purchases.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@REVENUEID | uniqueidentifier | IN | |
@APPLICATIONID | uniqueidentifier | IN | |
@APPLIEDAMOUNT | money | IN | |
@DATE | datetime | IN | |
@CONSTITUENTID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@PDACCOUNTSYSTEMID | uniqueidentifier | IN | |
@BASEAPPLIEDAMOUNT | money | IN | |
@ORGANIZATIONAPPLIEDAMOUNT | money | IN |
Definition
Copy
CREATE procedure dbo.USP_AUCTIONPURCHASE_ADDPAYMENT
(
@REVENUEID uniqueidentifier,
@APPLICATIONID uniqueidentifier,
@APPLIEDAMOUNT money,
@DATE datetime,
@CONSTITUENTID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier,
@PDACCOUNTSYSTEMID uniqueidentifier = null,
@BASEAPPLIEDAMOUNT money = null,
@ORGANIZATIONAPPLIEDAMOUNT money = null
)
as
begin
set nocount on;
if @PDACCOUNTSYSTEMID is null
set @PDACCOUNTSYSTEMID = '4B121C2C-CCE6-440D-894C-EA0DEF80D50B'
declare @ORGANIZATIONCURRENCYID uniqueidentifier;
set @ORGANIZATIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
declare @ORGANIZATIONCURRENCYDECIMALDIGITS integer;
select @ORGANIZATIONCURRENCYDECIMALDIGITS = CURRENCY.DECIMALDIGITS from dbo.CURRENCY where ID = @ORGANIZATIONCURRENCYID;
declare @ITEMTRANSACTIONCURRENCYID uniqueidentifier;
declare @ITEMBASECURRENCYID uniqueidentifier;
declare @REVENUEDATE datetime;
declare @PAYMENTBASECURRENCYID uniqueidentifier;
declare @PAYMENTTRANSACTIONCURRENCYID uniqueidentifier;
declare @PAYMENTBASEEXCHANGERATEID uniqueidentifier;
declare @PAYMENTORGANIZATIONEXCHANGERATEID uniqueidentifier;
declare @PAYMENTBASECURRENCYDECIMALDIGITS integer;
declare @PAYMENTTRANSACTIONCURRENCYDECIMALDIGITS integer;
declare @TOTALREVENUETRANSACTIONAMOUNT money;
declare @TOTALREVENUEBASEAMOUNT money;
declare @TOTALREVENUEORGANIZATIONAMOUNT money;
declare @POSTDATE date;
declare @POSTSTATUSCODE tinyint;
select
@REVENUEDATE = cast(REVENUE.DATE as datetime),
@PAYMENTBASECURRENCYID = V.BASECURRENCYID,
@PAYMENTTRANSACTIONCURRENCYID = REVENUE.TRANSACTIONCURRENCYID,
@PAYMENTBASEEXCHANGERATEID = REVENUE.BASEEXCHANGERATEID,
@PAYMENTORGANIZATIONEXCHANGERATEID = REVENUE.ORGEXCHANGERATEID,
@PAYMENTBASECURRENCYDECIMALDIGITS = BASE_CURRENCY.DECIMALDIGITS,
@PAYMENTTRANSACTIONCURRENCYDECIMALDIGITS = TRANSACTION_CURRENCY.DECIMALDIGITS,
@TOTALREVENUETRANSACTIONAMOUNT = REVENUE.TRANSACTIONAMOUNT,
@TOTALREVENUEBASEAMOUNT = REVENUE.BASEAMOUNT,
@TOTALREVENUEORGANIZATIONAMOUNT = REVENUE.ORGAMOUNT,
@POSTDATE = REVENUE.POSTDATE,
@POSTSTATUSCODE = case REVENUE.POSTSTATUSCODE when 2 then 1 else REVENUE.POSTSTATUSCODE end
from dbo.FINANCIALTRANSACTION REVENUE
inner join dbo.V_BASECURRENCYFORFINANCIALTRANSACTION_I V with (noexpand) on REVENUE.ID = V.FINANCIALTRANSACTIONID
left join dbo.CURRENCY BASE_CURRENCY on V.BASECURRENCYID = BASE_CURRENCY.ID
left join dbo.CURRENCY TRANSACTION_CURRENCY on REVENUE.TRANSACTIONCURRENCYID = TRANSACTION_CURRENCY.ID
where REVENUE.ID = @REVENUEID;
declare @REVENUESPLITID uniqueidentifier
set @REVENUESPLITID = newid()
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
if @DATE is null
set @DATE = getdate()
declare @AUCTIONITEMRESERVATIONID uniqueidentifier = null;
declare @DESIGNATIONID uniqueidentifier = null;
declare @CAMPAIGNS xml;
declare @PURCHASEAMOUNT money = 0;
declare @AUCTIONITEMID uniqueidentifier = null;
declare @TYPECODE tinyint = 0;
declare @ITEMVALUE money = 0;
declare @WRITTENOFF bit = 0;
select
@DESIGNATIONID = REVENUESPLIT.DESIGNATIONID,
@PURCHASEAMOUNT = AUCTIONITEMRESERVATION.PURCHASEAMOUNT,
@AUCTIONITEMID = AUCTIONITEM.ID,
@TYPECODE = AUCTIONITEM.TYPECODE,
@ITEMVALUE = case
when AUCTIONITEM.TYPECODE = 0 then
AUCTIONITEM.VALUE
else
(select sum([ITEM].VALUE) from dbo.AUCTIONITEM [ITEM] where [ITEM].PACKAGEID = AUCTIONITEM.ID)
end,
@AUCTIONITEMRESERVATIONID = AUCTIONITEMRESERVATION.ID,
@ITEMTRANSACTIONCURRENCYID = AUCTIONITEM.TRANSACTIONCURRENCYID,
@ITEMBASECURRENCYID = AUCTIONITEM.BASECURRENCYID,
@WRITTENOFF = case
when WRITEOFF.ID is not null then 1
else 0
end
from
dbo.AUCTIONITEMRESERVATION
inner join dbo.AUCTIONITEM on AUCTIONITEMRESERVATION.AUCTIONITEMID = AUCTIONITEM.ID
left join dbo.REVENUESPLIT on AUCTIONITEM.REVENUEAUCTIONDONATIONID = REVENUESPLIT.REVENUEID
left join dbo.WRITEOFF on AUCTIONITEM.REVENUEAUCTIONDONATIONID = WRITEOFF.REVENUEID
where AUCTIONITEM.ID = @APPLICATIONID
select
@CAMPAIGNS = (select -- campaigns for designation
CAMPAIGNID,
CAMPAIGNSUBPRIORITYID
from dbo.UFN_DESIGNATION_GETCAMPAIGNSTODEFAULT(@DESIGNATIONID, @DATE)
for xml raw('ITEM'), type, elements, root('CAMPAIGNS'), BINARY BASE64);
if @PURCHASEAMOUNT <> @APPLIEDAMOUNT
raiserror('BBERR_AUCTIONPURCHASE_INVALIDAMOUNT', 13, 1);
if @ITEMTRANSACTIONCURRENCYID <> @PAYMENTTRANSACTIONCURRENCYID
raiserror('BBERR_AUCTIONPURCHASE_INVALIDTRANSACTIONCURRENCYID', 13, 1);
if dbo.UFN_AUCTIONITEMPURCHASE_VALIDATEPPURCHASEEXCHANGERATE(@APPLICATIONID) <> 1
raiserror('BBERR_AUCTIONPURCHASE_EXCHANGERATE', 13, 1);
if @WRITTENOFF = 1
raiserror('BBERR_AUCTIONPURCHASE_AUCTIONITEMWRITTENOFF', 13, 1);
if @TYPECODE = 0 --auction item
begin
--Check to see if the PDACCOUNTSYSTEM for the payment is the same as the item
if exists(select 1
from dbo.PDACCOUNTSYSTEMFORREVENUE
inner join dbo.AUCTIONITEM on AUCTIONITEM.REVENUEAUCTIONDONATIONID = PDACCOUNTSYSTEMFORREVENUE.ID
where
AUCTIONITEM.ID = @APPLICATIONID
and
PDACCOUNTSYSTEMFORREVENUE.PDACCOUNTSYSTEMID <> @PDACCOUNTSYSTEMID
)
begin
raiserror('BBERR_AUCTIONITEM_PAYMENT_ACCOUNTSYSTEMINVALID',13,1);
end
-- Convert the applied amount into base and organization amounts if it is not provided by the caller
if @BASEAPPLIEDAMOUNT is null or @ORGANIZATIONAPPLIEDAMOUNT is null
exec dbo.USP_CURRENCY_GETCURRENCYVALUESBYPROPORTION
@AMOUNT = @APPLIEDAMOUNT,
@TOTALAMOUNT = @TOTALREVENUETRANSACTIONAMOUNT,
@BASECURRENCYID = @PAYMENTBASECURRENCYID,
@TOTALBASEAMOUNT = @TOTALREVENUEBASEAMOUNT,
@BASECURRENCYDECIMALDIGITS = @PAYMENTBASECURRENCYDECIMALDIGITS,
@TRANSACTIONCURRENCYID = @PAYMENTTRANSACTIONCURRENCYID,
@BASEAMOUNT = @BASEAPPLIEDAMOUNT output,
@ORGANIZATIONCURRENCYID = @ORGANIZATIONCURRENCYID,
@TOTALORGANIZATIONAMOUNT = @TOTALREVENUEORGANIZATIONAMOUNT,
@ORGANIZATIONCURRENCYDECIMALDIGITS = @ORGANIZATIONCURRENCYDECIMALDIGITS,
@ORGANIZATIONAMOUNT = @ORGANIZATIONAPPLIEDAMOUNT output
declare @ADJUSTMENTPOSTSTATUSCODE tinyint;
declare @ADJUSTMENTPOSTDATE date;
declare @ADJUSTMENTID uniqueidentifier;
select top 1
@ADJUSTMENTPOSTSTATUSCODE = case A.POSTSTATUSCODE when 2 then 3 else 1 end
,@ADJUSTMENTPOSTDATE = A.POSTDATE
,@ADJUSTMENTID = ALI.ID
from dbo.ADJUSTMENT A
left join dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT ALI on A.ID = ALI.ID
where A.REVENUEID = @REVENUEID
order by A.DATEADDED desc;
insert into dbo.FINANCIALTRANSACTIONLINEITEM
(ID
,FINANCIALTRANSACTIONID
,TRANSACTIONAMOUNT
,VISIBLE
,DESCRIPTION
,SEQUENCE
,TYPECODE
,POSTDATE
,POSTSTATUSCODE
,BASEAMOUNT
,ORGAMOUNT
,FINANCIALTRANSACTIONLINEITEMADJUSTMENTID
-- Boilerplate
,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values
(@REVENUESPLITID
,@REVENUEID
,@APPLIEDAMOUNT
,1
,''
,1
,0
,isnull(@ADJUSTMENTPOSTDATE, @POSTDATE)
,isnull(@ADJUSTMENTPOSTSTATUSCODE, @POSTSTATUSCODE)
,@BASEAPPLIEDAMOUNT
,@ORGANIZATIONAPPLIEDAMOUNT
,@ADJUSTMENTID
,@CHANGEAGENTID, @CHANGEAGENTID, @DATE, @DATE)
merge dbo.REVENUESPLIT_EXT as target
using (select @REVENUESPLITID [ID]) as source
on (source.ID = target.ID)
when matched then
update set
DESIGNATIONID = @DESIGNATIONID
,CHANGEDBYID = @CHANGEAGENTID
,DATECHANGED = @DATE
when not matched then
insert
(
ID
,DESIGNATIONID
,TYPECODE
,APPLICATIONCODE
,OVERRIDEBUSINESSUNITS
,REVENUESPLITBUSINESSUNITOVERRIDECODEID
-- boilerplate
,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
)
values
(
@REVENUESPLITID
,@DESIGNATIONID
,12
,12
,0
,null
-- boilerplate
,@CHANGEAGENTID, @CHANGEAGENTID, @DATE, @DATE);
insert into dbo.AUCTIONITEMPURCHASE
(
ID,
AUCTIONITEMID,
PURCHASEID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
values
(
newid(),
@AUCTIONITEMID,
@REVENUESPLITID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@DATE,
@DATE
)
-- create recognitions
exec dbo.USP_REVENUEDETAIL_CREATERECOGNITIONS @REVENUESPLITID, @CHANGEAGENTID, @DATE;
end
if @TYPECODE = 1 --auction package
begin
--Check to see if the PDACCOUNTSYSTEM for the payment is the same as the item
if exists(select 1
from dbo.PDACCOUNTSYSTEMFORREVENUE
inner join dbo.AUCTIONITEM on AUCTIONITEM.REVENUEAUCTIONDONATIONID = PDACCOUNTSYSTEMFORREVENUE.ID
where
AUCTIONITEM.PACKAGEID = @APPLICATIONID
and
PDACCOUNTSYSTEMFORREVENUE.PDACCOUNTSYSTEMID <> @PDACCOUNTSYSTEMID
)
begin
raiserror('BBERR_AUCTIONITEM_PAYMENT_ACCOUNTSYSTEMINVALID_PACKAGE',13,1);
end
exec dbo.USP_AUCTIONPURCHASE_ADDPAYMENTTOPACKAGE
@REVENUEID = @REVENUEID,
@AMOUNT = @APPLIEDAMOUNT,
@PACKAGEID = @AUCTIONITEMID,
@CHANGEAGENTID = @CHANGEAGENTID,
@CHANGEDATE = @DATE;
end
insert into dbo.AUCTIONITEMREVENUEPURCHASE
(
ID,
AUCTIONITEMID,
REVENUEPURCHASEID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
values
(
newid(),
@AUCTIONITEMID,
@REVENUEID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@DATE,
@DATE
)
if @DESIGNATIONID is not null and @CAMPAIGNS is not null
exec dbo.USP_REVENUESPLIT_GETCAMPAIGNS_ADDFROMXML @REVENUESPLITID, @CAMPAIGNS, @CHANGEAGENTID;
-- delete the auction item reservation if it existed
exec dbo.USP_AUCTIONITEMRESERVATION_DELETEBYID_WITHCHANGEAGENTID @AUCTIONITEMRESERVATIONID, @CHANGEAGENTID;
end