SMMMO04500.js 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889
  1. /*
  2. - ▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩
  3. 수술환자리스트 ( SMMMO04500_수술환자리스트.xrw - JScript )
  4. - ▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩
  5. */
  6. var sOPPATLIST_PATH = "/root/main/oppatinfo/oppatlist";
  7. var sORDERBY = "";
  8. /**
  9. * @desc : 화면 초기화
  10. * @
  11. * @param :
  12. * @return :
  13. * @author : 오지훈
  14. * @---------------------------------------------------
  15. */
  16. function fInitialize_SMMMO04500(){
  17. model.removeNodeset(sOPPATLIST_PATH);
  18. model.setValue("/root/main/cond/opcnfmdd", getCurrentDate());
  19. var openflag = model.getValue(opener.root.list.oppatlistflag);
  20. var reopenflag = model.getValue(opener.root.reopen.reopenflag); //진료대상자 리스트 open여부
  21. var chngcolflag= model.getValue(opener.root.chngcol.chngcolflag); //컬럼변경 여부
  22. if(openflag == "N"){ //수술환자리스트 최초open
  23. zbcfGetCodeList(new Array("M0014",
  24. "M0015",
  25. "M0017",
  26. "M0623"),
  27. new Array("/root/init/M0014",
  28. "/root/init/M0015",
  29. "/root/init/M0017",
  30. "/root/init/M0623"));
  31. reqHardCodeInfo("/root/send/reqdata", "/root/init/hardcdno", 18); //마취통증의학과 부서코드 조회
  32. var anstdeptcd = model.getValue("/root/init/hardcdno/hardcd/hardcd");
  33. //2016.10.11 [수술탭] Popup Menu 서식코드(Formcd)
  34. reqHardCodeInfo("/root/send/reqdata", "/root/init/pmenu", 9969);
  35. // 2017.01.03 외상환자 전용 수술방 제어
  36. reqHardCodeInfo("/root/send/reqdata", "/root/init/hardcd9973", 9973);
  37. reqOpRoomList(model.getValue("/root/main/cond/opcnfmdd"), "/root/init/oproomlist", "total"); //수술방명 조회
  38. addComboInstance("/root/init/oproomlist", "oproomcd^oproomnm", "0000^방없음", "oproomlist"); //수술방콤보 Item '방없음'추가
  39. copyNodeType("/root/init/oproomlist2", "/root/init/oproomlist", "replace");
  40. addComboInstance("/root/init/oproomlist2", "oproomcd^oproomnm", "-^전체", "oproomlist"); //조회조건 수술방콤보 Item '전체'추가
  41. cmb_oproomcd.select(0); //수술방 콤보는 default '전체'설정
  42. mmbfGetDeptCodeComboList("/root/send/reqdata", "/root/init/orddept" , "D"); //부서콤보 조회
  43. addComboInstance("/root/init/orddept", "deptcd^depthngnm", "-^전체", "dept"); //부서콤보 Item '전체'추가
  44. mmbfGetUserComboList("/root/send/reqdata", "/root/init/userlist" , getUserInfo("dutplcecd"), "0330"); //의사콤보 조회
  45. addComboInstance("/root/init/userlist", "userid^usernm", "-^전체", "usercombo"); //의사콤보 Item '전체'추가
  46. mmbfGetUserComboList("/root/send/reqdata", "/root/init/userlist2" , anstdeptcd, "0330"); //마취통증의학과 의사콤보 조회
  47. model.copyNode(opener.root.temp.oppatlist , root.init); //진료대상자 main에 init복사
  48. model.setValue(opener.root.list.oppatlistflag, "Y"); //수술환자리스트 open여부 Y로 설정
  49. if(reopenflag != "Y"){ //수술환자리스트 처음 열린 경우, 기본 조회 조건 설정
  50. model.setValue("/root/main/cond/perfdeptcd" , getUserInfo("dutplcecd")); //진료과
  51. var jobposcd = getUserInfo("jobposcd");
  52. if (jobposcd == "1775" || jobposcd == "1800") {
  53. model.setValue("/root/main/cond/perfdrid" , "-"); //의사
  54. } else {
  55. model.setValue("/root/main/cond/perfdrid" , getUserInfo("userid")); //의사
  56. }
  57. model.refresh();
  58. }else{ //수술환자리스트 다시 열린 경우, 진료대상자 main에 ordtab의 condlist를 복사, condlist는 닫힐때 진료대상자의 정보를 저장함
  59. try {
  60. model.copyNode(root.main.cond, opener.root.reopen.condlist.condlist);
  61. } catch(E) {
  62. model.setValue("/root/main/cond/orddeptcd", getUserInfo("dutplcecd"));
  63. model.setValue("/root/main/cond/orddrid" , getUserInfo("userid"));
  64. model.refresh();
  65. }
  66. //model.copyNode(root.main.cond, opener.root.reopen.condlist.condlist);
  67. model.setValue(opener.root.reopen.reopenflag, "N");
  68. mmbfGetUserComboList("/root/send/reqdata", "/root/init/userlist" , cmb_orddept.value, "0330");//이전 수술환자리스트 화면의 진료과의 의사콤보 조회
  69. addComboInstance("/root/init/userlist", "userid^usernm", "-^전체", "usercombo"); //의사콤보 Item '전체'항목 추가
  70. var jobposcd = getUserInfo("jobposcd");
  71. if (jobposcd == "1775" || jobposcd == "1800") {
  72. model.setValue("/root/main/cond/perfdrid" , "-"); //의사
  73. } else {
  74. model.setValue("/root/main/cond/perfdrid" , getUserInfo("userid")); //의사
  75. }
  76. model.refresh();
  77. }
  78. model.copyNode(opener.root.cond.oppatlist, root.main.cond);
  79. reqOrderInfoOfCol("SMMMO04500", "grd_oppatlist"); //수술환자리스트 컬럼 조회 및 설정
  80. }else if(openflag == "Y"){ //수술환자리스트 다시open
  81. model.copyNode(root.init, opener.root.temp.oppatlist);
  82. model.copyNode(root.main.cond, opener.root.cond.oppatlist);
  83. var xmlnode = model.instance1.selectSingleNode("/root/init/userscrnenvinfo/gridseq");
  84. if(xmlnode != null){
  85. var refdata = model.getValue("/root/init/userscrnenvinfo/gridseq/compsrefcnts");
  86. var sizedata = model.getValue("/root/init/userscrnenvinfo/gridseq/compssizecnts");
  87. var frozencol = model.getValue("/root/init/userscrnenvinfo/gridseq/frozencol");
  88. setOrderInfoOfCol("grd_oppatlist", refdata, sizedata, frozencol); //수술환자리스트 컬럼 설정, 기존에 조회한 내용으로 처리
  89. }
  90. }
  91. if(cmb_orddept.label==""){cmb_orddept.select(1);}
  92. if(cmb_orddrid.label==""){cmb_orddrid.select(1);}
  93. if(chngcolflag == "Y"){ //컬럼설정을 통해 재설정 한 경우, 컬럼순서를 다시 조회 처리
  94. reqOrderInfoOfCol("SMMMO04500", "grd_oppatlist"); //외래환자리스트 컬럼 조회 및 설정
  95. model.setValue(opener.root.chngcol.chngcolflag, "N");
  96. }
  97. fReqOPPatList();
  98. opener.javascript.fCtrlBtnDisable(false);
  99. }
  100. /**
  101. * @desc : 수술환자 선택
  102. * @
  103. * @param :
  104. * @return :
  105. * @author : 오지훈
  106. * @---------------------------------------------------
  107. */
  108. function fSelectOpPat(){
  109. // 환자 선택 로그 시작
  110. fStartLogCheck("fSelectOpPat");
  111. var step1Elapsed = 0; // 환자선택 진행 가능여부 체크 시간
  112. var step2Elapsed = 0; // 환자선택 상단정보 설정 시간
  113. var step3Elapsed = 0; // 처방+기록+그외 팝업창 처리
  114. var ordrecflag = model.getValue(opener.root.main.cond.ordrecflag);
  115. var currow = grd_oppatlist.row;
  116. var dutplcecd = getUserInfo("dutplcecd"); //사용자부서
  117. if(currow < 1){
  118. return;
  119. }
  120. // 진행가능 한지 여부 체크
  121. fStartLogTempCheck("fSelectOpPat_Step1");
  122. var instcd = getUserInfo("dutplceinstcd");
  123. var opstatcd = model.getValue(sOPPATLIST_PATH + "[" + currow + "]/opstatcd");
  124. var painlessflag = model.getValue(sOPPATLIST_PATH + "[" + currow + "]/painlessflag"); // 무통마취여부가 N일 경우는 수술마취 확정상태에 따라 Blocking : 2009.02.05 :김영학 (박유미선배 요청)
  125. var pid = model.getValue(sOPPATLIST_PATH + "[" + currow + "]/pid");
  126. var hngnm = model.getValue(sOPPATLIST_PATH + "[" + currow + "]/hngnm");
  127. var opcnfmdd = model.getValue(sOPPATLIST_PATH + "[" + currow + "]/opcnfmdd");
  128. var perfdeptcd = model.getValue(sOPPATLIST_PATH + "[" + currow + "]/perfdeptcd");
  129. var perfdrid = model.getValue(sOPPATLIST_PATH + "[" + currow + "]/perfdrid");
  130. var ioflag = model.getValue(sOPPATLIST_PATH + "[" + currow + "]/ioflag");
  131. var srchdd = model.getValue("/root/main/cond/opcnfmdd");
  132. if(isNull(perfdeptcd)) perfdeptcd = model.getValue("/root/main/cond/orddeptcd");
  133. if(isNull(ioflag)) ioflag = "T";
  134. if(painlessflag == "N") {
  135. if(opstatcd == "00" || opstatcd == "10"){
  136. messageBox("선택된 환자는 수술확정이 되지", "E007");
  137. return;
  138. }
  139. }
  140. if( getGlobalVariable("able_sel_patlist", "M") == "N" ) { // 환자 선택 가능 여부 체크 2012.09.03 엄영만
  141. messageBox("현재 로그인한 '"+ getUserInfo("dutplcenm") +"' 부서는 기록저장 및 처방발행이 불가능한 부서 입니다.\n\n다시 로그인 후 진행 하십시오.","E");
  142. return false;
  143. }
  144. //2016.05.09 마취전평가 및 협진서 미작성 시 마취기록지 사용못하도록 제한
  145. if((getUserInfo("dutplcecd") == "2090000000" || getUserInfo("dutplcecd") == "2090300000")
  146. && opener.model.getValue("/root/main/cond/ordrecflag") != "Y"){ //사용자부서가 마취통증의학과, 통증클리닉인 경우
  147. // 2017.01.03 외상환자 전용 수술방 제어
  148. var trpatyn = model.getValue(sOPPATLIST_PATH + "[" + currow + "]/trpatyn");
  149. var oproomnm = model.getValue(sOPPATLIST_PATH + "[" + currow + "]/oproomnm");
  150. var nTarRow = model.getValue("/root/init/hardcd9973/hardcd[hardcd='"+oproomnm+"']/hardcdnm");
  151. if( instance1.selectSingleNode(sOPPATLIST_PATH + "[" + currow + "]/trpatyn") != null
  152. && trpatyn != "Y" && nTarRow != "" ){
  153. var setDate = nTarRow.split("|")[0];
  154. if( !isNull(setDate) && setDate.length == 8 && setDate <= opcnfmdd ){
  155. messageBox("선택된 환자 수술방은 외상환자 수술방입니다. 수술방 변경 후 진행하십시오.", "E");
  156. //return false;
  157. }
  158. }
  159. if( lf_TRMMR03714() == false ){
  160. var rtn = messageBox("선택된 환자는 마취전평가 및 협진서 작성이 되지않았습니다. 기록 작성 후 진행하십시오.", "E");
  161. return false;
  162. }else if(fGetHardCDList("Y", 9970, 3) == "Y" && lf_OpAssemRecExist("STEP4") == false){
  163. var rtn = messageBox("선택된 환자는 마취유도직전평가서 작성이 되지않았습니다. 기록 작성 후 진행하십시오.", "E");
  164. return false;
  165. }
  166. }
  167. model.removeNodeset("/root/send/reqdata");
  168. model.makeValue("/root/send/reqdata/ioflag" , "T"); //수술환자 ioflag는 T로 설정, 실제로 T는 없으나, 로직처리를 위해 임시로, 실제 ioflag는 patflag
  169. model.makeValue("/root/send/reqdata/pid" , pid);
  170. model.makeValue("/root/send/reqdata/orddd" , opcnfmdd);
  171. model.makeValue("/root/send/reqdata/orddeptcd", perfdeptcd);
  172. model.makeValue("/root/send/reqdata/orddrid" , perfdrid);
  173. model.makeValue("/root/send/reqdata/patflag" , ioflag); //실제 ioflag는 patflag로 설정
  174. model.makeValue("/root/send/reqdata/instcd" , instcd); //기관코드
  175. model.makeValue("/root/send/reqdata/srchdd" , srchdd); //기준일자
  176. if(submit("TRMMO04503")==true){ //수술환자의 원무키 조회
  177. var cnt=getNodesetCount("/root/init/pamkeyinfo/pamkeyinfo");
  178. if(cnt > 1){
  179. messageBox("환자의 원무 접수정보가 2건이상 존재 합니다.\n\n처방및 기록을 저장하실 원무 접수 정보를 선택", "I007");
  180. modal("SPMMO18300", "", "", "", "SPMMO18300", "/root/init/pamkeyinfo", "/root/main/patinfo");
  181. var cretno = getParameter("SPMMO18300_cretno");
  182. if(cretno == "0") {
  183. messageBox("환자의 원무 접수정보가 선택 되지", "E007");
  184. return;
  185. } else {
  186. model.setValue("/root/init/pamkeyinfo/pamkeyinfo/cretno", cretno);
  187. }
  188. }
  189. } else {
  190. messageBox("선택된 환자는 원무 접수 정보가", "E014");
  191. return;
  192. }
  193. //처방, CP화면에 modal 또는 modaless가 뜬 경우, 환자 선택 불가
  194. if(fChkScrnDisable()==false){
  195. return;
  196. }
  197. //CP환자 여부 확인
  198. if(fChkCPPatValid(currow)==false){
  199. return;
  200. }
  201. // 진료기록에 수정된 사항이 있을 경우 저장할 것인지 묻는 함수 호출 : 2009. 07. 27 김영학
  202. var mainobj = getMainViewer();
  203. var mainscrnid = mainobj.javascript.getScreenID(); //메인화면의 기록지 ID
  204. if(mainscrnid == "SMMMR00100"){
  205. var prvIntRecPamInfRtn = mainobj.window.javascript.fPrevInitRecPamInfo();
  206. if(prvIntRecPamInfRtn == false){
  207. return;
  208. }// 기록지에 필수 입력사항을 입력하지 않았을 때 그냥 넘어가 버리는 오류 수정 20100305 LYJ
  209. }
  210. step1Elapsed = fEndLogTempCheck("fSelectOpPat_Step1");
  211. // 상단정보 설정
  212. fStartLogTempCheck("fSelectOpPat_Step2");
  213. if(!fReqOpPatPamInfo(currow)) { return; }
  214. step2Elapsed = fEndLogTempCheck("fSelectOpPat_Step2");
  215. // 진료기록, 처방화면 연동
  216. fStartLogTempCheck("fSelectOpPat_Step3");
  217. var recflag = opener.model.getValue("/root/main/cond/recflag");
  218. opener.javascript.fOpenPrcpMainWnd(recflag);
  219. step3Elapsed = fEndLogTempCheck("fSelectOpPat_Step3");
  220. var recnaviyn = opener.model.getValue("/root/main/cond/recnaviyn");
  221. var mainObj = getMainViewer();
  222. var curPrcpObj = mainObj.javascript.getOpenWindow("SMMMO00100"); //활성화된 처방Main 화면 object loading
  223. if (curPrcpObj != null && recnaviyn == "N") { // 처방창이 팝업 된경우만 체크
  224. var sLogParam = "userid:" + getUserInfo("userid") + "|" // item02
  225. + "instcd:" + model.getValue(sOPPATLIST_PATH + "["+ currow +"]/instcd") + "|" // item03
  226. + "pid:" + model.getValue(sOPPATLIST_PATH + "["+ currow +"]/pid") + "|" // item04
  227. + "opcnfmdd:" + model.getValue(sOPPATLIST_PATH + "["+ currow +"]/opcnfmdd") + "|" // item05
  228. + "perfdeptcd:" + model.getValue(sOPPATLIST_PATH + "["+ currow +"]/perfdeptcd")+ "|" // item06
  229. + "perfdrid:" + model.getValue(sOPPATLIST_PATH + "["+ currow +"]/perfdrid") + "|" // item07
  230. + step1Elapsed + "|" // 진행가능 한지 여부 체크 // item08
  231. + step2Elapsed + "|" // 상단정보 // item09
  232. + step3Elapsed // 처방+기록+그외 팝업창 처리 // item10
  233. ;
  234. fEndLogCheck("fSelectOpPat", sLogParam);
  235. }
  236. }
  237. /**
  238. * @desc : 수술환자 기본정보설정
  239. * @
  240. * @param :
  241. * @return :
  242. * @author : 오지훈
  243. * @---------------------------------------------------
  244. */
  245. function fReqOpPatPamInfo(iRow){
  246. var ioflag = "T" // 수술일 경우 ioflag:T
  247. var pid = model.getValue(sOPPATLIST_PATH + "[" + iRow + "]/pid");
  248. var opcnfmdd = model.getValue(sOPPATLIST_PATH + "[" + iRow + "]/opcnfmdd");
  249. var cretno = model.getValue("/root/init/pamkeyinfo/pamkeyinfo/cretno");
  250. var instcd = model.getValue(sOPPATLIST_PATH + "[" + iRow + "]/instcd");
  251. var perfdeptcd = model.getValue(sOPPATLIST_PATH + "[" + iRow + "]/perfdeptcd");
  252. var perfdrid = model.getValue(sOPPATLIST_PATH + "[" + iRow + "]/perfdrid");
  253. var patflag = model.getValue(sOPPATLIST_PATH + "[" + iRow + "]/ioflag");
  254. var procflag = "F"; // 최초조회:F , 재조회:R
  255. var cnstopflag = model.getValue(sOPPATLIST_PATH + "[" + iRow + "]/cnstopflag");
  256. var oprsrvno = model.getValue(sOPPATLIST_PATH + "[" + iRow + "]/oprsrvno");
  257. var mainoprsrvno = model.getValue(sOPPATLIST_PATH + "[" + iRow + "]/mainoprsrvno");
  258. /* // 협진수술일때 부수술일 경우 주수술의 기록지가 뜨는 로직 삽입 : 2008. 08.27 (박유미 요청)
  259. if (cnstopflag == "Y") {
  260. if (mainoprsrvno != "-") {
  261. oprsrvno = mainoprsrvno;
  262. }
  263. }
  264. */
  265. var ophistno = model.getValue(sOPPATLIST_PATH + "[" + iRow + "]/ophistno");
  266. var srchdd = model.getValue("/root/main/cond/opcnfmdd"); //조회일자
  267. var param = ioflag + "▦" +
  268. pid + "▦" +
  269. opcnfmdd + "▦" +
  270. cretno + "▦" +
  271. instcd + "▦" +
  272. perfdeptcd + "▦" +
  273. perfdrid + "▦" +
  274. patflag + "▦" +
  275. procflag + "▦" +
  276. oprsrvno + "▦" +
  277. ophistno + "▦" +
  278. srchdd;
  279. setParameter("condparam", param);
  280. model.setValue("/root/init", param);
  281. modal("SPMMO08900", 1, 0, 0, "", "", "", "left:0; right:0; width:0; height:0; sysmenu:hidden; caption:hidden; min:hidden, max:hidden;");
  282. var useyn = getParameter("SPMMO08900_rtn_useyn");
  283. if(useyn == "Y"){
  284. setParameter("SPMMO08900_rtn_useyn", "");
  285. return true;
  286. }else{
  287. return false;
  288. }
  289. }
  290. /**
  291. * @desc : 수술환자리스트 조회
  292. * @
  293. * @param :
  294. * @return :
  295. * @author : 오지훈
  296. * @---------------------------------------------------
  297. */
  298. function fReqOPPatList(){
  299. //마취통증의학과와 조회진료과가 동일한 경우는 전체 조회 처리
  300. //서버로직으로의 처리는 속도영향이 있음으로 web에서 처리
  301. //2008. 07. 29. 오지훈
  302. model.copyNode("/root/send/reqdata", "/root/main/cond");
  303. var anstpaindeptcd = model.getValue("/root/init/hardcdno/hardcd/hardcd");
  304. if(anstpaindeptcd == model.getValue("/root/main/cond/perfdeptcd")){
  305. model.setValue("/root/send/reqdata/perfdeptcd", "-"); //집도과 전체설정
  306. model.setValue("/root/send/reqdata/perfdrid" , "-"); //집도의 전체설정
  307. }
  308. var compsrefcnts = model.getValue("/root/init/userscrnenvinfo/gridseq/compsrefcnts");
  309. var compssizecnts = model.getValue("/root/init/userscrnenvinfo/gridseq/compssizecnts");
  310. if(isNull(compsrefcnts)) compsrefcnts = "";
  311. if(isNull(compssizecnts)) compssizecnts = "";
  312. model.makeValue("/root/send/reqdata/compsrefcnts", compsrefcnts);
  313. model.makeValue("/root/send/reqdata/compssizecnts", compssizecnts);
  314. if(submit("TRMMO04501")){
  315. var totrow = grd_oppatlist.rows;
  316. model.setValue("/root/main/totcnt/totcnt", totrow-1);
  317. model.copyNode(opener.root.temp.oppatlist, root.init);
  318. model.copyNode(opener.root.cond.oppatlist, root.main.cond);
  319. }
  320. var orderby = model.getValue("/root/main/cond/orderby");
  321. var sortcol = model.getValue("/root/main/cond/sortcol");
  322. if(sortcol != "" && orderby != ""){
  323. sORDERBY = orderby;
  324. //nodeListSort(grd_oppatlist.nodeset, grd_oppatlist.colAttribute(sortcol, "ref"), sORDERBY);
  325. grd_oppatlist.colsort(sortcol) = sORDERBY
  326. grd_oppatlist.sort(1, 1, grd_oppatlist.rows -1, grd_oppatlist.cols -1) = "usersort";
  327. grd_oppatlist.gridToInstance();
  328. grd_oppatlist.refresh();
  329. }
  330. }
  331. /**
  332. * @desc : 그리드 data 엑셀화일로 저장
  333. * @
  334. * @param :
  335. * @return :
  336. * @author : 오지훈
  337. * @---------------------------------------------------
  338. */
  339. function fSaveGridToExcel(){
  340. saveGridToExcel(grd_oppatlist);
  341. }
  342. /**
  343. * @desc : (입원)관심환자등록창 호출
  344. * @
  345. * @param :
  346. * @return :
  347. * @author : 오지훈
  348. * @---------------------------------------------------
  349. */
  350. function fCallWndConcPatRgst(){
  351. var currow = grd_oppatlist.row;
  352. var pid = model.getValue(sOPPATLIST_PATH + "[" + currow + "]/pid");
  353. var hngnm = model.getValue(sOPPATLIST_PATH + "[" + currow + "]/hngnm");
  354. var indd = model.getValue(sOPPATLIST_PATH + "[" + currow + "]/opcnfmdd");
  355. var cretno = ""
  356. var seqno = ""
  357. var instcd = model.getValue(sOPPATLIST_PATH + "[" + currow + "]/instcd");
  358. var param = "I" + "▩" + pid + "▩" + hngnm + "▩" + indd + "▩" + cretno + "▩" + seqno + "▩" + instcd;
  359. setParameter("param", param);
  360. //modal("SPMMO08200");
  361. open("SPMMO08200");
  362. }
  363. /**
  364. * @desc : (수술)주의요망환자창 호출
  365. * @
  366. * @param :
  367. * @return :
  368. * @author : 엄영만
  369. * @---------------------------------------------------
  370. */
  371. function fCallWndWarnPat(){
  372. var nCurRow = grd_oppatlist.row;
  373. var sPid = model.getValue(sOPPATLIST_PATH + "[" + nCurRow + "]/pid");
  374. var sHngnm = model.getValue(sOPPATLIST_PATH + "[" + nCurRow + "]/hngnm");
  375. setParameter("SMMMO19100_warncd" , sPid);
  376. setParameter("SMMMO19100_warnnm" , sHngnm);
  377. modal("SMMMO19100");
  378. clearParameter("SMMMO19100_warncd");
  379. clearParameter("SMMMO19100_warnnm");
  380. }
  381. /**
  382. * @desc : 수술부위확인 점검표 창 호출
  383. * @
  384. * @param : oprsrvno
  385. * @return :
  386. * @author : 손성훈
  387. * @---------------------------------------------------
  388. */
  389. function fOpchk(){
  390. /* 수술부위 확인점검표 칠곡 적용.2012.05.24_손성훈
  391. var dutplceinstcd = getUserInfo("dutplceinstcd");
  392. if (dutplceinstcd == "032"){
  393. //messagebox("준비중 입니다","I");
  394. return;
  395. }
  396. */
  397. var currow = grd_oppatlist.row;
  398. var oprsrvno = model.getValue(sOPPATLIST_PATH + "[" + currow + "]/oprsrvno");
  399. setParameter("SMMNP00208_PARM_OPRSRVNO", oprsrvno);
  400. //setParameter("SMMNP00208_PARM_PID", model.getValue("/root/init/HideData/pid"));
  401. modal("SMMNP00208");
  402. }
  403. /**
  404. * @desc : 수술환자 CP적용여부 확인
  405. * @
  406. * @param :
  407. * @return :
  408. * @author : 오지훈
  409. * @---------------------------------------------------
  410. */
  411. function fChkCPPatValid(currow){
  412. var pid = model.getValue("/root/init/pamkeyinfo/pamkeyinfo/pid");
  413. var orddd = model.getValue("/root/init/pamkeyinfo/pamkeyinfo/orddd");
  414. var cretno= model.getValue("/root/init/pamkeyinfo/pamkeyinfo/cretno");
  415. var ioflag= model.getValue("/root/init/pamkeyinfo/pamkeyinfo/ioflag");
  416. var hngnm = model.getValue("/root/init/pamkeyinfo/pamkeyinfo/hngnm");
  417. model.removeNodeset("/root/send/reqdata");
  418. model.makeValue("/root/send/reqdata/pid" , pid);
  419. model.makeValue("/root/send/reqdata/orddd" , orddd);
  420. model.makeValue("/root/send/reqdata/cretno" , cretno);
  421. model.makeValue("/root/send/reqdata/hngnm" , hngnm); //추가(2008.08.25)
  422. model.makeValue("/root/send/reqdata/prcpgenrflag", ioflag);
  423. model.makeValue("/root/send/reqdata/srchtabflag" , "D"); //대상자리스트탭(I/D):조회결과orddd,cretno는 외래이력의 수전정보임
  424. if(submit("TRMMO04303")==true){ //수술환자의 CP적용 여부 확인
  425. var cppatnode = model.instance1.selectNodes("/root/init/rsltgetdata/getdata");
  426. if(cppatnode.length < 1){ //cp적용환자 tbl에 유효한 데이터가 없는 경우
  427. model.setValue(opener.root.cpflag, "N"); //처방open
  428. return true;
  429. }else{ //CP적용환자 tbl에 유효한 데이터가 있는 경우
  430. var appstat = model.getValue("/root/init/rsltgetdata/getdata/appstat");
  431. var cpgnm = model.getValue("/root/init/rsltgetdata/getdata/cpgnm");
  432. var cpgappno = model.getValue("/root/init/rsltgetdata/getdata/cpgappno");
  433. var msgcnts = model.getValue("/root/init/rsltgetdata/getdata/msgcnts");
  434. var msgflag = model.getValue("/root/init/rsltgetdata/getdata/msgflag");
  435. var prtlflagcd = model.getValue("/root/init/rsltgetdata/getdata/prtlflagcd"); //01:CP,02:CPG
  436. if(appstat == 52){
  437. //case52: 입원장 CP
  438. var rtnval = messageBox(msgcnts, msgflag);
  439. if(rtnval == 6){
  440. model.setValue(opener.root.cpflag, "X"); // CP Main open
  441. return true;
  442. }else{
  443. model.setValue(opener.root.cpflag, "N");
  444. if(fUpdtCPPatAppStatVal(41) != false && instance1.selectSingleNode(sOPPATLIST_PATH + "[" + currow + "]/cpyn") != null){ //41 : CP 취소
  445. model.setValue(sOPPATLIST_PATH + "[" + currow + "]/cpyn", "N");
  446. return;
  447. }else{
  448. return false;
  449. }
  450. }
  451. }else{
  452. if( prtlflagcd == "02" && isNull(appstat) && msgflag == "P" ){ //모니터링구분:대상자탐색 Case. CPG & 호출flag:Popup(appyn:평가용여부)
  453. //CPG적용대상자 알림 팝업 호출 (2009.05.04)
  454. setParameter("SMMMO041_hngnm" , hngnm);
  455. setParameter("SMMMO041_pid" , pid);
  456. setParameter("SMMMO041_cretno" , cretno);
  457. setParameter("SMMMO041_orddd" , orddd);
  458. setParameter("SMMMO041_ordtype" , ioflag);
  459. setParameter("SMMMO041_orddeptcd" , perfdeptcd);
  460. setParameter("SMMMO041_slipnm" , model.getValue(root.init.rsltgetdata.getdata.msgcnts)); //cpgno▦cpghistseq▦cpgnm▦slipno▦slipnm▦valusgeyn▦valunm▦guidedocucnts
  461. setParameter("SMMMO041_cpgmntrflag", appstat); //null, SPMMP03200화면에서 cpgmntrflag(M or S)으로 따짐
  462. setParameter("SMMMO041_cpgappno" , cpgappno); //적용중인 CP가 존재하면 값이 있음
  463. setParameter("SMMMO041_cpgnm" , cpgnm); //적용중인 CP가 존재하면 값이 있음
  464. modal("SPMMP03200"); //CP대상자 알람 팝업
  465. if( cpgappno > 0 && cpgappno != getParameter("SPMMP032_cpgappno") && instance1.selectSingleNode(sOPPATLIST_PATH + "[" + currow + "]/cpyn") != null){ //진행중인 CP가 있는데 팝업에서 Drop한 경우 CP여부 N으로..
  466. model.setValue(sOPPATLIST_PATH + "[" + currow + "]/cpyn", "N");
  467. }
  468. if( !isNull(getParameter("SPMMP032_cpgappno")) && getParameter("SPMMP032_cpgappno") > 0 ){
  469. model.setValue(opener.root.cpflag, "Y"); //CPG적용한 경우, MGPS 호출
  470. }else{
  471. model.setValue(opener.root.cpflag, "N"); //미적용 시 처방 화면 호출
  472. }
  473. clearParameter("SPMMP032_cpgappno");
  474. clearParameter("SMMMO041_hngnm");
  475. clearParameter("SMMMO041_pid");
  476. clearParameter("SMMMO041_cretno");
  477. clearParameter("SMMMO041_orddd");
  478. clearParameter("SMMMO041_ordtype");
  479. clearParameter("SMMMO041_orddeptcd");
  480. clearParameter("SMMMO041_slipnm");
  481. clearParameter("SMMMO041_cpgmntrflag");
  482. clearParameter("SMMMO041_cpgappno");
  483. clearParameter("SMMMO041_cpgnm");
  484. return true;
  485. }else{
  486. //case 12 : D0 ~ D1 CP
  487. //그외 case : (10 : 진행중...)
  488. if( !isNull(msgcnts) && !isNull(msgflag) ){
  489. //12: D0 처방일과 == 입원일 -> Drop 유도
  490. //그외: 오늘날짜 > CP퇴원예정일 -> Drop 유도
  491. messageBox(msgcnts, msgflag);
  492. setParameter("SMMMO043_cpgappno", cpgappno); //drop 팝업에서 인식할 수 있는 param
  493. setParameter("SMMMO043_drop" , "N"); //drop 팝업에서 인식할 수 있는 param
  494. modal("SPMMP02300"); //Drop 팝업 호출
  495. model.setValue(opener.root.cpflag, "N");
  496. if( getParameter("SMMMO043_drop") == "Y" ){
  497. model.setValue(sINPATLIST_PATH + "[" + currow + "]/cpyn", "N");
  498. }else{
  499. return false;
  500. }
  501. clearParameter("SMMMO043_cpgappno");
  502. clearParameter("SMMMO043_drop");
  503. return true;
  504. }
  505. model.setValue(opener.root.cpflag, "Y");
  506. return true;
  507. }
  508. }
  509. }
  510. }
  511. }
  512. /**
  513. * @desc : CP환자 적용상태값 변경
  514. * @
  515. * @param :
  516. * @return :
  517. * @author : 오지훈
  518. * @---------------------------------------------------
  519. */
  520. function fUpdtCPPatAppStatVal(appstat){
  521. var cpgappno = model.getValue("/root/init/rsltgetdata/getdata/cpgappno");
  522. model.removeNodeset("/root/send/savedata");
  523. model.makeValue("/root/send/savedata/cpgappno", cpgappno);
  524. model.makeValue("/root/send/savedata/appstat" , appstat);
  525. if(submit("TXMMO04301")==false){
  526. return false;
  527. }
  528. }
  529. function fPrtPatList() {
  530. var rptid = "RPMMO04105";
  531. var desNode = "/root/main/oppatinfo/oppatlist";
  532. model.makeValue("/root/main/cond/orddeptnm", cmb_orddept.label);
  533. model.makeValue("/root/main/cond/orddrnm", cmb_orddrid.label);
  534. model.makeValue("/root/main/cond/oproom", cmb_oproomcd.label);
  535. exeReportPreview(rptid, "XMLSTR", desNode);
  536. }
  537. /**
  538. * @desc : 안전사고 보고
  539. * @param :
  540. * @return :
  541. * @author : 엄영만
  542. * @---------------------------------------------------
  543. */
  544. function fPatQi(){
  545. var currow = grd_oppatlist.row;
  546. var pid = model.getValue(sOPPATLIST_PATH + "[" + currow + "]/pid");
  547. var orddd = "";
  548. var cretno = "";
  549. var ordtype = "";
  550. var oprsrvno = model.getValue(sOPPATLIST_PATH + "[" + currow + "]/oprsrvno");
  551. setParameter("SMMQR00100_PARAM2", pid + "▦" + orddd + "▦" + cretno + "▦" + ordtype+"▦" + oprsrvno);
  552. modal("../../../emr/qiweb/xrw/SMMQR00100", "","", "", "SMMQR00100", "", "");
  553. }
  554. /****************************************************************************************
  555. * Function : lf_OpAssemRec
  556. * Description : 마취전평가및협진서 기록 작성
  557. * Argument : 01.Flag : 기록지 구분
  558. * retrun type :
  559. * Creator :
  560. ****************************************************************************************/
  561. function lf_OpAssemRec(Flag){
  562. var nRow = grd_oppatlist.row;
  563. var nOprsrvno = model.getValue(sOPPATLIST_PATH + "[" + nRow + "]/oprsrvno");
  564. // Step0. 작성 제한
  565. var painlessflag = model.getValue(sOPPATLIST_PATH + "[" + nRow + "]/painlessflag");
  566. var opstatcd = model.getValue(sOPPATLIST_PATH + "[" + nRow + "]/opstatcd");
  567. if(painlessflag == "N") {
  568. if(opstatcd == "00" || opstatcd == "10"){
  569. messageBox("선택된 환자는 수술확정이 되지", "E007");
  570. return;
  571. }
  572. }
  573. // 환자수술정보
  574. var sPid = model.getValue(sOPPATLIST_PATH + "[" + nRow + "]/pid"); // 환자번호
  575. var sPnm = model.getValue(sOPPATLIST_PATH + "[" + nRow + "]/hngnm"); // 환자명
  576. var sSex = model.getValue(sOPPATLIST_PATH + "[" + nRow + "]/sa").split("/")[0]; // 성별
  577. var sAge = model.getValue(sOPPATLIST_PATH + "[" + nRow + "]/sa").split("/")[1]; // 나이
  578. var sInstcd = model.getValue(sOPPATLIST_PATH + "[" + nRow + "]/instcd"); // 기관코드
  579. var sIOFlag = model.getValue(sOPPATLIST_PATH + "[" + nRow + "]/ioflag"); // 입원/외래 구분
  580. var sRoomCD = model.getValue(sOPPATLIST_PATH + "[" + nRow + "]/roomcd");
  581. var sOrdDeptCd = model.getValue(sOPPATLIST_PATH + "[" + nRow + "]/orddeptcd"); // 진료과코드
  582. var sOrdDeptNm = model.getValue("/root/init/orddept/dept[deptcd = '" + sOrdDeptCd + "']/depthngnm"); // 진료과
  583. var opcnfmdd = model.getValue(sOPPATLIST_PATH + "[" + nRow + "]/opcnfmdd");
  584. var sPerfDeptCd = model.getValue(sOPPATLIST_PATH + "[" + nRow + "]/perfdeptcd"); // 집도과코드
  585. var sPerfDrId = model.getValue(sOPPATLIST_PATH + "[" + nRow + "]/perfdrid"); // 집도의ID
  586. model.removeNodeset("/root/send/reqdata");
  587. model.makeValue("/root/send/reqdata/ioflag" , "T"); //수술환자 ioflag는 T로 설정, 실제로 T는 없으나, 로직처리를 위해 임시로, 실제 ioflag는 patflag
  588. model.makeValue("/root/send/reqdata/pid" , sPid);
  589. model.makeValue("/root/send/reqdata/orddd" , opcnfmdd);
  590. model.makeValue("/root/send/reqdata/orddeptcd", sPerfDeptCd);
  591. model.makeValue("/root/send/reqdata/orddrid" , sPerfDrId);
  592. model.makeValue("/root/send/reqdata/patflag" , sIOFlag); //실제 ioflag는 patflag로 설정
  593. model.makeValue("/root/send/reqdata/instcd" , sInstcd); //기관코드
  594. model.makeValue("/root/send/reqdata/srchdd" , model.getValue("/root/main/cond/opcnfmdd")); //기준일자
  595. if(submit("TRMMO04503")==true){ //수술환자의 원무키 조회
  596. var cnt=getNodesetCount("/root/init/pamkeyinfo/pamkeyinfo");
  597. if(cnt > 1){
  598. messageBox("환자의 원무 접수정보가 2건이상 존재 합니다.\n\n처방및 기록을 저장하실 원무 접수 정보를 선택", "I007");
  599. modal("SPMMO18300", "", "", "", "SPMMO18300", "/root/init/pamkeyinfo", "/root/main/patinfo");
  600. var cretno = getParameter("SPMMO18300_cretno");
  601. if(cretno == "0") {
  602. messageBox("환자의 원무 접수정보가 선택 되지", "E007");
  603. return;
  604. } else {
  605. model.setValue("/root/init/pamkeyinfo/pamkeyinfo/cretno", cretno);
  606. }
  607. }
  608. } else {
  609. messageBox("선택된 환자는 원무 접수 정보가", "E014");
  610. return;
  611. }
  612. if( Flag == "STEP1" ){
  613. // Step1. 수술전평가서 정보가져오기
  614. lf_TRMMR03714();
  615. // Step2. 수술전평가서 formcd 조회
  616. mmbfGetHardCodeInfo("/root/send/reqdata/hardCodeInfo", "/root/init/hardcd", 9910);
  617. submit("TRMMO05503");
  618. }else if( Flag == "STEP2" || Flag == "STEP3" || Flag == "STEP4" ){
  619. // Step1. 회복기록지 정보가져오기
  620. lf_OpAssemRecExist(Flag);
  621. }
  622. var formrecseq = model.getValue("/root/main/opanstform/formseqno"); // 기록키
  623. var espiseq = model.getValue("/root/main/opanstform/espiseq"); //인증키
  624. var disparam = sPid +"▦" + sPnm +"▦" + sSex+ "/" + sAge+ "▦" + sOrdDeptNm +"▦" + sRoomCD + "▦";
  625. setParameter("disppatinfo", disparam); //등록번호▦환자명▦성별/나이▦진료과▦병실▦
  626. setParameter("oprsrvno", nOprsrvno);
  627. setParameter("opcnfmdd", opcnfmdd);
  628. setParameter("topyn", "N");
  629. setParameter("formrecseq", formrecseq);
  630. setParameter("callback", Flag);
  631. if (formrecseq == "" || formrecseq == "0")
  632. {
  633. setParameter("pid", sPid);
  634. // 2009.05.20. 입원인 경우는 입원일/진료과를.. 이외는 진료일/집도과를..
  635. if (sIOFlag == "I" || sIOFlag == "D" || sIOFlag == "E") {
  636. setParameter("orddd", model.getValue("/root/init/pamkeyinfo/pamkeyinfo/orddd"));
  637. setParameter("orddeptcd", sOrdDeptCd); //진료과
  638. } else {
  639. setParameter("orddd", model.getValue("/root/init/pamkeyinfo/pamkeyinfo/orddd"));
  640. setParameter("orddeptcd", sPerfDeptCd); //집도과
  641. }
  642. setParameter("cretno", model.getValue("/root/init/pamkeyinfo/pamkeyinfo/cretno"));
  643. setParameter("ioflag", sIOFlag);
  644. setParameter("orddrid", sPerfDrId); //집도의
  645. setParameter("openmode", "newform");
  646. setParameter("formcd", model.getValue("/root/init/formcd/hardcd/hardcd"));
  647. } else {
  648. setParameter("openmode", "recform");
  649. }
  650. setParameter("SSMMR01100_getTopYn", "N");
  651. if( Flag == "STEP4" ){
  652. // Step1. 수술전평가서 정보가져오기
  653. lf_TRMMR03714();
  654. // Step2. 수술전평가서 formcd 조회
  655. mmbfGetHardCodeInfo("/root/send/reqdata/hardCodeInfo", "/root/init/hardcd", 9910);
  656. submit("TRMMO05503");
  657. var oldflag = "E";
  658. var espiseq = model.getValue("/root/main/opanstform/espiseq");
  659. var formcd = model.getValue("/root/init/formcd/hardcd/hardcd"); //마취전 평가서
  660. clearParameter("SMMMO04500_espiseq");
  661. clearParameter("SMMMO04500_formcd");
  662. if(!isNull(espiseq)){
  663. setParameter("SMMMO04500_espiseq", espiseq);
  664. setParameter("SMMMO04500_formcd", formcd);
  665. }
  666. }
  667. modal("SSMMR06900", 1, 0, 0 ,"SSMMR06900", "", "","caption:hidden;");
  668. var param = getParameter("SSMMR01100_formrecseq");
  669. if (param == "") {
  670. return false;
  671. }
  672. return true;
  673. }
  674. /****************************************************************************************
  675. * Function : lf_TRMMR03714
  676. * Description : 마취전평가및협진서 정보가져오기
  677. * Argument :
  678. * retrun type :
  679. * Creator :
  680. ****************************************************************************************/
  681. function lf_TRMMR03714(){
  682. var nRow = grd_oppatlist.row;
  683. var nOprsrvno = model.getValue(sOPPATLIST_PATH + "[" + nRow + "]/oprsrvno");
  684. model.makeValue("/root/send/opanstform/oprsrvno" , nOprsrvno);
  685. if(submit("TRMMR03714", false)){
  686. if( model.getValue("/root/main/opanstform/formseqno") == "" || model.getValue("/root/main/opanstform/formseqno") == "0" )
  687. return false;
  688. }else{
  689. return false;
  690. }
  691. return true;
  692. }
  693. /****************************************************************************************
  694. * Function : fPreOpAssemRecClose
  695. * Description : 마취전평가및협진서 작성 완료 후 처리
  696. * Argument :
  697. * retrun type :
  698. * Creator :
  699. ****************************************************************************************/
  700. function fPreOpAssemRecClose(){
  701. var param = getParameter("SSMMR01100_formrecseq");
  702. if (param != "") {
  703. //fSelectOpPat();
  704. }
  705. }
  706. function lf_OpAssemRec_Step1(){
  707. lf_OpAssemRec("STEP1");
  708. }
  709. function lf_OpAssemRec_Step2(){
  710. lf_OpAssemRec("STEP2");
  711. }
  712. function lf_OpAssemRec_Step3(){
  713. lf_OpAssemRec("STEP3");
  714. }
  715. function lf_OpAssemRec_Step4(){
  716. if( getUserInfo("dutplceinstcd") == "032" ){
  717. lf_OpAssemRec("STEP4");
  718. }
  719. }
  720. function lf_OpAssemRecExist(Flag){
  721. var nRow = grd_oppatlist.row;
  722. var nOprsrvno = model.getValue(sOPPATLIST_PATH + "[" + nRow + "]/oprsrvno");
  723. var nFormcd = model.getValue("/root/init/pmenu/hardcd[hardcd = '"+ Flag +"']/hardcdnm");
  724. if( isNull(nFormcd) ){
  725. messageBox("선택한 기록의 서식코드가", "E014");
  726. return false;
  727. }
  728. model.makeValue("/root/init/formcd/hardcd/hardcd", nFormcd);
  729. model.removeNodeset("/root/send/opanstform");
  730. model.makeValue("/root/send/opanstform/oprsrvno" , nOprsrvno);
  731. model.makeValue("/root/send/opanstform/formcd" , model.getValue("/root/init/formcd/hardcd/hardcd"));
  732. model.makeValue("/root/send/opanstform/instcd" , model.getValue(sOPPATLIST_PATH + "[" + nRow + "]/instcd"));
  733. model.makeValue("/root/send/opanstform/pid" , model.getValue(sOPPATLIST_PATH + "[" + nRow + "]/pid"));
  734. model.makeValue("/root/send/opanstform/orddd" , model.getValue("/root/init/pamkeyinfo/pamkeyinfo/orddd"));
  735. model.makeValue("/root/send/opanstform/cretno" , model.getValue("/root/init/pamkeyinfo/pamkeyinfo/cretno"));
  736. if(submit("TRMMR03723", false)){
  737. if( model.getValue("/root/main/opanstform/formseqno") == "" || model.getValue("/root/main/opanstform/formseqno") == "0" )
  738. return false;
  739. }else{
  740. return false;
  741. }
  742. return true;
  743. }
  744. /**
  745. * @desc : 환자라벨출력
  746. * @param :
  747. * @return :
  748. * @author : 엄영만
  749. * @---------------------------------------------------
  750. */
  751. function fPrintPatLabel(){
  752. var currow = grd_oppatlist.row;
  753. var pid = model.getValue(sOPPATLIST_PATH + "[" + currow + "]/pid");
  754. var patnm = model.getValue(sOPPATLIST_PATH + "[" + currow + "]/hngnm");
  755. var sexage = model.getValue(sOPPATLIST_PATH + "[" + currow + "]/sa");
  756. setParameter("SMMMB00100_scrnid", "SMMMO04100");
  757. setParameter("SMMMB00100_pid", pid);
  758. setParameter("SMMMB00100_patnm", patnm);
  759. setParameter("SMMMB00100_sexage", sexage);
  760. modal("SMMMB00100");
  761. }