| 1 | TIUSRVT ; SLC/JM - Server functions for templates 8/23/2001 [8/19/04 1:57pm] | 
|---|
| 2 | ;;1.0;TEXT INTEGRATION UTILITIES;**76,80,102,105,119,125,166**;Jun 20, 1997 | 
|---|
| 3 | ; | 
|---|
| 4 | ; Nodes Returned by GETROOTS and GETITEMS | 
|---|
| 5 | ; | 
|---|
| 6 | ; Piece  Data | 
|---|
| 7 | ; -----  --------------------- | 
|---|
| 8 | ;   1    IEN | 
|---|
| 9 | ;   2    TYPE | 
|---|
| 10 | ;   3    STATUS | 
|---|
| 11 | ;   4    NAME | 
|---|
| 12 | ;   5    EXCLUDE FROM GROUP BOILERPLATE | 
|---|
| 13 | ;   6    BLANK LINES | 
|---|
| 14 | ;   7    PERSONAL OWNER | 
|---|
| 15 | ;   8    HAS CHILDREN FLAG (0=NONE, 1=ACTIVE, 2=INACTIVE, 3=BOTH) | 
|---|
| 16 | ;   9    DIALOG | 
|---|
| 17 | ;  10    DISPLAY ONLY | 
|---|
| 18 | ;  11    FIRST LINE | 
|---|
| 19 | ;  12    ONE ITEM ONLY | 
|---|
| 20 | ;  13    HIDE DIALOG ITEMS | 
|---|
| 21 | ;  14    HIDE TREE ITEMS | 
|---|
| 22 | ;  15    INDENT ITEMS | 
|---|
| 23 | ;  16    REMINDER DIALOG IEN | 
|---|
| 24 | ;  17    REMINDER DIALOG NAME | 
|---|
| 25 | ;  18    LOCKED | 
|---|
| 26 | ;  19    COM OBJECT POINTER | 
|---|
| 27 | ;  20    COM OBJECT PARAMETER | 
|---|
| 28 | ;  21    LINK POINTER | 
|---|
| 29 | ;  22    REMINDER DIALOG PATIENT SPECIFIC VALUE | 
|---|
| 30 | GETROOTS(TIUY,USER) ;Get template root info | 
|---|
| 31 | N IDX,TYPE | 
|---|
| 32 | I +$G(USER) D ADDNODE(.IDX,$O(^TIU(8927,"AROOT",USER,0)),1) | 
|---|
| 33 | F TYPE="R","TF","CF","OF" D | 
|---|
| 34 | .D ADDNODE(.IDX,$O(^TIU(8927,"AROOT",$$ROOTIDX^TIUDDT(TYPE),0)),1) | 
|---|
| 35 | Q | 
|---|
| 36 | ; | 
|---|
| 37 | GETPROOT(TIUY,USER) ;Get personal template root info only | 
|---|
| 38 | N IDX | 
|---|
| 39 | I +$G(USER) D ADDNODE(.IDX,$O(^TIU(8927,"AROOT",USER,0)),1) | 
|---|
| 40 | Q | 
|---|
| 41 | ; | 
|---|
| 42 | GETITEMS(TIUY,TIUDA) ; Returns all children of a non-Template Node | 
|---|
| 43 | N IDX,ITEM,SEQ,ITEMNODE | 
|---|
| 44 | K ^TMP("TIU TEMPLATE",$J) | 
|---|
| 45 | S TIUY=$NA(^TMP("TIU TEMPLATE",$J)) | 
|---|
| 46 | I $P($G(^TIU(8927,TIUDA,0)),U,3)'="T" D | 
|---|
| 47 | .S (IDX,SEQ)=0 | 
|---|
| 48 | .F  S SEQ=$O(^TIU(8927,TIUDA,10,"B",SEQ)) Q:'SEQ  D | 
|---|
| 49 | ..S ITEM=0 | 
|---|
| 50 | ..F  S ITEM=$O(^TIU(8927,TIUDA,10,"B",SEQ,ITEM)) Q:'ITEM  D | 
|---|
| 51 | ...S ITEMNODE=$G(^TIU(8927,TIUDA,10,ITEM,0)) | 
|---|
| 52 | ...D ADDNODE(.IDX,$P(ITEMNODE,U,2)) | 
|---|
| 53 | Q | 
|---|
| 54 | ; | 
|---|
| 55 | GETBOIL(TIUY,TIUDA) ;Returns a Template's Unexpanded Boilerplate Text | 
|---|
| 56 | N IDX,LINE,TYPE | 
|---|
| 57 | K ^TMP("TIU TEMPLATE",$J) | 
|---|
| 58 | S TIUY=$NA(^TMP("TIU TEMPLATE",$J)) | 
|---|
| 59 | S (IDX,LINE)=0 | 
|---|
| 60 | S TYPE=$P($G(^TIU(8927,TIUDA,0)),U,3) | 
|---|
| 61 | I (TYPE="T")!(TYPE="G") D | 
|---|
| 62 | .F  S LINE=$O(^TIU(8927,TIUDA,2,LINE)) Q:'LINE  D | 
|---|
| 63 | ..S IDX=IDX+1 | 
|---|
| 64 | ..S ^TMP("TIU TEMPLATE",$J,IDX)=$G(^TIU(8927,TIUDA,2,LINE,0)) | 
|---|
| 65 | Q | 
|---|
| 66 | ; | 
|---|
| 67 | GETTEXT(TIUY,DFN,VSTR,TIUX) ; Expand Boilerplate | 
|---|
| 68 | D BLRPLT^TIUSRVD(.TIUY,"",DFN,VSTR,"TIUX") | 
|---|
| 69 | Q | 
|---|
| 70 | ISEDITOR(TIUY,ROOT,USER) ; Returns TRUE if user is a Template Editor | 
|---|
| 71 | N CLASS,TIUERR | 
|---|
| 72 | S CLASS=$P($G(^TIU(8927,ROOT,0)),U,7) | 
|---|
| 73 | I 'CLASS S TIUY="^NO CLASS OWNER DEFINED" | 
|---|
| 74 | E  D | 
|---|
| 75 | .S TIUY=$$ISA^USRLM(USER,CLASS,.TIUERR) | 
|---|
| 76 | .I 'TIUY,$D(TIUERR) S TIUY=U_TIUERR | 
|---|
| 77 | Q | 
|---|
| 78 | LISTOWNR(TIUY,TIUFROM,DIR) ; Return subset of personal owners | 
|---|
| 79 | N FILE,IENS,FIELDS,FLAGS,NUMBER,TIUPART,INDEX,SCREEN,ID,TIU,TIUERR | 
|---|
| 80 | S FILE=200,FIELDS="@;.01",FLAGS="PB",INDEX="B",NUMBER=44 | 
|---|
| 81 | S (IENS,TIUPART,ID,TIU,TIUERR)="" | 
|---|
| 82 | I DIR=1 S FLAGS="P" | 
|---|
| 83 | S SCREEN="I $O(^TIU(8927,""AROOT"",Y,0))" | 
|---|
| 84 | D LIST^DIC(FILE,IENS,FIELDS,FLAGS,NUMBER,.TIUFROM,.TIUPART,INDEX,SCREEN,ID,"TIU","TIUERR") | 
|---|
| 85 | K TIU("DILIST",0) | 
|---|
| 86 | N DA,I | 
|---|
| 87 | S DA="",I=0 | 
|---|
| 88 | F  S DA=$O(TIU("DILIST",DA),DIR) Q:'DA  D | 
|---|
| 89 | . S I=I+1 | 
|---|
| 90 | . S TIUY(I)=$G(TIU("DILIST",DA,0)) | 
|---|
| 91 | Q | 
|---|
| 92 | ; | 
|---|
| 93 | ; Internal Routines | 
|---|
| 94 | ; | 
|---|
| 95 | ADDNODE(IDX,TIUDA,INTIUY) ;Adds template node info | 
|---|
| 96 | N DATA | 
|---|
| 97 | S DATA=$$NODEDATA(TIUDA) | 
|---|
| 98 | I DATA'="" D | 
|---|
| 99 | .S IDX=$G(IDX)+1 | 
|---|
| 100 | .I $G(INTIUY) S TIUY(IDX)=DATA | 
|---|
| 101 | .E  S ^TMP("TIU TEMPLATE",$J,IDX)=DATA | 
|---|
| 102 | Q | 
|---|
| 103 | ; | 
|---|
| 104 | NODEDATA(TIUDA) ;Returns template node data | 
|---|
| 105 | N NODE,DATA,RDIEN | 
|---|
| 106 | S DATA="" | 
|---|
| 107 | I +TIUDA D | 
|---|
| 108 | .S NODE=$G(^TIU(8927,TIUDA,0)) | 
|---|
| 109 | .S DATA=TIUDA_$$NP(3)_$$NP(4)_$$NP(1)_$$NP(5)_$$NP(2)_$$NP(6)_U_$$HASITEMS(TIUDA)_U_$P(NODE,U,8,14) | 
|---|
| 110 | .S RDIEN=$P(NODE,U,15) | 
|---|
| 111 | .I +RDIEN D | 
|---|
| 112 | ..N RDN | 
|---|
| 113 | ..S RDN=$G(^PXRMD(801.41,+RDIEN,0)) | 
|---|
| 114 | ..; TIU*166 | 
|---|
| 115 | ..I RDN'="" D | 
|---|
| 116 | ...S $P(DATA,U,16)=RDIEN_U_$P(RDN,U,1) | 
|---|
| 117 | ...S $P(DATA,U,22)=$S($P($G(RDN),U,17)=1:1,1:0) | 
|---|
| 118 | .S $P(DATA,U,18)=$P(NODE,U,16,19) | 
|---|
| 119 | Q DATA | 
|---|
| 120 | ; | 
|---|
| 121 | NP(PNUM) ;Returns the piece of the node | 
|---|
| 122 | Q U_$P(NODE,U,PNUM) | 
|---|
| 123 | ; | 
|---|
| 124 | HASITEMS(TIUDA) ; Returns Has Children flag (0=NONE,1=ACTIVE,2=INACTIVE,3=BOTH) | 
|---|
| 125 | N FLAG,FLAGA,FLAGI,ITEM,ITEMNODE | 
|---|
| 126 | S (FLAG,FLAGA,FLAGI,ITEM)=0 | 
|---|
| 127 | I $P($G(^TIU(8927,TIUDA,0)),U,3)'="T" D | 
|---|
| 128 | .F  S ITEM=$O(^TIU(8927,TIUDA,10,ITEM)) Q:'ITEM  D  Q:(FLAG=3) | 
|---|
| 129 | ..S ITEMNODE=$P($G(^TIU(8927,TIUDA,10,ITEM,0)),U,2) | 
|---|
| 130 | ..I +ITEMNODE D | 
|---|
| 131 | ...I $P($G(^TIU(8927,ITEMNODE,0)),U,4)="A" S FLAGA=1 | 
|---|
| 132 | ...E  S FLAGI=2 | 
|---|
| 133 | ..S FLAG=FLAGA+FLAGI | 
|---|
| 134 | Q FLAG | 
|---|
| 135 | SETTMPLT(SUCCESS,TIUDA,TIUX) ; Create/update a TEMPLATE | 
|---|
| 136 | N FLD | 
|---|
| 137 | S:'+TIUDA TIUDA=$$CREATE($G(TIUX(.01)),$G(TIUX(.03))) | 
|---|
| 138 | S SUCCESS=TIUDA Q:'+SUCCESS | 
|---|
| 139 | I $G(TIUX(.03))="R" S TIUX(.07)=+$$CLPAC^TIUSRVT1 | 
|---|
| 140 | F FLD=2,5 D  Q:$D(TIUX)'>9 | 
|---|
| 141 | . I +$O(TIUX(FLD,0)) D  Q:$D(TIUX)'>9 | 
|---|
| 142 | . . K ^TIU(8927,TIUDA,FLD) | 
|---|
| 143 | . . I $G(TIUX(FLD,1))="@" K TIUX(FLD) Q | 
|---|
| 144 | . . M ^TIU(8927,TIUDA,FLD)=TIUX(FLD) K TIUX(FLD) | 
|---|
| 145 | . . D SETXT0^TIUSRVT1(TIUDA,FLD) | 
|---|
| 146 | D FILE^TIUSRVT1(.SUCCESS,""""_TIUDA_",""",.TIUX) | 
|---|
| 147 | Q | 
|---|
| 148 | CREATE(NAME,TYPE) ; Get or create TEMPLATE record | 
|---|
| 149 | N DIC,DLAYGO,DR,X,Y | 
|---|
| 150 | S (DIC,DLAYGO)=8927,DIC(0)="FL" | 
|---|
| 151 | S X=""""_NAME_"""" D ^DIC | 
|---|
| 152 | I +Y'>0 Q "0^ Unable to create a new TEMPLATE record." | 
|---|
| 153 | Q +Y | 
|---|
| 154 | DELETE(SUCCESS,TIUDA) ; Delete TEMPLATES | 
|---|
| 155 | ; Pass TIUDA as array of record numbers to be deleted by reference | 
|---|
| 156 | ; SUCCESS will be returned as the actual number of templates deleted | 
|---|
| 157 | N TIUI S (SUCCESS,TIUI)=0 | 
|---|
| 158 | F  S TIUI=$O(TIUDA(TIUI)) Q:+TIUI'>0  D | 
|---|
| 159 | . N DA | 
|---|
| 160 | . S DA=+TIUDA(TIUI) | 
|---|
| 161 | . I 'DA Q | 
|---|
| 162 | . L -^TIU(8927,DA,0):1 ; Unlock before deleting | 
|---|
| 163 | . ; Quit if the Template is NOT an ORPHAN | 
|---|
| 164 | . I +$O(^TIU(8927,"AD",DA,0)) Q | 
|---|
| 165 | . ; Otherwise, call FileMan to DELETE the record | 
|---|
| 166 | . D ZAP(DA) S SUCCESS=SUCCESS+1 | 
|---|
| 167 | Q | 
|---|
| 168 | ZAP(DA) ; Call ^DIK to remove an entry - CAREFUL...NO CHECKS | 
|---|
| 169 | N DIK | 
|---|
| 170 | S DIK="^TIU(8927," D ^DIK | 
|---|
| 171 | Q | 
|---|
| 172 | SETITEMS(SUCCESS,TIUDA,TIUX) ; Change ITEMs of a group, class, or root | 
|---|
| 173 | ; Receives: | 
|---|
| 174 | ;   TIUDA=IEN of TEMPLATE record | 
|---|
| 175 | ;   TIUX(SEQ)=IEN of item | 
|---|
| 176 | ; Returns: | 
|---|
| 177 | ;   SUCCESS(SEQ)=IEN of item if successful, or | 
|---|
| 178 | ;                0^ Explanatory message if not | 
|---|
| 179 | N TIUI S TIUI=0 | 
|---|
| 180 | D CLRITMS(TIUDA) ; Remove ITEMS | 
|---|
| 181 | ; Iterate through TIUX and file items | 
|---|
| 182 | F  S TIUI=$O(TIUX(TIUI)) Q:+TIUI'>0  D | 
|---|
| 183 | . N TIUITEM,TIUSUCC | 
|---|
| 184 | . S TIUITEM(.01)=TIUI,TIUITEM(.02)=TIUX(TIUI),TIUSUCC=TIUI | 
|---|
| 185 | . D UPDATE^TIUSRVT1(.TIUSUCC,"""+"_TIUI_","_TIUDA_",""",.TIUITEM) | 
|---|
| 186 | . S SUCCESS(TIUI)=TIUSUCC | 
|---|
| 187 | Q | 
|---|
| 188 | CLRITMS(TIUDA) ; Remove all items from a group, class, or root | 
|---|
| 189 | N DA S DA=0 | 
|---|
| 190 | F  S DA=$O(^TIU(8927,TIUDA,10,DA)) Q:+DA'>0  D | 
|---|
| 191 | . N DIK S DIK="^TIU(8927,TIUDA,10,",DA(1)=TIUDA D ^DIK | 
|---|
| 192 | Q | 
|---|
| 193 | OBJLST(TIUY) ; Get the list of active objects | 
|---|
| 194 | N TIUDA,TIUD0,TIUI | 
|---|
| 195 | S (TIUDA,TIUI)=0,TIUY=$NA(^TMP("TIU OBJECTS",$J)) K @TIUY | 
|---|
| 196 | F  S TIUDA=$O(^TIU(8925.1,"AT","O",TIUDA)) Q:+TIUDA'>0  D | 
|---|
| 197 | . S TIUD0=$G(^TIU(8925.1,TIUDA,0)) Q:'+$$CANPICK^TIULP(+TIUDA) | 
|---|
| 198 | . S TIUI=TIUI+1 | 
|---|
| 199 | . S @TIUY@(TIUI)=TIUDA_U_$P(TIUD0,U,1,3) | 
|---|
| 200 | Q | 
|---|
| 201 | BPCHECK(TIUTY,TIUX) ; Checks objects in boilerplate text. | 
|---|
| 202 | N LINE,TIUI,TIUFWHO,TIUFPRIV,TIUY | 
|---|
| 203 | S TIUI=0,TIUY=1,TIUFPRIV=1,TIUFWHO="M" | 
|---|
| 204 | K ^TMP("TIUF",$J) | 
|---|
| 205 | F  S TIUI=$O(TIUX(2,TIUI)) Q:+TIUI'>0  D  Q:'+TIUY | 
|---|
| 206 | . S LINE=$G(TIUX(2,TIUI,0)) | 
|---|
| 207 | . I LINE["|" D | 
|---|
| 208 | . . I ($L(LINE,"|")+1)#2 D  Q | 
|---|
| 209 | . . . S TIUY=0 | 
|---|
| 210 | . . . S TIUTY(1)="Object split between lines, rest of line not checked:" | 
|---|
| 211 | . . . S TIUTY(2)=LINE | 
|---|
| 212 | . . N PIECE | 
|---|
| 213 | . . F PIECE=2:2:$L(LINE,"|") D  Q:TIUY=0 | 
|---|
| 214 | . . . N OBJNM | 
|---|
| 215 | . . . S OBJNM=$P(LINE,"|",PIECE) | 
|---|
| 216 | . . . I OBJNM="" D  Q | 
|---|
| 217 | . . . . S TIUY=0 | 
|---|
| 218 | . . . . S TIUTY(1)="Brackets are there, but there's no name inside ||:" | 
|---|
| 219 | . . . . S TIUTY(2)=LINE | 
|---|
| 220 | . . . N XREF,ARR | 
|---|
| 221 | . . . F XREF="B","C","D" D  Q:'+TIUY | 
|---|
| 222 | . . . . N ODA S ODA=0 | 
|---|
| 223 | . . . . F  S ODA=$O(^TIU(8925.1,XREF,OBJNM,ODA)) Q:+ODA'>0  D  Q:'+TIUY | 
|---|
| 224 | . . . . . S:$D(^TIU(8925.1,"AT","O",ODA)) ARR(ODA)="" | 
|---|
| 225 | . . . . . I $O(ARR($O(ARR(0)))) D | 
|---|
| 226 | . . . . . . S TIUY=0 | 
|---|
| 227 | . . . . . . S TIUTY(1)="Object |"_OBJNM_"| is ambiguous." | 
|---|
| 228 | . . . . . . S TIUTY(2)="It could be any of SEVERAL objects. Please contact IRM." | 
|---|
| 229 | . . . I '$D(ARR) D  Q | 
|---|
| 230 | . . . . S TIUY=0 | 
|---|
| 231 | . . . . S TIUTY(1)="Object |"_OBJNM_"| cannot be found in the file." | 
|---|
| 232 | . . . . S TIUTY(2)="Use UPPERCASE and object's exact NAME, PRINT NAME, or ABBREVIATION." | 
|---|
| 233 | . . . . S TIUTY(3)="Any of these may have changed since |"_OBJNM_"| was embedded." | 
|---|
| 234 | . . . S ODA=$O(ARR(0)) N OBJCK D CHECK^TIUFLF3(ODA,0,0,.OBJCK) | 
|---|
| 235 | . . . I '+OBJCK D  Q:'+TIUY | 
|---|
| 236 | . . . . N SUBS | 
|---|
| 237 | . . . . F SUBS="F","T","O","S","J" D | 
|---|
| 238 | . . . . . I $D(OBJCK(SUBS)) D | 
|---|
| 239 | . . . . . . S TIUY=0 | 
|---|
| 240 | . . . . . . S TIUTY(1)="Object |"_OBJNM_"| is faulty: " | 
|---|
| 241 | . . . . . . S TIUTY(2)=OBJCK(SUBS)_"." | 
|---|
| 242 | . . . I $P(^TIU(8925.1,ODA,0),U,7)'=11 D | 
|---|
| 243 | . . . . S TIUY=0 | 
|---|
| 244 | . . . . S TIUTY(1)="Object |"_OBJNM_"| is NOT ACTIVE." | 
|---|
| 245 | K ^TMP("TIUF",$J) | 
|---|
| 246 | Q | 
|---|