USP_FINANCIALTRANSACTION_ADD
Adds a row in to the Financial Transaction Table
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | INOUT | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CONSTITUENTID | uniqueidentifier | IN | |
@USERDEFINEDID | nvarchar(60) | IN | |
@TYPECODE | tinyint | IN | |
@AMOUNT | money | IN | |
@DATE | datetime | IN | |
@POSTDATE | datetime | IN | |
@POSTSTATUSCODE | tinyint | IN | |
@DESCRIPTION | nvarchar(100) | IN | |
@LINEITEMS | xml | IN | |
@PARENTID | uniqueidentifier | IN | |
@PDACCOUNTSYSTEMID | uniqueidentifier | IN | |
@TRANSACTIONCURRENCYID | uniqueidentifier | IN | |
@BASEAMOUNT | money | IN | |
@ORGAMOUNT | money | IN |
Definition
Copy
CREATE procedure dbo.[USP_FINANCIALTRANSACTION_ADD]
(
@ID uniqueidentifier = null output
,@CHANGEAGENTID uniqueidentifier = null
,@CONSTITUENTID uniqueidentifier = null
,@USERDEFINEDID nvarchar(60) = ''
,@TYPECODE tinyint = 1
,@AMOUNT money = 0
,@DATE datetime = null
,@POSTDATE datetime = null
,@POSTSTATUSCODE tinyint = 1
,@DESCRIPTION nvarchar(100) = ''
,@LINEITEMS xml = null
,@PARENTID uniqueidentifier = null
,@PDACCOUNTSYSTEMID uniqueidentifier = null
,@TRANSACTIONCURRENCYID uniqueidentifier = null
,@BASEAMOUNT money = null
,@ORGAMOUNT money = null
)
as
set nocount on;
declare @MULTICURRENCYLINEITEMS tinyint;
if @ID is null
set @ID = newid()
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
declare @CURRENTDATE datetime
set @CURRENTDATE = getdate()
if @PDACCOUNTSYSTEMID is NULL
select @PDACCOUNTSYSTEMID = ID from dbo.PDACCOUNTSYSTEM where ISDEFAULT = 1;
if @TRANSACTIONCURRENCYID is NULL
begin
select @TRANSACTIONCURRENCYID = BASECURRENCYID from
dbo.CURRENCYSET as CS
inner join dbo.PDACCOUNTSYSTEM as PD on PD.CURRENCYSETID = CS.ID
where
PD.ID = @PDACCOUNTSYSTEMID;
if @BASEAMOUNT is NULL and @ORGAMOUNT is NULL
begin
set @BASEAMOUNT = @AMOUNT;
set @ORGAMOUNT = @AMOUNT;
end
else
raiserror ('ERR_FINANCIALTRANSACTION_BASEANDORGAMOUNT_REQUIRE_TRANSACTIONCURRENCY',16,1);
set @MULTICURRENCYLINEITEMS = 0
end;
else
set @MULTICURRENCYLINEITEMS = 1
begin try
-- handle inserting the data
insert into dbo.FINANCIALTRANSACTION
(
ID
,CONSTITUENTID
,USERDEFINEDID
,TYPECODE
,TRANSACTIONAMOUNT
,BASEAMOUNT
,ORGAMOUNT
,DATE
,DESCRIPTION
,PARENTID
,ADDEDBYID
,CHANGEDBYID
,DATEADDED
,DATECHANGED
,POSTDATE
,POSTSTATUSCODE
,PDACCOUNTSYSTEMID
,TRANSACTIONCURRENCYID
)
values
(
@ID
,@CONSTITUENTID
,@USERDEFINEDID
,@TYPECODE
,@AMOUNT
,@BASEAMOUNT
,@ORGAMOUNT
,@DATE
,@DESCRIPTION
,@PARENTID
,@CHANGEAGENTID
,@CHANGEAGENTID
,@CURRENTDATE
,@CURRENTDATE
,@POSTDATE
,@POSTSTATUSCODE
,@PDACCOUNTSYSTEMID
,@TRANSACTIONCURRENCYID
)
declare @ITEMSTABLE as table (
ID uniqueidentifier
,FINANCIALTRANSACTIONID uniqueidentifier
,AMOUNT money
,BASEAMOUNT money
,ORGAMOUNT money
,[DESCRIPTION] nvarchar(100)
,SEQUENCE int
,POSTDATE date
,POSTSTATUSCODE tinyint
,GLENTRIES xml
);
--TODO: Postdate and poststatus will need to be changed to the lineitems poststatus/postdate
insert into @ITEMSTABLE
select
ID
,@ID
,AMOUNT
,BASEAMOUNT
,ORGAMOUNT
,[DESCRIPTION]
,SEQUENCE
,@POSTDATE
,@POSTSTATUSCODE
,GLENTRIES
from dbo.UFN_FINANCIALTRANSACTION_LINEITEMS_FROMITEMLISTXML(@LINEITEMS,@MULTICURRENCYLINEITEMS);
if @LINEITEMS is null or not exists (select * from @ITEMSTABLE)
begin
declare @LINEITEMID uniqueidentifier;
set @LINEITEMID = null;
-- insert line item information with no GL distribution
exec dbo.USP_FINANCIALTRANSACTIONLINEITEM_ADD @LINEITEMID, @CHANGEAGENTID, @ID, @AMOUNT, 1, @DESCRIPTION, 1, @POSTDATE, @POSTSTATUSCODE, @BASEAMOUNT, @ORGAMOUNT;
end
else
begin
update @ITEMSTABLE
set ID = NEWID()
where ID = '00000000-0000-0000-0000-000000000000' or ID is null
insert into dbo.FINANCIALTRANSACTIONLINEITEM
(
ID
,FINANCIALTRANSACTIONID
,TRANSACTIONAMOUNT
,BASEAMOUNT
,ORGAMOUNT
,DESCRIPTION
,SEQUENCE
,POSTDATE
,POSTSTATUSCODE
-- boilerplate
, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select
ID
,@ID FINANCIALTRANSACTIONID
,AMOUNT
,BASEAMOUNT
,ORGAMOUNT
,DESCRIPTION
,SEQUENCE
,POSTDATE
,POSTSTATUSCODE
-- boilerplate
,@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
from
@ITEMSTABLE
;
insert into dbo.JOURNALENTRY
(
ID, TRANSACTIONAMOUNT, BASEAMOUNT, ORGAMOUNT, COMMENT, TRANSACTIONTYPECODE, GL.SEQUENCE
,CLASSCODE, POSTDATE, FINANCIALTRANSACTIONLINEITEMID
,DATAELEMENT1ID ,DATAELEMENT2ID ,DATAELEMENT3ID ,DATAELEMENT4ID ,DATAELEMENT5ID ,DATAELEMENT6ID ,DATAELEMENT7ID ,DATAELEMENT8ID ,DATAELEMENT9ID ,DATAELEMENT10ID
,DATAELEMENT11ID ,DATAELEMENT12ID ,DATAELEMENT13ID ,DATAELEMENT14ID ,DATAELEMENT15ID ,DATAELEMENT16ID ,DATAELEMENT17ID ,DATAELEMENT18ID ,DATAELEMENT19ID ,DATAELEMENT20ID
,DATAELEMENT21ID ,DATAELEMENT22ID ,DATAELEMENT23ID ,DATAELEMENT24ID ,DATAELEMENT25ID ,DATAELEMENT26ID ,DATAELEMENT27ID ,DATAELEMENT28ID ,DATAELEMENT29ID ,DATAELEMENT30ID
-- boilerplate
, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
)
select -- let's do credits and debits for GLENTRIES in lineitems
newid(), GL.AMOUNT, GL.BASEAMOUNT, GL.ORGAMOUNT, COMMENT, TRANSACTIONTYPECODE, GL.SEQUENCE
,CLASSCODE, GL.POSTDATE, ID FINANCIALTRANSACTIONLINEITEMID
,DATAELEMENT1ID ,DATAELEMENT2ID ,DATAELEMENT3ID ,DATAELEMENT4ID ,DATAELEMENT5ID ,DATAELEMENT6ID ,DATAELEMENT7ID ,DATAELEMENT8ID ,DATAELEMENT9ID ,DATAELEMENT10ID
,DATAELEMENT11ID ,DATAELEMENT12ID ,DATAELEMENT13ID ,DATAELEMENT14ID ,DATAELEMENT15ID ,DATAELEMENT16ID ,DATAELEMENT17ID ,DATAELEMENT18ID ,DATAELEMENT19ID ,DATAELEMENT20ID
,DATAELEMENT21ID ,DATAELEMENT22ID ,DATAELEMENT23ID ,DATAELEMENT24ID ,DATAELEMENT25ID ,DATAELEMENT26ID ,DATAELEMENT27ID ,DATAELEMENT28ID ,DATAELEMENT29ID ,DATAELEMENT30ID
-- boilerplate
,@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
from
@ITEMSTABLE
cross apply dbo.UFN_FINANCIALTRANSACTION_LINEITEM_GL_FROMITEMLISTXML_MC(GLENTRIES,@MULTICURRENCYLINEITEMS,@BASEAMOUNT,@ORGAMOUNT) as GL
end
end try
begin catch
exec dbo.USP_RAISE_ERROR
return 1
end catch
return 0