| [613] | 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
 | 
|---|