USP_DATAFORMTEMPLATE_EDIT_JOURNALENTRIES
The save procedure used by the edit dataform template "Financial Transaction Journal Entry 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. |
@BATCHJOURNALENTRIES | xml | IN | Journal entries |
Definition
Copy
CREATE procedure [dbo].[USP_DATAFORMTEMPLATE_EDIT_JOURNALENTRIES] (
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@BATCHJOURNALENTRIES xml
)
as
set nocount on;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
declare @CURRENTDATE datetime;
declare @BATCHID uniqueidentifier;
set @CURRENTDATE = getdate();
declare @temp table (
JOURNALENTRYID uniqueidentifier NOT NULL,
AMOUNT money NULL,
CLASSCODE tinyint NULL,
COMMENT nvarchar(60) NULL,
JOURNALCODEID uniqueidentifier NULL,
PERCENTAGE numeric(20,4) NULL,
SEQUENCE int NOT NULL,
TRANSACTIONTYPECODE tinyint NULL,
POSTDATE date null,
DATAELEMENT1ID uniqueidentifier null,
DATAELEMENT2ID uniqueidentifier null,
DATAELEMENT3ID uniqueidentifier null,
DATAELEMENT4ID uniqueidentifier null,
DATAELEMENT5ID uniqueidentifier null,
DATAELEMENT6ID uniqueidentifier null,
DATAELEMENT7ID uniqueidentifier null,
DATAELEMENT8ID uniqueidentifier null,
DATAELEMENT9ID uniqueidentifier null,
DATAELEMENT10ID uniqueidentifier null,
DATAELEMENT11ID uniqueidentifier null,
DATAELEMENT12ID uniqueidentifier null,
DATAELEMENT13ID uniqueidentifier null,
DATAELEMENT14ID uniqueidentifier null,
DATAELEMENT15ID uniqueidentifier null,
DATAELEMENT16ID uniqueidentifier null,
DATAELEMENT17ID uniqueidentifier null,
DATAELEMENT18ID uniqueidentifier null,
DATAELEMENT19ID uniqueidentifier null,
DATAELEMENT20ID uniqueidentifier null,
DATAELEMENT21ID uniqueidentifier null,
DATAELEMENT22ID uniqueidentifier null,
DATAELEMENT23ID uniqueidentifier null,
DATAELEMENT24ID uniqueidentifier null,
DATAELEMENT25ID uniqueidentifier null,
DATAELEMENT26ID uniqueidentifier null,
DATAELEMENT27ID uniqueidentifier null,
DATAELEMENT28ID uniqueidentifier null,
DATAELEMENT29ID uniqueidentifier null,
DATAELEMENT30ID uniqueidentifier null,
ANNOTATIONXML xml null)
begin try
begin transaction
insert into @temp (
JOURNALENTRYID,
AMOUNT,
CLASSCODE,
COMMENT,
JOURNALCODEID,
PERCENTAGE,
SEQUENCE,
TRANSACTIONTYPECODE,
POSTDATE,
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,
ANNOTATIONXML)
select
CASE WHEN coalesce(JOURNALENTRYID,'00000000-0000-0000-0000-000000000000')='00000000-0000-0000-0000-000000000000' THEN NEWID() ELSE JOURNALENTRYID END JOURNALENTRYID,
CASE WHEN COALESCE(CREDITAMOUNT,0)<>0 THEN CREDITAMOUNT ELSE CASE WHEN coalesce(DEBITAMOUNT,0)<>0 THEN DEBITAMOUNT ELSE 0 END END,
CLASSCODE,
COMMENT,
JOURNALCODEID,
0,
SEQUENCE,
CASE WHEN COALESCE(CREDITAMOUNT,0)<>0 THEN 1 ELSE 0 END,
POSTDATE,
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,
ANNOTATIONS
from
dbo.[UFN_BATCHJOURNALENTRIES_FROMITEMLISTXML](@BATCHJOURNALENTRIES)
merge dbo.JOURNALENTRY as target
using (select
JOURNALENTRYID,
AMOUNT,
CLASSCODE,
COMMENT,
JOURNALCODEID,
PERCENTAGE,
T1.SEQUENCE,
TRANSACTIONTYPECODE,
POSTDATE,
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
from @temp as T1) as source (
JOURNALENTRYID,
AMOUNT,
CLASSCODE,
COMMENT,
JOURNALCODEID,
PERCENTAGE,
SEQUENCE,
TRANSACTIONTYPECODE,
POSTDATE,
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
)
on (target.ID=source.JOURNALENTRYID and target.FINANCIALTRANSACTIONLINEITEMID=@ID)
when not matched by source and target.FINANCIALTRANSACTIONLINEITEMID=@ID then
DELETE
when matched then
update set
TRANSACTIONAMOUNT=source.AMOUNT,
CLASSCODE=source.CLASSCODE,
COMMENT=source.COMMENT,
JOURNALCODEID=source.JOURNALCODEID,
PERCENTAGE=source.PERCENTAGE,
SEQUENCE=source.SEQUENCE,
TRANSACTIONTYPECODE=source.TRANSACTIONTYPECODE,
POSTDATE=source.POSTDATE,
CHANGEDBYID=@CHANGEAGENTID,
DATECHANGED=@CURRENTDATE
,DATAELEMENT1ID=source.DATAELEMENT1ID ,DATAELEMENT2ID=source.DATAELEMENT2ID ,DATAELEMENT3ID=source.DATAELEMENT3ID, DATAELEMENT4ID=source.DATAELEMENT4ID ,DATAELEMENT5ID=source.DATAELEMENT5ID
,DATAELEMENT6ID=source.DATAELEMENT6ID ,DATAELEMENT7ID=source.DATAELEMENT7ID ,DATAELEMENT8ID=source.DATAELEMENT8ID ,DATAELEMENT9ID=source.DATAELEMENT9ID ,DATAELEMENT10ID=source.DATAELEMENT10ID
,DATAELEMENT11ID=source.DATAELEMENT11ID ,DATAELEMENT12ID=source.DATAELEMENT12ID ,DATAELEMENT13ID=source.DATAELEMENT13ID ,DATAELEMENT14ID=source.DATAELEMENT14ID ,DATAELEMENT15ID=source.DATAELEMENT15ID
,DATAELEMENT16ID=source.DATAELEMENT16ID ,DATAELEMENT17ID=source.DATAELEMENT17ID ,DATAELEMENT18ID=source.DATAELEMENT18ID ,DATAELEMENT19ID=source.DATAELEMENT19ID ,DATAELEMENT20ID=source.DATAELEMENT20ID
,DATAELEMENT21ID=source.DATAELEMENT21ID ,DATAELEMENT22ID=source.DATAELEMENT22ID ,DATAELEMENT23ID=source.DATAELEMENT23ID ,DATAELEMENT24ID=source.DATAELEMENT24ID ,DATAELEMENT25ID=source.DATAELEMENT25ID
,DATAELEMENT26ID=source.DATAELEMENT26ID ,DATAELEMENT27ID=source.DATAELEMENT27ID ,DATAELEMENT28ID=source.DATAELEMENT28ID ,DATAELEMENT29ID=source.DATAELEMENT29ID ,DATAELEMENT30ID=source.DATAELEMENT30ID
when not matched then
insert (
ID,
FINANCIALTRANSACTIONLINEITEMID,
TRANSACTIONAMOUNT,
CLASSCODE,
COMMENT,
JOURNALCODEID,
PERCENTAGE,
SEQUENCE,
TRANSACTIONTYPECODE,
POSTDATE,
ADDEDBYID,
DATEADDED,
CHANGEDBYID,
DATECHANGED,
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)
values (
source.JOURNALENTRYID,
@ID,
source.AMOUNT,
source.CLASSCODE,
source.COMMENT,
source.JOURNALCODEID,
source.PERCENTAGE,
source.SEQUENCE,
source.TRANSACTIONTYPECODE,
source.POSTDATE,
@CHANGEAGENTID,
@CURRENTDATE,
@CHANGEAGENTID,
@CURRENTDATE,
source.DATAELEMENT1ID,
source.DATAELEMENT2ID,
source.DATAELEMENT3ID,
source.DATAELEMENT4ID,
source.DATAELEMENT5ID,
source.DATAELEMENT6ID,
source.DATAELEMENT7ID,
source.DATAELEMENT8ID,
source.DATAELEMENT9ID,
source.DATAELEMENT10ID,
source.DATAELEMENT11ID,
source.DATAELEMENT12ID,
source.DATAELEMENT13ID,
source.DATAELEMENT14ID,
source.DATAELEMENT15ID,
source.DATAELEMENT16ID,
source.DATAELEMENT17ID,
source.DATAELEMENT18ID,
source.DATAELEMENT19ID,
source.DATAELEMENT20ID,
source.DATAELEMENT21ID,
source.DATAELEMENT22ID,
source.DATAELEMENT23ID,
source.DATAELEMENT24ID,
source.DATAELEMENT25ID,
source.DATAELEMENT26ID,
source.DATAELEMENT27ID,
source.DATAELEMENT28ID,
source.DATAELEMENT29ID,
source.DATAELEMENT30ID
);
--the following use of a temp table and broken out MERGE statement is just a work-around for a bug in SQL Server 2008
--http://connect.microsoft.com/SQLServer/feedback/details/321459/mergesql-incorrectly-tries-to-insert-nulls
declare @temp2 table (
JOURNALENTRYID uniqueidentifier NOT NULL,
ID uniqueidentifier NOT NULL,
ANNOTATIONCATEGORYCODE tinyint NOT NULL,
REFERENCENAME nvarchar(255) NULL,
SEQUENCE int NOT NULL,
VALIDATIONCODE int NOT NULL,
[TEXT] nvarchar(4000) null,
APPUSERID uniqueidentifier null,
DATEADDED datetime not null)
insert into @temp2
(JOURNALENTRYID,ID,ANNOTATIONCATEGORYCODE,REFERENCENAME,SEQUENCE ,VALIDATIONCODE,[TEXT], APPUSERID, [DATEADDED])
select
T1.JOURNALENTRYID,
CASE WHEN coalesce(T2.ID,'00000000-0000-0000-0000-000000000000')='00000000-0000-0000-0000-000000000000' THEN NEWID() ELSE T2.ID END ID,
T2.ANNOTATIONCATEGORYCODE,
T2.REFERENCENAME,
T2.SEQUENCE,
T2.VALIDATIONCODE,
T2.[TEXT],
T2.[APPUSERID],
T2.[DATEADDED]
from @temp T1 CROSS APPLY dbo.UFN_JOURNALENTRYANNOTATIONS_FROMITEMLISTXML(T1.ANNOTATIONXML) T2
merge dbo.JOURNALENTRYANNOTATION as target
using (select * from @temp2) as source
on (target.JOURNALENTRYID=source.JOURNALENTRYID AND target.ID=source.ID)
when not matched by source and (EXISTS (SELECT * FROM dbo.JOURNALENTRY WHERE ID=target.JOURNALENTRYID AND FINANCIALTRANSACTIONLINEITEMID=@ID)) then
delete
;
update dbo.JOURNALENTRYANNOTATION SET
JOURNALENTRYANNOTATION.ANNOTATIONCATEGORYCODE=T2.ANNOTATIONCATEGORYCODE,
JOURNALENTRYANNOTATION.REFERENCENAME=T2.REFERENCENAME,
JOURNALENTRYANNOTATION.SEQUENCE=T2.SEQUENCE,
JOURNALENTRYANNOTATION.VALIDATIONCODE=T2.VALIDATIONCODE,
JOURNALENTRYANNOTATION.[TEXT]=T2.[TEXT],
JOURNALENTRYANNOTATION.CHANGEDBYID=@CHANGEAGENTID,
JOURNALENTRYANNOTATION.DATECHANGED=@CURRENTDATE
from dbo.JOURNALENTRYANNOTATION inner join @temp2 T2 on JOURNALENTRYANNOTATION.ID=T2.ID
insert into dbo.JOURNALENTRYANNOTATION (
ID
,JOURNALENTRYID
,ANNOTATIONCATEGORYCODE
,REFERENCENAME
,SEQUENCE
,VALIDATIONCODE
,[TEXT]
,APPUSERID
,DATEADDED
,DATECHANGED
,ADDEDBYID
,CHANGEDBYID)
SELECT
T1.ID
,T1.JOURNALENTRYID
,T1.ANNOTATIONCATEGORYCODE
,T1.REFERENCENAME
,T1.SEQUENCE
,T1.VALIDATIONCODE
,T1.[TEXT]
,T1.APPUSERID
,@CURRENTDATE
,@CURRENTDATE
,@CHANGEAGENTID
,@CHANGEAGENTID
FROM
@temp2 T1
WHERE NOT EXISTS (SELECT 1 FROM dbo.JOURNALENTRYANNOTATION T2 WHERE T2.ID=T1.ID)
update JEB set
CHANGEDBYID = @CHANGEAGENTID
, DATECHANGED = @CURRENTDATE
from dbo.JOURNALENTRYBATCH JEB
inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on JEB.ID = LI.FINANCIALTRANSACTIONID
where LI.ID = @ID;
commit transaction
end try
begin catch
rollback transaction
exec dbo.USP_RAISE_ERROR
return 1
end catch
return 0