1 | XOBESIG ;Oakland/mko-ELECTRONIC SIGNATURE CODES ;9:29 AM 14 Jul 2006
|
---|
2 | ;;1.0;Electronic Signature;;Jul 14, 2006
|
---|
3 | ;;Foundations Electronic Signature Release v1.0 [Build: 1.0.0.024]
|
---|
4 | ;
|
---|
5 | ISDEF(RESULT) ; -- Returns whether the user has an Electronic Signature Code defined.
|
---|
6 | ; Returns:
|
---|
7 | ; 0 : if the user has no esig defined
|
---|
8 | ; 1 : if the user does have an esig defined
|
---|
9 | ; -2 : if DUZ doesn't refer to a valid user
|
---|
10 | ;
|
---|
11 | ; Remote Procedure: XOBE ESIG IS DEFINED
|
---|
12 | ;
|
---|
13 | NEW XOBESIG,XOBEMSG,DIERR
|
---|
14 | KILL RESULT
|
---|
15 | ;
|
---|
16 | ; -- Get current esig
|
---|
17 | SET XOBESIG=$$GET1^DIQ(200,+$GET(DUZ)_",",20.4,"I","","XOBEMSG")
|
---|
18 | ;
|
---|
19 | ; -- Check result
|
---|
20 | IF $GET(DIERR),$DATA(XOBEMSG("DIERR","E",601)) SET RESULT=-2
|
---|
21 | ELSE IF XOBESIG]"" SET RESULT=1
|
---|
22 | ELSE SET RESULT=0
|
---|
23 | QUIT
|
---|
24 | ;
|
---|
25 | GETCODE(RESULT) ; -- Get user's Electronic Signature Code
|
---|
26 | ; Return:
|
---|
27 | ; Electronic signature code
|
---|
28 | ; -2 : if DUZ doesn't refer to a valid user
|
---|
29 | ;
|
---|
30 | ; Remote Procedure: XOBE ESIG GET CODE
|
---|
31 | ;
|
---|
32 | NEW XOBESIG,XOBEMSG,DIERR
|
---|
33 | KILL RESULT
|
---|
34 | ;
|
---|
35 | ; -- Get current esig
|
---|
36 | SET XOBESIG=$$GET1^DIQ(200,+$GET(DUZ)_",",20.4,"I","","XOBEMSG")
|
---|
37 | ;
|
---|
38 | ; -- Return result
|
---|
39 | IF $GET(DIERR),$DATA(XOBEMSG("DIERR","E",601)) SET RESULT=-2
|
---|
40 | ELSE IF XOBESIG="" SET RESULT=""
|
---|
41 | ELSE SET RESULT=$$ENCRYP^XUSRB1(XOBESIG)
|
---|
42 | QUIT
|
---|
43 | ;
|
---|
44 | SETCODE(RESULT,XOBESIG) ; -- Save user's Electronic Signature Code
|
---|
45 | ; Return:
|
---|
46 | ; 1 : if new ESig was correctly filed
|
---|
47 | ; 0 : if new ESig code is not valid
|
---|
48 | ; -1 : if new ESig is the same as the old one
|
---|
49 | ; -2 : if DUZ doesn't refer to a valid user
|
---|
50 | ;
|
---|
51 | ; Remote Procedure: XOBE ESIG SET CODE
|
---|
52 | ;
|
---|
53 | NEW X,XOBEIENS,XOBEOLD,XOBEFDA,XOBEMSG,DIERR
|
---|
54 | KILL RESULT
|
---|
55 | ;
|
---|
56 | ; -- Get the old esig code
|
---|
57 | SET XOBEIENS=+$GET(DUZ)_","
|
---|
58 | SET XOBEOLD=$$GET1^DIQ(200,XOBEIENS,20.4,"I","","XOBEMSG")
|
---|
59 | IF $GET(DIERR) DO QUIT
|
---|
60 | . IF $DATA(XOBEMSG("DIERR","E",601)) SET RESULT=-2
|
---|
61 | . ELSE SET RESULT=0
|
---|
62 | ;
|
---|
63 | ; -- Validate format of new esig
|
---|
64 | IF $GET(XOBESIG)="" SET RESULT=0 QUIT
|
---|
65 | SET X=$$DECRYP^XUSRB1(XOBESIG)
|
---|
66 | IF X'?.UNP!($LENGTH(X)>20)!($LENGTH(X)<6) SET RESULT=0 QUIT
|
---|
67 | ;
|
---|
68 | ; -- Make sure old and new are different
|
---|
69 | DO HASH^XUSHSHP
|
---|
70 | IF X=XOBEOLD SET RESULT=-1 QUIT
|
---|
71 | ;
|
---|
72 | ; -- Save the new code
|
---|
73 | SET XOBEFDA(200,XOBEIENS,20.4)=X
|
---|
74 | DO FILE^DIE("","XOBEFDA","XOBEMSG")
|
---|
75 | IF $GET(DIERR) SET RESULT=0 QUIT
|
---|
76 | ;
|
---|
77 | SET RESULT=1
|
---|
78 | QUIT
|
---|
79 | ;
|
---|
80 | GETDATA(RESULT) ; -- Return electronic signature block-related data
|
---|
81 | ; Return:
|
---|
82 | ; Electronic signature block-related data
|
---|
83 | ; -2 : if DUZ doesn't refer to a valid user
|
---|
84 | ;
|
---|
85 | ; Remote Procedure: XOBE ESIG GET DATA
|
---|
86 | ;
|
---|
87 | NEW XOBEIENS,XOBEFLDS,XOBETARG,XOBEMSG,DIERR
|
---|
88 | KILL RESULT
|
---|
89 | ;
|
---|
90 | ; -- Setup input variables to GETS^DIQ call
|
---|
91 | SET XOBEIENS=+$GET(DUZ)_","
|
---|
92 | SET XOBEFLDS="1;20.2;20.3;.132;.137;.138"
|
---|
93 | ;
|
---|
94 | ; -- Get data
|
---|
95 | DO GETS^DIQ(200,XOBEIENS,XOBEFLDS,"I","XOBETARG","XOBEMSG")
|
---|
96 | IF $GET(DIERR) DO QUIT
|
---|
97 | . IF $DATA(XOBEMSG("DIERR","E",601)) SET RESULT=-2
|
---|
98 | . ELSE SET RESULT=""
|
---|
99 | ;
|
---|
100 | ; -- Put data into RESULT array
|
---|
101 | SET RESULT(1)=$$VALUE($GET(XOBETARG(200,XOBEIENS,1,"I"))) ;initial
|
---|
102 | SET RESULT(2)=$$VALUE($GET(XOBETARG(200,XOBEIENS,20.2,"I"))) ;sig blk printed name
|
---|
103 | SET RESULT(3)=$$VALUE($GET(XOBETARG(200,XOBEIENS,20.3,"I"))) ;sig blk title
|
---|
104 | SET RESULT(4)=$$VALUE($GET(XOBETARG(200,XOBEIENS,.132,"I"))) ;office phone
|
---|
105 | SET RESULT(5)=$$VALUE($GET(XOBETARG(200,XOBEIENS,.137,"I"))) ;voice pager
|
---|
106 | SET RESULT(6)=$$VALUE($GET(XOBETARG(200,XOBEIENS,.138,"I"))) ;digital pager
|
---|
107 | QUIT
|
---|
108 | ;
|
---|
109 | VALUE(X) ; -- Return X or if X is "", return @
|
---|
110 | QUIT $SELECT($GET(X)="":"@",1:X)
|
---|
111 | ;
|
---|
112 | SETDATA(RESULT,XOBEVALS) ; -- Save electronic signature block-related data
|
---|
113 | ; Return:
|
---|
114 | ; 1 : if successfully filed
|
---|
115 | ; -2 : if DUZ doesn't refer to a valid user
|
---|
116 | ; error text : if Filer call failed
|
---|
117 | ;
|
---|
118 | ; Remote Procedure: XOBE ESIG SET DATA
|
---|
119 | ;
|
---|
120 | NEW XOBEFDA,DIERR,XOBEMSG,XOBEIENS
|
---|
121 | KILL RESULT
|
---|
122 | SET XOBEIENS=+$GET(DUZ)_","
|
---|
123 | ;
|
---|
124 | ; -- Setup up FDA for FILE^DIE call
|
---|
125 | SET XOBEFDA(200,XOBEIENS,1)=$GET(XOBEVALS("initial"))
|
---|
126 | SET XOBEFDA(200,XOBEIENS,20.2)=$GET(XOBEVALS("signature block printed name"))
|
---|
127 | SET XOBEFDA(200,XOBEIENS,20.3)=$GET(XOBEVALS("signature block title"))
|
---|
128 | SET XOBEFDA(200,XOBEIENS,.132)=$GET(XOBEVALS("office phone"))
|
---|
129 | SET XOBEFDA(200,XOBEIENS,.137)=$GET(XOBEVALS("voice pager"))
|
---|
130 | SET XOBEFDA(200,XOBEIENS,.138)=$GET(XOBEVALS("digital pager"))
|
---|
131 | ;
|
---|
132 | ; -- File the data
|
---|
133 | DO FILE^DIE("ET","XOBEFDA","XOBEMSG")
|
---|
134 | ;
|
---|
135 | ; -- Handle errors
|
---|
136 | IF $GET(DIERR) DO QUIT
|
---|
137 | . ; -- Entry not found error
|
---|
138 | . IF $DATA(XOBEMSG("DIERR","E",601)) SET RESULT(1)=-2 QUIT
|
---|
139 | . ;
|
---|
140 | . ; -- Put error message into RESULT array
|
---|
141 | . NEW ERR,LN
|
---|
142 | . SET ERR=0 FOR SET ERR=$ORDER(XOBEMSG("DIERR",ERR)) QUIT:'ERR DO
|
---|
143 | .. DO ADDTEXT("Error #"_XOBEMSG("DIERR",ERR),.RESULT)
|
---|
144 | .. DO ADDTEXT("--------------",.RESULT)
|
---|
145 | .. SET LN=0 FOR SET LN=$ORDER(XOBEMSG("DIERR",ERR,"TEXT",LN)) QUIT:'LN DO
|
---|
146 | ... DO ADDTEXT(XOBEMSG("DIERR",ERR,"TEXT",LN),.RESULT)
|
---|
147 | .. ;
|
---|
148 | .. ; -- If the error returned is 701 (invalid input),
|
---|
149 | .. ; -- put the ? help for the field into the RESULT array
|
---|
150 | .. IF XOBEMSG("DIERR",ERR)=701 DO ADDHELP(.XOBEMSG,ERR,.RESULT)
|
---|
151 | ;
|
---|
152 | ; -- Values were successfully saved
|
---|
153 | SET RESULT(1)=1
|
---|
154 | QUIT
|
---|
155 | ;
|
---|
156 | ADDHELP(XOBEMSG,ERR,RESULT) ;
|
---|
157 | NEW FILE,IENS,FIELD,LINE,MSG,DIERR,DIHELP
|
---|
158 | ;
|
---|
159 | ; -- Get file/field information from the XOBEMSG array
|
---|
160 | SET FILE=$GET(XOBEMSG("DIERR",ERR,"PARAM","FILE"))
|
---|
161 | SET IENS=$GET(XOBEMSG("DIERR",ERR,"PARAM","IENS"))
|
---|
162 | SET FIELD=$GET(XOBEMSG("DIERR",ERR,"PARAM","FIELD"))
|
---|
163 | ;
|
---|
164 | ; -- Get the ? help for the field
|
---|
165 | DO HELP^DIE(FILE,IENS,FIELD,"?","MSG")
|
---|
166 | ;
|
---|
167 | ; -- Add the ? help to the RESULT array
|
---|
168 | SET LINE=0 FOR SET LINE=$ORDER(MSG("DIHELP",LINE)) Q:'LINE DO
|
---|
169 | . DO ADDTEXT(MSG("DIHELP",LINE),.RESULT)
|
---|
170 | DO ADDTEXT("",.RESULT)
|
---|
171 | QUIT
|
---|
172 | ;
|
---|
173 | ADDTEXT(TEXT,RESULT) ;Add TEXT to RESULT array
|
---|
174 | NEW NODE
|
---|
175 | SET NODE=$ORDER(RESULT(" "),-1)+1
|
---|
176 | SET RESULT(NODE)=$GET(TEXT)
|
---|
177 | QUIT
|
---|
178 | ;
|
---|
179 | VALIDATE(RESULT,XOBESIG) ; -- Return whether passed ESig is valid
|
---|
180 | ; Return:
|
---|
181 | ; 1 if ESig is valid
|
---|
182 | ; 0 if ESig is invalid
|
---|
183 | ; -1 if ESig is null
|
---|
184 | ; -2 if DUZ doesn't refer to a valid user
|
---|
185 | ; This entry point is not currently used.
|
---|
186 | ;
|
---|
187 | NEW X,XOBECURR,XOBEIENS,XOBEMSG,DIERR
|
---|
188 | KILL RESULT
|
---|
189 | ;
|
---|
190 | ; -- Get esig from New Person file
|
---|
191 | SET XOBEIENS=+$GET(DUZ)_","
|
---|
192 | SET XOBECURR=$$GET1^DIQ(200,XOBEIENS,20.4,"I","","XOBEMSG")
|
---|
193 | ;
|
---|
194 | ; -- Check that DUZ refers to a valid user
|
---|
195 | IF $GET(DIERR),$DATA(XOBEMSG("DIERR","E",601)) SET RESULT=-2 QUIT
|
---|
196 | ;
|
---|
197 | ; -- Check for null esig
|
---|
198 | IF XOBECURR="" SET RESULT=-1 QUIT
|
---|
199 | ;
|
---|
200 | ; -- Check whether old matches value passed in
|
---|
201 | SET X=$$DECRYP^XUSRB1(XOBESIG)
|
---|
202 | DO HASH^XUSHSHP
|
---|
203 | SET RESULT=X=XOBECURR
|
---|
204 | QUIT
|
---|