USP_BANKACCOUNTDEPOSITCORRECTION_CREATEDISTRIBUTION
Create a distribution for a given deposit correction
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@DEPOSITCORRECTIONID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CURRENTDATE | datetime | IN | |
@PDACCOUNTSYSTEMID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_BANKACCOUNTDEPOSITCORRECTION_CREATEDISTRIBUTION
(
@DEPOSITCORRECTIONID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@CURRENTDATE datetime = null,
@PDACCOUNTSYSTEMID uniqueidentifier = null
)
as
begin
set nocount on;
declare @JOURNAL nvarchar(50) = 'Blackbaud Enterprise';
declare @REFERENCE nvarchar(100) = 'Bank Account Deposit Correction';
declare @DEPOSITREFERENCE nvarchar(100) = 'Bank Account Deposit Correction';
declare @DISTRIBUTION table(
ID 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
,SYSTEMDISTRIBUTION bit
,ERRORMESSAGE nvarchar(255)
,MAPPEDVALUES xml);
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
if @CURRENTDATE is null
set @CURRENTDATE = getdate();
declare @CORRECTIONTYPECODE tinyint;
declare @METHODCODE tinyint;
declare @AMOUNT money;
declare @BANKGLACCOUNTID uniqueidentifier;
declare @GLACCOUNTID uniqueidentifier;
declare @BANKGLACCOUNT nvarchar(100);
declare @GLACCOUNT nvarchar(100);
declare @BANKPDACCOUNTSEGMENTVALUEID uniqueidentifier;
declare @PDACCOUNTSEGMENTVALUEID uniqueidentifier;
declare @POSTSTATUSCODE tinyint;
declare @POSTDATE datetime;
declare @UNMAPPEDCOMPSEGMENT tinyint;
declare @TRANSACTIONAMOUNT money;
declare @ORGANIZATIONAMOUNT money;
declare @TRANSACTIONCURRENCYID uniqueidentifier;
declare @BASECURRENCYID uniqueidentifier;
declare @BASEEXCHANGERATEID uniqueidentifier;
declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;
declare @BATRANSACTIONCURRENCYID uniqueidentifier;
declare @BADTRANSACTIONEXCHANGERATEID uniqueidentifier;
declare @BATBASEEXCHANGERATEID uniqueidentifier;
declare @BATORGANIZATIONEXCHANGERATEID uniqueidentifier;
declare @DEFAULTGLACCOUNTID uniqueidentifier
declare @DEFAULTGLACCOUNT varchar(100)
declare @ERRORMESSAGE nvarchar(255)
declare @MAPPEDVALUES xml;
declare @PAYMENTMETHODTYPEID uniqueidentifier;
declare @REVENUETYPEID uniqueidentifier;
declare @AccountSystem nvarchar(50);
select @CORRECTIONTYPECODE = C.CORRECTIONTYPECODE,
@METHODCODE = C.PAYMENTMETHODCODE,
@AMOUNT = C.AMOUNT,
@BANKGLACCOUNTID = BA.GLACCOUNTID,
@BANKGLACCOUNT = A.ACCOUNTNUMBER,
@BANKPDACCOUNTSEGMENTVALUEID = BA.PDACCOUNTSEGMENTVALUEID,
@POSTSTATUSCODE = T.POSTSTATUSCODE,
@POSTDATE = T.POSTDATE,
@REFERENCE = CASE WHEN Len(C.REFERENCE) > 0 THEN C.REFERENCE ELSE @REFERENCE END,
@DEPOSITREFERENCE = CASE WHEN Len(T.REFERENCE) > 0 THEN T.REFERENCE ELSE CASE WHEN Len(C.REFERENCE) > 0 THEN C.REFERENCE ELSE @REFERENCE END END,
@PDACCOUNTSYSTEMID = BA.PDACCOUNTSYSTEMID
,@TRANSACTIONAMOUNT = C.TRANSACTIONAMOUNT
,@ORGANIZATIONAMOUNT = C.ORGANIZATIONAMOUNT
,@TRANSACTIONCURRENCYID = D.TRANSACTIONCURRENCYID
,@BASECURRENCYID = C.BASECURRENCYID
,@BASEEXCHANGERATEID = C.BASEEXCHANGERATEID
,@ORGANIZATIONEXCHANGERATEID = C.ORGANIZATIONEXCHANGERATEID
,@BATRANSACTIONCURRENCYID = BA.TRANSACTIONCURRENCYID
,@BADTRANSACTIONEXCHANGERATEID = D.TRANSACTIONEXCHANGERATEID
,@BATBASEEXCHANGERATEID = T.BASEEXCHANGERATEID
,@BATORGANIZATIONEXCHANGERATEID = T.ORGANIZATIONEXCHANGERATEID
from dbo.BANKACCOUNTDEPOSITCORRECTION C
inner join dbo.BANKACCOUNTDEPOSIT as D on C.DEPOSITID = D.ID
inner join dbo.BANKACCOUNTTRANSACTION T on T.ID = C.DEPOSITID
inner join dbo.BANKACCOUNT BA on BA.ID = T.BANKACCOUNTID
left outer join dbo.GLACCOUNT A on A.ID = BA.GLACCOUNTID
where C.ID = @DEPOSITCORRECTIONID;
declare @DEBITGLACCOUNTID uniqueidentifier;
declare @CREDITGLACCOUNTID uniqueidentifier;
declare @NAMEID int ;
set @NAMEID = CASE @CORRECTIONTYPECODE WHEN 0 THEN 1 WHEN 1 THEN 2 WHEN 2 THEN 4 WHEN 3 THEN 8 END
select @DEFAULTGLACCOUNTID = PDACCOUNTSYSTEM.DEFAULTGLACCOUNTID, @DEFAULTGLACCOUNT = GLACCOUNT.ACCOUNTNUMBER, @AccountSystem = PDACCOUNTSYSTEM.NAME
from dbo.PDACCOUNTSYSTEM left join dbo.GLACCOUNT on PDACCOUNTSYSTEM.DEFAULTGLACCOUNTID = GLACCOUNT.ID
where PDACCOUNTSYSTEM.ID = @PDACCOUNTSYSTEMID
select @DEBITGLACCOUNTID = T1.DEBITGLACCOUNTID from PDACCOUNTCODEMAPPING T1 left join dbo.PDACCOUNTCODEMAPPAYMENTMETHODTYPE T2 on (T1.PAYMENTMETHOD & T2.NAMEID) > 0 and T1.OFFICEID = T2.OFFICEID where T1.OFFICEID = 10 and T1.PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID and T2.NAMEID = @NAMEID and (T1.REVENUETYPE & CASE @METHODCODE
WHEN 0 THEN 1 --Cash
WHEN 1 THEN 2 --Check
WHEN 2 THEN 4 --Credit Card
WHEN 3 THEN 8 --Other
END) > 0;
select @CREDITGLACCOUNTID = T1.CREDITGLACCOUNTID from PDACCOUNTCODEMAPPING T1 left join dbo.PDACCOUNTCODEMAPPAYMENTMETHODTYPE T2 on (T1.PAYMENTMETHOD & T2.NAMEID) > 0 and T1.OFFICEID = T2.OFFICEID where T1.OFFICEID = 10 and T1.PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID and T2.NAMEID = @NAMEID and (T1.REVENUETYPE & CASE @METHODCODE
WHEN 0 THEN 1 --Cash
WHEN 1 THEN 2 --Check
WHEN 2 THEN 4 --Credit Card
WHEN 3 THEN 8 --Other
END) > 0;
select @PAYMENTMETHODTYPEID = MT.ID from dbo.PDACCOUNTCODEMAPPAYMENTMETHODTYPE MT where MT.OFFICEID = 10 and MT.NAMEID = @NAMEID;
select @REVENUETYPEID = MT.ID from dbo.PDACCOUNTCODEMAPREVENUETYPE MT where MT.OFFICEID = 10 and MT.NAMEID = CASE @METHODCODE WHEN 0 THEN 1 WHEN 1 THEN 2 WHEN 2 THEN 4 WHEN 3 THEN 8 END;
declare @SKIPACCOUNTERROR as bit = 0
if @DEBITGLACCOUNTID is null or @CREDITGLACCOUNTID is null
begin
if ((select COUNT(ID) from dbo.PDACCOUNTSTRUCTURE where PDACCOUNTSTRUCTURE.PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID and SEGMENTTYPE = 3)) != (select COUNT(a.ID) from dbo.PDACCOUNTSEGMENTMAPPING as a join PDACCOUNTSTRUCTURE as b on a.PDACCOUNTSTRUCTUREID = b.ID where a.ISDEFAULT = 1 and PDACCOUNTSEGMENTVALUEID is not null and b.PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID)
begin
set @SKIPACCOUNTERROR = 1
set @ERRORMESSAGE = 'In account system "' + @AccountSystem + '", default segment mappings must be defined in order to generate GL distributions for this transaction.'
if @DEFAULTGLACCOUNTID is null
raiserror(@ERRORMESSAGE, 13, 1);
else if not exists(select TRANSACTIONID from dbo.GLACCOUNTMAPPINGERROR where TRANSACTIONID = @DEPOSITCORRECTIONID and DELETED = 0 and ERRORMESSAGE = @ERRORMESSAGE)
begin
set @MAPPEDVALUES = (select tv1.*, @ERRORMESSAGE as ERRORMESSAGE, 2 as ERRORCODE from dbo.UFN_GETGENERICACCOUNTMAPPINGSTRUCTURE(@PDACCOUNTSYSTEMID, 10, @REVENUETYPEID, null, @PAYMENTMETHODTYPEID, null) tv1 for XML raw('ROW'), type, elements, root('MAPPEDVALUES'), BINARY BASE64)
insert into dbo.GLACCOUNTMAPPINGERROR ([TRANSACTIONID],[TRANSACTIONTYPECODE],[ERRORMESSAGE],[MAPPEDVALUES],[ADDEDBYID],[CHANGEDBYID],[DATEADDED],[DATECHANGED])
values (@DEPOSITCORRECTIONID, 101, @ERRORMESSAGE, @MAPPEDVALUES, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
end
end
select @UNMAPPEDCOMPSEGMENT = dbo.UFN_BANKACCOUNTADJUSTMENT_GETUNMAPPEDCOMPOSITESEGMENT_BYACCOUNTSYSTEM(@PDACCOUNTSYSTEMID)
if @UNMAPPEDCOMPSEGMENT = 1
begin
set @SKIPACCOUNTERROR = 1
set @ERRORMESSAGE = 'In account system "' + @AccountSystem + '", default composite segment mappings must be defined in order to generate GL distributions for this transaction.'
if @DEFAULTGLACCOUNTID is null
raiserror(@ERRORMESSAGE, 13, 1);
else if not exists(select TRANSACTIONID from dbo.GLACCOUNTMAPPINGERROR where TRANSACTIONID = @DEPOSITCORRECTIONID and DELETED = 0 and ERRORMESSAGE = @ERRORMESSAGE)
begin
set @MAPPEDVALUES = (select tv1.*, @ERRORMESSAGE as ERRORMESSAGE, 2 as ERRORCODE from dbo.UFN_GETGENERICACCOUNTMAPPINGSTRUCTURE(@PDACCOUNTSYSTEMID, 10, @REVENUETYPEID, null, @PAYMENTMETHODTYPEID, null) tv1 for XML raw('ROW'), type, elements, root('MAPPEDVALUES'), BINARY BASE64)
insert into dbo.GLACCOUNTMAPPINGERROR ([TRANSACTIONID],[TRANSACTIONTYPECODE],[ERRORMESSAGE],[MAPPEDVALUES],[ADDEDBYID],[CHANGEDBYID],[DATEADDED],[DATECHANGED])
values (@DEPOSITCORRECTIONID, 101, @ERRORMESSAGE, @MAPPEDVALUES, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
end
end
select @DEBITGLACCOUNTID = isnull(@DEBITGLACCOUNTID, @DEFAULTGLACCOUNTID), @CREDITGLACCOUNTID = isnull(@CREDITGLACCOUNTID, @DEFAULTGLACCOUNTID)
end;
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
begin
set @ERRORMESSAGE = 'In account system "' + @AccountSystem + '", the account "' + @BANKGLACCOUNT + '" does not exist. The action could not be completed.'
if @DEFAULTGLACCOUNTID is null
raiserror(@ERRORMESSAGE, 13, 1);
else if not exists(select TRANSACTIONID from dbo.GLACCOUNTMAPPINGERROR where TRANSACTIONID = @DEPOSITCORRECTIONID and DELETED = 0 and ERRORMESSAGE = @ERRORMESSAGE) and @SKIPACCOUNTERROR = 0
begin
set @MAPPEDVALUES = (select tv1.*, @ERRORMESSAGE as ERRORMESSAGE, 3 as ERRORCODE from dbo.UFN_GETGENERICACCOUNTMAPPINGSTRUCTURE(@PDACCOUNTSYSTEMID, 10, @REVENUETYPEID, null, @PAYMENTMETHODTYPEID, null) tv1 for XML raw('ROW'), type, elements, root('MAPPEDVALUES'), BINARY BASE64)
insert into dbo.GLACCOUNTMAPPINGERROR ([TRANSACTIONID],[TRANSACTIONTYPECODE],[ERRORMESSAGE],[MAPPEDVALUES],[ADDEDBYID],[CHANGEDBYID],[DATEADDED],[DATECHANGED])
values (@DEPOSITCORRECTIONID, 101, @ERRORMESSAGE, @MAPPEDVALUES, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
end
select @BANKGLACCOUNT = @DEFAULTGLACCOUNT, @BANKGLACCOUNTID = @DEFAULTGLACCOUNTID
end
end
select @PDACCOUNTSEGMENTVALUEID = CREDITPDACCOUNTSEGMENTVALUEID,
@GLACCOUNTID = CREDITGLACCOUNTID
from dbo.PDACCOUNTCODEMAPPING
where OFFICEID = 10 and PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID and
(PAYMENTMETHOD &
CASE @CORRECTIONTYPECODE
WHEN 0 THEN 1 --Sales-short
WHEN 1 THEN 2 --Sales-over
WHEN 2 THEN 4 --Treasury-short
WHEN 3 THEN 8 --Treasury-over
END) > 0 and
(REVENUETYPE &
CASE @METHODCODE
WHEN 0 THEN 1 --Cash
WHEN 1 THEN 2 --Check
WHEN 2 THEN 4 --Credit Card
WHEN 3 THEN 8 --Other
END) > 0;
if @PDACCOUNTSEGMENTVALUEID is null and @GLACCOUNTID is null
begin
declare @OFFICENAME nvarchar(100);
declare @TYPE nvarchar(50);
declare @METHOD nvarchar(50);
select @OFFICENAME = NAME from dbo.PDACCOUNTCODEMAPOFFICE where OFFICEID = 10;
select @TYPE = CORRECTIONTYPE, @METHOD = PAYMENTMETHOD from dbo.BANKACCOUNTDEPOSITCORRECTION where ID = @DEPOSITCORRECTIONID;
set @ERRORMESSAGE = 'In account system "' + @AccountSystem + '", a mapping does not exist for Office: ' + @OFFICENAME + ', Correction type: ' + @TYPE + ', Method: ' + @METHOD
if @DEFAULTGLACCOUNTID is null
raiserror(@ERRORMESSAGE, 13, 1);
else if not exists(select TRANSACTIONID from dbo.GLACCOUNTMAPPINGERROR where TRANSACTIONID = @DEPOSITCORRECTIONID and DELETED = 0 and ERRORMESSAGE = @ERRORMESSAGE)
begin
set @MAPPEDVALUES = (select tv1.*, @ERRORMESSAGE as ERRORMESSAGE, 1 as ERRORCODE from dbo.UFN_GETGENERICACCOUNTMAPPINGSTRUCTURE(@PDACCOUNTSYSTEMID, 10, @REVENUETYPEID, null, @PAYMENTMETHODTYPEID, null) tv1 for XML raw('ROW'), type, elements, root('MAPPEDVALUES'), BINARY BASE64)
insert into dbo.GLACCOUNTMAPPINGERROR ([TRANSACTIONID],[TRANSACTIONTYPECODE],[ERRORMESSAGE],[MAPPEDVALUES],[ADDEDBYID],[CHANGEDBYID],[DATEADDED],[DATECHANGED])
values (@DEPOSITCORRECTIONID, 101, @ERRORMESSAGE, @MAPPEDVALUES, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
end
set @GLACCOUNTID = @DEFAULTGLACCOUNTID
end
if @GLACCOUNTID is null
begin
select @GLACCOUNT = dbo.UFN_GLACCOUNT_GETDEFAULTACCOUNTSTRING_BYACCOUNTSYSTEM(@PDACCOUNTSEGMENTVALUEID,@PDACCOUNTSYSTEMID);
select @GLACCOUNTID = ID from dbo.GLACCOUNT where ACCOUNTNUMBER = @GLACCOUNT and PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID;
if @GLACCOUNTID is null
begin
set @ERRORMESSAGE = 'In account system "' + @AccountSystem + '", the account "' + @GLACCOUNT + '" does not exist. The action could not be completed.'
if @DEFAULTGLACCOUNTID is null
raiserror(@ERRORMESSAGE, 13, 1);
else if not exists(select TRANSACTIONID from dbo.GLACCOUNTMAPPINGERROR where TRANSACTIONID = @DEPOSITCORRECTIONID and DELETED = 0 and ERRORMESSAGE = @ERRORMESSAGE) and @SKIPACCOUNTERROR = 0
begin
set @MAPPEDVALUES = (select tv1.*, @ERRORMESSAGE as ERRORMESSAGE, 3 as ERRORCODE from dbo.UFN_GETGENERICACCOUNTMAPPINGSTRUCTURE(@PDACCOUNTSYSTEMID, 10, @REVENUETYPEID, null, @PAYMENTMETHODTYPEID, null) tv1 for XML raw('ROW'), type, elements, root('MAPPEDVALUES'), BINARY BASE64)
insert into dbo.GLACCOUNTMAPPINGERROR ([TRANSACTIONID],[TRANSACTIONTYPECODE],[ERRORMESSAGE],[MAPPEDVALUES],[ADDEDBYID],[CHANGEDBYID],[DATEADDED],[DATECHANGED])
values (@DEPOSITCORRECTIONID, 101, @ERRORMESSAGE, @MAPPEDVALUES, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
end
select @GLACCOUNTID = @DEFAULTGLACCOUNTID, @GLACCOUNT = @DEFAULTGLACCOUNT
end
end
else
select @GLACCOUNT = ACCOUNTNUMBER from dbo.GLACCOUNT where ID = @GLACCOUNTID;
--Get the intercurrency account when the transaction currencies are not the same.
declare @CURRENCYACCOUNTID uniqueidentifier;
declare @CURRENCYACCOUNTSEGMENTVALUEID uniqueidentifier;
declare @CURRENCYACCOUNT nvarchar(100);
if @TRANSACTIONCURRENCYID <> @BATRANSACTIONCURRENCYID
begin
exec dbo.USP_GET_INTERCURRENCY_BALANCINGACCOUNT @PDACCOUNTSYSTEMID, @CURRENCYACCOUNTID output, @CURRENCYACCOUNTSEGMENTVALUEID output, @ERRORMESSAGE output, @MAPPEDVALUES output
if nullif(@ERRORMESSAGE, '') is not null
if not exists(select TRANSACTIONID from dbo.GLACCOUNTMAPPINGERROR where TRANSACTIONID = @DEPOSITCORRECTIONID and DELETED = 0 and ERRORMESSAGE = @ERRORMESSAGE)
insert into dbo.GLACCOUNTMAPPINGERROR ([TRANSACTIONID],[TRANSACTIONTYPECODE],[ERRORMESSAGE],[MAPPEDVALUES],[ADDEDBYID],[CHANGEDBYID],[DATEADDED],[DATECHANGED])
values (@DEPOSITCORRECTIONID, 101, @ERRORMESSAGE, @MAPPEDVALUES, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
if @CURRENCYACCOUNTID is null
begin
select @CURRENCYACCOUNT = dbo.UFN_GLACCOUNT_GETDEFAULTACCOUNTSTRING_BYACCOUNTSYSTEM(@CURRENCYACCOUNTSEGMENTVALUEID,@PDACCOUNTSYSTEMID);
select @CURRENCYACCOUNTID = ID from dbo.GLACCOUNT where ACCOUNTNUMBER = @CURRENCYACCOUNT and PDACCOUNTSYSTEMID=@PDACCOUNTSYSTEMID;
if @CURRENCYACCOUNTID is null
begin
set @ERRORMESSAGE = 'In account system "' + @AccountSystem + '", the account "' + @CURRENCYACCOUNT + '" does not exist. The action could not be completed.'
if @DEFAULTGLACCOUNTID is null
raiserror(@ERRORMESSAGE, 13, 1);
else if not exists(select TRANSACTIONID from dbo.GLACCOUNTMAPPINGERROR where TRANSACTIONID = @DEPOSITCORRECTIONID and DELETED = 0 and ERRORMESSAGE = @ERRORMESSAGE) and @SKIPACCOUNTERROR = 0
begin
set @MAPPEDVALUES = (select tv1.*, @ERRORMESSAGE as ERRORMESSAGE, 3 as ERRORCODE from dbo.UFN_GETGENERICACCOUNTMAPPINGSTRUCTURE(@PDACCOUNTSYSTEMID, 10, @REVENUETYPEID, null, @PAYMENTMETHODTYPEID, null) tv1 for XML raw('ROW'), type, elements, root('MAPPEDVALUES'), BINARY BASE64)
insert into dbo.GLACCOUNTMAPPINGERROR ([TRANSACTIONID],[TRANSACTIONTYPECODE],[ERRORMESSAGE],[MAPPEDVALUES],[ADDEDBYID],[CHANGEDBYID],[DATEADDED],[DATECHANGED])
values (@DEPOSITCORRECTIONID, 101, @ERRORMESSAGE, @MAPPEDVALUES, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
end
select @CURRENCYACCOUNTID = @DEFAULTGLACCOUNTID, @CURRENCYACCOUNT = @DEFAULTGLACCOUNT
end
end
else
select @CURRENCYACCOUNT = ACCOUNTNUMBER from dbo.GLACCOUNT where ID = @CURRENCYACCOUNTID;
end
declare @TEMPTRANSACTIONAMOUNT money;
declare @TEMPBASEAMOUNT money;
declare @TEMPORGANIZATIONAMOUNT money;
declare @ORGAMOUNTORIGINCODE tinyint;
declare @ORGCURRENCYID uniqueidentifier;
select @ORGAMOUNTORIGINCODE = ORGANIZATIONAMOUNTORIGINCODE from dbo.MULTICURRENCYCONFIGURATION;
select @ORGCURRENCYID = ID from dbo.CURRENCY where ISORGANIZATIONCURRENCY = 1;
set @TEMPTRANSACTIONAMOUNT = case when @TRANSACTIONCURRENCYID <> @BATRANSACTIONCURRENCYID
then
dbo.UFN_CURRENCY_CONVERT(@TRANSACTIONAMOUNT, @BADTRANSACTIONEXCHANGERATEID)
else
@TRANSACTIONAMOUNT
end
set @TEMPBASEAMOUNT = case when @BATRANSACTIONCURRENCYID <> @BASECURRENCYID
then
dbo.UFN_CURRENCY_CONVERT(@TEMPTRANSACTIONAMOUNT, @BATBASEEXCHANGERATEID)
else
@TEMPTRANSACTIONAMOUNT
end
set @TEMPORGANIZATIONAMOUNT = case when @ORGAMOUNTORIGINCODE = 0
then
case when @BASECURRENCYID <> @ORGCURRENCYID
then
dbo.UFN_CURRENCY_CONVERT(@TEMPBASEAMOUNT, @BATORGANIZATIONEXCHANGERATEID)
else
@TEMPBASEAMOUNT
end
else
case when @BATRANSACTIONCURRENCYID <> @ORGCURRENCYID
then
dbo.UFN_CURRENCY_CONVERT(@TEMPTRANSACTIONAMOUNT, @BATORGANIZATIONEXCHANGERATEID)
else
@TEMPTRANSACTIONAMOUNT
end
end
if @AMOUNT <> @TEMPBASEAMOUNT or @ORGANIZATIONAMOUNT <> @TEMPORGANIZATIONAMOUNT
begin
declare @AMOUNTS UDT_GAINLOSS_AMOUNTS;
insert into @AMOUNTS
(ID, NEWBASEAMOUNT, ORIGINALBASEAMOUNT, NEWORGANIZATIONAMOUNT, ORIGINALORGANIZATIONAMOUNT)
values
(@DEPOSITCORRECTIONID, @TEMPBASEAMOUNT, @AMOUNT, @TEMPORGANIZATIONAMOUNT, @ORGANIZATIONAMOUNT)
declare @DEBITSIDE bit;
set @DEBITSIDE = CASE WHEN @CORRECTIONTYPECODE in (0,2) THEN 0 ELSE 1 END;
insert into @DISTRIBUTION(ID, GLTRANSACTIONID, ACCOUNT, GLACCOUNTID, TRANSACTIONTYPECODE, AMOUNT, ORGANIZATIONAMOUNT, REFERENCE, ERRORMESSAGE, MAPPEDVALUES)
exec dbo.USP_GET_GAINLOSSDISTRIBUTIONS
@AMOUNTS
,@DEBITSIDE
,@TRANSACTIONCURRENCYID
,@PDACCOUNTSYSTEMID
insert into dbo.GLACCOUNTMAPPINGERROR ([TRANSACTIONID],[TRANSACTIONTYPECODE],[ERRORMESSAGE],[MAPPEDVALUES],[ADDEDBYID],[CHANGEDBYID],[DATEADDED],[DATECHANGED])
select distinct @DEPOSITCORRECTIONID, 101, D.ERRORMESSAGE, convert(varchar(max),D.MAPPEDVALUES), @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
from @DISTRIBUTION D
where nullif(D.ERRORMESSAGE, '') is not null and D.ERRORMESSAGE not in (select ERRORMESSAGE from dbo.GLACCOUNTMAPPINGERROR where TRANSACTIONID = @DEPOSITCORRECTIONID and DELETED = 0)
update @DISTRIBUTION
set PROJECT = ' '
,TRANSACTIONAMOUNT = 0
,BASECURRENCYID = @BASECURRENCYID
,SYSTEMDISTRIBUTION = 1
if @TRANSACTIONCURRENCYID <> @BATRANSACTIONCURRENCYID
begin
--Create a copy of the gain loss for the intercurrency balancing account
insert into @DISTRIBUTION(GLTRANSACTIONID, ACCOUNT, GLACCOUNTID, TRANSACTIONTYPECODE, AMOUNT, ORGANIZATIONAMOUNT, REFERENCE, PROJECT, TRANSACTIONAMOUNT, BASECURRENCYID, SYSTEMDISTRIBUTION)
select
NEWID()
,@CURRENCYACCOUNT
,@CURRENCYACCOUNTID
,CASE WHEN T.TRANSACTIONTYPECODE = 0 THEN 1 ELSE 0 END
,T.AMOUNT
,T.ORGANIZATIONAMOUNT
,'Intercurrency Balancing'
,T.PROJECT
,T.TRANSACTIONAMOUNT
,T.BASECURRENCYID
,1
from @DISTRIBUTION T
end
end
insert into @DISTRIBUTION
(GLTRANSACTIONID, ACCOUNT, GLACCOUNTID, AMOUNT, PROJECT, TRANSACTIONTYPECODE, REFERENCE
,TRANSACTIONAMOUNT
,ORGANIZATIONAMOUNT
,TRANSACTIONCURRENCYID
,BASECURRENCYID
,BASEEXCHANGERATEID
,ORGANIZATIONEXCHANGERATEID
,SYSTEMDISTRIBUTION)
values
(NEWID(),
@GLACCOUNT,
@GLACCOUNTID,
@AMOUNT,
' ',
CASE WHEN @CORRECTIONTYPECODE in (0, 2) THEN 0 ELSE 1 END
,@REFERENCE
,@TRANSACTIONAMOUNT
,@ORGANIZATIONAMOUNT
,@TRANSACTIONCURRENCYID
,@BASECURRENCYID
,@BASEEXCHANGERATEID
,@ORGANIZATIONEXCHANGERATEID
,0);
insert into @DISTRIBUTION
(GLTRANSACTIONID
,ACCOUNT
,GLACCOUNTID
,AMOUNT
,PROJECT
,TRANSACTIONTYPECODE
,TRANSACTIONAMOUNT
,ORGANIZATIONAMOUNT
,TRANSACTIONCURRENCYID
,BASECURRENCYID
,BASEEXCHANGERATEID
,ORGANIZATIONEXCHANGERATEID
,REFERENCE
,SYSTEMDISTRIBUTION)
values
(NEWID(),
@BANKGLACCOUNT,
@BANKGLACCOUNTID,
@TEMPBASEAMOUNT,
' ',
CASE WHEN @CORRECTIONTYPECODE in (0, 2) THEN 1 ELSE 0 END
,@TEMPTRANSACTIONAMOUNT
,@TEMPORGANIZATIONAMOUNT
,@BATRANSACTIONCURRENCYID
,@BASECURRENCYID
,case when @TRANSACTIONCURRENCYID <> @BATRANSACTIONCURRENCYID then @BATBASEEXCHANGERATEID else @BASEEXCHANGERATEID end
,case when @TRANSACTIONCURRENCYID <> @BATRANSACTIONCURRENCYID then @BATORGANIZATIONEXCHANGERATEID else @ORGANIZATIONEXCHANGERATEID end
,@DEPOSITREFERENCE
,case when @TRANSACTIONCURRENCYID <> @BATRANSACTIONCURRENCYID then 1 else 0 end);
if @TRANSACTIONCURRENCYID <> @BATRANSACTIONCURRENCYID
begin
insert into @DISTRIBUTION
(GLTRANSACTIONID
,ACCOUNT
,GLACCOUNTID
,AMOUNT
,PROJECT
,TRANSACTIONTYPECODE
,REFERENCE
,TRANSACTIONAMOUNT
,ORGANIZATIONAMOUNT
,TRANSACTIONCURRENCYID
,BASECURRENCYID
,BASEEXCHANGERATEID
,ORGANIZATIONEXCHANGERATEID
,SYSTEMDISTRIBUTION)
values
(NEWID(),
@CURRENCYACCOUNT
,@CURRENCYACCOUNTID
,@AMOUNT
,' '
,CASE WHEN @CORRECTIONTYPECODE in (0, 2) THEN 1 ELSE 0 END
,'Intercurrency Balancing'
,@TRANSACTIONAMOUNT
,@ORGANIZATIONAMOUNT
,@TRANSACTIONCURRENCYID
,@BASECURRENCYID
,@BASEEXCHANGERATEID
,@ORGANIZATIONEXCHANGERATEID
,0)
insert into @DISTRIBUTION
(GLTRANSACTIONID, ACCOUNT, GLACCOUNTID, AMOUNT, PROJECT, TRANSACTIONTYPECODE
,TRANSACTIONAMOUNT
,ORGANIZATIONAMOUNT
,TRANSACTIONCURRENCYID
,BASECURRENCYID
,BASEEXCHANGERATEID
,ORGANIZATIONEXCHANGERATEID
,REFERENCE
,SYSTEMDISTRIBUTION)
values
(NEWID(),
@CURRENCYACCOUNT
,@CURRENCYACCOUNTID
,@TEMPBASEAMOUNT,
' ',
CASE WHEN @CORRECTIONTYPECODE in (0, 2) THEN 0 ELSE 1 END
,@TEMPTRANSACTIONAMOUNT
,@TEMPORGANIZATIONAMOUNT
,@BATRANSACTIONCURRENCYID
,@BASECURRENCYID
,@BATBASEEXCHANGERATEID
,@BATORGANIZATIONEXCHANGERATEID
,'Intercurrency Balancing'
,1)
end
insert into dbo.GLTRANSACTION(ID, TRANSACTIONTYPECODE, ACCOUNT, AMOUNT, PROJECT, REFERENCE, POSTSTATUSCODE, POSTDATE, JOURNAL, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED,GLACCOUNTID
,TRANSACTIONAMOUNT
,ORGANIZATIONAMOUNT
,TRANSACTIONCURRENCYID
,BASECURRENCYID
,BASEEXCHANGERATEID
,ORGANIZATIONEXCHANGERATEID
,SYSTEMDISTRIBUTION)
select
GLTRANSACTIONID,
TRANSACTIONTYPECODE,
ACCOUNT,
AMOUNT,
PROJECT,
REFERENCE,
@POSTSTATUSCODE,
@POSTDATE,
@JOURNAL,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE,
GLACCOUNTID
,TRANSACTIONAMOUNT
,ORGANIZATIONAMOUNT
,TRANSACTIONCURRENCYID
,BASECURRENCYID
,BASEEXCHANGERATEID
,ORGANIZATIONEXCHANGERATEID
,SYSTEMDISTRIBUTION
from @DISTRIBUTION;
insert into dbo.BANKACCOUNTDEPOSITCORRECTIONGLDISTRIBUTION(ID, PROJECT, REFERENCE, AMOUNT, ACCOUNT, TRANSACTIONTYPECODE, GLTRANSACTIONID, BANKACCOUNTDEPOSITCORRECTIONID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
,TRANSACTIONAMOUNT
,ORGANIZATIONAMOUNT
,TRANSACTIONCURRENCYID
,BASECURRENCYID
,BASEEXCHANGERATEID
,ORGANIZATIONEXCHANGERATEID)
select
NEWID(),
PROJECT,
REFERENCE,
AMOUNT,
ACCOUNT,
TRANSACTIONTYPECODE,
GLTRANSACTIONID,
@DEPOSITCORRECTIONID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
,TRANSACTIONAMOUNT
,ORGANIZATIONAMOUNT
,TRANSACTIONCURRENCYID
,BASECURRENCYID
,BASEEXCHANGERATEID
,ORGANIZATIONEXCHANGERATEID
from @DISTRIBUTION;
end