SMMNW00300.xjs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <Script type="xscript4.0"><![CDATA[/*
  3. ordre manage(SMMNW00300.xfm - JScript )
  4. - Version :
  5. 1) : Ver.1.00.01
  6. */
  7. function fnSaveDrugPrn(){
  8. //1.인증저장을 위한 자료를 구성함
  9. //2. 자료에 대해서 인증하기
  10. if( fnSignSaveWork() == true ){ //yjh : 인증저장
  11. //alert("submit 전 :" + model.getValue("/root/temp/result/signdata/pid"));
  12. var oParam = {};
  13. oParam.id = "TXMNR00608";
  14. oParam.service = "caremedirecapp.CareMediRec";
  15. oParam.method = "reqExePrnDrugActingInfo";
  16. oParam.inds = "signdata=ds_temp_result_signdata";
  17. oParam.outds = "";
  18. oParam.async = false;
  19. oParam.callback = "cf_TXMNR00608";
  20. tranf_submit(oParam);
  21. if( arErrorCode.pop("TXMNR00608") > -1 ){
  22. //------------------------(20080908)
  23. //alert("-------------------일자별XLST----------------");
  24. //2.일자별XLST를 호출함
  25. var signDates = new Array();
  26. var signDateCnt = 0;
  27. var signdispdd = "";
  28. var sPathsignsave = "ds_temp_result_signdata";
  29. //alert("------------------sPathsignsave------------:" + getNodesetCount(sPathsignsave));
  30. var rows = ds_temp_result_signdata.rowcount;
  31. if( rows <= 0 ) return;
  32. for( var i=0 ; i<rows ; i++ ){
  33. signdispdd = ds_temp_result_signdata.getColumn(i, "execdd");
  34. //alert( "전체loop:" + signdispdd + ":--------" + sPathsignsave + "[" + i + "]/execdd");
  35. if( signDates.length == 0 ){
  36. signDateCnt =0;
  37. signDates[signDateCnt] = "";
  38. }
  39. if( signdayFind(signDates,signdispdd) == true ){ //------(투약일자)
  40. signDateCnt ++;
  41. signDates[signDateCnt] = signdispdd;
  42. //alert("b:" + signDates[signDateCnt] +"/" + signdispdd);
  43. }
  44. }
  45. //--------------------------(20080902)
  46. //-----------------------------------------------
  47. // 투약기록을 일자별로 XLST를 만들기 위해서
  48. //-----------------------------------------------
  49. fnWorkddSign(signDates);
  50. //------------------------(20080908)
  51. }
  52. }else{
  53. sysf_messageBox("투약기록저장이 취소되었습니다.", "I");
  54. }
  55. }
  56. function cf_TXMNR00608(sSvcId, nErrorCode, sErrorMsg) {
  57. arErrorCode.push(sSvcId, nErrorCode);
  58. }
  59. /**
  60. * @group :
  61. * @ver : 2008.08.31
  62. * @by : 김보성
  63. * @---------------------------------------------------
  64. * @type : function
  65. * @access : public
  66. * @desc : 투약기록 관련 인증저장(interface제공한 web에서 사용)(iprc단위 1개 처리용)
  67. * : 따라서 여러개의 iprc이면 n번 호출해야한다.
  68. * @param :
  69. * @return :
  70. * @---------------------------------------------------
  71. */
  72. var sSignRow =0;
  73. function fnSignSaveWork() {
  74. //alert("-----fnSignSaveWork-투약기록하기-------");
  75. var sSignPath = "ds_temp_result_signdata";
  76. var sSignPathCount = ds_temp_result_signdata.rowcount;
  77. var sPathSignSave = "ds_temp_result_signdata";
  78. if ( sSignPathCount <= 0 ) {
  79. sysf_messageBox("자료가 존재하지 않습니다. ","E999");
  80. return false;
  81. }
  82. //alert("----말기1------------"+ getNodesetCount(sSignPath));
  83. //model.removenode("/root/send/savedata");
  84. //model.makenode("/root/send/savedata");
  85. Sign.certreload = true ; // 전자서명 호출시 인증저장 버튼을 누늘때마다 인증서가 뜨도록 처리(20080921)
  86. for( var j=0 ; j<ds_temp_result_signdata.rowcount ; j++ ){
  87. ////alert("loop:"+j);
  88. sSignRow= j; //전역변수(프로그램내)
  89. if(Sign.signprocess() == false){//인증저장 데이터 생성fMake_SignData 호출
  90. Sign.certreload = false ; // 전자서명 호출시 인증저장 버튼을 누늘때마다 인증서가 뜨도록 처리(20080921)
  91. return false;
  92. }
  93. Sign.certreload = false ; // 전자서명 호출시 인증저장 버튼을 누늘때마다 인증서가 뜨도록 처리(20080921)
  94. ds_temp_result_signdata.setColumn(j, "recdd", utlf_getCurrentDate()); //실제기록이 이루어진 기록일자
  95. ds_temp_result_signdata.setColumn(j, "rectm", utlf_getCurrentTime()); //실제기록이 이루어진 기록시간
  96. ds_temp_result_signdata.setColumn(j, "recsaveflag", "Y"); //전자서명인적정보변경여부
  97. ds_temp_result_signdata.setColumn(j, "signflag", "02"); //서명자료구분(02:간호)
  98. ds_temp_result_signdata.setColumn(j, "signgenrflag", "I"); //외래/입원구분
  99. ds_temp_result_signdata.setColumn(j, "formcd", "0000002476"); //투약기록 서식번호
  100. ds_temp_result_signdata.setColumn(j, "signbfcnts", Sign.signedInfos[1]);//인증할 데이터 정보(미기록 노드 제거된 정보)
  101. ds_temp_result_signdata.setColumn(j, "signaftcnts", Sign.signedInfos[2]);//공인인증 처리후 데이터
  102. ds_temp_result_signdata.setColumn(j, "signflagyn", "Y"); //비공식적으로 인증되지않도록 제어할수 있는기능
  103. ds_temp_result_signdata.setColumn(j, "userid", sysf_getUserId()); //userid
  104. ds_temp_result_signdata.setColumn(j, "dispyn", "N"); //통합기록VIEW에 보이지 않기(20080922)
  105. //-----------(20080923)
  106. var stempdd = ds_main_om_cond.getColumn(0, "execdd");
  107. var stemptm = ds_main_om_cond.getColumn(0, "exectm").substr(0,4);
  108. ds_temp_result_signdata.setColumn(j, "execdd", stempdd); //(20080923)
  109. ds_temp_result_signdata.setColumn(j, "exectm", stemptm); //(20080923)
  110. //-----------(20080923)
  111. }
  112. return true;
  113. }
  114. //인증정보 말기
  115. function fMake_SignData(){
  116. //alert("fMake_SignData---------시작");
  117. /*
  118. <signinfo>
  119. <signdata>
  120. <pid>29953</pid>
  121. <hngnm>T입0820</hngnm>
  122. <prcpdd>20080821</prcpdd>
  123. <execdd>20080821</execdd>
  124. <prcpkindnm/>
  125. <prcpmixno/>
  126. <prcpcd>DSSL500</prcpcd>
  127. <prcpnm>Disal tab. 500mg (Salsalate)</prcpnm>
  128. <prcpvolnm>1500mg</prcpvolnm>
  129. <prcpqtynm>3T</prcpqtynm>
  130. <abbrnm>PO</abbrnm>
  131. <exectm>130000</exectm>
  132. <nursnm>김보성</nursnm>
  133. <execcarestatnm>정상투약</execcarestatnm>
  134. <carecfactnm> </carecfactnm>
  135. <orddrnm>김만수</orddrnm>
  136. </signdata>
  137. </signinfo>
  138. */
  139. var ssigndruglist = "ds_temp_result_signdata";
  140. var spid = ds_temp_result_signdata.getColumn(sSignRow, "pid");
  141. var shngnm = ds_temp_result_signdata.getColumn(sSignRow, "hngnm");
  142. var sprcpdd = ds_temp_result_signdata.getColumn(sSignRow, "prcpdd");
  143. //--------------(20080923)
  144. //var sexecdd = model.getValue(ssigndruglist + "[" + sSignRow + "]/execdd");
  145. //opener.model.setValue("/root/main_om/cond/execdd", model.getValue("/root/main/execdd"));
  146. var sexecdd = ds_main_om_cond.getColumn(0, "execdd");
  147. //--------------(20080923)
  148. /*
  149. ,CASE WHEN a.careprnexecflag = 'P' THEN 'PRN' ELSE '' END || ' ' ||
  150. CASE WHEN a.anticncrprtlno <> 0 THEN '항암' ELSE '' END || ' ' ||
  151. CASE WHEN a.dccountyn = 'Y' AND a.selfdrugflag = 'Y' THEN 'self D/C'
  152. WHEN a.dccountyn = 'Y' then 'D/C'
  153. WHEN a.selfdrugflag = 'Y' then 'self'
  154. END prcpkindnm
  155. //처방종류명 (다른업무에서 투약기록관련인증정보를 생성시 어려운 항목
  156. */
  157. var sprcpkindnm = ds_temp_result_signdata.getColumn(sSignRow, "prcpkindnm");
  158. var sprcpmixno = ds_temp_result_signdata.getColumn(sSignRow, "prcpmixno");
  159. var sprcpcd = ds_temp_result_signdata.getColumn(sSignRow, "prcpcd");
  160. var sprcpnm = ds_temp_result_signdata.getColumn(sSignRow, "prcpnm");
  161. var sprcpvolnm = ds_temp_result_signdata.getColumn(sSignRow, "prcpvolnm");
  162. var sprcpqtynm = ds_temp_result_signdata.getColumn(sSignRow, "prcpqtynm");
  163. var sabbrnm = ds_temp_result_signdata.getColumn(sSignRow, "abbrnm");
  164. //-----------------------(20080923)
  165. //var sexectm = model.getValue(ssigndruglist + "[" + sSignRow + "]/exectm");
  166. //opener.model.setValue("/root/main_om/cond/exectm", model.getValue("/root/main/exectm")+"00");
  167. var sexectm = ds_main_om_cond.getColumn(0, "exectm").substr(0,4);
  168. //-----------------------(20080923)
  169. var snursnm = ds_temp_result_signdata.getColumn(sSignRow, "nursnm");
  170. var sexeccarestatnm = ds_temp_result_signdata.getColumn(sSignRow, "execcarestatnm");
  171. var scarecfactnm = ds_temp_result_signdata.getColumn(sSignRow, "carecfactnm");
  172. var sorddrnm = ds_temp_result_signdata.getColumn(sSignRow, "orddrnm");
  173. ds_send_signinfo_signdata.setColumn(0, "pid", spid);
  174. ds_send_signinfo_signdata.setColumn(0, "hngnm", shngnm);
  175. ds_send_signinfo_signdata.setColumn(0, "prcpdd", sprcpdd); //처방일자
  176. if( sexecdd == "00000000" ){ //투약일자
  177. ds_send_signinfo_signdata.setColumn(0, "execdd", "");
  178. }else{
  179. ds_send_signinfo_signdata.setColumn(0, "execdd", sexecdd);
  180. }
  181. ds_send_signinfo_signdata.setColumn(0, "prcpkindnm", sprcpkindnm);
  182. ds_send_signinfo_signdata.setColumn(0, "prcpmixno", sprcpmixno); //MIXNO
  183. ds_send_signinfo_signdata.setColumn(0, "prcpcd", sprcpcd); //처방코드
  184. ds_send_signinfo_signdata.setColumn(0, "prcpnm", sprcpnm); //처방명
  185. ds_send_signinfo_signdata.setColumn(0, "prcpvolnm", sprcpvolnm); //용량단위명칭(용량+용량단위명칭)
  186. ds_send_signinfo_signdata.setColumn(0, "prcpqtynm", sprcpqtynm); //수량단위명칭(수량+수량단위명칭)
  187. //투여방법약어명(다른업무에서 투약기록관련인증정보를 생성시 어려운 항목)
  188. ds_send_signinfo_signdata.setColumn(0, "abbrnm", sabbrnm);
  189. if( sexectm == "000000" ){ //투약시간
  190. ds_send_signinfo_signdata.setColumn(0, "exectm", "");
  191. }else{
  192. ds_send_signinfo_signdata.setColumn(0, "exectm", sexectm);
  193. }
  194. ds_send_signinfo_signdata.setColumn(0, "nursnm", snursnm); //간호사명칭
  195. if( utlf_isNull(sexeccarestatnm) ) sexeccarestatnm = "N";
  196. //미확인,정상투약,투약X-반환가능,투약X-반환불가,퇴원당일남은약
  197. //(다른업무에서 투약기록관련인증정보를 생성시 정상투약,)
  198. ds_send_signinfo_signdata.setColumn(0, "execcarestatnm", sexeccarestatnm);
  199. //간호사REMARK CODE에 대한 REMARK 명칭((다른업무에서 투약기록관련인증정보를 생성시 공백)
  200. ds_send_signinfo_signdata.setColumn(0, "carecfactnm", scarecfactnm);
  201. //진료의명(다른업무에서 투약기록관련인증정보를 생성시 어려운 항목)
  202. ds_send_signinfo_signdata.setColumn(0, "orddrnm", sorddrnm);
  203. //Sign.addnode("/root/send/signinfo/signdata");
  204. Sign.addnode("/signdata", ds_send_signinfo_signdata.saveXML());
  205. //alert("fMake_SignData---------종료");
  206. //Sign.signedInfos[1] 는 없음
  207. ////alert("fmake_signdata"+ Sign.signedInfos[1] );
  208. }
  209. //일자별XLST를 호출함
  210. function fnWorkddSign(signDates) {
  211. //-----------------------------------------------(20080901)
  212. // 투약기록을 일자별로 XLST를 만들기 위해서
  213. //-----------------------------------------------
  214. var sPathSign = "ds_main_om_signinfo";
  215. var pGrd = group5.grd_ompatlist;
  216. var signDate = "";
  217. //alert("------------------fnWorkddSign------------"+ signDates.length);
  218. for( var i=0 ; i<signDates.length ; i++ ){
  219. signDate = "" + signDates[i];
  220. //alert("1:" + signDate);
  221. if( !utlf_isNull(signDate) ){
  222. signDate = signDate.replace("-","");
  223. //alert("2:" + signDate);
  224. var spid = ds_main_om_ominfo_ompatinfo_ompatlist.getColumn(pGrd.currentrow, "pid"); //등록번호 (필수)
  225. var sinstcd = "";//model.getValue("/root/main_om/ominfo/ompatinfo/ompatlist/instcd"); //기관코드 (사용X)
  226. var sindd = ds_main_om_ominfo_ompatinfo_ompatlist.getColumn(pGrd.currentrow, "indd"); //입원일자 (필수)
  227. var scretno = ds_main_om_ominfo_ompatinfo_ompatlist.getColumn(pGrd.currentrow, "cretno");//생성번호 (사용X)
  228. var sprcpdd = ""; //처방일자 (PRN시 필수)
  229. var sprcpno = ""; //처방번호 (확인사항)
  230. var sworkdd = signDate; //model.getValue("/root/main/cond/orddd"); //투약일(일자그룹일때만 (필수)
  231. var slistflag = "90"; //작업구분 (필수)
  232. var snursnm = sysf_getUserName(); //간호사명추가 (필수)
  233. var shngnm =ds_main_om_ominfo_ompatinfo_ompatlist.getColumn(pGrd.currentrow, "patnm"); //환자명추가 (필수)
  234. var smedrexecdd = ds_main_om_cond.getColumn(0, "execdd"); //화면에서저장할투약일자(사용X)
  235. var smedrexectm = ds_main_om_cond.getColumn(0, "exectm").substr(0,4); //화면에서저장할투약시간(사용X)
  236. //0923
  237. //alert("일자별xlst:" + smedrexectm + "/" + smedrexectm);
  238. ds_main_om_signinfo_reqsigncond.setColumn(0, "pid", spid); //desc="등록번호"
  239. ds_main_om_signinfo_reqsigncond.setColumn(0, "instcd", sinstcd); //desc="기관코드"
  240. ds_main_om_signinfo_reqsigncond.setColumn(0, "indd", sindd); //desc="입원일자"
  241. ds_main_om_signinfo_reqsigncond.setColumn(0, "cretno", scretno); //desc="생성번호"
  242. ds_main_om_signinfo_reqsigncond.setColumn(0, "prcpdd", sprcpdd); //desc="처방일자"
  243. ds_main_om_signinfo_reqsigncond.setColumn(0, "prcpno", sprcpno); //desc="처방번호"
  244. ds_main_om_signinfo_reqsigncond.setColumn(0, "workdd", sworkdd); //desc="투약일"
  245. ds_main_om_signinfo_reqsigncond.setColumn(0, "listflag", slistflag); //desc="작업구분"
  246. ds_main_om_signinfo_reqsigncond.setColumn(0, "nursnm", snursnm); //desc="간호사명추가"
  247. ds_main_om_signinfo_reqsigncond.setColumn(0, "hngnm", shngnm); //desc="환자명추가"
  248. ds_main_om_signinfo_reqsigncond.setColumn(0, "medrexecdd", smedrexecdd); //desc="화면에서저장할투약일자"
  249. ds_main_om_signinfo_reqsigncond.setColumn(0, "medrexectm", smedrexectm); //desc="화면에서저장할투약시간"
  250. var pFlag = "Drug"; //저장구분 (Drug : 투약기록)
  251. var pNode1 = "ds_main_om_signinfo_reqsigncond"; //조회할 조건 PATH(의미없음)
  252. var pNode2 = sPathSign + "_signdruginfo_signdruglist"; //Return 리스트 PATH
  253. //--------------------------(20080923)
  254. var ordtype = ds_temp_result_signdata.getColumn(0, "ordtype"); //(20080923)
  255. fCare_SignNode(pFlag, pNode1, pNode2,spid,sindd,scretno, ordtype);
  256. //fCare_SignNode(pFlag, pNode1, pNode2, pPid, pIndd, pCretno, pIoflag){
  257. //--------------------------(20080923)
  258. }
  259. }
  260. }
  261. //------------------------(20080902)
  262. //일자별 인증정보를 묶을 일자를 찾는다
  263. //넣어야 할지는 판단한다.
  264. function signdayFind(signDates,findDate) {
  265. var sreturn = false;
  266. if (findDate == "00000000" || utlf_isNull(findDate) ){
  267. }else{
  268. ////alert("signDates.length:"+ signDates.length);
  269. for( var i=0 ; i<signDates.length ; i++ ){
  270. ////alert("비교:" + signDates[i] + "/" + findDate);
  271. sreturn = true;
  272. if( signDates[i] == findDate ){
  273. sreturn = false;
  274. break;
  275. }
  276. }
  277. }
  278. return sreturn;
  279. }
  280. //------------------(20080903)
  281. ]]></Script>