USP_DATAFORMTEMPLATE_ADD_PAYMENTBYTRANSACTIONPOSTED
The save procedure used by the add dataform template "Payment Add by Transaction Posted 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. |
@TRANSACTIONID | uniqueidentifier | IN | Input parameter indicating the context ID for the record being added. |
@AMOUNT | money | IN | Amount |
@RECEIPTAMOUNT | money | IN | Receipt amount |
@SPLITS | xml | IN | Designations |
@REVENUESTREAMS | xml | IN | Revenue streams |
@SOURCECODE | nvarchar(50) | IN | Source code |
@APPEALID | uniqueidentifier | IN | Appeal |
@BENEFITS | xml | IN | Benefits |
@BENEFITSWAIVED | bit | IN | Benefits waived |
@MAILINGID | uniqueidentifier | IN | Mailing |
@CHANNELCODEID | uniqueidentifier | IN | Inbound channel |
@UNAPPLIEDMATCHINGGIFTSPLITS | xml | IN | Designations |
@UNAPPLIEDMATCHINGGIFTAMOUNT | money | IN | Applied |
@CURRENTAPPUSERID | uniqueidentifier | IN | Input parameter indicating the ID of the current user. |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_PAYMENTBYTRANSACTIONPOSTED
(
@ID uniqueidentifier = null output,
@CHANGEAGENTID uniqueidentifier,
@TRANSACTIONID uniqueidentifier,
@AMOUNT money = 0,
@RECEIPTAMOUNT money = 0,
@SPLITS xml = null,
@REVENUESTREAMS xml = null,
@SOURCECODE nvarchar(50) = null,
@APPEALID uniqueidentifier = null,
@BENEFITS xml = null,
@BENEFITSWAIVED bit = 0,
@MAILINGID uniqueidentifier = null,
@CHANNELCODEID uniqueidentifier = null,
@UNAPPLIEDMATCHINGGIFTSPLITS xml = null,
@UNAPPLIEDMATCHINGGIFTAMOUNT money = 0,
@CURRENTAPPUSERID uniqueidentifier = null
)
as
set nocount on;
declare @REVENUEID uniqueidentifier;
declare @DATE datetime;
declare @PAYMENTMETHODCODE tinyint;
declare @OTHERPAYMENTMETHODCODEID uniqueidentifier;
declare @CHECKDATE dbo.UDT_FUZZYDATE;
declare @CHECKNUMBER nvarchar(20);
declare @REFERENCEDATE dbo.UDT_FUZZYDATE;
declare @REFERENCENUMBER nvarchar(20);
declare @CARDHOLDERNAME nvarchar(255);
declare @CREDITCARDNUMBER nvarchar(4);
declare @CREDITTYPECODEID uniqueidentifier;
declare @AUTHORIZATIONCODE nvarchar(20);
declare @EXPIRESON dbo.UDT_FUZZYDATE;
declare @ISSUER nvarchar(100);
declare @NUMBEROFUNITS decimal(20,3);
declare @SYMBOL nvarchar(4);
declare @MEDIANPRICE decimal(19,4);
declare @GIFTINKINDSUBTYPECODEID uniqueidentifier;
declare @PROPERTYSUBTYPECODEID uniqueidentifier;
declare @CONSTITUENTACCOUNTID uniqueidentifier;
declare @POSTSTATUSCODE tinyint;
declare @POSTDATE datetime;
declare @FINDERNUMBER bigint;
declare @GIVENANONYMOUSLY bit;
declare @DONOTRECEIPT bit;
declare @DONOTACKNOWLEDGE bit;
declare @ADJUSTMENTDATE datetime;
declare @ADJUSTMENTPOSTDATE datetime;
declare @ADJUSTMENTREASON nvarchar(300);
declare @ADJUSTMENTID uniqueidentifier;
declare @STOCKDETAILADJUSTMENTID uniqueidentifier;
declare @PROPERTYDETAILADJUSTMENTID uniqueidentifier;
declare @ADJUST bit;
declare @CLEARGLDISTRIBUTION bit;
declare @PROPERTYDETAILCOUNT int;
declare @STOCKDETAILCOUNT int;
set @ADJUST = 0
set @PROPERTYDETAILCOUNT = 0;
set @STOCKDETAILCOUNT = 0;
/* TODO REDO
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
declare @CURRENTDATE datetime;
set @CURRENTDATE = getdate();
--use existing unposted adjustment values if present
select top 1
@ADJUSTMENTDATE = coalesce(ADJUSTMENT.DATE, dbo.UFN_DATE_GETEARLIESTTIME(getdate())),
@ADJUSTMENTPOSTDATE = coalesce(ADJUSTMENT.POSTDATE, dbo.UFN_DATE_GETEARLIESTTIME(getdate())),
@ADJUSTMENTREASON = coalesce(ADJUSTMENT.REASON, 'Adding revenue')
from dbo.REVENUE
left outer join dbo.ADJUSTMENT
on REVENUE.ID = ADJUSTMENT.REVENUEID and ADJUSTMENT.POSTSTATUSCODE = 1
where REVENUE.TRANSACTIONID = @TRANSACTIONID
declare @ADJUSTED table(REVENUEID uniqueidentifier, ADJUSTMENTID uniqueidentifier, STOCKDETAILADJUSTMENTID uniqueidentifier, PROPERTYDETAILADJUSTMENTID uniqueidentifier);
/* Cursor to use for logging history adjustments */
declare HISTORYCURSOR cursor local fast_forward for
select REVENUEID, ADJUSTMENTID, STOCKDETAILADJUSTMENTID, PROPERTYDETAILADJUSTMENTID from @ADJUSTED;
/* Cursor to use for logging adjustments */
declare REVENUECURSOR cursor local fast_forward for
select REVENUE.ID
from dbo.REVENUE
where REVENUE.TRANSACTIONID = @TRANSACTIONID;
begin try
declare @CONSTITUENTID uniqueidentifier;
--Set default payment values
select top 1
@REVENUEID = REVENUE.ID,
@CONSTITUENTID = REVENUE.CONSTITUENTID,
@DATE = REVENUE.DATE,
@PAYMENTMETHODCODE = REVENUE.PAYMENTMETHODCODE,
@POSTSTATUSCODE = case when REVENUE.DONOTPOST = 1 then 2 when REVENUEPOSTED.ID is not null then 0 else 1 end,
@POSTDATE = REVENUE.POSTDATE,
@DONOTRECEIPT = REVENUE.DONOTRECEIPT,
@GIVENANONYMOUSLY = REVENUE.GIVENANONYMOUSLY,
@DONOTACKNOWLEDGE = REVENUE.DONOTACKNOWLEDGE
from dbo.REVENUE
left outer join REVENUEPOSTED
on REVENUE.ID = REVENUEPOSTED.ID
where TRANSACTIONID = @TRANSACTIONID;
if @POSTSTATUSCODE <> 0
raiserror('This action is not valid for unposted transactions.', 13, 1)
select @REFERENCENUMBER = '',
@REFERENCEDATE = '00000000',
@CHECKDATE = '00000000',
@CHECKNUMBER = '',
@CARDHOLDERNAME = '',
@CREDITCARDNUMBER = '',
@CREDITTYPECODEID = null,
@AUTHORIZATIONCODE = '',
@EXPIRESON = '00000000',
@CONSTITUENTACCOUNTID = null,
@ISSUER = '',
@NUMBEROFUNITS = 0,
@SYMBOL = '',
@MEDIANPRICE = 0,
@PROPERTYSUBTYPECODEID = null,
@OTHERPAYMENTMETHODCODEID = null
if @PAYMENTMETHODCODE = 0 --Cash
select
@REFERENCENUMBER = REFERENCENUMBER,
@REFERENCEDATE = REFERENCEDATE
from dbo.CASHPAYMENTMETHODDETAIL where ID = @REVENUEID;
if @PAYMENTMETHODCODE = 1 --Check
select @CHECKDATE = CHECKDATE,
@CHECKNUMBER = CHECKNUMBER
from dbo.CHECKPAYMENTMETHODDETAIL where ID = @REVENUEID;
if @PAYMENTMETHODCODE = 2 --Credit Card
begin
select
@CARDHOLDERNAME = CARDHOLDERNAME,
@CREDITCARDNUMBER = CREDITCARDPARTIALNUMBER,
@CREDITTYPECODEID = CREDITTYPECODEID,
@AUTHORIZATIONCODE = AUTHORIZATIONCODE,
@EXPIRESON = EXPIRESON
from dbo.CREDITCARDPAYMENTMETHODDETAIL where ID = @REVENUEID;
end
if @PAYMENTMETHODCODE = 3 --Direct Debit
select
@REFERENCEDATE = REFERENCEDATE,
@REFERENCENUMBER = REFERENCENUMBER,
@CONSTITUENTACCOUNTID = CONSTITUENTACCOUNTID
from dbo.DIRECTDEBITPAYMENTMETHODDETAIL where ID = @REVENUEID;
if @PAYMENTMETHODCODE = 4 or @PAYMENTMETHODCODE = 7 --Stock or Sold Stock
select
@ISSUER = ISSUER,
@NUMBEROFUNITS = NUMBEROFUNITS,
@SYMBOL = SYMBOL,
@MEDIANPRICE = MEDIANPRICE
from dbo.STOCKDETAIL where ID = @REVENUEID;
if @PAYMENTMETHODCODE = 5 --Property
select
@PROPERTYSUBTYPECODEID = PROPERTYSUBTYPECODEID
from dbo.PROPERTYDETAIL WHERE ID = @REVENUEID;
if @PAYMENTMETHODCODE = 6 --Gift in Kind
select
@GIFTINKINDSUBTYPECODEID = GIFTINKINDSUBTYPECODEID
from dbo.GIFTINKINDPAYMENTMETHODDETAIL where ID = @REVENUEID;
if @PAYMENTMETHODCODE = 10 --Other
select
@REFERENCENUMBER = REFERENCENUMBER,
@REFERENCEDATE = REFERENCEDATE,
@OTHERPAYMENTMETHODCODEID = OTHERPAYMENTMETHODCODEID
from dbo.OTHERPAYMENTMETHODDETAIL where ID = @REVENUEID;
if @CONSTITUENTID is null
raiserror('Unable to locate associated transaction.', 13, 1);
set @REVENUEID = null;
set @ID = @TRANSACTIONID;
exec dbo.USP_PAYMENT_ADD @REVENUEID output, @CHANGEAGENTID, @CURRENTDATE, @CONSTITUENTID, @ID,
@DATE, @AMOUNT, @PAYMENTMETHODCODE, @CHECKDATE, @CHECKNUMBER,
@REFERENCEDATE, @REFERENCENUMBER, @CARDHOLDERNAME, @CREDITCARDNUMBER,
@CREDITTYPECODEID, @AUTHORIZATIONCODE, @EXPIRESON, @ISSUER,
@NUMBEROFUNITS, @SYMBOL, @MEDIANPRICE, @GIFTINKINDSUBTYPECODEID,
@PROPERTYSUBTYPECODEID, @RECEIPTAMOUNT, @CONSTITUENTACCOUNTID, @SPLITS,
@REVENUESTREAMS, @POSTSTATUSCODE, @POSTDATE, @FINDERNUMBER,
@SOURCECODE, @APPEALID, @BENEFITS, @BENEFITSWAIVED, @GIVENANONYMOUSLY,
@MAILINGID, @CHANNELCODEID, @DONOTACKNOWLEDGE,@DONOTRECEIPT,@UNAPPLIEDMATCHINGGIFTSPLITS,'', @OTHERPAYMENTMETHODCODEID, @CURRENTAPPUSERID
--Flag all new revenue items as posted
insert into dbo.REVENUEPOSTED(ID,ADDEDBYID,CHANGEDBYID)
select REVENUE.ID, @CHANGEAGENTID, @CHANGEAGENTID
from REVENUE
where TRANSACTIONID = @TRANSACTIONID and not exists(select top 1 PST.ID from dbo.REVENUEPOSTED PST where PST.ID = REVENUE.ID);
declare @NEWREVENUEID uniqueidentifier;
set @NEWREVENUEID = @REVENUEID;
-- update the payment information for each revenue record in the transaction
open REVENUECURSOR;
fetch next from REVENUECURSOR into @REVENUEID;
while @@FETCH_STATUS = 0
begin
declare @ISNEWREVENUE bit;
if @NEWREVENUEID = @REVENUEID
set @ISNEWREVENUE = 1;
else
set @ISNEWREVENUE = 0;
set @ADJUSTMENTID = null;
exec dbo.USP_SAVE_ADJUSTMENT @REVENUEID, @ADJUSTMENTID output, @CHANGEAGENTID, @CURRENTDATE, @ADJUSTMENTDATE, @ADJUSTMENTPOSTDATE, @ADJUSTMENTREASON, @ISNEWREVENUE;
select @STOCKDETAILCOUNT = count(STOCKDETAIL.ID)
from dbo.STOCKSALE
inner join dbo.STOCKDETAIL on STOCKSALE.STOCKDETAILID = STOCKDETAIL.ID
inner join dbo.REVENUEPAYMENTMETHOD on STOCKDETAIL.ID = REVENUEPAYMENTMETHOD.ID
where REVENUEPAYMENTMETHOD.REVENUEID = @REVENUEID and SALEPOSTSTATUSCODE = 0;
select @PROPERTYDETAILCOUNT = count(PROPERTYDETAIL.ID)
from dbo.PROPERTYDETAIL
inner join dbo.REVENUEPAYMENTMETHOD on PROPERTYDETAIL.ID = REVENUEPAYMENTMETHOD.ID
where REVENUEPAYMENTMETHOD.REVENUEID = @REVENUEID and SALEPOSTSTATUSCODE = 0;
/* If sold stock has been posted, log stock detail adjustment */
if (@PAYMENTMETHODCODE = 4) and (@STOCKDETAILCOUNT > 0) -- If stock detail records exist, some shares must have sold
begin
exec dbo.USP_SAVE_STOCKDETAILADJUSTMENT @REVENUEID, @STOCKDETAILADJUSTMENTID output, @CHANGEAGENTID, @CURRENTDATE, @ADJUSTMENTDATE, @ADJUSTMENTPOSTDATE, @ADJUSTMENTREASON;
end
/* If sold property has been posted, log property detail adjustment */
else if (@PAYMENTMETHODCODE = 5) and (@PROPERTYDETAILCOUNT > 0) -- If a posted property detail record exists, the property must have sold
begin
exec dbo.USP_SAVE_PROPERTYDETAILADJUSTMENT @REVENUEID, @PROPERTYDETAILADJUSTMENTID output, @CHANGEAGENTID, @CURRENTDATE, @ADJUSTMENTDATE, @ADJUSTMENTPOSTDATE, @ADJUSTMENTREASON;
end
insert into @ADJUSTED(REVENUEID, ADJUSTMENTID, STOCKDETAILADJUSTMENTID, PROPERTYDETAILADJUSTMENTID)
values(@REVENUEID, @ADJUSTMENTID, @STOCKDETAILADJUSTMENTID, @PROPERTYDETAILADJUSTMENTID);
fetch next from REVENUECURSOR into @REVENUEID;
end
deallocate REVENUECURSOR;
--log changes to history table
open HISTORYCURSOR;
fetch next from HISTORYCURSOR into @REVENUEID, @ADJUSTMENTID, @STOCKDETAILADJUSTMENTID, @PROPERTYDETAILADJUSTMENTID;
while @@FETCH_STATUS = 0
begin
/*call USP_ADJUSTMENTHISTORY_*_SAVEHISTORY after the revenue tables are updated */
if exists(select top 1 ID from dbo.REVENUE where ID = @REVENUEID)
begin
if @ADJUSTMENTID is not null
exec dbo.USP_ADJUSTMENTHISTORY_REVENUE_SAVEHISTORY @REVENUEID, @CHANGEAGENTID, null, @ADJUSTMENTID;
if @STOCKDETAILADJUSTMENTID is not null
exec dbo.USP_ADJUSTMENTHISTORY_STOCK_SAVEHISTORY @REVENUEID, @CHANGEAGENTID, null, @STOCKDETAILADJUSTMENTID;
if @PROPERTYDETAILADJUSTMENTID is not null
exec dbo.USP_ADJUSTMENTHISTORY_PROPERTY_SAVEHISTORY @REVENUEID, @CHANGEAGENTID, null, @PROPERTYDETAILADJUSTMENTID;
end
fetch next from HISTORYCURSOR into @REVENUEID, @ADJUSTMENTID, @STOCKDETAILADJUSTMENTID, @PROPERTYDETAILADJUSTMENTID;
end
--When a cursor is used, it should be explicitly closed/deallocated in case of blocking or USP running long
close HISTORYCURSOR;
deallocate HISTORYCURSOR;
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
*/
return 0;