USP_DATAFORMTEMPLATE_EDIT_GIFTFEEGLDISTRIBUTIONADJUST
The save procedure used by the edit dataform template "Posted Gift Fee GL Distribution Edit Form".
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | The input ID parameter indicating the ID of the record being edited. |
@GLDISTRIBUTION | xml | IN | Gift fee GL distribution |
@ADJUSTMENTDATE | datetime | IN | Adjusted date |
@ADJUSTMENTPOSTDATE | datetime | IN | Adjusted post date |
@ADJUSTMENTREASON | nvarchar(300) | IN | Adjustment details |
@CHANGEAGENTID | uniqueidentifier | IN | Input parameter indicating the ID of the change agent invoking the procedure. |
@ADJUSTMENTREASONCODEID | uniqueidentifier | IN | Adjustment reason |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_GIFTFEEGLDISTRIBUTIONADJUST
(
@ID uniqueidentifier,
@GLDISTRIBUTION xml,
@ADJUSTMENTDATE datetime,
@ADJUSTMENTPOSTDATE datetime,
@ADJUSTMENTREASON nvarchar(300),
@CHANGEAGENTID uniqueidentifier = null,
@ADJUSTMENTREASONCODEID uniqueidentifier
)
as
begin try
set nocount on;
declare @ADJUSTMENTID uniqueidentifier;
declare @ADJUST bit;
declare @ADJUSTMENTEXISTS bit;
set @ADJUST = 0
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
if (dbo.UFN_GLDISTRIBUTION_DEBITSEQUALCREDITS(@GLDISTRIBUTION) = 0)
raiserror('BBERR_SUMOFCREDITSMUSTEQUALSUMOFDEBITS', 13, 1);
if (dbo.UFN_GLDISTRIBUTION_ACCOUNTEXISTS_2(@GLDISTRIBUTION, @ID) = 0)
raiserror('BBERR_ACCOUNTDOESNOTEXIST', 13, 1);
declare @CHANGEDATE datetime;
set @CHANGEDATE = getdate();
/* Already adjusted */
if ( select count(GIFTFEEADJUSTMENT.ID)
from dbo.GIFTFEEADJUSTMENT
where
GIFTFEEADJUSTMENT.REVENUEID = @ID and
GIFTFEEADJUSTMENT.POSTSTATUSCODE = 1) > 0
begin
set @ADJUST = 1;
set @ADJUSTMENTEXISTS = 1;
end
/* distributions Changed */
if @ADJUST = 0
set @ADJUST = dbo.UFN_CHECKDETAIL_GIFTFEEDISTRIBUTIONCHANGED(@ID, @GLDISTRIBUTION)
-- GLPAYMENTMETHODREVENUETYPEMAPPINGID and REFERENCE don't trigger an adjustment so if they changed,
-- but the fields that trigger an adjustment didn't, throw an error. We already know the row counts
-- match because of UFN_CHECKDETAIL_GIFTFEEDISTRIBUTIONCHANGED so we just need to see if the number
-- of rows that match equals the total number of rows.
if @ADJUST = 0
begin
declare @MATCHROWCOUNT integer;
select @MATCHROWCOUNT = count(NEWDISTRIBUTION.ID)
from dbo.UFN_REVENUE_GETGIFTFEEGLDISTRIBUTION_FROMITEMLISTXML(@GLDISTRIBUTION) as NEWDISTRIBUTION
inner join dbo.GIFTFEEGLDISTRIBUTION OLDDISTRIBUTION on
(
NEWDISTRIBUTION.GLPAYMENTMETHODREVENUETYPEMAPPINGID = OLDDISTRIBUTION.GLPAYMENTMETHODREVENUETYPEMAPPINGID or
(
NEWDISTRIBUTION.GLPAYMENTMETHODREVENUETYPEMAPPINGID is null and OLDDISTRIBUTION.GLPAYMENTMETHODREVENUETYPEMAPPINGID is null
)
) and
coalesce(NEWDISTRIBUTION.REFERENCE, '') = coalesce(OLDDISTRIBUTION.REFERENCE, '')
where REVENUEID = @ID and OUTDATED = 0
if @MATCHROWCOUNT <> (select count(*) from dbo.UFN_REVENUE_GETGIFTFEEGLDISTRIBUTION_FROMITEMLISTXML(@GLDISTRIBUTION))
raiserror('BBERR_ONLYREFERENCEORTYPEMAPPINGCHANGED', 13, 1);
end
if @ADJUST = 1
begin
if @ADJUSTMENTREASONCODEID is null
raiserror('BBERR_ADJUSTMENTREASONCODEIDREQUIRED', 13, 1);
-- update the payment information for each revenue record in the transaction
set @ADJUSTMENTID = null;
exec dbo.USP_SAVE_GIFTFEEADJUSTMENT @ID, @ADJUSTMENTID output, @CHANGEAGENTID, @CHANGEDATE, @ADJUSTMENTDATE,
@ADJUSTMENTPOSTDATE, @ADJUSTMENTREASON, default, @ADJUSTMENTREASONCODEID;
declare @TRANSACTIONCURRENCYID uniqueidentifier;
declare @BASECURRENCYID uniqueidentifier;
declare @BASEEXCHANGERATEID uniqueidentifier;
declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;
declare @CONSTITUENTID uniqueidentifier;
select
@TRANSACTIONCURRENCYID = REVENUE.TRANSACTIONCURRENCYID,
@BASECURRENCYID = REVENUE.BASECURRENCYID,
@BASEEXCHANGERATEID = REVENUE.BASEEXCHANGERATEID,
@ORGANIZATIONEXCHANGERATEID = REVENUE.ORGANIZATIONEXCHANGERATEID,
@CONSTITUENTID = REVENUE.CONSTITUENTID
from
dbo.REVENUE
where
REVENUE.ID = @ID;
--Set the currency values in the GLDISTRIBUTION collection.
select @GLDISTRIBUTION = dbo.UFN_GLDISTRIBUTION_CONVERTAMOUNTSINXML
(
@GLDISTRIBUTION,
@BASECURRENCYID,
@ORGANIZATIONEXCHANGERATEID,
@TRANSACTIONCURRENCYID,
@BASEEXCHANGERATEID,
@ORGANIZATIONEXCHANGERATEID,
@BASEEXCHANGERATEID
)
-- If an unposted adjustment already exists, update the revenue GL distribution rows.
-- Otherwise, insert new revenue gl distribution rows using @GLDISTRIBUTION.
if @ADJUSTMENTEXISTS = 1
begin
exec dbo.USP_REVENUE_GETGIFTFEEPOSTEDGLDISTRIBUTION_CUSTOMUPDATEFROMXML_2 @ID, @GLDISTRIBUTION, @ADJUSTMENTPOSTDATE, @CHANGEAGENTID, @CHANGEDATE;
end
else
begin
declare @JOURNAL nvarchar(50);
declare @PDACCOUNTSYSTEMID uniqueidentifier;
set @JOURNAL = 'Blackbaud Enterprise';
select @PDACCOUNTSYSTEMID = FT.PDACCOUNTSYSTEMID
from dbo.FINANCIALTRANSACTION FT
where FT.ID = @ID;
set @CHANGEDATE = getdate();
declare @DISTRIBUTIONS table(
GLTRANSACTIONID uniqueidentifier,
ACCOUNT nvarchar(100),
AMOUNT money,
REFERENCE nvarchar(255),
TRANSACTIONTYPECODE tinyint,
GLPAYMENTMETHODREVENUETYPEMAPPINGID uniqueidentifier,
TRANSACTIONAMOUNT money,
TRANSACTIONCURRENCYID uniqueidentifier,
BASEEXCHANGERATEID uniqueidentifier,
ORGANIZATIONAMOUNT money,
ORGANIZATIONEXCHANGERATEID uniqueidentifier,
GLACCOUNTID uniqueidentifier,
FINANCIALTRANSACTIONLINEITEMID uniqueidentifier
);
-- Get the user-defined GL distributions for the revenue record.
insert into @DISTRIBUTIONS(
GLTRANSACTIONID
,ACCOUNT
,AMOUNT
,REFERENCE
,TRANSACTIONTYPECODE
,GLPAYMENTMETHODREVENUETYPEMAPPINGID
,TRANSACTIONAMOUNT
,TRANSACTIONCURRENCYID
,BASEEXCHANGERATEID
,ORGANIZATIONAMOUNT
,ORGANIZATIONEXCHANGERATEID
,GLACCOUNTID
,FINANCIALTRANSACTIONLINEITEMID)
select
newid(),
REVDISTRIBUTIONS.ACCOUNT,
REVDISTRIBUTIONS.AMOUNT,
REVDISTRIBUTIONS.REFERENCE,
REVDISTRIBUTIONS.TRANSACTIONTYPECODE,
REVDISTRIBUTIONS.GLPAYMENTMETHODREVENUETYPEMAPPINGID,
REVDISTRIBUTIONS.TRANSACTIONAMOUNT,
REVDISTRIBUTIONS.TRANSACTIONCURRENCYID,
REVDISTRIBUTIONS.BASEEXCHANGERATEID,
REVDISTRIBUTIONS.ORGANIZATIONAMOUNT,
REVDISTRIBUTIONS.ORGANIZATIONEXCHANGERATEID,
A.ID,
isnull(LI.REVERSEDLINEITEMID, LI.ID)
from dbo.UFN_REVENUE_GETGIFTFEEGLDISTRIBUTION_FROMITEMLISTXML(@GLDISTRIBUTION) REVDISTRIBUTIONS
inner join dbo.GLACCOUNT A on A.ACCOUNTNUMBER = REVDISTRIBUTIONS.ACCOUNT and A.PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID
left join dbo.JOURNALENTRY_EXT JEX on JEX.DISTRIBUTIONTABLEID = REVDISTRIBUTIONS.ID
left join dbo.JOURNALENTRY JE on JE.ID = JEX.ID
left join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.ID = JE.FINANCIALTRANSACTIONLINEITEMID
where
LI.DELETEDON is not null
if exists(select 1 from @DISTRIBUTIONS where FINANCIALTRANSACTIONLINEITEMID is null)
begin
declare @LIID uniqueidentifier = NEWID();
insert into dbo.FINANCIALTRANSACTIONLINEITEM (
ID
,FINANCIALTRANSACTIONID
,TRANSACTIONAMOUNT
,VISIBLE
,DESCRIPTION
,SEQUENCE
,TYPECODE
,POSTDATE
,POSTSTATUSCODE
,BASEAMOUNT
,ORGAMOUNT
,FINANCIALTRANSACTIONLINEITEMADJUSTMENTID
,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
)
values (
@LIID
,@ID
,0
,0
,'Unattached gif fee distributions'
,0
,7
,@ADJUSTMENTPOSTDATE
,1
,0
,0
,@ADJUSTMENTID
,@CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE
)
update @DISTRIBUTIONS set
FINANCIALTRANSACTIONLINEITEMID = @LIID
where FINANCIALTRANSACTIONLINEITEMID is null;
end
insert into dbo.JOURNALENTRY (
ID
,FINANCIALTRANSACTIONLINEITEMID
,TRANSACTIONTYPECODE
,SUBLEDGERTYPECODE
,TRANSACTIONAMOUNT
,BASEAMOUNT
,ORGAMOUNT
,COMMENT
,POSTDATE
,GLACCOUNTID
,TYPECODE
,TRANSACTIONCURRENCYID
,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
select
D.GLTRANSACTIONID
,D.FINANCIALTRANSACTIONLINEITEMID
,D.TRANSACTIONTYPECODE
,D.TRANSACTIONTYPECODE
,D.TRANSACTIONAMOUNT
,D.AMOUNT
,D.ORGANIZATIONAMOUNT
,D.REFERENCE
,@ADJUSTMENTPOSTDATE
,D.GLACCOUNTID
,0
,D.TRANSACTIONCURRENCYID
,@CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE
from @DISTRIBUTIONS D;
insert into dbo.JOURNALENTRY_EXT (
ID
,DISTRIBUTIONTABLEID
,TABLENAMECODE
,LOGICALREVENUEID
,GLPAYMENTMETHODREVENUETYPEMAPPINGID
,JOURNAL
,ACCOUNT
,PRECALCORGANIZATIONEXCHANGERATEID
,PRECALCBASEEXCHANGERATEID
,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
select
D.GLTRANSACTIONID
,D.GLTRANSACTIONID
,8 -- GIFTFEEGLDISTRIBUTION
,@ID
,D.GLPAYMENTMETHODREVENUETYPEMAPPINGID
,@JOURNAL
,D.ACCOUNT
,D.ORGANIZATIONEXCHANGERATEID
,D.BASEEXCHANGERATEID
,@CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE
from @DISTRIBUTIONS D;
end
if not (@ADJUSTMENTID is null)
begin
if not exists(select 1 from dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT where ID = @ADJUSTMENTID)
insert into dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT (
ID
,ADJUSTMENTREASONCODEID
,REASON
,DATE
,CONSTITUENTID
,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values(
@ADJUSTMENTID
,@ADJUSTMENTREASONCODEID
,@ADJUSTMENTREASON
,@ADJUSTMENTDATE
,@CONSTITUENTID
,@CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);
update LI set
FINANCIALTRANSACTIONLINEITEMADJUSTMENTID = @ADJUSTMENTID
,CHANGEDBYID = @CHANGEAGENTID
,DATECHANGED = @CHANGEDAtE
from dbo.FINANCIALTRANSACTIONLINEITEM LI
where LI.FINANCIALTRANSACTIONID = @ID and LI.TYPECODE = 7 and LI.DELETEDON is null and LI.POSTSTATUSCODE = 1;
end
end
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;