USP_DATAFORMTEMPLATE_EDIT_BANKACCOUNTTRANSACTIONGLDISTRIBUTION
The save procedure used by the edit dataform template "Bank Account Transaction GL Distribution 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. |
@GLDISTRIBUTION | xml | IN | Bank account deposit correction GL distribution |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_BANKACCOUNTTRANSACTIONGLDISTRIBUTION (
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@GLDISTRIBUTION xml
)
as
set nocount on;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
declare @CURRENTDATE datetime
set @CURRENTDATE = getdate()
declare @DEBITAMOUNT money = 0;
declare @CREDITAMOUNT money = 0;
select @ID = CASE WHEN A.ID is null or A.ISORIGINALADJUSTMENT = 1 THEN BAT.ID ELSE A.TRANSFERADJUSTMENTID END
from dbo.BANKACCOUNTTRANSACTION BAT
left outer join dbo.BANKACCOUNTADJUSTMENT A on BAT.ID = A.ID
where BAT.ID = @ID
declare @DISTRIBUTIONS table (
ID uniqueidentifier,
TRANSACTIONTYPECODE tinyint,
ACCOUNT nvarchar(100),
GLACCOUNTID uniqueidentifier,
PROJECT nvarchar(100),
AMOUNT money,
REFERENCE nvarchar(100),
TRANSACTIONCURRENCYID uniqueidentifier,
GLTRANSACTIONID uniqueidentifier
)
insert into @DISTRIBUTIONS
(
ID,
TRANSACTIONTYPECODE,
ACCOUNT,
GLACCOUNTID,
PROJECT,
AMOUNT,
REFERENCE,
TRANSACTIONCURRENCYID,
GLTRANSACTIONID
)
select
D.ID,
D.TRANSACTIONTYPECODE,
D.ACCOUNT,
D.GLACCOUNTID,
D.PROJECT,
D.AMOUNT,
D.REFERENCE,
D.TRANSACTIONCURRENCYID,
D.GLTRANSACTIONID
from dbo.UFN_BANKACCOUNTTRANSACTION_GETGLDISTRIBUTION_FROMITEMLISTXML(@GLDISTRIBUTION) D
inner join dbo.GLACCOUNT A on A.ID = D.GLACCOUNTID;
select @DEBITAMOUNT = isnull(SUM(AMOUNT), 0) from @DISTRIBUTIONS where TRANSACTIONTYPECODE = 0;
select @CREDITAMOUNT = isnull(SUM(AMOUNT), 0) from @DISTRIBUTIONS where TRANSACTIONTYPECODE = 1;
if @DEBITAMOUNT <> @CREDITAMOUNT
raiserror('The sum of the debit accounts must equal the sum of the credit accounts.', 13, 1)
if (select COUNT(*) from @DISTRIBUTIONS) = 0
raiserror('At least one GL Distribution is required.', 13, 1)
if @DEBITAMOUNT <> (select TRANSACTIONAMOUNT from dbo.BANKACCOUNTTRANSACTION where ID = @ID)
raiserror('The distribution amount must equal the transaction amount.', 13, 1)
declare @POSTDATE datetime;
select @POSTDATE = POSTDATE from dbo.BANKACCOUNTTRANSACTION where ID = @ID
declare @TRANSACTIONCURRENCYID uniqueidentifier;
declare @BASECURRENCYID uniqueidentifier;
declare @BASEEXCHANGERATEID uniqueidentifier;
declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;
declare @TRANSFERBASEEXCHANGERATEID uniqueidentifier;
declare @TRANSFERORGANIZATIONEXCHANGERATEID uniqueidentifier;
declare @TYPECODE tinyint;
select
@TYPECODE = BAT.TRANSACTIONTYPECODE,
@TRANSACTIONCURRENCYID = BA.TRANSACTIONCURRENCYID,
@BASECURRENCYID = BAT.BASECURRENCYID,
@BASEEXCHANGERATEID = BAT.BASEEXCHANGERATEID,
@ORGANIZATIONEXCHANGERATEID = BAT.ORGANIZATIONEXCHANGERATEID
,@TRANSFERBASEEXCHANGERATEID = CASE WHEN BA1.TRANSACTIONCURRENCYID is not null and BA1.TRANSACTIONCURRENCYID = BA.TRANSACTIONCURRENCYID THEN BAT1.BASEEXCHANGERATEID ELSE BAT.BASEEXCHANGERATEID END
,@TRANSFERORGANIZATIONEXCHANGERATEID = CASE WHEN BA1.TRANSACTIONCURRENCYID is not null and BA1.TRANSACTIONCURRENCYID = BA.TRANSACTIONCURRENCYID THEN BAT1.ORGANIZATIONEXCHANGERATEID ELSE BAT.ORGANIZATIONEXCHANGERATEID END
from dbo.BANKACCOUNTTRANSACTION as BAT
left outer join dbo.BANKACCOUNTADJUSTMENT A on BAT.ID = A.ID
left outer join dbo.BANKACCOUNTTRANSACTION BAT1 on A.TRANSFERADJUSTMENTID = BAT1.ID
inner join dbo.BANKACCOUNT as BA on BA.ID = BAT.BANKACCOUNTID
left outer join dbo.BANKACCOUNT BA1 on BA1.ID = BAT1.BANKACCOUNTID
where BAT.ID = @ID;
select @GLDISTRIBUTION = dbo.UFN_GLDISTRIBUTION_CONVERTAMOUNTSINXML
(
@GLDISTRIBUTION
,@BASECURRENCYID
,CASE WHEN @TYPECODE in (16, 33) THEN @ORGANIZATIONEXCHANGERATEID ELSE @TRANSFERORGANIZATIONEXCHANGERATEID END
,@TRANSACTIONCURRENCYID
,CASE WHEN @TYPECODE in (16, 33) THEN @BASEEXCHANGERATEID ELSE @TRANSFERBASEEXCHANGERATEID END
,CASE WHEN @TYPECODE in (17, 32) THEN @ORGANIZATIONEXCHANGERATEID ELSE @TRANSFERORGANIZATIONEXCHANGERATEID END
,CASE WHEN @TYPECODE in (17, 32) THEN @BASEEXCHANGERATEID ELSE @TRANSFERBASEEXCHANGERATEID END
)
exec dbo.USP_BANKACCOUNTTRANSACTION_GLDISTRIBUTION_MULTICURRENCY_UPDATEFROMXML @ID, @GLDISTRIBUTION, @POSTDATE, @CHANGEAGENTID, @CURRENTDATE
return 0;