1 | PXRMEXID ;SLC/PJH - Reminder Dialog Exchange Install Routine.;08/16/2007
|
---|
2 | ;;2.0;CLINICAL REMINDERS;**6**;Feb 04, 2005;Build 123
|
---|
3 | ;
|
---|
4 | ;==================================================
|
---|
5 | ;
|
---|
6 | ;Install all dialog components in an exchange file entry
|
---|
7 | ;------------------------------------------------
|
---|
8 | INSALL N ALL,DIROUT,DIRUT,DTOUT,DUOUT,IND,PXRMDONE
|
---|
9 | ;
|
---|
10 | ;Set the install date and time.
|
---|
11 | S IND="",PXRMDONE=0
|
---|
12 | ;
|
---|
13 | ;Go to full screen mode.
|
---|
14 | D FULL^VALM1
|
---|
15 | ;
|
---|
16 | ;Check if all or none exists - option to install all unchanged
|
---|
17 | N DNAME
|
---|
18 | S DNAME=$G(^TMP("PXRMEXTMP",$J,"PXRMDNAM"))
|
---|
19 | D EXIST^PXRMEXIX(.ALL,DNAME,"reminder dialog","")
|
---|
20 | I ALL=0 D DISP^PXRMEXLD(PXRMMODE) Q
|
---|
21 | ;
|
---|
22 | ;Lock the entire file
|
---|
23 | Q:'$$LOCK
|
---|
24 | F S IND=$O(^TMP("PXRMEXLD",$J,"SEL",IND),-1) Q:(IND="")!(PXRMDONE) D
|
---|
25 | .D INSCOM(IND,1)
|
---|
26 | ;
|
---|
27 | ;Clear lock
|
---|
28 | D UNLOCK
|
---|
29 | ;
|
---|
30 | ;Rebuild display workfile
|
---|
31 | D DISP^PXRMEXLD(PXRMMODE)
|
---|
32 | ;
|
---|
33 | K PXRMNMCH
|
---|
34 | Q
|
---|
35 | ;
|
---|
36 | ;Build list of descendents names
|
---|
37 | ;-------------------------------
|
---|
38 | INSBLD(NAME,INAME) ;
|
---|
39 | N DNAME,IDATA,ISEQ
|
---|
40 | S ISEQ=0
|
---|
41 | F S ISEQ=$O(^TMP("PXRMEXTMP",$J,"DMAP",NAME,ISEQ)) Q:'ISEQ D
|
---|
42 | .S IDATA=$G(^TMP("PXRMEXTMP",$J,"DMAP",NAME,ISEQ)) Q:IDATA=""
|
---|
43 | .S DNAME=$P(IDATA,U) Q:DNAME=""
|
---|
44 | .;
|
---|
45 | .I $D(^TMP("PXRMEXTMP",$J,"DREPL"))>0 D
|
---|
46 | ..S REPL=$$CHKREPL^PXRMEXD1(NAME) I REPL>0 D INSREPL(NAME,REPL,.INAME)
|
---|
47 | .S INAME(DNAME)=""
|
---|
48 | .;Q:$$PXRM(DNAME) S INAME(DNAME)=""
|
---|
49 | .;Check for descendants
|
---|
50 | .I $D(^TMP("PXRMEXTMP",$J,"DMAP",DNAME)) D INSBLD(DNAME,.INAME)
|
---|
51 | Q
|
---|
52 | ;Build list of replacement names
|
---|
53 | ;-------------------------------
|
---|
54 | INSREPL(NAME,REPL,INAME) ;
|
---|
55 | N DNAME,IDATA,ISEQ
|
---|
56 | S ISEQ=0
|
---|
57 | S IDATA=$G(^TMP("PXRMEXTMP",$J,"DREPL",REPL,NAME)) Q:IDATA=""
|
---|
58 | S DNAME=$P(IDATA,U) Q:DNAME="" S INAME(DNAME)=""
|
---|
59 | ;S DNAME=$P(IDATA,U) Q:DNAME="" Q:$$PXRM(DNAME) S INAME(DNAME)=""
|
---|
60 | ;Check for descendants
|
---|
61 | I $D(^TMP("PXRMEXTMP",$J,"DMAP",DNAME)) D INSBLD(DNAME,.INAME)
|
---|
62 | Q
|
---|
63 | ;
|
---|
64 | ;Install component IND
|
---|
65 | ;---------------------
|
---|
66 | INSCOM(IND,SILENT) ;
|
---|
67 | N ACTION,ATTR,CSUM,DTYP,EXIEN,END,EXISTS,FILENUM,IND120,JND120
|
---|
68 | N NEWPT01,PT01,START,REPL,SAME,TEMP
|
---|
69 | S TEMP=^TMP("PXRMEXLD",$J,"SEL",IND),FILENUM=$P(TEMP,U,1)
|
---|
70 | S EXISTS=$P(TEMP,U,4),START=$P(TEMP,U,2),END=$P(TEMP,U,3) Q:START=""
|
---|
71 | S JND120=$P(TEMP,U,6) Q:'JND120
|
---|
72 | S IND120=$P(TEMP,U,5) Q:'IND120
|
---|
73 | S TEMP=^PXD(811.8,PXRMRIEN,100,START,0),PT01=$P(TEMP,"~",2) Q:PT01=""
|
---|
74 | S DTYP=$G(^TMP("PXRMEXTMP",$J,"DTYP",PT01))
|
---|
75 | I DTYP="dialog" S DTYP="reminder dialog"
|
---|
76 | ;
|
---|
77 | ;Go to full screen mode.
|
---|
78 | D FULL^VALM1
|
---|
79 | ;
|
---|
80 | ;Check for descendents
|
---|
81 | S REPL=$$CHKREPL^PXRMEXD1(PT01)
|
---|
82 | I 'SILENT&($$INSDSC(PT01)!(REPL>0)) D Q:PXRMDONE
|
---|
83 | .N ANS,INDS,TEXT
|
---|
84 | .S TEXT(1)=PT01_" ("_DTYP_") contains sub-components."
|
---|
85 | .S TEXT="Install all sub-components with the "_DTYP_": "
|
---|
86 | .;Give option to install all descendents
|
---|
87 | .D ASK^PXRMEXIX(.ANS,.TEXT,1) Q:PXRMDONE
|
---|
88 | .I $G(ANS)="N" S PXRMDONE=1 Q
|
---|
89 | .I $G(ANS)="Y" D
|
---|
90 | ..S INDS=IND
|
---|
91 | ..N IDATA,INAME,IND
|
---|
92 | ..I REPL>0 D INSREPL(PT01,REPL,.INAME)
|
---|
93 | ..;Build list of decendents to install
|
---|
94 | ..D INSBLD(PT01,.INAME)
|
---|
95 | ..;Check if all or none exists - option to install all unchanged
|
---|
96 | ..D EXIST^PXRMEXIX(.ALL,PT01,DTYP,.INAME) Q:PXRMDONE
|
---|
97 | ..;Start at the end of the list
|
---|
98 | ..S IND=""
|
---|
99 | ..F S IND=$O(^TMP("PXRMEXLD",$J,"SEL",IND),-1) Q:PXRMDONE!(IND=INDS) D
|
---|
100 | ...N PT01,START,TEMP
|
---|
101 | ...S TEMP=^TMP("PXRMEXLD",$J,"SEL",IND),START=$P(TEMP,U,2) Q:START=""
|
---|
102 | ...S PT01=$P(^PXD(811.8,PXRMRIEN,100,START,0),"~",2) Q:PT01=""
|
---|
103 | ...;Ignore namechanges
|
---|
104 | ...I $D(PXRMNMCH(801.41,PT01)) Q
|
---|
105 | ...;Only install descendents
|
---|
106 | ...I $D(INAME(PT01)) D INSCOM(IND,1)
|
---|
107 | ;
|
---|
108 | SETENTRY ;
|
---|
109 | D SETATTR^PXRMEXFI(.ATTR,FILENUM,PT01)
|
---|
110 | S ACTION=""
|
---|
111 | ;Double check that it hasn't been installed
|
---|
112 | S EXIEN=$$EXISTS^PXRMEXIU(801.41,PT01)
|
---|
113 | I EXIEN,'EXISTS S EXISTS=1
|
---|
114 | I EXISTS D
|
---|
115 | . D CHECKSUM^PXRMEXCS(.ATTR,START,END)
|
---|
116 | . S CSUM=$$FILE^PXRMEXCS(ATTR("FILE NUMBER"),EXIEN)
|
---|
117 | . S SAME=$S(ATTR("CHECKSUM")=CSUM:1,1:0)
|
---|
118 | . I SAME D FEIMSG^PXRMEXFI(SAME,.ATTR) S ACTION="S",(PXRMNMCH,NEWPT01)=""
|
---|
119 | I ACTION="" D
|
---|
120 | .;If all components installed the default is 'Install or Overwrite'
|
---|
121 | . S:ALL ACTION=$S(EXISTS:"O",1:"I"),(PXRMNMCH,NEWPT01)=""
|
---|
122 | . S:'ALL ACTION=$$GETFACT^PXRMEXFI(PT01,.ATTR,.NEWPT01,.PXRMNMCH,EXIEN)
|
---|
123 | ;Save what was done for the installation summary.
|
---|
124 | S ^TMP("PXRMEXIAD",$J,IND,ATTR("FILE NAME"),ATTR("PT01"),ACTION)=NEWPT01
|
---|
125 | ;Clear heading
|
---|
126 | S VALMHDR(2)=""
|
---|
127 | ;If the ACTION is Quit then quit the entire install.
|
---|
128 | I ACTION="Q" S PXRMDONE=1 S VALMHDR(2)="Install not completed" Q
|
---|
129 | ;If the ACTION is Skip then skip this component.
|
---|
130 | I ACTION="S" S VALMBCK="R" Q
|
---|
131 | ;If the ACTION is Replace then skip this component.
|
---|
132 | I ACTION="P" S VALMBCK="R",VALMHDR(2)=PT01_" replaced with "_NEWPT01 Q
|
---|
133 | ;Install this component.
|
---|
134 | D FILE^PXRMEXIC(PXRMRIEN,EXIEN,IND120,JND120,ACTION,.ATTR,.PXRMNMCH)
|
---|
135 | S VALMBCK="R"
|
---|
136 | I PXRMDONE S VALMHDR(2)="Install aborted" Q
|
---|
137 | I NEWPT01="" S VALMHDR(2)=PT01_" ("_DTYP_") installed from exchange file."
|
---|
138 | I NEWPT01'="" S VALMHDR(2)=PT01_" installed as "_NEWPT01_"."
|
---|
139 | ;If reminder dialog - disable and give option to link
|
---|
140 | I DTYP="reminder dialog" D
|
---|
141 | .N DNAME
|
---|
142 | .S DNAME=PT01
|
---|
143 | .I NEWPT01'="" S DNAME=NEWPT01
|
---|
144 | .D INSLNK(DNAME)
|
---|
145 | Q
|
---|
146 | ;
|
---|
147 | ;Check for descendents (either elements or prompts)
|
---|
148 | ;--------------------------------------------------
|
---|
149 | INSDSC(NAME) ;
|
---|
150 | N DATA,DFOUND,SUB
|
---|
151 | S DFOUND=0,SUB=0
|
---|
152 | F S SUB=$O(^TMP("PXRMEXTMP",$J,"DMAP",NAME,SUB)) Q:'SUB D Q:DFOUND
|
---|
153 | .S DATA=$G(^TMP("PXRMEXTMP",$J,"DMAP",NAME,SUB)) Q:DATA=""
|
---|
154 | .S DFOUND=1
|
---|
155 | .;I '$$PXRM($P(DATA,U)) S DFOUND=1
|
---|
156 | Q DFOUND
|
---|
157 | ;
|
---|
158 | INSREPL1(NAME) ;
|
---|
159 | N DATA,DFOUND,SUB
|
---|
160 | S DFOUND=0,SUB=0
|
---|
161 | F S SUB=$O(^TMP("PXRMEXTMP",$J,"DREPL",NAME,SUB)) Q:'SUB D Q:DFOUND
|
---|
162 | .S DATA=$G(^TMP("PXRMEXTMP",$J,"DREPL",NAME,SUB)) Q:DATA=""
|
---|
163 | .S DFOUND=1
|
---|
164 | Q DFOUND
|
---|
165 | ;Option to link dialog to a reminder
|
---|
166 | ;-----------------------------------
|
---|
167 | INSLNK(DNAME) ;
|
---|
168 | N DIEN,DISABLE,DSRC,RNAME
|
---|
169 | N DA,DIE,DR
|
---|
170 | ;Disable
|
---|
171 | S DIEN=$O(^PXRMD(801.41,"B",DNAME,"")) Q:'DIEN
|
---|
172 | ;Set dialog as disabled
|
---|
173 | S DISABLE="DISABLED IN EXCHANGE"
|
---|
174 | ;Except for National dialogs
|
---|
175 | I $P(^PXRMD(801.41,DIEN,100),U)="N" S DISABLE=""
|
---|
176 | ;
|
---|
177 | S DR="3///^S X=DISABLE",DIE="^PXRMD(801.41,",DA=$P(DIEN,U)
|
---|
178 | D ^DIE
|
---|
179 | ;
|
---|
180 | ;Quit if already linked
|
---|
181 | I $D(^PXD(811.9,"AG",DIEN)) Q
|
---|
182 | ;
|
---|
183 | S RNAME=""
|
---|
184 | ;If reminder was renamed use as default
|
---|
185 | I $D(PXRMNMCH(811.9)) D
|
---|
186 | .S RNAME=$O(PXRMNMCH(811.9,"")) Q:RNAME=""
|
---|
187 | .S RNAME=$G(PXRMNMCH(811.9,RNAME))
|
---|
188 | ;Otherwise use original reminder name as default
|
---|
189 | I RNAME="" D
|
---|
190 | .N DATA,FOUND,RIEN,SUB
|
---|
191 | .;Rebuild ^TMP("PXRMEXLC",$J
|
---|
192 | .D CDISP^PXRMEXLC(PXRMRIEN)
|
---|
193 | .;
|
---|
194 | .S SUB="",FOUND=0
|
---|
195 | .F S SUB=$O(^TMP("PXRMEXLC",$J,"SEL",SUB),-1) Q:'SUB Q:FOUND D
|
---|
196 | ..S DATA=$G(^TMP("PXRMEXLC",$J,"SEL",SUB)) Q:$P(DATA,U)'=811.9
|
---|
197 | ..S RIEN=$P(DATA,U,4),FOUND=1 Q:'RIEN
|
---|
198 | ..S RNAME=$P($G(^PXD(811.9,RIEN,0)),U)
|
---|
199 | ;
|
---|
200 | TAG W !!,"Reminder Dialog "_DNAME_" is not linked to a reminder.",!
|
---|
201 | ;Select reminder to link
|
---|
202 | S IEN=$$SELECT^PXRMINQ("^PXD(811.9,","Select Reminder to Link: ",RNAME)
|
---|
203 | ;Update reminder link in #811.9
|
---|
204 | I $P(IEN,U)'=-1 D
|
---|
205 | .N DA,DIE,DIK,DR
|
---|
206 | .;Set reminder to dialog pointer
|
---|
207 | .S DR="51///^S X=DNAME",DIE="^PXD(811.9,",DA=$P(IEN,U)
|
---|
208 | .D ^DIE
|
---|
209 | .;If source reminder is null replace with linked reminder
|
---|
210 | .S DSRC=$P($G(^PXRMD(801.41,DIEN,0)),U,2) Q:DSRC
|
---|
211 | .S DSRC=$P(IEN,U)
|
---|
212 | .S DR="2///^S X=DSRC",DIE="^PXRMD(801.41,",DA=$P(DIEN,U)
|
---|
213 | .D ^DIE
|
---|
214 | Q
|
---|
215 | ;
|
---|
216 | ;Install Selected Components
|
---|
217 | ;---------------------------
|
---|
218 | INSSEL N ALL,IND,PXRMDONE,VALMY
|
---|
219 | N DIROUT,DIRUT,DTOUT,DUOUT
|
---|
220 | N VALMBG,VALMLST
|
---|
221 | S VALMBG=1,VALMLST=+$O(^TMP("PXRMEXLD",$J,"IDX",""),-1)
|
---|
222 | ;Get the list to install.
|
---|
223 | D EN^VALM2(XQORNOD(0))
|
---|
224 | ;
|
---|
225 | ;Set the install date and time.
|
---|
226 | S ALL="",PXRMDONE=0
|
---|
227 | ;
|
---|
228 | ;Lock the entire file
|
---|
229 | Q:'$$LOCK
|
---|
230 | ;
|
---|
231 | S IND=0
|
---|
232 | F S IND=$O(VALMY(IND)) Q:(+IND=0)!(PXRMDONE) D INSCOM(IND,0)
|
---|
233 | ;
|
---|
234 | ;Clear locks
|
---|
235 | D UNLOCK
|
---|
236 | ;
|
---|
237 | ;Rebuild workfile
|
---|
238 | D DISP^PXRMEXLD(PXRMMODE)
|
---|
239 | Q
|
---|
240 | ;
|
---|
241 | ;Install the exchange entry PXRMRIEN
|
---|
242 | ;-----------------------------------
|
---|
243 | INSTALL N IEN,IND,VALMY
|
---|
244 | ;Make sure the component list exists for this entry. PXRMRIEN is
|
---|
245 | ;set in INSTALL^PXRMEXLR.
|
---|
246 | I '$D(^PXD(811.8,PXRMRIEN,120)) D CLIST^PXRMEXU1(.PXRMRIEN)
|
---|
247 | I PXRMRIEN=-1 Q
|
---|
248 | ;Format the component list for display.
|
---|
249 | D CDISP^PXRMEXLC(PXRMRIEN)
|
---|
250 | S VALMBCK="R",VALMCNT=$O(^TMP("PXRMEXLD",$J,"IDX"),-1)
|
---|
251 | Q
|
---|
252 | ;
|
---|
253 | PXRM(NAME) ;Validate prompts
|
---|
254 | ;
|
---|
255 | ;Ignore non-PXRM
|
---|
256 | I $E(NAME,1,4)'="PXRM" Q 0
|
---|
257 | N DIEN,RESULT
|
---|
258 | I $G(PXRMINST)=1 D Q RESULT
|
---|
259 | .S RESULT=0
|
---|
260 | .S DIEN=$O(^PXRMD(801.41,"B",NAME,"")) I 'DIEN Q
|
---|
261 | .I $P($G(^PXRMD(801.41,DIEN,100)),U)'="N" Q
|
---|
262 | .I ($P($G(^PXRMD(801.41,DIEN,0)),U,4)="P")!($P($G(^PXRMD(801.41,DIEN,0)),U,4)="F") S RESULT=1
|
---|
263 | ;
|
---|
264 | ;Check if this is a national code
|
---|
265 | S DIEN=$O(^PXRMD(801.41,"B",NAME,""))
|
---|
266 | ;If not found abort
|
---|
267 | I 'DIEN Q 0
|
---|
268 | ;if result group/element quit
|
---|
269 | I $P($G(^PXRMD(801.41,DIEN,0)),U,4)="S"!($P($G(^PXRMD(801.41,DIEN,0)),U,4)="T") Q 0
|
---|
270 | ;Check class
|
---|
271 | I $P($G(^PXRMD(801.41,DIEN,100)),U)="N" Q 1
|
---|
272 | ;Otherwise local
|
---|
273 | Q 0
|
---|
274 | ;
|
---|
275 | ;Lock the dialog file
|
---|
276 | LOCK() ;
|
---|
277 | L +^PXRMD(801.41):0 I Q 1
|
---|
278 | E W !,"Another user is editing this file, try later" H 2
|
---|
279 | Q 0
|
---|
280 | ;
|
---|
281 | ;Clear lock
|
---|
282 | UNLOCK L -^PXRMD(801.41)
|
---|
283 | Q
|
---|