SMMNW00300.js 14 KB

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