USP_REVENUE_GETGIFTFEEGLDISTRIBUTION_CUSTOMUPDATEFROMXML_2
Stored procedure to update unposted gift fees GL distribution records from the given xml collection with currency.
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_REVENUE_GETGIFTFEEGLDISTRIBUTION_CUSTOMUPDATEFROMXML_2
(
@REVENUEID uniqueidentifier,
@XML xml,
@POSTDATE datetime,
@CHANGEAGENTID uniqueidentifier = null,
@CHANGEDATE datetime = null
)
as
set nocount on;
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,
[REFERENCE] nvarchar(255),
[TRANSACTIONTYPECODE] tinyint,
[ORGANIZATIONAMOUNT] money,
[BASECURRENCYID] uniqueidentifier,
[TRANSACTIONAMOUNT] money,
[TRANSACTIONCURRENCYID] uniqueidentifier,
[BASEEXCHANGERATEID] uniqueidentifier,
[ORGANIZATIONEXCHANGERATEID] uniqueidentifier
)
insert into @TempTbl select
[ACCOUNT],
[AMOUNT],
[GLPAYMENTMETHODREVENUETYPEMAPPINGID],
[ID],
[REFERENCE],
[TRANSACTIONTYPECODE],
[ORGANIZATIONAMOUNT],
[BASECURRENCYID],
[TRANSACTIONAMOUNT],
[TRANSACTIONCURRENCYID],
[BASEEXCHANGERATEID],
[ORGANIZATIONEXCHANGERATEID]
from dbo.UFN_REVENUE_GETGIFTFEEGLDISTRIBUTION_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.GIFTFEEGLDISTRIBUTION where GIFTFEEGLDISTRIBUTION.ID in
(select ID from dbo.UFN_REVENUE_GETGIFTFEEGLDISTRIBUTION
(
@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
-- Not updating GLPAYMENTMETHODREVENUETYPEMAPPINGID since it is only editable by the user
-- in LegacyGL and Gift Fee distributions only work with BasicGL.
merge into dbo.[GIFTFEEGLDISTRIBUTION]
using @TempTbl as [temp] on [GIFTFEEGLDISTRIBUTION].ID = [temp].ID
when matched
and (
([GIFTFEEGLDISTRIBUTION].[ACCOUNT]<>temp.[ACCOUNT]) or
([GIFTFEEGLDISTRIBUTION].[ACCOUNT] is null and temp.[ACCOUNT] is not null) or
([GIFTFEEGLDISTRIBUTION].[ACCOUNT] is not null and temp.[ACCOUNT] is null) or
([GIFTFEEGLDISTRIBUTION].[AMOUNT]<>temp.[AMOUNT]) or
([GIFTFEEGLDISTRIBUTION].[AMOUNT] is null and temp.[AMOUNT] is not null) or
([GIFTFEEGLDISTRIBUTION].[AMOUNT] is not null and temp.[AMOUNT] is null) or
([GIFTFEEGLDISTRIBUTION].[ID]<>temp.[ID]) or
([GIFTFEEGLDISTRIBUTION].[ID] is null and temp.[ID] is not null) or
([GIFTFEEGLDISTRIBUTION].[ID] is not null and temp.[ID] is null) or
([GIFTFEEGLDISTRIBUTION].[REFERENCE]<>temp.[REFERENCE]) or
([GIFTFEEGLDISTRIBUTION].[REFERENCE] is null and temp.[REFERENCE] is not null) or
([GIFTFEEGLDISTRIBUTION].[REFERENCE] is not null and temp.[REFERENCE] is null) or
([GIFTFEEGLDISTRIBUTION].[TRANSACTIONTYPECODE]<>temp.[TRANSACTIONTYPECODE]) or
([GIFTFEEGLDISTRIBUTION].[TRANSACTIONTYPECODE] is null and temp.[TRANSACTIONTYPECODE] is not null) or
([GIFTFEEGLDISTRIBUTION].[TRANSACTIONTYPECODE] is not null and temp.[TRANSACTIONTYPECODE] is null) or
([GIFTFEEGLDISTRIBUTION].[ORGANIZATIONAMOUNT]<>temp.[ORGANIZATIONAMOUNT]) or
([GIFTFEEGLDISTRIBUTION].[ORGANIZATIONAMOUNT] is null and temp.[ORGANIZATIONAMOUNT] is not null) or
([GIFTFEEGLDISTRIBUTION].[ORGANIZATIONAMOUNT] is not null and temp.[ORGANIZATIONAMOUNT] is null) or
([GIFTFEEGLDISTRIBUTION].[BASECURRENCYID]<>temp.[BASECURRENCYID]) or
([GIFTFEEGLDISTRIBUTION].[BASECURRENCYID] is null and temp.[BASECURRENCYID] is not null) or
([GIFTFEEGLDISTRIBUTION].[BASECURRENCYID] is not null and temp.[BASECURRENCYID] is null) or
([GIFTFEEGLDISTRIBUTION].[TRANSACTIONAMOUNT]<>temp.[TRANSACTIONAMOUNT]) or
([GIFTFEEGLDISTRIBUTION].[TRANSACTIONAMOUNT] is null and temp.[TRANSACTIONAMOUNT] is not null) or
([GIFTFEEGLDISTRIBUTION].[TRANSACTIONAMOUNT] is not null and temp.[TRANSACTIONAMOUNT] is null) or
([GIFTFEEGLDISTRIBUTION].[TRANSACTIONCURRENCYID]<>temp.[TRANSACTIONCURRENCYID]) or
([GIFTFEEGLDISTRIBUTION].[TRANSACTIONCURRENCYID] is null and temp.[TRANSACTIONCURRENCYID] is not null) or
([GIFTFEEGLDISTRIBUTION].[TRANSACTIONCURRENCYID] is not null and temp.[TRANSACTIONCURRENCYID] is null) or
([GIFTFEEGLDISTRIBUTION].[BASEEXCHANGERATEID]<>temp.[BASEEXCHANGERATEID]) or
([GIFTFEEGLDISTRIBUTION].[BASEEXCHANGERATEID] is null and temp.[BASEEXCHANGERATEID] is not null) or
([GIFTFEEGLDISTRIBUTION].[BASEEXCHANGERATEID] is not null and temp.[BASEEXCHANGERATEID] is null) or
([GIFTFEEGLDISTRIBUTION].[ORGANIZATIONEXCHANGERATEID]<>temp.[ORGANIZATIONEXCHANGERATEID]) or
([GIFTFEEGLDISTRIBUTION].[ORGANIZATIONEXCHANGERATEID] is null and temp.[ORGANIZATIONEXCHANGERATEID] is not null) or
([GIFTFEEGLDISTRIBUTION].[ORGANIZATIONEXCHANGERATEID] is not null and temp.[ORGANIZATIONEXCHANGERATEID] is null)
)
then update
set
[GIFTFEEGLDISTRIBUTION].[ACCOUNT]=temp.[ACCOUNT],
[GIFTFEEGLDISTRIBUTION].[AMOUNT]=temp.[AMOUNT],
[GIFTFEEGLDISTRIBUTION].[ID]=temp.[ID],
[GIFTFEEGLDISTRIBUTION].[REFERENCE]=temp.[REFERENCE],
[GIFTFEEGLDISTRIBUTION].[TRANSACTIONTYPECODE]=temp.[TRANSACTIONTYPECODE],
[GIFTFEEGLDISTRIBUTION].CHANGEDBYID = @CHANGEAGENTID,
[GIFTFEEGLDISTRIBUTION].DATECHANGED = @CHANGEDATE,
[GIFTFEEGLDISTRIBUTION].[ORGANIZATIONAMOUNT] = temp.[ORGANIZATIONAMOUNT],
[GIFTFEEGLDISTRIBUTION].[BASECURRENCYID] = temp.[BASECURRENCYID],
[GIFTFEEGLDISTRIBUTION].[TRANSACTIONAMOUNT] = temp.[TRANSACTIONAMOUNT],
[GIFTFEEGLDISTRIBUTION].[TRANSACTIONCURRENCYID] = temp.[TRANSACTIONCURRENCYID],
[GIFTFEEGLDISTRIBUTION].[BASEEXCHANGERATEID] = temp.[BASEEXCHANGERATEID],
[GIFTFEEGLDISTRIBUTION].[ORGANIZATIONEXCHANGERATEID] = temp.[ORGANIZATIONEXCHANGERATEID];
--Update the corresponding rows in the GLTRANSACTION table
merge into dbo.[GLTRANSACTION]
using @TempTbl as [temp]
inner join dbo.GIFTFEEGLDISTRIBUTION on GIFTFEEGLDISTRIBUTION.ID = [temp].ID
on [GLTRANSACTION].ID = [temp].ID
when matched
then update
set
GLTRANSACTION.ACCOUNT = GIFTFEEGLDISTRIBUTION.ACCOUNT,
GLTRANSACTION.AMOUNT = GIFTFEEGLDISTRIBUTION.AMOUNT,
GLTRANSACTION.REFERENCE = GIFTFEEGLDISTRIBUTION.REFERENCE,
GLTRANSACTION.TRANSACTIONTYPECODE = GIFTFEEGLDISTRIBUTION.TRANSACTIONTYPECODE,
GLTRANSACTION.POSTDATE = @POSTDATE,
GLTRANSACTION.CHANGEDBYID = @CHANGEAGENTID,
GLTRANSACTION.DATECHANGED = @CHANGEDATE,
GLTRANSACTION.ORGANIZATIONAMOUNT = GIFTFEEGLDISTRIBUTION.ORGANIZATIONAMOUNT,
GLTRANSACTION.BASECURRENCYID = GIFTFEEGLDISTRIBUTION.BASECURRENCYID,
GLTRANSACTION.TRANSACTIONAMOUNT = GIFTFEEGLDISTRIBUTION.TRANSACTIONAMOUNT,
GLTRANSACTION.TRANSACTIONCURRENCYID = GIFTFEEGLDISTRIBUTION.TRANSACTIONCURRENCYID,
GLTRANSACTION.BASEEXCHANGERATEID = GIFTFEEGLDISTRIBUTION.BASEEXCHANGERATEID,
GLTRANSACTION.ORGANIZATIONEXCHANGERATEID = GIFTFEEGLDISTRIBUTION.ORGANIZATIONEXCHANGERATEID,
GLTRANSACTION.GLACCOUNTID = dbo.UFN_GLACCOUNT_GETIDFROMACCOUNTANDREVENUE(GIFTFEEGLDISTRIBUTION.ACCOUNT,@REVENUEID);
if @@Error <> 0
return 3;
-- insert new items
declare @DISTRIBUTIONS table(
GLTRANSACTIONID uniqueidentifier,
ACCOUNT nvarchar(100),
AMOUNT money,
REFERENCE nvarchar(255),
TRANSACTIONTYPECODE tinyint,
GLPAYMENTMETHODREVENUETYPEMAPPINGID uniqueidentifier,
GIFTFEEGLDISTRIBUTIONID uniqueidentifier,
ORGANIZATIONAMOUNT money,
BASECURRENCYID uniqueidentifier,
TRANSACTIONAMOUNT money,
TRANSACTIONCURRENCYID uniqueidentifier,
BASEEXCHANGERATEID uniqueidentifier,
ORGANIZATIONEXCHANGERATEID uniqueidentifier
);
insert into @DISTRIBUTIONS(GLTRANSACTIONID, ACCOUNT, AMOUNT, REFERENCE, TRANSACTIONTYPECODE, GLPAYMENTMETHODREVENUETYPEMAPPINGID, GIFTFEEGLDISTRIBUTIONID,
ORGANIZATIONAMOUNT, BASECURRENCYID, TRANSACTIONAMOUNT, TRANSACTIONCURRENCYID, BASEEXCHANGERATEID, ORGANIZATIONEXCHANGERATEID)
select
newid(),
[ACCOUNT],
[AMOUNT],
[REFERENCE],
[TRANSACTIONTYPECODE],
[GLPAYMENTMETHODREVENUETYPEMAPPINGID],
[ID],
[ORGANIZATIONAMOUNT],
[BASECURRENCYID],
[TRANSACTIONAMOUNT],
[TRANSACTIONCURRENCYID],
[BASEEXCHANGERATEID],
[ORGANIZATIONEXCHANGERATEID]
from @TempTbl as [temp]
where not exists (select ID from dbo.[GIFTFEEGLDISTRIBUTION] as data where data.ID = [temp].ID)
-- Insert rows in GLTRANSACTION table
insert into dbo.GLTRANSACTION(ID, TRANSACTIONTYPECODE, ACCOUNT, AMOUNT, REFERENCE, POSTDATE, JOURNAL, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, GLACCOUNTID,
ORGANIZATIONAMOUNT, BASECURRENCYID, TRANSACTIONAMOUNT, TRANSACTIONCURRENCYID, BASEEXCHANGERATEID, ORGANIZATIONEXCHANGERATEID)
select
GLTRANSACTIONID,
TRANSACTIONTYPECODE,
ACCOUNT,
AMOUNT,
REFERENCE,
@POSTDATE,
'Blackbaud Enterprise',
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE,
dbo.UFN_GLACCOUNT_GETIDFROMACCOUNTANDREVENUE([ACCOUNT],@REVENUEID),
ORGANIZATIONAMOUNT,
BASECURRENCYID,
TRANSACTIONAMOUNT,
TRANSACTIONCURRENCYID,
BASEEXCHANGERATEID,
ORGANIZATIONEXCHANGERATEID
from
@DISTRIBUTIONS;
insert into dbo.GIFTFEEGLDISTRIBUTION
(ID, REVENUEID, GLPAYMENTMETHODREVENUETYPEMAPPINGID, REFERENCE, AMOUNT, ACCOUNT, TRANSACTIONTYPECODE, GLTRANSACTIONID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED,
ORGANIZATIONAMOUNT, BASECURRENCYID, TRANSACTIONAMOUNT, TRANSACTIONCURRENCYID, BASEEXCHANGERATEID, ORGANIZATIONEXCHANGERATEID)
select
GIFTFEEGLDISTRIBUTIONID,
@REVENUEID,
GLPAYMENTMETHODREVENUETYPEMAPPINGID,
REFERENCE,
AMOUNT,
ACCOUNT,
TRANSACTIONTYPECODE,
GLTRANSACTIONID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE,
ORGANIZATIONAMOUNT,
BASECURRENCYID,
TRANSACTIONAMOUNT,
TRANSACTIONCURRENCYID,
BASEEXCHANGERATEID,
ORGANIZATIONEXCHANGERATEID
from
@DISTRIBUTIONS;
if @@Error <> 0
return 4;
return 0;