USP_DEPOSIT_CREATEDISTRIBUTIONSFORALL_BANKACCOUNTDEPOSITCORRECTIONS
Create the distributions for all deposit corrections linked to a given deposit
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@DEPOSITID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CURRENTDATE | datetime | IN |
Definition
Copy
CREATE procedure dbo.USP_DEPOSIT_CREATEDISTRIBUTIONSFORALL_BANKACCOUNTDEPOSITCORRECTIONS
(
@DEPOSITID uniqueidentifier
,@CHANGEAGENTID uniqueidentifier = null
,@CURRENTDATE datetime = null
)
as
begin
declare @JOURNAL nvarchar(50) = 'Blackbaud Enterprise';
declare @REFERENCE nvarchar(100) = 'Bank Account Deposit Correction';
declare @DEPOSITREFERENCE nvarchar(100) = 'Bank Account Deposit Correction';
declare @NUMBEROFCORRECTIONS integer;
select @NUMBEROFCORRECTIONS = COUNT(ID)
from dbo.BANKACCOUNTDEPOSITCORRECTION
where DEPOSITID = @DEPOSITID;
if @NUMBEROFCORRECTIONS > 0
begin
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
if @CURRENTDATE is null
set @CURRENTDATE = getdate();
declare @DISTRIBUTION table(
CORRECTIONID uniqueidentifier
,GLTRANSACTIONID uniqueidentifier
,ACCOUNT nvarchar(100)
,GLACCOUNTID uniqueidentifier
,AMOUNT money
,PROJECT nvarchar(100)
,REFERENCE nvarchar(255)
,TRANSACTIONTYPECODE tinyint
,TRANSACTIONAMOUNT money
,ORGANIZATIONAMOUNT money
,TRANSACTIONCURRENCYID uniqueidentifier
,BASECURRENCYID uniqueidentifier
,BASEEXCHANGERATEID uniqueidentifier
,ORGANIZATIONEXCHANGERATEID uniqueidentifier);
declare @BANKGLACCOUNTID uniqueidentifier;
declare @BANKGLACCOUNT nvarchar(100);
declare @BANKPDACCOUNTSEGMENTVALUEID uniqueidentifier;
declare @TRANSACTIONCURRENCYID uniqueidentifier;
declare @BASECURRENCYID uniqueidentifier;
declare @BASEEXCHANGERATEID uniqueidentifier;
declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;
declare @PDACCOUNTSYSTEMID uniqueidentifier;
declare @POSTSTATUSCODE tinyint;
declare @POSTDATE datetime;
SELECT @BANKGLACCOUNT = A.ACCOUNTNUMBER
,@BANKGLACCOUNTID = BA.GLACCOUNTID
,@BANKPDACCOUNTSEGMENTVALUEID = BA.PDACCOUNTSEGMENTVALUEID
,@TRANSACTIONCURRENCYID = BA.TRANSACTIONCURRENCYID
,@PDACCOUNTSYSTEMID = BA.PDACCOUNTSYSTEMID
,@BASECURRENCYID = BAT.BASECURRENCYID
,@BASEEXCHANGERATEID = BAT.BASEEXCHANGERATEID
,@ORGANIZATIONEXCHANGERATEID = BAT.ORGANIZATIONEXCHANGERATEID
,@POSTSTATUSCODE = BAT.POSTSTATUSCODE
,@POSTDATE = BAT.POSTDATE
FROM dbo.BANKACCOUNTTRANSACTION BAT
inner join dbo.BANKACCOUNT BA on BA.ID = BAT.BANKACCOUNTID
left outer join dbo.GLACCOUNT A on A.ID = BA.GLACCOUNTID
where BAT.ID = @DEPOSITID;
if @BANKGLACCOUNTID is null
begin
select @BANKGLACCOUNT = dbo.UFN_GLACCOUNT_GETDEFAULTACCOUNTSTRING_BYACCOUNTSYSTEM(@BANKPDACCOUNTSEGMENTVALUEID,@PDACCOUNTSYSTEMID);
select @BANKGLACCOUNTID = ID from dbo.GLACCOUNT where ACCOUNTNUMBER = @BANKGLACCOUNT and PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID;
if @BANKGLACCOUNTID is null
raiserror('The account %s does not exist. The action could not be completed.', 13, 1, @BANKGLACCOUNT);
end
declare @ACCOUNTS table (
CORRECTIONID uniqueidentifier
,GLACCOUNTID uniqueidentifier
,PDACCOUNTSEGMENTVALUEID uniqueidentifier
,GLACCOUNT nvarchar(100));
insert into @ACCOUNTS
select C.ID, M.CREDITGLACCOUNTID, M.CREDITPDACCOUNTSEGMENTVALUEID, A.ACCOUNTNUMBER
from dbo.PDACCOUNTCODEMAPPING M
inner join dbo.BANKACCOUNTDEPOSITCORRECTION C on C.DEPOSITID = @DEPOSITID
left outer join dbo.GLACCOUNT A on A.ID = M.CREDITGLACCOUNTID
where M.OFFICEID = 10
and M.PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID
and (M.PAYMENTMETHOD & CASE C.CORRECTIONTYPECODE WHEN 0 THEN 1 WHEN 1 THEN 2 WHEN 2 THEN 4 WHEN 3 THEN 8 END) > 0
and (M.REVENUETYPE & CASE C.PAYMENTMETHODCODE WHEN 0 THEN 1 WHEN 1 THEN 2 WHEN 2 THEN 4 WHEN 3 THEN 8 END) > 0;
if (select COUNT(*) from @ACCOUNTS) < @NUMBEROFCORRECTIONS
raiserror('An account code has not been defined for a mapping of one or more of the deposit corrections', 13, 1)
update @ACCOUNTS
set GLACCOUNT = dbo.UFN_GLACCOUNT_GETDEFAULTACCOUNTSTRING_BYACCOUNTSYSTEM(PDACCOUNTSEGMENTVALUEID, @PDACCOUNTSYSTEMID)
where GLACCOUNTID is null;
update @ACCOUNTS
set GLACCOUNTID = GLA.ID
from @ACCOUNTS A
inner join dbo.GLACCOUNT GLA on GLA.ACCOUNTNUMBER = A.GLACCOUNT and GLA.PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID
where A.GLACCOUNTID is null
if exists(select * from @ACCOUNTS where GLACCOUNTID is null)
raiserror('An expected account does not exist. The action could not be completed.', 13, 1)
insert into @DISTRIBUTION (
CORRECTIONID
,GLTRANSACTIONID
,ACCOUNT
,GLACCOUNTID
,AMOUNT
,PROJECT
,TRANSACTIONTYPECODE
,REFERENCE
,TRANSACTIONAMOUNT
,ORGANIZATIONAMOUNT
,TRANSACTIONCURRENCYID
,BASECURRENCYID
,BASEEXCHANGERATEID
,ORGANIZATIONEXCHANGERATEID)
select
C.ID
,NEWID()
,@BANKGLACCOUNT
,@BANKGLACCOUNTID
,C.AMOUNT
,' '
,CASE WHEN C.CORRECTIONTYPECODE in (0, 2) THEN 1 ELSE 0 END
,CASE WHEN Len(T.REFERENCE) > 0 THEN T.REFERENCE ELSE CASE WHEN Len(C.REFERENCE) > 0 THEN C.REFERENCE ELSE @REFERENCE END END
,C.TRANSACTIONAMOUNT
,C.ORGANIZATIONAMOUNT
,BA.TRANSACTIONCURRENCYID
,T.BASECURRENCYID
,T.BASEEXCHANGERATEID
,T.ORGANIZATIONEXCHANGERATEID
from dbo.BANKACCOUNTDEPOSITCORRECTION C
inner join dbo.BANKACCOUNTTRANSACTION T on C.DEPOSITID = T.ID
inner join dbo.BANKACCOUNT BA on BA.ID = T.BANKACCOUNTID
where C.DEPOSITID = @DEPOSITID
insert into @DISTRIBUTION (
CORRECTIONID
,GLTRANSACTIONID
,ACCOUNT
,GLACCOUNTID
,AMOUNT
,PROJECT
,TRANSACTIONTYPECODE
,REFERENCE
,TRANSACTIONAMOUNT
,ORGANIZATIONAMOUNT
,TRANSACTIONCURRENCYID
,BASECURRENCYID
,BASEEXCHANGERATEID
,ORGANIZATIONEXCHANGERATEID)
select
C.ID
,NEWID()
,A.GLACCOUNT
,A.GLACCOUNTID
,C.AMOUNT
,' '
,CASE WHEN C.CORRECTIONTYPECODE in (0, 2) THEN 0 ELSE 1 END
,CASE WHEN Len(C.REFERENCE) > 0 THEN C.REFERENCE ELSE @REFERENCE END
,C.TRANSACTIONAMOUNT
,C.ORGANIZATIONAMOUNT
,@TRANSACTIONCURRENCYID
,@BASECURRENCYID
,@BASEEXCHANGERATEID
,@ORGANIZATIONEXCHANGERATEID
from dbo.BANKACCOUNTDEPOSITCORRECTION C
inner join @ACCOUNTS A on A.CORRECTIONID = C.ID
where C.DEPOSITID = @DEPOSITID
insert into dbo.GLTRANSACTION(
ID
,TRANSACTIONTYPECODE
,ACCOUNT
,AMOUNT
,PROJECT
,REFERENCE
,POSTSTATUSCODE
,POSTDATE
,JOURNAL
,GLACCOUNTID
,TRANSACTIONAMOUNT
,ORGANIZATIONAMOUNT
,TRANSACTIONCURRENCYID
,BASECURRENCYID
,BASEEXCHANGERATEID
,ORGANIZATIONEXCHANGERATEID
,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select
GLTRANSACTIONID
,TRANSACTIONTYPECODE
,ACCOUNT
,AMOUNT
,PROJECT
,REFERENCE
,@POSTSTATUSCODE
,@POSTDATE
,@JOURNAL
,GLACCOUNTID
,TRANSACTIONAMOUNT
,ORGANIZATIONAMOUNT
,TRANSACTIONCURRENCYID
,BASECURRENCYID
,BASEEXCHANGERATEID
,ORGANIZATIONEXCHANGERATEID
,@CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE
from @DISTRIBUTION;
insert into dbo.BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION(
ID
,PROJECT
,REFERENCE
,AMOUNT
,ACCOUNT
,TRANSACTIONTYPECODE
,GLTRANSACTIONID
,BANKACCOUNTDEPOSITCORRECTIONID
,TRANSACTIONAMOUNT
,ORGANIZATIONAMOUNT
,TRANSACTIONCURRENCYID
,BASECURRENCYID
,BASEEXCHANGERATEID
,ORGANIZATIONEXCHANGERATEID
, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select
NEWID()
,PROJECT
,REFERENCE
,AMOUNT
,ACCOUNT
,TRANSACTIONTYPECODE
,GLTRANSACTIONID
,CORRECTIONID
,TRANSACTIONAMOUNT
,ORGANIZATIONAMOUNT
,TRANSACTIONCURRENCYID
,BASECURRENCYID
,BASEEXCHANGERATEID
,ORGANIZATIONEXCHANGERATEID
,@CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE
from @DISTRIBUTION;
end
end