TR_PDACCOUNTSEGMENTVALUE_UPD_UPDATEACCOUNTSTRING

Definition

Copy


        CREATE trigger dbo.TR_PDACCOUNTSEGMENTVALUE_UPD_UPDATEACCOUNTSTRING
          on dbo.PDACCOUNTSEGMENTVALUE for update
        as
        declare @IsBasicGL Bit;
        declare @ShortID nvarchar(100);
        declare @Description nvarchar(60);
    declare @Length tinyint;
        select top 1 @IsBasicGL = T2.ISBASICGL, @ShortID = T1.SHORTDESCRIPTION, @Description = T1.DESCRIPTION, @Length = T2.LENGTH from inserted T1 join dbo.PDACCOUNTSTRUCTURE T2 on T1.PDACCOUNTSTRUCTUREID = T2.ID
        if @IsBasicGL = 0
            begin
                if UPDATE(SHORTDESCRIPTION)
                begin
                    declare
                      @CHANGEAGENTID uniqueidentifier,
                      @CURRENTDATE datetime = getdate();

                        if not ((len(@ShortID) = @Length) and (@Length > 0)) and not ((@Length = 0) and (len(@ShortID)>=(0)) and (len(@ShortID) < 101))
                            BEGIN
                                RAISERROR ('CK_DATAELEMENT_LENGTH', 16, 1)
                                ROLLBACK
                            END        

                        if not ((charindex('*',@ShortID) = 0) and (charindex('%',@ShortID) = 0) and (charindex('-',@ShortID) = 0) and (charindex(',',@ShortID) = 0) and (charindex('/',@ShortID) = 0) and (charindex(';',@ShortID) = 0) and (charindex('.',@ShortID) = 0))
                            BEGIN
                                RAISERROR ('CK_DATAELEMENT_SHORTIDVALIDCHARACTERS', 16, 1)
                                ROLLBACK
                            END                            

                        if @Description is null    
                            BEGIN
                                RAISERROR ('CK_DATAELEMENT_DESCRIPTION', 16, 1)
                                ROLLBACK
                            END                            

                        if not ((len(@Description)>(0)) and (len(@Description) < 61))    
                            BEGIN
                                RAISERROR ('CK_DATAELEMENT_DESCRIPTION', 16, 1)
                                ROLLBACK
                            END    


                    exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
                    declare @SEPARATOR nvarchar(1);
                    select top 1 @SEPARATOR = SEPARATOR from dbo.LEDGERPREFERENCE;

                    --First CTE limits updated accounts to only those which are using the updated dataelements

                    with [ACCOUNTS] as
                    (
                      select unpvt.ID from
                        (select ID, 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 GLACCOUNT) as P
                       unpivot
                        (DATAELEMENTID for dColumn in 
                          (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)
                        ) as unpvt
                      inner join dbo.GLACCOUNT on unpvt.ID = GLACCOUNT.ID
                      inner join inserted on unpvt.DATAELEMENTID = inserted.ID
                    )
                    --This CTE has all elements for the accounts in ACCOUNTS

                    , [ELEMENTS] as
                    (
                      select unpvt.ID, DATAELEMENTID, SHORTDESCRIPTION, SEGMENTSEQUENCE
                      from
                        (select GLACCOUNT.ID, 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 GLACCOUNT
                        inner join [ACCOUNTS] on GLACCOUNT.ID = ACCOUNTS.ID) as P
                       unpivot
                        (DATAELEMENTID for dColumn in 
                          (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)
                        ) as unpvt
                      inner join dbo.PDACCOUNTSEGMENTVALUE on unpvt.DATAELEMENTID = PDACCOUNTSEGMENTVALUE.ID
                      inner join dbo.PDACCOUNTSTRUCTURE on PDACCOUNTSEGMENTVALUE.PDACCOUNTSTRUCTUREID = PDACCOUNTSTRUCTURE.ID
                    ),
                    --This CTE actually creates the updated account strings for each account

                    CTE as
                    (
                      select 
                        ID, 
                        ACCT.list.value('.','nvarchar(130)') as ACCTSTR
                      from
                        [ACCOUNTS] T1
                      cross apply
                        (
                          select isnull(SHORTDESCRIPTION+@SEPARATOR,'')
                          from [ELEMENTS]
                          where T1.ID = [ELEMENTS].ID
                          order by SEGMENTSEQUENCE
                          for xml path(''), type
                        ) ACCT (list)
                    )
                    update GLACCOUNT set
                      ACCOUNTSTRING = left(T1.acctstr, len(T1.acctstr)-1),
                      CHANGEDBYID = @CHANGEAGENTID,
                      DATECHANGED = @CURRENTDATE
                    from
                      CTE T1
                    where T1.ID = GLACCOUNT.ID
                    ;
                end
        if update(DESCRIPTION)
        begin
            if not ((charindex('*',@Description) = 0) and (charindex('?',@Description) = 0))
            begin
              raiserror('CK_DATAELEMENT_DESCRIPTIONVALIDCHARACTERS', 16, 1)
              rollback
            end
        end
            end
        else
            begin
                if not ((len(@ShortID)>=(0)) and (len(@ShortID) < 101))    
                    BEGIN
                        RAISERROR ('CK_PDACCOUNTSEGMENTVALUE_SHORTDESCRIPTION', 16, 1)
                        ROLLBACK
                    END                        
            end