USP_DATAFORMTEMPLATE_EDIT_BANKACCOUNTDEPOSIT2
The save procedure used by the edit dataform template "Bank Account Deposit Edit 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. |
@REFERENCE | nvarchar(100) | IN | Reference |
@DEPOSITDATE | datetime | IN | Deposit date |
@POSTSTATUSCODE | tinyint | IN | Post status |
@POSTDATE | datetime | IN | Post date |
@PROJECTEDNUMBEROFPAYMENTS | int | IN | Number of payments |
@PROJECTEDAMOUNT | numeric(19, 4) | IN | Amount |
@STATUSCODE | tinyint | IN | Status |
@TRANSACTIONCURRENCYID | uniqueidentifier | IN | Payment currency |
@TRANSACTIONEXCHANGERATEID | uniqueidentifier | IN | Payment exchange rate |
@TRANSACTIONEXCHANGERATE | decimal(20, 8) | IN | Exchange rate |
@BASEEXCHANGERATEID | uniqueidentifier | IN | Exchange rate ID |
@BASEEXCHANGERATE | decimal(20, 8) | IN | Exchange rate |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_BANKACCOUNTDEPOSIT2 (
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@REFERENCE nvarchar(100),
@DEPOSITDATE datetime,
@POSTSTATUSCODE tinyint,
@POSTDATE datetime,
@PROJECTEDNUMBEROFPAYMENTS int,
@PROJECTEDAMOUNT numeric(19,4),
@STATUSCODE tinyint
,@TRANSACTIONCURRENCYID uniqueidentifier
,@TRANSACTIONEXCHANGERATEID uniqueidentifier
,@TRANSACTIONEXCHANGERATE decimal(20,8)
,@BASEEXCHANGERATEID uniqueidentifier
,@BASEEXCHANGERATE decimal(20,8)
)
as
set nocount on;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
declare @CURRENTDATE datetime
set @CURRENTDATE = getdate()
declare @ORIGINALTRANSACTIONCURRENCYID uniqueidentifier
declare @ORIGINALTRANSACTIONEXCHANGERATEID uniqueidentifier
declare @ORIGINALBASEEXCHANGERATEID uniqueidentifier
declare @ORIGINALORGANIZATIONEXCHANGERATEID uniqueidentifier
declare @ORIGINALTRANRATE decimal(20,8)
declare @ORIGINALBASERATE decimal(20,8)
declare @TOTALPAYMENTAMOUNT money;
declare @PDACCOUNTSYSTEMID uniqueidentifier;
declare @ORIGINALREFERENCE nvarchar(100);
select @ORIGINALTRANSACTIONCURRENCYID = D.TRANSACTIONCURRENCYID
,@ORIGINALTRANSACTIONEXCHANGERATEID = D.TRANSACTIONEXCHANGERATEID
,@ORIGINALBASEEXCHANGERATEID = BAT.BASEEXCHANGERATEID
,@ORIGINALTRANRATE = TRANRATE.RATE
,@ORIGINALBASERATE = BASERATE.RATE
,@TOTALPAYMENTAMOUNT = D.TOTALPAYMENTAMOUNT
,@PDACCOUNTSYSTEMID = BA.PDACCOUNTSYSTEMID
,@ORIGINALORGANIZATIONEXCHANGERATEID = BAT.ORGANIZATIONEXCHANGERATEID
,@ORIGINALREFERENCE = BAT.REFERENCE
from dbo.BANKACCOUNTDEPOSIT D
inner join dbo.BANKACCOUNTTRANSACTION BAT on BAT.ID = D.ID
inner join dbo.BANKACCOUNT as BA on BAT.BANKACCOUNTID = BA.ID
left outer join dbo.CURRENCYEXCHANGERATE TRANRATE on TRANRATE.ID = D.TRANSACTIONEXCHANGERATEID
left outer join dbo.CURRENCYEXCHANGERATE BASERATE on BASERATE.ID = BAT.BASEEXCHANGERATEID
where D.ID = @ID
if (@TRANSACTIONEXCHANGERATEID = '00000000-0000-0000-0000-000000000001'
and ((not @ORIGINALTRANRATE is null) and @ORIGINALTRANRATE = @TRANSACTIONEXCHANGERATE))
set @TRANSACTIONEXCHANGERATEID = @ORIGINALTRANSACTIONEXCHANGERATEID;
if (@BASEEXCHANGERATEID = '00000000-0000-0000-0000-000000000001'
and ((not @ORIGINALBASERATE is null) and @ORIGINALBASERATE = @BASEEXCHANGERATE))
set @BASEEXCHANGERATEID = @ORIGINALBASEEXCHANGERATEID;
begin try
if (@ORIGINALTRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID)
or (not (exists(select P.ID from dbo.BANKACCOUNTDEPOSITPAYMENT P where P.DEPOSITID = @ID)
or exists(select C.ID from dbo.BANKACCOUNTDEPOSITCORRECTION C where C.DEPOSITID = @ID)))
begin
declare @BANKACCOUNTCURRENCYID uniqueidentifier;
declare @BASECURRENCYID uniqueidentifier;
select @BANKACCOUNTCURRENCYID = BA.TRANSACTIONCURRENCYID,
@BASECURRENCYID = BAT.BASECURRENCYID
from dbo.BANKACCOUNT as BA
inner join dbo.BANKACCOUNTTRANSACTION BAT on BAT.BANKACCOUNTID = BA.ID
where BAT.ID = @ID
--Get Multicurrency values.
declare @BANKACCOUNTTRANSACTIONAMOUNT money;
declare @BASEAMOUNT money;
declare @ORGANIZATIONAMOUNT money;
declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;
declare @ORGANIZATIONCURRENCYID uniqueidentifier;
if @TRANSACTIONCURRENCYID <> @BANKACCOUNTCURRENCYID
--Add a spot exchange rate if an existing rate hasn't
--been selected, the bank 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 @TRANSACTIONEXCHANGERATEID = '00000000-0000-0000-0000-000000000001'
begin
set @TRANSACTIONEXCHANGERATEID = newid()
insert into dbo.CURRENCYEXCHANGERATE(
ID,
FROMCURRENCYID,
TOCURRENCYID,
RATE,
ASOFDATE,
TYPECODE,
SOURCECODEID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
values(
@TRANSACTIONEXCHANGERATEID,
@TRANSACTIONCURRENCYID,
@BANKACCOUNTCURRENCYID,
@TRANSACTIONEXCHANGERATE,
@DEPOSITDATE,
2,
null,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
);
end
set @BANKACCOUNTTRANSACTIONAMOUNT = dbo.UFN_CURRENCY_CONVERT(@TOTALPAYMENTAMOUNT, @TRANSACTIONEXCHANGERATEID);
if @BANKACCOUNTCURRENCYID <> @BASECURRENCYID
--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,
@BANKACCOUNTCURRENCYID,
@BASECURRENCYID,
@BASEEXCHANGERATE,
@DEPOSITDATE,
2,
null,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
);
end
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 @BANKACCOUNTTRANSACTIONAMOUNT, @DEPOSITDATE, @BASECURRENCYID, @BASEEXCHANGERATEID output, @BANKACCOUNTCURRENCYID output, @BASEAMOUNT output, @ORGANIZATIONCURRENCYID output, @ORGANIZATIONAMOUNT output, @ORGANIZATIONEXCHANGERATEID output, 1;
if (@ORGAMOUNTORIGINCODE = 1 and @BANKACCOUNTCURRENCYID <> @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
end
else
begin
--User cannot change the transaction currency of a deposit after any records have been linked to it.
raiserror('ERR_TRANSACTIONCURRENCYID_CANNOT_BE_CHANGED', 16, 1)
end
declare @ORIGINALPOSTSTATUS tinyint;
declare @ORIGINALPOSTDATE date;
select @ORIGINALPOSTSTATUS = POSTSTATUSCODE,
@ORIGINALPOSTDATE = POSTDATE
from dbo.BANKACCOUNTTRANSACTION where ID = @ID;
--update the bank account transaction
update dbo.BANKACCOUNTTRANSACTION
set
REFERENCE = @REFERENCE,
TRANSACTIONDATE = @DEPOSITDATE,
POSTSTATUSCODE = @POSTSTATUSCODE,
POSTDATE = @POSTDATE,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
,BASEEXCHANGERATEID = @BASEEXCHANGERATEID
,ORGANIZATIONEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID
where ID = @ID;
-- update the bank account deposit record
update dbo.BANKACCOUNTDEPOSIT
set
PROJECTEDAMOUNT = @PROJECTEDAMOUNT,
PROJECTEDNUMBEROFPAYMENTS = coalesce(@PROJECTEDNUMBEROFPAYMENTS, 0),
STATUSCODE = @STATUSCODE,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
,TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID
,TRANSACTIONEXCHANGERATEID = @TRANSACTIONEXCHANGERATEID
where ID = @ID;
if @ORIGINALPOSTSTATUS != @POSTSTATUSCODE
begin
if @ORIGINALPOSTSTATUS = 2 and exists(select 1
from dbo.BANKACCOUNTDEPOSITCREDITPAYMENT DCP
inner join dbo.CREDITPAYMENT CP on CP.ID = DCP.ID
inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.FINANCIALTRANSACTIONID = CP.CREDITID
inner join dbo.FINANCIALTRANSACTIONLINEITEM SLI on SLI.ID = LI.SOURCELINEITEMID
left join dbo.BANKACCOUNTDEPOSITPAYMENT DP on DP.ID = SLI.FINANCIALTRANSACTIONID
where LI.POSTSTATUSCODE = 3 and SLI.POSTSTATUSCODE = 3 and DCP.DEPOSITID = @ID and (DP.DEPOSITID is null or DP.DEPOSITID != @ID))
raiserror('ERR_CANNOT_CHANGE_POSTSTATUS', 16, 1);
if @ORIGINALPOSTSTATUS = 2 and exists(select 1
from dbo.BANKACCOUNT BA
inner join dbo.BANKACCOUNTTRANSACTION_EXT BAT on BAT.BANKACCOUNTID = BA.ID
where BA.GLACCOUNTID is null and BA.PDACCOUNTSEGMENTVALUEID is null and BAT.ID = @ID)
raiserror('ERR_MUST_ASSIGN_CASH_ACCOUNT', 16, 1);
exec dbo.USP_BANKACCOUNTDEPOSIT_UPDATEPAYMENTSPOSTSTATUS @ID, @CHANGEAGENTID, @CURRENTDATE
end
--update related payments and refunds
if @ORIGINALPOSTDATE != @POSTDATE
begin
update dbo.JOURNALENTRY
set POSTDATE = DEPOSIT.POSTDATE
from dbo.FINANCIALTRANSACTION FT
inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.FINANCIALTRANSACTIONID = FT.ID
inner join dbo.JOURNALENTRY JE on JE.FINANCIALTRANSACTIONLINEITEMID = LI.ID
inner join dbo.JOURNALENTRY_EXT JEX on JEX.ID = JE.ID
left join dbo.BANKACCOUNTDEPOSITCREDITPAYMENT CP on CP.ID = JEX.CREDITPAYMENTID
left join dbo.BANKACCOUNTDEPOSITPAYMENT P on P.ID = FT.ID
left join dbo.BANKACCOUNTDEPOSITCORRECTION DC on DC.ID = FT.ID
inner join dbo.FINANCIALTRANSACTION DEPOSIT on DEPOSIT.ID = CP.DEPOSITID or DEPOSIT.ID = P.DEPOSITID or DEPOSIT.ID = DC.DEPOSITID
where LI.POSTSTATUSCODE = 1 and DEPOSIT.ID = @ID
update FT
set POSTDATE = DEPOSIT.POSTDATE
from dbo.FINANCIALTRANSACTION FT
inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.FINANCIALTRANSACTIONID = FT.ID
inner join dbo.JOURNALENTRY JE on JE.FINANCIALTRANSACTIONLINEITEMID = LI.ID
inner join dbo.JOURNALENTRY_EXT JEX on JEX.ID = JE.ID
left join dbo.BANKACCOUNTDEPOSITCREDITPAYMENT CP on CP.ID = JEX.CREDITPAYMENTID
left join dbo.BANKACCOUNTDEPOSITPAYMENT P on P.ID = FT.ID
left join dbo.BANKACCOUNTDEPOSITCORRECTION DC on DC.ID = FT.ID
inner join dbo.FINANCIALTRANSACTION DEPOSIT on DEPOSIT.ID = CP.DEPOSITID or DEPOSIT.ID = P.DEPOSITID or DEPOSIT.ID = DC.DEPOSITID
where DEPOSIT.ID = @ID
and FT.POSTSTATUSCODE = 1
update dbo.FINANCIALTRANSACTIONLINEITEM
set POSTDATE = DEPOSIT.POSTDATE
from dbo.FINANCIALTRANSACTION FT
inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.FINANCIALTRANSACTIONID = FT.ID
inner join dbo.JOURNALENTRY JE on JE.FINANCIALTRANSACTIONLINEITEMID = LI.ID
inner join dbo.JOURNALENTRY_EXT JEX on JEX.ID = JE.ID
left join dbo.BANKACCOUNTDEPOSITCREDITPAYMENT CP on CP.ID = JEX.CREDITPAYMENTID
left join dbo.BANKACCOUNTDEPOSITPAYMENT P on P.ID = FT.ID
left join dbo.BANKACCOUNTDEPOSITCORRECTION DC on DC.ID = FT.ID
inner join dbo.FINANCIALTRANSACTION DEPOSIT on DEPOSIT.ID = CP.DEPOSITID or DEPOSIT.ID = P.DEPOSITID or DEPOSIT.ID = DC.DEPOSITID
where DEPOSIT.ID = @ID
and LI.POSTSTATUSCODE = 1
update A
set POSTDATE = DEPOSIT.POSTDATE
from dbo.FINANCIALTRANSACTION FT
inner join dbo.ADJUSTMENT A on A.REVENUEID = FT.ID
inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.FINANCIALTRANSACTIONID = FT.ID
inner join dbo.JOURNALENTRY JE on JE.FINANCIALTRANSACTIONLINEITEMID = LI.ID
inner join dbo.JOURNALENTRY_EXT JEX on JEX.ID = JE.ID
left join dbo.BANKACCOUNTDEPOSITCREDITPAYMENT CP on CP.ID = JEX.CREDITPAYMENTID
left join dbo.BANKACCOUNTDEPOSITPAYMENT P on P.ID = FT.ID
left join dbo.BANKACCOUNTDEPOSITCORRECTION DC on DC.ID = FT.ID
inner join dbo.FINANCIALTRANSACTION DEPOSIT on DEPOSIT.ID = CP.DEPOSITID or DEPOSIT.ID = P.DEPOSITID or DEPOSIT.ID = DC.DEPOSITID
where DEPOSIT.ID = @ID
and A.POSTSTATUSCODE = 1
end
declare @DUMMYID uniqueidentifier = NEWID();
if isnull(@ORIGINALTRANSACTIONEXCHANGERATEID, @DUMMYID) != isnull(@TRANSACTIONEXCHANGERATEID, @DUMMYID)
or isnull(@ORIGINALBASEEXCHANGERATEID, @DUMMYID) != isnull(@BASEEXCHANGERATEID, @DUMMYID)
or isnull(@ORIGINALORGANIZATIONEXCHANGERATEID, @DUMMYID) != isnull(@ORGANIZATIONEXCHANGERATEID, @DUMMYID)
or (@ORIGINALPOSTSTATUS != @POSTSTATUSCODE and @POSTSTATUSCODE = 1)
begin
-- Recalculate all of the payments gains and losses
if @ORIGINALPOSTSTATUS = @POSTSTATUSCODE and @POSTSTATUSCODE = 1
exec dbo.USP_DEPOSITEDIT_UPDATEREVENUEGLDISTRIBUTION @ID, @CHANGEAGENTID
-- Recreate all of the deposit correction distributions (including gains and losses with intercurrency) if needed.
if @POSTSTATUSCODE = 1
exec dbo.USP_EDITDEPOSIT_RECREATEDEPOSITCORRECTIONGLDISTRIBUTIONS @ID, @CHANGEAGENTID
if @ORIGINALPOSTSTATUS != @POSTSTATUSCODE and @POSTSTATUSCODE = 1
exec dbo.USP_EDITDEPOSIT_RECREATECREDITPAYMENTGLDISTRIBUTIONS @ID, @CHANGEAGENTID;
declare @DEPOSITS UDT_GENERICID
insert into @DEPOSITS(ID) values (@ID)
merge into dbo.BANKACCOUNTTRANSACTION
using dbo.UFN_BANKACCOUNTDEPOSIT_CALCULATEAMOUNTS(@DEPOSITS, @ORGAMOUNTORIGINCODE, @ORGCURRENCYID) as T1
on BANKACCOUNTTRANSACTION.ID = T1.ID
when matched
then update set
TRANSACTIONAMOUNT = T1.TRANSACTIONAMOUNT
,AMOUNT = T1.BASEAMOUNT
,ORGANIZATIONAMOUNT = T1.ORGAMOUNT
,CHANGEDBYID = @CHANGEAGENTID
,DATECHANGED = @CURRENTDATE
;
end
else if @ORIGINALREFERENCE <> @REFERENCE
begin
update dbo.JOURNALENTRY set
COMMENT = case when len(isnull(@REFERENCE, '')) > 0 then @REFERENCE
else dbo.UFN_POSTTOGLPROCESS_GETJOURNALREFERENCE(
FTLI.ID
,REVENUEPAYMENTMETHOD.PAYMENTMETHOD
,RSE.APPLICATION) end,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
from dbo.JOURNALENTRY as JE
inner join dbo.JOURNALENTRY_EXT as JEXT on JE.ID = JEXT.ID
inner join dbo.FINANCIALTRANSACTIONLINEITEM as FTLI on JE.FINANCIALTRANSACTIONLINEITEMID = FTLI.ID
inner join dbo.REVENUESPLIT_EXT as RSE on FTLI.ID = RSE.ID
inner join dbo.BANKACCOUNTDEPOSITPAYMENT on BANKACCOUNTDEPOSITPAYMENT.ID = FTLI.FINANCIALTRANSACTIONID
inner join dbo.BANKACCOUNTTRANSACTION on BANKACCOUNTTRANSACTION.ID = BANKACCOUNTDEPOSITPAYMENT.DEPOSITID
inner join dbo.BANKACCOUNT on BANKACCOUNT.ID = BANKACCOUNTTRANSACTION.BANKACCOUNTID
inner join dbo.DEPOSITGLDISTRIBUTIONLINK on DEPOSITGLDISTRIBUTIONLINK.ID = JE.ID
left join dbo.REVENUEPAYMENTMETHOD on REVENUEPAYMENTMETHOD.REVENUEID = FTLI.FINANCIALTRANSACTIONID
where BANKACCOUNTDEPOSITPAYMENT.DEPOSITID = @ID and JE.TRANSACTIONTYPECODE = 0
and ((JE.TYPECODE= 0 and @TRANSACTIONCURRENCYID = BANKACCOUNT.TRANSACTIONCURRENCYID)
or (JE.TYPECODE = 1 and @TRANSACTIONCURRENCYID <> BANKACCOUNT.TRANSACTIONCURRENCYID
and JE.TRANSACTIONCURRENCYID = BANKACCOUNT.TRANSACTIONCURRENCYID));
end
end try
begin catch
exec dbo.USP_RAISE_ERROR
return 1
end catch
return 0;