USP_PAYMENT_ADD
Stored procedure to add a payment.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | INOUT | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CURRENTDATE | datetime | IN | |
@CONSTITUENTID | uniqueidentifier | IN | |
@DATE | datetime | IN | |
@AMOUNT | money | IN | |
@PAYMENTMETHODCODE | tinyint | IN | |
@CHECKDATE | UDT_FUZZYDATE | IN | |
@CHECKNUMBER | nvarchar(20) | IN | |
@REFERENCEDATE | UDT_FUZZYDATE | IN | |
@REFERENCENUMBER | nvarchar(20) | IN | |
@CARDHOLDERNAME | nvarchar(255) | IN | |
@CREDITCARDNUMBER | nvarchar(4) | IN | |
@CREDITTYPECODEID | uniqueidentifier | IN | |
@AUTHORIZATIONCODE | nvarchar(20) | IN | |
@EXPIRESON | UDT_FUZZYDATE | IN | |
@ISSUER | nvarchar(100) | IN | |
@NUMBEROFUNITS | decimal(20, 3) | IN | |
@SYMBOL | nvarchar(25) | IN | |
@MEDIANPRICE | decimal(19, 4) | IN | |
@GIFTINKINDSUBTYPECODEID | uniqueidentifier | IN | |
@PROPERTYSUBTYPECODEID | uniqueidentifier | IN | |
@RECEIPTAMOUNT | money | IN | |
@CONSTITUENTACCOUNTID | uniqueidentifier | IN | |
@REVENUESTREAMS | xml | IN | |
@POSTSTATUSCODE | tinyint | IN | |
@POSTDATE | datetime | IN | |
@FINDERNUMBER | bigint | IN | |
@SOURCECODE | nvarchar(50) | IN | |
@APPEALID | uniqueidentifier | IN | |
@BENEFITS | xml | IN | |
@BENEFITSWAIVED | bit | IN | |
@GIVENANONYMOUSLY | bit | IN | |
@MAILINGID | uniqueidentifier | IN | |
@CHANNELCODEID | uniqueidentifier | IN | |
@DONOTACKNOWLEDGE | bit | IN | |
@DONOTRECEIPT | bit | IN | |
@BATCHNUMBER | nvarchar(100) | IN | |
@OTHERPAYMENTMETHODCODEID | uniqueidentifier | IN | |
@REFERENCE | nvarchar(255) | IN | |
@TRIBUTEID | uniqueidentifier | IN | |
@LETTERCODEID | uniqueidentifier | IN | |
@DIRECTDEBITRESULTCODE | nvarchar(10) | IN | |
@LOWPRICE | decimal(19, 4) | IN | |
@HIGHPRICE | decimal(19, 4) | IN | |
@GIFTINKINDITEMNAME | nvarchar(100) | IN | |
@GIFTINKINDDISPOSITIONCODE | tinyint | IN | |
@GIFTINKINDNUMBEROFUNITS | int | IN | |
@GIFTINKINDFAIRMARKETVALUE | money | IN | |
@PERCENTAGEBENEFITS | xml | IN | |
@PDACCOUNTSYSTEMID | uniqueidentifier | IN | |
@TRANSACTIONCURRENCYID | uniqueidentifier | IN | |
@BASECURRENCYID | uniqueidentifier | IN | |
@BASEEXCHANGERATEID | uniqueidentifier | IN | |
@EXCHANGERATE | decimal(20, 8) | IN | |
@CURRENTAPPUSERID | uniqueidentifier | IN | |
@SEPAMANDATEID | uniqueidentifier | IN | |
@TRANSACTIONID | uniqueidentifier | IN | |
@MERCHANTACCOUNTID | uniqueidentifier | IN | |
@VENDORID | nvarchar(50) | IN |
Definition
Copy
CREATE procedure dbo.USP_PAYMENT_ADD
(
@ID uniqueidentifier = null output,
@CHANGEAGENTID uniqueidentifier,
@CURRENTDATE datetime,
@CONSTITUENTID uniqueidentifier,
@DATE datetime,
@AMOUNT money = 0,
@PAYMENTMETHODCODE tinyint = 1,
@CHECKDATE dbo.UDT_FUZZYDATE = '00000000',
@CHECKNUMBER nvarchar(20) = '',
@REFERENCEDATE dbo.UDT_FUZZYDATE = '00000000',
@REFERENCENUMBER nvarchar(20) = '',
@CARDHOLDERNAME nvarchar(255) = '',
@CREDITCARDNUMBER nvarchar(4) = '',
@CREDITTYPECODEID uniqueidentifier = null,
@AUTHORIZATIONCODE nvarchar(20) = '',
@EXPIRESON dbo.UDT_FUZZYDATE = '00000000',
@ISSUER nvarchar(100) = '',
@NUMBEROFUNITS decimal(20,3) = 0,
@SYMBOL nvarchar(25) = '',
@MEDIANPRICE decimal(19,4) = 0,
@GIFTINKINDSUBTYPECODEID uniqueidentifier = null,
@PROPERTYSUBTYPECODEID uniqueidentifier = null,
@RECEIPTAMOUNT money = 0,
@CONSTITUENTACCOUNTID uniqueidentifier = null,
@REVENUESTREAMS xml = null,
@POSTSTATUSCODE tinyint = 1,
@POSTDATE datetime = null,
@FINDERNUMBER bigint = null,
@SOURCECODE nvarchar(50) = null,
@APPEALID uniqueidentifier = null,
@BENEFITS xml = null,
@BENEFITSWAIVED bit = 0,
@GIVENANONYMOUSLY bit = null,
@MAILINGID uniqueidentifier = null,
@CHANNELCODEID uniqueidentifier = null,
@DONOTACKNOWLEDGE bit = 0,
@DONOTRECEIPT bit = 0,
@BATCHNUMBER nvarchar(100) = '',
@OTHERPAYMENTMETHODCODEID uniqueidentifier = null,
@REFERENCE nvarchar(255) = null,
@TRIBUTEID uniqueidentifier = null,
@LETTERCODEID uniqueidentifier = null,
@DIRECTDEBITRESULTCODE nvarchar(10) = '',
@LOWPRICE decimal(19,4) = 0,
@HIGHPRICE decimal(19,4) = 0,
@GIFTINKINDITEMNAME nvarchar(100) = '',
@GIFTINKINDDISPOSITIONCODE tinyint = 0,
@GIFTINKINDNUMBEROFUNITS int = 0,
@GIFTINKINDFAIRMARKETVALUE money = 0,
@PERCENTAGEBENEFITS xml = null,
@PDACCOUNTSYSTEMID uniqueidentifier = null,
@TRANSACTIONCURRENCYID uniqueidentifier = null,
@BASECURRENCYID uniqueidentifier = null,
@BASEEXCHANGERATEID uniqueidentifier = null,
@EXCHANGERATE decimal(20,8) = null,
@CURRENTAPPUSERID uniqueidentifier = null,
@SEPAMANDATEID uniqueidentifier = null,
@TRANSACTIONID uniqueidentifier = null,
@MERCHANTACCOUNTID uniqueidentifier = null,
@VENDORID nvarchar(50) = ''
)
as
set nocount on;
if @PDACCOUNTSYSTEMID is null
set @PDACCOUNTSYSTEMID = '4B121C2C-CCE6-440D-894C-EA0DEF80D50B'
declare @ALLOWGLDISTRIBUTIONS bit
set @ALLOWGLDISTRIBUTIONS = dbo.UFN_PDACCOUNTSYSTEM_ALLOWGLDISTRIBUTIONS(@PDACCOUNTSYSTEMID);
if @ALLOWGLDISTRIBUTIONS = 0
begin
set @POSTSTATUSCODE = 2 -- Do not post
set @POSTDATE = null
end
else
-- In case API user calls with POSTSTATUSCODE null (or BBMETAL for unit testing).
set @POSTSTATUSCODE = isnull(@POSTSTATUSCODE, 1)
begin try
exec dbo.USP_PAYMENT_ADDBASE @ID output, @CHANGEAGENTID, @CURRENTDATE, @CONSTITUENTID,
@DATE, @AMOUNT, @PAYMENTMETHODCODE, @CHECKDATE, @CHECKNUMBER,
@REFERENCEDATE, @REFERENCENUMBER, @CARDHOLDERNAME, @CREDITCARDNUMBER,
@CREDITTYPECODEID, @AUTHORIZATIONCODE, @EXPIRESON, @ISSUER,
@NUMBEROFUNITS, @SYMBOL, @MEDIANPRICE, @GIFTINKINDSUBTYPECODEID,
@PROPERTYSUBTYPECODEID, @RECEIPTAMOUNT, @CONSTITUENTACCOUNTID,
@POSTSTATUSCODE, @POSTDATE, @FINDERNUMBER,
@SOURCECODE, @APPEALID, @BENEFITS, @BENEFITSWAIVED, @GIVENANONYMOUSLY,
@MAILINGID, @CHANNELCODEID, @DONOTACKNOWLEDGE,@DONOTRECEIPT,
@BATCHNUMBER, @OTHERPAYMENTMETHODCODEID, @REFERENCE, @TRIBUTEID, @LETTERCODEID,
@DIRECTDEBITRESULTCODE, @LOWPRICE, @HIGHPRICE, @GIFTINKINDITEMNAME,
@GIFTINKINDDISPOSITIONCODE, @GIFTINKINDNUMBEROFUNITS,
@GIFTINKINDFAIRMARKETVALUE, @PERCENTAGEBENEFITS, @TRANSACTIONCURRENCYID,
@BASECURRENCYID, @BASEEXCHANGERATEID, @EXCHANGERATE, @CURRENTAPPUSERID,
@SEPAMANDATEID, @TRANSACTIONID, @MERCHANTACCOUNTID, @VENDORID;
exec dbo.USP_PDACCOUNTSYSTEM_LINKTOREVENUE
@ID = @ID,
@PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID,
@CHANGEDATE = @CURRENTDATE,
@CHANGEAGENTID = @CHANGEAGENTID
declare @SPLITSDECLININGGIFTAID xml, @COVENANTGIFTSPLITS xml, @GIFTAIDSPONSORSHIPSPLITS xml
if not @REVENUESTREAMS is null
begin
--Error if an exchange rate isn't entered, but the transaction and base currencies are different,
-- and the payment is for anything other than a donation, other, or unapplied MG.
if @BASEEXCHANGERATEID is null and @TRANSACTIONCURRENCYID <> @BASECURRENCYID
begin
if exists(
select 1
from dbo.UFN_REVENUE_GETAPPLICATIONS_FROMXML(@REVENUESTREAMS)
where not (
APPLICATIONCODE in (0,4,11,100)
)
)
begin
raiserror('BBERR_INVALIDAPPLICATIONSWITHNORATE : Payments without an exchange rate can only be applied to the donation, other, or unapplied matching gift application types.', 13, 1);
return 1;
end
end
if exists
(select
1
from
dbo.UFN_REVENUE_GETAPPLICATIONS_FROMXML(@REVENUESTREAMS) APPS
inner join dbo.FINANCIALTRANSACTION FT on APPS.APPLICATIONID = FT.ID and FT.TYPECODE in (0,1,4,5,6,7)
where
FT.PDACCOUNTSYSTEMID <> @PDACCOUNTSYSTEMID)
begin
raiserror('BBERR_MISMATCHACCOUNTSYSTEM', 13, 1);
return 1;
end
-- Bug 194561 - if it is an auction item, do not allow payment to be anything but cash, check, or credit card. Those are the only payment methods implemented in AMPro.
-- If more methods are added, update the error message in Errors.resx.
-- Bug 2505357 --Added PayPal and Venmo to available payment methods for Auction Purchases
if @PAYMENTMETHODCODE not in (0, 1, 2, 101, 102) -- cash, check, credit card, paypal, venmo
and exists
(
select
APPLICATIONCODE
from
dbo.UFN_REVENUE_GETAPPLICATIONS_FROMXML(@REVENUESTREAMS)
where
APPLICATIONCODE = 12 -- auction purchase
)
begin
raiserror('BBERR_AUCTIONITEM_PAYMENT_INVALIDPAYMENTMETHOD', 13, 1);
return 1;
end
exec dbo.USP_REVENUE_APPLYTOREVENUESTREAMS @ID, @CONSTITUENTID, @DATE, @REVENUESTREAMS, @CHANGEAGENTID, @CURRENTDATE, @SPLITSDECLININGGIFTAID output, @COVENANTGIFTSPLITS output, @GIFTAIDSPONSORSHIPSPLITS output, @PDACCOUNTSYSTEMID;
end
exec dbo.USP_GIFTAIDREVENUESPLIT_ADDUPDATESPLITS @ID, @APPEALID, @PAYMENTMETHODCODE, @CREDITTYPECODEID, @CHANGEAGENTID, @DATE, 0, @SPLITSDECLININGGIFTAID, @COVENANTGIFTSPLITS, @GIFTAIDSPONSORSHIPSPLITS; --revenue transaction type code for payment is 0
if @AMOUNT <(select sum(TRANSACTIONAMOUNT) from dbo.REVENUESPLIT where REVENUEID = @ID)
raiserror('BBERR_AMOUNTLESSTHANAPPLIEDAMOUNT', 13, 1);
if @AMOUNT <> (select sum(TRANSACTIONAMOUNT) from dbo.REVENUESPLIT where REVENUEID = @ID)
raiserror('BBERR_ALLMONEYNOTAPPLIED', 13, 1);
if (select count(*) from dbo.REVENUESPLIT where REVENUEID = @ID) = 0
raiserror('BBERR_NOAPPLICATIONS', 13, 1);
declare @SPLITS xml;
declare @APPLIEDAMOUNT money;
select @SPLITS = (select sum(REVENUESPLIT.TRANSACTIONAMOUNT) AMOUNT, REVENUESPLIT_EXT.DESIGNATIONID, 0 as TYPECODE
from dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT
inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT_EXT.ID = REVENUESPLIT.ID
where REVENUESPLIT.FINANCIALTRANSACTIONID = @ID and REVENUESPLIT_EXT.TYPECODE = 0 and REVENUESPLIT.DELETEDON is null and REVENUESPLIT.TYPECODE != 0
group by REVENUESPLIT_EXT.DESIGNATIONID
for xml raw('ITEM'),type,elements,root('SPLITS'),binary base64);
if exists (select 1
from dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT
inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT_EXT.ID = REVENUESPLIT.ID
inner join dbo.DESIGNATION on REVENUESPLIT_EXT.DESIGNATIONID = DESIGNATION.ID
where REVENUESPLIT.FINANCIALTRANSACTIONID = @ID and (REVENUESPLIT_EXT.TYPECODE = 0 or REVENUESPLIT_EXT.TYPECODE = 4) and REVENUESPLIT.DELETEDON is null and REVENUESPLIT.TYPECODE != 1
and DESIGNATION.ISACTIVE = 0)
raiserror('Revenue cannot be added to inactive designations.', 13, 2);
select @APPLIEDAMOUNT = sum(REVENUESPLIT.TRANSACTIONAMOUNT)
from dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT
inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT_EXT.ID = REVENUESPLIT.ID
where REVENUESPLIT.FINANCIALTRANSACTIONID = @ID and REVENUESPLIT_EXT.TYPECODE = 0 and REVENUESPLIT.DELETEDON is null and REVENUESPLIT.TYPECODE != 0;
--if @APPLIEDAMOUNT > 0
--begin
-- create matching gift records
if dbo.UFN_MATCHINGGIFTPREFERENCE_AUTOADDMG() > 0
exec USP_MATCHINGGIFTPLEDGE_AUTOADD @CONSTITUENTID, @CHANGEAGENTID, @ID, @DATE, @APPLIEDAMOUNT, @RECEIPTAMOUNT, @SPLITS, @CURRENTAPPUSERID;
if dbo.UFN_MATCHINGGIFTPREFERENCE_AUTOADDSPOUSEMG() > 0
exec USP_MATCHINGGIFTPLEDGE_AUTOADDFROMSPOUSE @CONSTITUENTID, @CHANGEAGENTID, @ID, @DATE, @APPLIEDAMOUNT, @RECEIPTAMOUNT, @SPLITS, @CURRENTAPPUSERID;
--end
-- Only create the records if this is a UK product and there is a specified tribute
if dbo.UFN_INSTALLEDPRODUCTS_PRODUCTIS('9568A6C2-F7AA-45fd-8F54-21FE9654EE2D') = 1 and @TRIBUTEID is not null
exec dbo.USP_REVENUETRIBUTETAXCLAIMAMOUNT_ADDUPDATE @ID, @CHANGEAGENTID, @CURRENTDATE;
-- LTM - WI #186567, #167954 - break up this logic and add to appropriate SP to allow some triggers to work based on appealid.
--If any marketing information is null, try to default based on applications
--if @SOURCECODE is null or @SOURCECODE = '' or @MAILINGID is null or @APPEALID is null
--exec dbo.USP_REVENUE_DEFAULTMARKETINGINFORMATION @ID, @CHANGEAGENTID, @CURRENTDATE;
if @POSTSTATUSCODE <> 2
begin
exec dbo.USP_SAVE_REVENUEGLDISTRIBUTION @ID, @CHANGEAGENTID, @CURRENTDATE;
-- save any benefit distributions
exec dbo.USP_SAVE_PAYMENT_BENEFITGLDISTRIBUTION @ID, @CHANGEAGENTID, @CURRENTDATE;
-- save any auction purchase distributions
exec dbo.USP_SAVE_AUCTIONPURCHASEGLDISTRIBUTION @ID, @CHANGEAGENTID, @CURRENTDATE, @PDACCOUNTSYSTEMID;
end
-- USP_PAYMENT_ADDGIFTFEES creates GL distributions so it needs to be called after USP_PDACCOUNTSYSTEM_LINKTOREVENUE
if not @REVENUESTREAMS is null
exec dbo.USP_PAYMENT_ADDGIFTFEES @ID, @CONSTITUENTID, @CHANGEAGENTID, @CURRENTDATE;
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;