USP_BANKACCOUNTDEPOSITCORRECTION_GLDISTRIBUTION_MULTICURRENCY_UPDATEFROMXML
Update the bank account deposit correction GL distributions with multicurrency 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_MULTICURRENCY_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,
[GLTRANSACTIONID] uniqueidentifier,
[PROJECT] nvarchar(100),
[REFERENCE] nvarchar(255),
[TRANSACTIONTYPECODE] tinyint,
[ORGANIZATIONAMOUNT] money,
[BASECURRENCYID] uniqueidentifier,
[TRANSACTIONAMOUNT] money,
[TRANSACTIONCURRENCYID] uniqueidentifier,
[BASEEXCHANGERATEID] uniqueidentifier,
[ORGANIZATIONEXCHANGERATEID] uniqueidentifier)
insert into @TempTbl select
A.ACCOUNTNUMBER [ACCOUNT],
D.[GLACCOUNTID],
D.[AMOUNT],
D.[ID],
D.[GLTRANSACTIONID],
D.[PROJECT],
D.[REFERENCE],
D.[TRANSACTIONTYPECODE],
D.[ORGANIZATIONAMOUNT],
D.[BASECURRENCYID],
D.[TRANSACTIONAMOUNT],
D.[TRANSACTIONCURRENCYID],
D.[BASEEXCHANGERATEID],
D.[ORGANIZATIONEXCHANGERATEID]
from dbo.UFN_BANKACCOUNTDEPOSITCORRECTION_GETGLDISTRIBUTION_FROMITEMLISTXML(@XML) D
inner join dbo.GLACCOUNT A on A.ID = D.GLACCOUNTID;
declare @GLACCOUNTID uniqueidentifier;
declare @ACCOUNTCODEID uniqueidentifier;
declare @PDACCOUNTSYSTEMID uniqueidentifier;
declare @CHECKDEBITSIDE bit;
declare @DCTRANSACTIONCURRENCYID uniqueidentifier;
declare @BATRANSACTIONCURRENCYID uniqueidentifier;
select @GLACCOUNTID = BA.GLACCOUNTID
,@ACCOUNTCODEID = BA.PDACCOUNTSEGMENTVALUEID
,@CHECKDEBITSIDE = CASE WHEN C.CORRECTIONTYPECODE in (0, 2) THEN 0 ELSE 1 END
,@PDACCOUNTSYSTEMID = BA.PDACCOUNTSYSTEMID
,@DCTRANSACTIONCURRENCYID = D.TRANSACTIONCURRENCYID
,@BATRANSACTIONCURRENCYID = BA.TRANSACTIONCURRENCYID
from dbo.BANKACCOUNTDEPOSITCORRECTION C
inner join dbo.BANKACCOUNTDEPOSIT D on D.ID = C.DEPOSITID
inner join dbo.BANKACCOUNTTRANSACTION T on C.DEPOSITID = T.ID
inner join dbo.BANKACCOUNT BA on BA.ID = T.BANKACCOUNTID
where C.ID = @BANKACCOUNTDEPOSITCORRECTIONID
if @DCTRANSACTIONCURRENCYID = @BATRANSACTIONCURRENCYID
begin
if @GLACCOUNTID is not null
begin
if exists(select ID from @TempTbl where GLACCOUNTID <> @GLACCOUNTID and @CHECKDEBITSIDE = 1 and TRANSACTIONTYPECODE = 0)
raiserror('ERR_DEBITACCOUNT_MUST_BE_SAME_AS_BANK.', 13, 1)
else if exists(select ID from @TempTbl where GLACCOUNTID <> @GLACCOUNTID and @CHECKDEBITSIDE = 0 and TRANSACTIONTYPECODE = 1)
raiserror('ERR_CREDITACCOUNT_MUST_BE_SAME_AS_BANK.', 13, 1)
end
else
begin
declare @ACCOUNT nvarchar(100);
select @ACCOUNT = dbo.UFN_GLACCOUNT_GETDEFAULTACCOUNTSTRING_BYACCOUNTSYSTEM(@ACCOUNTCODEID,@PDACCOUNTSYSTEMID);
select @GLACCOUNTID = ID from dbo.GLACCOUNT where ACCOUNTNUMBER = @ACCOUNT and PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID;
if exists(select ID from @TempTbl where GLACCOUNTID <> @GLACCOUNTID and @CHECKDEBITSIDE = 1 and TRANSACTIONTYPECODE = 0)
raiserror('ERR_DEBITACCOUNT_MUST_BE_SAME_AS_BANK.', 13, 1)
else if exists(select ID from @TempTbl where GLACCOUNTID <> @GLACCOUNTID and @CHECKDEBITSIDE = 0 and TRANSACTIONTYPECODE = 1)
raiserror('ERR_CREDITACCOUNT_MUST_BE_SAME_AS_BANK.', 13, 1)
end
end
update @TempTbl set ID = newid() where (ID is null) or (ID = '00000000-0000-0000-0000-000000000000');
update @TempTbl set GLTRANSACTIONID = newid() where (GLTRANSACTIONID is null) or (GLTRANSACTIONID = '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;
declare @transactions table (ID uniqueidentifier)
insert into @transactions
select D.GLTRANSACTIONID
from dbo.BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION D
where D.BANKACCOUNTDEPOSITCORRECTIONID = @BANKACCOUNTDEPOSITCORRECTIONID
EXCEPT select T.GLTRANSACTIONID from @TempTbl T
-- delete any items that no longer exist in the XML from the GLTRANSACTION table
delete from dbo.GLTRANSACTION where SYSTEMDISTRIBUTION = 0 and ID in
(select T.ID from @transactions 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 as T on BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.ID = T.ID
when matched then update set
BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.ACCOUNT = T.ACCOUNT,
BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.AMOUNT = T.AMOUNT,
BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.PROJECT = T.PROJECT,
BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.REFERENCE = T.REFERENCE,
BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.TRANSACTIONTYPECODE = T.TRANSACTIONTYPECODE,
BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.ORGANIZATIONAMOUNT = T.ORGANIZATIONAMOUNT,
BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.BASECURRENCYID = T.BASECURRENCYID,
BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.TRANSACTIONAMOUNT = T.TRANSACTIONAMOUNT,
BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.TRANSACTIONCURRENCYID = T.TRANSACTIONCURRENCYID,
BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.BASEEXCHANGERATEID = T.BASEEXCHANGERATEID,
BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.ORGANIZATIONEXCHANGERATEID = T.ORGANIZATIONEXCHANGERATEID,
BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.CHANGEDBYID = @CHANGEAGENTID,
BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION.DATECHANGED = @CHANGEDATE
;
/* kwb Switch to ANSI syntax
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.POSTDATE = @POSTDATE,
GLTRANSACTION.ORGANIZATIONAMOUNT = T.ORGANIZATIONAMOUNT,
GLTRANSACTION.BASECURRENCYID = T.BASECURRENCYID,
GLTRANSACTION.TRANSACTIONAMOUNT = T.TRANSACTIONAMOUNT,
GLTRANSACTION.TRANSACTIONCURRENCYID = T.TRANSACTIONCURRENCYID,
GLTRANSACTION.BASEEXCHANGERATEID = T.BASEEXCHANGERATEID,
GLTRANSACTION.ORGANIZATIONEXCHANGERATEID = T.ORGANIZATIONEXCHANGERATEID,
GLTRANSACTION.CHANGEDBYID = @CHANGEAGENTID,
GLTRANSACTION.DATECHANGED = @CHANGEDATE
from dbo.GLTRANSACTION
inner join @TempTbl T on GLTRANSACTION.ID = T.GLTRANSACTIONID
*/
update dbo.GLTRANSACTION set
GLTRANSACTION.ACCOUNT = (select ACCOUNT from @TempTbl where GLTRANSACTIONID = GLTRANSACTION.ID),
GLTRANSACTION.GLACCOUNTID = (select GLACCOUNTID from @TempTbl where GLTRANSACTIONID = GLTRANSACTION.ID),
GLTRANSACTION.AMOUNT = (select AMOUNT from @TempTbl where GLTRANSACTIONID = GLTRANSACTION.ID),
GLTRANSACTION.PROJECT = (select PROJECT from @TempTbl where GLTRANSACTIONID = GLTRANSACTION.ID),
GLTRANSACTION.REFERENCE = (select REFERENCE from @TempTbl where GLTRANSACTIONID = GLTRANSACTION.ID),
GLTRANSACTION.TRANSACTIONTYPECODE = (select TRANSACTIONTYPECODE from @TempTbl where GLTRANSACTIONID = GLTRANSACTION.ID),
GLTRANSACTION.POSTDATE = @POSTDATE,
GLTRANSACTION.ORGANIZATIONAMOUNT = (select ORGANIZATIONAMOUNT from @TempTbl where GLTRANSACTIONID = GLTRANSACTION.ID),
GLTRANSACTION.BASECURRENCYID = (select BASECURRENCYID from @TempTbl where GLTRANSACTIONID = GLTRANSACTION.ID),
GLTRANSACTION.TRANSACTIONAMOUNT = (select TRANSACTIONAMOUNT from @TempTbl where GLTRANSACTIONID = GLTRANSACTION.ID),
GLTRANSACTION.TRANSACTIONCURRENCYID = (select TRANSACTIONCURRENCYID from @TempTbl where GLTRANSACTIONID = GLTRANSACTION.ID),
GLTRANSACTION.BASEEXCHANGERATEID = (select BASEEXCHANGERATEID from @TempTbl where GLTRANSACTIONID = GLTRANSACTION.ID),
GLTRANSACTION.ORGANIZATIONEXCHANGERATEID = (select ORGANIZATIONEXCHANGERATEID from @TempTbl where GLTRANSACTIONID = GLTRANSACTION.ID),
GLTRANSACTION.CHANGEDBYID = @CHANGEAGENTID,
GLTRANSACTION.DATECHANGED = @CHANGEDATE
where GLTRANSACTION.ID in (select GLTRANSACTIONID from @TempTbl)
if @@Error <> 0
return 3;
insert into dbo.GLTRANSACTION(
ID
,TRANSACTIONTYPECODE
,ACCOUNT
,GLACCOUNTID
,AMOUNT
,PROJECT
,REFERENCE
,POSTDATE
,JOURNAL
,ORGANIZATIONAMOUNT
,BASECURRENCYID
,TRANSACTIONAMOUNT
,TRANSACTIONCURRENCYID
,BASEEXCHANGERATEID
,ORGANIZATIONEXCHANGERATEID
,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select
GLTRANSACTIONID
,TRANSACTIONTYPECODE
,ACCOUNT
,GLACCOUNTID
,AMOUNT
,PROJECT
,REFERENCE
,@POSTDATE
,'Blackbaud Enterprise'
,ORGANIZATIONAMOUNT
,BASECURRENCYID
,TRANSACTIONAMOUNT
,TRANSACTIONCURRENCYID
,BASEEXCHANGERATEID
,ORGANIZATIONEXCHANGERATEID
,@CHANGEAGENTID,@CHANGEAGENTID,@CHANGEDATE,@CHANGEDATE
from @TempTbl temp
where not exists(select ID from dbo.GLTRANSACTION T where T.ID = temp.GLTRANSACTIONID)
insert into dbo.BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION(
ID
,BANKACCOUNTDEPOSITCORRECTIONID
,PROJECT
,REFERENCE
,AMOUNT
,ACCOUNT
,TRANSACTIONTYPECODE
,GLTRANSACTIONID
,ORGANIZATIONAMOUNT
,BASECURRENCYID
,TRANSACTIONAMOUNT
,TRANSACTIONCURRENCYID
,BASEEXCHANGERATEID
,ORGANIZATIONEXCHANGERATEID
,ADDEDBYID,CHANGEDBYID, DATEADDED, DATECHANGED)
select
ID
,@BANKACCOUNTDEPOSITCORRECTIONID
,PROJECT
,REFERENCE
,AMOUNT
,ACCOUNT
,TRANSACTIONTYPECODE
,GLTRANSACTIONID
,ORGANIZATIONAMOUNT
,BASECURRENCYID
,TRANSACTIONAMOUNT
,TRANSACTIONCURRENCYID
,BASEEXCHANGERATEID
,ORGANIZATIONEXCHANGERATEID
,@CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE
from @TempTbl temp
where not exists(select ID from dbo.BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION T where T.ID = temp.ID)
if @@Error <> 0
return 4;
return 0;