USP_PAYMENT_ADDBASE
Stored procedure to add payment base information.
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 | |
@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 | |
@TRANSACTIONCURRENCYID | uniqueidentifier | IN | |
@BASECURRENCYID | uniqueidentifier | IN | |
@BASEEXCHANGERATEID | uniqueidentifier | INOUT | |
@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_ADDBASE
(
@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,
@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,
@TRANSACTIONCURRENCYID uniqueidentifier = null,
@BASECURRENCYID uniqueidentifier = null,
@BASEEXCHANGERATEID uniqueidentifier = null output,
@EXCHANGERATE decimal(20,8) = null,
@CURRENTAPPUSERID uniqueidentifier = null,
@SEPAMANDATEID uniqueidentifier = null,
@TRANSACTIONID uniqueidentifier = null,
@MERCHANTACCOUNTID uniqueidentifier = null,
@VENDORID nvarchar(50) = ''
)
as
set nocount on;
declare @DESIGNATIONS xml;
declare @TYPECODE tinyint;
declare @SUM money;
declare @APPLIEDTOPLEDGES money;
declare @SPLITCOUNT int;
if @ID is null
set @ID = newid();
set @TYPECODE = 0;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
if @CURRENTDATE is null
set @CURRENTDATE = GetDate();
--Set currency parameters for backwards compatibility
if @TRANSACTIONCURRENCYID is null
set @TRANSACTIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
if @BASECURRENCYID is null
set @BASECURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
set @APPLIEDTOPLEDGES = 0;
set @SPLITCOUNT = 0;
set @VENDORID = coalesce(@VENDORID, '');
begin try
--Multicurrency - RobertDi 6/3/10 - Add a spot exchange rate if an existing rate hasn't
--been selected, the base and transaction currencies are different, and the rate
--entered isn't zero (which indicates that the user wants to enter the record without a rate).
if @BASEEXCHANGERATEID = '00000000-0000-0000-0000-000000000001'
begin
set @BASEEXCHANGERATEID = newid()
--Replace with call to USP_CURRENCYEXCHANGERATE_ENSURESPOTRATEEXISTS for PBI 102747 in the future
/*if not dbo.UFN_SECURITY_APPUSER_GRANTED_SYSTEMPRIVILEGE_IN_SYSTEMROLE(@CURRENTAPPUSERID,'911f104d-ba5f-4469-b0ae-184c879aea99') = 1
and not dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1
begin
raiserror('User does not have the right to add a new spot rate.', 13, 1);
return 1;
end*/
insert into dbo.CURRENCYEXCHANGERATE(
ID,
FROMCURRENCYID,
TOCURRENCYID,
RATE,
ASOFDATE,
TYPECODE,
SOURCECODEID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
values(
@BASEEXCHANGERATEID,
@TRANSACTIONCURRENCYID,
@BASECURRENCYID,
@EXCHANGERATE,
@DATE,
2,
null,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
);
end
if @FINDERNUMBER is null
set @FINDERNUMBER = 0;
if @AMOUNT < 0
begin
raiserror('BBERR_NEGATIVEAMOUNT.', 13, 1);
return 1
end
--if we have a finder number make sure the constituent has been added to the tables
if @FINDERNUMBER > 0
exec dbo.[USP_DATAFORMTEMPLATE_ADD_ACQUISITIONLISTMEMBER] @CONSTITUENTID, @CHANGEAGENTID, @FINDERNUMBER;
-- If the system has set that households can't be donors, verify that constituent isn't a household
if dbo.UFN_INSTALLATIONINFO_GETHOUSEHOLDSCANBEDONORS() = 0 and dbo.UFN_CONSTITUENT_ISHOUSEHOLD(@CONSTITUENTID) = 1
raiserror('HOUSEHOLDSCANNOTBEDONORS', 13, 1);
-- if the group type can't be a donor, raise an error
if exists(select GD.ID from dbo.GROUPDATA GD inner join dbo.GROUPTYPE GT on GD.GROUPTYPEID = GT.ID where GD.ID = @CONSTITUENTID and GT.CANBEDONOR = 0)
raiserror('GROUPCANNOTBEDONOR', 13, 1);
if @ID is null
set @ID = newid();
declare @RECEIPTTYPECODE tinyint;
set @RECEIPTTYPECODE = dbo.UFN_CONSTITUENT_GETRECEIPTPREFERENCE(@CONSTITUENTID,@TYPECODE);
--Get Multicurrency values.
declare @BASEAMOUNT money;
declare @ORGANIZATIONAMOUNT money;
declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;
declare @ORGANIZATIONCURRENCYID uniqueidentifier;
declare @BASETOORGANIZATIONEXCHANGERATEID uniqueidentifier;
exec dbo.USP_CURRENCY_GETCURRENCYVALUES @AMOUNT, @DATE, @BASECURRENCYID, @BASEEXCHANGERATEID output, @TRANSACTIONCURRENCYID output, @BASEAMOUNT output, @ORGANIZATIONCURRENCYID output, @ORGANIZATIONAMOUNT output, @ORGANIZATIONEXCHANGERATEID output, 1, @BASETOORGANIZATIONEXCHANGERATEID;
declare @PDAS uniqueidentifier;
select top 1 @PDAS = PDAS.ID from dbo.PDACCOUNTSYSTEM as PDAS
inner join dbo.CURRENCYSET as CS on PDAS.CURRENCYSETID = CS.ID
where @BASECURRENCYID = CS.BASECURRENCYID
order by PDAS.ISDEFAULT desc
--Add new Revenue Transaction
insert into dbo.FINANCIALTRANSACTION (
ID
, CONSTITUENTID
, DATE
, POSTDATE
, POSTSTATUSCODE
, BASEAMOUNT
, TYPECODE
, PDACCOUNTSYSTEMID -- @PDAS gets updated again if new code, otherwise we have the one matching with the currency
, TRANSACTIONAMOUNT
, TRANSACTIONCURRENCYID
, BASEEXCHANGERATEID
, ORGAMOUNT
, ORGEXCHANGERATEID
, ADDEDBYID
, CHANGEDBYID
, DATEADDED
, DATECHANGED
)
values (
@ID
, @CONSTITUENTID
, @DATE
, @POSTDATE
, case @POSTSTATUSCODE when 2 then 3 else 1 end
, @BASEAMOUNT
, 0
, @PDAS
, @AMOUNT
, @TRANSACTIONCURRENCYID
, @BASEEXCHANGERATEID
, @ORGANIZATIONAMOUNT
, @ORGANIZATIONEXCHANGERATEID
, @CHANGEAGENTID
, @CHANGEAGENTID
, @CURRENTDATE
, @CURRENTDATE
);
insert into dbo.REVENUE_EXT (
ID
, REFERENCE
, BATCHNUMBER
, RECEIPTAMOUNT
, FINDERNUMBER
, SOURCECODE
, APPEALID
, GIVENANONYMOUSLY
, DONOTACKNOWLEDGE
, DONOTRECEIPT
, BENEFITSWAIVED
, MAILINGID
, CHANNELCODEID
, RECEIPTTYPECODE
, ADDEDBYID
, CHANGEDBYID
, DATEADDED
, DATECHANGED
)
values (
@ID
, isnull(@REFERENCE,'')
, isnull(@BATCHNUMBER, '')
, @RECEIPTAMOUNT
, @FINDERNUMBER
, isnull(@SOURCECODE,'')
, @APPEALID
, coalesce(@GIVENANONYMOUSLY, 0)
, @DONOTACKNOWLEDGE
, @DONOTRECEIPT
, @BENEFITSWAIVED
, @MAILINGID
, @CHANNELCODEID
, @RECEIPTTYPECODE
, @CHANGEAGENTID
, @CHANGEAGENTID
, @CURRENTDATE
, @CURRENTDATE
);
--Add origination source
exec dbo.USP_REVENUE_ADDORIGIN @ID, @CONSTITUENTID, @CHANGEAGENTID, @CURRENTDATE;
--Add payment original amount
--Since orgamount and base amount are summarized from lineitems in FTM, add this directly using values we have
--exec dbo.USP_PAYMENT_ADDORIGINALAMOUNT @ID, @CHANGEAGENTID, @CURRENTDATE;
if not exists (select * from dbo.PAYMENTORIGINALAMOUNT where ID = @ID)
insert into dbo.PAYMENTORIGINALAMOUNT(ID, ORIGINALAMOUNT, TRANSACTIONAMOUNT, ORGANIZATIONAMOUNT, BASECURRENCYID, TRANSACTIONCURRENCYID, BASEEXCHANGERATEID, ORGANIZATIONEXCHANGERATEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values (@ID, @BASEAMOUNT, @AMOUNT, @ORGANIZATIONAMOUNT, @BASECURRENCYID, @TRANSACTIONCURRENCYID, @BASEEXCHANGERATEID, @ORGANIZATIONEXCHANGERATEID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE)
declare @REVENUEPAYMETHODID uniqueidentifier
set @REVENUEPAYMETHODID = newid();
-- Note that REVENUEPAYMENTMETHOD doesn't need multicurrency values; see comment on the table spec.
insert into dbo.REVENUEPAYMENTMETHOD (ID,REVENUEID, PAYMENTMETHODCODE, AMOUNT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values (@REVENUEPAYMETHODID,@ID,@PAYMENTMETHODCODE,@AMOUNT, @CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE)
-- add the payment information for each revenue record in the transaction
exec dbo.USP_REVENUE_ADDPAYMENTDETAILS @REVENUEPAYMETHODID, @PAYMENTMETHODCODE, @CHECKDATE,
@CHECKNUMBER, @CONSTITUENTACCOUNTID, @REFERENCEDATE,
@REFERENCENUMBER, @CARDHOLDERNAME, @CREDITCARDNUMBER,
@CREDITTYPECODEID, @AUTHORIZATIONCODE, @EXPIRESON,
@ISSUER, @NUMBEROFUNITS, @SYMBOL, @MEDIANPRICE,
null, null, null, null, null, @PROPERTYSUBTYPECODEID,
@GIFTINKINDSUBTYPECODEID,
@CHANGEAGENTID,@CURRENTDATE, 0,
@OTHERPAYMENTMETHODCODEID, @DIRECTDEBITRESULTCODE,
@LOWPRICE, @HIGHPRICE, 0, 0, @TRANSACTIONID, @AMOUNT,
@GIFTINKINDITEMNAME, @GIFTINKINDDISPOSITIONCODE,
@GIFTINKINDNUMBEROFUNITS, @GIFTINKINDFAIRMARKETVALUE,
0, @BASECURRENCYID, @TRANSACTIONCURRENCYID,
@BASEEXCHANGERATEID,
@MERCHANTACCOUNTID,
0, --SALE_LOWPRICE
0, --SALE_MEDIANPRICE
0, --SALE_HIGHPRICE
@VENDORID,
@SEPAMANDATEID;
--If a SEPA mandate is used, mark the mandate record to show that a payment has been made towards it.
if @SEPAMANDATEID is not null
exec dbo.USP_SEPAMANDATE_PAYMENTMADE @SEPAMANDATEID,null,null, @CHANGEAGENTID;
-- add benefits
declare @TOTALBENEFITS xml;
set @TOTALBENEFITS = dbo.UFN_REVENUEDETAIL_JOINBENEFITS(@BENEFITS, @PERCENTAGEBENEFITS);
--Remove benefits if they are waived
if @BENEFITSWAIVED = 1
set @TOTALBENEFITS = null;
--Update the organization total value, transaction total value, and exchange rates in the @TOTALBENEFITS XML.
set @TOTALBENEFITS = dbo.UFN_REVENUEBENEFIT_CONVERTAMOUNTSINXML_2(@TOTALBENEFITS,@TRANSACTIONCURRENCYID,@BASECURRENCYID);
exec dbo.USP_REVENUE_GETBENEFITS_4_UPDATEFROMXML @ID, @TOTALBENEFITS, @CHANGEAGENTID, @CURRENTDATE;
--insert tribute
if not @TRIBUTEID is null
begin
declare @RTID uniqueidentifier;
set @RTID = newid()
insert into dbo.REVENUETRIBUTE (ID, REVENUEID, TRIBUTEID, AMOUNT, BASECURRENCYID, ORGANIZATIONAMOUNT, ORGANIZATIONEXCHANGERATEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values (@RTID, @ID, @TRIBUTEID, @BASEAMOUNT, @BASECURRENCYID, @ORGANIZATIONAMOUNT, @BASETOORGANIZATIONEXCHANGERATEID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
-- insert default revenue tribute letters for any acknowledgees that have corresponding tribute letter codes
insert into dbo.REVENUETRIBUTELETTER(REVENUETRIBUTEID,CONSTITUENTID,TRIBUTELETTERCODEID,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
select @RTID,CONSTITUENTID,TRIBUTELETTERCODEID,@CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE
from dbo.TRIBUTEACKNOWLEDGEE
where TRIBUTEID = @TRIBUTEID
and TRIBUTEACKNOWLEDGEE.TRIBUTELETTERCODEID is not null;
end
--insert letter
if not @LETTERCODEID is null
insert into dbo.REVENUELETTER (REVENUEID, LETTERCODEID, ACKNOWLEDGEEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values (@ID, @LETTERCODEID, @CONSTITUENTID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;