USP_BANKACCOUNTTRANSACTION_GLDISTRIBUTION_UPDATEFROMXML
Update the bank account transaction GL distributions from the XML
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@BANKACCOUNTTRANSACTIONID | uniqueidentifier | IN | |
@XML | xml | IN | |
@POSTDATE | datetime | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CHANGEDATE | datetime | IN |
Definition
Copy
CREATE procedure dbo.USP_BANKACCOUNTTRANSACTION_GLDISTRIBUTION_UPDATEFROMXML
(
@BANKACCOUNTTRANSACTIONID 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()
declare @TempTbl table (
[ACCOUNT] nvarchar(100),
[GLACCOUNTID] uniqueidentifier,
[AMOUNT] money,
[ID] uniqueidentifier,
[PROJECT] nvarchar(100),
[REFERENCE] nvarchar(100),
[TRANSACTIONTYPECODE] tinyint,
[GLTRANSACTIONID] uniqueidentifier);
insert into @TempTbl
select A.ACCOUNTNUMBER [ACCOUNT], D.GLACCOUNTID, D.AMOUNT, D.ID, D.PROJECT, D.REFERENCE, D.TRANSACTIONTYPECODE, NEWID()
from dbo.UFN_BANKACCOUNTTRANSACTION_GETGLDISTRIBUTION_FROMITEMLISTXML(@XML) D
inner join dbo.GLACCOUNT A on A.ID = D.GLACCOUNTID
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
delete from dbo.GLTRANSACTION where ID in
(select ED.GLTRANSACTIONID from dbo.BANKACCOUNTTRANSACTIONGLDISTRIBUTION ED where ED.BANKACCOUNTTRANSACTIONID = @BANKACCOUNTTRANSACTIONID
EXCEPT select T.ID from @TempTbl T);
delete from dbo.BANKACCOUNTTRANSACTIONGLDISTRIBUTION where ID in
(select ED.ID from dbo.BANKACCOUNTTRANSACTIONGLDISTRIBUTION ED where ED.BANKACCOUNTTRANSACTIONID = @BANKACCOUNTTRANSACTIONID
EXCEPT select T.ID from @TempTbl T);
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
/* kwb Change to ANSI syntax
update dbo.BANKACCOUNTTRANSACTIONGLDISTRIBUTION set
BANKACCOUNTTRANSACTIONGLDISTRIBUTION.ACCOUNT = T.ACCOUNT,
BANKACCOUNTTRANSACTIONGLDISTRIBUTION.AMOUNT = T.AMOUNT,
BANKACCOUNTTRANSACTIONGLDISTRIBUTION.PROJECT = T.PROJECT,
BANKACCOUNTTRANSACTIONGLDISTRIBUTION.REFERENCE = T.REFERENCE,
BANKACCOUNTTRANSACTIONGLDISTRIBUTION.TRANSACTIONTYPECODE = T.TRANSACTIONTYPECODE,
BANKACCOUNTTRANSACTIONGLDISTRIBUTION.CHANGEDBYID = @CHANGEAGENTID,
BANKACCOUNTTRANSACTIONGLDISTRIBUTION.DATECHANGED = @CHANGEDATE
from dbo.BANKACCOUNTTRANSACTIONGLDISTRIBUTION
inner join @TempTbl T on BANKACCOUNTTRANSACTIONGLDISTRIBUTION.ID = T.ID
where (BANKACCOUNTTRANSACTIONGLDISTRIBUTION.ACCOUNT <> T.ACCOUNT) or
(BANKACCOUNTTRANSACTIONGLDISTRIBUTION.ACCOUNT is null and T.ACCOUNT is not null) or
(BANKACCOUNTTRANSACTIONGLDISTRIBUTION.ACCOUNT is not null and T.ACCOUNT is null) or
(BANKACCOUNTTRANSACTIONGLDISTRIBUTION.AMOUNT <> T.AMOUNT) or
(BANKACCOUNTTRANSACTIONGLDISTRIBUTION.AMOUNT is null and T.AMOUNT is not null) or
(BANKACCOUNTTRANSACTIONGLDISTRIBUTION.AMOUNT is not null and T.AMOUNT is null) or
(BANKACCOUNTTRANSACTIONGLDISTRIBUTION.PROJECT<>T.PROJECT) or
(BANKACCOUNTTRANSACTIONGLDISTRIBUTION.PROJECT is null and T.PROJECT is not null) or
(BANKACCOUNTTRANSACTIONGLDISTRIBUTION.PROJECT is not null and T.PROJECT is null) or
(BANKACCOUNTTRANSACTIONGLDISTRIBUTION.REFERENCE<>T.REFERENCE) or
(BANKACCOUNTTRANSACTIONGLDISTRIBUTION.REFERENCE is null and T.REFERENCE is not null) or
(BANKACCOUNTTRANSACTIONGLDISTRIBUTION.REFERENCE is not null and T.REFERENCE is null) or
(BANKACCOUNTTRANSACTIONGLDISTRIBUTION.TRANSACTIONTYPECODE<>T.TRANSACTIONTYPECODE) or
(BANKACCOUNTTRANSACTIONGLDISTRIBUTION.TRANSACTIONTYPECODE is null and T.TRANSACTIONTYPECODE is not null) or
(BANKACCOUNTTRANSACTIONGLDISTRIBUTION.TRANSACTIONTYPECODE is not null and T.TRANSACTIONTYPECODE is null);
update dbo.GLTRANSACTION set
GLTRANSACTION.ACCOUNT = T.ACCOUNT,
GLTRANSACTION.GLACCOUNTID = T.GLACCOUNTID,
GLTRANSACTION.AMOUNT = T.AMOUNT,
GLTRANSACTION.PROJECT = T.PROJECT,
GLTRANSACTION.REFERENCE = T.REFERENCE,
GLTRANSACTION.TRANSACTIONTYPECODE = T.TRANSACTIONTYPECODE,
GLTRANSACTION.CHANGEDBYID = @CHANGEAGENTID,
GLTRANSACTION.DATECHANGED = @CHANGEDATE
from dbo.BANKACCOUNTTRANSACTIONGLDISTRIBUTION D
inner join @TempTbl T on D.ID = T.ID
inner join dbo.GLTRANSACTION on D.GLTRANSACTIONID = GLTRANSACTION.ID;
*/
update dbo.BANKACCOUNTTRANSACTIONGLDISTRIBUTION
set BANKACCOUNTTRANSACTIONGLDISTRIBUTION.ACCOUNT = (select ACCOUNT from @TempTbl where ID = BANKACCOUNTTRANSACTIONGLDISTRIBUTION.ID),
BANKACCOUNTTRANSACTIONGLDISTRIBUTION.AMOUNT = (select AMOUNT from @TempTbl where ID = BANKACCOUNTTRANSACTIONGLDISTRIBUTION.ID),
BANKACCOUNTTRANSACTIONGLDISTRIBUTION.PROJECT = (select PROJECT from @TempTbl where ID = BANKACCOUNTTRANSACTIONGLDISTRIBUTION.ID),
BANKACCOUNTTRANSACTIONGLDISTRIBUTION.REFERENCE = (select REFERENCE from @TempTbl where ID = BANKACCOUNTTRANSACTIONGLDISTRIBUTION.ID),
BANKACCOUNTTRANSACTIONGLDISTRIBUTION.TRANSACTIONTYPECODE = (select TRANSACTIONTYPECODE from @TempTbl where ID = BANKACCOUNTTRANSACTIONGLDISTRIBUTION.ID),
BANKACCOUNTTRANSACTIONGLDISTRIBUTION.CHANGEDBYID = @CHANGEAGENTID,
BANKACCOUNTTRANSACTIONGLDISTRIBUTION.DATECHANGED = @CHANGEDATE
where ID in (select ID from @TempTbl)
update dbo.GLTRANSACTION
set GLTRANSACTION.ACCOUNT = (select T.ACCOUNT from dbo.BANKACCOUNTTRANSACTIONGLDISTRIBUTION D inner join @TempTbl T on D.ID = T.ID where D.GLTRANSACTIONID = GLTRANSACTION.ID),
GLTRANSACTION.GLACCOUNTID = (select T.GLACCOUNTID from dbo.BANKACCOUNTTRANSACTIONGLDISTRIBUTION D inner join @TempTbl T on D.ID = T.ID where D.GLTRANSACTIONID = GLTRANSACTION.ID),
GLTRANSACTION.AMOUNT = (select T.AMOUNT from dbo.BANKACCOUNTTRANSACTIONGLDISTRIBUTION D inner join @TempTbl T on D.ID = T.ID where D.GLTRANSACTIONID = GLTRANSACTION.ID),
GLTRANSACTION.PROJECT = (select T.PROJECT from dbo.BANKACCOUNTTRANSACTIONGLDISTRIBUTION D inner join @TempTbl T on D.ID = T.ID where D.GLTRANSACTIONID = GLTRANSACTION.ID),
GLTRANSACTION.REFERENCE = (select T.REFERENCE from dbo.BANKACCOUNTTRANSACTIONGLDISTRIBUTION D inner join @TempTbl T on D.ID = T.ID where D.GLTRANSACTIONID = GLTRANSACTION.ID),
GLTRANSACTION.TRANSACTIONTYPECODE = (select T.TRANSACTIONTYPECODE from dbo.BANKACCOUNTTRANSACTIONGLDISTRIBUTION D inner join @TempTbl T on D.ID = T.ID where D.GLTRANSACTIONID = GLTRANSACTION.ID),
GLTRANSACTION.CHANGEDBYID = @CHANGEAGENTID,
GLTRANSACTION.DATECHANGED = @CHANGEDATE
where ID in (select D.GLTRANSACTIONID from BANKACCOUNTTRANSACTIONGLDISTRIBUTION D inner join @TempTbl T on D.ID = T.ID)
if @@Error <> 0
return 3;
--insert new rows
insert into dbo.GLTRANSACTION(ID, TRANSACTIONTYPECODE, ACCOUNT, GLACCOUNTID, AMOUNT, PROJECT, REFERENCE, POSTDATE, JOURNAL, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select
GLTRANSACTIONID,
TRANSACTIONTYPECODE,
ACCOUNT,
GLACCOUNTID,
AMOUNT,
PROJECT,
REFERENCE,
@POSTDATE,
'Blackbaud Enterprise',
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE
from @TempTbl T
where not exists (select ID from dbo.BANKACCOUNTTRANSACTIONGLDISTRIBUTION D where D.ID = T.ID);
insert into dbo.BANKACCOUNTTRANSACTIONGLDISTRIBUTION
(ID, GLTRANSACTIONID, BANKACCOUNTTRANSACTIONID, PROJECT, REFERENCE, AMOUNT, ACCOUNT, TRANSACTIONTYPECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select
ID,
GLTRANSACTIONID,
@BANKACCOUNTTRANSACTIONID,
PROJECT,
REFERENCE,
AMOUNT,
ACCOUNT,
TRANSACTIONTYPECODE,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE
from @TempTbl T
where not exists (select ID from dbo.BANKACCOUNTTRANSACTIONGLDISTRIBUTION D where D.ID = T.ID);
if @@Error <> 0
return 4;
return 0;