%ZTLOAD3 ;SEA/RDS - TaskMan: Task Requeue ;07/29/08  11:46
 ;;8.0;KERNEL;**67,127,136,192,446**;JUL 10, 1995;Build 35
 ;
INPUT ;check for error conditions
 N %H,%T,X,X1,Y,ZT,ZT1,ZT2,ZT3,ZTH,ZTL,ZTOS,ZTREC,ZTREC1,ZTREC2,ZTREC25
 S ZTSK=$G(ZTSK) K ZTSK(0),ZTREQ ;Kill ZTREQ so we don't kill the entry
 L +^%ZTSK(ZTSK):9 S ZTREC=$G(^%ZTSK(ZTSK,0)) I ZTREC="" G BAD
 I $D(ZTDTH)#2,ZTDTH]"",ZTDTH'?1.5N1","1.5N,ZTDTH'?7N.".".N,ZTDTH'="@","SHD"'[$E(ZTDTH,$L(ZTDTH)) G BAD
 ;
DQ ;make sure task is not pending
 D UNSCH^%ZTLOAD6
 I $D(^%ZTSK(ZTSK,0))[0 G BAD
 ;
ZTDTH ;determine task's next start time
 S:$P(ZTREC,"^",16)="" $P(ZTREC,"^",16)=$P(ZTREC,"^",5) ;Save original create time
 S $P(ZTREC,"^",5)=$H ;Set a new create time
 I $D(ZTDTH)[0 S ZTDTH=$P(ZTREC,"^",6) G ZTRTN ;Use original time.
 I ZTDTH="" S ZTDTH=$H G ZTRTN
 I ZTDTH?1.5N1","1.5N G ZTRTN
 I ZTDTH?7N.".".N S ZTDTH=$$FMTH^%ZTLOAD7(ZTDTH) G ZTRTN
 I ZTDTH="@" G ZTRTN
 S ZTH=$$H3^%ZTM($P(ZTREC,"^",6)),ZTL=$E(ZTDTH,$L(ZTDTH)) ;From start time
DT I ZTL="S" S ZTH=ZTH+ZTDTH
 I ZTL="H" S ZTH=(ZTDTH*3600)+ZTH
 I ZTL="D" S ZTH=(ZTDTH*86400)+ZTH
DTX I ZTH<$$H3^%ZTM($H) G DT
 S ZTDTH=$$H0^%ZTM(ZTH)
 ;
ZTRTN ;determine whether entry point should change
 I $D(ZTRTN)[0 G ZTIO
 I ZTRTN="" G ZTIO
 I ZTRTN'[U S ZTRTN=U_ZTRTN
 S ZT=$P(ZTREC,U,1,2)
 I ZT'=ZTRTN S $P(ZTREC,U,1,2)=ZTRTN I ZT="ZTSK^XQ1" S $P(ZTREC,U,7,9)="R^^"
 ;
ZTIO ;determine whether i/o device should change
 N ZTREC2,ZTREC25
 S ZTREC2=$G(^%ZTSK(ZTSK,.2)),ZT=$P(ZTREC2,U)
 I $D(ZTIO)[0 G ZTIO1
 I ZTIO="" G ZTIO1
 I $P(ZTIO,";")'=$P(ZT,";") S $P(ZTREC2,U,6)="",ZTREC25=""
 I ZTIO="@" S $P(ZTREC2,U)="" G ZTIO1
 I ZTIO'=ZT S $P(ZTREC2,U)=ZTIO
 ;
ZTIO1 ;set hunt group suppression flag
 S $P(ZTREC2,U,5)=$S($D(ZTIO(1))[0:"",ZTIO(1)="D":"DIRECT",1:"")
 ;
ZTDESC ;determine whether description should change
 I $S($D(ZTDESC)[0:1,ZTDESC="":1,1:0) S ZTDESC=$G(^%ZTSK(ZTSK,.03))
 I ZTDESC=""!(ZTDESC="No Description (%ZTLOAD)") S ZTDESC="No Description (REQ~%ZTLOAD)"
 S ^%ZTSK(ZTSK,.03)=ZTDESC
 ;
RECORD ;record changes in Task File entry
 I $D(ZTREC2)#2 S ^%ZTSK(ZTSK,.2)=ZTREC2
 I $D(ZTREC25)#2 S ^%ZTSK(ZTSK,.25)=ZTREC25
 I ZTDTH'="@" S $P(ZTREC,U,6)=ZTDTH ;Reset the Scheduled time piece
 S ^%ZTSK(ZTSK,0)=ZTREC
 S $P(^%ZTSK(ZTSK,.1),U,1,3)=$S(ZTDTH'="@":"1^"_$H_"^REQUEUED",1:"H^"_$H_"^EDITED BUT NOT REQUEUED")
 ;
ZTSAVE ;See if new data to save
 K %H,%T,X,X1,Y,ZT,ZT1,ZT2,ZT3,ZTH,ZTL,ZTOS,ZTREC,ZTREC1,ZTREC2,ZTREC25
 K ZTDESC,ZTIO,ZTRTN
 I $D(ZTSAVE) K:$G(ZTSAVE)="KILL" ^%ZTSK(ZTSK,.3) D ZTSAVE^%ZTLOAD1
SCHED ;schedule task, cleanup, quit
 I ZTDTH'="@" L +^%ZTSCH("SCHQ"):6 S ZT=$$H3^%ZTLOAD1(ZTDTH),^%ZTSK(ZTSK,.04)=ZT,^%ZTSCH(ZT,ZTSK)="" L -^%ZTSCH("SCHQ")
 K %X,%Y,X,X1,Y,ZT1,ZT2,ZT3,ZTDTH,ZTSAVE
 L -^%ZTSK(ZTSK) S ZTSK(0)=1
 Q
 ;
BAD L -^%ZTSK(ZTSK) S ZTSK(0)=0
 Q
REQP(ZT1) ;Reschedule a persistent task. Called from ZTM
 N ZTSK,ZT2,ZT3,ZTDTH,ZTSAVE S ZTDTH=$H,ZTSK=ZT1
 L +^%ZTSK(ZTSK):20 Q:'$T
 I $D(^%ZTSK(ZTSK,0))[0 Q  ;Should tell someone
 G SCHED
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HZTLOAD3   3059     printed  Sep 23, 2025@19:52:24                                                                                                                                                                                                     Page 2
%ZTLOAD3  ;SEA/RDS - TaskMan: Task Requeue ;07/29/08  11:46
 +1       ;;8.0;KERNEL;**67,127,136,192,446**;JUL 10, 1995;Build 35
 +2       ;
INPUT     ;check for error conditions
 +1        NEW %H,%T,X,X1,Y,ZT,ZT1,ZT2,ZT3,ZTH,ZTL,ZTOS,ZTREC,ZTREC1,ZTREC2,ZTREC25
 +2       ;Kill ZTREQ so we don't kill the entry
           SET ZTSK=$GET(ZTSK)
           KILL ZTSK(0),ZTREQ
 +3        LOCK +^%ZTSK(ZTSK):9
           SET ZTREC=$GET(^%ZTSK(ZTSK,0))
           IF ZTREC=""
               GOTO BAD
 +4        IF $DATA(ZTDTH)#2
               IF ZTDTH]""
                   IF ZTDTH'?1.5N1","1.5N
                       IF ZTDTH'?7N.".".N
                           IF ZTDTH'="@"
                               IF "SHD"'[$EXTRACT(ZTDTH,$LENGTH(ZTDTH))
                                   GOTO BAD
 +5       ;
DQ        ;make sure task is not pending
 +1        DO UNSCH^%ZTLOAD6
 +2        IF $DATA(^%ZTSK(ZTSK,0))[0
               GOTO BAD
 +3       ;
ZTDTH     ;determine task's next start time
 +1       ;Save original create time
           if $PIECE(ZTREC,"^",16)=""
               SET $PIECE(ZTREC,"^",16)=$PIECE(ZTREC,"^",5)
 +2       ;Set a new create time
           SET $PIECE(ZTREC,"^",5)=$HOROLOG
 +3       ;Use original time.
           IF $DATA(ZTDTH)[0
               SET ZTDTH=$PIECE(ZTREC,"^",6)
               GOTO ZTRTN
 +4        IF ZTDTH=""
               SET ZTDTH=$HOROLOG
               GOTO ZTRTN
 +5        IF ZTDTH?1.5N1","1.5N
               GOTO ZTRTN
 +6        IF ZTDTH?7N.".".N
               SET ZTDTH=$$FMTH^%ZTLOAD7(ZTDTH)
               GOTO ZTRTN
 +7        IF ZTDTH="@"
               GOTO ZTRTN
 +8       ;From start time
           SET ZTH=$$H3^%ZTM($PIECE(ZTREC,"^",6))
           SET ZTL=$EXTRACT(ZTDTH,$LENGTH(ZTDTH))
DT         IF ZTL="S"
               SET ZTH=ZTH+ZTDTH
 +1        IF ZTL="H"
               SET ZTH=(ZTDTH*3600)+ZTH
 +2        IF ZTL="D"
               SET ZTH=(ZTDTH*86400)+ZTH
DTX        IF ZTH<$$H3^%ZTM($HOROLOG)
               GOTO DT
 +1        SET ZTDTH=$$H0^%ZTM(ZTH)
 +2       ;
ZTRTN     ;determine whether entry point should change
 +1        IF $DATA(ZTRTN)[0
               GOTO ZTIO
 +2        IF ZTRTN=""
               GOTO ZTIO
 +3        IF ZTRTN'[U
               SET ZTRTN=U_ZTRTN
 +4        SET ZT=$PIECE(ZTREC,U,1,2)
 +5        IF ZT'=ZTRTN
               SET $PIECE(ZTREC,U,1,2)=ZTRTN
               IF ZT="ZTSK^XQ1"
                   SET $PIECE(ZTREC,U,7,9)="R^^"
 +6       ;
ZTIO      ;determine whether i/o device should change
 +1        NEW ZTREC2,ZTREC25
 +2        SET ZTREC2=$GET(^%ZTSK(ZTSK,.2))
           SET ZT=$PIECE(ZTREC2,U)
 +3        IF $DATA(ZTIO)[0
               GOTO ZTIO1
 +4        IF ZTIO=""
               GOTO ZTIO1
 +5        IF $PIECE(ZTIO,";")'=$PIECE(ZT,";")
               SET $PIECE(ZTREC2,U,6)=""
               SET ZTREC25=""
 +6        IF ZTIO="@"
               SET $PIECE(ZTREC2,U)=""
               GOTO ZTIO1
 +7        IF ZTIO'=ZT
               SET $PIECE(ZTREC2,U)=ZTIO
 +8       ;
ZTIO1     ;set hunt group suppression flag
 +1        SET $PIECE(ZTREC2,U,5)=$SELECT($DATA(ZTIO(1))[0:"",ZTIO(1)="D":"DIRECT",1:"")
 +2       ;
ZTDESC    ;determine whether description should change
 +1        IF $SELECT($DATA(ZTDESC)[0:1,ZTDESC="":1,1:0)
               SET ZTDESC=$GET(^%ZTSK(ZTSK,.03))
 +2        IF ZTDESC=""!(ZTDESC="No Description (%ZTLOAD)")
               SET ZTDESC="No Description (REQ~%ZTLOAD)"
 +3        SET ^%ZTSK(ZTSK,.03)=ZTDESC
 +4       ;
RECORD    ;record changes in Task File entry
 +1        IF $DATA(ZTREC2)#2
               SET ^%ZTSK(ZTSK,.2)=ZTREC2
 +2        IF $DATA(ZTREC25)#2
               SET ^%ZTSK(ZTSK,.25)=ZTREC25
 +3       ;Reset the Scheduled time piece
           IF ZTDTH'="@"
               SET $PIECE(ZTREC,U,6)=ZTDTH
 +4        SET ^%ZTSK(ZTSK,0)=ZTREC
 +5        SET $PIECE(^%ZTSK(ZTSK,.1),U,1,3)=$SELECT(ZTDTH'="@":"1^"_$HOROLOG_"^REQUEUED",1:"H^"_$HOROLOG_"^EDITED BUT NOT REQUEUED")
 +6       ;
ZTSAVE    ;See if new data to save
 +1        KILL %H,%T,X,X1,Y,ZT,ZT1,ZT2,ZT3,ZTH,ZTL,ZTOS,ZTREC,ZTREC1,ZTREC2,ZTREC25
 +2        KILL ZTDESC,ZTIO,ZTRTN
 +3        IF $DATA(ZTSAVE)
               if $GET(ZTSAVE)="KILL"
                   KILL ^%ZTSK(ZTSK,.3)
               DO ZTSAVE^%ZTLOAD1
SCHED     ;schedule task, cleanup, quit
 +1        IF ZTDTH'="@"
               LOCK +^%ZTSCH("SCHQ"):6
               SET ZT=$$H3^%ZTLOAD1(ZTDTH)
               SET ^%ZTSK(ZTSK,.04)=ZT
               SET ^%ZTSCH(ZT,ZTSK)=""
               LOCK -^%ZTSCH("SCHQ")
 +2        KILL %X,%Y,X,X1,Y,ZT1,ZT2,ZT3,ZTDTH,ZTSAVE
 +3        LOCK -^%ZTSK(ZTSK)
           SET ZTSK(0)=1
 +4        QUIT 
 +5       ;
BAD        LOCK -^%ZTSK(ZTSK)
           SET ZTSK(0)=0
 +1        QUIT 
REQP(ZT1) ;Reschedule a persistent task. Called from ZTM
 +1        NEW ZTSK,ZT2,ZT3,ZTDTH,ZTSAVE
           SET ZTDTH=$HOROLOG
           SET ZTSK=ZT1
 +2        LOCK +^%ZTSK(ZTSK):20
           if '$TEST
               QUIT 
 +3       ;Should tell someone
           IF $DATA(^%ZTSK(ZTSK,0))[0
               QUIT 
 +4        GOTO SCHED