USP_DATAFORMTEMPLATE_ADD_DEPOSIT
The save procedure used by the add dataform template "Deposit Add Form".
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | INOUT | The output parameter indicating the ID of the record added. |
@BANKACCOUNTID | uniqueidentifier | IN | Bank account |
@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 | money | 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_ADD_DEPOSIT
(
@ID uniqueidentifier = null output,
@BANKACCOUNTID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@REFERENCE nvarchar(100) = '',
@DEPOSITDATE datetime = null,
@POSTSTATUSCODE tinyint = 1,
@POSTDATE datetime = null,
@PROJECTEDNUMBEROFPAYMENTS int = 0,
@PROJECTEDAMOUNT money = null,
@STATUSCODE tinyint = 1
,@TRANSACTIONCURRENCYID uniqueidentifier = null
,@TRANSACTIONEXCHANGERATEID uniqueidentifier = null
,@TRANSACTIONEXCHANGERATE decimal(20,8) = null
,@BASEEXCHANGERATEID uniqueidentifier = null
,@BASEEXCHANGERATE decimal(20,8) = null
)
as
set nocount on;
if @ID is null
set @ID = newid()
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
declare @CURRENTDATE datetime
set @CURRENTDATE = getdate()
declare @TRANSACTIONFLAGCODE int
set @TRANSACTIONFLAGCODE = 1 --Deposit
declare @TRANSACTIONTYPECODE int
set @TRANSACTIONTYPECODE = 8 --Deposit
declare @BANKTRANSACTIONID uniqueidentifier
begin try
declare @BANKACCOUNTCURRENCYID uniqueidentifier;
declare @BASECURRENCYID uniqueidentifier;
declare @PDACCOUNTSYSTEMID uniqueidentifier;
select @PDACCOUNTSYSTEMID = BA.PDACCOUNTSYSTEMID,
@BANKACCOUNTCURRENCYID = BA.TRANSACTIONCURRENCYID,
@BASECURRENCYID = BASECURRENCYID
from dbo.BANKACCOUNT as BA
inner join dbo.PDACCOUNTSYSTEM as PAS on BA.PDACCOUNTSYSTEMID = PAS.ID
inner join dbo.CURRENCYSET as CS on PAS.CURRENCYSETID = CS.ID
where BA.ID = @BANKACCOUNTID
-- Check GL business rule for this account system and set to 'Do not post' if needed.
-- ####
declare @ALLOWGLDISTRIBUTIONS bit;
set @ALLOWGLDISTRIBUTIONS = dbo.UFN_PDACCOUNTSYSTEM_ALLOWGLDISTRIBUTIONS(@PDACCOUNTSYSTEMID)
if @ALLOWGLDISTRIBUTIONS = 0
begin
set @POSTSTATUSCODE = 2; -- Do not post
set @POSTDATE = null; -- bug 140415
end
else
begin
-- Added a new business rule to disable general leger which will allow a user
-- to save a bank account without any cash account information. If a user
-- enables general ledger with a bank account that has no cash account information
-- we need to stop them from adding any 'not yet posted' adjustments.
-- ****
declare @GLACCOUNTID uniqueidentifier
declare @PDACCOUNTSEGMENTVALUEID uniqueidentifier
select
@GLACCOUNTID=GLACCOUNTID,
@PDACCOUNTSEGMENTVALUEID=PDACCOUNTSEGMENTVALUEID
from dbo.BANKACCOUNT
where ID = @BANKACCOUNTID
if @GLACCOUNTID is null and @PDACCOUNTSEGMENTVALUEID is null and @POSTSTATUSCODE = 1
raiserror('ERR_MUSTHAVECASHACCOUNTINFORMATION', 16, 1);
-- ****
end
-- ####
--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
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 0, @DEPOSITDATE, @BASECURRENCYID, @BASEEXCHANGERATEID output, @BANKACCOUNTCURRENCYID output, @BANKACCOUNTTRANSACTIONAMOUNT 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 = @BANKACCOUNTCURRENCYID 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
-- create the bank transaction
-- depositnumber will be added soon (design will update the design doc)
insert into dbo.BANKACCOUNTTRANSACTION
(ID, BANKACCOUNTID, TRANSACTIONNUMBER, TRANSACTIONDATE, TRANSACTIONTYPECODE, REFERENCE, TRANSACTIONFLAGCODE, POSTSTATUSCODE, POSTDATE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, BASEEXCHANGERATEID, ORGANIZATIONEXCHANGERATEID, BASECURRENCYID)
values
(@ID, @BANKACCOUNTID, dbo.UFN_BANKACCOUNTTRANSACTION_GETNEXTNUMBER(@BANKACCOUNTID, @TRANSACTIONFLAGCODE), @DEPOSITDATE, @TRANSACTIONTYPECODE, @REFERENCE, @TRANSACTIONFLAGCODE, @POSTSTATUSCODE, case @POSTSTATUSCODE when 2 then null else @POSTDATE end, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE, @BASEEXCHANGERATEID, @ORGANIZATIONEXCHANGERATEID, @BASECURRENCYID)
-- create the bank account deposit record
insert into dbo.BANKACCOUNTDEPOSIT
(ID, PROJECTEDNUMBEROFPAYMENTS, PROJECTEDAMOUNT, STATUSCODE, TRANSACTIONCURRENCYID, TRANSACTIONEXCHANGERATEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values
(@ID, coalesce(@PROJECTEDNUMBEROFPAYMENTS, 0), @PROJECTEDAMOUNT, @STATUSCODE, @TRANSACTIONCURRENCYID, @TRANSACTIONEXCHANGERATEID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE)
end try
begin catch
exec dbo.USP_RAISE_ERROR
return 1
end catch
return 0