USP_DATAFORMTEMPLATE_ADJUST_REVENUEBENEFITS_3
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@BENEFITS | xml | IN | |
@BENEFITSWAIVED | bit | IN | |
@ADJUSTMENTDATE | datetime | IN | |
@ADJUSTMENTPOSTDATE | datetime | IN | |
@ADJUSTMENTREASON | nvarchar(300) | IN | |
@ADJUSTMENTREASONCODEID | uniqueidentifier | IN | |
@PERCENTAGEBENEFITS | xml | IN | |
@ADJUSTMENTPOSTSTATUSCODE | tinyint | IN | |
@UPDATEGIFTFEEOPTION | bit | IN |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADJUST_REVENUEBENEFITS_3
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@BENEFITS xml,
@BENEFITSWAIVED bit,
@ADJUSTMENTDATE datetime,
@ADJUSTMENTPOSTDATE datetime,
@ADJUSTMENTREASON nvarchar(300),
@ADJUSTMENTREASONCODEID uniqueidentifier,
@PERCENTAGEBENEFITS xml,
@ADJUSTMENTPOSTSTATUSCODE tinyint,
@UPDATEGIFTFEEOPTION bit
)
as
begin
set nocount on;
begin try
declare @CHANGEDATE datetime;
set @CHANGEDATE = getdate();
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
declare @POSTSTATUSCODE tinyint;
select @POSTSTATUSCODE = POSTSTATUSCODE from dbo.ADJUSTMENT where REVENUEID = @ID and POSTSTATUSCODE <> 0;
declare @ORIGINALTOTALBENEFITVALUE money = 0
select
@ORIGINALTOTALBENEFITVALUE = coalesce(sum(TRANSACTIONTOTALVALUE), 0)
from dbo.REVENUEBENEFIT
where REVENUEID = @ID;
declare @REVENUETRANSACTIONCURRENCYID uniqueidentifier, @REVENUEBASECURRENCYID uniqueidentifier;
declare @CONSTITUENTID uniqueidentifier;
select
@REVENUETRANSACTIONCURRENCYID = TRANSACTIONCURRENCYID,
@REVENUEBASECURRENCYID = BASECURRENCYID,
@CONSTITUENTID = CONSTITUENTID
from dbo.REVENUE where ID = @ID;
if @POSTSTATUSCODE is null
begin
select @POSTSTATUSCODE = case when REVENUE.DONOTPOST = 1 then 2 when REVENUEPOSTED.ID is not null then 0 else 1 end
from dbo.REVENUE
left join dbo.REVENUEPOSTED on REVENUEPOSTED.ID = REVENUE.ID
where REVENUE.ID = @ID
end
declare @ADJUSTBENEFITS bit;
declare @CLEARBENEFITSGLDISTRIBUTION bit;
declare @BENEFITSADJUSTMENTID uniqueidentifier;
set @ADJUSTBENEFITS = 0;
set @CLEARBENEFITSGLDISTRIBUTION = 0;
declare @TOTALBENEFITSXML xml;
set @TOTALBENEFITSXML = dbo.UFN_REVENUEDETAIL_JOINBENEFITS(@BENEFITS, @PERCENTAGEBENEFITS);
--Update the organization total value, transaction total value, and exchange rates in the @TOTALBENEFITS XML.
set @TOTALBENEFITSXML = dbo.UFN_REVENUEBENEFIT_CONVERTAMOUNTSINXML_2(@TOTALBENEFITSXML,@REVENUETRANSACTIONCURRENCYID,@REVENUEBASECURRENCYID);
--Remove benefits if they are waived
if @BENEFITSWAIVED = 1
set @TOTALBENEFITSXML = null;
if dbo.UFN_CHECKDETAIL_BENEFITSCHANGEDFORGL(@ID, @TOTALBENEFITSXML) = 1
begin
set @ADJUSTBENEFITS = 1;
set @CLEARBENEFITSGLDISTRIBUTION = 1;
end
if @ADJUSTBENEFITS = 0
if (select COUNT(ID) from dbo.BENEFITADJUSTMENT where REVENUEID = @ID and POSTSTATUSCODE = 1) > 0
begin
set @ADJUSTBENEFITS = 1;
end
--we need to save the adjustment before we save the benefits so that the previous value will be correct
--in the adjustment
if @ADJUSTBENEFITS = 1
begin
if @ADJUSTMENTREASONCODEID is null
raiserror('BBERR_ADJUSTMENTREASONCODEIDREQUIRED', 13, 1)
set @BENEFITSADJUSTMENTID = null;
exec dbo.USP_SAVE_BENEFITADJUSTMENT_2 @ID, @BENEFITSADJUSTMENTID output, @CHANGEAGENTID, @CHANGEDATE, @ADJUSTMENTDATE,
@ADJUSTMENTPOSTDATE, @ADJUSTMENTREASON, default, @ADJUSTMENTREASONCODEID, @ADJUSTMENTPOSTSTATUSCODE, @TOTALBENEFITSXML;
end
if @BENEFITSWAIVED = 0 -- Grid is not empty(not waived)
begin
insert into dbo.BENEFITCONSTITUENTDECLINED
(
BENEFITID,
CONSTITUENTID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
REVENUEBENEFIT.BENEFITID,
@CONSTITUENTID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE
from dbo.REVENUEBENEFIT
where
REVENUEBENEFIT.REVENUEID = @ID and
-- Benefit has been deleted
REVENUEBENEFIT.BENEFITID not in
(
select
T.benefits.value('(BENEFITID)[1]','uniqueidentifier')
from @BENEFITS.nodes('/BENEFITS/ITEM') T(benefits)
)
and
-- Record does not already exist
REVENUEBENEFIT.BENEFITID not in
(
select BCD.BENEFITID
from dbo.BENEFITCONSTITUENTDECLINED BCD
where BCD.CONSTITUENTID = @CONSTITUENTID
)
and
exists
-- One of the revenue splits is a membership, that contains this benefit
(
select 1 from dbo.REVENUEBENEFIT RBSUB
inner join dbo.REVENUE on REVENUE.ID = RBSUB.REVENUEID
inner join dbo.REVENUESPLIT on REVENUESPLIT.REVENUEID = REVENUE.ID
inner join dbo.MEMBERSHIPTRANSACTION on MEMBERSHIPTRANSACTION.REVENUESPLITID = REVENUESPLIT.ID
inner join dbo.MEMBERSHIPLEVEL on MEMBERSHIPTRANSACTION.MEMBERSHIPLEVELID=MEMBERSHIPLEVEL.ID
inner join dbo.MEMBERSHIPLEVELBENEFIT on MEMBERSHIPLEVELBENEFIT.MEMBERSHIPLEVELID = MEMBERSHIPLEVEL.ID
where
RBSUB.BENEFITID = REVENUEBENEFIT.BENEFITID and
RBSUB.REVENUEID = @ID and
MEMBERSHIPLEVELBENEFIT.BENEFITID = REVENUEBENEFIT.BENEFITID
)
-- If benefit is added constituent is no longer declining it
delete from dbo.BENEFITCONSTITUENTDECLINED
where
CONSTITUENTID = @CONSTITUENTID
and BENEFITID in
(
select T.c.value('(BENEFITID)[1]','uniqueidentifier')
from @BENEFITS.nodes('/BENEFITS/ITEM') T(c)
)
and BENEFITID not in
(
select BENEFITID
from dbo.REVENUEBENEFIT RBSUB
where RBSUB.REVENUEID = @ID
)
end
declare @TOTALBENEFITS money;
declare @ORIGINALRECEIPTAMOUNT money;
declare @RECEIPTAMOUNT money;
declare @ISPLEDGEPAYMENT bit;
select @TOTALBENEFITS = sum(TOTALVALUE) from dbo.REVENUEBENEFIT where REVENUEID = @ID;
if @BENEFITSWAIVED = 1
set @TOTALBENEFITS = 0;
-- Calculate the needed adjustment for event applications to receipt amount.
declare @EVENTAPPLICATIONADJUSTMENTS table
(
EVENTAPPLICAITONAMOUNT money,
EVENTAPPLICAITONRECEIPTAMOUNT money
)
insert into @EVENTAPPLICATIONADJUSTMENTS (
EVENTAPPLICAITONAMOUNT,
EVENTAPPLICAITONRECEIPTAMOUNT
)
select
REVENUESPLIT.AMOUNT,
dbo.UFN_EVENTREGISTRANT_GETRECEIPTAMOUNT_NOBENEFITS(
REGISTRANT.ID,
REVENUE.DATE,
REVENUESPLIT.AMOUNT,
REVENUE.TRANSACTIONCURRENCYID,
REVENUE.BASECURRENCYID,
REVENUE.BASEEXCHANGERATEID,
0,
0,
REVENUE.ID
)
from dbo.REVENUE
inner join dbo.REVENUESPLIT on REVENUESPLIT.REVENUEID = REVENUE.ID
inner join dbo.EVENTREGISTRANTPAYMENT on EVENTREGISTRANTPAYMENT.PAYMENTID = REVENUESPLIT.ID
inner join dbo.REGISTRANT on REGISTRANT.ID = EVENTREGISTRANTPAYMENT.REGISTRANTID
inner join dbo.REGISTRANTREGISTRATION on REGISTRANTREGISTRATION.REGISTRANTID = REGISTRANT.ID
where
REVENUESPLIT.TYPECODE = 1 and
REVENUESPLIT.APPLICATIONCODE = 1 and
REVENUE.ID = @ID and
-- Don't include registrations whose fees were waived
REGISTRANTREGISTRATION.AMOUNT > 0 and
(
select sum(AMOUNT)
from dbo.REGISTRANTREGISTRATION
where REGISTRANTREGISTRATION.REGISTRANTID = EVENTREGISTRANTPAYMENT.REGISTRANTID
) > 0;
declare @EVENTAPPLICATIONADJUSTMENT money
select
@EVENTAPPLICATIONADJUSTMENT =
sum(EVENTAPPLICAITONAMOUNT) - sum(EVENTAPPLICAITONRECEIPTAMOUNT)
from @EVENTAPPLICATIONADJUSTMENTS
if exists
(
select top 1 FINANCIALTRANSACTION.ID
from dbo.FINANCIALTRANSACTION
inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTION.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
inner join dbo.INSTALLMENTPAYMENT on FINANCIALTRANSACTIONLINEITEM.ID = INSTALLMENTPAYMENT.PAYMENTID
where FINANCIALTRANSACTION.ID = @ID
)
begin
set @ISPLEDGEPAYMENT = 1
end
else
begin
set @ISPLEDGEPAYMENT = 0
end
select @ORIGINALRECEIPTAMOUNT = RECEIPTAMOUNT,
@RECEIPTAMOUNT = case @ISPLEDGEPAYMENT
when 0 then TRANSACTIONAMOUNT - coalesce(@EVENTAPPLICATIONADJUSTMENT, 0) - coalesce(@TOTALBENEFITS, 0)
when 1 then REVENUE.RECEIPTAMOUNT - coalesce(@EVENTAPPLICATIONADJUSTMENT, 0) - (coalesce(@TOTALBENEFITS, 0) - @ORIGINALTOTALBENEFITVALUE)
end
from dbo.REVENUE
where ID = @ID;
if @RECEIPTAMOUNT < 0 set @RECEIPTAMOUNT = 0;
if @RECEIPTAMOUNT <> @ORIGINALRECEIPTAMOUNT
exec dbo.USP_REVENUE_UPDATERERECEIPTS @ID, @CHANGEAGENTID, @CHANGEDATE;
update dbo.REVENUE
set
BENEFITSWAIVED = @BENEFITSWAIVED,
RECEIPTAMOUNT = case when TRANSACTIONTYPECODE in (0,7) then @RECEIPTAMOUNT else @ORIGINALRECEIPTAMOUNT end,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE
where ID = @ID;
declare @REMAININGPLEDGEBALANCE money = dbo.UFN_PLEDGE_GETBALANCE(@ID) - @TOTALBENEFITS
declare @INSTALLMENTID uniqueidentifier
declare @INSTALLMENTAMOUNT money
declare cur cursor fast_forward
for
select INSTALLMENT.ID
from dbo.INSTALLMENT
inner join dbo.INSTALLMENTSPLIT on INSTALLMENTSPLIT.INSTALLMENTID = INSTALLMENT.ID
left join dbo.INSTALLMENTSPLITPAYMENT on INSTALLMENTSPLITPAYMENT.INSTALLMENTSPLITID = INSTALLMENTSPLIT.ID
where REVENUEID = @ID and INSTALLMENTSPLITPAYMENT.ID is null
order by SEQUENCE desc
open cur
fetch next from cur into @INSTALLMENTID
while @@FETCH_STATUS = 0
begin
select @INSTALLMENTAMOUNT = AMOUNT
from dbo.INSTALLMENT
where ID = @INSTALLMENTID
if @REMAININGPLEDGEBALANCE < @INSTALLMENTAMOUNT
begin
update dbo.INSTALLMENT
set RECEIPTAMOUNT = @REMAININGPLEDGEBALANCE
where ID = @INSTALLMENTID
end
set @REMAININGPLEDGEBALANCE = @REMAININGPLEDGEBALANCE - @INSTALLMENTAMOUNT
if @REMAININGPLEDGEBALANCE < 0
set @REMAININGPLEDGEBALANCE = 0
fetch next from cur into @INSTALLMENTID
end
close cur
deallocate cur
-- Redefault pledge receipt amounts
exec dbo.USP_INSTALLMENTS_DEFAULTRECEIPTAMOUNTS @ID, @CHANGEAGENTID
if @UPDATEGIFTFEEOPTION = 1 and exists (select 1 from dbo.GIFTFEEOVERRIDEREASONCODE where ISPAYMENTEDITDEFAULT=1 and ACTIVE=1)
begin
exec dbo.USP_REVENUE_UPDATEPAYMENTGIFTFEE @ID, @CONSTITUENTID, @CHANGEAGENTID
if @ADJUSTMENTPOSTSTATUSCODE <> 2
exec dbo.USP_SAVE_GIFTFEEADJUSTMENT
@ID,
null,
@CHANGEAGENTID,
@CHANGEDATE,
@ADJUSTMENTDATE,
@ADJUSTMENTPOSTDATE,
@ADJUSTMENTREASON,
default,
@ADJUSTMENTREASONCODEID,
@ADJUSTMENTPOSTSTATUSCODE;
delete JOURNALENTRY
from dbo.JOURNALENTRY
inner join dbo.JOURNALENTRY_EXT on JOURNALENTRY.ID = JOURNALENTRY_EXT.ID
inner join dbo.FINANCIALTRANSACTIONLINEITEM on JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID
where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID
and JOURNALENTRY_EXT.OUTDATED = 0
and JOURNALENTRY_EXT.TABLENAMECODE = 8
and FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE != 2
and FINANCIALTRANSACTIONLINEITEM.TYPECODE != 1
if @POSTSTATUSCODE <> 2
begin
exec dbo.USP_SAVE_GIFTFEEGLDISTRIBUTION @ID, @CHANGEAGENTID, @CHANGEDATE;
end
end
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;
end