USP_BANKACCOUNTDEPOSITCORRECTION_GLDISTRIBUTION_UPDATEFROMXML
Update the bank account deposit correction GL distributions from the XML
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@BANKACCOUNTDEPOSITCORRECTIONID | uniqueidentifier | IN | |
@XML | xml | IN | |
@POSTDATE | datetime | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CHANGEDATE | datetime | IN |
Definition
Copy
CREATE procedure dbo.USP_BANKACCOUNTDEPOSITCORRECTION_GLDISTRIBUTION_UPDATEFROMXML
(
@BANKACCOUNTDEPOSITCORRECTIONID 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 D.GLTRANSACTIONID from dbo.BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION D where D.BANKACCOUNTDEPOSITCORRECTIONID = @BANKACCOUNTDEPOSITCORRECTIONID
EXCEPT select T.ID from @TempTbl T);
delete from dbo.BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION where ID in
(select D.ID from dbo.BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION D where D.BANKACCOUNTDEPOSITCORRECTIONID = @BANKACCOUNTDEPOSITCORRECTIONID
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
merge into dbo.BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION
using @TempTbl T on BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.ID = T.ID
when matched and
(BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.ACCOUNT <> T.ACCOUNT) or
(BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.ACCOUNT is null and T.ACCOUNT is not null) or
(BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.ACCOUNT is not null and T.ACCOUNT is null) or
(BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.AMOUNT <> T.AMOUNT) or
(BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.AMOUNT is null and T.AMOUNT is not null) or
(BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.AMOUNT is not null and T.AMOUNT is null) or
(BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.PROJECT<>T.PROJECT) or
(BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.PROJECT is null and T.PROJECT is not null) or
(BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.PROJECT is not null and T.PROJECT is null) or
(BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.REFERENCE<>T.REFERENCE) or
(BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.REFERENCE is null and T.REFERENCE is not null) or
(BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.REFERENCE is not null and T.REFERENCE is null) or
(BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.TRANSACTIONTYPECODE<>T.TRANSACTIONTYPECODE) or
(BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.TRANSACTIONTYPECODE is null and T.TRANSACTIONTYPECODE is not null) or
(BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.TRANSACTIONTYPECODE is not null and T.TRANSACTIONTYPECODE is null)
then update set
BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.ACCOUNT = T.ACCOUNT,
BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.AMOUNT = T.AMOUNT,
BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.PROJECT = T.PROJECT,
BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.REFERENCE = T.REFERENCE,
BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.TRANSACTIONTYPECODE = T.TRANSACTIONTYPECODE,
BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.CHANGEDBYID = @CHANGEAGENTID,
BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.DATECHANGED = @CHANGEDATE
;
merge into dbo.GLTRANSACTION
using dbo.BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION as D
inner join @TempTbl as T on D.ID = T.ID
on D.GLTRANSACTIONID = GLTRANSACTION.ID
when matched then update 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
;
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.BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION D where D.ID = T.ID);
insert into dbo.BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION
(ID, GLTRANSACTIONID, BANKACCOUNTDEPOSITCORRECTIONID, PROJECT, REFERENCE, AMOUNT, ACCOUNT, TRANSACTIONTYPECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select
ID,
GLTRANSACTIONID,
@BANKACCOUNTDEPOSITCORRECTIONID,
PROJECT,
REFERENCE,
AMOUNT,
ACCOUNT,
TRANSACTIONTYPECODE,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE
from @TempTbl T
where not exists (select ID from dbo.BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION D where D.ID = T.ID);
if @@Error <> 0
return 4;
return 0;