USP_PLANNEDGIFTPAYOUT_GETGLDISTRIBUTION_CUSTOMUPDATEFROMXML_2
Stored procedure to update Planned Gift payout GL distribution records from the given xml collection.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@REVENUEID | uniqueidentifier | IN | |
@XML | xml | IN | |
@POSTDATE | datetime | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CHANGEDATE | datetime | IN |
Definition
Copy
CREATE procedure dbo.USP_PLANNEDGIFTPAYOUT_GETGLDISTRIBUTION_CUSTOMUPDATEFROMXML_2
(
@REVENUEID uniqueidentifier,
@XML xml,
@POSTDATE datetime,
@CHANGEAGENTID uniqueidentifier = null,
@CHANGEDATE datetime = null
)
as
set nocount on;
declare @PLANNEDGIFTPAYOUTID uniqueidentifier;
select @PLANNEDGIFTPAYOUTID = ID from PLANNEDGIFTPAYOUT where REVENUEID = @REVENUEID
if @CHANGEAGENTID is null
exec USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
if @CHANGEDATE is null
set @CHANGEDATE = getdate()
-- build a temporary table containing the values from the XML
declare @TempTbl table (
[ACCOUNT] nvarchar(100),
[AMOUNT] money,
[GLPAYMENTMETHODREVENUETYPEMAPPINGID] uniqueidentifier,
[ID] uniqueidentifier,
[PROJECT] nvarchar(100),
[REFERENCE] nvarchar(100),
[TRANSACTIONTYPECODE] tinyint,
[ORGANIZATIONAMOUNT] money,
[BASECURRENCYID] uniqueidentifier,
[TRANSACTIONAMOUNT] money,
[TRANSACTIONCURRENCYID] uniqueidentifier,
[BASEEXCHANGERATEID] uniqueidentifier,
[ORGANIZATIONEXCHANGERATEID] uniqueidentifier
)
insert into @TempTbl select
[ACCOUNT],
[AMOUNT],
[GLPAYMENTMETHODREVENUETYPEMAPPINGID],
[ID],
[PROJECT],
[REFERENCE],
[TRANSACTIONTYPECODE],
[ORGANIZATIONAMOUNT],
[BASECURRENCYID],
[TRANSACTIONAMOUNT],
[TRANSACTIONCURRENCYID],
[BASEEXCHANGERATEID],
[ORGANIZATIONEXCHANGERATEID]
from dbo.UFN_PLANNEDGIFTPAYOUT_GETGLDISTRIBUTION_FROMITEMLISTXML(@XML)
update @TempTbl set ID = newid() where (ID is null) or (ID = '00000000-0000-0000-0000-000000000000');
if @@Error <> 0
return 1;
declare @contextCache varbinary(128);
declare @e int;
-- cache current context information
set @contextCache = CONTEXT_INFO();
-- set CONTEXT_INFO to @CHANGEAGENTID
if not @CHANGEAGENTID is null
set CONTEXT_INFO @CHANGEAGENTID;
-- delete any items that no longer exist in the XML table
delete from dbo.[PLANNEDGIFTPAYOUTGLDISTRIBUTION] where [PLANNEDGIFTPAYOUTGLDISTRIBUTION].ID in
(select ID from dbo.UFN_PLANNEDGIFTPAYOUT_GETGLDISTRIBUTION
(
@REVENUEID
)
EXCEPT select ID from @TempTbl)
select @e=@@error;
-- reset CONTEXT_INFO to previous value
if not @contextCache is null
set CONTEXT_INFO @contextCache;
if @e <> 0
return 2;
-- update the items that exist in the XML table and the db
merge into dbo.[PLANNEDGIFTPAYOUTGLDISTRIBUTION]
using @TempTbl as [temp] on [PLANNEDGIFTPAYOUTGLDISTRIBUTION].ID = [temp].ID
when matched
and (
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[ACCOUNT]<>temp.[ACCOUNT]) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[ACCOUNT] is null and temp.[ACCOUNT] is not null) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[ACCOUNT] is not null and temp.[ACCOUNT] is null) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[AMOUNT]<>temp.[AMOUNT]) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[AMOUNT] is null and temp.[AMOUNT] is not null) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[AMOUNT] is not null and temp.[AMOUNT] is null) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[GLPAYMENTMETHODREVENUETYPEMAPPINGID]<>temp.[GLPAYMENTMETHODREVENUETYPEMAPPINGID]) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[GLPAYMENTMETHODREVENUETYPEMAPPINGID] is null and temp.[GLPAYMENTMETHODREVENUETYPEMAPPINGID] is not null) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[GLPAYMENTMETHODREVENUETYPEMAPPINGID] is not null and temp.[GLPAYMENTMETHODREVENUETYPEMAPPINGID] is null) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[ID]<>temp.[ID]) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[ID] is null and temp.[ID] is not null) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[ID] is not null and temp.[ID] is null) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[PROJECT]<>temp.[PROJECT]) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[PROJECT] is null and temp.[PROJECT] is not null) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[PROJECT] is not null and temp.[PROJECT] is null) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[REFERENCE]<>temp.[REFERENCE]) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[REFERENCE] is null and temp.[REFERENCE] is not null) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[REFERENCE] is not null and temp.[REFERENCE] is null) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[TRANSACTIONTYPECODE]<>temp.[TRANSACTIONTYPECODE]) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[TRANSACTIONTYPECODE] is null and temp.[TRANSACTIONTYPECODE] is not null) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[TRANSACTIONTYPECODE] is not null and temp.[TRANSACTIONTYPECODE] is null) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[ORGANIZATIONAMOUNT]<>temp.[ORGANIZATIONAMOUNT]) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[ORGANIZATIONAMOUNT] is null and temp.[ORGANIZATIONAMOUNT] is not null) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[ORGANIZATIONAMOUNT] is not null and temp.[ORGANIZATIONAMOUNT] is null) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[BASECURRENCYID]<>temp.[BASECURRENCYID]) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[BASECURRENCYID] is null and temp.[BASECURRENCYID] is not null) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[BASECURRENCYID] is not null and temp.[BASECURRENCYID] is null) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[TRANSACTIONAMOUNT]<>temp.[TRANSACTIONAMOUNT]) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[TRANSACTIONAMOUNT] is null and temp.[TRANSACTIONAMOUNT] is not null) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[TRANSACTIONAMOUNT] is not null and temp.[TRANSACTIONAMOUNT] is null) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[TRANSACTIONCURRENCYID]<>temp.[TRANSACTIONCURRENCYID]) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[TRANSACTIONCURRENCYID] is null and temp.[TRANSACTIONCURRENCYID] is not null) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[TRANSACTIONCURRENCYID] is not null and temp.[TRANSACTIONCURRENCYID] is null) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[BASEEXCHANGERATEID]<>temp.[BASEEXCHANGERATEID]) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[BASEEXCHANGERATEID] is null and temp.[BASEEXCHANGERATEID] is not null) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[BASEEXCHANGERATEID] is not null and temp.[BASEEXCHANGERATEID] is null) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[ORGANIZATIONEXCHANGERATEID]<>temp.[ORGANIZATIONEXCHANGERATEID]) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[ORGANIZATIONEXCHANGERATEID] is null and temp.[ORGANIZATIONEXCHANGERATEID] is not null) or
([PLANNEDGIFTPAYOUTGLDISTRIBUTION].[ORGANIZATIONEXCHANGERATEID] is not null and temp.[ORGANIZATIONEXCHANGERATEID] is null)
)
then update
set
[PLANNEDGIFTPAYOUTGLDISTRIBUTION].[ACCOUNT]=temp.[ACCOUNT],
[PLANNEDGIFTPAYOUTGLDISTRIBUTION].[AMOUNT]=temp.[AMOUNT],
[PLANNEDGIFTPAYOUTGLDISTRIBUTION].[GLPAYMENTMETHODREVENUETYPEMAPPINGID]=temp.[GLPAYMENTMETHODREVENUETYPEMAPPINGID],
[PLANNEDGIFTPAYOUTGLDISTRIBUTION].[ID]=temp.[ID],
[PLANNEDGIFTPAYOUTGLDISTRIBUTION].[PROJECT]=temp.[PROJECT],
[PLANNEDGIFTPAYOUTGLDISTRIBUTION].[REFERENCE]=temp.[REFERENCE],
[PLANNEDGIFTPAYOUTGLDISTRIBUTION].[TRANSACTIONTYPECODE]=temp.[TRANSACTIONTYPECODE],
[PLANNEDGIFTPAYOUTGLDISTRIBUTION].CHANGEDBYID = @CHANGEAGENTID,
[PLANNEDGIFTPAYOUTGLDISTRIBUTION].DATECHANGED = @CHANGEDATE,
[PLANNEDGIFTPAYOUTGLDISTRIBUTION].[ORGANIZATIONAMOUNT] = temp.[ORGANIZATIONAMOUNT],
[PLANNEDGIFTPAYOUTGLDISTRIBUTION].[BASECURRENCYID] = temp.[BASECURRENCYID],
[PLANNEDGIFTPAYOUTGLDISTRIBUTION].[TRANSACTIONAMOUNT] = temp.[TRANSACTIONAMOUNT],
[PLANNEDGIFTPAYOUTGLDISTRIBUTION].[TRANSACTIONCURRENCYID] = temp.[TRANSACTIONCURRENCYID],
[PLANNEDGIFTPAYOUTGLDISTRIBUTION].[BASEEXCHANGERATEID] = temp.[BASEEXCHANGERATEID],
[PLANNEDGIFTPAYOUTGLDISTRIBUTION].[ORGANIZATIONEXCHANGERATEID] = temp.[ORGANIZATIONEXCHANGERATEID];
--Update the corresponding rows in the GLTRANSACTION table
merge into dbo.[GLTRANSACTION]
using @TempTbl as [temp]
inner join PLANNEDGIFTPAYOUTGLDISTRIBUTION on PLANNEDGIFTPAYOUTGLDISTRIBUTION.ID = [temp].ID
on [GLTRANSACTION].ID = [temp].ID
when matched
then update
set
GLTRANSACTION.ACCOUNT = PLANNEDGIFTPAYOUTGLDISTRIBUTION.ACCOUNT,
GLTRANSACTION.AMOUNT = PLANNEDGIFTPAYOUTGLDISTRIBUTION.AMOUNT,
GLTRANSACTION.PROJECT = PLANNEDGIFTPAYOUTGLDISTRIBUTION.PROJECT,
GLTRANSACTION.REFERENCE = PLANNEDGIFTPAYOUTGLDISTRIBUTION.REFERENCE,
GLTRANSACTION.TRANSACTIONTYPECODE = PLANNEDGIFTPAYOUTGLDISTRIBUTION.TRANSACTIONTYPECODE,
GLTRANSACTION.POSTDATE = @POSTDATE,
GLTRANSACTION.CHANGEDBYID = @CHANGEAGENTID,
GLTRANSACTION.DATECHANGED = @CHANGEDATE,
GLTRANSACTION.ORGANIZATIONAMOUNT = PLANNEDGIFTPAYOUTGLDISTRIBUTION.ORGANIZATIONAMOUNT,
GLTRANSACTION.BASECURRENCYID = PLANNEDGIFTPAYOUTGLDISTRIBUTION.BASECURRENCYID,
GLTRANSACTION.TRANSACTIONAMOUNT = PLANNEDGIFTPAYOUTGLDISTRIBUTION.TRANSACTIONAMOUNT,
GLTRANSACTION.TRANSACTIONCURRENCYID = PLANNEDGIFTPAYOUTGLDISTRIBUTION.TRANSACTIONCURRENCYID,
GLTRANSACTION.BASEEXCHANGERATEID = PLANNEDGIFTPAYOUTGLDISTRIBUTION.BASEEXCHANGERATEID,
GLTRANSACTION.ORGANIZATIONEXCHANGERATEID = PLANNEDGIFTPAYOUTGLDISTRIBUTION.ORGANIZATIONEXCHANGERATEID,
GLTRANSACTION.GLACCOUNTID = dbo.UFN_GLACCOUNT_GETIDFROMACCOUNTANDREVENUE(PLANNEDGIFTPAYOUTGLDISTRIBUTION.ACCOUNT,@REVENUEID);
--ensure JournalEntry is updated properly for account and reference
update JE set
GLACCOUNTID = GLACCOUNT.ID,
COMMENT = temp.REFERENCE,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE
from @TempTbl temp
inner join dbo.JOURNALENTRY_EXT JEX on JEX.GLTRANSACTIONID = temp.ID
inner join dbo.JOURNALENTRY JE on JE.ID = JEX.ID
inner join dbo.GLACCOUNT on GLACCOUNT.ACCOUNTNUMBER = temp.ACCOUNT
if @@Error <> 0
return 3;
-- insert new items
declare @DISTRIBUTIONS table(
GLTRANSACTIONID uniqueidentifier,
ACCOUNT nvarchar(100),
AMOUNT money,
PROJECT nvarchar(100),
REFERENCE nvarchar(255),
TRANSACTIONTYPECODE tinyint,
GLPAYMENTMETHODREVENUETYPEMAPPINGID uniqueidentifier,
REVENUEGLDISTRIBUTIONID uniqueidentifier,
ORGANIZATIONAMOUNT money,
BASECURRENCYID uniqueidentifier,
TRANSACTIONAMOUNT money,
TRANSACTIONCURRENCYID uniqueidentifier,
BASEEXCHANGERATEID uniqueidentifier,
ORGANIZATIONEXCHANGERATEID uniqueidentifier
);
insert into @DISTRIBUTIONS
(GLTRANSACTIONID, ACCOUNT, AMOUNT, PROJECT, REFERENCE, TRANSACTIONTYPECODE, GLPAYMENTMETHODREVENUETYPEMAPPINGID, REVENUEGLDISTRIBUTIONID,
ORGANIZATIONAMOUNT, BASECURRENCYID, TRANSACTIONAMOUNT, TRANSACTIONCURRENCYID, BASEEXCHANGERATEID, ORGANIZATIONEXCHANGERATEID)
select
newid(),
[ACCOUNT],
[AMOUNT],
[PROJECT],
[REFERENCE],
[TRANSACTIONTYPECODE],
[GLPAYMENTMETHODREVENUETYPEMAPPINGID],
[ID],
[ORGANIZATIONAMOUNT],
[BASECURRENCYID],
[TRANSACTIONAMOUNT],
[TRANSACTIONCURRENCYID],
[BASEEXCHANGERATEID],
[ORGANIZATIONEXCHANGERATEID]
from @TempTbl as [temp]
where not exists (select ID from dbo.[PLANNEDGIFTPAYOUTGLDISTRIBUTION] as data where data.ID = [temp].ID)
-- Insert rows in GLTRANSACTION table
insert into dbo.GLTRANSACTION(ID, TRANSACTIONTYPECODE, ACCOUNT, AMOUNT, PROJECT, REFERENCE, POSTDATE, JOURNAL, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED,
ORGANIZATIONAMOUNT, BASECURRENCYID, TRANSACTIONAMOUNT, TRANSACTIONCURRENCYID, BASEEXCHANGERATEID, ORGANIZATIONEXCHANGERATEID, GLACCOUNTID)
select
GLTRANSACTIONID,
TRANSACTIONTYPECODE,
ACCOUNT,
AMOUNT,
PROJECT,
REFERENCE,
@POSTDATE,
'Blackbaud Enterprise',
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE,
ORGANIZATIONAMOUNT,
BASECURRENCYID,
TRANSACTIONAMOUNT,
TRANSACTIONCURRENCYID,
BASEEXCHANGERATEID,
ORGANIZATIONEXCHANGERATEID,
dbo.UFN_GLACCOUNT_GETIDFROMACCOUNTANDREVENUE([ACCOUNT],@REVENUEID)
from
@DISTRIBUTIONS;
insert into dbo.PLANNEDGIFTPAYOUTGLDISTRIBUTION
(ID, PLANNEDGIFTPAYOUTID, REVENUEID, GLPAYMENTMETHODREVENUETYPEMAPPINGID, PROJECT, REFERENCE, AMOUNT, ACCOUNT, TRANSACTIONTYPECODE, GLTRANSACTIONID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED,
ORGANIZATIONAMOUNT, BASECURRENCYID, TRANSACTIONAMOUNT, TRANSACTIONCURRENCYID, BASEEXCHANGERATEID, ORGANIZATIONEXCHANGERATEID)
select
REVENUEGLDISTRIBUTIONID,
@PLANNEDGIFTPAYOUTID,
@REVENUEID,
GLPAYMENTMETHODREVENUETYPEMAPPINGID,
PROJECT,
REFERENCE,
AMOUNT,
ACCOUNT,
TRANSACTIONTYPECODE,
GLTRANSACTIONID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE,
ORGANIZATIONAMOUNT,
BASECURRENCYID,
TRANSACTIONAMOUNT,
TRANSACTIONCURRENCYID,
BASEEXCHANGERATEID,
ORGANIZATIONEXCHANGERATEID
from
@DISTRIBUTIONS;
if @@Error <> 0
return 4;
return 0;