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