1 | SDNEXT ;ALB/TMP - FIND NEXT AVAILABLE APPOINTMENT FOR A CLINIC ; 18 APR 86
|
---|
2 | ;;5.3;Scheduling;**41,45,165**;AUG 13, 1993
|
---|
3 | ;
|
---|
4 | S IOP=$S($D(ION):ION,1:"HOME") D ^%ZIS K IOP
|
---|
5 | 1 S SDNEXT="",SDCT=0 G RD^SDMULT
|
---|
6 | DT S FND=0,%DT(0)=-SDMAX,%DT="AEF",%DT("A")=" START SEARCH FOR NEXT AVAILABLE FROM WHAT DATE: " D ^%DT K %DT G:"^"[X 1:$S('$D(SDNEXT):1,'SDNEXT:1,1:0),END^SDMULT0 G:Y<0 DT S SDSTRTDT=+Y
|
---|
7 | LIM W !," ENTER LATEST DATE TO CHECK FOR 1ST AVAILABLE SLOT: " S Y=SDMAX D DT^DIQ R "// ",X:DTIME G:X["^"!'($T) END^SDMULT0 I X']"" G OVR^SDMULT0
|
---|
8 | I X?.E1"?" W !," The latest date for future bookings for ",$P(SDC(1),"^",2)," is: " S Y=SDMAX D DTS^SDUTL W Y,!," If you enter a date here, it must be less than this date to further limit the",!," search" G LIM
|
---|
9 | S %DT="EF",%DT(0)=-SDMAX D ^%DT K %DT G:Y<0!(Y<SDSTRTDT) LIM S:Y>0 SDMAX=+Y
|
---|
10 | G OVR^SDMULT0
|
---|
11 | ;
|
---|
12 | NEW ;entry point to be use for next available appt. 3/29/96
|
---|
13 | K VAUTT,VAUTC,SCUP
|
---|
14 | N SCOKNULL
|
---|
15 | S SCOKNULL=1
|
---|
16 | S IOP=$S($D(ION):ION,1:"HOME") D ^%ZIS K IOP
|
---|
17 | S SDNEXT="",SDCT=0
|
---|
18 | S VAUTNA="" ;don't allow all to be selected
|
---|
19 | S VAUTCA="" ;allow any clinic to be selected
|
---|
20 | S VAUTD=1 ;all divisions
|
---|
21 | D CLINIC^SCRPU1 ;prompt for clinics (none,one,many)
|
---|
22 | Q:$D(SCUP) ; "^" SELECTED
|
---|
23 | D PRMTT^SCRPU1 ;prompt for team (none,one,many)
|
---|
24 | Q:('$D(VAUTT))&('$D(VAUTC))
|
---|
25 | Q:$D(SCUP) ; "^" SELECTED
|
---|
26 | S APPTL=$$LENGTH()
|
---|
27 | Q:APPTL<0
|
---|
28 | S FIRST="First date to check for 1st available appointments: "
|
---|
29 | S SECOND="Latest date to check for available appointments: "
|
---|
30 | S RANG=$$DTRANG^SCRPU2(FIRST,SECOND)
|
---|
31 | I RANG=-1 D CLEAN,EXIT Q
|
---|
32 | I $D(VAUTT) D GETCLN(.VAUTT,.VAUTC)
|
---|
33 | ;all clinics selected & position assoc clinics in VAUTC(ien)=clinic name
|
---|
34 | D DRIVE(.VAUTC,APPTL,RANG)
|
---|
35 | D CLEAN,EXIT
|
---|
36 | Q
|
---|
37 | EXIT ;
|
---|
38 | K VAUTD,VAUTNA,VAUTT,VAUTC,FIRST,SECOND,RANG,APPTL,SCPCMM,SDNEXT,SDCT
|
---|
39 | K VAUTCA,SCUP
|
---|
40 | Q
|
---|
41 | ;
|
---|
42 | LENGTH() ;
|
---|
43 | ;prompt for appointment length
|
---|
44 | N LEN
|
---|
45 | ST S DIR(0)="N"
|
---|
46 | S DIR("A")="Appointment Length Needed "
|
---|
47 | D ^DIR
|
---|
48 | I Y=""!(X="^")!(X="") S LEN=-1 G EX
|
---|
49 | S LEN=X
|
---|
50 | EX K DIR,Y,X
|
---|
51 | Q LEN
|
---|
52 | ;
|
---|
53 | GETCLN(TEAM,CLINIC) ;add assoc. clinics for teams to clinic array
|
---|
54 | ;TEAM - team array
|
---|
55 | ;CLINIC - clinic array
|
---|
56 | ;
|
---|
57 | N TM,LIST,ERR,OKAY
|
---|
58 | S TM=0,LIST="TPLIST",ERR="ERR1"
|
---|
59 | F S TM=$O(TEAM(TM)) Q:TM=""!(TM'?.N) D
|
---|
60 | .K @LIST,@ERR
|
---|
61 | .S OKAY=$$TPTM^SCAPMC24(TM,"","","",LIST,ERR)
|
---|
62 | .;@LIST contains all positions for team TM
|
---|
63 | .I $G(@LIST@(0))>0 D ADDCL(.CLINIC,LIST)
|
---|
64 | Q
|
---|
65 | ;
|
---|
66 | ADDCL(CLINIC,PTLIST) ;add team's associated clinics to clinic list
|
---|
67 | ;CLINIC - array of selected clinics
|
---|
68 | ;PTLIST - array of all positions for a selected team
|
---|
69 | N CNAME,CIEN,TPNODE,TPIEN,NODE,EN
|
---|
70 | S EN=0
|
---|
71 | F S EN=$O(@PTLIST@(EN)) Q:EN=""!(EN'?.N) D
|
---|
72 | .S NODE=$G(@PTLIST@(EN))
|
---|
73 | .S TPIEN=+$P(NODE,"^") ;team position ien
|
---|
74 | .S TPNODE=$G(^SCTM(404.57,TPIEN,0))
|
---|
75 | .Q:TPNODE=""
|
---|
76 | .S CIEN=+$P(TPNODE,"^",9) ;clinic ien
|
---|
77 | .Q:CIEN=0 ;no associated clinic
|
---|
78 | .S CNAME=$P($G(^SC(CIEN,0)),"^") ;clinic name
|
---|
79 | .S CLINIC(CIEN)=CNAME
|
---|
80 | Q
|
---|
81 | ;
|
---|
82 | DRIVE(CLINICA,LEN,BEGEND) ;driver
|
---|
83 | ;CLINICA - clinic array
|
---|
84 | ;LEN - appt. length wanted
|
---|
85 | ;BEGEND - begin date ^ end date
|
---|
86 | ;
|
---|
87 | N CIEN,COUNT,CONT,FND
|
---|
88 | S SDNEXT="",SDCT=1
|
---|
89 | S CIEN=0,STOP=0,COUNT=1
|
---|
90 | F S CIEN=$O(CLINICA(CIEN)) Q:CIEN=""!(CIEN'?.N)!(STOP) D
|
---|
91 | .S SDNEXT=""
|
---|
92 | .S SDSTRTDT=$P(BEGEND,"^")
|
---|
93 | .S SDMAX=$P(BEGEND,"^",2)
|
---|
94 | .S SDC(COUNT)=CIEN,SDC1(CIEN)=$G(CLINICA(CIEN))_"^"_LEN
|
---|
95 | .S SDCT=COUNT,SC=CIEN,FND=0
|
---|
96 | .D OVR^SDMULT0 S CONT=$$CONMA(CIEN,$S($O(CLINICA(CIEN)):0,1:1))
|
---|
97 | .K SDC(COUNT),SDC1(CIEN)
|
---|
98 | .;S CONT=$$CONMA(CIEN)
|
---|
99 | .Q:STOP
|
---|
100 | I $G(CONT)="M" D CLEAN S:$$ONE(.CLINICA) SDCLN=$O(CLINICA(0)) G ^SDM
|
---|
101 | Q
|
---|
102 | CLEAN ;
|
---|
103 | D END^SDMULT0
|
---|
104 | K SDSTRTDT,SDNEXT,SDMAX,SDC,SDCT,SDC1,SDL,STOP,SDAPP,SDPCMM,SDCLN,FND
|
---|
105 | K SCPCC,SDPCM1,SC
|
---|
106 | Q
|
---|
107 | ;
|
---|
108 | ONE(CLNA) ;one clinic selected? 1 or 0
|
---|
109 | N CNT,FIRST,RET,STP
|
---|
110 | S (CNT,STP)=0,RET=1
|
---|
111 | F S CNT=$O(CLNA(CNT)) Q:CNT=""!(STP) D
|
---|
112 | .I $D(FIRST) S STOP=1,RET=0
|
---|
113 | .I '$D(FIRST) S FIRST=1
|
---|
114 | Q RET
|
---|
115 | ;
|
---|
116 | CONMA(CIEN,CONT) ;continue to view, exit or make appointment
|
---|
117 | ;
|
---|
118 | PRT ;
|
---|
119 | S CONT=$G(CONT)
|
---|
120 | I $G(SDPCMM(CIEN))'>0&('CONT) Q -1
|
---|
121 | W !,"'^' TO EXIT"_$S('CONT:", 'C' TO CONTINUE",1:"")_" OR 'M' TO GOTO MAKE APPOINTMENT: "_$S(CONT:"^",1:"CONTINUE")_"//" R X:DTIME
|
---|
122 | I '$T!(X="^") S STOP=1,X=-1 G EX2
|
---|
123 | I (X'="^")&(X'="C")&(X'="M")&(X'="") G PRT
|
---|
124 | I CONT&(X="C") G PRT
|
---|
125 | I X="M" S STOP=1
|
---|
126 | I X="" S X="C"
|
---|
127 | EX2 Q X
|
---|