USP_BANKACCOUNTADJUSTMENT_CREATEDISTRIBUTION
Create a distribution for a given adjustment
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@BANKACCOUNTADJUSTMENTID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CURRENTDATE | datetime | IN | |
@PDACCOUNTSYSTEMID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure [dbo].[USP_BANKACCOUNTADJUSTMENT_CREATEDISTRIBUTION]
(
@BANKACCOUNTADJUSTMENTID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@CURRENTDATE datetime = null,
@PDACCOUNTSYSTEMID uniqueidentifier = null
)
as
begin
set nocount on;
declare @JOURNAL nvarchar(50) = 'Blackbaud Enterprise';
declare @PAYMENTREFERENCE nvarchar(100) = 'Bank Adjustment - Payment';
declare @DEPOSITREFERENCE nvarchar(100) = 'Bank Adjustment - Deposit';
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 @ADJUSTMENTTYPECODE tinyint;
declare @TRANSFERADJUSTMENTID uniqueidentifier;
declare @AMOUNT1 money;
declare @AMOUNT2 money;
declare @GLACCOUNT1ID uniqueidentifier;
declare @ACCOUNT1 nvarchar(100);
declare @GLACCOUNT2ID uniqueidentifier;
declare @ACCOUNT2 nvarchar(100);
declare @PDACCOUNTSEGMENTVALUE1ID uniqueidentifier = null;
declare @PDACCOUNTSEGMENTVALUE2ID uniqueidentifier = null;
declare @POSTSTATUSCODE tinyint;
declare @POSTDATE datetime;
declare @UNMAPPEDCOMPSEGMENT tinyint;
declare @TRANSACTIONAMOUNT1 money;
declare @TRANSACTIONAMOUNT2 money;
declare @ORGANIZATIONAMOUNT1 money;
declare @ORGANIZATIONAMOUNT2 money;
declare @TRANSACTIONCURRENCYID1 uniqueidentifier;
declare @TRANSACTIONCURRENCYID2 uniqueidentifier;
declare @BASECURRENCYID uniqueidentifier;
declare @BASEEXCHANGERATEID1 uniqueidentifier;
declare @BASEEXCHANGERATEID2 uniqueidentifier;
declare @ORGANIZATIONEXCHANGERATEID1 uniqueidentifier;
declare @ORGANIZATIONEXCHANGERATEID2 uniqueidentifier;
declare @REFERENCE nvarchar(100);
declare @DefaultAccountID uniqueidentifier;
declare @DefaultAccount nvarchar(100);
declare @ERRORMESSAGE nvarchar(255);
declare @SKIPACCOUNTERROR bit = 0;
declare @AccountSystem nvarchar(50);
declare @MAPPEDVALUES xml;
declare @PAYMENTMETHODTYPEID uniqueidentifier;
select @ADJUSTMENTTYPECODE = T.TRANSACTIONTYPECODE,
@TRANSFERADJUSTMENTID = BANKACCOUNTADJUSTMENT.TRANSFERADJUSTMENTID,
@AMOUNT1 = T.AMOUNT,
@AMOUNT2 = isnull(TRANSFER.AMOUNT, T.AMOUNT),
@GLACCOUNT1ID = BA1.GLACCOUNTID,
@ACCOUNT1 = A1.ACCOUNTNUMBER,
@GLACCOUNT2ID = BA2.GLACCOUNTID,
@ACCOUNT2 = A2.ACCOUNTNUMBER,
@PDACCOUNTSEGMENTVALUE1ID = BA1.PDACCOUNTSEGMENTVALUEID,
@PDACCOUNTSEGMENTVALUE2ID = BA2.PDACCOUNTSEGMENTVALUEID,
@POSTSTATUSCODE = T.POSTSTATUSCODE,
@POSTDATE = T.POSTDATE,
@PAYMENTREFERENCE = CASE WHEN Len(T.REFERENCE) > 0 THEN T.REFERENCE ELSE @PAYMENTREFERENCE END,
@DEPOSITREFERENCE = CASE WHEN Len(T.REFERENCE) > 0 THEN T.REFERENCE ELSE @DEPOSITREFERENCE END,
@PDACCOUNTSYSTEMID = BA1.PDACCOUNTSYSTEMID
,@TRANSACTIONAMOUNT1 = T.TRANSACTIONAMOUNT
,@TRANSACTIONAMOUNT2 = isnull(TRANSFER.TRANSACTIONAMOUNT, T.TRANSACTIONAMOUNT)
,@ORGANIZATIONAMOUNT1 = T.ORGANIZATIONAMOUNT
,@ORGANIZATIONAMOUNT2 = isnull(TRANSFER.ORGANIZATIONAMOUNT, T.ORGANIZATIONAMOUNT)
,@TRANSACTIONCURRENCYID1 = BA1.TRANSACTIONCURRENCYID
,@TRANSACTIONCURRENCYID2 = isnull(BA2.TRANSACTIONCURRENCYID, BA1.TRANSACTIONCURRENCYID)
,@BASECURRENCYID = T.BASECURRENCYID
,@BASEEXCHANGERATEID1 = T.BASEEXCHANGERATEID
,@BASEEXCHANGERATEID2 = isnull(TRANSFER.BASEEXCHANGERATEID, T.BASEEXCHANGERATEID)
,@ORGANIZATIONEXCHANGERATEID1 = T.ORGANIZATIONEXCHANGERATEID
,@ORGANIZATIONEXCHANGERATEID2 = isnull(TRANSFER.ORGANIZATIONEXCHANGERATEID, T.ORGANIZATIONEXCHANGERATEID)
,@REFERENCE = T.REFERENCE
from dbo.BANKACCOUNTADJUSTMENT
inner join dbo.BANKACCOUNTTRANSACTION T on BANKACCOUNTADJUSTMENT.ID = T.ID
inner join dbo.BANKACCOUNT BA1 on BA1.ID = T.BANKACCOUNTID
left outer join dbo.GLACCOUNT A1 on A1.ID = BA1.GLACCOUNTID
left outer join dbo.BANKACCOUNTTRANSACTION TRANSFER on TRANSFER.ID = BANKACCOUNTADJUSTMENT.TRANSFERADJUSTMENTID
left outer join dbo.BANKACCOUNT BA2 on BA2.ID = TRANSFER.BANKACCOUNTID
left outer join dbo.GLACCOUNT A2 on A2.ID = BA2.GLACCOUNTID
where BANKACCOUNTADJUSTMENT.ID = @BANKACCOUNTADJUSTMENTID;
if @ADJUSTMENTTYPECODE = 16
set @PAYMENTREFERENCE = @DEPOSITREFERENCE;
else if @ADJUSTMENTTYPECODE = 17
set @DEPOSITREFERENCE = @PAYMENTREFERENCE
if @ADJUSTMENTTYPECODE in (16, 17)
select @PAYMENTMETHODTYPEID = MT.ID from dbo.PDACCOUNTCODEMAPPAYMENTMETHODTYPE MT where MT.OFFICEID = 8 and MT.NAMEID = CASE @ADJUSTMENTTYPECODE WHEN 16 THEN 1 WHEN 17 THEN 2 END;
select @DefaultAccountID = PDACCOUNTSYSTEM.DEFAULTGLACCOUNTID, @DefaultAccount = GLACCOUNT.ACCOUNTNUMBER, @AccountSystem = PDACCOUNTSYSTEM.NAME
from dbo.PDACCOUNTSYSTEM
left join dbo.GLACCOUNT on PDACCOUNTSYSTEM.DEFAULTGLACCOUNTID = GLACCOUNT.ID
where PDACCOUNTSYSTEM.ID = @PDACCOUNTSYSTEMID
if @GLACCOUNT2ID is null
begin
if @ADJUSTMENTTYPECODE in (16, 17)
begin
select @PDACCOUNTSEGMENTVALUE2ID = CREDITPDACCOUNTSEGMENTVALUEID,
@GLACCOUNT2ID = CREDITGLACCOUNTID
from PDACCOUNTCODEMAPPING
where OFFICEID = 8 and PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID and (PAYMENTMETHOD & CASE @ADJUSTMENTTYPECODE WHEN 16 THEN 1 WHEN 17 THEN 2 END) > 0;
if @PDACCOUNTSEGMENTVALUE2ID is null and @GLACCOUNT2ID is null
begin
declare @OFFICENAME nvarchar(100);
declare @ADJUSTMENTTYPE nvarchar(100);
select @OFFICENAME = NAME from dbo.PDACCOUNTCODEMAPOFFICE where OFFICEID = 8;
select @ADJUSTMENTTYPE = RIGHT(TRANSACTIONTYPE, len(TRANSACTIONTYPE) - 11) from dbo.BANKACCOUNTTRANSACTION where ID = @BANKACCOUNTADJUSTMENTID;
set @ERRORMESSAGE = 'In account system "' + @AccountSystem + '", a mapping does not exist for Office: ' + @OFFICENAME + ', Adjustment type: ' + @ADJUSTMENTTYPE
if @DefaultAccountID is null
raiserror(@ERRORMESSAGE, 13, 1)
else if not exists(select TRANSACTIONID from dbo.GLACCOUNTMAPPINGERROR where TRANSACTIONID = @BANKACCOUNTADJUSTMENTID and DELETED = 0 and ERRORMESSAGE = @ERRORMESSAGE)
begin
set @MAPPEDVALUES = (select tv1.*, @ERRORMESSAGE as ERRORMESSAGE, 1 as ERRORCODE from dbo.UFN_GETGENERICACCOUNTMAPPINGSTRUCTURE(@PDACCOUNTSYSTEMID, 8, null, 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 (@BANKACCOUNTADJUSTMENTID, 100, @ERRORMESSAGE, @MAPPEDVALUES, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
end
select @GLACCOUNT2ID = @DefaultAccountID, @ACCOUNT2 = @DefaultAccount
end
end
end
if (@GLACCOUNT1ID is null or @GLACCOUNT2ID is null)
begin
if ((select COUNT(ID) from dbo.PDACCOUNTSTRUCTURE where SEGMENTTYPE = 3 and PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID)) != (select COUNT(a.ID) from dbo.PDACCOUNTSEGMENTMAPPING a join dbo.PDACCOUNTSTRUCTURE b on a.PDACCOUNTSTRUCTUREID = b.ID where ISDEFAULT = 1 and b.PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID and PDACCOUNTSEGMENTVALUEID is not null)
begin
set @ERRORMESSAGE = 'In account system "' + @AccountSystem + '", default segment mappings must be defined in order to generate GL distributions for this transaction.'
if @DefaultAccountID is null
raiserror(@ERRORMESSAGE, 13, 1);
else if not exists(select TRANSACTIONID from dbo.GLACCOUNTMAPPINGERROR where TRANSACTIONID = @BANKACCOUNTADJUSTMENTID and DELETED = 0 and ERRORMESSAGE = @ERRORMESSAGE)
begin
set @MAPPEDVALUES = (select tv1.*, @ERRORMESSAGE as ERRORMESSAGE, 2 as ERRORCODE from dbo.UFN_GETGENERICACCOUNTMAPPINGSTRUCTURE(@PDACCOUNTSYSTEMID, 8, null, 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 (@BANKACCOUNTADJUSTMENTID, 100, @ERRORMESSAGE, @MAPPEDVALUES, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
end
set @SKIPACCOUNTERROR = 1
end
select @UNMAPPEDCOMPSEGMENT = dbo.UFN_BANKACCOUNTADJUSTMENT_GETUNMAPPEDCOMPOSITESEGMENT_BYACCOUNTSYSTEM(@PDACCOUNTSYSTEMID)
if @UNMAPPEDCOMPSEGMENT = 1
begin
set @ERRORMESSAGE = 'In account system "' + @AccountSystem + '", default segment mappings must be defined in order to generate GL distributions for this transaction.'
if @DefaultAccountID is null
raiserror(@ERRORMESSAGE, 13, 1);
else if not exists(select TRANSACTIONID from dbo.GLACCOUNTMAPPINGERROR where TRANSACTIONID = @BANKACCOUNTADJUSTMENTID and DELETED = 0 and ERRORMESSAGE = @ERRORMESSAGE)
begin
set @MAPPEDVALUES = (select tv1.*, @ERRORMESSAGE as ERRORMESSAGE, 2 as ERRORCODE from dbo.UFN_GETGENERICACCOUNTMAPPINGSTRUCTURE(@PDACCOUNTSYSTEMID, 8, null, 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 (@BANKACCOUNTADJUSTMENTID, 100, @ERRORMESSAGE, @MAPPEDVALUES, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
end
set @SKIPACCOUNTERROR = 1
end
end
if @GLACCOUNT1ID is null
begin
select @ACCOUNT1 = dbo.UFN_GLACCOUNT_GETDEFAULTACCOUNTSTRING_BYACCOUNTSYSTEM(@PDACCOUNTSEGMENTVALUE1ID,@PDACCOUNTSYSTEMID);
select @GLACCOUNT1ID = ID from GLACCOUNT where ACCOUNTNUMBER = @ACCOUNT1 and PDACCOUNTSYSTEMID=@PDACCOUNTSYSTEMID;
if @GLACCOUNT1ID is null
begin
set @ERRORMESSAGE = 'In account system "' + @AccountSystem + '", the account "' + @ACCOUNT1 + '" does not exist. The action could not be completed.'
if @DefaultAccountID is null
raiserror(@ERRORMESSAGE, 13, 1);
else if not exists(select TRANSACTIONID from dbo.GLACCOUNTMAPPINGERROR where TRANSACTIONID = @BANKACCOUNTADJUSTMENTID 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, 8, null, 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 (@BANKACCOUNTADJUSTMENTID, 100, @ERRORMESSAGE, @MAPPEDVALUES, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
end
select @GLACCOUNT1ID = @DefaultAccountID, @ACCOUNT1 = @DefaultAccount
end
end
if @GLACCOUNT2ID is null
begin
select @ACCOUNT2 = dbo.UFN_GLACCOUNT_GETDEFAULTACCOUNTSTRING_BYACCOUNTSYSTEM(@PDACCOUNTSEGMENTVALUE2ID,@PDACCOUNTSYSTEMID);
select @GLACCOUNT2ID = ID from GLACCOUNT where ACCOUNTNUMBER = @ACCOUNT2 and PDACCOUNTSYSTEMID=@PDACCOUNTSYSTEMID;
if @GLACCOUNT2ID is null
begin
set @ERRORMESSAGE = 'In account system "' + @AccountSystem + '", the account "' + @ACCOUNT2 + '" does not exist. The action could not be completed.'
if @DefaultAccountID is null
raiserror(@ERRORMESSAGE, 13, 1);
else if not exists(select TRANSACTIONID from dbo.GLACCOUNTMAPPINGERROR where TRANSACTIONID = @BANKACCOUNTADJUSTMENTID 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, 8, null, 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 (@BANKACCOUNTADJUSTMENTID, 100, @ERRORMESSAGE, @MAPPEDVALUES, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
end
select @GLACCOUNT2ID = @DefaultAccountID, @ACCOUNT2 = @DefaultAccount
end
end
if @ACCOUNT2 is null
select @ACCOUNT2 = ACCOUNTNUMBER from GLACCOUNT where ID = @GLACCOUNT2ID;
--Get the intercurrency account when the transaction currencies are not the same.
declare @CURRENCYACCOUNTID uniqueidentifier;
declare @CURRENCYACCOUNTSEGMENTVALUEID uniqueidentifier;
declare @CURRENCYACCOUNT nvarchar(100);
if @TRANSACTIONCURRENCYID1 <> @TRANSACTIONCURRENCYID2
begin
set @ERRORMESSAGE = null
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 = @BANKACCOUNTADJUSTMENTID and DELETED = 0 and ERRORMESSAGE = @ERRORMESSAGE)
insert into dbo.GLACCOUNTMAPPINGERROR ([TRANSACTIONID],[TRANSACTIONTYPECODE],[ERRORMESSAGE],[MAPPEDVALUES],[ADDEDBYID],[CHANGEDBYID],[DATEADDED],[DATECHANGED])
values (@BANKACCOUNTADJUSTMENTID, 100, @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;
if @CURRENCYACCOUNTID is null
begin
set @ERRORMESSAGE = 'In account system "' + @AccountSystem + '", the account "' + @CURRENCYACCOUNT + '" does not exist. The action could not be completed.'
if @DefaultAccountID is null
raiserror(@ERRORMESSAGE, 13, 1);
else if not exists(select TRANSACTIONID from dbo.GLACCOUNTMAPPINGERROR where TRANSACTIONID = @BANKACCOUNTADJUSTMENTID 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, 8, null, 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 (@BANKACCOUNTADJUSTMENTID, 100, @ERRORMESSAGE,@MAPPEDVALUES, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
end
set @CURRENCYACCOUNTID = @DefaultAccountID
set @CURRENCYACCOUNT = @DefaultAccount
end
end
else
select @CURRENCYACCOUNT = ACCOUNTNUMBER from dbo.GLACCOUNT where ID = @CURRENCYACCOUNTID;
end
if @AMOUNT1 <> @AMOUNT2 or @ORGANIZATIONAMOUNT1 <> @ORGANIZATIONAMOUNT2
begin
declare @AMOUNTS UDT_GAINLOSS_AMOUNTS;
insert into @AMOUNTS
(ID, NEWBASEAMOUNT, ORIGINALBASEAMOUNT, NEWORGANIZATIONAMOUNT, ORIGINALORGANIZATIONAMOUNT)
values
(@TRANSFERADJUSTMENTID, @AMOUNT1, @AMOUNT2, @ORGANIZATIONAMOUNT1, @ORGANIZATIONAMOUNT2)
declare @DEBITSIDE bit;
declare @CURRENCYID uniqueidentifier;
set @DEBITSIDE = CASE WHEN @ADJUSTMENTTYPECODE = 32 THEN 0 ELSE 1 END;
set @CURRENCYID = CASE WHEN @ADJUSTMENTTYPECODE = 32 THEN @TRANSACTIONCURRENCYID1 ELSE @TRANSACTIONCURRENCYID2 END;
insert into @DISTRIBUTION(ID, GLTRANSACTIONID, ACCOUNT, GLACCOUNTID, TRANSACTIONTYPECODE, AMOUNT, ORGANIZATIONAMOUNT, REFERENCE, ERRORMESSAGE, MAPPEDVALUES)
exec dbo.USP_GET_GAINLOSSDISTRIBUTIONS
@AMOUNTS
,@DEBITSIDE
,@CURRENCYID
,@PDACCOUNTSYSTEMID
insert into dbo.GLACCOUNTMAPPINGERROR ([TRANSACTIONID],[TRANSACTIONTYPECODE],[ERRORMESSAGE],[MAPPEDVALUES],[ADDEDBYID],[CHANGEDBYID],[DATEADDED],[DATECHANGED])
select distinct @BANKACCOUNTADJUSTMENTID, 100, 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 = @BANKACCOUNTADJUSTMENTID and DELETED = 0)
update @DISTRIBUTION
set PROJECT = ' '
,TRANSACTIONAMOUNT = 0
,BASECURRENCYID = @BASECURRENCYID
,SYSTEMDISTRIBUTION = 1
if @TRANSACTIONCURRENCYID1 <> @TRANSACTIONCURRENCYID2
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
if @ADJUSTMENTTYPECODE in (32, 33)
begin
if len(@REFERENCE) > 0
begin
set @PAYMENTREFERENCE = @REFERENCE;
set @DEPOSITREFERENCE = @REFERENCE;
end
else
begin
set @PAYMENTREFERENCE = 'Bank Adjustment - Transfer Out';
set @DEPOSITREFERENCE = 'Bank Adjustment - Transfer In';
end
end
insert into @DISTRIBUTION
(GLTRANSACTIONID, ACCOUNT, GLACCOUNTID, AMOUNT, PROJECT, TRANSACTIONTYPECODE
,TRANSACTIONAMOUNT
,ORGANIZATIONAMOUNT
,TRANSACTIONCURRENCYID
,BASECURRENCYID
,BASEEXCHANGERATEID
,ORGANIZATIONEXCHANGERATEID
,SYSTEMDISTRIBUTION)
values
(NEWID(),
@ACCOUNT1,
@GLACCOUNT1ID,
@AMOUNT1,
' ',
CASE WHEN @ADJUSTMENTTYPECODE in (16, 33) THEN 0 ELSE 1 END
,@TRANSACTIONAMOUNT1
,@ORGANIZATIONAMOUNT1
,@TRANSACTIONCURRENCYID1
,@BASECURRENCYID
,@BASEEXCHANGERATEID1
,@ORGANIZATIONEXCHANGERATEID1
,0)
insert into @DISTRIBUTION
(GLTRANSACTIONID, ACCOUNT, GLACCOUNTID, AMOUNT, PROJECT, TRANSACTIONTYPECODE
,TRANSACTIONAMOUNT
,ORGANIZATIONAMOUNT
,TRANSACTIONCURRENCYID
,BASECURRENCYID
,BASEEXCHANGERATEID
,ORGANIZATIONEXCHANGERATEID
,SYSTEMDISTRIBUTION)
values
(NEWID(),
@ACCOUNT2,
@GLACCOUNT2ID,
@AMOUNT2,
' ',
CASE WHEN @ADJUSTMENTTYPECODE in (16, 33) THEN 1 ELSE 0 END
,@TRANSACTIONAMOUNT2
,@ORGANIZATIONAMOUNT2
,@TRANSACTIONCURRENCYID2
,@BASECURRENCYID
,@BASEEXCHANGERATEID2
,@ORGANIZATIONEXCHANGERATEID2
,CASE WHEN @TRANSACTIONCURRENCYID1 <> @TRANSACTIONCURRENCYID2 THEN 1 ELSE 0 END)
if @TRANSACTIONCURRENCYID1 <> @TRANSACTIONCURRENCYID2
begin
insert into @DISTRIBUTION
(GLTRANSACTIONID, ACCOUNT, GLACCOUNTID, AMOUNT, PROJECT, TRANSACTIONTYPECODE
,TRANSACTIONAMOUNT
,ORGANIZATIONAMOUNT
,TRANSACTIONCURRENCYID
,BASECURRENCYID
,BASEEXCHANGERATEID
,ORGANIZATIONEXCHANGERATEID
,REFERENCE
,SYSTEMDISTRIBUTION)
values
(NEWID(),
@CURRENCYACCOUNT
,@CURRENCYACCOUNTID
,@AMOUNT1,
' ',
CASE WHEN @ADJUSTMENTTYPECODE = 33 THEN 1 ELSE 0 END
,@TRANSACTIONAMOUNT1
,@ORGANIZATIONAMOUNT1
,@TRANSACTIONCURRENCYID1
,@BASECURRENCYID
,@BASEEXCHANGERATEID1
,@ORGANIZATIONEXCHANGERATEID1
,'Intercurrency Balancing'
,0)
insert into @DISTRIBUTION
(GLTRANSACTIONID, ACCOUNT, GLACCOUNTID, AMOUNT, PROJECT, TRANSACTIONTYPECODE
,TRANSACTIONAMOUNT
,ORGANIZATIONAMOUNT
,TRANSACTIONCURRENCYID
,BASECURRENCYID
,BASEEXCHANGERATEID
,ORGANIZATIONEXCHANGERATEID
,REFERENCE
,SYSTEMDISTRIBUTION)
values
(NEWID(),
@CURRENCYACCOUNT
,@CURRENCYACCOUNTID
,@AMOUNT2,
' ',
CASE WHEN @ADJUSTMENTTYPECODE = 33 THEN 0 ELSE 1 END
,@TRANSACTIONAMOUNT2
,@ORGANIZATIONAMOUNT2
,@TRANSACTIONCURRENCYID2
,@BASECURRENCYID
,@BASEEXCHANGERATEID2
,@ORGANIZATIONEXCHANGERATEID2
,'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,
isnull(REFERENCE, CASE WHEN TRANSACTIONTYPECODE = 0 THEN @DEPOSITREFERENCE ELSE @PAYMENTREFERENCE END),
@POSTSTATUSCODE,
@POSTDATE,
@JOURNAL,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE,
GLACCOUNTID
,TRANSACTIONAMOUNT
,ORGANIZATIONAMOUNT
,TRANSACTIONCURRENCYID
,BASECURRENCYID
,BASEEXCHANGERATEID
,ORGANIZATIONEXCHANGERATEID
,SYSTEMDISTRIBUTION
from @DISTRIBUTION;
insert into dbo.BANKACCOUNTTRANSACTIONGLDISTRIBUTION(ID, PROJECT, REFERENCE, AMOUNT, ACCOUNT, TRANSACTIONTYPECODE, GLTRANSACTIONID, BANKACCOUNTTRANSACTIONID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
,TRANSACTIONAMOUNT
,ORGANIZATIONAMOUNT
,TRANSACTIONCURRENCYID
,BASECURRENCYID
,BASEEXCHANGERATEID
,ORGANIZATIONEXCHANGERATEID)
select
NEWID(),
PROJECT,
isnull(REFERENCE, CASE WHEN TRANSACTIONTYPECODE = 0 THEN @DEPOSITREFERENCE ELSE @PAYMENTREFERENCE END),
AMOUNT,
ACCOUNT,
TRANSACTIONTYPECODE,
GLTRANSACTIONID,
@BANKACCOUNTADJUSTMENTID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
,TRANSACTIONAMOUNT
,ORGANIZATIONAMOUNT
,TRANSACTIONCURRENCYID
,BASECURRENCYID
,BASEEXCHANGERATEID
,ORGANIZATIONEXCHANGERATEID
from @DISTRIBUTION;
end