USP_DATAFORMTEMPLATE_ADD_FENXTADDACCOUNTSTRUCTURE

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT
@PDACCOUNTSYSTEMID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@INCLUDEPROJECT bit IN

Definition

Copy


                    CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_FENXTADDACCOUNTSTRUCTURE
                    (
                        @ID uniqueidentifier = null output,
                        @PDACCOUNTSYSTEMID uniqueidentifier,
                        @CHANGEAGENTID uniqueidentifier = null,
                        @INCLUDEPROJECT bit = 0
                    )
                    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 = getdate();

                    begin try
                        create table #tempAccountStructure (ID uniqueidentifier, DESCRIPTION nvarchar(100), SEQUENCE tinyint, LENGTH tinyint, SEPARATORCODE tinyint, ISPROJECTSEGMENT bit, PDACCOUNTTABLESAVAILABLEFORSEGMENTID uniqueidentifier)

                        insert into #tempAccountStructure (ID, DESCRIPTION, SEQUENCE, LENGTH, ISPROJECTSEGMENT, PDACCOUNTTABLESAVAILABLEFORSEGMENTID, SEPARATORCODE)
                        select newid(), SEGMENTTYPE, SEGMENTSEQUENCE, SEGMENTLENGTH, 0, '1BA6F27F-8454-4FC4-A830-3FDA8CD35D04',
                        case SEPARATOR when 'Hyphen' then 1 when 'Comma' then 2 when 'Slash' then 3 when 'Semicolon' then 4 when 'Period' then 5 when '<No separator>' then 6 end as SepCode
                        from 
                            (select isnull(nullif(SEPARATOR,''),lag(SEPARATOR) over (order by SEGMENTSEQUENCE)) as SEPARATOR,
                            SEGMENTTYPE, SEGMENTLENGTH, SEGMENTSEQUENCE
                            from dbo.FENXTACCOUNTSTRUCTURE
                            where PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID) as v1

                        if @INCLUDEPROJECT = 1
                            insert into #tempAccountStructure (ID, DESCRIPTION, SEQUENCE, LENGTH, ISPROJECTSEGMENT, PDACCOUNTTABLESAVAILABLEFORSEGMENTID, SEPARATORCODE)
                            values 
                            (newid(), 'Project', (select max(SEGMENTSEQUENCE) from dbo.FENXTACCOUNTSTRUCTURE)+1, len(convert(varchar,(select max(projectid) from dbo.FENXTPROJECT)))+1, 1, '2B1E041E-8FA3-4301-A5DB-E6531E9C3CED', 1)

                        --insert trigger on PDACCOUNTSTRUCTURE can't handle more than 1 row inserted at a timeso use a cursor

                        declare @STRUCTID uniqueidentifier 
                        declare @DESCRIPTION nvarchar(100
                        declare @SEQUENCE tinyint
                        declare @LENGTH tinyint
                        declare @SEPARATORCODE tinyint
                        declare @ISPROJECTSEGMENT tinyint
                        declare @PDACCOUNTTABLESAVAILABLEFORSEGMENTID uniqueidentifier

                        declare STRUCTURECURSOR cursor local fast_forward for
                            select ID, DESCRIPTION, SEQUENCE, LENGTH, SEPARATORCODE, ISPROJECTSEGMENT, PDACCOUNTTABLESAVAILABLEFORSEGMENTID
                            from #tempAccountStructure
                            order by SEQUENCE

                            open STRUCTURECURSOR
                            fetch next from STRUCTURECURSOR into @STRUCTID, @DESCRIPTION, @SEQUENCE, @LENGTH, @SEPARATORCODE, @ISPROJECTSEGMENT, @PDACCOUNTTABLESAVAILABLEFORSEGMENTID
                            while @@FETCH_STATUS = 0
                                begin
                                if @DESCRIPTION = 'Account code'
                                    update dbo.PDACCOUNTSTRUCTURE
                                        set SEQUENCE = @SEQUENCE,
                                        SEGMENTSEQUENCE = @SEQUENCE,
                                        LENGTH = @LENGTH,
                                        SEPARATORCODE = @SEPARATORCODE,
                                        CHANGEDBYID = @CHANGEAGENTID,
                                        DATECHANGED = @CURRENTDATE
                                    where PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID
                                    and SEGMENTTYPE = 1;
                                else
                                    exec dbo.USP_DATAFORMTEMPLATE_ADD_PDACCOUNTSTRUCTURE2
                                        @SYSTEMID = @PDACCOUNTSYSTEMID,
                                        @ID = @STRUCTID,
                                        @CHANGEAGENTID = @CHANGEAGENTID,
                                        @DESCRIPTION = @DESCRIPTION,
                                        @SEQUENCE = @SEQUENCE,
                                        @LENGTH = @LENGTH,
                                        @PDACCOUNTTABLESAVAILABLEFORSEGMENTID = @PDACCOUNTTABLESAVAILABLEFORSEGMENTID,
                                        @SEPARATORCODE = @SEPARATORCODE,
                                        @PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID,
                                        @ISPROJECTSEGMENT = @ISPROJECTSEGMENT;

                                fetch next from STRUCTURECURSOR into @STRUCTID, @DESCRIPTION, @SEQUENCE, @LENGTH, @SEPARATORCODE, @ISPROJECTSEGMENT, @PDACCOUNTTABLESAVAILABLEFORSEGMENTID
                                end

                        close STRUCTURECURSOR;
                        deallocate STRUCTURECURSOR;

                        drop table #tempAccountStructure;
                    end try

                    begin catch
                        exec dbo.USP_RAISE_ERROR
                        return 1
                    end catch

                    return 0;