USP_DATAFORMTEMPLATE_EDIT_BANKACCOUNTADJUSTMENT2
The save procedure used by the edit dataform template "Bank Account Adjustment Edit Data Form".
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | The input ID parameter indicating the ID of the record being edited. |
@CHANGEAGENTID | uniqueidentifier | IN | Input parameter indicating the ID of the change agent invoking the procedure. |
@ADJUSTMENTDATE | datetime | IN | Adjustment date |
@AMOUNT | decimal(19, 4) | IN | Amount |
@REFERENCE | nvarchar(100) | IN | Reference |
@POSTSTATUSCODE | tinyint | IN | Post status |
@POSTDATE | datetime | IN | Post date |
@BASEEXCHANGERATEID | uniqueidentifier | IN | Exchange rate |
@EXCHANGERATE | decimal(20, 8) | IN | Exchange rate |
@TRANSFERBASEEXCHANGERATEID | uniqueidentifier | IN | Exchange rate |
@TRANSFEREXCHANGERATE | decimal(20, 8) | IN | Exchange rate |
@TRANSFERBANKACCOUNTBASEEXCHANGERATEID | uniqueidentifier | IN | Exchange rate |
@TRANSFERBANKACCOUNTEXCHANGERATE | decimal(20, 8) | IN | Exchange rate |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_BANKACCOUNTADJUSTMENT2
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@ADJUSTMENTDATE datetime,
@AMOUNT decimal(19,4),
@REFERENCE nvarchar(100),
@POSTSTATUSCODE tinyint,
@POSTDATE datetime,
@BASEEXCHANGERATEID uniqueidentifier,
@EXCHANGERATE decimal(20,8),
@TRANSFERBASEEXCHANGERATEID uniqueidentifier,
@TRANSFEREXCHANGERATE decimal(20,8),
@TRANSFERBANKACCOUNTBASEEXCHANGERATEID uniqueidentifier,
@TRANSFERBANKACCOUNTEXCHANGERATE decimal(20,8)
) as
set nocount on;
-- Check GL business rule for this account system and set to 'Do not post' if needed.
-- ****
declare @PDACCOUNTSYSTEMID uniqueidentifier;
select @PDACCOUNTSYSTEMID = PDACCOUNTSYSTEMID
from dbo.BANKACCOUNTTRANSACTION as BAT
inner join dbo.BANKACCOUNT as BA on BAT.BANKACCOUNTID = BA.ID
where BAT.ID = @ID;
declare @ALLOWGLDISTRIBUTIONS bit;
set @ALLOWGLDISTRIBUTIONS = dbo.UFN_PDACCOUNTSYSTEM_ALLOWGLDISTRIBUTIONS(@PDACCOUNTSYSTEMID);
if @ALLOWGLDISTRIBUTIONS = 0
set @POSTSTATUSCODE = 2 -- Do not post
-- ****
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
declare @CURRENTDATE datetime
set @CURRENTDATE = getdate()
declare @ADJUSTMENTTYPECODE tinyint;
declare @ISORIGINALADJUSTMENT bit;
declare @ORIGINALAMOUNT money;
declare @ORIGINALREFERENCE nvarchar(100);
declare @ORIGINALPOSTSTATUSCODE tinyint;
declare @ORIGINALBASEEXCHANGERATEID uniqueidentifier;
declare @ORIGINALEXCHANGERATE decimal(20,8);
declare @ORIGINALTRANSFERBASEEXCHANGERATEID uniqueidentifier;
declare @HADBANKACCOUNTTRANSFERSPOTRATE bit = 0;
declare @HADORIGINALTOBASESPOTRATE bit = 0;
declare @HADCOPYTOBASESPOTRATE bit = 0;
declare @ORIGINALTRANSFEREXCHANGERATE decimal(20,8);
declare @ORIGINALTRANSFERBANKACCOUNTBASEEXCHANGERATEID uniqueidentifier;
declare @ORIGINALTRANSFERBANKACCOUNTEXCHANGERATE decimal(20,8);
declare @TRANSACTIONCURRENCYID uniqueidentifier;
declare @BASECURRENCYID uniqueidentifier;
declare @RECALCULATEDISTRIBUTION bit;
declare @ORIGINALORGEXCHANGERATEID uniqueidentifier;
declare @ORIGINALTRANSFERORGEXCHANGERATEID uniqueidentifier;
select
@ADJUSTMENTTYPECODE = BAT.TRANSACTIONTYPECODE,
@ISORIGINALADJUSTMENT = BAA.ISORIGINALADJUSTMENT,
@ORIGINALAMOUNT = BAT.TRANSACTIONAMOUNT,
@ORIGINALREFERENCE = BAT.REFERENCE,
@ORIGINALPOSTSTATUSCODE = BAT.POSTSTATUSCODE,
@ORIGINALBASEEXCHANGERATEID = ORIGINALTOBASE.ID,
@ORIGINALEXCHANGERATE = ORIGINALTOBASE.RATE,
@ORIGINALTRANSFERBASEEXCHANGERATEID = COPYTOBASE.ID,
@ORIGINALTRANSFEREXCHANGERATE = COPYTOBASE.RATE,
@ORIGINALTRANSFERBANKACCOUNTBASEEXCHANGERATEID = BANKACCOUNTTRANSFER.ID,
@ORIGINALTRANSFERBANKACCOUNTEXCHANGERATE = BANKACCOUNTTRANSFER.RATE,
@TRANSACTIONCURRENCYID = BA.TRANSACTIONCURRENCYID,
@BASECURRENCYID = BAT.BASECURRENCYID,
@ORIGINALORGEXCHANGERATEID = BAT.ORGANIZATIONEXCHANGERATEID,
@ORIGINALTRANSFERORGEXCHANGERATEID = BAT_COPY.ORGANIZATIONEXCHANGERATEID,
@HADBANKACCOUNTTRANSFERSPOTRATE = case when BANKACCOUNTTRANSFER.TYPECODE = 2 then 1 else 0 end,
@HADORIGINALTOBASESPOTRATE = case when ORIGINALTOBASE.TYPECODE = 2 then 1 else 0 end,
@HADCOPYTOBASESPOTRATE = case when COPYTOBASE.TYPECODE = 2 then 1 else 0 end
from dbo.BANKACCOUNTTRANSACTION as BAT
inner join dbo.BANKACCOUNTADJUSTMENT as BAA on BAT.ID = BAA.ID
inner join dbo.BANKACCOUNT as BA on BAT.BANKACCOUNTID = BA.ID
left outer join dbo.CURRENCYEXCHANGERATE as BANKACCOUNTTRANSFER on BANKACCOUNTTRANSFER.ID = BAA.EXCHANGERATEID
left outer join dbo.CURRENCYEXCHANGERATE as ORIGINALTOBASE on ORIGINALTOBASE.ID = BAT.BASEEXCHANGERATEID
left outer join dbo.BANKACCOUNTTRANSACTION as BAT_COPY on BAT_COPY.ID = BAA.TRANSFERADJUSTMENTID
left outer join dbo.BANKACCOUNT as BA_COPY on BA_COPY.ID = BAT_COPY.BANKACCOUNTID
left outer join dbo.CURRENCYEXCHANGERATE as COPYTOBASE on COPYTOBASE.ID = BAT_COPY.BASEEXCHANGERATEID
where BAT.ID = @ID;
if (@BASEEXCHANGERATEID = '00000000-0000-0000-0000-000000000001'
and ((not @ORIGINALEXCHANGERATE is null) and @ORIGINALEXCHANGERATE = @EXCHANGERATE))
set @BASEEXCHANGERATEID = @ORIGINALBASEEXCHANGERATEID;
if (@TRANSFERBASEEXCHANGERATEID = '00000000-0000-0000-0000-000000000001'
and ((not @ORIGINALTRANSFEREXCHANGERATE is null) and @ORIGINALTRANSFEREXCHANGERATE = @TRANSFEREXCHANGERATE))
set @TRANSFERBASEEXCHANGERATEID = @ORIGINALTRANSFERBASEEXCHANGERATEID;
if (@TRANSFERBANKACCOUNTBASEEXCHANGERATEID = '00000000-0000-0000-0000-000000000001'
and ((not @ORIGINALTRANSFERBANKACCOUNTEXCHANGERATE is null) and @ORIGINALTRANSFERBANKACCOUNTEXCHANGERATE = @TRANSFERBANKACCOUNTEXCHANGERATE))
set @TRANSFERBANKACCOUNTBASEEXCHANGERATEID = @ORIGINALTRANSFERBANKACCOUNTBASEEXCHANGERATEID;
declare @DUMMYID uniqueidentifier = newid();
if isnull(@BASEEXCHANGERATEID, @DUMMYID) != isnull(@ORIGINALBASEEXCHANGERATEID, @DUMMYID)
or isnull(@TRANSFERBASEEXCHANGERATEID, @DUMMYID) != isnull(@ORIGINALTRANSFERBASEEXCHANGERATEID, @DUMMYID)
or isnull(@TRANSFERBANKACCOUNTBASEEXCHANGERATEID, @DUMMYID) != isnull(@ORIGINALTRANSFERBANKACCOUNTBASEEXCHANGERATEID, @DUMMYID)
set @RECALCULATEDISTRIBUTION = 1;
begin try
--Add a spot exchange rate if an existing rate hasn't
--been selected, the base and transaction currencies are different, and the rate
--entered isn't zero (which indicates that the user wants to enter the record without a rate).
if @BASEEXCHANGERATEID = '00000000-0000-0000-0000-000000000001'
begin
set @BASEEXCHANGERATEID = newid()
insert into dbo.CURRENCYEXCHANGERATE(
ID,
FROMCURRENCYID,
TOCURRENCYID,
RATE,
ASOFDATE,
TYPECODE,
SOURCECODEID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
values(
@BASEEXCHANGERATEID,
@TRANSACTIONCURRENCYID,
@BASECURRENCYID,
@EXCHANGERATE,
@ADJUSTMENTDATE,
2,
null,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
);
end
declare @BASEAMOUNT money;
declare @ORGANIZATIONAMOUNT money;
declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;
declare @ORGANIZATIONCURRENCYID uniqueidentifier;
declare @ORGAMOUNTORIGINCODE tinyint;
declare @ORGCURRENCYID uniqueidentifier;
declare @ORGCURRENCYNAME nvarchar(100);
select @ORGAMOUNTORIGINCODE = ORGANIZATIONAMOUNTORIGINCODE from dbo.MULTICURRENCYCONFIGURATION;
select @ORGCURRENCYID = ID, @ORGCURRENCYNAME = NAME from dbo.CURRENCY where ISORGANIZATIONCURRENCY = 1;
exec dbo.USP_CURRENCY_GETCURRENCYVALUES @AMOUNT, @ADJUSTMENTDATE, @BASECURRENCYID, @BASEEXCHANGERATEID output, @TRANSACTIONCURRENCYID output, @BASEAMOUNT output, @ORGANIZATIONCURRENCYID output, @ORGANIZATIONAMOUNT output, @ORGANIZATIONEXCHANGERATEID output, 1;
if (@ORGAMOUNTORIGINCODE = 1 and @TRANSACTIONCURRENCYID <> @ORGCURRENCYID) or (@ORGAMOUNTORIGINCODE = 0 and @BASECURRENCYID <> @ORGCURRENCYID)
if @ORGANIZATIONEXCHANGERATEID is null
begin
declare @CURRENCYNAME nvarchar(100);
select @CURRENCYNAME = NAME from dbo.CURRENCY where (ID = @TRANSACTIONCURRENCYID and @ORGAMOUNTORIGINCODE = 1) or (ID = @BASECURRENCYID and @ORGAMOUNTORIGINCODE = 0)
declare @errormessage nvarchar(200);
set @errormessage = 'A corporate exchange rate does not exist for ' + @CURRENCYNAME + ' to ' + @ORGCURRENCYNAME
raiserror (@errormessage, 16, 1);
end
else if isnull(@ORIGINALORGEXCHANGERATEID, @DUMMYID) != isnull(@ORGANIZATIONEXCHANGERATEID, @DUMMYID)
set @RECALCULATEDISTRIBUTION = 1;
-- handle updating the data
if @ISORIGINALADJUSTMENT = 1
begin
update dbo.BANKACCOUNTTRANSACTION set
TRANSACTIONDATE = @ADJUSTMENTDATE,
AMOUNT = @BASEAMOUNT,
REFERENCE = @REFERENCE,
POSTSTATUSCODE = @POSTSTATUSCODE,
POSTDATE = @POSTDATE,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE,
BASECURRENCYID = @BASECURRENCYID,
ORGANIZATIONAMOUNT = @ORGANIZATIONAMOUNT,
ORGANIZATIONEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID,
TRANSACTIONAMOUNT = @AMOUNT,
BASEEXCHANGERATEID = @BASEEXCHANGERATEID
where ID = @ID;
end
else
update dbo.BANKACCOUNTTRANSACTION set
TRANSACTIONDATE = @ADJUSTMENTDATE,
AMOUNT = @BASEAMOUNT,
REFERENCE = @REFERENCE,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE,
BASECURRENCYID = @BASECURRENCYID,
ORGANIZATIONAMOUNT = @ORGANIZATIONAMOUNT,
ORGANIZATIONEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID,
TRANSACTIONAMOUNT = @AMOUNT,
BASEEXCHANGERATEID = @BASEEXCHANGERATEID
where ID = @ID
if @ADJUSTMENTTYPECODE in (32, 33)
begin
declare @TRANSFERADJUSTMENTID uniqueidentifier;
declare @AMOUNT_BANKB money;
declare @TRANSACTIONCURRENCYID_BANKB uniqueidentifier;
declare @BASECURRENCYID_BANKB uniqueidentifier;
declare @BASEAMOUNT_BANKB money;
declare @ORGANIZATIONAMOUNT_BANKB money;
declare @ORGANIZATIONEXCHANGERATEID_BANKB uniqueidentifier;
select @TRANSFERADJUSTMENTID = TRANSFERADJUSTMENTID from BANKACCOUNTADJUSTMENT where ID = @ID;
select
@TRANSACTIONCURRENCYID_BANKB = BA.TRANSACTIONCURRENCYID,
@BASECURRENCYID_BANKB = BAT.BASECURRENCYID
from dbo.BANKACCOUNTTRANSACTION as BAT
inner join dbo.BANKACCOUNT as BA on BAT.BANKACCOUNTID = BA.ID
where BAT.ID = @TRANSFERADJUSTMENTID
-- If the transaction currency of Bank A is different from the transaction currency of Bank B then TRANSFERBANKACCOUNTBASEEXCHANGERATEID is required
-- when entering the original adjustment.
if (@TRANSACTIONCURRENCYID <> @TRANSACTIONCURRENCYID_BANKB) and (@TRANSFERBANKACCOUNTBASEEXCHANGERATEID is null)
raiserror ('A transfer in or transfer out adjustment with multicurrency where the transaction currencies are different requires a transfer bank account base exchange rate ID.', 16, 1);
if (@TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID_BANKB) and (@TRANSFERBANKACCOUNTBASEEXCHANGERATEID is not null)
set @TRANSFERBANKACCOUNTBASEEXCHANGERATEID = null
if @TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID_BANKB
set @AMOUNT_BANKB = @AMOUNT
else
begin
--Add a spot exchange rate if an existing rate hasn't
--been selected, the base and transaction currencies are different, and the rate
--entered isn't zero (which indicates that the user wants to enter the record without a rate).
if @TRANSFERBANKACCOUNTBASEEXCHANGERATEID = '00000000-0000-0000-0000-000000000001'
begin
set @TRANSFERBANKACCOUNTBASEEXCHANGERATEID = newid()
insert into dbo.CURRENCYEXCHANGERATE(
ID,
FROMCURRENCYID,
TOCURRENCYID,
RATE,
ASOFDATE,
TYPECODE,
SOURCECODEID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
values(
@TRANSFERBANKACCOUNTBASEEXCHANGERATEID,
@TRANSACTIONCURRENCYID,
@TRANSACTIONCURRENCYID_BANKB,
@TRANSFERBANKACCOUNTEXCHANGERATE,
@ADJUSTMENTDATE,
2,
null,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
);
end
set @AMOUNT_BANKB = dbo.UFN_CURRENCY_CONVERT(@AMOUNT, @TRANSFERBANKACCOUNTBASEEXCHANGERATEID)
end
--Add a spot exchange rate if an existing rate hasn't
--been selected, the base and transaction currencies are different, and the rate
--entered isn't zero (which indicates that the user wants to enter the record without a rate).
if @TRANSFERBASEEXCHANGERATEID = '00000000-0000-0000-0000-000000000001'
begin
set @TRANSFERBASEEXCHANGERATEID = newid()
insert into dbo.CURRENCYEXCHANGERATE(
ID,
FROMCURRENCYID,
TOCURRENCYID,
RATE,
ASOFDATE,
TYPECODE,
SOURCECODEID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
values(
@TRANSFERBASEEXCHANGERATEID,
@TRANSACTIONCURRENCYID_BANKB,
@BASECURRENCYID_BANKB,
@TRANSFEREXCHANGERATE,
@ADJUSTMENTDATE,
2,
null,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
);
end
exec dbo.USP_CURRENCY_GETCURRENCYVALUES @AMOUNT_BANKB, @ADJUSTMENTDATE, @BASECURRENCYID_BANKB, @TRANSFERBASEEXCHANGERATEID output, @TRANSACTIONCURRENCYID_BANKB output, @BASEAMOUNT_BANKB output, @ORGANIZATIONCURRENCYID output, @ORGANIZATIONAMOUNT_BANKB output, @ORGANIZATIONEXCHANGERATEID_BANKB output, 1;
if (@ORGAMOUNTORIGINCODE = 1 and @TRANSACTIONCURRENCYID_BANKB <> @ORGCURRENCYID) or (@ORGAMOUNTORIGINCODE = 0 and @BASECURRENCYID_BANKB <> @ORGCURRENCYID)
if @ORGANIZATIONEXCHANGERATEID_BANKB is null
begin
select @CURRENCYNAME = NAME from dbo.CURRENCY where (ID = @TRANSACTIONCURRENCYID_BANKB and @ORGAMOUNTORIGINCODE = 1) or (ID = @BASECURRENCYID_BANKB and @ORGAMOUNTORIGINCODE = 0)
set @errormessage = 'A corporate exchange rate does not exist for ' + @CURRENCYNAME + ' to ' + @ORGCURRENCYNAME
raiserror (@errormessage, 16, 1);
end
else if isnull(@ORIGINALTRANSFERORGEXCHANGERATEID, @DUMMYID) != isnull(@ORGANIZATIONEXCHANGERATEID_BANKB, @DUMMYID)
set @RECALCULATEDISTRIBUTION = 1;
update dbo.BANKACCOUNTTRANSACTION set
TRANSACTIONDATE = @ADJUSTMENTDATE,
AMOUNT = @BASEAMOUNT_BANKB,
REFERENCE = @REFERENCE,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE,
BASECURRENCYID = @BASECURRENCYID_BANKB,
ORGANIZATIONAMOUNT = @ORGANIZATIONAMOUNT_BANKB,
ORGANIZATIONEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID_BANKB,
TRANSACTIONAMOUNT = @AMOUNT_BANKB,
BASEEXCHANGERATEID = @TRANSFERBASEEXCHANGERATEID
where ID = @TRANSFERADJUSTMENTID
update dbo.BANKACCOUNTADJUSTMENT set
EXCHANGERATEID = @TRANSFERBANKACCOUNTBASEEXCHANGERATEID
where ID = @ID;
end
if @ORIGINALAMOUNT != @AMOUNT or @RECALCULATEDISTRIBUTION = 1 or (@ORIGINALPOSTSTATUSCODE != @POSTSTATUSCODE and @POSTSTATUSCODE = 1)
begin
delete from dbo.GLTRANSACTION where ID in (select GLTRANSACTIONID from dbo.BANKACCOUNTTRANSACTIONGLDISTRIBUTION where BANKACCOUNTTRANSACTIONID = @ID or BANKACCOUNTTRANSACTIONID = @TRANSFERADJUSTMENTID) and POSTSTATUSCODE >= 1;
delete from dbo.BANKACCOUNTTRANSACTIONGLDISTRIBUTION where BANKACCOUNTTRANSACTIONID = @ID or BANKACCOUNTTRANSACTIONID = @TRANSFERADJUSTMENTID;
declare @TEMPID uniqueidentifier;
set @TEMPID = CASE WHEN @ISORIGINALADJUSTMENT = 1 THEN @ID ELSE @TRANSFERADJUSTMENTID END;
if @POSTSTATUSCODE = 1
exec dbo.USP_BANKACCOUNTADJUSTMENT_CREATEDISTRIBUTION @TEMPID, @CHANGEAGENTID, @CURRENTDATE;
end
else if @ORIGINALREFERENCE != @REFERENCE
begin
declare @References table (ID uniqueidentifier, Reference nvarchar(255))
insert into @References (ID, Reference)
select GLTRANSACTION.ID,
case when len(@REFERENCE) > 0 then @REFERENCE
when BANKACCOUNTTRANSACTION.TRANSACTIONTYPECODE = 16 then 'Bank Adjustment - Deposit'
when BANKACCOUNTTRANSACTION.TRANSACTIONTYPECODE = 17 then 'Bank Adjustment - Payment'
when GLTRANSACTION.TRANSACTIONTYPECODE = 0 then 'Bank Adjustment - Transfer In'
else 'Bank Adjustment - Transfer Out'
end
from dbo.BANKACCOUNTTRANSACTIONGLDISTRIBUTION
inner join dbo.BANKACCOUNTTRANSACTION on BANKACCOUNTTRANSACTION.ID = BANKACCOUNTTRANSACTIONGLDISTRIBUTION.BANKACCOUNTTRANSACTIONID
inner join dbo.GLTRANSACTION on GLTRANSACTION.ID = BANKACCOUNTTRANSACTIONGLDISTRIBUTION.GLTRANSACTIONID
where (
BANKACCOUNTTRANSACTIONGLDISTRIBUTION.BANKACCOUNTTRANSACTIONID = @ID
or BANKACCOUNTTRANSACTIONGLDISTRIBUTION.BANKACCOUNTTRANSACTIONID = @TRANSFERADJUSTMENTID
)
and (
(
-- Non-system generated, adjustment
GLTRANSACTION.SYSTEMDISTRIBUTION = 0
and BANKACCOUNTTRANSACTION.TRANSFERBANKACCOUNTID is null
)
or
(
-- Non-system generated, transfer, same currencies between banks
GLTRANSACTION.SYSTEMDISTRIBUTION = 0
and not BANKACCOUNTTRANSACTION.TRANSFERBANKACCOUNTID is null
and @TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID_BANKB
)
or
(
-- Non-system generated, transfer, difference currencies between banks
GLTRANSACTION.SYSTEMDISTRIBUTION = 0
and not BANKACCOUNTTRANSACTION.TRANSFERBANKACCOUNTID is null
and GLTRANSACTION.TRANSACTIONTYPECODE = 1
and @TRANSACTIONCURRENCYID <> @TRANSACTIONCURRENCYID_BANKB
)
or
(
-- System generated, transfer, different currencies between banks, non-gain/loss
GLTRANSACTION.SYSTEMDISTRIBUTION = 1
and not BANKACCOUNTTRANSACTION.TRANSFERBANKACCOUNTID is null
and BANKACCOUNTTRANSACTIONGLDISTRIBUTION.TRANSACTIONTYPECODE = 0
and @TRANSACTIONCURRENCYID <> @TRANSACTIONCURRENCYID_BANKB
and not BANKACCOUNTTRANSACTIONGLDISTRIBUTION.TRANSACTIONCURRENCYID is null
)
);
update dbo.GLTRANSACTION
set REFERENCE = (select REFERENCE from @References where ID = GLTRANSACTION.ID),
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID in (select ID from @References)
delete from @References
insert into @References (ID, Reference)
select BANKACCOUNTTRANSACTIONGLDISTRIBUTION.ID,
case when len(@REFERENCE) > 0 then @REFERENCE
when BANKACCOUNTTRANSACTION.TRANSACTIONTYPECODE = 16 then 'Bank Adjustment - Deposit'
when BANKACCOUNTTRANSACTION.TRANSACTIONTYPECODE = 17 then 'Bank Adjustment - Payment'
when GLTRANSACTION.TRANSACTIONTYPECODE = 0 then 'Bank Adjustment - Transfer In'
else 'Bank Adjustment - Transfer Out'
end
from dbo.BANKACCOUNTTRANSACTIONGLDISTRIBUTION
inner join dbo.BANKACCOUNTTRANSACTION on BANKACCOUNTTRANSACTION.ID = BANKACCOUNTTRANSACTIONGLDISTRIBUTION.BANKACCOUNTTRANSACTIONID
inner join dbo.GLTRANSACTION on GLTRANSACTION.ID = BANKACCOUNTTRANSACTIONGLDISTRIBUTION.GLTRANSACTIONID
where (
BANKACCOUNTTRANSACTIONGLDISTRIBUTION.BANKACCOUNTTRANSACTIONID = @ID
or BANKACCOUNTTRANSACTIONGLDISTRIBUTION.BANKACCOUNTTRANSACTIONID = @TRANSFERADJUSTMENTID
)
and (
(
-- Non-system generated, adjustment
GLTRANSACTION.SYSTEMDISTRIBUTION = 0
and BANKACCOUNTTRANSACTION.TRANSFERBANKACCOUNTID is null
)
or
(
-- Non-system generated, transfer, same currencies between banks
GLTRANSACTION.SYSTEMDISTRIBUTION = 0
and not BANKACCOUNTTRANSACTION.TRANSFERBANKACCOUNTID is null
and @TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID_BANKB
)
or
(
-- Non-system generated, transfer, difference currencies between banks
GLTRANSACTION.SYSTEMDISTRIBUTION = 0
and not BANKACCOUNTTRANSACTION.TRANSFERBANKACCOUNTID is null
and GLTRANSACTION.TRANSACTIONTYPECODE = 1
and @TRANSACTIONCURRENCYID <> @TRANSACTIONCURRENCYID_BANKB
)
or
(
-- System generated, transfer, different currencies between banks, non-gain/loss
GLTRANSACTION.SYSTEMDISTRIBUTION = 1
and not BANKACCOUNTTRANSACTION.TRANSFERBANKACCOUNTID is null
and BANKACCOUNTTRANSACTIONGLDISTRIBUTION.TRANSACTIONTYPECODE = 0
and @TRANSACTIONCURRENCYID <> @TRANSACTIONCURRENCYID_BANKB
and not BANKACCOUNTTRANSACTIONGLDISTRIBUTION.TRANSACTIONCURRENCYID is null
)
);
update dbo.BANKACCOUNTTRANSACTIONGLDISTRIBUTION
set REFERENCE = (select REFERENCE from @References where ID = BANKACCOUNTTRANSACTIONGLDISTRIBUTION.ID),
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID in (select ID from @References)
end
if @ORIGINALPOSTSTATUSCODE != @POSTSTATUSCODE
if @POSTSTATUSCODE !=2
--kwb Not ANSI syntax
/*
update dbo.GLTRANSACTION
set GLTRANSACTION.POSTSTATUSCODE = BANKACCOUNTTRANSACTION.POSTSTATUSCODE,
CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @CURRENTDATE
from dbo.BANKACCOUNTTRANSACTIONGLDISTRIBUTION
inner join dbo.BANKACCOUNTTRANSACTION on BANKACCOUNTTRANSACTION.ID = BANKACCOUNTTRANSACTIONGLDISTRIBUTION.BANKACCOUNTTRANSACTIONID
inner join dbo.GLTRANSACTION on GLTRANSACTION.ID = BANKACCOUNTTRANSACTIONGLDISTRIBUTION.GLTRANSACTIONID
where BANKACCOUNTTRANSACTIONGLDISTRIBUTION.BANKACCOUNTTRANSACTIONID = @ID
or BANKACCOUNTTRANSACTIONGLDISTRIBUTION.BANKACCOUNTTRANSACTIONID = @TRANSFERADJUSTMENTID;
*/
update dbo.GLTRANSACTION
set POSTSTATUSCODE = (select BANKACCOUNTTRANSACTION.POSTSTATUSCODE
from dbo.BANKACCOUNTTRANSACTIONGLDISTRIBUTION inner join dbo.BANKACCOUNTTRANSACTION on BANKACCOUNTTRANSACTIONGLDISTRIBUTION.BANKACCOUNTTRANSACTIONID = BANKACCOUNTTRANSACTION.ID
where BANKACCOUNTTRANSACTIONGLDISTRIBUTION.GLTRANSACTIONID = GLTRANSACTION.ID
and (BANKACCOUNTTRANSACTIONGLDISTRIBUTION.BANKACCOUNTTRANSACTIONID = @ID
or BANKACCOUNTTRANSACTIONGLDISTRIBUTION.BANKACCOUNTTRANSACTIONID = @TRANSFERADJUSTMENTID)),
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where GLTRANSACTION.ID in (select BANKACCOUNTTRANSACTIONGLDISTRIBUTION.GLTRANSACTIONID
from dbo.BANKACCOUNTTRANSACTIONGLDISTRIBUTION inner join dbo.BANKACCOUNTTRANSACTION on BANKACCOUNTTRANSACTION.ID = BANKACCOUNTTRANSACTIONGLDISTRIBUTION.BANKACCOUNTTRANSACTIONID
where BANKACCOUNTTRANSACTIONGLDISTRIBUTION.BANKACCOUNTTRANSACTIONID = @ID
or BANKACCOUNTTRANSACTIONGLDISTRIBUTION.BANKACCOUNTTRANSACTIONID = @TRANSFERADJUSTMENTID)
else
begin
delete from dbo.GLTRANSACTION where ID in (select GLTRANSACTIONID from dbo.BANKACCOUNTTRANSACTIONGLDISTRIBUTION where BANKACCOUNTTRANSACTIONID = @ID);
delete from dbo.BANKACCOUNTTRANSACTIONGLDISTRIBUTION where BANKACCOUNTTRANSACTIONID = @ID;
end
if @ORIGINALBASEEXCHANGERATEID <> @BASEEXCHANGERATEID and @HADORIGINALTOBASESPOTRATE = 1
delete from dbo.CURRENCYEXCHANGERATE where CURRENCYEXCHANGERATE.ID = @ORIGINALBASEEXCHANGERATEID;
if @ORIGINALTRANSFERBASEEXCHANGERATEID <> @TRANSFERBASEEXCHANGERATEID and @HADCOPYTOBASESPOTRATE = 1
delete from dbo.CURRENCYEXCHANGERATE where CURRENCYEXCHANGERATE.ID = @ORIGINALTRANSFERBASEEXCHANGERATEID;
if @ORIGINALTRANSFERBANKACCOUNTBASEEXCHANGERATEID <> @TRANSFERBANKACCOUNTBASEEXCHANGERATEID and @HADBANKACCOUNTTRANSFERSPOTRATE = 1
delete from dbo.CURRENCYEXCHANGERATE where CURRENCYEXCHANGERATE.ID = @ORIGINALTRANSFERBANKACCOUNTBASEEXCHANGERATEID;
update dbo.BANKACCOUNTADJUSTMENT set
DATECHANGED = @CURRENTDATE,
CHANGEDBYID = @CHANGEAGENTID
where ID = @ID;
end try
begin catch
exec dbo.USP_RAISE_ERROR
return 1
end catch
return 0;