USP_DATAFORMTEMPLATE_ADJUST_GIFTINKINDSALEGLDISTRIBUTION
The save procedure used by the edit dataform template "Gift-in-Kind Sale GL Distribution Adjust 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 | Sold gift-in-kind GL distribution |
@ADJUSTMENTDATE | datetime | IN | Adjustment date |
@ADJUSTMENTPOSTDATE | datetime | IN | Adjustment 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_ADJUST_GIFTINKINDSALEGLDISTRIBUTION
(
@ID uniqueidentifier,
@GLDISTRIBUTION xml,
@ADJUSTMENTDATE datetime,
@ADJUSTMENTPOSTDATE datetime,
@ADJUSTMENTREASON nvarchar(300),
@CHANGEAGENTID uniqueidentifier = null,
@ADJUSTMENTREASONCODEID uniqueidentifier
)
as
set nocount on;
declare @ADJUST bit;
declare @ADJUSTMENTEXISTS bit;
declare @GIFTINKINDSALEADJUSTMENTID uniqueidentifier;
set @ADJUST = 0;
set @ADJUSTMENTEXISTS = 0;
declare @CHANGEDATE datetime;
set @CHANGEDATE = getdate();
begin try
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
if (dbo.UFN_GLDISTRIBUTION_DEBITSEQUALCREDITS(@GLDISTRIBUTION) = 0)
raiserror('The sum of the debit accounts must equal the sum of the credit accounts.', 13, 1);
declare @REVID uniqueidentifier;
select @REVID = REVENUEPAYMENTMETHOD.REVENUEID from dbo.GIFTINKINDSALE join dbo.REVENUEPAYMENTMETHOD on GIFTINKINDSALE.GIFTINKINDPAYMENTMETHODDETAILID = REVENUEPAYMENTMETHOD.ID where GIFTINKINDSALE.ID = @ID;
if (dbo.UFN_GLDISTRIBUTION_ACCOUNTEXISTS_2(@GLDISTRIBUTION,@REVID) = 0)
raiserror('One or more of the edited accounts do not exist.', 13, 1);
/* Already adjusted */
if exists ( select 1
from dbo.GIFTINKINDSALEADJUSTMENT as ADJUSTMENT
where GIFTINKINDSALEID = @ID and POSTSTATUSCODE = 1)
begin
set @ADJUST = 1;
set @ADJUSTMENTEXISTS = 1;
end
/* Distributions Changed */
if @ADJUST = 0
begin
declare @GIFTINKINDPAYMENTMETHODDETAILID uniqueidentifier;
select @GIFTINKINDPAYMENTMETHODDETAILID = GIFTINKINDPAYMENTMETHODDETAILID
from dbo.GIFTINKINDSALE
where ID = @ID;
set @ADJUST = dbo.UFN_GIFTINKINDPAYMENTMETHODDETAIL_DISTRIBUTIONCHANGED(@GIFTINKINDPAYMENTMETHODDETAILID, @GLDISTRIBUTION);
end
/* If there was a change to GL related data log an adjustment */
if @ADJUST = 1
begin
if @ADJUSTMENTREASONCODEID is null
raiserror('BBERR_ADJUSTMENTREASONCODEIDREQUIRED', 13, 1);
set @GIFTINKINDSALEADJUSTMENTID = null;
exec dbo.USP_SAVE_GIFTINKINDSALEADJUSTMENT @ID, @GIFTINKINDSALEADJUSTMENTID output, @CHANGEAGENTID, @CHANGEDATE,
@ADJUSTMENTDATE, @ADJUSTMENTPOSTDATE, @ADJUSTMENTREASON, @ADJUSTMENTREASONCODEID;
declare @DEFAULTTRANSACTIONCURRENCYID uniqueidentifier;
declare @BASECURRENCYID uniqueidentifier;
declare @BASEEXCHANGERATEID uniqueidentifier;
declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;
select
@DEFAULTTRANSACTIONCURRENCYID = GIFTINKINDSALE.TRANSACTIONCURRENCYID,
@BASECURRENCYID = GIFTINKINDSALE.BASECURRENCYID,
@BASEEXCHANGERATEID = GIFTINKINDSALE.BASEEXCHANGERATEID,
@ORGANIZATIONEXCHANGERATEID = GIFTINKINDSALE.ORGANIZATIONEXCHANGERATEID
from dbo.GIFTINKINDSALE
where GIFTINKINDSALE.ID = @ID;
set @GLDISTRIBUTION = dbo.UFN_GLDISTRIBUTION_CONVERTAMOUNTSINXML(@GLDISTRIBUTION, @BASECURRENCYID, @ORGANIZATIONEXCHANGERATEID, @DEFAULTTRANSACTIONCURRENCYID, @BASEEXCHANGERATEID, @ORGANIZATIONEXCHANGERATEID, @BASEEXCHANGERATEID);
declare @POSTDATE datetime;
select @POSTDATE = SALEPOSTDATE from dbo.GIFTINKINDSALE where ID = @ID;
-- If an unposted adjustment already exists, update the gift-in-kind sale GL distribution rows.
-- Otherwise, insert new gift-in-kind sale gl distribution rows using @GLDISTRIBUTION.
if @ADJUSTMENTEXISTS = 1
begin
exec dbo.USP_REVENUE_GETGIFTINKINDSALEGLDISTRIBUTION_CUSTOMUPDATEFROMXML @ID, @GLDISTRIBUTION, @POSTDATE, @CHANGEAGENTID;
end
else
begin
declare @JOURNAL nvarchar(50);
set @JOURNAL = 'Blackbaud Enterprise';
declare @REVENUEID uniqueidentifier;
select @REVENUEID = REVENUEPAYMENTMETHOD.REVENUEID
from dbo.GIFTINKINDSALE
inner join dbo.REVENUEPAYMENTMETHOD on GIFTINKINDSALE.GIFTINKINDPAYMENTMETHODDETAILID = REVENUEPAYMENTMETHOD.ID
where GIFTINKINDSALE.ID = @ID;
declare @DISTRIBUTIONS table(
GLTRANSACTIONID uniqueidentifier,
ACCOUNT nvarchar(100),
AMOUNT money,
PROJECT nvarchar(100),
REFERENCE nvarchar(255),
TRANSACTIONTYPECODE tinyint,
GLPAYMENTMETHODREVENUETYPEMAPPINGID uniqueidentifier,
ORGANIZATIONAMOUNT money,
BASECURRENCYID uniqueidentifier,
TRANSACTIONAMOUNT money,
TRANSACTIONCURRENCYID uniqueidentifier,
BASEEXCHANGERATEID uniqueidentifier,
ORGANIZATIONEXCHANGERATEID uniqueidentifier,
OLDGLTRANSACTIONID uniqueidentifier,
OLDFTLID uniqueidentifier,
NEWFTLID uniqueidentifier
);
-- Get the user-defined GL distributions for the gift-in-kind detail record.
insert into @DISTRIBUTIONS(GLTRANSACTIONID, ACCOUNT, AMOUNT, PROJECT, REFERENCE, TRANSACTIONTYPECODE, GLPAYMENTMETHODREVENUETYPEMAPPINGID, ORGANIZATIONAMOUNT, BASECURRENCYID, TRANSACTIONAMOUNT, TRANSACTIONCURRENCYID, BASEEXCHANGERATEID, ORGANIZATIONEXCHANGERATEID,OLDGLTRANSACTIONID,OLDFTLID)
select
newid(),
GIFTINKINDDISTRIBUTIONS.ACCOUNT,
GIFTINKINDDISTRIBUTIONS.AMOUNT,
GIFTINKINDDISTRIBUTIONS.PROJECT,
GIFTINKINDDISTRIBUTIONS.REFERENCE,
GIFTINKINDDISTRIBUTIONS.TRANSACTIONTYPECODE,
GIFTINKINDDISTRIBUTIONS.GLPAYMENTMETHODREVENUETYPEMAPPINGID,
GIFTINKINDDISTRIBUTIONS.ORGANIZATIONAMOUNT,
GIFTINKINDDISTRIBUTIONS.BASECURRENCYID,
GIFTINKINDDISTRIBUTIONS.TRANSACTIONAMOUNT,
GIFTINKINDDISTRIBUTIONS.TRANSACTIONCURRENCYID,
GIFTINKINDDISTRIBUTIONS.BASEEXCHANGERATEID,
GIFTINKINDDISTRIBUTIONS.ORGANIZATIONEXCHANGERATEID,
GIFTINKINDDISTRIBUTIONS.ID,
JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID
from
dbo.UFN_REVENUE_GETGIFTINKINDSALEGLDISTRIBUTION_FROMITEMLISTXML(@GLDISTRIBUTION) GIFTINKINDDISTRIBUTIONS
join dbo.JOURNALENTRY on GIFTINKINDDISTRIBUTIONS.ID = JOURNALENTRY.ID;
declare @Split table(FTLIID uniqueidentifier, NEWFTLIID uniqueidentifier, OLDSOURCEID uniqueidentifier)
insert into @Split(FTLIID)
select distinct D.OLDFTLID
from @DISTRIBUTIONS D
update @Split set NEWFTLIID = newid();
update S set S.OLDSOURCEID = L2.SOURCELINEITEMID
from @Split S
join dbo.FINANCIALTRANSACTIONLINEITEM L1 on S.FTLIID = L1.ID
join dbo.FINANCIALTRANSACTIONLINEITEM L2 on L2.ID = L1.REVERSEDLINEITEMID
update D set D.NEWFTLID = S.NEWFTLIID
from @DISTRIBUTIONS D join @Split S on S.FTLIID = D.OLDFTLID
insert into dbo.FINANCIALTRANSACTIONLINEITEM
(ID,FINANCIALTRANSACTIONID,SOURCELINEITEMID,TRANSACTIONAMOUNT,VISIBLE,DESCRIPTION
,SEQUENCE,TYPECODE,POSTDATE,POSTSTATUSCODE,BASEAMOUNT,ORGAMOUNT
,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select S.NEWFTLIID
,FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
,S.OLDSOURCEID
,FINANCIALTRANSACTIONLINEITEM.TRANSACTIONAMOUNT
,FINANCIALTRANSACTIONLINEITEM.VISIBLE
,FINANCIALTRANSACTIONLINEITEM.DESCRIPTION
,FINANCIALTRANSACTIONLINEITEM.SEQUENCE
,FINANCIALTRANSACTIONLINEITEM.TYPECODE
,@ADJUSTMENTPOSTDATE
,1
,FINANCIALTRANSACTIONLINEITEM.BASEAMOUNT
,FINANCIALTRANSACTIONLINEITEM.ORGAMOUNT
,@CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE
from dbo.FINANCIALTRANSACTIONLINEITEM
join @Split S on S.FTLIID = FINANCIALTRANSACTIONLINEITEM.ID
--Change to FTM. First change is just do a single insert into JournalEntry
insert into dbo.JOURNALENTRY (ID, FINANCIALTRANSACTIONLINEITEMID, TRANSACTIONTYPECODE, BASEAMOUNT, COMMENT, POSTDATE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, GLACCOUNTID, ORGAMOUNT, TRANSACTIONAMOUNT, TRANSACTIONCURRENCYID, SUBLEDGERTYPECODE)
select
GLTRANSACTIONID
,NEWFTLID
,TRANSACTIONTYPECODE
,AMOUNT
,REFERENCE
,@ADJUSTMENTPOSTDATE
--,POSTDATE
,@CHANGEAGENTID
,@CHANGEAGENTID
,@CHANGEDATE
,@CHANGEDATE
--,ACCOUNTID
,dbo.UFN_GLACCOUNT_GETIDFROMACCOUNTANDREVENUE(D.ACCOUNT,@REVENUEID)
,ORGANIZATIONAMOUNT
,TRANSACTIONAMOUNT
,TRANSACTIONCURRENCYID
,TRANSACTIONTYPECODE
from @DISTRIBUTIONS D
insert into dbo.JOURNALENTRY_EXT (ID, DISTRIBUTIONTABLEID, TABLENAMECODE, PROJECT, JOURNAL, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, PRECALCPOSTSTATUSCODE, PRECALCORGANIZATIONEXCHANGERATEID, PRECALCBASEEXCHANGERATEID, ACCOUNT, GLPAYMENTMETHODREVENUETYPEMAPPINGID, LOGICALREVENUEID, GIFTINKINDSALEID,PAYMENTMETHODCODE)
select
T1.GLTRANSACTIONID
,T1.GLTRANSACTIONID
,13
,T1.PROJECT
,@JOURNAL
,@CHANGEAGENTID
,@CHANGEAGENTID
,@CHANGEDATE
,@CHANGEDATE
,1
,T1.ORGANIZATIONEXCHANGERATEID
,T1.BASEEXCHANGERATEID
,T1.ACCOUNT
,T1.GLPAYMENTMETHODREVENUETYPEMAPPINGID
,@REVENUEID
,@ID
,isnull(T2.PAYMENTMETHODCODE,1)
from @DISTRIBUTIONS T1
left outer join dbo.GLPAYMENTMETHODREVENUETYPEMAPPING T2 on T1.GLPAYMENTMETHODREVENUETYPEMAPPINGID = T2.ID
update FINANCIALTRANSACTIONLINEITEM set FINANCIALTRANSACTIONLINEITEM.DELETEDON = @CHANGEDATE
,FINANCIALTRANSACTIONLINEITEM.TYPECODE = 99 --orphaned
,FINANCIALTRANSACTIONLINEITEM.CHANGEDBYID = @CHANGEAGENTID, FINANCIALTRANSACTIONLINEITEM.DATECHANGED = @CHANGEDATE
from dbo.FINANCIALTRANSACTION
join FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
left outer join dbo.JOURNALENTRY on FINANCIALTRANSACTIONLINEITEM.ID = JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID
where FINANCIALTRANSACTION.PARENTID = @REVENUEID
and FINANCIALTRANSACTIONLINEITEM.TYPECODE = 0 and JOURNALENTRY.ID is null;
end
exec dbo.USP_ADJUSTMENTHISTORY_GIFTINKINDSALE_SAVEHISTORY @ID, @CHANGEAGENTID, @CHANGEDATE, @GIFTINKINDSALEADJUSTMENTID;
end
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;