USP_DATAFORMTEMPLATE_ADD_2_REVENUEBATCHCOMMIT
The save procedure used by the add dataform template "Revenue Batch Row 2 Commit Add Form".
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | INOUT | The output parameter indicating the ID of the record added. |
@CHANGEAGENTID | uniqueidentifier | IN | Input parameter indicating the ID of the change agent invoking the procedure. |
@BATCHNUMBER | nvarchar(100) | IN | |
@CONSTITUENTID | uniqueidentifier | IN | |
@TYPECODE | tinyint | IN | Revenue type |
@DATE | datetime | IN | Date |
@AMOUNT | money | IN | Amount |
@PAYMENTMETHODCODE | tinyint | IN | Payment method |
@DONOTACKNOWLEDGE | bit | IN | Do not acknowledge |
@DONOTRECEIPT | bit | IN | Do not receipt |
@CHECKDATE | UDT_FUZZYDATE | IN | Check date |
@CHECKNUMBER | nvarchar(20) | IN | Check number |
@REFERENCEDATE | UDT_FUZZYDATE | IN | Reference date |
@REFERENCENUMBER | nvarchar(20) | IN | Reference number |
@CARDHOLDERNAME | nvarchar(255) | IN | Name on card |
@CREDITCARDNUMBER | nvarchar(20) | IN | Card number |
@CREDITTYPECODEID | uniqueidentifier | IN | Card type |
@AUTHORIZATIONCODE | nvarchar(20) | IN | Authorization code |
@EXPIRESON | UDT_FUZZYDATE | IN | Expires on |
@ISSUER | nvarchar(100) | IN | Issuer |
@NUMBEROFUNITS | decimal(20, 3) | IN | Stock number of units |
@SYMBOL | nvarchar(25) | IN | Symbol |
@MEDIANPRICE | decimal(19, 4) | IN | Median price |
@INSTALLMENTFREQUENCYCODE | tinyint | IN | Installment frequency |
@INSTALLMENTSTARTDATE | datetime | IN | Installment start date |
@INSTALLMENTENDDATE | datetime | IN | Installment end date |
@NUMBEROFINSTALLMENTS | int | IN | No. installments |
@PROPERTYSUBTYPECODEID | uniqueidentifier | IN | Property subtype |
@GIFTINKINDSUBTYPECODEID | uniqueidentifier | IN | Gift-in-kind subtype |
@RECEIPTAMOUNT | money | IN | Receipt amount |
@CONSTITUENTACCOUNTID | uniqueidentifier | IN | Account |
@SPLITS | xml | IN | Designations |
@SINGLEDESIGNATIONID | uniqueidentifier | IN | Designation |
@REVENUESTREAMS | xml | IN | Revenue streams |
@SOLICITORS | xml | IN | Solicitors |
@BENEFITS | xml | IN | Money benefits |
@FINDERNUMBER | bigint | IN | Finder number |
@SOURCECODE | nvarchar(60) | IN | Source code |
@APPEALID | uniqueidentifier | IN | Appeal |
@FINDERNUMBERISVALID | bit | IN | Finder number is valid |
@USERMODIFIEDBENEFITS | bit | IN | User modified benefits |
@BENEFITSWAIVED | bit | IN | User waived benefits |
@POSTDATE | datetime | IN | GL post date |
@POSTSTATUSCODE | tinyint | IN | GL post status |
@SENDPLEDGEREMINDER | bit | IN | Send reminders |
@SALEDATE | datetime | IN | Sale date |
@SALEAMOUNT | money | IN | Sale amount |
@BROKERFEE | money | IN | Sale fees |
@SALEPOSTSTATUSCODE | tinyint | IN | Sale GL post status |
@SALEPOSTDATE | datetime | IN | Sale GL post date |
@NOTETITLE | nvarchar(50) | IN | Note Title |
@NOTEAUTHORID | uniqueidentifier | IN | Note Author |
@NOTEDATEENTERED | datetime | IN | Note Date |
@NOTETYPECODEID | uniqueidentifier | IN | Note Type |
@NOTETEXTNOTE | nvarchar(max) | IN | Notes |
@GIVENANONYMOUSLY | bit | IN | Given anonymously |
@GIVENANONYMOUSLYDEFAULTEDFORCONSTITUENTID | uniqueidentifier | IN | Given anonymously defaulted for constituent |
@USERMODIFIEDRECEIPTAMOUNT | bit | IN | User modified receipt amount |
@PLEDGESUBTYPEID | uniqueidentifier | IN | Pledge subtype |
@REJECTIONCODEID | uniqueidentifier | IN | Rejection code |
@CONSTITUENTLOOKUPID | uniqueidentifier | IN | Lookup ID |
@MAILINGID | uniqueidentifier | IN | Effort |
@CHANNELCODEID | uniqueidentifier | IN | Inbound channel |
@VALIDATEONLY | bit | IN | |
@INSTALLMENTS | xml | IN | Installments |
@PAYMENTFORPLEDGEAMOUNT | money | IN | Payment for pledge amount |
@RECOGNITIONS | xml | IN | Recognition credit |
@DIDRECOGNITIONSDEFAULT | bit | IN | Did default recognition credits |
@TRIBUTES | xml | IN | Tributes |
@UNAPPLIEDMATCHINGGIFTSPLITS | xml | IN | Unapplied MG Split |
@UNAPPLIEDMATCHINGGIFTAMOUNT | money | IN | Applied |
@RECEIPTTYPECODE | tinyint | IN | Receipt type |
@OTHERPAYMENTMETHODCODEID | uniqueidentifier | IN | Other method |
@LETTERCODEID | uniqueidentifier | IN | Letter |
@ACKNOWLEDGEDATE | datetime | IN | Acknowledge date |
@REFERENCE | nvarchar(255) | IN | Reference |
@CATEGORYCODEID | uniqueidentifier | IN | Revenue category |
@ACKNOWLEDGEEID | uniqueidentifier | IN | Acknowledgee |
@APPLICATIONINFO | nvarchar(60) | IN | Application |
@OTHERTYPECODEID | uniqueidentifier | IN | Other type |
@OPPORTUNITYID | uniqueidentifier | IN | Opportunity |
@DIRECTDEBITRESULTCODE | nvarchar(10) | IN | Result code |
@LOWPRICE | decimal(19, 4) | IN | Low price |
@HIGHPRICE | decimal(19, 4) | IN | High price |
@NUMBEROFUNITSSOLD | decimal(20, 3) | IN | Stock sale number of units |
@USERMODIFIEDNUMBEROFUNITSSOLD | bit | IN | User modified stock number of units sold |
@CREDITCARDTOKEN | uniqueidentifier | IN | Credit card token |
@REJECTIONMESSAGE | nvarchar(500) | IN | Rejection message |
@PARTIALCREDITCARDNUMBER | nvarchar(4) | IN | Partial card number |
@STANDINGORDERCONSTITUENTACCOUNTID | uniqueidentifier | IN | Standing order account |
@STANDINGORDERREFERENCENUMBER | nvarchar(18) | IN | Standing order reference number |
@STANDINGORDERREFERENCEDATE | UDT_FUZZYDATE | IN | Standing order reference date |
@STANDINGORDERSETUP | bit | IN | Standing order has been setup |
@STANDINGORDERSETUPDATE | datetime | IN | Standing order setup date |
@TAXDECLARATIONS | xml | IN | Declarations |
@TRANSACTIONID | uniqueidentifier | IN | Transaction ID |
@ISTRANSIENTCARD | bit | IN | Is transient credit card |
@DECLINESGIFTAID | bit | IN | Declines Gift Aid |
@DDISOURCECODEID | uniqueidentifier | IN | DDI source |
@DDISOURCEDATE | date | IN | DDI source date |
@ISCOVENANT | bit | IN | Is covenant gift |
@AMOUNTFORVAT | money | IN | Portion subject to VAT |
@VATTAXRATEID | uniqueidentifier | IN | VAT tax rate |
@VATAMOUNT | money | IN | VAT amount |
@ADDITIONALAPPLICATIONSSTREAM | xml | IN | Additional applications stream |
@REVENUELOOKUPID | nvarchar(100) | IN | Revenue ID |
@APPLICATIONSOLICITORS | xml | IN | Application solicitors |
@APPLICATIONRECOGNITIONS | xml | IN | Application recognitions |
@CURRENTAPPUSERID | uniqueidentifier | IN | Input parameter indicating the ID of the current user. |
@MGGENERATED | bit | IN | MG Generated |
@MGALTERED | bit | IN | MG Altered |
@MATCHINGGIFTS | xml | IN | |
@PAYINGPENDINGREVENUEID | uniqueidentifier | IN | Was paying pending revenue |
@GIFTINKINDITEMNAME | nvarchar(100) | IN | Item name |
@GIFTINKINDDISPOSITIONCODE | tinyint | IN | Disposition |
@GIFTINKINDNUMBEROFUNITS | int | IN | Gift-in-kind number of units |
@GIFTINKINDFAIRMARKETVALUE | money | IN | Fair market value per unit |
@DIRECTDEBITISREJECTED | bit | IN | Direct debit is rejected |
@PERCENTAGEBENEFITS | xml | IN | Percent benefits |
@BATCHROWID | uniqueidentifier | IN | |
@ISGIFTAIDSPONSORSHIP | bit | IN | Gift Aid sponsorship |
@LOCKBOXID | uniqueidentifier | IN | Lockbox |
@LOCKBOXBATCHNUMBER | nvarchar(100) | IN | Lockbox batch number |
@LOCKBOXBATCHSEQUENCE | int | IN | Lockbox batch sequence |
@PDACCOUNTSYSTEMID | uniqueidentifier | IN | Account system |
@APPLICATIONBUSINESSUNITS | xml | IN | Application business units |
@TRANSACTIONCURRENCYID | uniqueidentifier | IN | Transaction currency |
@BASECURRENCYID | uniqueidentifier | IN | Base currency |
@BASEEXCHANGERATEID | uniqueidentifier | IN | Base exchange rate |
@EXCHANGERATE | decimal(20, 8) | IN | Exchange rate |
@GENERATEREFERENCENUMBER | bit | IN | Automatically generate reference number |
@APPLYBYPERCENT | bit | IN | Apply by |
@SOURCECODEIMPORT | nvarchar(60) | IN | Source code (Import only) |
@MERCHANTACCOUNTID | uniqueidentifier | IN | Merchant account |
@SETNULLBASEEXCHANGERATETOLATEST | bit | IN | Use latest base exchange rate when not specified |
@SALE_LOWPRICE | decimal(19, 4) | IN | |
@SALE_MEDIANPRICE | decimal(19, 4) | IN | |
@SALE_HIGHPRICE | decimal(19, 4) | IN | |
@VENDORID | nvarchar(50) | IN | |
@BBNCTRANID | int | IN | |
@BBNCORIGINPAGENAME | nvarchar(100) | IN | |
@BBNCORIGINPAGEID | int | IN | |
@RECEIPTNUMBER | nvarchar(30) | IN | |
@RECEIPTSTACKSHORTNAME | nvarchar(20) | IN | |
@MARKGIFTASRECEIPTED | bit | IN | |
@EMAILID | int | IN | |
@EMAILSUBJECT | nvarchar(4000) | IN | |
@EMAILNAME | nvarchar(510) | IN | |
@NAMECODE | tinyint | IN | |
@SIMILARADDRESSCODE | tinyint | IN | |
@UNSIMILARADDRESSCODE | tinyint | IN | |
@NEWADDRESSENDDATECODE | tinyint | IN | |
@NEWADDRESSPRIMARYCODE | tinyint | IN | |
@BIRTHDATERULECODE | tinyint | IN | |
@DIFFERENTPHONECODE | tinyint | IN | |
@NEWPHONEENDDATECODE | tinyint | IN | |
@NEWPHONEPRIMARYCODE | tinyint | IN | |
@DIFFERENTEMAILCODE | tinyint | IN | |
@NEWEMAILENDDATECODE | tinyint | IN | |
@NEWEMAILPRIMARYCODE | tinyint | IN | |
@USEGLOBALSETTINGS | bit | IN | |
@CREATEHISTORICALNAMECODE | tinyint | IN | |
@PAYMENTFORPLEDGERECEIPTAMOUNT | money | IN | |
@SEPAMANDATEID | uniqueidentifier | IN | |
@ADDSEPAMANDATE | bit | IN | |
@SEPAMANDATECUSTOMIDENTIFIER | nvarchar(35) | IN | |
@SEPAMANDATESIGNATUREDATE | date | IN | |
@SEPAMANDATETYPECODE | tinyint | IN | |
@INSTALLMENTAMOUNT | money | IN | |
@REQUIRECREDITCARDPROCESSING | bit | IN | |
@NOTEHTMLNOTE | nvarchar(max) | IN | |
@IMPORT | bit | IN | |
@SOLICITCODES | xml | IN |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_2_REVENUEBATCHCOMMIT
(
@ID uniqueidentifier = null output,
@CHANGEAGENTID uniqueidentifier,
@BATCHNUMBER nvarchar(100),
@CONSTITUENTID uniqueidentifier = null,
@TYPECODE tinyint = 0,
@DATE datetime,
@AMOUNT money,
@PAYMENTMETHODCODE tinyint = 0,
@DONOTACKNOWLEDGE bit = 0,
@DONOTRECEIPT bit = 0,
@CHECKDATE dbo.UDT_FUZZYDATE = '00000000',
@CHECKNUMBER nvarchar(20) = '',
@REFERENCEDATE dbo.UDT_FUZZYDATE = '00000000',
@REFERENCENUMBER nvarchar(20) = '',
@CARDHOLDERNAME nvarchar(255) = '',
@CREDITCARDNUMBER nvarchar(20) = '',
@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,
@INSTALLMENTFREQUENCYCODE tinyint = 5,
@INSTALLMENTSTARTDATE datetime = null,
@INSTALLMENTENDDATE datetime = null,
@NUMBEROFINSTALLMENTS int = 1,
@PROPERTYSUBTYPECODEID uniqueidentifier = null,
@GIFTINKINDSUBTYPECODEID uniqueidentifier = null,
@RECEIPTAMOUNT money = 0,
@CONSTITUENTACCOUNTID uniqueidentifier = null,
@SPLITS xml = null,
@SINGLEDESIGNATIONID uniqueidentifier = null,
@REVENUESTREAMS xml = null,
@SOLICITORS xml = null,
@BENEFITS xml = null,
@FINDERNUMBER bigint = 0,
@SOURCECODE nvarchar(60) = '',
@APPEALID uniqueidentifier = null,
@FINDERNUMBERISVALID bit = null,
@USERMODIFIEDBENEFITS bit = 0,
@BENEFITSWAIVED bit = 0,
@POSTDATE datetime = null,
@POSTSTATUSCODE tinyint = null,
@SENDPLEDGEREMINDER bit = 1,
@SALEDATE datetime = null,
@SALEAMOUNT money = null,
@BROKERFEE money = null,
@SALEPOSTSTATUSCODE tinyint = null,
@SALEPOSTDATE datetime = null,
@NOTETITLE nvarchar(50) = '',
@NOTEAUTHORID uniqueidentifier = null,
@NOTEDATEENTERED datetime = null,
@NOTETYPECODEID uniqueidentifier = null,
@NOTETEXTNOTE nvarchar(max) = '',
@GIVENANONYMOUSLY bit = 0,
@GIVENANONYMOUSLYDEFAULTEDFORCONSTITUENTID uniqueidentifier = null,
@USERMODIFIEDRECEIPTAMOUNT bit = 0,
@PLEDGESUBTYPEID uniqueidentifier = null,
@REJECTIONCODEID uniqueidentifier = null,
@CONSTITUENTLOOKUPID uniqueidentifier = null,
@MAILINGID uniqueidentifier = null,
@CHANNELCODEID uniqueidentifier = null,
@VALIDATEONLY bit = 0,
@INSTALLMENTS xml = null,
@PAYMENTFORPLEDGEAMOUNT money = null,
@RECOGNITIONS xml = null,
@DIDRECOGNITIONSDEFAULT bit = 1,
@TRIBUTES xml = null,
@UNAPPLIEDMATCHINGGIFTSPLITS xml = null,
@UNAPPLIEDMATCHINGGIFTAMOUNT money = 0,
@RECEIPTTYPECODE tinyint = null,
@OTHERPAYMENTMETHODCODEID uniqueidentifier = null,
@LETTERCODEID as uniqueidentifier = null,
@ACKNOWLEDGEDATE as datetime = null,
@REFERENCE as nvarchar(255) = null,
@CATEGORYCODEID uniqueidentifier = null,
@ACKNOWLEDGEEID uniqueidentifier = null,
@APPLICATIONINFO as nvarchar(60) = null,
@OTHERTYPECODEID uniqueidentifier = null,
@OPPORTUNITYID uniqueidentifier = null,
@DIRECTDEBITRESULTCODE nvarchar(10) = '',
@LOWPRICE decimal(19,4) = null,
@HIGHPRICE decimal(19,4) = null,
@NUMBEROFUNITSSOLD decimal(20,3) = null,
@USERMODIFIEDNUMBEROFUNITSSOLD bit = null,
@CREDITCARDTOKEN uniqueidentifier = null,
@REJECTIONMESSAGE nvarchar(500) = '',
-- PARTIALCREDITCARDNUMBER is used to support import and
-- credit card - last 4 digits recurring gifts
@PARTIALCREDITCARDNUMBER nvarchar(4) = '',
@STANDINGORDERCONSTITUENTACCOUNTID uniqueidentifier = null,
@STANDINGORDERREFERENCENUMBER nvarchar(18) = '',
@STANDINGORDERREFERENCEDATE dbo.UDT_FUZZYDATE = '00000000',
@STANDINGORDERSETUP bit = null,
@STANDINGORDERSETUPDATE datetime = null,
@TAXDECLARATIONS xml = null,
@TRANSACTIONID uniqueidentifier = null,
@ISTRANSIENTCARD bit = null,
@DECLINESGIFTAID bit = null,
@DDISOURCECODEID uniqueidentifier = null,
@DDISOURCEDATE date = null,
@ISCOVENANT bit = null,
@AMOUNTFORVAT money = 0,
@VATTAXRATEID uniqueidentifier = null,
@VATAMOUNT money = 0,
@ADDITIONALAPPLICATIONSSTREAM xml = null,
@REVENUELOOKUPID nvarchar(100) = '',
@APPLICATIONSOLICITORS xml = null,
@APPLICATIONRECOGNITIONS xml = null,
@CURRENTAPPUSERID uniqueidentifier = null,
@MGGENERATED bit = null,
@MGALTERED bit = null,
@MATCHINGGIFTS xml = null,
@PAYINGPENDINGREVENUEID uniqueidentifier = null,
@GIFTINKINDITEMNAME nvarchar(100) = '',
@GIFTINKINDDISPOSITIONCODE tinyint = 0,
@GIFTINKINDNUMBEROFUNITS int = 0,
@GIFTINKINDFAIRMARKETVALUE money = 0,
@DIRECTDEBITISREJECTED bit = null,
@PERCENTAGEBENEFITS xml = null,
@BATCHROWID uniqueidentifier = null,
@ISGIFTAIDSPONSORSHIP bit = null,
@LOCKBOXID uniqueidentifier = null,
@LOCKBOXBATCHNUMBER nvarchar(100) = '',
@LOCKBOXBATCHSEQUENCE int = 0,
@PDACCOUNTSYSTEMID uniqueidentifier = null,
@APPLICATIONBUSINESSUNITS xml = null,
@TRANSACTIONCURRENCYID uniqueidentifier = null,
@BASECURRENCYID uniqueidentifier = null,
@BASEEXCHANGERATEID uniqueidentifier = null,
@EXCHANGERATE decimal(20,8) = null,
@GENERATEREFERENCENUMBER bit = 1,
@APPLYBYPERCENT bit = 0, -- AdiSa: This field is for UI purposes only, but needs to be stored in the database.
@SOURCECODEIMPORT nvarchar(60) = '',
@MERCHANTACCOUNTID uniqueidentifier = null,
@SETNULLBASEEXCHANGERATETOLATEST bit = 1,
@SALE_LOWPRICE decimal(19,4) = null,
@SALE_MEDIANPRICE decimal(19,4) = null,
@SALE_HIGHPRICE decimal(19,4) = null,
@VENDORID nvarchar(50) = '',
@BBNCTRANID int = 0,
@BBNCORIGINPAGENAME nvarchar(100) = '',
@BBNCORIGINPAGEID int = 0,
@RECEIPTNUMBER nvarchar(30) = null,
@RECEIPTSTACKSHORTNAME nvarchar(20) = '',
@MARKGIFTASRECEIPTED bit = 0,
@EMAILID int = 0,
@EMAILSUBJECT nvarchar(4000) = '',
@EMAILNAME nvarchar(510) = '',
@NAMECODE tinyint = 1,
@SIMILARADDRESSCODE tinyint = 3,
@UNSIMILARADDRESSCODE tinyint = 3,
@NEWADDRESSENDDATECODE tinyint = 0,
@NEWADDRESSPRIMARYCODE tinyint = 1,
@BIRTHDATERULECODE tinyint = 0,
@DIFFERENTPHONECODE tinyint = 3,
@NEWPHONEENDDATECODE tinyint = 0,
@NEWPHONEPRIMARYCODE tinyint = 1,
@DIFFERENTEMAILCODE tinyint = 3,
@NEWEMAILENDDATECODE tinyint = 0,
@NEWEMAILPRIMARYCODE tinyint = 1,
@USEGLOBALSETTINGS bit = 1,
@CREATEHISTORICALNAMECODE tinyint = 1,
@PAYMENTFORPLEDGERECEIPTAMOUNT money = 0,
@SEPAMANDATEID uniqueidentifier = null,
@ADDSEPAMANDATE bit = 0,
@SEPAMANDATECUSTOMIDENTIFIER nvarchar(35) = '',
@SEPAMANDATESIGNATUREDATE date = null,
@SEPAMANDATETYPECODE tinyint = 0,
@INSTALLMENTAMOUNT money = 0,
@REQUIRECREDITCARDPROCESSING bit = 0,
@NOTEHTMLNOTE nvarchar(max) = '',
@IMPORT bit = 0,
@SOLICITCODES xml = null
)
as
set nocount on;
declare @CURRENTDATE datetime;
declare @APPLIEDTOPLEDGES money;
declare @ADDITIONALAPPLICATIONS bit;
declare @TRANSACTIONAMOUNT money;
set @ADDITIONALAPPLICATIONS = 0;
set @TRANSACTIONAMOUNT = @AMOUNT;
if @ID is null
set @ID = newid();
set @CURRENTDATE = GetDate();
declare @NEXTTRANSACTIONDATE datetime;
-- Multicurrency setup
declare @BASEAMOUNT money;
declare @ORGANIZATIONAMOUNT money;
declare @ORGANIZATIONCURRENCYID uniqueidentifier;
declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;
declare @TRANSACTIONVATAMOUNT money;
declare @TRANSACTIONAMOUNTTOTAX money;
declare @BASEVATAMOUNT money;
declare @BASEAMOUNTTOTAX money;
declare @ORGANIZATIONVATAMOUNT money;
declare @ORGANIZATIONAMOUNTTOTAX money;
declare @BASETOORGANIZATIONEXCHANGERATEID uniqueidentifier;
set @ORGANIZATIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
-- Grab base and transaction currency if they weren't provided.
-- First make sure we have an account system, and get the base currency from that.
-- Then make sure we've got a base currency, and get the transaction currency from that.
if @PDACCOUNTSYSTEMID is null and @TYPECODE <> 3
set @PDACCOUNTSYSTEMID = dbo.UFN_PDACCOUNTSYSTEM_GETDEFAULTSYSTEMIDSFORUSER(@CURRENTAPPUSERID)
--Use the following logic for recurring gifts.
if @TYPECODE = 3
begin
-- Check for BBIS batch assignment settings.
if @BBNCTRANID > 0
begin
declare @MAPPINGRULEID uniqueidentifier
declare @BID uniqueidentifier
declare @ORIGINATINGBATCHID uniqueidentifier
declare @COUNTER int = 1
select @BID = BATCHID from dbo.BATCHREVENUE BR where BR.ID = @BATCHROWID
select @ORIGINATINGBATCHID = ORIGINATINGBATCHID from dbo.BATCH where ID = @BID
-- This logic will Returns the original batch id if batch has multiple exception batches.
-- Also only original batch has its reference with NETCOMMUNITYMAPPINGRULEBATCH record in order to get batch assignment account system id
-- COUNTER variable here with take care while loop not get infinite
while (@ORIGINATINGBATCHID IS NOT NULL AND @COUNTER <= 100)
begin
select @ORIGINATINGBATCHID = ORIGINATINGBATCHID, @BID = ID from dbo.BATCH where ID = @ORIGINATINGBATCHID;
set @COUNTER = @COUNTER + 1;
end
select @MAPPINGRULEID = MAPPINGRULEID from dbo.NETCOMMUNITYMAPPINGRULEBATCH where BATCHID = @BID
select @PDACCOUNTSYSTEMID = DEFAULTPDACCOUNTSYSTEMID from dbo.NETCOMMUNITYMAPPINGRULE NCMR left join dbo.NETCOMMUNITYTRANSACTIONPROCESSOR NCTP on NCMR.NETCOMMUNITYTRANSACTIONPROCESSORID = NCTP.ID
right join dbo.BATCHREVENUEBBNCINFO BRB on BRB.NETCOMMUNITYTRANSACTIONPROCESSORID = NCTP.ID
where BATCHREVENUEID = @BATCHROWID AND NCMR.ID = @MAPPINGRULEID
end
-- Check for default in batch template.
if @PDACCOUNTSYSTEMID is null
begin
with xmlnamespaces('bb_appfx_commontypes' as ns)
,CTE_BATCHTEMPLATEDETAILS as
(
select t.c.value('@FieldID','varchar(max)') AS FieldID,t.c.value('@DefaultValueText','varchar(max)') AS DefaultValueText
from (select BT.FORMDEFINITIONXML from BATCHREVENUE BR
left join BATCH B on BR.BATCHID = B.ID left join
BATCHTEMPLATE BT on BT.ID = B.BATCHTEMPLATEID
where BR.ID = @BATCHROWID) B
cross apply B.FORMDEFINITIONXML.nodes('//ns:FormFields/ns:FormField') t(c)
)
select @PDACCOUNTSYSTEMID = DefaultValueText from CTE_BATCHTEMPLATEDETAILS
where FieldID = 'PDACCOUNTSYSTEMID'
end
-- If account is still not populated, fall back to user's default account system.
if @PDACCOUNTSYSTEMID is null
set @PDACCOUNTSYSTEMID = dbo.UFN_PDACCOUNTSYSTEM_GETDEFAULTSYSTEMIDSFORUSER(@CURRENTAPPUSERID)
end
-- Make sure @brokerfee is not null (avoid non-nullable error)
if @BROKERFEE is null
set @BROKERFEE = 0;
if @BASECURRENCYID is null
begin
declare @CURRENCYSETID uniqueidentifier
select @CURRENCYSETID = CURRENCYSETID
from dbo.PDACCOUNTSYSTEM
where ID = @PDACCOUNTSYSTEMID
select
@BASECURRENCYID = CURRENCYSET.BASECURRENCYID
from
dbo.CURRENCYSET
where
CURRENCYSET.ID = coalesce(@CURRENCYSETID,dbo.UFN_CURRENCYSET_GETAPPUSERCURRENCYSET(@CURRENTAPPUSERID));
if @BASECURRENCYID is null
set @BASECURRENCYID = @ORGANIZATIONCURRENCYID;
end
if @TRANSACTIONCURRENCYID is null
set @TRANSACTIONCURRENCYID = @BASECURRENCYID;
if @EXCHANGERATE is null
set @EXCHANGERATE = 0;
-- Create the base exchange rate when "Spot rate" is selected.
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
-- Populate the other amount fields and the organization exchange rate.
exec dbo.USP_CURRENCY_GETCURRENCYVALUES @AMOUNT, @DATE, @BASECURRENCYID, @BASEEXCHANGERATEID output, @TRANSACTIONCURRENCYID output, @BASEAMOUNT output, @ORGANIZATIONCURRENCYID output, @ORGANIZATIONAMOUNT output, @ORGANIZATIONEXCHANGERATEID output, 1, @BASETOORGANIZATIONEXCHANGERATEID output;
-- Get the default anonymous recognition setting.
declare @DEFAULTANONYMOUSRECOGNITION bit = 0;
if @GIVENANONYMOUSLY = 1
begin
--Select the value for default anonymous recognition setting
select @DEFAULTANONYMOUSRECOGNITION = DEFAULTANONYMOUSRECOGNITION
from dbo.RECOGNITIONDEFAULT
end
-- Add transaction currency to the @SPLITS collection to help in validation.
set @SPLITS =
(
select
ID,
DESIGNATIONID,
AMOUNT,
SEQUENCE,
APPLICATIONCODE,
TYPECODE,
DIDCAMPAIGNSDEFAULT,
case when CAMPAIGNS is null then null else CAMPAIGNS.query('(CAMPAIGNS/ITEM)') end as CAMPAIGNS,
DECLINESGIFTAID,
ISGIFTAIDSPONSORSHIP,
REVENUESPLITID,
@TRANSACTIONCURRENCYID TRANSACTIONCURRENCYID
from dbo.UFN_REVENUEBATCH_SPLITSWITHCHILDREN_FROMITEMLISTXML(@SPLITS)
for xml raw('ITEM'),type,elements,root('SPLITS'),BINARY BASE64
);
if @PAYMENTFORPLEDGEAMOUNT is null
set @PAYMENTFORPLEDGEAMOUNT = 0;
if @PAYMENTFORPLEDGERECEIPTAMOUNT is null
set @PAYMENTFORPLEDGERECEIPTAMOUNT = 0;
if @PAYMENTMETHODCODE = 11 --Standing order
begin
set @CONSTITUENTACCOUNTID = @STANDINGORDERCONSTITUENTACCOUNTID;
set @REFERENCEDATE = @STANDINGORDERREFERENCEDATE;
if @CONSTITUENTACCOUNTID is not null and not exists (
select 1 from dbo.CONSTITUENTACCOUNT
where CONSTITUENTID = coalesce(@CONSTITUENTID,@CONSTITUENTLOOKUPID) and ID = @CONSTITUENTACCOUNTID
union
select 1 from dbo.BATCHREVENUECONSTITUENTACCOUNT
where CONSTITUENTID = coalesce(@CONSTITUENTID,@CONSTITUENTLOOKUPID) and ID = @CONSTITUENTACCOUNTID
)
raiserror('BBERR_STANDINGORDERCONSTITUENTACCOUNTID_CONSTITUENT_NOTEQUAL',13,1)
if @GENERATEREFERENCENUMBER is null or @GENERATEREFERENCENUMBER = 1
select
@STANDINGORDERREFERENCENUMBER = '',
@GENERATEREFERENCENUMBER = 1
if @REFERENCEDATE is null or @REFERENCEDATE = '' or @REFERENCEDATE = '00000000'
select @REFERENCEDATE = convert(nvarchar,DATEPART(yyyy,@CURRENTDATE)) + right('00' + convert(nvarchar,DATEPART(mm,@CURRENTDATE)),2) + right('00' + convert(nvarchar,DATEPART(dd,@CURRENTDATE)),2);
end
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
--If the post status is null, set it to 'Not posted' so that the GL distributions will get created for the record.
if @POSTSTATUSCODE is null
set @POSTSTATUSCODE = 1;
--JamesWill CR275936-052407 2007/05/29 Don't try to post recurring gifts OR Check GL business rule for this account system
if @TYPECODE = 3 or dbo.UFN_PDACCOUNTSYSTEM_ALLOWGLDISTRIBUTIONS(@PDACCOUNTSYSTEMID) = 0
set @POSTSTATUSCODE = 2;
if @POSTSTATUSCODE = 2 --Do not post
set @POSTDATE = null
else
if @POSTDATE is null
set @POSTDATE = @DATE
declare @DONOTPOST bit;
set @DONOTPOST = case @POSTSTATUSCODE when 2 then 1 else 0 end;
--Validate post date --JamesWill WI164979 2011-07-01 Don't validate post date if we're not posting this
declare @ERROR nvarchar(255)
if @DONOTPOST <> 1
begin
set @ERROR = dbo.UFN_GLDISTRIBUTION_VALIDPOSTDATE(@POSTDATE)
if @ERROR <> ''
raiserror(@ERROR,13,1)
end
set @APPLIEDTOPLEDGES = 0;
if @RECEIPTAMOUNT is null
set @RECEIPTAMOUNT = 0;
declare @ISORGANIZATION bit
select @ISORGANIZATION = ISORGANIZATION
from dbo.CONSTITUENT where ID = @CONSTITUENTID
if @ISORGANIZATION is null
select @ISORGANIZATION = ISORGANIZATION
from dbo.BATCHREVENUECONSTITUENT where ID = @CONSTITUENTID
--We need to convert the MGSPLITS to regular SPLITS (involves changing the root from "MGSPLITS" to "SPLITS" and adding a "REVENUEID" element)
declare @MGSPLITSTABLE table
(
ID uniqueidentifier,
DESIGNATIONID uniqueidentifier,
AMOUNT money,
SEQUENCE int
);
declare @SENDNEWINSTRUCTION bit;
declare @NEWINSTRUCTIONTOSEND tinyint;
begin try
if @FINDERNUMBER is null
set @FINDERNUMBER = 0;
if coalesce(@REJECTIONMESSAGE, '') <> ''
begin
raiserror(@REJECTIONMESSAGE, 13, 1);
end
if @BENEFITSWAIVED = 0
begin
if @BENEFITS is not null
begin
if exists(select BENEFITID,QUANTITY,UNITVALUE
from dbo.UFN_REVENUEBATCH_GETBENEFITS_FROMITEMLISTXML(@BENEFITS)
where QUANTITY<0)
raiserror('ERR_REVENUEBENEFIT_QUANTITY_NONNEGATIVE', 13, 1);
if exists(select BENEFITID,QUANTITY,UNITVALUE
from dbo.UFN_REVENUEBATCH_GETBENEFITS_FROMITEMLISTXML(@BENEFITS)
where UNITVALUE<0)
raiserror('ERR_REVENUEBENEFIT_VALUE_NONNEGATIVE', 13, 1);
end
if @PERCENTAGEBENEFITS is not null
begin
if exists(select BENEFITID, PERCENTAPPLICABLEAMOUNT, VALUEPERCENT
from dbo.UFN_REVENUEBATCH_GETBENEFITSPCT_FROMITEMLISTXML(@PERCENTAGEBENEFITS)
where PERCENTAPPLICABLEAMOUNT<0)
raiserror('ERR_REVENUEBENEFIT_PERCENTAPPLICABLEAMOUNT_NONNEGATIVE', 13, 1);
if exists(select BENEFITID, PERCENTAPPLICABLEAMOUNT, VALUEPERCENT
from dbo.UFN_REVENUEBATCH_GETBENEFITSPCT_FROMITEMLISTXML(@PERCENTAGEBENEFITS)
where VALUEPERCENT<0)
raiserror('ERR_REVENUEBENEFIT_VALUEPERCENT_NONNEGATIVE', 13, 1);
end
if ((@BENEFITS is not null) or (@PERCENTAGEBENEFITS is not null)) and (@DONOTPOST = 0)
exec dbo.USP_REVENUE_BENEFITS_VALIDATEGLMAPPINGS @TYPECODE, @PDACCOUNTSYSTEMID, @CURRENTAPPUSERID, @BENEFITS, @PERCENTAGEBENEFITS
end
/*Join the two benefit types together for the purpose of committing*/
declare @TOTALBENEFITS xml;
set @TOTALBENEFITS = dbo.UFN_REVENUEDETAIL_JOINBENEFITSFORBATCH(@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);
--Validate that the total benefit amount is not greater than the revenue amount.
declare @TOTALBENEFITAMOUNT money;
/*JamesWill CR269601-030907 2007/03/09 If @GIVENANONYMOUSLYDEFAULTEDFORCONSTITUENTID is not @CONSTITUENT ID, that means we
* didn't default GIVENANONYMOUSLY for this row. So default it now. */
--[157230] Don't default GIVENANONYMOUSLY if it is set to true
if @GIVENANONYMOUSLY <> 1
begin
if @GIVENANONYMOUSLYDEFAULTEDFORCONSTITUENTID is null or @GIVENANONYMOUSLYDEFAULTEDFORCONSTITUENTID <> @CONSTITUENTID
begin
select
@GIVENANONYMOUSLY = GIVESANONYMOUSLY
from dbo.CONSTITUENT
where ID = @CONSTITUENTID;
end
end
if @AMOUNT < 0
raiserror('ERR_AMOUNT_NEGATIVEAMOUNT', 13, 1);
if @NUMBEROFINSTALLMENTS > 150
raiserror('BBERR_NUMINSTALLMENTS',13,1);
if @NUMBEROFINSTALLMENTS = 0
set @NUMBEROFINSTALLMENTS = 1;
-- 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 @AMOUNTFORVAT = 0 and (@VATTAXRATEID is not null or @VATAMOUNT <> 0)
raiserror('INVALIDAMOUNTFORVAT_TAXRATEORVATAMOUNT', 13, 1);
if @AMOUNTFORVAT <> 0 and @AMOUNTFORVAT > @AMOUNT
raiserror('INVALIDAMOUNTFORVAT_REVENUEAMOUNT', 13, 1);
if @LOCKBOXID is not null
if @LOCKBOXBATCHNUMBER is null or @LOCKBOXBATCHSEQUENCE is null or Len(@LOCKBOXBATCHNUMBER) = 0
raiserror('INVALID_LOCKBOXREQUIREDFIELDS', 13, 1);
if @LOCKBOXBATCHSEQUENCE < 0
raiserror('INVALID_LOCKBOXBATCHSEQUENCEFIELDS', 13, 1);
if @BENEFITSWAIVED = 0
begin
select @TOTALBENEFITAMOUNT = coalesce(sum(TRANSACTIONTOTALVALUE), 0)
from dbo.UFN_REVENUE_GETBENEFITS_3_FROMITEMLISTXML(@TOTALBENEFITS);
if @TOTALBENEFITAMOUNT > @AMOUNT
raiserror('ERR_REVENUEBENEFIT_TOTALVALUELESSTHANREVENUEAMOUNT', 13, 1);
end
-- Currently recurring gifts have no GL mappings; JamesWill WI142554 payment methods of "Cash", "Check", "Credit Card", "None" and "Credit card - last 4 digits" can't be mapped, so this will throw a bad validation message
-- Pledge with payment method of "None" and "Credit Card" must be validated
if (@POSTSTATUSCODE = 1) and (@VALIDATEONLY = 1) and
(((@TYPECODE <> 3) and @PAYMENTMETHODCODE not in (0,1,2,9,98)) or ((@TYPECODE = 1) and @PAYMENTMETHODCODE in (2,9)))
exec dbo.USP_REVENUE_VALIDATEGLMAPPING @BATCHROWID, 1, @CURRENTAPPUSERID;
declare @SPLITCOUNT int
select @SPLITCOUNT = count(*) from @SPLITS.nodes('/SPLITS/ITEM') T(c)
declare @ADDITIONALAPPLICATIONCOUNT int
select @ADDITIONALAPPLICATIONCOUNT = count(*) from @ADDITIONALAPPLICATIONSSTREAM.nodes('/ADDITIONALAPPLICATIONSSTREAM/ITEM') T(c)
declare @BATCHOWNERID uniqueidentifier;
declare @BATCHID uniqueidentifier;
select
@BATCHOWNERID = APPUSERID,
@MERCHANTACCOUNTID = BATCHREVENUE.MERCHANTACCOUNTID,
@BATCHID = BATCH.ID
from dbo.BATCH
inner join dbo.BATCHREVENUE on BATCH.ID = BATCHREVENUE.BATCHID
where BATCHREVENUE.ID = @BATCHROWID
declare @CONSTITUENTEXISTS bit
if exists(select ID from dbo.CONSTITUENT where ID = @CONSTITUENTID)
set @CONSTITUENTEXISTS = 1
else
set @CONSTITUENTEXISTS = 0
-- Constituent record can't be restricted if it didn't exist already in the database,
-- so don't bother checking security if it's a constituent being added by this commit.
declare @CONSTITUENTSECURITY bit = (select CONSTITUENTSECURITY from dbo.REVENUEBATCHCONSTITUENTSECURITY);
if @CONSTITUENTSECURITY = 1 and @CONSTITUENTEXISTS = 1
begin
if dbo.UFN_CONSTITUENT_CANAPPUSERMODIFY(@CONSTITUENTID, @BATCHOWNERID) = 0
begin
raiserror('BBERR_CONSTITUENTSECURITY',13,1);
end
end
if @TYPECODE = 0 -- payment
begin
-- Revenue category not passed in case of pledge payment
if @REVENUESTREAMS is not null and @MATCHINGGIFTS is not null and @CATEGORYCODEID is null
begin
declare @PLEDGETYPECODE int = 0;
declare @APPLICATIONID uniqueidentifier = null;
select @PLEDGETYPECODE = TYPECODE, @APPLICATIONID = APPLICATIONID
from dbo.UFN_REVENUEBATCH_GETAPPLICATIONS_FROMITEMLISTXML(@REVENUESTREAMS);
if @PLEDGETYPECODE = 1 and @APPLICATIONID is not null
begin
select @CATEGORYCODEID = RC.GLREVENUECATEGORYMAPPINGID
from dbo.REVENUECATEGORY RC
inner join FINANCIALTRANSACTIONLINEITEM FTLI on FTLI.ID = RC.ID
inner join REVENUE_EXT RE on RE.ID = FTLI.FINANCIALTRANSACTIONID
where RE.ID = @APPLICATIONID;
if @CATEGORYCODEID = CAST(CAST(0 AS BINARY) AS UNIQUEIDENTIFIER)
set @CATEGORYCODEID = null
end
end
--Bug 158105 - AdamBu - 6/13/11 - Ensure that validation catches missing exchange rates.
if @VALIDATEONLY = 1 and @REVENUESTREAMS is not null and @BASEEXCHANGERATEID is null and @TRANSACTIONCURRENCYID <> @BASECURRENCYID
begin
if exists(
select 1
from dbo.UFN_REVENUEBATCH_GETAPPLICATIONS_FROMITEMLISTXML(@REVENUESTREAMS)
where not (
TYPECODE 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 @PAYMENTMETHODCODE = 255
set @PAYMENTMETHODCODE = null;
if @PAYMENTMETHODCODE = 2 and @AMOUNT > 0
begin
if @VALIDATEONLY = 0
begin
--If attempting to pay by credit card with the intent to process (token is not null), ensure an authorization code exists.
--This prevents a batch of credit card payments from being committed without the process running.
if @CREDITCARDTOKEN is not null and len(@AUTHORIZATIONCODE) = 0
begin
raiserror('BBERR_CREDITCARD_NOTPROCESSED', 13, 1);
end
end
--If REQUIRECREDITCARDPROCESSING is true and we don't have a token then the only way we want this batch to commit is if the user enters an authorization code.
if @CREDITCARDTOKEN is null and len(@AUTHORIZATIONCODE) = 0 and @REQUIRECREDITCARDPROCESSING = 1
begin
raiserror('BBERR_CREDITCARD_MISSINGTOKEN', 13, 1);
end
end
if @PAYMENTMETHODCODE = 4 --Stock
begin
-- Validate that the low/median/high price per share values aren't negative
if @LOWPRICE < 0
raiserror('The low price per share cannot be negative.', 13, 1)
if @MEDIANPRICE < 0
raiserror('The median price per share cannot be negative.', 13, 1)
if @HIGHPRICE < 0
raiserror('The high price per share cannot be negative.', 13, 1)
-- Validate that if any of the sold fields are set, the required sale field is set. For @NUMBEROFUNITSSOLD, verify it isn't
-- the same value as @NUMBEROFUNITS since it gets defaulted to that amount all the time.
if (@SALEDATE is not null or @SALEAMOUNT <> 0 or @BROKERFEE <> 0 or @SALEPOSTDATE is not null or @SALEPOSTSTATUSCODE <> 1 or (@NUMBEROFUNITSSOLD > 0))
begin
if @SALEDATE is null
raiserror('ERR_STOCK_SALEDATEREQUIRED', 13, 1)
if @SALEPOSTDATE is null and @SALEPOSTSTATUSCODE = 1
raiserror('ERR_STOCK_SALEGLPOSTDATEREQUIRED', 13, 1)
-- Validate GL Mappings
if @NUMBEROFUNITSSOLD > 0 and (@POSTSTATUSCODE = 1)
exec dbo.USP_REVENUE_STOCK_VALIDATEGLMAPPINGS @PDACCOUNTSYSTEMID, @CURRENTAPPUSERID, @AMOUNT, @SALEAMOUNT, @NUMBEROFUNITSSOLD, @MEDIANPRICE, @BROKERFEE
if @NUMBEROFUNITSSOLD = 0 and (@USERMODIFIEDNUMBEROFUNITSSOLD = 1 or @NUMBEROFUNITS <= 0)
raiserror('BBERR_STOCK_NUMBEROFUNITSSOLD', 13, 1)
end
if @NUMBEROFUNITSSOLD > @NUMBEROFUNITS
raiserror('Units sold must be less than or equal to units remaining.', 13, 1)
end
if @PAYMENTMETHODCODE = 5 --Property
begin
if (@SALEDATE is not null or @SALEAMOUNT <> 0 or @BROKERFEE <> 0 or @SALEPOSTDATE is not null or @SALEPOSTSTATUSCODE <> 1)
begin
if @SALEDATE is null
raiserror('ERR_PROPERTY_SALEDATEREQUIRED', 13, 1)
if @SALEPOSTDATE is null and @SALEPOSTSTATUSCODE = 1
raiserror('ERR_PROPERTY_SALEGLPOSTDATEREQUIRED', 13, 1)
end
end
--JamesWill 2007/06/04 CR276243-053007
if @PAYMENTMETHODCODE = 3 --Direct Debit
begin
if @CONSTITUENTACCOUNTID is null
raiserror('Please enter an Account for direct debit payments.', 13, 1);
end
if @PAYMENTMETHODCODE = 6 --Gift-in-Kind
begin
if @GIFTINKINDITEMNAME is null or @GIFTINKINDITEMNAME = ''
raiserror('BBERR_GIFTINKINDITEMNAMEREQUIRED', 13, 1)
if @GIFTINKINDDISPOSITIONCODE is null
raiserror('BBERR_GIFTINKINDDISPOSITIONCODEREQUIRED', 13, 1)
if @GIFTINKINDNUMBEROFUNITS < 0
raiserror('CK_GIFTINKINDPAYMENTMETHODDETAIL_VALIDFORNUMBEROFUNITS', 13, 1)
if @GIFTINKINDFAIRMARKETVALUE < 0
raiserror('CK_GIFTINKINDPAYMENTMETHODDETAIL_VALIDFORFAIRMARKETVALUE', 13, 1)
declare @GIFTINKINDVALUE as money = 0;
-- Catch any overflows
begin try
set @GIFTINKINDVALUE = @GIFTINKINDNUMBEROFUNITS * @GIFTINKINDFAIRMARKETVALUE
end try
begin catch
raiserror('BBERR_REVENUEAMOUNTNOTEQUALGIFTINKINDAMOUNT', 13, 1)
return 1
end catch
if (@GIFTINKINDNUMBEROFUNITS > 0 or @GIFTINKINDFAIRMARKETVALUE > 0) and (@AMOUNT <> @GIFTINKINDVALUE)
begin
raiserror('BBERR_REVENUEAMOUNTNOTEQUALGIFTINKINDAMOUNT', 13, 1)
return 1
end
end
-- DJH 5/27/2008 CR301226-052108 Validate that the payment method 'None' isn't used with payments
if @PAYMENTMETHODCODE = 9 -- None
raiserror('Only pledges or recurring gifts can have a payment method of ''None''.', 13, 1)
if @PAYMENTMETHODCODE = 255 or @PAYMENTMETHODCODE is null
raiserror('Only pledges or recurring gifts can have a blank payment method.', 13, 1)
if @PAYMENTMETHODCODE = 10 --Other
begin
if @OTHERPAYMENTMETHODCODEID is null
raiserror('Please enter an ''other method'' for other payments.', 13, 1);
end
if @PAYMENTMETHODCODE = 11 --Standing order
begin
if @CONSTITUENTACCOUNTID is null
raiserror('Please enter an Account for standing order payments.', 13, 1);
end
if @PAYMENTMETHODCODE = 98 --Credit card - last 4 digits
raiserror('Only recurring gifts can have a payment method of ''Credit card - last 4 digits''.', 13, 1);
declare @APPLICATIONCODE tinyint;
declare @SINGLEAPPLICATIONID uniqueidentifier;
declare @APPLICATIONTYPECODE tinyint;
declare @COMMITMENTAMOUNTDUE money; -- The amount due on the commitment in its currency.
declare @APPLICATIONCURRENCYID uniqueidentifier; -- The currency of the commitment.
declare @APPLICATIONEXCHANGERATEID uniqueidentifier; -- The exchange rate from row trans currency to the commitment currency.
declare @APPLICATIONCURRENCYAMOUNT money = @AMOUNT;
declare @STREAMCOUNT int;
select @STREAMCOUNT = count(*) from @REVENUESTREAMS.nodes('/REVENUESTREAMS/ITEM') T(c);
if @APPLICATIONINFO is not null
if len(@APPLICATIONINFO) > 0
if len(@APPLICATIONINFO) = 3
begin
set @APPLICATIONCODE = cast(substring(@APPLICATIONINFO, 3, 1) as tinyint);
set @revenuestreams = null
--JAK 10/21/10 bug 124899 - need to pull campaigns from additional applications in case the user modified them
if @ADDITIONALAPPLICATIONCOUNT = 1
begin
--DavidHe 11/11/2010 Bug 127918 - If category code isn't set in the row, but is set on a single additional application, set the value
if @CATEGORYCODEID is null
select
@CATEGORYCODEID = CATEGORYCODEID
from dbo.UFN_REVENUEBATCH_ADDITIONALAPPLICATIONWITHCHILDREN_FROMITEMLISTXML(@ADDITIONALAPPLICATIONSSTREAM)
end
end
else if len(@APPLICATIONINFO) > 3
begin
select
@SINGLEAPPLICATIONID = SINGLEAPPLICATIONID,
@APPLICATIONTYPECODE = APPLICATIONTYPECODE,
@COMMITMENTAMOUNTDUE = APPLICATIONAMOUNT
from dbo.UFN_REVENUEBATCH_PARSEAPPLICATIONINFO(@APPLICATIONINFO)
set @APPLICATIONCURRENCYID =
coalesce(
dbo.UFN_REVENUEBATCH_GETCURRENCYFORAPPLICATION(@SINGLEAPPLICATIONID, @APPLICATIONTYPECODE),
@TRANSACTIONCURRENCYID
);
if @TRANSACTIONCURRENCYID = @APPLICATIONCURRENCYID
begin
set @APPLICATIONCURRENCYAMOUNT = @AMOUNT;
end
else
begin
if @BASECURRENCYID = @APPLICATIONCURRENCYID
begin
set @APPLICATIONEXCHANGERATEID = @BASEEXCHANGERATEID
end
else
begin
set @APPLICATIONEXCHANGERATEID = dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(@TRANSACTIONCURRENCYID, @APPLICATIONCURRENCYID, @DATE, 0, null);
end
set @APPLICATIONCURRENCYAMOUNT = dbo.UFN_CURRENCY_CONVERT(@AMOUNT, @APPLICATIONEXCHANGERATEID);
end
set @SINGLEDESIGNATIONID = null
set @SPLITS = null
set @ADDITIONALAPPLICATIONSSTREAM = null
end
declare @UNAPPLIEDAMOUNT money;
declare @ADDITIONALAPPLICATIONSAMOUNT money;
if @ADDITIONALAPPLICATIONSSTREAM is not null
select @ADDITIONALAPPLICATIONSAMOUNT = sum(APPLIED)
from dbo.UFN_REVENUEBATCH_GETADDITIONALAPPLICATIONS_FROMITEMLISTXML(@ADDITIONALAPPLICATIONSSTREAM);
else
set @ADDITIONALAPPLICATIONSAMOUNT = 0;
if @SINGLEAPPLICATIONID is null
if @REVENUESTREAMS is not null and @STREAMCOUNT > 0
begin
select @UNAPPLIEDAMOUNT = sum(APPLIED)
from dbo.UFN_REVENUEBATCH_GETAPPLICATIONS_FROMITEMLISTXML(@REVENUESTREAMS);
if @UNAPPLIEDAMOUNT + @ADDITIONALAPPLICATIONSAMOUNT <> @AMOUNT
raiserror('The total amount must be equal to the sum of the amounts applied to commitments.', 13, 1);
set @SINGLEDESIGNATIONID = null
set @SPLITS = null
end
else
set @UNAPPLIEDAMOUNT = 0;
else
begin
-- User is unable to modify applied amounts for EFT batches (PAYINGPENDINGREVENUEID), so skip this check in that case.
if @REVENUESTREAMS is not null and @STREAMCOUNT > 0 and @PAYINGPENDINGREVENUEID is null
begin
select @UNAPPLIEDAMOUNT = sum(APPLIED)
from dbo.UFN_REVENUEBATCH_GETAPPLICATIONS_FROMITEMLISTXML(@REVENUESTREAMS);
if @UNAPPLIEDAMOUNT <> @AMOUNT
raiserror('The total amount must be equal to the sum of the amounts applied to commitments.', 13, 1);
end
else
set @UNAPPLIEDAMOUNT = @AMOUNT
--I do not believe this is a valid error - you should be able to over-apply a single commitment (bug 169531)
--if @COMMITMENTAMOUNTDUE < @APPLICATIONCURRENCYAMOUNT
-- raiserror('The total amount must be equal to the sum of the amounts applied to commitments.', 13, 1);
end
declare @REVENUESTREAMSAPPLIEDAMOUNT money = @UNAPPLIEDAMOUNT
if (@APPLICATIONINFO is null or len(@APPLICATIONINFO) = 0)
and (@ADDITIONALAPPLICATIONSAMOUNT = 0 and @ADDITIONALAPPLICATIONSSTREAM is null)
and (@REVENUESTREAMS is null or @REVENUESTREAMSAPPLIEDAMOUNT = 0)
-- no single app info + no revenue stream + no additional amounts = problem (no application) [bug #124131]
raiserror('ERR_ATLEASTONEAPPLICATION', 13, 1);
set @UNAPPLIEDAMOUNT = @AMOUNT - @UNAPPLIEDAMOUNT;
if not @REVENUESTREAMS is null and @STREAMCOUNT > 0
begin
exec dbo.USP_REVENUEBATCH_VALIDATEREVENUESTREAMS @AMOUNT, @REVENUESTREAMS, @PAYMENTMETHODCODE, @TRANSACTIONCURRENCYID, @DATE, @BASECURRENCYID, @BASEEXCHANGERATEID;
end
--KevinKoe 5/23/11 -- If a pledge was added through the "Apply to commitments" window but is not being applied to, then throw an error
if exists(select ID from dbo.BATCHREVENUEAPPLICATION where BATCHREVENUEID = @BATCHROWID and APPLIED = 0 and APPLICATIONTYPECODE = 2)
begin
raiserror('ERR_NEWPLEDGEADDED_UNAPPLIEDTO', 13, 1);
end
if @SINGLEAPPLICATIONID is null
begin
if not @ADDITIONALAPPLICATIONSSTREAM is null
exec dbo.USP_REVENUEBATCH_VALIDATEADDITIONALAPPLICATIONS @ADDITIONALAPPLICATIONSSTREAM, @TYPECODE, @PAYMENTMETHODCODE, @CATEGORYCODEID, @ISORGANIZATION;
end
else
exec dbo.USP_REVENUEBATCH_VALIDATESINGLEAPPLICATION @AMOUNT, @SINGLEAPPLICATIONID, @APPLICATIONTYPECODE, @APPLICATIONCURRENCYAMOUNT, @PAYMENTMETHODCODE;
if not @UNAPPLIEDMATCHINGGIFTSPLITS is null
exec dbo.USP_REVENUESPLITS_VALIDATEGLMAPPINGS @UNAPPLIEDMATCHINGGIFTSPLITS, @TYPECODE, @PAYMENTMETHODCODE, null, 1;
declare @BASEUNAPPLIEDAMOUNT money;
if @BASECURRENCYID <> @TRANSACTIONCURRENCYID
set @BASEUNAPPLIEDAMOUNT = dbo.UFN_CURRENCY_CONVERT(@UNAPPLIEDAMOUNT, @BASEEXCHANGERATEID);
else
set @BASEUNAPPLIEDAMOUNT = @UNAPPLIEDAMOUNT;
if @APPLICATIONCODE is not null and @SPLITCOUNT > 1
exec dbo.USP_REVENUEBATCH_VALIDATEAPPLICATIONSOLICITORS @APPLICATIONSOLICITORS, @SPLITS, @APPLICATIONCODE, null, @BASEEXCHANGERATEID
else if @APPLICATIONCODE is null and @SINGLEAPPLICATIONID is null and @ADDITIONALAPPLICATIONCOUNT > 1
exec dbo.USP_REVENUEBATCH_VALIDATEAPPLICATIONSOLICITORS @APPLICATIONSOLICITORS, null, null, @ADDITIONALAPPLICATIONSSTREAM, @BASEEXCHANGERATEID
else if not @SOLICITORS is null
exec dbo.USP_REVENUESOLICITOR_VALIDATESOLICITORS @SOLICITORS, @BASEUNAPPLIEDAMOUNT;
if not @TRIBUTES is null
begin
if (select sum(AMOUNT) from dbo.UFN_REVENUE_GETTRIBUTES_2_FROMITEMLISTXML(@TRIBUTES)) > @BASEAMOUNT
raiserror('The sum of the tribute amounts cannot be greater than the revenue amount.', 13, 1)
end
if not @SPLITS is null
begin
exec dbo.USP_REVENUESPLIT_VALIDATESPLITS @SPLITS, @UNAPPLIEDAMOUNT, @TYPECODE, null, @TRANSACTIONCURRENCYID;
exec dbo.USP_REVENUESPLITS_VALIDATEGLMAPPINGS @SPLITS, @TYPECODE, @PAYMENTMETHODCODE, @CATEGORYCODEID;
-- Only run if validating since we'll get there's a constraint on the table that will generate
-- an error if it's inserted and that's processed as an expected DB exception.
if @VALIDATEONLY = 1
begin
declare @CAMPAIGNS xml
declare CAMPAIGNCURSOR cursor local fast_forward for
select
CAMPAIGNS
from dbo.UFN_REVENUEBATCH_SPLITSWITHCHILDREN_FROMITEMLISTXML(@SPLITS)
open CAMPAIGNCURSOR
fetch next from CAMPAIGNCURSOR into @CAMPAIGNS
while @@FETCH_STATUS = 0
begin
if exists(select 1
from dbo.UFN_REVENUESPLIT_CAMPAIGNS_FROMITEMLISTXML(@CAMPAIGNS)
group by CAMPAIGNID, CAMPAIGNSUBPRIORITYID
having count(*) > 1)
begin
raiserror('Duplicate campaigns and subpriorities cannot be specified for the same designation.', 13, 1)
end
fetch next from CAMPAIGNCURSOR into @CAMPAIGNS
end
close CAMPAIGNCURSOR
deallocate CAMPAIGNCURSOR
end
end
else
begin
if @UNAPPLIEDAMOUNT - @ADDITIONALAPPLICATIONSAMOUNT > 0 or (@AMOUNT=0 and @ADDITIONALAPPLICATIONCOUNT <= 1 and @UNAPPLIEDAMOUNT - @ADDITIONALAPPLICATIONSAMOUNT=0)
begin
if @SINGLEDESIGNATIONID is null
raiserror('Please enter at least one designation.', 13, 1);
exec dbo.USP_DESIGNATION_VALIDATEGLMAPPINGS @SINGLEDESIGNATIONID, @TYPECODE, @PAYMENTMETHODCODE, 0, 0, @CATEGORYCODEID;
end
end;
if @RECEIPTAMOUNT > @AMOUNT
raiserror('The receipt amount must be less than or equal to the amount.', 13, 1);
/* AAW 10/27/09: Updated to validate multiple matching gifts with multiple MG splits. */
if @MATCHINGGIFTS is not null
begin
if exists(
select 1 from
@MATCHINGGIFTS.nodes('MATCHINGGIFTS/ITEM') as MATCHINGGIFTSXML([MATCHINGGIFT])
where MATCHINGGIFTSXML.[MATCHINGGIFT].value('AMOUNT[1]', 'money') < 0
)
raiserror('The matching gift amount cannot be negative.', 13, 1);
-- Validate each matching gift splits collection:
declare MGSPLITS_CURSOR cursor local fast_forward for
select
MATCHINGGIFTSXML.[MATCHINGGIFT].value('AMOUNT[1]', 'money'),
MATCHINGGIFTSXML.[MATCHINGGIFT].query('SPLITS')
from
@MATCHINGGIFTS.nodes('MATCHINGGIFTS/ITEM') as MATCHINGGIFTSXML([MATCHINGGIFT])
where
-- Filter out records that don't have splits. They won't be processed later when adding the matching gifts either.
MATCHINGGIFTSXML.[MATCHINGGIFT].exist('SPLITS') = 1;
declare @MGSPLITS xml;
declare @MGAMOUNT money;
open MGSPLITS_CURSOR;
fetch next from MGSPLITS_CURSOR into @MGAMOUNT, @MGSPLITS;
while @@fetch_status = 0
begin
-- Note that @MGAMOUNT is in transaction currency.
-- Do not validate transaction currency of the splits as we are deriving transaction currency from the associated matching gift.
exec dbo.USP_REVENUESPLIT_VALIDATESPLITS @MGSPLITS, @MGAMOUNT, @TYPECODE, null, null, 0;
fetch next from MGSPLITS_CURSOR into @MGAMOUNT, @MGSPLITS;
end
close MGSPLITS_CURSOR;
deallocate MGSPLITS_CURSOR;
end
-- DJH 5/27/2008 CR301499-052308 Validate that SALEPOSTDATE is set if the payment type is sold property or stock
--if @SALEDATE is not null and (@SALEPOSTDATE is null and @SALEPOSTSTATUSCODE=1)
-- raiserror('Sale GL post date is required.', 13, 1)
-- Verify that if the application type is other, that the other type code is set
if @APPLICATIONCODE = 1 and @OTHERTYPECODEID is null
raiserror('Other type is required if the application is Other.', 13, 1)
-- If an unapplied matching gift payment was added, verify the constituent selected is an organization
if @APPLICATIONCODE = 2
begin
if @ISORGANIZATION = 0
raiserror('Only organizations can add unapplied matching gift payments.', 13, 1)
end
end;
else if @TYPECODE = 1 -- pledge
begin
if @PAYMENTMETHODCODE = 255 or @PAYMENTMETHODCODE is null
set @PAYMENTMETHODCODE = 9;
if not @PAYMENTMETHODCODE in (2, 3, 9, 11)
begin
if dbo.UFN_INSTALLEDPRODUCTS_PRODUCTIS('9568A6C2-F7AA-45fd-8F54-21FE9654EE2D') = 1
raiserror('Payment method for a pledge must be ''Credit card'', ''Direct debit'', ''Standing order'', or ''None''.', 13, 1);
else
raiserror('Payment method for a pledge must be ''Credit card'', ''Direct debit'', or ''None''.', 13, 1);
end
--JamesWill 2007/06/04 CR276243-053007
if @PAYMENTMETHODCODE = 3 --Direct Debit
begin
if @CONSTITUENTACCOUNTID is null
raiserror('Please enter an Account for direct debit pledges.', 13, 1);
end
if @PAYMENTMETHODCODE = 11 --Standing order
begin
if @CONSTITUENTACCOUNTID is null
raiserror('Please enter an Account for standing order pledges.', 13, 1);
end
if not @SPLITS is null
begin
exec dbo.USP_REVENUESPLIT_VALIDATESPLITS @SPLITS, @AMOUNT, @TYPECODE, null, @TRANSACTIONCURRENCYID;
exec dbo.USP_REVENUESPLITS_VALIDATEGLMAPPINGS @SPLITS, @TYPECODE, @PAYMENTMETHODCODE, @CATEGORYCODEID;
end
else
begin
if @SINGLEDESIGNATIONID is null
raiserror('Please enter at least one designation.', 13, 1);
exec dbo.USP_DESIGNATION_VALIDATEGLMAPPINGS @SINGLEDESIGNATIONID, @TYPECODE, @PAYMENTMETHODCODE, 0, 0, @CATEGORYCODEID;
end
if not @SOLICITORS is null
exec dbo.USP_REVENUESOLICITOR_VALIDATESOLICITORS @SOLICITORS, @BASEAMOUNT;
if not @TRIBUTES is null
begin
if (select sum(AMOUNT) from dbo.UFN_REVENUE_GETTRIBUTES_2_FROMITEMLISTXML(@TRIBUTES)) > @BASEAMOUNT
raiserror('The sum of the tribute amounts cannot be greater than the revenue amount.', 13, 1)
end
if @INSTALLMENTSTARTDATE is null
set @INSTALLMENTSTARTDATE = @DATE;
if @INSTALLMENTFREQUENCYCODE not in (0,1,2,3,4,5,7,8)
raiserror('The installment frequencies of bimonthly and weekly are not supported by pledges.', 13, 1);
-- Validate installments if the frequency is irregular
if @INSTALLMENTFREQUENCYCODE = 4
exec dbo.USP_REVENUEINSTALLMENT_VALIDATEINSTALLMENTS @INSTALLMENTS, @DATE, @AMOUNT;
if @INSTALLMENTSTARTDATE < @DATE
raiserror('The schedule cannot start before the gift date.', 13, 1);
if @INSTALLMENTENDDATE < @INSTALLMENTSTARTDATE
raiserror('The schedule end date cannot occur before the schedule start date.', 13, 1);
if @PAYMENTFORPLEDGEAMOUNT > @AMOUNT
raiserror('The payment amount for a pledge cannot be more than the total pledge amount', 13, 1);
if @PAYMENTFORPLEDGERECEIPTAMOUNT > @PAYMENTFORPLEDGEAMOUNT
raiserror('BBERR_PAYMENTFORPLEDGERECEIPTAMOUNT_RECEIPTAMOUNTLARGERTHANAMOUNT', 13, 1);
end;
else if @TYPECODE = 3 -- recurring gift
begin
if @PAYMENTMETHODCODE = 255 or @PAYMENTMETHODCODE is null
set @PAYMENTMETHODCODE = 9;
if not @SPLITS is null
exec dbo.USP_REVENUESPLIT_VALIDATESPLITS @SPLITS, @AMOUNT, @TYPECODE, null, @TRANSACTIONCURRENCYID;
else
if @SINGLEDESIGNATIONID is null
raiserror('Please enter at least one designation.', 13, 1);
if not @SOLICITORS is null
exec dbo.USP_REVENUESOLICITOR_VALIDATESOLICITORS @SOLICITORS, @BASEAMOUNT;
if @INSTALLMENTSTARTDATE is null
set @INSTALLMENTSTARTDATE = @DATE;
if @INSTALLMENTFREQUENCYCODE = 4 or @INSTALLMENTFREQUENCYCODE = 5
raiserror('The installment frequencies of irregular and single installment are not supported by recurring gifts.', 13, 1);
if @PAYMENTMETHODCODE not in (0, 1, 2, 3, 9, 10, 11, 98, 101, 102)
begin
if dbo.UFN_INSTALLEDPRODUCTS_PRODUCTIS('9568A6C2-F7AA-45fd-8F54-21FE9654EE2D') = 1
raiserror('Payment method for a recurring gift must be ''Cash'', ''Check'', ''Credit card'', ''Credit card - last 4 digits'', ''Direct debit'', ''Other'', ''Standing order'', ''PayPal'', ''Venmo'', or ''None''.', 13, 1);
else
raiserror('Payment method for a recurring gift must be ''Cash'', ''Check'', ''Credit card'', ''Credit card - last 4 digits'', ''Direct debit'', ''Other'', ''PayPal'', ''Venmo'', or ''None''.', 13, 1);
end
--if semi-monthly ensure nexttransaction date starts on 1st or 15th
--JamesWill WI170811 2011-08-11 Do this before validating the transaction dates
if @INSTALLMENTFREQUENCYCODE = 7 and not (day(@INSTALLMENTSTARTDATE) = 1 or day(@INSTALLMENTSTARTDATE) = 15)
--Note: Use the old UFN_REVENUE_GETNEXTTRANSACTIONDATE function here because it doesn't require an ID and does exactly what is needed right here
set @NEXTTRANSACTIONDATE = dbo.UFN_REVENUE_GETNEXTTRANSACTIONDATE(@INSTALLMENTFREQUENCYCODE, @INSTALLMENTSTARTDATE);
else
set @NEXTTRANSACTIONDATE = @INSTALLMENTSTARTDATE;
--JamesWill 2007/06/04 CR276243-053007
if @PAYMENTMETHODCODE = 3 --Direct Debit
begin
if @CONSTITUENTACCOUNTID is null
raiserror('Please enter an Account for direct debit recurring gifts.', 13, 1);
end
if @PAYMENTMETHODCODE = 10 --Other
begin
if @OTHERPAYMENTMETHODCODEID is null
raiserror('Please enter an ''Other method'' for other payment method recurring gifts.', 13, 1);
end
if @PAYMENTMETHODCODE = 11 --Standing order
begin
if @CONSTITUENTACCOUNTID is null
raiserror('Please enter an Account for standing order recurring gifts.', 13, 1);
end
if @INSTALLMENTSTARTDATE < @DATE
raiserror('The schedule cannot start before the gift date.', 13, 1);
if @INSTALLMENTENDDATE < @INSTALLMENTSTARTDATE
raiserror('The schedule end date cannot occur before the schedule start date.', 13, 1);
--JamesWill WI170811 2011-08-11 Validate the next transaction date in the same manner as CK_REVENUESCHEDULE_NEXTTRANSACTIONDATEVALID on
--REVENUESCHEDULE
if not @NEXTTRANSACTIONDATE is null and @NEXTTRANSACTIONDATE > @INSTALLMENTENDDATE
raiserror('BBERR_RECURRINGGIFT_NEXTTRANSACTIONDATEVALID', 13, 1);
end;
-- Validate constituent fields if the constituent hasn't been created yet
if @CONSTITUENTEXISTS = 0
exec dbo.USP_REVENUEBATCH_VALIDATENEWCONSTITUENT @REVENUEBATCHCONSTITUENTID = @CONSTITUENTID, @ISDONOR = 1, @BATCHROWID = @BATCHROWID;
/* Validate all marketing data and dependent fields */
exec dbo.[USP_REVENUEBATCH_VALIDATEMARKETINGDATA]
@FINDERNUMBER = @FINDERNUMBER,
@SOURCECODE = @SOURCECODE,
@MAILINGID = @MAILINGID,
@APPEALID = @APPEALID,
@CONSTITUENTID = @CONSTITUENTID,
@BATCHID = @BATCHID;
if @APPLICATIONCODE is not null and @SPLITCOUNT > 1 and @TYPECODE = 0
exec dbo.USP_REVENUEBATCH_VALIDATEAPPLICATIONRECOGNITIONS @RECOGNITIONS, @SPLITS, @APPLICATIONCODE, NULL, @BATCHROWID
else if @APPLICATIONCODE is null and @SINGLEAPPLICATIONID is null and @ADDITIONALAPPLICATIONCOUNT > 1 and @TYPECODE = 0
exec dbo.USP_REVENUEBATCH_VALIDATEAPPLICATIONRECOGNITIONS @RECOGNITIONS, NULL, NULL, @ADDITIONALAPPLICATIONSSTREAM, @BATCHROWID
else
exec dbo.USP_REVENUEBATCH_VALIDATERECOGNITIONS @RECOGNITIONS, @BATCHROWID;
-- DJH CR299323-042908 4/30/2008
-- Using @GENERATEREVENUENOTE so that the same logic that determines
-- whether validation occurs also determines whether the table is
-- actually populated
--declare @GENERATEREVENUENOTE bit not necessary after revenue changes
if (@NOTETITLE <> '') or (not @NOTEAUTHORID is null) or (not @NOTEDATEENTERED is null) or (not @NOTETYPECODEID is null) or (not @NOTETEXTNOTE = '')
begin
--set @GENERATEREVENUENOTE = 1 not necessary after revenue changes
if @NOTETYPECODEID is null
raiserror('Please enter a type for the revenue note.', 13, 1)
if @NOTEDATEENTERED is null
raiserror('Please enter a date for the revenue note.', 13, 1)
end
if @DIRECTDEBITISREJECTED is null --JamesWill WI174301 2011-11-21
set @DIRECTDEBITISREJECTED = 0;
if @DIRECTDEBITISREJECTED = 1
raiserror('A rejected direct debit payment cannot be committed.', 13, 1);
--Duplicate check for Revenue Lookup ID
if @REVENUELOOKUPID is not null and rtrim(ltrim(@REVENUELOOKUPID)) <> '' and exists (select ID from dbo.FINANCIALTRANSACTION with (INDEX(IX_FINANCIALTRANSACTION_CALCULATEDUSERDEFINEDID)) where CALCULATEDUSERDEFINEDID = rtrim(ltrim(@REVENUELOOKUPID)) and ID <> @ID)
raiserror('BBERR_DUPLICATELOOKUPID', 13, 1);
if @VALIDATEONLY = 1
begin
-- When actually committing, the declarations will be validated through table constraints
exec dbo.USP_BATCH_VALIDATETAXDECLARATIONS @TAXDECLARATIONS = @TAXDECLARATIONS, @BATCHTYPE = 1, @CONSTITUENTID = @CONSTITUENTID
if @TYPECODE = 0 -- payment
begin
if not @LOCKBOXID is null
begin
if exists(select * from dbo.REVENUELOCKBOX where LOCKBOXID=@LOCKBOXID and BATCHNUMBER=@LOCKBOXBATCHNUMBER and BATCHSEQUENCE=@LOCKBOXBATCHSEQUENCE)
raiserror('ERR_UIX_REVENUELOCKBOX_LOCKBOXID_BATCHNUMBER_BATCHSEQUENCE', 13, 1);
if dbo.UFN_BATCHREVENUE_LOCKBOXINFOEXISTS(@BATCHROWID, @LOCKBOXID, @LOCKBOXBATCHNUMBER, @LOCKBOXBATCHSEQUENCE)=1
raiserror('ERR_UIX_REVENUELOCKBOX_LOCKBOXID_BATCHNUMBER_BATCHSEQUENCE', 13, 1);
end
end
end
-- Verify the solicit codes are valid
if @SOLICITCODES is not null
begin
-- address the auto end date issues for consent based SC
exec USP_BATCHREVENUE_ADJUSTSOLICITCODEDATERANGES @CONSTITUENTID, @SOLICITCODES, @CHANGEAGENTID;
-- reload from table to reflect changes made above
select @SOLICITCODES = dbo.UFN_BATCHREVENUE_GETCONSTITUENTSOLICITCODES_TOITEMLISTXML(@BATCHROWID);
-- validate the SC
declare @SOLICITCODESTABLEVALIDATION table
(
ID uniqueidentifier,
STARTDATE datetime,
ENDDATE datetime,
SOLICITCODEID uniqueidentifier
);
insert into @SOLICITCODESTABLEVALIDATION
(
ID,
STARTDATE,
ENDDATE,
SOLICITCODEID
)
select
case when ID is null then newid() else ID end,
STARTDATE,
ENDDATE,
SOLICITCODEID
from dbo.UFN_BATCHREVENUE_GETCONSTITUENTSOLICITCODES_FROMITEMLISTXML(@SOLICITCODES);
-- Check for solicit codes whose end date is before the start date
if exists ( select 1
from @SOLICITCODESTABLEVALIDATION
where
STARTDATE is not null and
STARTDATE > ENDDATE)
raiserror('BBERR_SOLICITCODES_STARTENDDATE', 13, 1);
-- Check for records with the same solicit code and overlapping dates
if exists ( select 1
from @SOLICITCODESTABLEVALIDATION SOLICITCODEONE
inner join @SOLICITCODESTABLEVALIDATION SOLICITCODETWO on
SOLICITCODEONE.ID <> SOLICITCODETWO.ID and
SOLICITCODEONE.SOLICITCODEID = SOLICITCODETWO.SOLICITCODEID and
dbo.UFN_DATES_AREDATESOVERLAPPING(SOLICITCODEONE.STARTDATE, SOLICITCODEONE.ENDDATE, SOLICITCODETWO.STARTDATE, SOLICITCODETWO.ENDDATE) = 1)
raiserror('BBERR_SOLICITCODES_NOOVERLAPPINGDATES', 13, 1);
end
-- Apply edits to an existing constituent
if @CONSTITUENTEXISTS <> 0
begin
if exists (select 'x' from dbo.BATCHCONSTITUENTUPDATE where ID = @BATCHROWID)
begin
declare
@CONSTITUENTTYPECODE tinyint,
@LASTNAME nvarchar(100),
@ORGANIZATIONNAME nvarchar(100),
@FIRSTNAME nvarchar(50),
@MIDDLENAME nvarchar(50),
@MAIDENNAME nvarchar(100),
@NICKNAME nvarchar(50),
@TITLECODEID uniqueidentifier,
@SUFFIXCODEID uniqueidentifier,
@GENDERCODE tinyint,
@GENDERCODEID uniqueidentifier,
@BIRTHDATE dbo.UDT_FUZZYDATE,
@GIVESANONYMOUSLY bit,
@WEBADDRESS dbo.UDT_WEBADDRESS,
@ADDRESSES xml,
@PHONES xml,
@EMAILADDRESSES xml,
@GROUP_DESCRIPTION nvarchar(300),
@GROUP_GROUPTYPEID uniqueidentifier,
@GROUP_STARTDATE datetime,
@INDUSTRYCODEID uniqueidentifier,
@NUMEMPLOYEES int,
@NUMSUBSIDIARIES int,
@PARENTCORPID uniqueidentifier,
@MARITALSTATUSCODEID uniqueidentifier,
@LOOKUPID nvarchar(100),
@ALTERNATELOOKUPIDS xml,
@SECURITYATTRIBUTES xml,
@DECEASED bit,
@DECEASEDDATE dbo.UDT_FUZZYDATE,
@INTERESTS xml,
@PROSPECTMANAGERFUNDRAISERID uniqueidentifier,
@CONSTITUENCIES xml,
@CONSTITUENT_SITES xml,
-- BBIS fields
@BBISCONSTITUENT_SITES xml,
@BBISSECURITYATTRIBUTES xml,
@BBISCONSTITUENCIES xml,
--spouse and business fields
@SPOUSEID uniqueidentifier,
@SPOUSE_LASTNAME nvarchar(100),
@SPOUSE_FIRSTNAME nvarchar(50),
@SPOUSE_MIDDLENAME nvarchar(50),
@SPOUSE_MAIDENNAME nvarchar(100),
@SPOUSE_NICKNAME nvarchar(50),
@SPOUSE_TITLECODEID uniqueidentifier,
@SPOUSE_SUFFIXCODEID uniqueidentifier,
@SPOUSE_GENDERCODE tinyint,
@SPOUSE_GENDERCODEID uniqueidentifier,
@SPOUSE_BIRTHDATE dbo.UDT_FUZZYDATE,
@SPOUSE_RECIPROCALTYPECODEID uniqueidentifier,
@SPOUSE_RELATIONSHIPTYPECODEID uniqueidentifier,
@BUSINESSID uniqueidentifier,
@BUSINESS_ADDRESSBLOCK nvarchar(150),
@BUSINESS_ADDRESSTYPECODEID uniqueidentifier,
@BUSINESS_CART nvarchar(10),
@BUSINESS_CITY nvarchar(50),
@BUSINESS_COUNTRYID uniqueidentifier,
@BUSINESS_DONOTMAIL bit,
@BUSINESS_DONOTMAILREASONCODEID uniqueidentifier,
@BUSINESS_DPC nvarchar(8),
@BUSINESS_LOT nvarchar(5),
@BUSINESS_NAME nvarchar(100),
@BUSINESS_NUMBER nvarchar(100),
@BUSINESS_PHONETYPECODEID uniqueidentifier,
@BUSINESS_RELATIONSHIPTYPECODEID uniqueidentifier,
@BUSINESS_RECIPROCALTYPECODEID uniqueidentifier,
@BUSINESS_STATEID uniqueidentifier,
@BUSINESS_POSTCODE nvarchar(12),
@REMOVESPOUSE bit,
@SPOUSE_LOOKUPID nvarchar(100),
@NAMEFORMATS xml,
@SPOUSE_PRIMARYSOFTCREDITRELATIONSHIPEXISTS bit,
@SPOUSE_PRIMARYSOFTCREDITMATCHFACTOR decimal(5,2),
@SPOUSE_PRIMARYRECOGNITIONTYPECODEID uniqueidentifier,
@SPOUSE_RECIPROCALSOFTCREDITRELATIONSHIPEXISTS bit,
@SPOUSE_RECIPROCALSOFTCREDITMATCHFACTOR decimal(5,2),
@SPOUSE_RECIPROCALRECOGNITIONTYPECODEID uniqueidentifier,
@BUSINESS_PRIMARYSOFTCREDITRELATIONSHIPEXISTS bit,
@BUSINESS_PRIMARYSOFTCREDITMATCHFACTOR decimal(5,2),
@BUSINESS_PRIMARYRECOGNITIONTYPECODEID uniqueidentifier,
@BUSINESS_RECIPROCALSOFTCREDITRELATIONSHIPEXISTS bit,
@BUSINESS_RECIPROCALSOFTCREDITMATCHFACTOR decimal(5,2),
@BUSINESS_RECIPROCALRECOGNITIONTYPECODEID uniqueidentifier
exec dbo.USP_EDITLOAD_BATCHCONSTITUENTUPDATEBATCHROW
@BATCHROWID,
null, --@DATALOADED output,
null, --@TSLONG output,
null, --@SEQUENCE
null, --@PRIMARYRECORDID
@CONSTITUENTTYPECODE output,
@BIRTHDATE output,
@FIRSTNAME output,
@GENDERCODE output,
@GIVESANONYMOUSLY output,
@LASTNAME output,
null, --@LOOKUP_ID
@MAIDENNAME output,
@MIDDLENAME output,
@NICKNAME output,
@SUFFIXCODEID output,
@TITLECODEID output,
@WEBADDRESS output,
null, --@ALTERNATELOOKUPIDS
@BBISSECURITYATTRIBUTES output,
null, --@DECEASED
null, --@DECEASEDDATE
null, --@CONSTITUENT_SITEID
null, --@INTERESTS
null, --@PROSPECTMANAGERFUNDRAISERID
@ADDRESSES output,
@PHONES output,
@EMAILADDRESSES output,
@BBISCONSTITUENCIES output,
@GROUP_GROUPTYPEID output,
@GROUP_DESCRIPTION output,
@GROUP_STARTDATE output,
@INDUSTRYCODEID output,
@NUMEMPLOYEES output,
@NUMSUBSIDIARIES output,
@PARENTCORPID output,
@MARITALSTATUSCODEID output,
@SPOUSEID output,
@SPOUSE_TITLECODEID output,
@SPOUSE_FIRSTNAME output,
@SPOUSE_NICKNAME output,
@SPOUSE_MIDDLENAME output,
@SPOUSE_MAIDENNAME output,
@SPOUSE_LASTNAME output,
@SPOUSE_SUFFIXCODEID output,
@SPOUSE_BIRTHDATE output,
@SPOUSE_GENDERCODE output,
@SPOUSE_LOOKUPID output,
@SPOUSE_RELATIONSHIPTYPECODEID output,
@SPOUSE_RECIPROCALTYPECODEID output,
@BUSINESSID output,
@BUSINESS_ADDRESSBLOCK output,
@BUSINESS_ADDRESSTYPECODEID output,
@BUSINESS_CART output,
@BUSINESS_CITY output,
@BUSINESS_COUNTRYID output,
@BUSINESS_DONOTMAIL output,
@BUSINESS_DONOTMAILREASONCODEID output,
@BUSINESS_DPC output,
null, --@BUSINESS_EMAILADDRESS
null, --@BUSINESS_EMAILADDRESSTYPECODEID
null, --@BUSINESS_INDUSTRYCODEID
null, --@BUSINESS_LOOKUPID
@BUSINESS_LOT output,
@BUSINESS_NAME output,
null, --@BUSINESS_NUMEMPLOYEES
null, --@BUSINESS_NUMSUBSIDIARIES
null, --@BUSINESS_PARENTCORPID
@BUSINESS_NUMBER output,
null, --@BUSINESS_PHONE_COUNTRYID
@BUSINESS_PHONETYPECODEID output,
@BUSINESS_RELATIONSHIPTYPECODEID output,
@BUSINESS_RECIPROCALTYPECODEID output,
@BUSINESS_STATEID output,
null, --@BUSINESS_WEBADDRESS
@BUSINESS_POSTCODE output,
null, --@SPOUSE_RELATIONSHIPTYPECODEIDSIMPLELIST
null, --@SPOUSE_RECIPROCALTYPECODEIDSIMPLELIST
null, --@BUSINESS_RELATIONSHIPTYPECODEIDSIMPLELIST
null, --@BUSINESS_RECIPROCALTYPECODEIDSIMPLELIST
@BUSINESS_PRIMARYSOFTCREDITRELATIONSHIPEXISTS output,
@BUSINESS_PRIMARYSOFTCREDITMATCHFACTOR output,
@BUSINESS_RECIPROCALSOFTCREDITRELATIONSHIPEXISTS output,
@BUSINESS_RECIPROCALSOFTCREDITMATCHFACTOR output,
@BUSINESS_PRIMARYRECOGNITIONTYPECODEID output,
@BUSINESS_RECIPROCALRECOGNITIONTYPECODEID output,
null, --@BUSINESS_EMAILADDRESSSTARTDATE
@SPOUSE_PRIMARYSOFTCREDITRELATIONSHIPEXISTS output,
@SPOUSE_PRIMARYSOFTCREDITMATCHFACTOR output,
@SPOUSE_RECIPROCALSOFTCREDITRELATIONSHIPEXISTS output,
@SPOUSE_RECIPROCALSOFTCREDITMATCHFACTOR output,
@SPOUSE_PRIMARYRECOGNITIONTYPECODEID output,
@SPOUSE_RECIPROCALRECOGNITIONTYPECODEID output,
@BBISCONSTITUENT_SITES output,
null, --@SPOUSE_ALTERNATELOOKUPIDS
null, --@SPOUSE_IMPORTLOOKUPID
null, --@ROWFROMBATCHUI
null, --@BBNCTRANID
null, --@PAGEID
null, --@PAGENAME
null, --@BBNCUSERID
@REMOVESPOUSE output,
null, --@DUPLICATERECORDID
null, --@SOCIALMEDIAACCOUNTS
null, --@DOMANUALREVIEWFORAUTOMATCH
null, --@RELATIONSHIPS
null, --@NETCOMMUNITYTRANSACTIONPROCESSORID
null, --@BBNCID,
null, --@NAMECODE
null, --@SIMILARADDRESSCODE
null, --@UNSIMILARADDRESSCODE
null, --@NEWADDRESSENDDATECODE
null, --@NEWADDRESSPRIMARYCODE
null, --@BIRTHDATERULECODE
null, --@DIFFERENTPHONECODE
null, --@NEWPHONEENDDATECODE
null, --@NEWPHONEPRIMARYCODE
null, --@DIFFERENTEMAILCODE
null, --@NEWEMAILENDDATECODE
null, --@NEWEMAILPRIMARYCODE
null, --@USEGLOBALSETTINGS
null, --@CREATEHISTORICALNAMECODE
@NAMEFORMATS output,
null, --@SUBMITTEDLOOKUPID
null, --@SUBMITTEDCLASSYEAR
null, --@SUBMITTEDEDUCATIONALINSTITUTION
null, --@REQUESTSNOEMAIL
null, --@ORIGINAL_KEYNAME
null, --@ORIGINAL_FIRSTNAME
null, --@SOLICITCODES
@GENDERCODEID output,
@SPOUSE_GENDERCODEID output
-- Pull in fields not handled by the ERB constituent edit form so they don't get overwritten by CUB commit.
exec dbo.USP_DATAFORMTEMPLATE_EDITLOAD_CONSTITUENTUPDATEBATCHTEMPLATE
@CONSTITUENTID,
@LOOKUPID = @LOOKUPID output,
@ALTERNATELOOKUPIDS = @ALTERNATELOOKUPIDS output,
@SECURITYATTRIBUTES = @SECURITYATTRIBUTES output,
@DECEASED = @DECEASED output,
@DECEASEDDATE = @DECEASEDDATE output,
@INTERESTS = @INTERESTS output,
@PROSPECTMANAGERFUNDRAISERID = @PROSPECTMANAGERFUNDRAISERID output,
@CONSTITUENCIES = @CONSTITUENCIES output,
@CONSTITUENT_SITES = @CONSTITUENT_SITES output
-- add the bbis values to the constituency, sited and security attributes collections
set @CONSTITUENT_SITES = (select * from
(select SITEID
from dbo.UFN_BATCHCONSTITUENTUPDATE_GETSITES_FROMITEMLISTXML(@CONSTITUENT_SITES)
union
select SITEID
from dbo.UFN_BATCHCONSTITUENTUPDATE_GETSITES_FROMITEMLISTXML(@BBISCONSTITUENT_SITES)
where SITEID not in (select SITEID from dbo.UFN_BATCHCONSTITUENTUPDATE_GETSITES_FROMITEMLISTXML(@CONSTITUENT_SITES))) A
for xml raw('ITEM'),type,elements,root('CONSTITUENT_SITES'),BINARY BASE64
)
set @CONSTITUENT_SITES = (select * from
(select SITEID
from dbo.UFN_BATCHCONSTITUENTUPDATE_GETSITES_FROMITEMLISTXML(@CONSTITUENT_SITES)
union
select SITEID
from dbo.UFN_BATCHCONSTITUENTUPDATE_GETSITES_FROMITEMLISTXML(@BBISCONSTITUENT_SITES)
where SITEID not in (select SITEID from dbo.UFN_BATCHCONSTITUENTUPDATE_GETSITES_FROMITEMLISTXML(@CONSTITUENT_SITES))) A
for xml raw('ITEM'),type,elements,root('CONSTITUENT_SITES'),BINARY BASE64
)
set @SECURITYATTRIBUTES = (select * from
(select CONSTIT_SECURITY_ATTRIBUTEID
from dbo.UFN_BATCHCONSTITUENTUPDATE_GETSECURITYATTRIBUTES_FROMITEMLISTXML(@SECURITYATTRIBUTES)
union
select CONSTIT_SECURITY_ATTRIBUTEID
from dbo.UFN_BATCHCONSTITUENTUPDATE_GETSECURITYATTRIBUTES_FROMITEMLISTXML(@BBISSECURITYATTRIBUTES)
where CONSTIT_SECURITY_ATTRIBUTEID not in (select CONSTIT_SECURITY_ATTRIBUTEID from dbo.UFN_BATCHCONSTITUENTUPDATE_GETSECURITYATTRIBUTES_FROMITEMLISTXML(@SECURITYATTRIBUTES))) A
for xml raw('ITEM'),type,elements,root('SECURITYATTRIBUTES'),BINARY BASE64
)
set @CONSTITUENCIES = (select * from
(select CONSTITUENCYCODEID,
DATEFROM,
DATETO,
ORIGINALCONSTITUENCYID
from dbo.UFN_BATCHCONSTITUENTUPDATE_GETCONSTITUENCIES_FROMITEMLISTXML(@CONSTITUENCIES)
union
select CONSTITUENCYCODEID,
DATEFROM,
DATETO,
ORIGINALCONSTITUENCYID
from dbo.UFN_BATCHCONSTITUENTUPDATE_GETCONSTITUENCIES_FROMITEMLISTXML(@BBISCONSTITUENCIES)
-- OK to insert the same CONSTITUENCYCODEID as long as the begin/end dates do not overlap
where ID not in
(select C2.ID from dbo.UFN_BATCHCONSTITUENTUPDATE_GETCONSTITUENCIES_FROMITEMLISTXML(@CONSTITUENCIES) C1
inner join dbo.UFN_BATCHCONSTITUENTUPDATE_GETCONSTITUENCIES_FROMITEMLISTXML(@BBISCONSTITUENCIES) C2
on C1.CONSTITUENCYCODEID = C2.CONSTITUENCYCODEID
where(
(C1.DATETO between C2.DATEFROM and C2.DATETO) or
(C2.DATETO between C1.DATEFROM and C1.DATETO) or
(C1.DATEFROM between C2.DATEFROM and C2.DATETO) or
(C2.DATEFROM between C1.DATEFROM and C1.DATETO) or
( C1.DATEFROM is null and C2.DATEFROM <= C1.DATETO) or
(C2.DATEFROM is null and C1.DATEFROM <= C2.DATETO) or
(C1.DATETO is null and C2.DATETO >= C1.DATEFROM) or
(C2.DATETO is null and C1.DATETO >= C2.DATEFROM) or
(C2.DATEFROM is null and C1.DATEFROM is null) or
(C2.DATETO is null and C1.DATETO is null) or
(C2.DATEFROM is null and C2.DATETO is null) or
(C1.DATEFROM is null and C1.DATETO is null)
)
)
) A
for xml raw('ITEM'),type,elements,root('CONSTITUENCIES'),BINARY BASE64
)
exec dbo.USP_DATAFORMTEMPLATE_EDIT_CONSTITUENTUPDATEBATCHTEMPLATE_15
@ID = @CONSTITUENTID,
@CHANGEAGENTID = @CHANGEAGENTID,
@VALIDATEONLY = @VALIDATEONLY,
@CONSTITUENTTYPECODE = @CONSTITUENTTYPECODE,
@BIRTHDATE = @BIRTHDATE,
@FIRSTNAME = @FIRSTNAME,
@GENDERCODE = @GENDERCODE,
@GIVESANONYMOUSLY = @GIVESANONYMOUSLY,
@KEYNAME = @LASTNAME,
@LOOKUPID = @LOOKUPID,
@MAIDENNAME = @MAIDENNAME,
@MIDDLENAME = @MIDDLENAME,
@NICKNAME = @NICKNAME,
@SUFFIXCODEID = @SUFFIXCODEID,
@TITLECODEID = @TITLECODEID,
@WEBADDRESS = @WEBADDRESS,
@ALTERNATELOOKUPIDS = @ALTERNATELOOKUPIDS,
@SECURITYATTRIBUTES = @SECURITYATTRIBUTES,
@DECEASED = @DECEASED,
@DECEASEDDATE = @DECEASEDDATE,
@CONSTITUENT_SITEID = null,
@INTERESTS = @INTERESTS,
@PROSPECTMANAGERFUNDRAISERID = @PROSPECTMANAGERFUNDRAISERID,
@ADDRESSES = @ADDRESSES,
@EMAILADDRESSES = @EMAILADDRESSES,
@PHONES = @PHONES,
@CONSTITUENCIES = @CONSTITUENCIES,
@GROUPTYPEID = @GROUP_GROUPTYPEID,
@GROUPDESCRIPTION = @GROUP_DESCRIPTION,
@GROUPSTARTDATE = @GROUP_STARTDATE,
@ORG_INDUSTRYCODEID = @INDUSTRYCODEID,
@ORG_NUMEMPLOYEES = @NUMEMPLOYEES,
@ORG_NUMSUBSIDIARIES = @NUMSUBSIDIARIES,
@ORG_PARENTCORPID = @PARENTCORPID,
@MARITALSTATUSCODEID = @MARITALSTATUSCODEID,
@SPOUSE_ID = @SPOUSEID,
@SPOUSE_BIRTHDATE = @SPOUSE_BIRTHDATE,
@SPOUSE_FIRSTNAME = @SPOUSE_FIRSTNAME,
@SPOUSE_GENDERCODE = @SPOUSE_GENDERCODE,
@SPOUSE_LASTNAME = @SPOUSE_LASTNAME,
@SPOUSE_LOOKUPID = @SPOUSE_LOOKUPID,
@SPOUSE_MAIDENNAME = @SPOUSE_MAIDENNAME,
@SPOUSE_MIDDLENAME = @SPOUSE_MIDDLENAME,
@SPOUSE_NICKNAME = @SPOUSE_NICKNAME,
@SPOUSE_SUFFIXCODEID = @SPOUSE_SUFFIXCODEID,
@SPOUSE_TITLECODEID = @SPOUSE_TITLECODEID,
@SPOUSE_RELATIONSHIPTYPECODEID = @SPOUSE_RELATIONSHIPTYPECODEID,
@SPOUSE_RECIPROCALTYPECODEID = @SPOUSE_RECIPROCALTYPECODEID,
@BUSINESS_ADDRESSBLOCK = @BUSINESS_ADDRESSBLOCK,
@BUSINESS_ADDRESSTYPECODEID = @BUSINESS_ADDRESSTYPECODEID,
@BUSINESS_CART = @BUSINESS_CART,
@BUSINESS_CITY = @BUSINESS_CITY,
@BUSINESS_COUNTRYID = @BUSINESS_COUNTRYID,
@BUSINESS_DONOTMAIL = @BUSINESS_DONOTMAIL,
@BUSINESS_DONOTMAILREASONCODEID = @BUSINESS_DONOTMAILREASONCODEID,
@BUSINESS_DPC = @BUSINESS_DPC,
@BUSINESS_EMAILADDRESS = null,
@BUSINESS_EMAILADDRESSTYPECODEID = null,
@BUSINESS_INDUSTRYCODEID = null,
@BUSINESS_LOOKUPID = null,
@BUSINESS_LOT = @BUSINESS_LOT,
@BUSINESS_ID = @BUSINESSID,
@BUSINESS_NAME = @BUSINESS_NAME,
@BUSINESS_NUMEMPLOYEES = null,
@BUSINESS_NUMSUBSIDIARIES = null,
@BUSINESS_PARENTCORPID = null,
@BUSINESS_PHONENUMBER = @BUSINESS_NUMBER,
@BUSINESS_PHONE_COUNTRYID = null,
@BUSINESS_PHONETYPECODEID = @BUSINESS_PHONETYPECODEID,
@BUSINESS_RELATIONSHIPTYPECODEID = @BUSINESS_RELATIONSHIPTYPECODEID,
@BUSINESS_RECIPROCALTYPECODEID = @BUSINESS_RECIPROCALTYPECODEID,
@BUSINESS_STATEID = @BUSINESS_STATEID,
@BUSINESS_WEBADDRESS = null,
@BUSINESS_POSTCODE = @BUSINESS_POSTCODE,
@CURRENTAPPUSERID = @CURRENTAPPUSERID,
@SPOUSE_RELATIONSHIPTYPECODEIDSIMPLELIST = @SPOUSE_RELATIONSHIPTYPECODEID,
@SPOUSE_RECIPROCALTYPECODEIDSIMPLELIST = @SPOUSE_RECIPROCALTYPECODEID,
@BUSINESS_RELATIONSHIPTYPECODEIDSIMPLELIST = @BUSINESS_RELATIONSHIPTYPECODEID,
@BUSINESS_RECIPROCALTYPECODEIDSIMPLELIST = @BUSINESS_RECIPROCALTYPECODEID,
@BUSINESS_PRIMARYSOFTCREDITRELATIONSHIPEXISTS = @BUSINESS_PRIMARYSOFTCREDITRELATIONSHIPEXISTS,
@BUSINESS_PRIMARYSOFTCREDITMATCHFACTOR = @BUSINESS_PRIMARYSOFTCREDITMATCHFACTOR,
@BUSINESS_RECIPROCALSOFTCREDITRELATIONSHIPEXISTS = @BUSINESS_RECIPROCALSOFTCREDITRELATIONSHIPEXISTS,
@BUSINESS_RECIPROCALSOFTCREDITMATCHFACTOR = @BUSINESS_RECIPROCALSOFTCREDITMATCHFACTOR,
@BUSINESS_PRIMARYRECOGNITIONTYPECODEID = @BUSINESS_PRIMARYRECOGNITIONTYPECODEID,
@BUSINESS_RECIPROCALRECOGNITIONTYPECODEID = @BUSINESS_RECIPROCALRECOGNITIONTYPECODEID,
@BUSINESS_EMAILADDRESSSTARTDATE = null,
@SPOUSE_PRIMARYSOFTCREDITRELATIONSHIPEXISTS = @SPOUSE_PRIMARYSOFTCREDITRELATIONSHIPEXISTS,
@SPOUSE_PRIMARYSOFTCREDITMATCHFACTOR = @SPOUSE_PRIMARYSOFTCREDITMATCHFACTOR,
@SPOUSE_RECIPROCALSOFTCREDITRELATIONSHIPEXISTS = @SPOUSE_RECIPROCALSOFTCREDITRELATIONSHIPEXISTS,
@SPOUSE_RECIPROCALSOFTCREDITMATCHFACTOR = @SPOUSE_RECIPROCALSOFTCREDITMATCHFACTOR,
@SPOUSE_PRIMARYRECOGNITIONTYPECODEID = @SPOUSE_PRIMARYRECOGNITIONTYPECODEID,
@SPOUSE_RECIPROCALRECOGNITIONTYPECODEID = @SPOUSE_RECIPROCALRECOGNITIONTYPECODEID,
@CONSTITUENT_SITES = @CONSTITUENT_SITES,
@BATCHOWNERID = @BATCHOWNERID,
@BATCHROWID = @BATCHROWID,
@SPOUSE_ALTERNATELOOKUPIDS = null,
@SPOUSE_IMPORTLOOKUPID = null,
@ROWFROMBATCHUI = null,
@BBNCTRANID = null,
@REMOVESPOUSE = @REMOVESPOUSE,
@SOCIALMEDIAACCOUNTS = null,
@RELATIONSHIPS = null,
@NETCOMMUNITYTRANSACTIONPROCESSORID = null,
@NEWADDRESSENDDATECODE = @NEWADDRESSENDDATECODE,
@CREATEHISTORICALNAMECODE = @CREATEHISTORICALNAMECODE,
@NEWPHONEENDDATECODE = @NEWPHONEENDDATECODE,
@NEWEMAILENDDATECODE = @NEWEMAILENDDATECODE,
@NAMEFORMATS = @NAMEFORMATS,
@REQUESTSNOEMAIL=null,
@SOLICITCODES = @SOLICITCODES,
@GENDERCODEID = @GENDERCODEID,
@SPOUSE_GENDERCODEID = @SPOUSE_GENDERCODEID;
-- BUG#584814
-- If a new spouse is created/added while editing the constituent,
-- then the recognition credits stored for the spouse in BATCHREVENUERECOGNITION using
-- ERB's row's ID as CONSTITUENTID should be rectified in both BATCHREVENUERECOGNITION and @RECOGNITIONS
-- with the spouse's ID, which has now been created above by using CUB's commit.
if @VALIDATEONLY = 0 and @SPOUSEID is null and len(coalesce(@SPOUSE_LASTNAME, '')) > 0
begin
declare @REC table
(
ID uniqueidentifier,
CONSTITUENTID uniqueidentifier
);
insert into @REC(ID, CONSTITUENTID)
select
T.c.value('(ID)[1]','uniqueidentifier') AS 'ID',
T.c.value('(CONSTITUENTID)[1]','uniqueidentifier') AS 'CONSTITUENTID'
from @RECOGNITIONS.nodes('/RECOGNITIONS/ITEM') T(c);
declare @NEWSPOUSE_RELATIONSHIPTYPECODEID uniqueidentifier = (select SPOUSE_RELATIONSHIPTYPECODEID
from dbo.BATCHCONSTITUENTUPDATE
where ID = @BATCHROWID);
declare @NEWSPOUSE_ID uniqueidentifier = (select RECIPROCALCONSTITUENTID
from dbo.RELATIONSHIP
where RELATIONSHIPCONSTITUENTID = @CONSTITUENTID
and RELATIONSHIPTYPECODEID = @NEWSPOUSE_RELATIONSHIPTYPECODEID
and ISSPOUSE = 1),
@REC_ID uniqueidentifier,
@REC_CONSTITUENTID uniqueidentifier,
@ROW_COUNTER int = 1;
declare REC_CURSOR cursor local for
select ID, CONSTITUENTID from @REC;
open REC_CURSOR;
fetch next from REC_CURSOR into @REC_ID, @REC_CONSTITUENTID;
while @@FETCH_STATUS = 0
begin
if @REC_CONSTITUENTID = @BATCHROWID
begin
-- change the spouse's id from the batch's id to the new id
update dbo.BATCHREVENUERECOGNITION
set CONSTITUENTID = @NEWSPOUSE_ID
where ID = @REC_ID;
-- update the id in @RECOGNITIONS too
set @RECOGNITIONS.modify('replace value of (/RECOGNITIONS/ITEM[sql:variable("@ROW_COUNTER")]/CONSTITUENTID/text())[1] with sql:variable("@NEWSPOUSE_ID")');
end
set @ROW_COUNTER = @ROW_COUNTER + 1;
fetch next from REC_CURSOR into @REC_ID, @REC_CONSTITUENTID;
end
close REC_CURSOR;
deallocate REC_CURSOR;
end
end
end
if @VALIDATEONLY = 0
begin
if @CONSTITUENTEXISTS = 0
begin
-- Only pass recognitions into USP_REVENUEBATCH_CONSTITUENT_ADD if there is atleast one row
-- so an empty set isn't constantly unserialized and then reserialized
declare @RECOGNITIONSTOPASS xml
if exists (select 1 from dbo.UFN_REVENUEBATCH_GETRECOGNITIONS_FROMITEMLISTXML(@RECOGNITIONS) for xml raw('ITEM'), type, elements, root('RECOGNITIONS'), binary base64)
set @RECOGNITIONSTOPASS = @RECOGNITIONS
else
set @RECOGNITIONSTOPASS = null
--add new constituent
exec dbo.USP_REVENUEBATCH_CONSTITUENT_ADD
@CONSTITUENTID OUTPUT,
@CHANGEAGENTID,
@CONSTITUENTID,
@CONSTITUENTACCOUNTID,
@CONSTITUENTACCOUNTID output,
@CURRENTRECOGNITIONS = @RECOGNITIONSTOPASS,
@UPDATEDRECOGNITIONS = @RECOGNITIONS output,
@UPDATEDAPPLICATIONRECOGNITIONS = @APPLICATIONRECOGNITIONS output;
end
if @FINDERNUMBER > 0
exec dbo.[USP_REVENUEBATCH_CONSTITUENTAPPEAL_ADD]
@CONSTITUENTID,
@CHANGEAGENTID,
@CONSTITUENTID,
@FINDERNUMBER;
if (
select
count(ID)
from
dbo.CONSTITUENTACCOUNT
where
CONSTITUENTACCOUNT.ID = @CONSTITUENTACCOUNTID
) = 0
begin
exec dbo.USP_REVENUEBATCH_GENERATECONSTITUENTACCOUNTS
@BATCHREVENUECONSTITUENTID = @CONSTITUENTID,
@CONSTITUENTID = @CONSTITUENTID,
@CHANGEAGENTID = @CHANGEAGENTID,
@BATCHREVENUECONSTITUENTACCOUNTID = @CONSTITUENTACCOUNTID,
@CONSTITUENTACCOUNTID = @CONSTITUENTACCOUNTID output
end
--delete the temporary batch version of the constituent
-- SHL BBIS Bug 400987; Moved USP_REVENUEBATCH_CONSTITUENT_DELETE to after USP_REVENUEBATCH_GENERATECONSTITUENTACCOUNTS because USP_REVENUEBATCH_GENERATECONSTITUENTACCOUNTS uses the temporary batch information deleted by USP_REVENUEBATCH_CONSTITUENT_DELETE
exec dbo.[USP_REVENUEBATCH_CONSTITUENT_DELETE] @BATCHREVENUECONSTITUENTID = @CONSTITUENTID, @CHANGEAGENTID = @CHANGEAGENTID;
if (@ADDITIONALAPPLICATIONSAMOUNT > 0 or (@AMOUNT = 0 and @ADDITIONALAPPLICATIONCOUNT > 0))
begin
set @SPLITS = ( select
ID,
case TYPECODE when 0 then 0 when 1 then 4 when 2 then 7 when 3 then 0 end as APPLICATIONCODE,
case TYPECODE when 0 then 0 when 1 then 4 when 2 then 0 when 3 then 17 end as TYPECODE,
DESIGNATIONID,
APPLIED as AMOUNT,
OTHERTYPECODEID,
DECLINESGIFTAID,
OPPORTUNITYID,
SPONSORSHIPID,
ISGIFTAIDSPONSORSHIP,
CATEGORYCODEID,
case when CAMPAIGNS is null then null else CAMPAIGNS.query('(CAMPAIGNS/ITEM)') end as CAMPAIGNS,
@TRANSACTIONCURRENCYID as TRANSACTIONCURRENCYID
from dbo.UFN_REVENUEBATCH_ADDITIONALAPPLICATIONWITHCHILDREN_FROMITEMLISTXML(@ADDITIONALAPPLICATIONSSTREAM)
for xml raw('ITEM'),type,elements,root('SPLITS'),binary base64)
set @ADDITIONALAPPLICATIONS = 1;
end
else if @SINGLEDESIGNATIONID is not null and @SPLITS is null
begin
set @SPLITS = (select
@SINGLEDESIGNATIONID as DESIGNATIONID,
@AMOUNT as AMOUNT,
@DECLINESGIFTAID as DECLINESGIFTAID,
1 as SEQUENCE,
@ISGIFTAIDSPONSORSHIP as ISGIFTAIDSPONSORSHIP,
@TRANSACTIONCURRENCYID as TRANSACTIONCURRENCYID
for xml raw('ITEM'),type,elements,root('SPLITS'),binary base64)
end
declare @BENEFITAMOUNT money;
select @BENEFITAMOUNT = coalesce(sum(TRANSACTIONTOTALVALUE), 0)
from dbo.UFN_REVENUE_GETBENEFITS_3_FROMITEMLISTXML(@TOTALBENEFITS);
if @TYPECODE = 0 -- payment
begin
declare @INITIALAPPLIEDTOPLEDGESAMOUNT money
set @INITIALAPPLIEDTOPLEDGESAMOUNT = 0
declare @APPLIEDRECEIPTAMOUNT money
set @APPLIEDRECEIPTAMOUNT = 0;
declare @APPLICATIONPLEDGEREVENUEID uniqueidentifier;
if @SINGLEAPPLICATIONID is null
begin
if @REVENUESTREAMS is not null and @STREAMCOUNT > 0
begin
-- BEGIN NEW PLEDGES FOR PAYMENTS HANDLING
-- A payment revenue application may contain a new pledge which needs to be created.
-- To handle this, we...
-- 1. Get the pledge definition in XML out of the @REVENUESTREAMS xml
-- 2. Use the stored procedure from Pledge.Add.xml to create a new pledge in the
-- database using variables pulled from the XML as parameters.
-- 3. Insert an APPLICATIONID element into the @REVENUESTREAMS item with the
-- uniqueidentifier created by adding the pledge. SQL Server does not allow
-- SQL variables within the SQL XML modify statement, so this requires some trickery:
-- a. Create a temporary XML variable combining the entire @REVENUESTREAMS and the
-- APPLICATIONID element using a SELECT ... FOR XML statement.
-- b. Use the .modify method to insert the APPLICATIONID element into the revenue stream
-- which contains the pledge element.
-- c. Delete the outer APPLICATIONID element from the variable and reassign back to original variable.
-- 4. Carry on business as usual
declare @APPLICATIONPLEDGE xml;
select @APPLICATIONPLEDGE = PLEDGES from UFN_REVENUEBATCH_GETAPPLICATIONSWITHCHILDREN_FROMITEMLISTXML(@REVENUESTREAMS) where PLEDGES is not null;
if (select count(ID) from UFN_REVENUEBATCH_GETPAYMENTPLEDGE_FROMITEMLISTXML(@APPLICATIONPLEDGE)) = 1
begin
declare @APCONSTITUENTID uniqueidentifier;
declare @APDATE datetime;
declare @APAMOUNT money;
declare @APPOSTSTATUSCODE tinyint;
declare @APPOSTDATE datetime;
declare @APSENDPLEDGEREMINDER bit;
declare @APSPLITS xml;
declare @APFREQUENCYCODE tinyint;
declare @APNUMBEROFINSTALLMENTS int;
declare @APSTARTDATE datetime;
declare @APINSTALLMENTS xml;
declare @APFINDERNUMBER bigint;
declare @APSOURCECODE nvarchar(50);
declare @APAPPEALID uniqueidentifier;
declare @APBENEFITS xml;
declare @APBENEFITSWAIVED bit;
declare @APGIVENANONYMOUSLY bit;
declare @APMAILINGID uniqueidentifier;
declare @APCHANNELCODEID uniqueidentifier;
declare @APDONOTACKNOWLEDGE bit;
declare @APPLEDGESUBTYPEID uniqueidentifier;
declare @APREFERENCE nvarchar(255);
declare @APCATEGORYCODEID uniqueidentifier;
declare @APOPPORTUNITYID uniqueidentifier;
declare @APSPLITSDECLININGGIFTAID xml;
declare @APPERCENTAGEBENEFITS xml;
declare @APBASEEXCHANGERATEID uniqueidentifier;
declare @APEXCHANGERATE decimal(20,8);
declare @APINSTALLMENTAMOUNT money;
select
@APCONSTITUENTID = BRAP.CONSTITUENTID,
@APDATE = XML.DATE,
@APAMOUNT = XML.AMOUNT,
@APPOSTSTATUSCODE = XML.POSTSTATUSCODE,
@APPOSTDATE = XML.POSTDATE,
@APSENDPLEDGEREMINDER = XML.SENDPLEDGEREMINDER,
@APSPLITS = XML.SPLITS,
@APFREQUENCYCODE = XML.FREQUENCYCODE,
@APNUMBEROFINSTALLMENTS = XML.NUMBEROFINSTALLMENTS,
@APSTARTDATE = XML.STARTDATE,
@APINSTALLMENTS = XML.INSTALLMENTS,
@APFINDERNUMBER = XML.FINDERNUMBER,
@APSOURCECODE = case when XML.SOURCECODE is null then '' else XML.SOURCECODE end,
@APAPPEALID = XML.APPEALID,
@APBENEFITS = XML.BENEFITS,
@APBENEFITSWAIVED = XML.BENEFITSWAIVED,
@APGIVENANONYMOUSLY = XML.GIVENANONYMOUSLY,
@APMAILINGID = XML.MAILINGID,
@APCHANNELCODEID = XML.CHANNELCODEID,
@APDONOTACKNOWLEDGE = XML.DONOTACKNOWLEDGE,
@APPLEDGESUBTYPEID = XML.PLEDGESUBTYPEID,
@APREFERENCE = XML.REFERENCE,
@APCATEGORYCODEID = XML.GLREVENUECATEGORYMAPPINGID,
@APOPPORTUNITYID = XML.OPPORTUNITYID,
@APPERCENTAGEBENEFITS = XML.PERCENTAGEBENEFITS,
@APBASEEXCHANGERATEID = XML.BASEEXCHANGERATEID,
@APEXCHANGERATE = XML.EXCHANGERATE,
@APINSTALLMENTAMOUNT = BRAP.INSTALLMENTAMOUNT
from
dbo.UFN_REVENUEBATCH_GETPAYMENTPLEDGE_FROMITEMLISTXML(@APPLICATIONPLEDGE) XML
-- join to BATCHREVENUEAPPLICATIONPLEDGE to get the constituent ID
-- in case it changed as a result of it originally being a batch revenue constituent ID.
inner join dbo.BATCHREVENUEAPPLICATIONPLEDGE BRAP on XML.ID = BRAP.ID;
--Bug 128299 - AdamBu - We need to insert the transaction currency into the split XML so
--that it can pass the validation checks done in USP_PLEDGE_ADD.
set @APSPLITS = (
select
T.c.value('(ID)[1]','uniqueidentifier') AS 'ID',
T.c.value('(BATCHREVENUEAPPLICATIONPLEDGEID)[1]','uniqueidentifier') AS 'BATCHREVENUEAPPLICATIONPLEDGEID',
T.c.value('(DESIGNATIONID)[1]','uniqueidentifier') AS 'DESIGNATIONID',
T.c.value('(AMOUNT)[1]','money') AS 'AMOUNT',
T.c.value('(APPLICATIONCODE)[1]','tinyint') AS 'APPLICATIONCODE',
T.c.value('(TYPECODE)[1]','tinyint') AS 'TYPECODE',
T.c.value('(DECLINESGIFTAID)[1]','bit') AS 'DECLINESGIFTAID',
@TRANSACTIONCURRENCYID TRANSACTIONCURRENCYID
from @APSPLITS.nodes('/SPLITS/ITEM') T(c)
for xml raw('ITEM'),type,elements,root('SPLITS'),BINARY BASE64
);
--Bug 136065 - AdamBu - 1/6/11 - Generate a spot rate for the new pledge's exchange rate, if we need it.
if @APBASEEXCHANGERATEID = '00000000-0000-0000-0000-000000000001'
begin
set @APBASEEXCHANGERATEID = 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(
@APBASEEXCHANGERATEID,
@TRANSACTIONCURRENCYID,
@BASECURRENCYID,
@APEXCHANGERATE,
@APDATE,
2,
null,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
);
end
exec dbo.USP_PLEDGE_ADD
@APPLICATIONPLEDGEREVENUEID output,
@CHANGEAGENTID,
@APCONSTITUENTID,
@APDATE,
@APAMOUNT,
@APPOSTSTATUSCODE,
@APPOSTDATE,
@APSENDPLEDGEREMINDER,
@APSPLITS,
@APFREQUENCYCODE,
@APNUMBEROFINSTALLMENTS,
@APSTARTDATE,
@APINSTALLMENTS,
0,
9,
'',
'',
null,
'00000000',
'00000000',
'',
null,
@APFINDERNUMBER,
@APSOURCECODE,
@APAPPEALID,
@APBENEFITS,
@APBENEFITSWAIVED,
@APGIVENANONYMOUSLY,
@APMAILINGID,
@APCHANNELCODEID,
@APDONOTACKNOWLEDGE,
@APPLEDGESUBTYPEID,
@BATCHNUMBER,
@APOPPORTUNITYID,
@APREFERENCE,
@APCATEGORYCODEID,
null,
0,
null,
null,
null,
@APSPLITSDECLININGGIFTAID output,
@APPERCENTAGEBENEFITS,
@TRANSACTIONCURRENCYID,
@BASECURRENCYID,
@APBASEEXCHANGERATEID,
@PDACCOUNTSYSTEMID,
default,
default,
default,
default,
default,
default,
@SEPAMANDATEID;
insert into dbo.PLEDGEINSTALLMENTOPTION
(ID,INSTALLMENTAMOUNT,SPLITSCHEDULEOPTIONCODE,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
values
(@APPLICATIONPLEDGEREVENUEID,case @APFREQUENCYCODE when 4 then null else @APINSTALLMENTAMOUNT end,0,@CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE);
update dbo.FINANCIALTRANSACTIONLINEITEM set
BATCHID = @BATCHID
,CHANGEDBYID = @CHANGEAGENTID
,DATECHANGED = @CURRENTDATE
where FINANCIALTRANSACTIONID = @APPLICATIONPLEDGEREVENUEID;
exec dbo.USP_GIFTAIDREVENUESPLIT_ADDUPDATESPLITS @APPLICATIONPLEDGEREVENUEID, @APAPPEALID, 9, null, @CHANGEAGENTID, @APDATE, 1, @APSPLITSDECLININGGIFTAID; --revenue transaction type code of pledge is 1
declare @APPLICATIONIDNODE xml;
set @APPLICATIONIDNODE = '<APPLICATIONID>' + cast(@APPLICATIONPLEDGEREVENUEID as varchar(36)) + '</APPLICATIONID>';
declare @COMBINEDXML xml;
select @COMBINEDXML =
(
select
@APPLICATIONIDNODE,
@REVENUESTREAMS
for xml path(''), type
);
--JamesWill 03/27/2008 CR296359-032108 We also need to delete the original APPLICATIONID element from that /REVENUESTREAMS/ITEM or we'll end up with 2. The first will
--be <APPLICATIONID>00000000-0000-0000-0000-000000000000</APPLICATIONID> and the second one will have the pledge's revenue ID. The empty guid will confuse code in
--USP_REVENUEBATCH_APPLYTOREVENUESTREAMS and make it think it is applying to a MG Claim instead of a pledge.
set @COMBINEDXML.modify('delete /REVENUESTREAMS/ITEM[count(./PLEDGES/ITEM)>0]/APPLICATIONID[1]');
set @COMBINEDXML.modify('insert /APPLICATIONID[1] into (/REVENUESTREAMS/ITEM[count(./PLEDGES/ITEM)>0])[1]');
set @COMBINEDXML.modify('delete /APPLICATIONID[1]');
set @REVENUESTREAMS = @COMBINEDXML;
end
end;
with [CTE] as
(
select
APPLIED,
case
when TYPECODE = 6
then dbo.UFN_EVENTREGISTRANT_GETRECEIPTAMOUNT_NOBENEFITS(
APPLICATIONID,
@DATE,
APPLIED,
@TRANSACTIONCURRENCYID,
@BASECURRENCYID,
@BASEEXCHANGERATEID,
0,
coalesce((select 1 from dbo.BATCHREVENUEREGISTRANT where ID = APPLICATIONID), 0),
null
)
when TYPECODE = 1 then
dbo.UFN_PLEDGE_CALCULATERECEIPTAMOUNT(APPLICATIONID, APPLIED, OVERPAYMENTAPPLICATIONTYPECODE)
else
APPLIED
end as [RECEIPTAMOUNT] --JamesWill WI125245 2010-10-19 Event receipt amounts are in the receipt amount field. So don't double count them here.
from dbo.UFN_REVENUEBATCH_GETAPPLICATIONS_FROMITEMLISTXML(@REVENUESTREAMS)
where APPLIED > 0
)
select
@INITIALAPPLIEDTOPLEDGESAMOUNT = coalesce(sum(APPLIED), 0),
@APPLIEDRECEIPTAMOUNT = coalesce(sum(RECEIPTAMOUNT), 0)
from [CTE]
end
else
begin
set @INITIALAPPLIEDTOPLEDGESAMOUNT = @AMOUNT;
if @APPLICATIONTYPECODE = 5 -- pledge
begin
if @REVENUESTREAMS is not null and @RECEIPTAMOUNT = 0
begin
set @APPLIEDRECEIPTAMOUNT = dbo.UFN_PLEDGE_CALCULATERECEIPTAMOUNT(@SINGLEAPPLICATIONID, @AMOUNT, 255);
end
else
begin
set @APPLIEDRECEIPTAMOUNT = @RECEIPTAMOUNT + @BENEFITAMOUNT;
end
end
else if @APPLICATIONTYPECODE = 7 -- event registration
begin
select @APPLIEDRECEIPTAMOUNT = dbo.UFN_EVENTREGISTRANT_GETRECEIPTAMOUNT_NOBENEFITS(
@SINGLEAPPLICATIONID,
@DATE,
@AMOUNT,
@TRANSACTIONCURRENCYID,
@BASECURRENCYID,
@BASEEXCHANGERATEID,
0,
0,
null
)
end
else
begin
set @APPLIEDRECEIPTAMOUNT = @AMOUNT;
end
end
declare @FULLAMOUNT money;
declare @BASEFULLAMOUNT money;
declare @ORGANIZATIONFULLAMOUNT money;
set @FULLAMOUNT = @AMOUNT;
set @BASEFULLAMOUNT = @BASEAMOUNT;
set @ORGANIZATIONFULLAMOUNT = @ORGANIZATIONAMOUNT;
set @AMOUNT = @AMOUNT - @INITIALAPPLIEDTOPLEDGESAMOUNT;
exec dbo.USP_CURRENCY_GETCURRENCYVALUES @AMOUNT, @DATE, @BASECURRENCYID, @BASEEXCHANGERATEID output, @TRANSACTIONCURRENCYID output, @BASEAMOUNT output, @ORGANIZATIONCURRENCYID output, @ORGANIZATIONAMOUNT output, @ORGANIZATIONEXCHANGERATEID output, 0;
if @AMOUNT < 0
begin
raiserror('The gift amount must be greater than or equal to the sum of all the applications.', 13, 1);
return 1;
end
--Default the receipt amount to be the gift amount - benefits if the user did not explicitly set the receipt amount
if @USERMODIFIEDRECEIPTAMOUNT = 0
begin
if not @TOTALBENEFITS is null and @BENEFITSWAIVED = 0
begin
set @RECEIPTAMOUNT = @AMOUNT - @BENEFITAMOUNT;
end
else
begin
set @RECEIPTAMOUNT = @AMOUNT;
end
set @RECEIPTAMOUNT = @RECEIPTAMOUNT + @APPLIEDRECEIPTAMOUNT
if @RECEIPTAMOUNT < 0
begin
set @RECEIPTAMOUNT = 0
end
end
if not @SPLITS is null
exec dbo.USP_REVENUESPLIT_VALIDATESPLITS @SPLITS, @AMOUNT, @TYPECODE, null, @TRANSACTIONCURRENCYID;
else
if @AMOUNT <> 0
raiserror('Please enter at least one designation.', 13, 1);
declare @SHOULDDEFAULTRECEIPTTYPECODE bit = 0;
--if no receipt type is specified, get the default receipt type
if @RECEIPTTYPECODE is null or @RECEIPTTYPECODE = 255
begin
-- UFN_CONSTITUENT_GETRECEIPTPREFERENCE expects the app type code mapping found on Payment.Add.xml.
-- Translate the mapping from those defined in USP_REVENUEBATCH_CONSTITUENTCOMMITMENT (which is ultimately
-- where APPLICATIONTYPECODE comes from) to those found on Payment.Add.xml.
declare @TRANSLATEDAPPTYPECODE as tinyint;
set @TRANSLATEDAPPTYPECODE =
case
when @APPLICATIONTYPECODE = 1 then 3 -- Sponsorship recurring gift
when @APPLICATIONTYPECODE = 4 then 3 -- Recurring gift
when @APPLICATIONTYPECODE = 5 then 2 -- Pledge
else 0 -- Recurring gift and Pledge are the only application types we care about for receipt preference.
end;
set @RECEIPTTYPECODE = dbo.UFN_CONSTITUENT_GETRECEIPTPREFERENCE(@CONSTITUENTID,@TRANSLATEDAPPTYPECODE);
-- If this is actually a split payment, we'll need to let USP_REVENUEBATCH_APPLYTOREVENUESTREAMS
-- know that it needs to default receipt type based on the splits.
set @SHOULDDEFAULTRECEIPTTYPECODE = 1;
end
insert into dbo.FINANCIALTRANSACTION(
ID
,CONSTITUENTID
,TYPECODE
,TRANSACTIONAMOUNT
,BASEAMOUNT
,ORGAMOUNT
,DATE
,TRANSACTIONCURRENCYID
,BASEEXCHANGERATEID
,ORGEXCHANGERATEID
,PDACCOUNTSYSTEMID
,POSTDATE
,POSTSTATUSCODE
,USERDEFINEDID
,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values(
@ID
,@CONSTITUENTID
,0 --TYPCODE
,case when
@ORGANIZATIONEXCHANGERATEID is null
and (@BASECURRENCYID is null or @BASECURRENCYID = @ORGANIZATIONCURRENCYID)
and @BASEEXCHANGERATEID is null
and (@TRANSACTIONCURRENCYID is null or @TRANSACTIONCURRENCYID = @ORGANIZATIONCURRENCYID)
and (isnull(@ORGANIZATIONFULLAMOUNT,0) <> isnull(@BASEFULLAMOUNT,0)
or isnull(@FULLAMOUNT,0) <> isnull(@BASEFULLAMOUNT,0)
or isnull(@BASEFULLAMOUNT,0) = 0 )
then
@BASEFULLAMOUNT
else
@FULLAMOUNT
end
,@BASEFULLAMOUNT
,case when
@ORGANIZATIONEXCHANGERATEID is null
and (@BASECURRENCYID is null or @BASECURRENCYID = @ORGANIZATIONCURRENCYID)
and @BASEEXCHANGERATEID is null
and (@TRANSACTIONCURRENCYID is null or @TRANSACTIONCURRENCYID = @ORGANIZATIONCURRENCYID)
and (isnull( @ORGANIZATIONFULLAMOUNT,0) <> isnull(@BASEFULLAMOUNT,0)
or isnull(@FULLAMOUNT,0) <> isnull(@BASEFULLAMOUNT,0)
or isnull(@BASEFULLAMOUNT,0) = 0)
then
@BASEFULLAMOUNT
else
@ORGANIZATIONFULLAMOUNT
end
,@DATE
,@TRANSACTIONCURRENCYID
,@BASEEXCHANGERATEID
,@ORGANIZATIONEXCHANGERATEID
,@PDACCOUNTSYSTEMID
,@POSTDATE
,case
when @DONOTPOST = 1 then 3
else 1
end
,coalesce(rtrim(ltrim(@REVENUELOOKUPID)),'')
,@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
insert into dbo.REVENUE_EXT (
ID
,BATCHNUMBER
,DONOTRECEIPT
,RECEIPTAMOUNT
,SOURCECODE
,FINDERNUMBER
,APPEALID
,MAILINGID
,CHANNELCODEID
,GIVENANONYMOUSLY
,DONOTACKNOWLEDGE
,BENEFITSWAIVED
,RECEIPTTYPECODE
,NEEDSRERECEIPT
,ELIGIBLEFORMATCHINGGIFTCLAIM
,ISREIMBURSABLE
,REFERENCE
,NONPOSTABLEBASECURRENCYID
-- Boilerplate
,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values(
@ID
,@BATCHNUMBER
,@DONOTRECEIPT
,@RECEIPTAMOUNT
,@SOURCECODE
,@FINDERNUMBER
,@APPEALID
,@MAILINGID
,@CHANNELCODEID
,@GIVENANONYMOUSLY
,@DONOTACKNOWLEDGE
,@BENEFITSWAIVED
,@RECEIPTTYPECODE
,0 --NEEDSRERECEIPT
,0 --ELIGIBLEFORMATCHINGGIFTCLAIM
,0 --ISREIMBURSABLE
,'' --REFERENCE
,null --NONPOSTABLEBASECURRENCYID
,@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
--Add origination source
exec dbo.USP_REVENUE_ADDORIGIN @ID, @CONSTITUENTID, @CHANGEAGENTID, @CURRENTDATE;
--Add payment original amount
exec dbo.USP_PAYMENT_ADDORIGINALAMOUNT @ID, @CHANGEAGENTID, @CURRENTDATE;
--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,@BATCHROWID,@ID, @CHANGEAGENTID;
if not @LETTERCODEID is null
begin
if @ACKNOWLEDGEEID is null
set @ACKNOWLEDGEEID = @CONSTITUENTID;
insert into dbo.REVENUELETTER
(ID,REVENUEID,LETTERCODEID,ACKNOWLEDGEDATE,ACKNOWLEDGEEID,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
values
(NewID(),@ID,@LETTERCODEID,@ACKNOWLEDGEDATE,@ACKNOWLEDGEEID, @CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE);
end;
declare @SPLITSDECLININGGIFTAIDAPPLICATIONS xml, @COVENANTGIFTSPLITS xml
declare @returnid uniqueidentifier;
if @SINGLEAPPLICATIONID is null
begin
if @REVENUESTREAMS is not null and @STREAMCOUNT > 0
begin
--need to add @MAILINGID and @CHANNELCODEID. currently passed in as null
exec dbo.USP_REVENUEBATCH_APPLYTOREVENUESTREAMS @ID, @REVENUESTREAMS, @CONSTITUENTID, @DATE, @PAYMENTMETHODCODE, @BATCHNUMBER, @POSTDATE, @POSTSTATUSCODE, @DONOTRECEIPT, @DONOTACKNOWLEDGE, @FINDERNUMBER, @SOURCECODE, @APPEALID, @MAILINGID, @CHANNELCODEID, @CHECKDATE, @CHECKNUMBER, @CONSTITUENTACCOUNTID, @REFERENCEDATE, @REFERENCENUMBER, @CARDHOLDERNAME, @CREDITCARDNUMBER, @CREDITTYPECODEID, @AUTHORIZATIONCODE, @EXPIRESON, @ISSUER, @NUMBEROFUNITS, @SYMBOL, @MEDIANPRICE, @SALEDATE, @SALEAMOUNT, @BROKERFEE, @SALEPOSTSTATUSCODE, @SALEPOSTDATE, @PROPERTYSUBTYPECODEID, @GIFTINKINDSUBTYPECODEID, @CHANGEAGENTID, @CURRENTDATE, @UNAPPLIEDMATCHINGGIFTSPLITS,@APPLIEDTOPLEDGES output, @returnid output, 1, @OTHERPAYMENTMETHODCODEID, @REFERENCE, @CATEGORYCODEID, @SPLITSDECLININGGIFTAIDAPPLICATIONS output, @COVENANTGIFTSPLITS output, @BATCHOWNERID, @SHOULDDEFAULTRECEIPTTYPECODE;
if @APPLIEDTOPLEDGES <> @INITIALAPPLIEDTOPLEDGESAMOUNT
raiserror('There was an error calculating the amount applied values.', 13, 1)
--JamesWill CR268756-030207 2007/03/02 unset the ISPENDING flag for gifts which were generated
update dbo.REVENUESCHEDULE
set ISPENDING = 0,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
from dbo.REVENUESCHEDULE
where REVENUESCHEDULE.ID in (select APPLICATIONID from dbo.UFN_REVENUEBATCH_GETAPPLICATIONS_FROMITEMLISTXML(@REVENUESTREAMS) where APPLIED > 0 and WASGENERATED = 1)
end
end
else -- single application
begin
exec dbo.USP_REVENUEBATCH_APPLYTOSINGLEAPPLICATION @ID
,@SINGLEAPPLICATIONID
,@APPLICATIONTYPECODE
,@FULLAMOUNT
,@CONSTITUENTID
,@DATE
,@PAYMENTMETHODCODE
,@BATCHNUMBER
,@POSTDATE
,@POSTSTATUSCODE
,@DONOTRECEIPT
,@DONOTACKNOWLEDGE
,@FINDERNUMBER
,@SOURCECODE
,@APPEALID
,@MAILINGID
,@CHANNELCODEID
,@CHECKDATE
,@CHECKNUMBER
,@CONSTITUENTACCOUNTID
,@REFERENCEDATE
,@REFERENCENUMBER
,@CARDHOLDERNAME
,@CREDITCARDNUMBER
,@CREDITTYPECODEID
,@AUTHORIZATIONCODE
,@EXPIRESON
,@ISSUER
,@NUMBEROFUNITS
,@SYMBOL
,@MEDIANPRICE
,@SALEDATE
,@SALEAMOUNT
,@BROKERFEE
,@SALEPOSTSTATUSCODE
,@SALEPOSTDATE
,@PROPERTYSUBTYPECODEID
,@GIFTINKINDSUBTYPECODEID
,@CHANGEAGENTID
,@CURRENTDATE
,@UNAPPLIEDMATCHINGGIFTSPLITS
,@APPLIEDTOPLEDGES output
,@returnid output
,1
,@OTHERPAYMENTMETHODCODEID
,@REFERENCE
,@CATEGORYCODEID
,@SPLITSDECLININGGIFTAIDAPPLICATIONS output
,@COVENANTGIFTSPLITS output
,@CURRENTAPPUSERID
,@TRANSACTIONCURRENCYID
,@BATCHROWID
,@SHOULDDEFAULTRECEIPTTYPECODE
,@REVENUESTREAMS;
update dbo.REVENUESCHEDULE
set ISPENDING = 0
,CHANGEDBYID = @CHANGEAGENTID
,DATECHANGED = @CURRENTDATE
from dbo.REVENUESCHEDULE
where REVENUESCHEDULE.ID = @SINGLEAPPLICATIONID
end
declare @REVENUESPLITAPPLICATIONCODE tinyint
set @REVENUESPLITAPPLICATIONCODE =
case
when @APPLICATIONCODE = 0 then 0 -- Donation
when @APPLICATIONCODE = 1 then 4 -- Other
when @APPLICATIONCODE = 2 then 7 -- Unapplied matching gift claim
when @APPLICATIONCODE = 3 then 0 -- Donation, but sponsorship additional Donation
end
declare @REVENUESPLITTYPECODE tinyint
set @REVENUESPLITTYPECODE =
case
when @APPLICATIONCODE = 0 or @APPLICATIONCODE = 2 then 0
when @APPLICATIONCODE = 1 then 4
when @APPLICATIONCODE = 3 then 17 -- set sponsorship revenue for additional Donation
end
declare @SPLITSDECLININGGIFTAIDDESIGNATIONS xml
declare @ISGIFTAIDSPONSORSHIPSPLITSDESIGNATIONS xml
declare @REVENUESPLITSPONSORSHIPID xml
exec dbo.USP_REVENUEBATCHCOMMIT_SPLITSWITHCHILDREN_ADDFROMXML @ID = @ID,
@SPLITS = @SPLITS,
@REVENUESPLITAPPLICATIONCODE = @REVENUESPLITAPPLICATIONCODE,
@REVENUESPLITTYPECODE = @REVENUESPLITTYPECODE,
@OTHERTYPECODEID = @OTHERTYPECODEID,
@CATEGORYCODEID = @CATEGORYCODEID,
@CHANGEAGENTID = @CHANGEAGENTID,
@CURRENTDATE = @CURRENTDATE,
@OPPORTUNITYID = @OPPORTUNITYID,
@ADDITIONALAPPLICATIONS = @ADDITIONALAPPLICATIONS,
@SPLITSDECLININGGIFTAID = @SPLITSDECLININGGIFTAIDDESIGNATIONS output,
@ISGIFTAIDSPONSORSHIPSPLITS = @ISGIFTAIDSPONSORSHIPSPLITSDESIGNATIONS output,
@TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID,
@BASECURRENCYID = @BASECURRENCYID,
@BASEEXCHANGERATEID = @BASEEXCHANGERATEID,
@ORGANIZATIONEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID,
@REVENUESPLITSPONSORSHIPID = @REVENUESPLITSPONSORSHIPID output
-- If this isn't a Donation, then gift aid can't be declined
if @APPLICATIONCODE <> 0 and @APPLICATIONCODE <> 3
set @SPLITSDECLININGGIFTAIDDESIGNATIONS = null
-- If this isn't a Donation, then this can not be a sponsorship
if @APPLICATIONCODE <> 0
set @ISGIFTAIDSPONSORSHIPSPLITSDESIGNATIONS = null
declare @SPLITSDECLININGGIFTAID xml;
set @SPLITSDECLININGGIFTAID =
(
select REVENUESPLITID from
(
select
T.c.value('(REVENUESPLITID)[1]','uniqueidentifier') AS 'REVENUESPLITID'
from @SPLITSDECLININGGIFTAIDAPPLICATIONS.nodes('/SPLITSDECLININGGIFTAID/ITEM') T(c)
union all
select
T.c.value('(REVENUESPLITID)[1]','uniqueidentifier') AS 'REVENUESPLITID'
from @SPLITSDECLININGGIFTAIDDESIGNATIONS.nodes('/SPLITSDECLININGGIFTAID/ITEM') T(c)
) as DATA
for xml raw('ITEM'),type,elements,root('SPLITSDECLININGGIFTAID'),BINARY BASE64
)
declare @ISGIFTAIDSPONSORSHIPSPLITS xml
set @ISGIFTAIDSPONSORSHIPSPLITS =
(
select REVENUESPLITID from
(
select
T.c.value('(REVENUESPLITID)[1]','uniqueidentifier') AS 'REVENUESPLITID'
from @ISGIFTAIDSPONSORSHIPSPLITSDESIGNATIONS.nodes('/ISGIFTAIDSPONSORSHIPSPLITS/ITEM') T(c)
) as DATA
for xml raw('ITEM'),type,elements,root('GIFTAIDSPONSORSHIPSPLITS'),BINARY BASE64
)
--bez 2/11/09 adding reference for donations (reference was already being added from applytorevenuestreams for other application types)
--vka 1/30/12 Bug 188343: in some cases a blank reference record already exists, so we need to call EDIT and not ADD on it
if not exists(select ID from dbo.REVENUEREFERENCE where ID = @ID)
exec dbo.USP_REVENUEREFERENCE_ADD @ID, @REFERENCE, @CHANGEAGENTID;
else
exec dbo.USP_REVENUEREFERENCE_EDIT @ID, @REFERENCE, @CHANGEAGENTID;
-- Add payment details after splits are created so the distribution can be generated for sold stock/property
-- Note that REVENUEPAYMENTMETHOD doesn't need multicurrency values; see comment on the table spec.
declare @REVENUEPAYMETHODID uniqueidentifier
set @REVENUEPAYMETHODID = newid();
insert into dbo.REVENUEPAYMENTMETHOD (ID,REVENUEID, PAYMENTMETHODCODE, AMOUNT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values (@REVENUEPAYMETHODID,@ID,@PAYMENTMETHODCODE, @FULLAMOUNT, @CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE)
if @POSTSTATUSCODE = 0
insert into dbo.REVENUEPOSTED(ID,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
values(@ID,@CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE);
exec dbo.USP_REVENUE_ADDPAYMENTDETAILS @REVENUEPAYMETHODID, @PAYMENTMETHODCODE, @CHECKDATE,
@CHECKNUMBER, @CONSTITUENTACCOUNTID, @REFERENCEDATE,
@REFERENCENUMBER, @CARDHOLDERNAME, @CREDITCARDNUMBER,
@CREDITTYPECODEID, @AUTHORIZATIONCODE, @EXPIRESON, @ISSUER,
@NUMBEROFUNITS, @SYMBOL, @MEDIANPRICE, @SALEDATE, @SALEAMOUNT,
@BROKERFEE, @SALEPOSTSTATUSCODE, @SALEPOSTDATE, @PROPERTYSUBTYPECODEID,
@GIFTINKINDSUBTYPECODEID, @CHANGEAGENTID, @CURRENTDATE, 1,
@OTHERPAYMENTMETHODCODEID, @DIRECTDEBITRESULTCODE, @LOWPRICE,
@HIGHPRICE, @NUMBEROFUNITSSOLD, @USERMODIFIEDNUMBEROFUNITSSOLD,
@TRANSACTIONID, @TRANSACTIONAMOUNT, @GIFTINKINDITEMNAME, @GIFTINKINDDISPOSITIONCODE,
@GIFTINKINDNUMBEROFUNITS, @GIFTINKINDFAIRMARKETVALUE,
@DIRECTDEBITISREJECTED, @BASECURRENCYID, @TRANSACTIONCURRENCYID,
@BASEEXCHANGERATEID, @MERCHANTACCOUNTID, @SALE_LOWPRICE, @SALE_MEDIANPRICE, @SALE_HIGHPRICE,
@VENDORID, @SEPAMANDATEID;
-- Note that @TOTALBENEFITS was run through its CONVERTAMOUNTSINXML SP earlier on in the commit.
exec dbo.USP_REVENUE_GETBENEFITS_3_ADDFROMXML @ID, @TOTALBENEFITS, @CHANGEAGENTID, @CURRENTDATE;
--bez CR296386-032108 notes only got added for revenue when there was no donation
--if @GENERATEREVENUENOTE = 1 not necessary after revenue changes
-- insert into dbo.REVENUENOTE(DATEENTERED, TITLE, AUTHORID, TEXTNOTE, REVENUENOTETYPECODEID, REVENUEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
-- values(@NOTEDATEENTERED, @NOTETITLE, @NOTEAUTHORID, @NOTETEXTNOTE, @NOTETYPECODEID, @ID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE)
if not @TRIBUTES is null
begin
-- Update the organization amount and exchange rate in the TRIBUTES XML.
set @TRIBUTES = dbo.UFN_REVENUETRIBUTE_CONVERTAMOUNTSINXML(@TRIBUTES, @BASECURRENCYID, @ORGANIZATIONEXCHANGERATEID);
exec dbo.USP_REVENUE_GETTRIBUTES_2_UPDATEFROMXML @ID, @TRIBUTES, @CHANGEAGENTID, @CURRENTDATE;
-- insert default revenue tribute letters for any acknowledgees that have corresponding tribute letter codes
insert into dbo.REVENUETRIBUTELETTER(ID,REVENUETRIBUTEID,CONSTITUENTID,TRIBUTELETTERCODEID,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
select newid(),RT.ID,TA.CONSTITUENTID,TA.TRIBUTELETTERCODEID,@CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE
from dbo.REVENUETRIBUTE RT
inner join dbo.TRIBUTEACKNOWLEDGEE TA on RT.TRIBUTEID = TA.TRIBUTEID
where TA.TRIBUTELETTERCODEID is not null and
RT.REVENUEID = @ID;
end
--
-- BEGIN Matching Gift code
--
declare @SPLITSFORGENERATEMGCLAIM xml;
select
@SPLITSFORGENERATEMGCLAIM =
(
select sum(TRANSACTIONAMOUNT) AMOUNT, DESIGNATIONID, REVENUESPLIT.TYPECODE as TYPECODE
from dbo.REVENUESPLIT
where REVENUEID = @ID
group by DESIGNATIONID, REVENUESPLIT.TYPECODE
for xml raw('ITEM'),type,elements,root('SPLITS'),binary base64
);
declare @APPLIEDAMOUNTFORGENERATEMGCLAIM money;
select @APPLIEDAMOUNTFORGENERATEMGCLAIM = sum(TRANSACTIONAMOUNT)
from dbo.REVENUESPLIT
where REVENUEID = @ID and REVENUESPLIT.TYPECODE = 0;
/* AAW 10/27/09: Updated to work with multiple matching gifts, and auto-generated MG claims. */
declare @MGTABLE table
(
[ID] uniqueidentifier,
[MATCHEDCONSTITUENTID] uniqueidentifier,
[ORGANIZATIONID] uniqueidentifier,
[RELATIONSHIPID] uniqueidentifier,
[MATCHINGGIFTCONDITIONTYPEID] uniqueidentifier,
[AMOUNT] money, -- BASE AMOUNT
[DATE] datetime,
[SPLITS] xml,
[COULDNOTDEFAULTMATCHINGGIFT] bit,
[ORGANIZATIONAMOUNT] money,
[ORGANIZATIONEXCHANGERATEID] uniqueidentifier,
[TRANSACTIONAMOUNT] money,
[TRANSACTIONCURRENCYID] uniqueidentifier,
[BASEEXCHANGERATEID] uniqueidentifier,
[EXCHANGERATE] decimal(20,8),
[ISSPOTRATE] bit,
[OPPORTUNITYID] uniqueidentifier
);
if @MGALTERED = 0
begin
insert into @MGTABLE
(
[ID],
[MATCHEDCONSTITUENTID],
[ORGANIZATIONID],
[RELATIONSHIPID],
[MATCHINGGIFTCONDITIONTYPEID],
[TRANSACTIONAMOUNT],
[DATE],
[SPLITS],
[COULDNOTDEFAULTMATCHINGGIFT],
[TRANSACTIONCURRENCYID],
[BASEEXCHANGERATEID],
[EXCHANGERATE],
[ISSPOTRATE],
[OPPORTUNITYID]
)
select
newid(),
DEFAULTMATCHINGGIFTS.[MATCHEDCONSTITUENTID],
DEFAULTMATCHINGGIFTS.[ORGANIZATIONID],
DEFAULTMATCHINGGIFTS.[RELATIONSHIPID],
DEFAULTMATCHINGGIFTS.[MATCHINGGIFTCONDITIONTYPEID],
DEFAULTMATCHINGGIFTS.[AMOUNT],
DEFAULTMATCHINGGIFTS.[DATE],
DEFAULTMATCHINGGIFTS.[SPLITS],
DEFAULTMATCHINGGIFTS.[COULDNOTDEFAULTMATCHINGGIFT],
@TRANSACTIONCURRENCYID,
@BASEEXCHANGERATEID, --Use the same exchange rate as the payment
null,
0,
null
from dbo.UFN_REVENUEBATCH_GETDEFAULTMATCHINGGIFTS_4(
@CONSTITUENTID,
@DATE,
@APPLIEDAMOUNTFORGENERATEMGCLAIM,
@RECEIPTAMOUNT,
null,
@TRANSACTIONCURRENCYID,
@REVENUESTREAMS,
@ADDITIONALAPPLICATIONSSTREAM
) as [DEFAULTMATCHINGGIFTS];
if exists(select 1 from @MGTABLE where COULDNOTDEFAULTMATCHINGGIFT = 1)
begin
--For some reason, we've decided to not create claims. Flag the record as eligible.
update dbo.REVENUE
set ELIGIBLEFORMATCHINGGIFTCLAIM = 1,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID = @ID
end
delete @MGTABLE where COULDNOTDEFAULTMATCHINGGIFT = 1;
end
else
begin
insert into @MGTABLE
(
[ID],
[MATCHEDCONSTITUENTID],
[ORGANIZATIONID],
[RELATIONSHIPID],
[MATCHINGGIFTCONDITIONTYPEID],
[TRANSACTIONAMOUNT],
[DATE],
[SPLITS],
[TRANSACTIONCURRENCYID],
[BASEEXCHANGERATEID],
[EXCHANGERATE],
[ISSPOTRATE],
[OPPORTUNITYID]
)
select
case when MATCHINGGIFTSXML.[MATCHINGGIFT].value('ID[1]', 'uniqueidentifier') = '00000000-0000-0000-0000-000000000000'
then newid()
else MATCHINGGIFTSXML.[MATCHINGGIFT].value('ID[1]', 'uniqueidentifier')
end,
@CONSTITUENTID,
MATCHINGGIFTSXML.[MATCHINGGIFT].value('ORGANIZATIONID[1]', 'uniqueidentifier'),
MATCHINGGIFTSXML.[MATCHINGGIFT].value('RELATIONSHIPID[1]', 'uniqueidentifier'),
MATCHINGGIFTSXML.[MATCHINGGIFT].value('MATCHINGGIFTCONDITIONID[1]', 'uniqueidentifier'),
MATCHINGGIFTSXML.[MATCHINGGIFT].value('AMOUNT[1]', 'money'),
MATCHINGGIFTSXML.[MATCHINGGIFT].value('DATE[1]', 'datetime'),
MATCHINGGIFTSXML.[MATCHINGGIFT].query('SPLITS'),
MATCHINGGIFTSXML.[MATCHINGGIFT].value('TRANSACTIONCURRENCYID[1]', 'uniqueidentifier'),
case MATCHINGGIFTSXML.[MATCHINGGIFT].value('BASEEXCHANGERATEID[1]', 'uniqueidentifier')
when '00000000-0000-0000-0000-000000000001'
then newid()
else MATCHINGGIFTSXML.[MATCHINGGIFT].value('BASEEXCHANGERATEID[1]', 'uniqueidentifier')
end,
MATCHINGGIFTSXML.[MATCHINGGIFT].value('EXCHANGERATE[1]', 'decimal(20,8)'),
case MATCHINGGIFTSXML.[MATCHINGGIFT].value('BASEEXCHANGERATEID[1]', 'uniqueidentifier')
when '00000000-0000-0000-0000-000000000001'
then 1
else 0
end,
MATCHINGGIFTSXML.[MATCHINGGIFT].value('OPPORTUNITYID[1]', 'uniqueidentifier')
from
@MATCHINGGIFTS.nodes('MATCHINGGIFTS/ITEM') as MATCHINGGIFTSXML([MATCHINGGIFT])
where
MATCHINGGIFTSXML.[MATCHINGGIFT].value('COULDNOTDEFAULTMATCHINGGIFT[1]', 'bit') = 0 and
-- Filter out records that don't have splits.
MATCHINGGIFTSXML.[MATCHINGGIFT].exist('SPLITS') = 1;
end
-- Create spot rate records for any spot rates defined in the MATCHINGGIFTS collection
--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
)
select
BASEEXCHANGERATEID,
TRANSACTIONCURRENCYID,
@BASECURRENCYID,
EXCHANGERATE,
DATE,
2,
null,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from
@MGTABLE [MGTABLE]
where
[MGTABLE].ISSPOTRATE = 1;
-- Update @MGTABLE with converted amounts; can't do this in the initial insert because we may have to create spot rate records
update
@MGTABLE
set
[ORGANIZATIONAMOUNT] = CURRENCYVALUES.ORGANIZATIONAMOUNT,
[ORGANIZATIONEXCHANGERATEID] = CURRENCYVALUES.ORGANIZATIONEXCHANGERATEID,
[AMOUNT] = CURRENCYVALUES.BASEAMOUNT
from
@MGTABLE [MGTABLE]
cross apply dbo.UFN_CURRENCY_GETCURRENCYVALUES(MGTABLE.[TRANSACTIONAMOUNT], MGTABLE.[DATE], @BASECURRENCYID, MGTABLE.[BASEEXCHANGERATEID], MGTABLE.[TRANSACTIONCURRENCYID]) CURRENCYVALUES
--WI86405 JamesWill 2010-03-22 We need to have consistent REVENUESPLIT IDs across multiple table inserts
declare @MGSPLITS_T table --@MGSPLITSTABLE is already being used
(
MGTABLEID uniqueidentifier,
SPLITID uniqueidentifier,
AMOUNT money,
DESIGNATIONID uniqueidentifier,
DESIGNATIONTRANSLATION nvarchar(255),
TYPECODE tinyint,
BASECURRENCYID uniqueidentifier,
ORGANIZATIONAMOUNT money,
ORGANIZATIONEXCHANGERATEID uniqueidentifier,
TRANSACTIONAMOUNT money,
TRANSACTIONCURRENCYID uniqueidentifier,
BASEEXCHANGERATEID uniqueidentifier
);
insert into @MGSPLITS_T
(
MGTABLEID,
SPLITID,
AMOUNT,
DESIGNATIONID,
DESIGNATIONTRANSLATION,
TYPECODE,
BASECURRENCYID,
ORGANIZATIONAMOUNT,
ORGANIZATIONEXCHANGERATEID,
TRANSACTIONAMOUNT,
TRANSACTIONCURRENCYID,
BASEEXCHANGERATEID
)
select
[MGTABLE].ID,
newid(),
CURRENCYVALUES.BASEAMOUNT,
T.c.value('DESIGNATIONID[1]', 'uniqueidentifier'),
T.c.value('DESIGNATIONTTRANSLATION[1]', 'nvarchar(255)'),
T.c.value('TYPECODE[1]', 'tinyint'),
@BASECURRENCYID,
CURRENCYVALUES.ORGANIZATIONAMOUNT,
CURRENCYVALUES.ORGANIZATIONEXCHANGERATEID,
T.c.value('AMOUNT[1]', 'money'), -- This is transaction amount
[MGTABLE].TRANSACTIONCURRENCYID,
[MGTABLE].BASEEXCHANGERATEID
from
@MGTABLE as [MGTABLE]
cross apply MGTABLE.[SPLITS].nodes('SPLITS/ITEM') as T(c)
cross apply dbo.UFN_CURRENCY_GETCURRENCYVALUES
(
T.c.value('AMOUNT[1]', 'money'),
[MGTABLE].[DATE],
@BASECURRENCYID,
[MGTABLE].[BASEEXCHANGERATEID],
[MGTABLE].[TRANSACTIONCURRENCYID]
) CURRENCYVALUES
insert into dbo.FINANCIALTRANSACTION
(
ID
,CONSTITUENTID
,TYPECODE
,TRANSACTIONAMOUNT
,BASEAMOUNT
,ORGAMOUNT
,[DATE]
,TRANSACTIONCURRENCYID
,BASEEXCHANGERATEID
,ORGEXCHANGERATEID
,PDACCOUNTSYSTEMID
,POSTDATE
,POSTSTATUSCODE
,USERDEFINEDID
,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
)
select
MGTABLE.ID
,MGTABLE.ORGANIZATIONID
,3 TYPECODE
,MGTABLE.TRANSACTIONAMOUNT
,MGTABLE.AMOUNT
,MGTABLE.ORGANIZATIONAMOUNT
,MGTABLE.[DATE]
,MGTABLE.TRANSACTIONCURRENCYID
,MGTABLE.BASEEXCHANGERATEID
,MGTABLE.ORGANIZATIONEXCHANGERATEID
,@PDACCOUNTSYSTEMID
,null POSTDATE
,3 POSTSTATUSCODE -- Matching gifts aren't posted.
,'' USERDEFINEDID
,@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
from
@MGTABLE as MGTABLE
insert into dbo.REVENUE_EXT
(
ID
,BATCHNUMBER
,NONPOSTABLEBASECURRENCYID
,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
)
select
ID
,@BATCHNUMBER
,@BASECURRENCYID
,@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
from
@MGTABLE as MGTABLE
insert into dbo.FINANCIALTRANSACTIONLINEITEM
(
ID
,FINANCIALTRANSACTIONID
,TRANSACTIONAMOUNT
,[DESCRIPTION]
,SEQUENCE
,TYPECODE
,POSTSTATUSCODE
,BASEAMOUNT
,ORGAMOUNT
,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
)
select
MGSPLITS.SPLITID
,MGTABLE.ID
,MGSPLITS.TRANSACTIONAMOUNT
,'' [DESCRIPTION]
,row_number() over (order by MGSPLITS.MGTABLEID) SEQUENCE
,0 TYPECODE
,3 POSTSTATUSCODE
,MGSPLITS.AMOUNT BASEAMOUNT
,MGSPLITS.ORGANIZATIONAMOUNT
,@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
from
@MGSPLITS_T as [MGSPLITS]
inner join @MGTABLE as [MGTABLE] on [MGTABLE].ID = [MGSPLITS].MGTABLEID
insert into dbo.REVENUESPLIT_EXT
(
ID
,DESIGNATIONID
,TYPECODE
,APPLICATIONCODE
,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
)
select
MGSPLITS.SPLITID
,MGSPLITS.DESIGNATIONID
,0 TYPECODE
,0 APPLICATIONCODE
,@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
from @MGSPLITS_T as [MGSPLITS]
inner join @MGTABLE as [MGTABLE] on [MGTABLE].ID = [MGSPLITS].MGTABLEID
/* Create the revenue payment method entry: */
insert into dbo.REVENUEPAYMENTMETHOD
(
[REVENUEID],
[PAYMENTMETHODCODE],
[AMOUNT],
[ADDEDBYID],
[CHANGEDBYID],
[DATEADDED],
[DATECHANGED]
)
select
MGTABLE.[ID],
9,
MGTABLE.[AMOUNT],
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from @MGTABLE as [MGTABLE]
insert into dbo.REVENUEMATCHINGGIFT
(
[ID],
[MATCHINGGIFTCONDITIONID],
[MGSOURCEREVENUEID],
[ADDEDBYID],
[CHANGEDBYID],
[DATEADDED],
[DATECHANGED],
[RELATIONSHIPID],
[ISACTIVE]
)
select
MGTABLE.[ID],
MGTABLE.[MATCHINGGIFTCONDITIONTYPEID],
@ID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE,
MGTABLE.[RELATIONSHIPID],
1
from @MGTABLE as [MGTABLE]
insert into dbo.REVENUESCHEDULE
(
[ID],
[STARTDATE],
[FREQUENCYCODE],
[NUMBEROFINSTALLMENTS],
[ADDEDBYID],
[CHANGEDBYID],
[DATEADDED],
[DATECHANGED]
)
select
MGTABLE.[ID],
MGTABLE.[DATE],
5,
1,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from @MGTABLE as [MGTABLE];
insert into dbo.INSTALLMENT
(
[ID],
[REVENUEID],
[AMOUNT],
[DATE],
[SEQUENCE],
[BASECURRENCYID],
[ORGANIZATIONAMOUNT],
[ORGANIZATIONEXCHANGERATEID],
[TRANSACTIONAMOUNT],
[TRANSACTIONCURRENCYID],
[BASEEXCHANGERATEID],
[ADDEDBYID],
[CHANGEDBYID],
[DATEADDED],
[DATECHANGED]
)
select
newid(),
MGTABLE.[ID],
MGTABLE.[AMOUNT],
MGTABLE.[DATE],
1,
@BASECURRENCYID,
MGTABLE.[ORGANIZATIONAMOUNT],
MGTABLE.[ORGANIZATIONEXCHANGERATEID],
MGTABLE.[TRANSACTIONAMOUNT],
MGTABLE.[TRANSACTIONCURRENCYID],
MGTABLE.[BASEEXCHANGERATEID],
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from
@MGTABLE as [MGTABLE];
declare MGOPPORTUNITYCURSOR cursor local fast_forward for
select
MGTABLE.[ID],
MGTABLE.[OPPORTUNITYID]
from
@MGTABLE as [MGTABLE]
declare @MGID uniqueidentifier;
declare @MGOPPORTUNITYID uniqueidentifier;
open MGOPPORTUNITYCURSOR
fetch next from MGOPPORTUNITYCURSOR into @MGID, @MGOPPORTUNITYID
while @@fetch_status = 0
begin
if @MGOPPORTUNITYID is not null
exec dbo.USP_DATAFORMTEMPLATE_ADD_REVENUEOPPORTUNITYLINK null, @MGID, @MGOPPORTUNITYID, @CHANGEAGENTID, 1
fetch next from MGOPPORTUNITYCURSOR into @MGID, @MGOPPORTUNITYID
end
close MGOPPORTUNITYCURSOR;
DEALLOCATE MGOPPORTUNITYCURSOR;
declare @GIFTSPLIT table
(
ID uniqueidentifier,
DESIGNATIONID uniqueidentifier
);
insert into @GIFTSPLIT (ID, DESIGNATIONID)
select
--Because of the group by and having clauses there wil be only
--one ID per designation returned and the aggregator does not matter
cast(max(cast(REVENUESPLIT_EXT.ID as binary(16))) as uniqueidentifier) as ID,
REVENUESPLIT_EXT.DESIGNATIONID
from
dbo.FINANCIALTRANSACTIONLINEITEM
inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
where
FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID
and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
and FINANCIALTRANSACTIONLINEITEM.TYPECODE != 1
group by
REVENUESPLIT_EXT.DESIGNATIONID
having
count(*) = 1;
declare CUR_MGCAMPAIGNS cursor local fast_forward for
select
[MGSPLITS].SPLITID MGSPLITID,
case
when GIFTSPLIT.DESIGNATIONID is null then (
select CAMPAIGNID,CAMPAIGNSUBPRIORITYID
from dbo.UFN_DESIGNATION_GETCAMPAIGNSTODEFAULT([MGSPLITS].DESIGNATIONID, @DATE)
for xml raw('ITEM'),type,elements,root('CAMPAIGNS'),BINARY BASE64
)
else (
select CAMPAIGNID,CAMPAIGNSUBPRIORITYID
from dbo.UFN_REVENUESPLIT_GETCAMPAIGNS(GIFTSPLIT.ID)
for xml raw('ITEM'),type,elements,root('CAMPAIGNS'),BINARY BASE64
)
end
from
@MGSPLITS_T as [MGSPLITS]
left join @GIFTSPLIT as GIFTSPLIT on GIFTSPLIT.DESIGNATIONID = [MGSPLITS].DESIGNATIONID;
open CUR_MGCAMPAIGNS;
declare @MGSPLITID uniqueidentifier;
declare @MGCAMPAIGNS xml;
fetch next from CUR_MGCAMPAIGNS into @MGSPLITID, @MGCAMPAIGNS;
while @@fetch_status <> -1
begin
if @@fetch_status <> -2
begin
exec dbo.USP_REVENUESPLIT_GETCAMPAIGNS_ADDFROMXML @MGSPLITID, @MGCAMPAIGNS, @CHANGEAGENTID;
end
fetch next from CUR_MGCAMPAIGNS into @MGSPLITID, @MGCAMPAIGNS;
end
close CUR_MGCAMPAIGNS;
deallocate CUR_MGCAMPAIGNS;
--
-- END Matching Gift code
--
/* JamesWill CR258591-102706 2007/03/05 Add the note for every record in the transaction. */
if (@NOTETITLE <> '') or (not @NOTEAUTHORID is null) or (not @NOTEDATEENTERED is null) or (not @NOTETYPECODEID is null) or (not @NOTETEXTNOTE = '') or (not @NOTEHTMLNOTE = '')
begin
insert into dbo.REVENUENOTE(DATEENTERED, TITLE, AUTHORID, TEXTNOTE, REVENUENOTETYPECODEID, REVENUEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, HTMLNOTE)
values(@NOTEDATEENTERED, @NOTETITLE, @NOTEAUTHORID, @NOTETEXTNOTE, @NOTETYPECODEID, @ID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE, @NOTEHTMLNOTE)
end
--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 dbo.UFN_VALID_BASICGL_INSTALLED() = 1
begin
if @PDACCOUNTSYSTEMID is null
set @PDACCOUNTSYSTEMID = dbo.UFN_PDACCOUNTSYSTEM_GETDEFAULTSYSTEMIDSFORUSER(@CURRENTAPPUSERID)
-- Link revenue to Account System
exec dbo.USP_PDACCOUNTSYSTEM_LINKTOREVENUE @ID, @PDACCOUNTSYSTEMID, @CURRENTDATE, @CHANGEAGENTID;
end
--Save the GL distributions
if @POSTSTATUSCODE <> 2
begin
exec dbo.USP_SAVE_REVENUEGLDISTRIBUTION @ID, @CHANGEAGENTID, @CURRENTDATE;
-- Priyanka - 125381 - save any benefit distributions
exec dbo.USP_SAVE_PAYMENT_BENEFITGLDISTRIBUTION @ID, @CHANGEAGENTID, @CURRENTDATE;
end
--Add Gift Fees
exec dbo.USP_PAYMENT_ADDGIFTFEES @ID, @CONSTITUENTID, @CHANGEAGENTID, @CURRENTDATE;
--Add VAT
if @AMOUNTFORVAT > 0
begin
set @TRANSACTIONVATAMOUNT = @VATAMOUNT;
set @TRANSACTIONAMOUNTTOTAX = @AMOUNTFORVAT;
exec dbo.USP_CURRENCY_GETCURRENCYVALUES @TRANSACTIONVATAMOUNT,
@CURRENTDATE,
@BASECURRENCYID,
@BASEEXCHANGERATEID,
@TRANSACTIONCURRENCYID,
@BASEVATAMOUNT output,
@ORGANIZATIONCURRENCYID,
@ORGANIZATIONVATAMOUNT output,
@ORGANIZATIONEXCHANGERATEID,
0;
exec dbo.USP_CURRENCY_GETCURRENCYVALUES @TRANSACTIONAMOUNTTOTAX,
@CURRENTDATE,
@BASECURRENCYID,
@BASEEXCHANGERATEID,
@TRANSACTIONCURRENCYID,
@BASEAMOUNTTOTAX output,
@ORGANIZATIONCURRENCYID,
@ORGANIZATIONAMOUNTTOTAX output,
@ORGANIZATIONEXCHANGERATEID,
0;
insert into dbo.REVENUEVAT(
ID,
AMOUNTTOTAX,
VATAMOUNT,
BASECURRENCYID,
BASEEXCHANGERATEID,
TRANSACTIONAMOUNTTOTAX,
TRANSACTIONVATAMOUNT,
TRANSACTIONCURRENCYID,
ORGANIZATIONAMOUNTTOTAX,
ORGANIZATIONVATAMOUNT,
ORGANIZATIONEXCHANGERATEID,
VATTAXRATEID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)values(
@ID,
@BASEAMOUNTTOTAX,
@BASEVATAMOUNT,
@BASECURRENCYID,
@BASEEXCHANGERATEID,
@TRANSACTIONAMOUNTTOTAX,
@TRANSACTIONVATAMOUNT,
@TRANSACTIONCURRENCYID,
@ORGANIZATIONAMOUNTTOTAX,
@ORGANIZATIONVATAMOUNT,
@ORGANIZATIONEXCHANGERATEID,
@VATTAXRATEID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
)
end
-- Generate gift aid revenue split records
exec dbo.USP_GIFTAIDREVENUESPLIT_ADDUPDATESPLITS @ID, @APPEALID, @PAYMENTMETHODCODE, @CREDITTYPECODEID, @CHANGEAGENTID, @DATE, @TYPECODE, @SPLITSDECLININGGIFTAID, @COVENANTGIFTSPLITS, @ISGIFTAIDSPONSORSHIPSPLITS
-- Solicitors and recognition credits need to be added after REVENUESPLITGIFTAID records are added since that table is used in the REVENUESPLITID
-- lookup since 'declines gift aid' is a part of the check.
if (@APPLICATIONCODE is not null and @SPLITCOUNT > 1) or (@APPLICATIONCODE is null and @SINGLEAPPLICATIONID is null and (@ADDITIONALAPPLICATIONCOUNT + @STREAMCOUNT > 1))
begin
if not @APPLICATIONSOLICITORS is null
exec dbo.USP_REVENUEBATCH_ADDAPPLICATIONSOLICITORS @ID, @APPLICATIONSOLICITORS, @CHANGEAGENTID, @CURRENTDATE, @REVENUESPLITSPONSORSHIPID;
end
else
if not @SOLICITORS is null
exec dbo.USP_REVENUEBATCH_ADDSOLICITORS @ID, @SOLICITORS, @CHANGEAGENTID, @CURRENTDATE;
if (@APPLICATIONCODE is not null and @SPLITCOUNT > 1) or (@APPLICATIONCODE is null and @SINGLEAPPLICATIONID is null and (@ADDITIONALAPPLICATIONCOUNT + @STREAMCOUNT > 1))
begin
-- Recognition credits should be created even when user is anonymous but has defined explicit recognitions.
if not @APPLICATIONRECOGNITIONS is null
begin
exec dbo.USP_REVENUEBATCH_ADDAPPLICATIONRECOGNITIONS @ID , @APPLICATIONRECOGNITIONS, @CHANGEAGENTID, @CURRENTDATE, @REVENUESPLITSPONSORSHIPID, @APPLICATIONPLEDGEREVENUEID;
end
else
begin
-- BBIS split transactions have additional applications, but not application recognitions
-- We need to call USP_REVENUEBATCH_ADDRECOGNITIONS to add recognitions in this case
if not @RECOGNITIONS is null and @BBNCTRANID > 0
begin
exec dbo.USP_REVENUEBATCH_ADDRECOGNITIONS @ID, @RECOGNITIONS, @CHANGEAGENTID, @CURRENTDATE;
end
end
end
else -- Recognition credits should be created even when user is anonymous but has defined explicit recognitions.
if not @RECOGNITIONS is null
exec dbo.USP_REVENUEBATCH_ADDRECOGNITIONS @ID, @RECOGNITIONS, @CHANGEAGENTID, @CURRENTDATE;
declare @AUTOADDMGCLAIMCREDIT bit = 0;
declare @CLAIMDEFAULTCREDITTYPEID uniqueidentifier = null;
declare @SHOULDADDDEFAULTSFORINDIVIDUAL bit = 0;
declare @SHOULDADDDEFAULTSFORGROUP bit = 0;
declare @AUTOADDMGCLAIMCREDITFORORG bit;
declare @CLAIMDEFAULTCREDITTYPEIDFORORG uniqueidentifier;
-- Do matching gift claim recognitions AFTER gift recognitions,
-- otherwise, they may not be added correctly.
select
@AUTOADDMGCLAIMCREDIT = ADDRECOGNITIONCREDITSONMGCLAIMADD,
@CLAIMDEFAULTCREDITTYPEID =
case MGCLAIMADDRECOGNITIONTYPECODE
when 0 then CLAIMREVENUERECOGNITIONTYPECODEID
when 1 then null
end,
@AUTOADDMGCLAIMCREDITFORORG = ADDRECOGNITIONCREDITSTOMATCHINGORGONMGCLAIMADD,
@CLAIMDEFAULTCREDITTYPEIDFORORG = MATCHINGORGCLAIMREVENUERECOGNITIONTYPECODEID
from MATCHINGGIFTPREFERENCEINFO;
if @AUTOADDMGCLAIMCREDIT = 1 and (select count(*) from dbo.MATCHINGGIFTPREFERENCEINFO where MGCLAIMADDRECOGNITIONTYPECODE = 0) > 0
set @SHOULDADDDEFAULTSFORINDIVIDUAL = 1;
if @AUTOADDMGCLAIMCREDIT = 1 and (select count(*) from dbo.MATCHINGGIFTPREFERENCEINFO where MGCLAIMADDRECOGNITIONTYPECODE = 1) > 0
set @SHOULDADDDEFAULTSFORGROUP = 1;
declare @MATCHINGGIFTID uniqueidentifier;
declare @MATCHINGORGANIZATIONID uniqueidentifier;
declare @MATCHINGGIFTDATE datetime;
declare MGCURSOR cursor local fast_forward for
select
MGTABLE.[ID],
MGTABLE.[ORGANIZATIONID],
MGTABLE.[DATE]
from @MGTABLE as [MGTABLE];
declare @MGRECOGNITIONSPLITS xml;
open MGCURSOR;
fetch next from MGCURSOR into @MATCHINGGIFTID, @MATCHINGORGANIZATIONID, @MATCHINGGIFTDATE;
while @@fetch_status = 0
begin
set @MGRECOGNITIONSPLITS =
(
select SPLITID as ID, AMOUNT, DESIGNATIONID, DESIGNATIONTRANSLATION, TYPECODE, BASECURRENCYID, ORGANIZATIONAMOUNT, ORGANIZATIONEXCHANGERATEID
from @MGSPLITS_T
where MGTABLEID = @MATCHINGGIFTID
for xml raw('ITEM'),type,elements,root('SPLITS'),binary base64
);
exec dbo.USP_PLEDGE_GENERATEINSTALLMENTSPLITS @MATCHINGGIFTID, @CHANGEAGENTID, @CURRENTDATE;
exec dbo.USP_REVENUECATEGORY_UPDATESPLITS @MATCHINGGIFTID, @CATEGORYCODEID, @CHANGEAGENTID, @CURRENTDATE;
--JamesWill 2010-02-22 WI75863 If the system is configured to auto-create recognitions for matching gifts, do so now
if @AUTOADDMGCLAIMCREDIT = 1
begin
declare @ORIGINALGIFTID uniqueidentifier = @ID;
declare @ORIGINALDONORID uniqueidentifier = @CONSTITUENTID;
declare @ORIGINALDONATIONDATE datetime = @DATE;
if @SHOULDADDDEFAULTSFORINDIVIDUAL = 1
exec dbo.USP_RECOGNITIONCREDIT_ADDDEFAULTSFORMGSPLITS @MGRECOGNITIONSPLITS, @ORIGINALDONORID, @ORIGINALDONATIONDATE, @CLAIMDEFAULTCREDITTYPEID, @CHANGEAGENTID, @CURRENTDATE;
if @SHOULDADDDEFAULTSFORGROUP = 1
exec dbo.USP_RECOGNITIONCREDIT_ADDTOGROUPMEMBERS @MGRECOGNITIONSPLITS, @ORIGINALDONORID, @ORIGINALDONATIONDATE, @ORIGINALGIFTID, @CLAIMDEFAULTCREDITTYPEID, @CHANGEAGENTID, @CURRENTDATE, 1;
end
if @AUTOADDMGCLAIMCREDITFORORG = 1
exec dbo.USP_RECOGNITIONCREDIT_ADDDEFAULTSFORMGSPLITS @MGRECOGNITIONSPLITS, @MATCHINGORGANIZATIONID, @MATCHINGGIFTDATE, @CLAIMDEFAULTCREDITTYPEIDFORORG, @CHANGEAGENTID, @CURRENTDATE;
fetch next from MGCURSOR into @MATCHINGGIFTID, @MATCHINGORGANIZATIONID, @MATCHINGGIFTDATE;
end
close MGCURSOR;
deallocate MGCURSOR;
end
else if @TYPECODE = 1 -- pledge
begin
insert into dbo.FINANCIALTRANSACTION
(ID, CONSTITUENTID, TYPECODE, TRANSACTIONAMOUNT, TRANSACTIONCURRENCYID, BASEEXCHANGERATEID, ORGEXCHANGERATEID, USERDEFINEDID,
BASEAMOUNT, ORGAMOUNT, PDACCOUNTSYSTEMID, DATE, POSTDATE, POSTSTATUSCODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select
@ID, @CONSTITUENTID, 1, @AMOUNT, @TRANSACTIONCURRENCYID, @BASEEXCHANGERATEID, @ORGANIZATIONEXCHANGERATEID, coalesce(rtrim(ltrim(@REVENUELOOKUPID)),''),
@BASEAMOUNT, @ORGANIZATIONAMOUNT, @PDACCOUNTSYSTEMID, @DATE, @POSTDATE, case when @DONOTPOST = 1 then 3 else 1 end, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
insert into dbo.REVENUE_EXT
(ID, BATCHNUMBER, DONOTRECEIPT, RECEIPTAMOUNT, SOURCECODE, FINDERNUMBER, APPEALID, MAILINGID, CHANNELCODEID, GIVENANONYMOUSLY,
DONOTACKNOWLEDGE, BENEFITSWAIVED, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values
(@ID, @BATCHNUMBER, 1, 0, @SOURCECODE, @FINDERNUMBER, @APPEALID, @MAILINGID, @CHANNELCODEID, @GIVENANONYMOUSLY,
@DONOTACKNOWLEDGE, @BENEFITSWAIVED, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE)
--Add origination source
exec dbo.USP_REVENUE_ADDORIGIN @ID, @CONSTITUENTID, @CHANGEAGENTID, @CURRENTDATE;
--Add pledge original amount
exec dbo.USP_PLEDGE_ADDORIGINALAMOUNT @ID, null, @CHANGEAGENTID, @CURRENTDATE;
exec dbo.USP_REVENUEREFERENCE_ADD @ID, @REFERENCE, @CHANGEAGENTID;
if not @LETTERCODEID is null
begin
if @ACKNOWLEDGEEID is null
set @ACKNOWLEDGEEID = @CONSTITUENTID;
insert into dbo.REVENUELETTER(ID,REVENUEID,LETTERCODEID,ACKNOWLEDGEDATE,ACKNOWLEDGEEID,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
values (NewID(),@ID,@LETTERCODEID,@ACKNOWLEDGEDATE,@ACKNOWLEDGEEID,@CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE);
end;
insert into dbo.REVENUEPAYMENTMETHOD (REVENUEID, PAYMENTMETHODCODE, AMOUNT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values (@ID,@PAYMENTMETHODCODE, @BASEAMOUNT,@CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE)
if @POSTSTATUSCODE = 0
insert into dbo.REVENUEPOSTED(ID,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
values(@ID,@CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE);
declare @PLEDGECREDITCARDID uniqueidentifier
if @PAYMENTMETHODCODE = 2 -- Credit Card
begin
exec dbo.USP_CREDITCARD_SAVE @ID = @PLEDGECREDITCARDID output,
@CREDITCARDTOKEN = @CREDITCARDTOKEN,
@CARDHOLDERNAME = @CARDHOLDERNAME,
@CREDITCARDPARTIALNUMBER = @CREDITCARDNUMBER,
@CREDITTYPECODEID = @CREDITTYPECODEID,
@EXPIRESON = @EXPIRESON,
@CHANGEAGENTID = @CHANGEAGENTID,
@CURRENTDATE = @CURRENTDATE
end
insert into dbo.REVENUESCHEDULE (ID,STARTDATE,FREQUENCYCODE,NUMBEROFINSTALLMENTS,PLEDGESUBTYPEID,SENDPLEDGEREMINDER,CREDITCARDID,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
values (@ID, @INSTALLMENTSTARTDATE, @INSTALLMENTFREQUENCYCODE, @NUMBEROFINSTALLMENTS, @PLEDGESUBTYPEID, @SENDPLEDGEREMINDER, @PLEDGECREDITCARDID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
if @PAYMENTMETHODCODE = 3 -- Direct Debit
begin
if dbo.UFN_INSTALLEDPRODUCTS_PRODUCTIS('9568A6C2-F7AA-45fd-8F54-21FE9654EE2D') = 0
begin
set @DDISOURCECODEID = null;
set @DDISOURCEDATE = null;
end
set @SENDNEWINSTRUCTION = 0;
set @NEWINSTRUCTIONTOSEND = 0;
if not @DDISOURCECODEID is null
begin
set @SENDNEWINSTRUCTION = 1;
set @NEWINSTRUCTIONTOSEND = 1;
end
insert into dbo.REVENUESCHEDULEDIRECTDEBITPAYMENT(ID, REFERENCEDATE, REFERENCENUMBER, CONSTITUENTACCOUNTID, DDISOURCECODEID, DDISOURCEDATE, SENDPMINSTRUCTION, PMINSTRUCTIONTOSENDCODE, SEPAMANDATEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, DIRECTDEBITRESULTCODE)
values (@ID, @REFERENCEDATE, @REFERENCENUMBER, @CONSTITUENTACCOUNTID, @DDISOURCECODEID, @DDISOURCEDATE, @SENDNEWINSTRUCTION, @NEWINSTRUCTIONTOSEND, @SEPAMANDATEID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE, @DIRECTDEBITRESULTCODE);
end
if @PAYMENTMETHODCODE = 11 -- Standing Order
begin
insert into dbo.REVENUESCHEDULESTANDINGORDERPAYMENT(ID, REFERENCEDATE, REFERENCENUMBER, CONSTITUENTACCOUNTID, STANDINGORDERSETUP, STANDINGORDERSETUPDATE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values (@ID, @REFERENCEDATE, @STANDINGORDERREFERENCENUMBER, @CONSTITUENTACCOUNTID, @STANDINGORDERSETUP, @STANDINGORDERSETUPDATE, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
insert into dbo.REVENUESTANDINGORDER(ID, CUSTOMREFERENCENUMBER, USESYSTEMGENERATEDREFERENCENUMBER, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values(@ID, @STANDINGORDERREFERENCENUMBER, @GENERATEREFERENCENUMBER, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
end
declare @SPLITSDECLININGGIFTAIDPLEDGE xml
exec dbo.USP_REVENUEBATCHCOMMIT_SPLITSWITHCHILDREN_ADDFROMXML @ID = @ID,
@SPLITS = @SPLITS,
@REVENUESPLITAPPLICATIONCODE = null,
@REVENUESPLITTYPECODE = null,
@OTHERTYPECODEID = null,
@CATEGORYCODEID = @CATEGORYCODEID,
@CHANGEAGENTID = @CHANGEAGENTID,
@CURRENTDATE = @CURRENTDATE,
@OPPORTUNITYID = @OPPORTUNITYID,
@ADDITIONALAPPLICATIONS = 0,
@SPLITSDECLININGGIFTAID = @SPLITSDECLININGGIFTAIDPLEDGE output,
@TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID,
@BASECURRENCYID = @BASECURRENCYID,
@BASEEXCHANGERATEID = @BASEEXCHANGERATEID,
@ORGANIZATIONEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID
exec dbo.USP_REVENUECATEGORY_UPDATESPLITS @REVENUEID = @ID,
@CATEGORYCODEID = @CATEGORYCODEID,
@CHANGEAGENTID = @CHANGEAGENTID,
@CURRENTDATE = @CURRENTDATE
declare @COVENANTGIFTSPLITSPLEDGE xml
if @ISCOVENANT = 1
begin
set @COVENANTGIFTSPLITSPLEDGE =
(
select
REVENUESPLIT.ID as REVENUESPLITID
from dbo.REVENUESPLIT
where REVENUEID = @ID
for xml raw('ITEM'),type,elements,root('COVENANTGIFTSPLITS'),BINARY BASE64
)
end
-- Generate gift aid revenue split records
exec dbo.USP_GIFTAIDREVENUESPLIT_ADDUPDATESPLITS @ID, @APPEALID, @PAYMENTMETHODCODE, @CREDITTYPECODEID, @CHANGEAGENTID, @DATE, @TYPECODE, @SPLITSDECLININGGIFTAIDPLEDGE, @COVENANTGIFTSPLITSPLEDGE
-- create installments for pledge
if @INSTALLMENTFREQUENCYCODE <> 4 and (coalesce(@INSTALLMENTS.exist('INSTALLMENTS/ITEM'),0) = 0 or exists(select 1 from @INSTALLMENTS.nodes('/INSTALLMENTS/ITEM') T1(c) where (T1.c.value('(SEQUENCE)[1]','INTEGER') is null)))
set @INSTALLMENTS = dbo.UFN_REVENUEBATCH_GENERATEINSTALLMENTS2(@AMOUNT, @INSTALLMENTFREQUENCYCODE, @INSTALLMENTSTARTDATE, @NUMBEROFINSTALLMENTS, @TRANSACTIONCURRENCYID, @TOTALBENEFITS);
if @INSTALLMENTS is null or not exists(select 1 from @INSTALLMENTS.nodes('/INSTALLMENTS/ITEM') T1(c) cross apply T1.c.nodes('./INSTALLMENTSPLITS/ITEM') as T2(split) where T2.split.value('(DESIGNATIONID)[1]', 'uniqueidentifier') is not null)
begin
--Multicurrency - Process the installments xml to calculate the base and organization amounts and place them in proper nodes.
set @INSTALLMENTS = dbo.UFN_INSTALLMENT_CONVERTAMOUNTSINXML(@INSTALLMENTS,@BASECURRENCYID,@ORGANIZATIONEXCHANGERATEID,@TRANSACTIONCURRENCYID,@BASEEXCHANGERATEID);
-- Installments should never be null. If they are, there is an error.
exec dbo.USP_INSTALLMENT_GETINSTALLMENTS_2_ADDFROMXML @ID, @INSTALLMENTS, @CHANGEAGENTID, @CURRENTDATE;
exec dbo.USP_PLEDGE_GENERATEINSTALLMENTSPLITS @ID, @CHANGEAGENTID, @CURRENTDATE;
end
else
begin
exec dbo.USP_PLEDGE_UPDATEINSTALLMENT3 @ID
,@INSTALLMENTS
,@CHANGEAGENTID
,@CURRENTDATE
,null
,null
,null
,null
,@BASECURRENCYID
,@ORGANIZATIONEXCHANGERATEID
,@TRANSACTIONCURRENCYID
,@BASEEXCHANGERATEID;
end
insert into dbo.PLEDGEINSTALLMENTOPTION
(ID,INSTALLMENTAMOUNT,SPLITSCHEDULEOPTIONCODE,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
values
(@ID,case @INSTALLMENTFREQUENCYCODE when 4 then null else @INSTALLMENTAMOUNT end,0,@CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE);
-- Solicitors and recognition credits need to be created before the payment for
-- pledge since the payment defaults its solicitors and recognition credits from
-- the pledge record
if not @SOLICITORS is null
exec dbo.USP_REVENUEBATCH_ADDSOLICITORS @ID, @SOLICITORS, @CHANGEAGENTID, @CURRENTDATE;
-- Recognition credits should be created even when user is anonymous but has defined explicit recognitions.
if not @RECOGNITIONS is null
exec dbo.USP_REVENUEBATCH_ADDRECOGNITIONS @ID, @RECOGNITIONS, @CHANGEAGENTID, @CURRENTDATE;
if @PAYMENTMETHODCODE = 3 and @DDISOURCECODEID is not null and dbo.UFN_PAPERLESSMANDATES_DAYSADVANCEDNOTICE_FORREVENUE(@ID) = -1
begin
--Bug 138736 - AdamBu 2/2/11 - Error on invalid paperless mandate setup.
raiserror('BBERR_MULTIPLE_PAPERLESSMANDATECONFIGS', 13, 1);
return 1;
end
-- create payment for pledge
if not @PAYMENTFORPLEDGEAMOUNT = 0
begin
-- Need to run the LINKTOREVENUE SP before attempting to add a payment or USP_PAYMENT_ADD can't check for mismatching account systems
if dbo.UFN_VALID_BASICGL_INSTALLED() = 1
begin
if @PDACCOUNTSYSTEMID is null
set @PDACCOUNTSYSTEMID = dbo.UFN_PDACCOUNTSYSTEM_GETDEFAULTSYSTEMIDSFORUSER(@CURRENTAPPUSERID)
-- Link revenue to Account System
exec dbo.USP_PDACCOUNTSYSTEM_LINKTOREVENUE @ID, @PDACCOUNTSYSTEMID, @CURRENTDATE, @CHANGEAGENTID;
end
declare @PAYMENTFORPLEDGE_REVSTREAMS xml;
set @PAYMENTFORPLEDGE_REVSTREAMS =
(
select
@ID as 'APPLICATIONID',
@PAYMENTFORPLEDGEAMOUNT as 'APPLIED',
2 as 'APPLICATIONCODE'
for xml raw('ITEM'), type, elements, root('REVENUESTREAMS'), binary base64
);
--If the payment to be paid uses a payment method of Credit card - 4 digits (98) then add the payment with Credit Card method, since the 4 digits is not a supported method on payments
declare @ALTPLEDGEPAYMENTMETHODCODE tinyint;
set @ALTPLEDGEPAYMENTMETHODCODE = case when @PAYMENTMETHODCODE = 98 then 2 else @PAYMENTMETHODCODE end;
if @ALTPLEDGEPAYMENTMETHODCODE = 9 -- None
set @ALTPLEDGEPAYMENTMETHODCODE = 1; -- Check
declare @PAYMENTFORPLEDGE_REVENUEID uniqueidentifier;
exec dbo.USP_PAYMENT_ADD
@ID = @PAYMENTFORPLEDGE_REVENUEID output,
@CHANGEAGENTID = @CHANGEAGENTID,
@CURRENTDATE = @CURRENTDATE,
@CONSTITUENTID = @CONSTITUENTID,
@DATE = @DATE,
@AMOUNT = @PAYMENTFORPLEDGEAMOUNT,
@PAYMENTMETHODCODE = @ALTPLEDGEPAYMENTMETHODCODE,
@CREDITTYPECODEID = @CREDITTYPECODEID,
@CREDITCARDNUMBER = @CREDITCARDNUMBER,
@CARDHOLDERNAME = @CARDHOLDERNAME,
@EXPIRESON = @EXPIRESON,
@AUTHORIZATIONCODE = @AUTHORIZATIONCODE,
@REFERENCENUMBER = @REFERENCENUMBER,
@REFERENCEDATE = @REFERENCEDATE,
@CONSTITUENTACCOUNTID = @CONSTITUENTACCOUNTID,
@DIRECTDEBITRESULTCODE = @DIRECTDEBITRESULTCODE,
@OTHERPAYMENTMETHODCODEID = @OTHERPAYMENTMETHODCODEID,
@POSTDATE = @DATE,
@REVENUESTREAMS = @PAYMENTFORPLEDGE_REVSTREAMS,
@FINDERNUMBER = @FINDERNUMBER,
@SOURCECODE = @SOURCECODE,
@BATCHNUMBER = @BATCHNUMBER,
@RECEIPTAMOUNT = @PAYMENTFORPLEDGERECEIPTAMOUNT,
@PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID,
@TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID,
@BASECURRENCYID = @BASECURRENCYID,
@BASEEXCHANGERATEID = @BASEEXCHANGERATEID,
@EXCHANGERATE = @EXCHANGERATE,
@CURRENTAPPUSERID = @CURRENTAPPUSERID,
@GIVENANONYMOUSLY = @GIVENANONYMOUSLY
end
-- Note that @TOTALBENEFITS was run through its CONVERTAMOUNTSINXML SP earlier on in the commit.
exec dbo.USP_REVENUE_GETBENEFITS_3_ADDFROMXML @ID, @TOTALBENEFITS, @CHANGEAGENTID, @CURRENTDATE;
if not @TRIBUTES is null
begin
--SlyyMu 8/17/10. Tributes don't have a transaction currency, @BASETOORGANIZATIONEXCHANGERATEID handles the
-- case where the revenue split ORGANIZATIONEXCHANGERATE is for converting from transaction to org currencies
set @TRIBUTES = dbo.UFN_REVENUETRIBUTE_CONVERTAMOUNTSINXML(@TRIBUTES, @BASECURRENCYID, @BASETOORGANIZATIONEXCHANGERATEID);
exec dbo.USP_REVENUE_GETTRIBUTES_2_UPDATEFROMXML @ID, @TRIBUTES, @CHANGEAGENTID, @CURRENTDATE;
-- insert default revenue tribute letters for any acknowledgees that have corresponding tribute letter codes
insert into dbo.REVENUETRIBUTELETTER(ID,REVENUETRIBUTEID,CONSTITUENTID,TRIBUTELETTERCODEID,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
select newid(),RT.ID,TA.CONSTITUENTID,TA.TRIBUTELETTERCODEID,@CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE
from dbo.REVENUETRIBUTE RT
inner join dbo.TRIBUTEACKNOWLEDGEE TA on RT.TRIBUTEID = TA.TRIBUTEID
where TA.TRIBUTELETTERCODEID is not null and
RT.REVENUEID = @ID;
end
if (@NOTETITLE <> '') or (not @NOTEAUTHORID is null) or (not @NOTEDATEENTERED is null) or (not @NOTETYPECODEID is null) or (not @NOTETEXTNOTE = '') or (not @NOTEHTMLNOTE = '')
insert into dbo.REVENUENOTE(DATEENTERED, TITLE, AUTHORID, TEXTNOTE, REVENUENOTETYPECODEID, REVENUEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, HTMLNOTE)
values(@NOTEDATEENTERED, @NOTETITLE, @NOTEAUTHORID, @NOTETEXTNOTE, @NOTETYPECODEID, @ID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE, @NOTEHTMLNOTE)
if dbo.UFN_VALID_BASICGL_INSTALLED() = 1 and @PAYMENTFORPLEDGEAMOUNT = 0
begin
if @PDACCOUNTSYSTEMID is null
set @PDACCOUNTSYSTEMID = dbo.UFN_PDACCOUNTSYSTEM_GETDEFAULTSYSTEMIDSFORUSER(@CURRENTAPPUSERID)
-- Link revenue to Account System
exec dbo.USP_PDACCOUNTSYSTEM_LINKTOREVENUE @ID, @PDACCOUNTSYSTEMID, @CURRENTDATE, @CHANGEAGENTID;
end
--Save the GL distributions
if @POSTSTATUSCODE <> 2
begin
exec dbo.USP_SAVE_REVENUEGLDISTRIBUTION @ID, @CHANGEAGENTID, @CURRENTDATE;
-- Priyanka - 125381 - save any benefit distributions
if (dbo.UFN_INSTALLEDPRODUCTS_PRODUCTIS('0E85C527-E6E9-4C5F-A8E8-105FD0E18FE7') = 1)
exec USP_SAVE_BENEFITGLDISTRIBUTION_FINANCIALTRANSACTION @ID, @CHANGEAGENTID, @CURRENTDATE
end
--Add VAT
if @AMOUNTFORVAT > 0
begin
set @TRANSACTIONVATAMOUNT = @VATAMOUNT;
set @TRANSACTIONAMOUNTTOTAX = @AMOUNTFORVAT;
exec dbo.USP_CURRENCY_GETCURRENCYVALUES @TRANSACTIONVATAMOUNT,
@CURRENTDATE,
@BASECURRENCYID,
@BASEEXCHANGERATEID,
@TRANSACTIONCURRENCYID,
@BASEVATAMOUNT output,
@ORGANIZATIONCURRENCYID,
@ORGANIZATIONVATAMOUNT output,
@ORGANIZATIONEXCHANGERATEID,
0;
exec dbo.USP_CURRENCY_GETCURRENCYVALUES @TRANSACTIONAMOUNTTOTAX,
@CURRENTDATE,
@BASECURRENCYID,
@BASEEXCHANGERATEID,
@TRANSACTIONCURRENCYID,
@BASEAMOUNTTOTAX output,
@ORGANIZATIONCURRENCYID,
@ORGANIZATIONAMOUNTTOTAX output,
@ORGANIZATIONEXCHANGERATEID,
0;
insert into dbo.REVENUEVAT(
ID,
AMOUNTTOTAX,
VATAMOUNT,
BASECURRENCYID,
BASEEXCHANGERATEID,
TRANSACTIONAMOUNTTOTAX,
TRANSACTIONVATAMOUNT,
TRANSACTIONCURRENCYID,
ORGANIZATIONAMOUNTTOTAX,
ORGANIZATIONVATAMOUNT,
ORGANIZATIONEXCHANGERATEID,
VATTAXRATEID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)values(
@ID,
@BASEAMOUNTTOTAX,
@BASEVATAMOUNT,
@BASECURRENCYID,
@BASEEXCHANGERATEID,
@TRANSACTIONAMOUNTTOTAX,
@TRANSACTIONVATAMOUNT,
@TRANSACTIONCURRENCYID,
@ORGANIZATIONAMOUNTTOTAX,
@ORGANIZATIONVATAMOUNT,
@ORGANIZATIONEXCHANGERATEID,
@VATTAXRATEID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
)
end
end
else if @TYPECODE = 3 -- recurring gift
begin
insert into dbo.REVENUE (ID, CONSTITUENTID, DATE, AMOUNT, TRANSACTIONTYPECODE, RECEIPTAMOUNT,
FINDERNUMBER, SOURCECODE, APPEALID, GIVENANONYMOUSLY, DONOTACKNOWLEDGE,
BATCHNUMBER, POSTDATE, DONOTPOST, BENEFITSWAIVED, MAILINGID,
CHANNELCODEID, CUSTOMIDENTIFIER,
BASECURRENCYID, ORGANIZATIONAMOUNT, ORGANIZATIONEXCHANGERATEID,
TRANSACTIONAMOUNT, TRANSACTIONCURRENCYID, BASEEXCHANGERATEID,
ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values
(@ID, @CONSTITUENTID, @DATE, @BASEAMOUNT, 2, @AMOUNT,
@FINDERNUMBER, @SOURCECODE, @APPEALID, @GIVENANONYMOUSLY, @DONOTACKNOWLEDGE,
@BATCHNUMBER, @POSTDATE, @DONOTPOST, @BENEFITSWAIVED, @MAILINGID,
@CHANNELCODEID, coalesce(rtrim(ltrim(@REVENUELOOKUPID)),''),
@BASECURRENCYID, @ORGANIZATIONAMOUNT, @ORGANIZATIONEXCHANGERATEID,
@AMOUNT, @TRANSACTIONCURRENCYID, @BASEEXCHANGERATEID,
@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
--Add origination source
exec dbo.USP_REVENUE_ADDORIGIN @ID, @CONSTITUENTID, @CHANGEAGENTID, @CURRENTDATE;
exec dbo.USP_REVENUEREFERENCE_ADD @ID, @REFERENCE, @CHANGEAGENTID;
if not @LETTERCODEID is null
begin
if @ACKNOWLEDGEEID is null
set @ACKNOWLEDGEEID = @CONSTITUENTID;
insert into dbo.REVENUELETTER(ID,REVENUEID,LETTERCODEID,ACKNOWLEDGEDATE,ACKNOWLEDGEEID,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
values (NewID(),@ID,@LETTERCODEID,@ACKNOWLEDGEDATE,@ACKNOWLEDGEEID,@CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE);
end;
insert into dbo.REVENUEPAYMENTMETHOD (REVENUEID, PAYMENTMETHODCODE, AMOUNT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values (@ID,case when @PAYMENTMETHODCODE = 98 then 2 else @PAYMENTMETHODCODE end, @BASEAMOUNT,@CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE)
if @POSTSTATUSCODE = 0
insert into dbo.REVENUEPOSTED(ID,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
values(@ID,@CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE);
declare @SPLITSDECLININGGIFTAIDRECURRINGGIFT xml
exec dbo.USP_REVENUEBATCHCOMMIT_SPLITSWITHCHILDREN_ADDFROMXML @ID = @ID,
@SPLITS = @SPLITS,
@REVENUESPLITAPPLICATIONCODE = null,
@REVENUESPLITTYPECODE = null,
@OTHERTYPECODEID = null,
@CATEGORYCODEID = @CATEGORYCODEID,
@CHANGEAGENTID = @CHANGEAGENTID,
@CURRENTDATE = @CURRENTDATE,
@OPPORTUNITYID = null,
@ADDITIONALAPPLICATIONS = 0,
@SPLITSDECLININGGIFTAID = @SPLITSDECLININGGIFTAIDRECURRINGGIFT output,
@TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID,
@BASECURRENCYID = @BASECURRENCYID,
@BASEEXCHANGERATEID = @BASEEXCHANGERATEID,
@ORGANIZATIONEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID
exec dbo.USP_REVENUECATEGORY_UPDATESPLITS @REVENUEID = @ID,
@CATEGORYCODEID = @CATEGORYCODEID,
@CHANGEAGENTID = @CHANGEAGENTID,
@CURRENTDATE = @CURRENTDATE
-- Generate gift aid revenue split records
exec dbo.USP_GIFTAIDREVENUESPLIT_ADDUPDATESPLITS
@ID,
@APPEALID,
@PAYMENTMETHODCODE,
@CREDITTYPECODEID,
@CHANGEAGENTID,
@DATE,
2, -- 2 is the actual transaction type code for recurring gifts
@SPLITSDECLININGGIFTAIDRECURRINGGIFT
declare @RECURRINGGIFTCREDITCARDID uniqueidentifier
if @PAYMENTMETHODCODE = 2 -- Credit Card
begin
exec dbo.USP_CREDITCARD_SAVE @ID = @RECURRINGGIFTCREDITCARDID output,
@CREDITCARDTOKEN = @CREDITCARDTOKEN,
@CARDHOLDERNAME = @CARDHOLDERNAME,
@CREDITCARDPARTIALNUMBER = @CREDITCARDNUMBER,
@CREDITTYPECODEID = @CREDITTYPECODEID,
@EXPIRESON = @EXPIRESON,
@CHANGEAGENTID = @CHANGEAGENTID,
@CURRENTDATE = @CURRENTDATE
end
insert into dbo.REVENUESCHEDULE (ID, SENDPLEDGEREMINDER, STARTDATE, SCHEDULESEEDDATE, ENDDATE, FREQUENCYCODE, NEXTTRANSACTIONDATE, CREDITCARDID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values (@ID, @SENDPLEDGEREMINDER, @INSTALLMENTSTARTDATE, @INSTALLMENTSTARTDATE, @INSTALLMENTENDDATE, @INSTALLMENTFREQUENCYCODE, @NEXTTRANSACTIONDATE, @RECURRINGGIFTCREDITCARDID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
-- add first installment
insert into dbo.RECURRINGGIFTINSTALLMENT (ID, REVENUEID, AMOUNT, DATE, BASECURRENCYID, ORGANIZATIONAMOUNT, ORGANIZATIONEXCHANGERATEID, TRANSACTIONAMOUNT, TRANSACTIONCURRENCYID, BASEEXCHANGERATEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values (newid(), @ID, @BASEAMOUNT, @NEXTTRANSACTIONDATE, @BASECURRENCYID, @ORGANIZATIONAMOUNT, @ORGANIZATIONEXCHANGERATEID, @AMOUNT, @TRANSACTIONCURRENCYID, @BASEEXCHANGERATEID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
-- add any additional installments to get us current
exec dbo.USP_RECURRINGGIFT_ADDMISSINGINSTALLMENTS
@ID = @ID,
@CHANGEAGENTID = @CHANGEAGENTID,
@CREATIONDATE = @CURRENTDATE,
@AMOUNT = @BASEAMOUNT,
@BASECURRENCYID = @BASECURRENCYID,
@ORGANIZATIONAMOUNT = @ORGANIZATIONAMOUNT,
@ORGANIZATIONEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID,
@TRANSACTIONAMOUNT = @AMOUNT,
@TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID,
@BASEEXCHANGERATEID = @BASEEXCHANGERATEID;
if @PAYMENTMETHODCODE = 3 --Direct debit
begin
if dbo.UFN_INSTALLEDPRODUCTS_PRODUCTIS('9568A6C2-F7AA-45fd-8F54-21FE9654EE2D') = 0
begin
set @DDISOURCECODEID = null;
set @DDISOURCEDATE = null;
end
set @SENDNEWINSTRUCTION = 0;
set @NEWINSTRUCTIONTOSEND = 0;
if not @DDISOURCECODEID is null
begin
if dbo.UFN_PAPERLESSMANDATES_DAYSADVANCEDNOTICE_FORREVENUE(@ID) = -1
begin
raiserror('BBERR_MULTIPLE_PAPERLESSMANDATECONFIGS', 13, 1);
return 1;
end
set @SENDNEWINSTRUCTION = 1;
set @NEWINSTRUCTIONTOSEND = 1;
end
insert into dbo.REVENUESCHEDULEDIRECTDEBITPAYMENT(ID, REFERENCEDATE, REFERENCENUMBER, CONSTITUENTACCOUNTID, DDISOURCECODEID, DDISOURCEDATE, SENDPMINSTRUCTION, PMINSTRUCTIONTOSENDCODE, SEPAMANDATEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, DIRECTDEBITRESULTCODE)
values (@ID, @REFERENCEDATE, @REFERENCENUMBER, @CONSTITUENTACCOUNTID, @DDISOURCECODEID, @DDISOURCEDATE, @SENDNEWINSTRUCTION, @NEWINSTRUCTIONTOSEND, @SEPAMANDATEID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE, @DIRECTDEBITRESULTCODE);
end
if @PAYMENTMETHODCODE = 10 -- Other
begin
insert into dbo.OTHERPAYMENTMETHODDETAIL (ID, REFERENCEDATE, REFERENCENUMBER, OTHERPAYMENTMETHODCODEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select ID, @REFERENCEDATE, @REFERENCENUMBER, @OTHERPAYMENTMETHODCODEID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
from dbo.REVENUEPAYMENTMETHOD
where REVENUEID = @ID;
end
if @PAYMENTMETHODCODE = 11 -- Standing Order
begin
insert into dbo.REVENUESCHEDULESTANDINGORDERPAYMENT(ID, REFERENCEDATE, REFERENCENUMBER, CONSTITUENTACCOUNTID, STANDINGORDERSETUP, STANDINGORDERSETUPDATE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values (@ID, @REFERENCEDATE, @STANDINGORDERREFERENCENUMBER, @CONSTITUENTACCOUNTID, @STANDINGORDERSETUP, @STANDINGORDERSETUPDATE, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
insert into dbo.REVENUESTANDINGORDER(ID, CUSTOMREFERENCENUMBER, USESYSTEMGENERATEDREFERENCENUMBER, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values(@ID, @STANDINGORDERREFERENCENUMBER, @GENERATEREFERENCENUMBER, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
end
if @PAYMENTMETHODCODE = 98 -- Credit card - last 4 digits
begin
set @CREDITCARDNUMBER = coalesce(@PARTIALCREDITCARDNUMBER, '');
insert into dbo.CREDITCARDPAYMENTMETHODDETAIL (ID, CARDHOLDERNAME, CREDITCARDPARTIALNUMBER, CREDITTYPECODEID, EXPIRESON, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select ID, @CARDHOLDERNAME, @CREDITCARDNUMBER, @CREDITTYPECODEID, @EXPIRESON, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
from dbo.REVENUEPAYMENTMETHOD
where REVENUEID = @ID;
end
if not @SOLICITORS is null
exec dbo.USP_REVENUEBATCH_ADDSOLICITORS @ID, @SOLICITORS, @CHANGEAGENTID, @CURRENTDATE;
-- Recognition credits should be created even when user is anonymous but has defined explicit recognitions.
if not @RECOGNITIONS is null
exec dbo.USP_REVENUEBATCH_ADDRECOGNITIONS @ID, @RECOGNITIONS, @CHANGEAGENTID, @CURRENTDATE;
-- create payment for recurring gift (uses same code path as pledge, just changed applicationcode)
if not @PAYMENTFORPLEDGEAMOUNT = 0
begin
-- Need to run the LINKTOREVENUE SP before attempting to add a payment or USP_PAYMENT_ADD can't check for mismatching account systems
if dbo.UFN_VALID_BASICGL_INSTALLED() = 1
begin
if @PDACCOUNTSYSTEMID is null
set @PDACCOUNTSYSTEMID = dbo.UFN_PDACCOUNTSYSTEM_GETDEFAULTSYSTEMIDSFORUSER(@CURRENTAPPUSERID)
-- Link revenue to Account System
exec dbo.USP_PDACCOUNTSYSTEM_LINKTOREVENUE @ID, @PDACCOUNTSYSTEMID, @CURRENTDATE, @CHANGEAGENTID;
end
declare @PAYMENTFORRG_REVSTREAMS xml;
set @PAYMENTFORRG_REVSTREAMS =
(
select
@ID as 'APPLICATIONID',
@PAYMENTFORPLEDGEAMOUNT as 'APPLIED',
3 as 'APPLICATIONCODE'
for xml raw('ITEM'), type, elements, root('REVENUESTREAMS'), binary base64
);
--If the RG to be paid uses a payment method of Credit card - 4 digits (98) then add the payment with Credit Card method, since the 4 digits is not a supported method on payments
declare @ALTPAYMENTMETHODCODE tinyint;
set @ALTPAYMENTMETHODCODE = case when @PAYMENTMETHODCODE = 98 then 2 else @PAYMENTMETHODCODE end;
if @ALTPAYMENTMETHODCODE = 9 -- None
set @ALTPAYMENTMETHODCODE = 1; -- Check
declare @PAYMENTFORRG_REVENUEID uniqueidentifier;
exec dbo.USP_PAYMENT_ADD
@ID = @PAYMENTFORRG_REVENUEID output,
@CHANGEAGENTID = @CHANGEAGENTID,
@CURRENTDATE = @CURRENTDATE,
@CONSTITUENTID = @CONSTITUENTID,
@DATE = @DATE,
@AMOUNT = @PAYMENTFORPLEDGEAMOUNT,
@PAYMENTMETHODCODE = @ALTPAYMENTMETHODCODE,
@CARDHOLDERNAME = @CARDHOLDERNAME,
@CREDITCARDNUMBER = @CREDITCARDNUMBER,
@CREDITTYPECODEID = @CREDITTYPECODEID,
@AUTHORIZATIONCODE = @AUTHORIZATIONCODE,
@EXPIRESON = @EXPIRESON,
@REFERENCENUMBER = @REFERENCENUMBER,
@REFERENCEDATE = @REFERENCEDATE,
@CONSTITUENTACCOUNTID = @CONSTITUENTACCOUNTID,
@DIRECTDEBITRESULTCODE = @DIRECTDEBITRESULTCODE,
@POSTDATE = @DATE,
@REVENUESTREAMS = @PAYMENTFORRG_REVSTREAMS,
@FINDERNUMBER = @FINDERNUMBER,
@SOURCECODE = @SOURCECODE,
@BATCHNUMBER = @BATCHNUMBER,
@OTHERPAYMENTMETHODCODEID = @OTHERPAYMENTMETHODCODEID,
@RECEIPTAMOUNT = @PAYMENTFORPLEDGEAMOUNT,
@PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID,
@TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID,
@BASECURRENCYID = @BASECURRENCYID,
@BASEEXCHANGERATEID = @BASEEXCHANGERATEID,
@EXCHANGERATE = @EXCHANGERATE,
@CURRENTAPPUSERID = @CURRENTAPPUSERID,
@GIVENANONYMOUSLY = @GIVENANONYMOUSLY,
@TRANSACTIONID = @TRANSACTIONID,
@MERCHANTACCOUNTID = @MERCHANTACCOUNTID,
@VENDORID = @VENDORID;
end
-- Note that @TOTALBENEFITS was run through its CONVERTAMOUNTSINXML SP earlier on in the commit.
exec dbo.USP_REVENUE_GETBENEFITS_3_ADDFROMXML @ID, @TOTALBENEFITS, @CHANGEAGENTID, @CURRENTDATE;
if (@NOTETITLE <> '') or (not @NOTEAUTHORID is null) or (not @NOTEDATEENTERED is null) or (not @NOTETYPECODEID is null) or (not @NOTETEXTNOTE = '')
insert into dbo.REVENUENOTE(DATEENTERED, TITLE, AUTHORID, TEXTNOTE, REVENUENOTETYPECODEID, REVENUEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values(@NOTEDATEENTERED, @NOTETITLE, @NOTEAUTHORID, @NOTETEXTNOTE, @NOTETYPECODEID, @ID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE)
if @AMOUNTFORVAT > 0
begin
set @TRANSACTIONVATAMOUNT = @VATAMOUNT;
set @TRANSACTIONAMOUNTTOTAX = @AMOUNTFORVAT;
exec dbo.USP_CURRENCY_GETCURRENCYVALUES @TRANSACTIONVATAMOUNT,
@CURRENTDATE,
@BASECURRENCYID,
@BASEEXCHANGERATEID,
@TRANSACTIONCURRENCYID,
@BASEVATAMOUNT output,
@ORGANIZATIONCURRENCYID,
@ORGANIZATIONVATAMOUNT output,
@ORGANIZATIONEXCHANGERATEID,
0;
exec dbo.USP_CURRENCY_GETCURRENCYVALUES @TRANSACTIONAMOUNTTOTAX,
@CURRENTDATE,
@BASECURRENCYID,
@BASEEXCHANGERATEID,
@TRANSACTIONCURRENCYID,
@BASEAMOUNTTOTAX output,
@ORGANIZATIONCURRENCYID,
@ORGANIZATIONAMOUNTTOTAX output,
@ORGANIZATIONEXCHANGERATEID,
0;
insert into dbo.REVENUEVAT(
ID,
AMOUNTTOTAX,
VATAMOUNT,
BASECURRENCYID,
BASEEXCHANGERATEID,
TRANSACTIONAMOUNTTOTAX,
TRANSACTIONVATAMOUNT,
TRANSACTIONCURRENCYID,
ORGANIZATIONAMOUNTTOTAX,
ORGANIZATIONVATAMOUNT,
ORGANIZATIONEXCHANGERATEID,
VATTAXRATEID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)values(
@ID,
@BASEAMOUNTTOTAX,
@BASEVATAMOUNT,
@BASECURRENCYID,
@BASEEXCHANGERATEID,
@TRANSACTIONAMOUNTTOTAX,
@TRANSACTIONVATAMOUNT,
@TRANSACTIONCURRENCYID,
@ORGANIZATIONAMOUNTTOTAX,
@ORGANIZATIONVATAMOUNT,
@ORGANIZATIONEXCHANGERATEID,
@VATTAXRATEID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
)
end
--create a row in the RecurringGiftAmendment table for the activity timeline
insert into dbo.RECURRINGGIFTAMENDMENT(ID, FINANCIALTRANSACTIONID, AMENDMENTTYPECODE, DATE, STATUSCODE,
TRANSACTIONAMOUNT, TRANSACTIONCURRENCYID, BASEAMOUNT, BASECURRENCYID, BASEEXCHANGERATEID,
ORGANIZATIONAMOUNT, ORGANIZATIONEXCHANGERATEID, FREQUENCYCODE,
DESIGNATIONS, SOURCECODE, FINDERNUMBER, APPEALID, MAILINGID, CHANNELCODEID, PAYMENTMETHODCODE, CREDITTYPECODEID,
CREDITCARDPARTIALNUMBER, EXPIRESON, CARDHOLDERNAME, CONSTITUENTACCOUNTID, REFERENCEDATE,
REFERENCENUMBER, CONSTITUENTID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, OTHERPAYMENTMETHODCODEID,
DDISOURCECODEID, DDISOURCEDATE, SENDPMINSTRUCTION, PMINSTRUCTIONTOSENDCODE, SEPAMANDATEID, STANDINGORDERSETUP, STANDINGORDERSETUPDATE, USESYSTEMGENERATEDREFERENCENUMBER)
values(newid(), @ID, 0, @CURRENTDATE, 0, @AMOUNT, @TRANSACTIONCURRENCYID, @BASEAMOUNT, @BASECURRENCYID, @BASEEXCHANGERATEID, @ORGANIZATIONAMOUNT,
@ORGANIZATIONEXCHANGERATEID, @INSTALLMENTFREQUENCYCODE, @SPLITS, @SOURCECODE, @FINDERNUMBER, @APPEALID, @MAILINGID, @CHANNELCODEID, @PAYMENTMETHODCODE, @CREDITTYPECODEID,
isnull(@CREDITCARDNUMBER, ''), isnull(@EXPIRESON, '00000000'), isnull(@CARDHOLDERNAME, ''),@CONSTITUENTACCOUNTID, @REFERENCEDATE,
case when @PAYMENTMETHODCODE = 11 then case when @GENERATEREFERENCENUMBER = 1 then dbo.UFN_STANDINGORDER_REFERENCENUMBER_FORDISPLAY(@ID) else @STANDINGORDERREFERENCENUMBER end else @REFERENCENUMBER end,
@CONSTITUENTID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE, @OTHERPAYMENTMETHODCODEID, @DDISOURCECODEID, @DDISOURCEDATE, isnull(@SENDNEWINSTRUCTION,0), isnull(@NEWINSTRUCTIONTOSEND,0),
@SEPAMANDATEID, isnull(@STANDINGORDERSETUP,0), @STANDINGORDERSETUPDATE, case when @PAYMENTMETHODCODE = 11 then @GENERATEREFERENCENUMBER else 0 end)
end
-- Tax declarations can be added for all transaction types
if @TAXDECLARATIONS is not null
begin
-- Make sure the constituent is an individual
if exists (select 1 from dbo.CONSTITUENT where ID = @CONSTITUENTID and ISORGANIZATION = 0 and ISGROUP = 0)
begin
insert into dbo.TAXDECLARATION
(
CONSTITUENTID,
DECLARATIONINDICATORCODE,
DECLARATIONMADE,
DECLARATIONSTARTS,
DECLARATIONENDS,
CHARITYCLAIMREFERENCENUMBERID,
PAYSTAXCODE,
DECLARATIONSOURCECODEID,
ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
)
select
@CONSTITUENTID,
DECLARATIONINDICATORCODE,
DECLARATIONMADE,
DECLARATIONSTARTS,
DECLARATIONENDS,
CHARITYCLAIMREFERENCENUMBERID,
PAYSTAXCODE,
DECLARATIONSOURCECODEID,
@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
from dbo.UFN_REVENUEBATCH_GETTAXDECLARATIONS_FROMITEMLISTXML(@TAXDECLARATIONS)
-- Only update tribute gift aid amounts if there is a Yes declaration since this is the only
-- state that will affect gift aid eligibility
if exists (select 1 from dbo.UFN_CONSTITUENTBATCH_GETTAXDECLARATIONS_FROMITEMLISTXML(@TAXDECLARATIONS) where PAYSTAXCODE = 1)
exec dbo.USP_REVENUETRIBUTETAXCLAIMAMOUNT_ADDUPDATEBYCONSTITUENT @CONSTITUENTID, @CHANGEAGENTID, @CURRENTDATE;
end
end
--Only create the records if this is a UK product and there were tributes included in this batch
if dbo.UFN_INSTALLEDPRODUCTS_PRODUCTIS('9568A6C2-F7AA-45fd-8F54-21FE9654EE2D') = 1 and @TRIBUTES is not null
exec dbo.USP_REVENUETRIBUTETAXCLAIMAMOUNT_ADDUPDATE @ID, @CHANGEAGENTID, @CURRENTDATE;
if @LOCKBOXID is not null
begin
insert into dbo.REVENUELOCKBOX
(
ID,
LOCKBOXID,
BATCHNUMBER,
BATCHSEQUENCE,
ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
)
values
(
@ID,
@LOCKBOXID,
@LOCKBOXBATCHNUMBER,
@LOCKBOXBATCHSEQUENCE,
@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
)
end
--Create BBIS transaction record
if @BBNCTRANID > 0
begin
insert into dbo.REVENUEBBNC
(
ID,
NETCOMMUNITYTRANSACTIONID,
NETCOMMUNITYPAGENAME,
NETCOMMUNITYPAGEID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED,
EMAILID,
EMAILSUBJECT,
EMAILNAME
)
values
(
@ID,
@BBNCTRANID,
@BBNCORIGINPAGENAME,
@BBNCORIGINPAGEID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE,
@EMAILID,
@EMAILSUBJECT,
@EMAILNAME
)
--Mark donation transaction as processed in BBIS
exec dbo.spTransactions_MarkDonationAsProcessed @BBNCTRANID;
--The revenue receipt is traditionally generated by the receipting process, but BBIS transactions can be eReceipted.
--DONOTRECEIPT will override the BBIS setting MARKRECEIPTED.
if @MARKGIFTASRECEIPTED = 1 and @DONOTRECEIPT <> 1
begin
--Discard @RECEIPTNUMBER parameter value, as it is a character data type and could be holding a non-integer value.
select
@RECEIPTNUMBER = RECEIPTNUMBER
from
dbo.BATCHREVENUE
where
BATCHREVENUE.ID = @BATCHROWID;
if len(@RECEIPTSTACKSHORTNAME) > 10
begin
raiserror('BBERR_RECEIPTSTACKSHORTNAME_LENGTH', 13, 1);
return 1;
end
insert into dbo.REVENUERECEIPT
(
ID,
REVENUEID,
RECEIPTNUMBER,
RECEIPTDATE,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED,
RECEIPTSTACKSHORTNAME
)
values
(
newid(),
@ID,
coalesce(@RECEIPTNUMBER, 0),
@DATE,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE,
@RECEIPTSTACKSHORTNAME
);
end
end
end
exec dbo.USP_REVENUEBATCH_APPLYBUSINESSUNITS @ID, @APPLICATIONBUSINESSUNITS, @TYPECODE, @CHANGEAGENTID, @REVENUESPLITSPONSORSHIPID, @REVENUESTREAMS, @ADDITIONALAPPLICATIONSSTREAM;
update dbo.FINANCIALTRANSACTIONLINEITEM set
BATCHID = @BATCHID
,CHANGEDBYID = @CHANGEAGENTID
,DATECHANGED = @CURRENTDATE
where FINANCIALTRANSACTIONID = @ID;
-- clear the BATCHID in the CC/EFT log table, so if the batch is later deleted it won't clear any existing CC/EFT events.
update dbo.RECURRINGGIFTINSTALLMENTEVENT
set BATCHID = NULL,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
from RECURRINGGIFTINSTALLMENTEVENT as RGIE
inner join RECURRINGGIFTINSTALLMENT as RGI on RGI.ID = RGIE.RECURRINGGIFTINSTALLMENTID
where RGI.REVENUEID = @ID
and RGIE.BATCHID = @BATCHID
if @SOLICITCODES is not null and @VALIDATEONLY = 0
begin
begin try
declare @SOLICITCODESTABLE table
(
[CONSTITUENTSOLICITCODEID] [uniqueidentifier] NOT NULL,
[CONSTITUENTID] [uniqueidentifier] NOT NULL,
[SOLICITCODEID] [uniqueidentifier] NOT NULL,
[SEQUENCE] [int] NOT NULL,
[STARTDATE] [datetime] NULL,
[ENDDATE] [datetime] NULL,
[COMMENTS] [nvarchar](100) NOT NULL,
[CONSENTPREFERENCECODE] [tinyint] NOT NULL,
[SOURCECODEID] [uniqueidentifier] NULL,
[SOURCEFILEPATH] [nvarchar](260) NOT NULL,
[PRIVACYPOLICYFILEPATH] [nvarchar](260) NOT NULL,
[SUPPORTINGINFORMATION] [nvarchar](max) NOT NULL,
[CONSENTSTATEMENT] [nvarchar](max) NOT NULL
);
insert into @SOLICITCODESTABLE
(
CONSTITUENTSOLICITCODEID,
CONSTITUENTID,
SOLICITCODEID,
STARTDATE,
ENDDATE,
COMMENTS,
SEQUENCE,
CONSENTPREFERENCECODE,
SOURCECODEID,
SOURCEFILEPATH,
PRIVACYPOLICYFILEPATH,
SUPPORTINGINFORMATION,
CONSENTSTATEMENT
)
select
isnull(CONSTITUENTSOLICITCODEID, newid()) CONSTITUENTSOLICITCODEID,
@CONSTITUENTID,
SOLICITCODEID,
STARTDATE,
ENDDATE,
COMMENTS,
SEQUENCE,
CONSENTPREFERENCECODE,
SOURCECODEID,
SOURCEFILEPATH,
PRIVACYPOLICYFILEPATH,
SUPPORTINGINFORMATION,
CONSENTSTATEMENT
from dbo.UFN_BATCHREVENUE_GETCONSTITUENTSOLICITCODES_FROMITEMLISTXML(@SOLICITCODES);
update dbo.CONSTITUENTSOLICITCODE set
CONSTITUENTSOLICITCODE.CONSTITUENTID = SOLICITCODES.CONSTITUENTID,
CONSTITUENTSOLICITCODE.SOLICITCODEID = SOLICITCODES.SOLICITCODEID,
CONSTITUENTSOLICITCODE.STARTDATE = SOLICITCODES.STARTDATE,
CONSTITUENTSOLICITCODE.ENDDATE = SOLICITCODES.ENDDATE,
CONSTITUENTSOLICITCODE.COMMENTS = SOLICITCODES.COMMENTS,
CONSTITUENTSOLICITCODE.SEQUENCE = SOLICITCODES.SEQUENCE,
CONSTITUENTSOLICITCODE.CONSENTPREFERENCECODE = SOLICITCODES.CONSENTPREFERENCECODE,
CONSTITUENTSOLICITCODE.SOURCECODEID = SOLICITCODES.SOURCECODEID,
CONSTITUENTSOLICITCODE.SOURCEFILEPATH = SOLICITCODES.SOURCEFILEPATH,
CONSTITUENTSOLICITCODE.PRIVACYPOLICYFILEPATH = SOLICITCODES.PRIVACYPOLICYFILEPATH,
CONSTITUENTSOLICITCODE.SUPPORTINGINFORMATION = SOLICITCODES.SUPPORTINGINFORMATION,
CONSTITUENTSOLICITCODE.CONSENTSTATEMENT = SOLICITCODES.CONSENTSTATEMENT,
CONSTITUENTSOLICITCODE.CHANGEDBYID = @CHANGEAGENTID,
CONSTITUENTSOLICITCODE.DATECHANGED = @CURRENTDATE
from @SOLICITCODESTABLE SOLICITCODES
where CONSTITUENTSOLICITCODE.ID = SOLICITCODES.CONSTITUENTSOLICITCODEID;
-- Mark associated mail preferences as Do not send when the ended solicit code is no longer active
update MAILPREFERENCE set
SENDMAIL = 0,
USESEASONALADDRESS = 0,
USEPRIMARYADDRESS = 0,
USEPRIMARYEMAIL = 0,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
from @SOLICITCODESTABLE SOLICITCODES
inner join dbo.MAILPREFERENCE on SOLICITCODES.CONSTITUENTSOLICITCODEID = MAILPREFERENCE.CONSTITUENTSOLICITCODEID
where SOLICITCODES.ENDDATE < convert(date, @CURRENTDATE);
-- prune updates from table variable
delete SOLICITCODES
from @SOLICITCODESTABLE SOLICITCODES
join dbo.BATCHREVENUECONSTITUENTSOLICITCODE BSC on BSC.CONSTITUENTSOLICITCODEID = SOLICITCODES.CONSTITUENTSOLICITCODEID;
-- do inserts
insert into CONSTITUENTSOLICITCODE
(
ID,
CONSTITUENTID,
SOLICITCODEID,
STARTDATE,
ENDDATE,
COMMENTS,
SEQUENCE,
CONSENTPREFERENCECODE,
SOURCECODEID,
SOURCEFILEPATH,
PRIVACYPOLICYFILEPATH,
SUPPORTINGINFORMATION,
CONSENTSTATEMENT,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
CONSTITUENTSOLICITCODEID,
@CONSTITUENTID,
SOLICITCODEID,
STARTDATE,
ENDDATE,
COMMENTS,
SEQUENCE,
CONSENTPREFERENCECODE,
SOURCECODEID,
SOURCEFILEPATH,
PRIVACYPOLICYFILEPATH,
SUPPORTINGINFORMATION,
CONSENTSTATEMENT,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from @SOLICITCODESTABLE;
end try
begin catch
exec.dbo.USP_RAISE_ERROR
return 1
end catch
end
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;