TR_PATTERNBLOCKMEETING_INSERTUPDATE_STARTENDTIMEUPDATE

Definition

Copy


                    CREATE trigger [dbo].[TR_PATTERNBLOCKMEETING_INSERTUPDATE_STARTENDTIMEUPDATE] 
                        on [dbo].[PATTERNBLOCKMEETING] 
                        for update, insert 
                    as begin
                        set nocount on

                        if update(TIMETABLEDAYPERIODID) 
                        begin
                            declare @CURRENTDATE datetime                                        
                            set @CURRENTDATE = GetDate()

                            begin try
                                update PATTERNBLOCKMEETING
                                    set STARTTIME = TDP.STARTTIME,
                                        ENDTIME =
                                            (select ENDTIME from
                                                (
                                                select ENDTIME, ROW_NUMBER() OVER (ORDER BY TIMETABLEDAYPERIOD.STARTTIME) as 'ROW_NUMBER'
                                                from 
                                                    TIMETABLEDAYPERIOD
                                                where 
                                                    TIMETABLEDAYPERIOD.TIMETABLEDAYID = PATTERNBLOCKMEETING.TIMETABLEDAYID 
                                                    and TIMETABLEDAYPERIOD.STARTTIME >= TDP.STARTTIME 
                                                ) as endrow
                                            where 
                                                endrow.ROW_NUMBER = inserted.LENGTHINPERIODS),
                                        DATECHANGED = @CURRENTDATE,
                                        CHANGEDBYID = inserted.CHANGEDBYID  
                                from 
                                    PATTERNBLOCKMEETING
                                inner join 
                                    inserted on inserted.ID = PATTERNBLOCKMEETING.ID
                                inner join 
                                    TIMETABLEDAYPERIOD TDP on TDP.ID = PATTERNBLOCKMEETING.TIMETABLEDAYPERIODID 
                            end try

                            begin catch
                                exec dbo.USP_RAISE_ERROR
                            end catch
                        end

                        if (exists (select PATTERNBLOCKMEETING.ID 
                                    from 
                                        PATTERNBLOCKMEETING
                                    inner join 
                                        inserted on inserted.ID = PATTERNBLOCKMEETING.ID
                                    where 
                                        PATTERNBLOCKMEETING.STARTTIME IS NULL OR PATTERNBLOCKMEETING.ENDTIME IS NULL))
                            raiserror('BBERR_PATTERNBLOCKMEETING_TIME_CANNOTBENULL', 13, 1)

                        if (exists (select PATTERNBLOCKMEETING.ID 
                                    from 
                                        PATTERNBLOCKMEETING
                                    inner join 
                                        inserted on inserted.ID = PATTERNBLOCKMEETING.ID
                                    where 
                                        PATTERNBLOCKMEETING.STARTTIME >= PATTERNBLOCKMEETING.ENDTIME))
                            raiserror('BBERR_PATTERNBLOCKMEETING_ENDTIMEBEFORESTARTTIME', 13, 1)

                        if (exists (select A.ID  
                                    from 
                                        PATTERNBLOCKMEETING A
                                    inner join 
                                        PATTERNBLOCKMEETING B on A.PATTERNBLOCKID = B.PATTERNBLOCKID
                                    where 
                                        A.ID <> B.ID and A.TIMETABLEDAYID = B.TIMETABLEDAYID and
                                      ((A.STARTTIME > B.STARTTIME and A.STARTTIME < B.ENDTIME) 
                                      or (A.ENDTIME > B.STARTTIME and A.ENDTIME < B.ENDTIME))))
                            raiserror('BBERR_PATTERNBLOCKMEETING_TIMES_OVERLAP', 13, 1)   

                        if (exists (select A.ID  
                                    from 
                                        PATTERNBLOCKMEETING A
                                    inner join 
                                        PATTERNBLOCKMEETING B on A.PATTERNBLOCKID = B.PATTERNBLOCKID
                                    where 
                                        A.ID <> B.ID and A.TIMETABLEDAYID = B.TIMETABLEDAYID and
                             A.STARTTIME = B.STARTTIME and A.ENDTIME = B.ENDTIME))
                            raiserror('BBERR_PATTERNBLOCKMEETING_UNIQUE', 13, 1)        
                    end