| 1 | ORXTABS1 ; SLC/PKS - Edit tab parameters preferences. [9/11/00 1:40pm]
|
---|
| 2 | ;;3.0;ORDER ENTRY/RESULTS REPORTING;**9,47,84**;Dec 17, 1997
|
---|
| 3 | ;
|
---|
| 4 | ; Additional control code for Tab Preferences Editing - works in
|
---|
| 5 | ; conjunction with the main routine, ORXTABS.
|
---|
| 6 | ;
|
---|
| 7 | ; NOTE: Most ORX* variables used herein NEW'd in calling routine.
|
---|
| 8 | ;
|
---|
| 9 | Q
|
---|
| 10 | ;
|
---|
| 11 | EDIT ; Display list of this tab's parameter values, allow edit selection.
|
---|
| 12 | ;
|
---|
| 13 | ; Variables used herein:
|
---|
| 14 | ;
|
---|
| 15 | ; ORXCNT2 = Loop counter for concantenated user input.
|
---|
| 16 | ; ORXHI = High end of hyphenated entry.
|
---|
| 17 | ; ORXINPUT = Input string (DIR's Y var) from user's entry.
|
---|
| 18 | ; ORXLO = Low end of hyphenated entry.
|
---|
| 19 | ; ORXNUM2 = Number of pieces in concantenated user input.
|
---|
| 20 | ; ORXTEMP = Temporary value holder.
|
---|
| 21 | ; ORXTOT = Total holder.
|
---|
| 22 | ;
|
---|
| 23 | N ORXCNT2,ORXHI,ORXINPUT,ORXLO,ORXNUM2,ORXTEMP,ORXTOT
|
---|
| 24 | ;
|
---|
| 25 | ; Create overall control loop:
|
---|
| 26 | K ORXPCS ; Clear each time.
|
---|
| 27 | S ORXANY=0 ; Set to check for changes.
|
---|
| 28 | F Q:ORXSTOP D
|
---|
| 29 | .;
|
---|
| 30 | .; Get matching prompt strings:
|
---|
| 31 | .K ORXPSTR,ORXPRO,ORXPDIS ; Prompts variables.
|
---|
| 32 | .S ORXTAG="PROMPTS+"_ORXTCNT_"^ORXTABS" ; Data tag for prompts.
|
---|
| 33 | .S ORXPSTR=$P($T(@ORXTAG),";;",2) ; Current prompts line.
|
---|
| 34 | .S ORXPDIR=$P(ORXPSTR,U) ; Get first prompt piece.
|
---|
| 35 | .I ORXPDIR'=ORXTNM D Q ; Check for mismatch.
|
---|
| 36 | ..W !!," Problem reading PROMPTS data!" ; On error, leave message.
|
---|
| 37 | ..S ORXSTOP=1 ; Set flag for abort.
|
---|
| 38 | .S ORXPSTR=$P(ORXPSTR,U,2) ; Get prompts list string.
|
---|
| 39 | .S ORXPCS=$P($G(ORXPARS(ORXTCNT)),U,3) ; Get "pieces" map string.
|
---|
| 40 | .;
|
---|
| 41 | .; Clear, reset DIR variables:
|
---|
| 42 | .K DIR,X,Y
|
---|
| 43 | .S DIR("T")=120 ; Two minute maximum timeout for response.
|
---|
| 44 | .S DIR("A")=" Select "_ORXPDIR_" value to edit"
|
---|
| 45 | .S DIR("?")=" Enter individual item number or comma-delimited string (within ranges listed)"
|
---|
| 46 | .;
|
---|
| 47 | .; Assign individual DIR display array items:
|
---|
| 48 | .S ORXVAL=""
|
---|
| 49 | .S ORXNUM=$L(ORXSETS,";") ; # pieces = loop end counter.
|
---|
| 50 | .F ORXCNT=1:1:ORXNUM D ; Each piece of param setting.
|
---|
| 51 | ..S ORXVAL=$P($G(ORXSETS),";",ORXCNT) ; Each setting.
|
---|
| 52 | ..S ORXVAL=$$LJ^XLFSTR(ORXVAL,9) ; Format for 9 characters.
|
---|
| 53 | ..S ORXPRO=$P(ORXPSTR,";",ORXCNT) ; Prompt for this piece.
|
---|
| 54 | ..S ORXPRO=$$LJ^XLFSTR(ORXPRO,24) ; Format for 24 characters.
|
---|
| 55 | ..;
|
---|
| 56 | ..; Assign DIR display values:
|
---|
| 57 | ..S ORXCDIS=ORXCNT ; Set display counter to same.
|
---|
| 58 | ..S ORXCDIS=$$RJ^XLFSTR(ORXCDIS,2) ; Right justify to 2 places.
|
---|
| 59 | ..S DIR("A",ORXCNT)=" "_ORXCDIS_" "_ORXVAL_" "_ORXPRO
|
---|
| 60 | .;
|
---|
| 61 | .; Add one additional choice for editing "ALL" items:
|
---|
| 62 | .I (ORXCNT>1) D
|
---|
| 63 | ..S ORXCNT=ORXCNT+1 ; Increment counter.
|
---|
| 64 | ..S ORXNUM=ORXCNT ; Keep totaller up to date.
|
---|
| 65 | ..S ORXCDIS=ORXCNT ; Set display counter to match.
|
---|
| 66 | ..S ORXCDIS=$$RJ^XLFSTR(ORXCDIS,2) ; Right justify to 2 places.
|
---|
| 67 | ..S DIR("A",ORXCNT)=" "_ORXCDIS_" ALL "_" Edit All Above Items"
|
---|
| 68 | .;
|
---|
| 69 | .; Define DIR input requirements:
|
---|
| 70 | .S DIR(0)="LO^1:"_ORXNUM ; List, from 1 to max choices.
|
---|
| 71 | .;
|
---|
| 72 | .; Call DIR for user choice:
|
---|
| 73 | .W !! ; Spacing for screen display.
|
---|
| 74 | .I ORXPDIR="REPORTS" D ; Special note for reports.
|
---|
| 75 | ..W !," NOTE: At present, the following settings affect only the list of"
|
---|
| 76 | ..W !," Imaging report selections shown under Reports:"
|
---|
| 77 | ..W !," ---------------------------------------------"
|
---|
| 78 | .D ^DIR
|
---|
| 79 | .;
|
---|
| 80 | .; Check user response:
|
---|
| 81 | .I '$L($G(Y)) S ORXSTOP=1 Q ; Punt if Y isn't assigned.
|
---|
| 82 | .I Y="" S ORXSTOP=1 Q ; Punt if Y is null.
|
---|
| 83 | .I Y="^" S ORXSTOP=1 Q ; Punt if Y is "^" character.
|
---|
| 84 | .;
|
---|
| 85 | .; Entry valid - assign ORXINPUT variable to user entry:
|
---|
| 86 | .K ORXINPUT ; Clean up each time through.
|
---|
| 87 | .S ORXINPUT=Y ; Now holds input string.
|
---|
| 88 | .K DIR,X,Y ; Clean up after call to DIR.
|
---|
| 89 | .;
|
---|
| 90 | .; If user made a concantenated entry, deal with it:
|
---|
| 91 | .I (($L($P(ORXINPUT,",",2)))!($L($P(ORXINPUT,"-",2)))) D Q
|
---|
| 92 | ..;
|
---|
| 93 | ..; Deal with an entry string:
|
---|
| 94 | ..S ORXTOT=1 ; Initial setting.
|
---|
| 95 | ..S ORXNUM2=($L(ORXINPUT,",")-1) ; Total pieces entered.
|
---|
| 96 | ..;
|
---|
| 97 | ..; Establish loop to tear the string apart:
|
---|
| 98 | ..F ORXCNT=1:1:ORXNUM2 D ; Each piece in entry.
|
---|
| 99 | ...I ORXCNT>ORXTOT S ORXTOT=ORXCNT ; Reset higher?
|
---|
| 100 | ...S ORXTEMP=$P(ORXINPUT,",",ORXCNT) ; Get each entry piece.
|
---|
| 101 | ...;
|
---|
| 102 | ...; Check for a hyphenated entry:
|
---|
| 103 | ...I $L($P(ORXTEMP,"-",2)) D Q ; To next piece after.
|
---|
| 104 | ....S ORXLO=$P(ORXTEMP,"-") ; Lower number.
|
---|
| 105 | ....S ORXHI=$P(ORXTEMP,"-",2) ; Higher number.
|
---|
| 106 | ....S ORXHI=+ORXHI ; Eliminate comma.
|
---|
| 107 | ....I ORXHI>ORXTOT S ORXTOT=ORXHI ; Reset higher?
|
---|
| 108 | ....;
|
---|
| 109 | ....; Use another loop to assign the range of hyphenated elements:
|
---|
| 110 | ....F ORXCNT2=ORXLO:1:ORXHI D
|
---|
| 111 | .....S ORXINPUT(ORXCNT2)=ORXCNT2 ; ORXCNT2 is default #.
|
---|
| 112 | ...;
|
---|
| 113 | ...; If piece isn't hyphenated, use it directly:
|
---|
| 114 | ...S ORXINPUT(+ORXTEMP)=+ORXTEMP
|
---|
| 115 | ...I +ORXTEMP>ORXTOT S ORXTOT=+ORXTEMP ; Reset higher?
|
---|
| 116 | ..;
|
---|
| 117 | ..; Check and eliminate "ALL" selection if necessary:
|
---|
| 118 | ..I ORXTOT=ORXNUM K ORXINPUT(ORXTOT) S ORXTOT=ORXTOT-1
|
---|
| 119 | ..;
|
---|
| 120 | ..; ORXTOT should now equal the highest-numbered user selection.
|
---|
| 121 | ..; Each assigned ORXINPUT(xx) element should resemble:
|
---|
| 122 | ..; ORXINPUT(5)=5
|
---|
| 123 | ..;
|
---|
| 124 | ..; Call tag to process the entries:
|
---|
| 125 | ..D SOME
|
---|
| 126 | .;
|
---|
| 127 | .; No more than one entry, so assign ORXCNT and proceed:
|
---|
| 128 | .S ORXCNT=+ORXINPUT
|
---|
| 129 | .;
|
---|
| 130 | .; Unless "ALL" was selected, assign current value variables:
|
---|
| 131 | .I ORXCNT<ORXNUM D
|
---|
| 132 | ..S ORXNOW=$P($G(ORXCUR),";",$P($G(ORXPCS),";",ORXCNT))
|
---|
| 133 | ..S ORXPDIS=$P(ORXPSTR,";",ORXCNT) ; Display prompt, this piece.
|
---|
| 134 | .;
|
---|
| 135 | .; Deal with "ALL" choice:
|
---|
| 136 | .I ORXCNT=ORXNUM S ORXSTOP=1 D ALL Q ; "ALL" choice.
|
---|
| 137 | .;
|
---|
| 138 | .; Process individual selections:
|
---|
| 139 | .S ORXVAL=$P($G(ORXSETS),";",ORXCNT) ; Any of individual choices.
|
---|
| 140 | .D EACH
|
---|
| 141 | ;
|
---|
| 142 | Q
|
---|
| 143 | ;
|
---|
| 144 | ALL ; Process each value (piece) of selected parameter in turn.
|
---|
| 145 | ;
|
---|
| 146 | S ORXNEW="" ; Reset.
|
---|
| 147 | ;
|
---|
| 148 | ; Establish control loop:
|
---|
| 149 | F ORXCNT=1:1:(ORXNUM-1) Q:ORXNEW="^" D
|
---|
| 150 | .;
|
---|
| 151 | .; Set tag to match each value:
|
---|
| 152 | .S ORXVAL=$P($G(ORXSETS),";",ORXCNT)
|
---|
| 153 | .;
|
---|
| 154 | .; Assign current value and prompt variables each time:
|
---|
| 155 | .S ORXNOW=$P($G(ORXCUR),";",$P($G(ORXPCS),";",ORXCNT))
|
---|
| 156 | .S ORXPDIS=$P(ORXPSTR,";",ORXCNT)
|
---|
| 157 | .;
|
---|
| 158 | .; Process each value:
|
---|
| 159 | .W !!," (Entry of ^ will cancel entry process.)"
|
---|
| 160 | .D EACH
|
---|
| 161 | ;
|
---|
| 162 | Q
|
---|
| 163 | ;
|
---|
| 164 | SOME ; Process specific values of selected parameter in turn.
|
---|
| 165 | ;
|
---|
| 166 | S ORXNEW="" ; Reset.
|
---|
| 167 | ;
|
---|
| 168 | ; Establish control loop:
|
---|
| 169 | S ORXCNT=0 ; Initialize.
|
---|
| 170 | F Q:((ORXCNT>(ORXTOT))!(ORXNEW="^")) D
|
---|
| 171 | .S ORXCNT=ORXCNT+1 ; Increment each time.
|
---|
| 172 | .I '$D(ORXINPUT(ORXCNT)) Q ; Non-existant entries.
|
---|
| 173 | .;
|
---|
| 174 | .; Set tag to match each value:
|
---|
| 175 | .S ORXVAL=$P($G(ORXSETS),";",ORXCNT) ; ORXCNT is # by default.
|
---|
| 176 | .;
|
---|
| 177 | .; Assign current value and prompt variables each time:
|
---|
| 178 | .S ORXNOW=$P($G(ORXCUR),";",$P($G(ORXPCS),";",ORXCNT))
|
---|
| 179 | .S ORXPDIS=$P(ORXPSTR,";",ORXCNT)
|
---|
| 180 | .;
|
---|
| 181 | .; Process each value:
|
---|
| 182 | .W !!," (Entry of ^ will cancel entry process.)"
|
---|
| 183 | .D EACH
|
---|
| 184 | ;
|
---|
| 185 | Q
|
---|
| 186 | ;
|
---|
| 187 | EACH ; Process and update an edited value.
|
---|
| 188 | ;
|
---|
| 189 | ; Get tag name in ORXTABS2 to process the user's entry:
|
---|
| 190 | K DIR,X,Y
|
---|
| 191 | S ORXANY=ORXANY+1
|
---|
| 192 | ;
|
---|
| 193 | ; Assign command string with passed variable for execution:
|
---|
| 194 | S ORXNEW="S ORXNEW=$$"_ORXVAL_"^ORXTABS2("_""""_ORXNOW_""""_")"
|
---|
| 195 | ;
|
---|
| 196 | X ORXNEW ; Execute call to tag.
|
---|
| 197 | ;
|
---|
| 198 | ; Don't update value if user opted out with "^" entry:
|
---|
| 199 | I ORXNEW="^" S ORXANY=ORXANY-1 Q
|
---|
| 200 | ;
|
---|
| 201 | ; Stuff new value into current value string:
|
---|
| 202 | S $P(ORXCUR,";",$P($G(ORXPCS),";",ORXCNT))=ORXNEW
|
---|
| 203 | ;
|
---|
| 204 | Q
|
---|
| 205 | ;
|
---|
| 206 | SAVE ; Obtain user input, then save or discard changes.
|
---|
| 207 | ;
|
---|
| 208 | S ORXANY=$$CONFIRM ; Re-use ORXANY variable.
|
---|
| 209 | I 'ORXANY W !!," No changes saved...." Q
|
---|
| 210 | ;
|
---|
| 211 | ; Write changes back to parameters file:
|
---|
| 212 | K ORXERR
|
---|
| 213 | D PUT^XPAR(DUZ_";VA(200,",ORXPNAM,,ORXCUR,.ORXERR)
|
---|
| 214 | ;
|
---|
| 215 | ; Check for an error in the write process:
|
---|
| 216 | I (+ORXERR'=0) D Q
|
---|
| 217 | .W !," ERROR: Parameter not updated!" ; Notify user of error.
|
---|
| 218 | .W !," ("_$P(ORXERR,U,2)_")" ; Display error message.
|
---|
| 219 | ;
|
---|
| 220 | W !!,"Tab parameter setting(s) updated/saved."
|
---|
| 221 | W !,"(GUI Users must close, re-start application to activate changes.)",!
|
---|
| 222 | ;
|
---|
| 223 | Q
|
---|
| 224 | ;
|
---|
| 225 | CONFIRM() ; Confirm to save changes.
|
---|
| 226 | ;
|
---|
| 227 | ; Clear, reset DIR variables:
|
---|
| 228 | K DIR,X,Y
|
---|
| 229 | S DIR("T")=120 ; Two minute maximum timeout for response.
|
---|
| 230 | S DIR("A")=" Save changes"
|
---|
| 231 | S DIR("?")=" Write changes to parameter file? (Y/N)"
|
---|
| 232 | S DIR("A",1)=" YES"
|
---|
| 233 | S DIR("A",2)=" NO"
|
---|
| 234 | S DIR("B")="YES"
|
---|
| 235 | ;
|
---|
| 236 | ; Define DIR input requirements:
|
---|
| 237 | S DIR(0)="YO^1:2:0"
|
---|
| 238 | ;
|
---|
| 239 | ; Call DIR for user choice:
|
---|
| 240 | W !! ; Spacing for screen display.
|
---|
| 241 | D ^DIR
|
---|
| 242 | ;
|
---|
| 243 | ; Check user response:
|
---|
| 244 | I '$L($G(Y)) Q 0 ; Skip if Y isn't assigned.
|
---|
| 245 | I Y="" Q 0 ; Skip if Y is null.
|
---|
| 246 | I Y="^" Q 0 ; Skip if Y is "^" character.
|
---|
| 247 | I Y<1 Q 0 ; Skip if Y is less than one.
|
---|
| 248 | I Y>2 Q 0 ; "No" choice.
|
---|
| 249 | I Y=1 Q 1 ; "Yes" choice.
|
---|
| 250 | ;
|
---|
| 251 | Q 0 ; Default return of "No."
|
---|
| 252 | ;
|
---|