SPMMO04200.js 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020
  1. //===================================================================
  2. // 공통으로 사용하는 함수
  3. //===================================================================
  4. /**
  5. * @desc : 환자 수술여부 및 수술처방 확인
  6. * @ 수정 : 미니진료대상자에 맞게끔 내용 수정
  7. * @
  8. * @param :
  9. * @return :
  10. * @author : 오지훈
  11. * @---------------------------------------------------
  12. */
  13. function fChkMiniPatOpPrcp(pid, stnddd){
  14. model.removeNodeset("/root/send/reqdata");
  15. model.makeValue("/root/send/reqdata/pid" , pid);
  16. model.makeValue("/root/send/reqdata/stnddd", stnddd);
  17. if(submit("TRMMO04109")){
  18. var opprcpflag = model.getValue("/root/main/opprcpinfo/opprcpinfo/opprcpflag");
  19. if(opprcpflag == "N"){
  20. return false;
  21. }
  22. }
  23. return true;
  24. }
  25. /**
  26. * @desc : 처방화면, CP화면에 modal로 뜬 화면이 있는지 여부를 검사한다.
  27. * @ 수정 : 미니진료대상자에 맞게끔 내용 수정
  28. * @
  29. * @param :
  30. * @return :
  31. * @author : 오지훈
  32. * @---------------------------------------------------
  33. */
  34. function fChkScrnModal(){
  35. var cpflag = model.getValue(root.cpflag); //cpflag여부
  36. if(cpflag == "N"){
  37. var wndobj = getOpenWindow("SMMMO00100");
  38. }else if(cpflag == "Y"){
  39. var wndobj = getOpenWindow("SMMMP00800");
  40. }
  41. if(wndobj != null){
  42. var status = wndobj.javascript.getScreenDisabled();
  43. if(status == true){
  44. return false;
  45. }
  46. }
  47. }
  48. /**
  49. * @desc : 처방Main 화면 Open, CP환자인 경우 CP Main 화면 Open 또는 CP검색화면 Open (CP업무 추가 2007.09.27)
  50. * @
  51. * @param :
  52. * @return :
  53. * @---------------------------------------------------
  54. */
  55. function fOpenPrcpMainWnd(){
  56. var cpflag = model.getValue("/root/cpflag");
  57. var mainObj = getMainViewer();
  58. var monitorNumber = app.monitorNumber;
  59. var monitorResolutions = app.monitorResolution;
  60. var monitorResolutionsArr = monitorResolutions.split('|');
  61. var resolution = monitorResolutionsArr[monitorNumber-1];
  62. var resolution_width = resolution.split(',')[0];
  63. var resolution_height = resolution.split(',')[1];
  64. //alert(monitorNumber);
  65. curEmrRecObj = getOpenWindow("SMMRI00400"); //활성화된 진료기록 화면 object loading
  66. curExamRsltObj = getOpenWindow("SMAER00800"); //활성화된 검사결과 화면 object loading
  67. if(curEmrRecObj != null){curEmrRecObj.javascript.fClose();} //진료기록 화면 close
  68. if(curExamRsltObj != null){curExamRsltObj.javascript.fClose();} //검사결과 화면 close
  69. curCpObj = mainObj.javascript.getOpenWindow("SMMMP00800"); //활성화된 CP Main 화면 object loading
  70. curPrcpObj = mainObj.javascript.getOpenWindow("SMMMO00100"); //활성화된 처방Main 화면 object loading
  71. curCpSrchObj = mainObj.javascript.getOpenWindow("SPMMP01200"); //활성화된 CP 검색 화면 object loading
  72. if(cpflag == "N"){ //처방 Main Open
  73. if(curCpObj != null){curCpObj.javascript.fCloseGPS();} //활성화된 CP Main화면이 있는 경우 close
  74. if(curCpSrchObj != null){curCpSrchObj.javascript.fCpSrchWndClose();} //활성화된 CP검색화면이 있는 경우 close
  75. if(curPrcpObj == null){ //활성화된 처방화면이 없는 경우, 신규화면을 오픈
  76. var xpt = (resolution_width - 1210)/2;
  77. var ypt = (resolution_height- 784)/2;
  78. mainObj.javascript.setParameter("SMMMO00100_ordrecflag", model.getValue("/root/main/cond/ordrecflag"));
  79. mainObj.javascript.open("SMMMO00100", monitorNumber, xpt, ypt, "SMMMO00100", "", "", "", false);
  80. fChngMainEMRScrn();
  81. }else{
  82. if(curPrcpObj.javascript.fPrcpSavePatList()){}
  83. curPrcpObj.model.setValue("/root/init/bfprcpload" , "N"); //전처방을 초기화한다.
  84. //curPrcpObj.javascript.fInitializeConDone();
  85. //curPrcpObj.javascript.fInitializeReady();
  86. curPrcpObj.javascript.fXReReady();
  87. curPrcpObj.model.setValue("/root/init/fstopenflag", "Y"); //처방최초 open여부를 재설정, 진료기록을 열기위해
  88. //curPrcpObj.javascript.fChngMainScrn();
  89. fChngMainEMRScrn();
  90. }
  91. }
  92. else if(cpflag =="Y"){ //CP Main Open
  93. if(curPrcpObj != null){curPrcpObj.javascript.fPrcpWndClose();} //활성화된 처방Main화면이 있는 경우 close
  94. if(curCpSrchObj != null){curCpSrchObj.javascript.fCpSrchWndClose();} //활성화된 CP검색화면이 있는 경우 close
  95. if(curCpObj == null){ //활성화된 CP화면이 없는 경우, 신규화면을 오픈
  96. var xpt = (resolution_width - 1236)/2;
  97. var ypt = (resolution_height- 985)/2;
  98. mainObj.javascript.setParameter("SMMMO00100_ordrecflag", model.getValue("/root/main/cond/ordrecflag"));
  99. mainObj.javascript.open("SMMMP00800", monitorNumber, xpt, ypt, "SMMMP00800", "", "", "sysmenu:hidden; min:visible; max:visible; icon:visible", false);
  100. //JJE- 삭제
  101. //fChngMainEMRScrn();
  102. }
  103. else{
  104. curCpObj.javascript.fReconstruct();
  105. }
  106. }else if(cpflag =="X"){ //CP 검색 Open
  107. if(curCpObj != null){curCpObj.javascript.fCloseGPS();} //활성화된 CP Main화면이 있는 경우 close
  108. if(curPrcpObj != null){curPrcpObj.javascript.fPrcpWndClose();} //활성화된 처방Main화면이 있는 경우 close
  109. if(curCpSrchObj == null){
  110. mainObj.javascript.open("SPMMP01200", monitorNumber, xpt, ypt, "SPMMP01200", "", "", "", false);
  111. }
  112. }
  113. }
  114. function fChngMainEMRScrn() {
  115. var mainobj = getMainViewer();
  116. var mainscrnid = mainobj.javascript.getScreenID(); //메인화면의 기록지 ID
  117. var cpflag = model.getValue("/root/cpflag");
  118. if (cpflag =="Y"){
  119. var curPrcpObj= getOpenWindow("SMMMP00800");
  120. } else {
  121. var curPrcpObj= getOpenWindow("SMMMO00100");
  122. }
  123. var fstopenflag = curPrcpObj.model.getValue("/root/init/fstopenflag"); //처방화면이 최초 생성 여부
  124. var bfprcpload = curPrcpObj.model.getValue("/root/init/bfprcpload"); //전처방화면 최초 생성 여부
  125. var cpflag = curPrcpObj.model.getValue("/root/cp"); //CP화면여부
  126. var ordrecflag = model.getValue("/root/main/cond/ordrecflag"); //OCS 체크여부
  127. var chngflag = model.getValue("/root/main/cond/chngflag"); //OCS 체크여부
  128. if(mainobj != null){
  129. var dutplcecd = getUserInfo("dutplcecd"); //사용자부서
  130. var operation = getGlobalVariable("operation"); //수술정보
  131. var wndid = "SMMMR00100"; //진료기록화면이 default
  132. if(fstopenflag !="N" || chngflag == "Y"){ //처방화면이 최초로 열린 경우, 진료대상자의 ocs체크값이 변경된 경우에는 메인화면 변경
  133. if(bfprcpload != "Y"){ //전처방화면이 로딩된 여부,(단순히 tab변경인 경우에는 메인화면 변경 로직을 처리하지 않음
  134. /*
  135. if(cpflag == "Y"){ //CP화면인 경우, CP초기화 후, 메인화면 변경 수행
  136. var cpendflag = curPrcpObj.javascript.fReconstruct();
  137. if(cpendflag == "True"){
  138. }
  139. }
  140. */
  141. //if(cpendflag == "True"){ //CPMain의 fReconstruct()가 완료된 이후 진료기록 변경로직을 수행
  142. if(dutplcecd == "2090000000" || dutplcecd == "2090300000"){ //사용자부서가 마취통증의학과, 통증클리닉인 경우
  143. if(operation.length > 0){ //수술환자리스트에서 환자 선택된 경우, 메인화면은 '마취환자기록' loading
  144. wndid = "SMMMR03700";
  145. }else{
  146. if(ordrecflag == "Y"){
  147. wndid = "SMMMR00100";
  148. }
  149. }
  150. }else{
  151. if(ordrecflag == "Y"){
  152. wndid = "SMMMR00100";
  153. }
  154. }
  155. curPrcpObj.model.setValue("/root/init/bfprcpload" , "Y");
  156. curPrcpObj.model.setValue("/root/init/fstopenflag", "N");
  157. if(mainscrnid == wndid){
  158. if(wndid == "SMMMR03700"){
  159. mainobj.javascript.fFormInit();
  160. }else{
  161. mainobj.javascript.fInitRecPamInfo();
  162. }
  163. }else{
  164. //if(cpflag != "Y"){
  165. mainobj.javascript.navigate(wndid);
  166. //}
  167. }
  168. //}
  169. }else{ //전처방화면이 최초 생성된 경우, bfprcpload를 Y로 변경, 추후 tab변경시 메인화면 변경이 되지 않게함
  170. curPrcpObj.model.setValue("/root/init/bfprcpload", "Y");
  171. }
  172. }
  173. }
  174. }
  175. //===================================================================
  176. // 입원에서 사용하는 함수들
  177. //===================================================================
  178. /**
  179. * @desc : 환자 선택 후, 환자 정보 조회 및 기록지 화면 연동
  180. * @ 수정 : 미니진료대상자에 맞게끔 내용 수정
  181. * @
  182. * @param :
  183. * @return :
  184. * @author : 김영학
  185. * @---------------------------------------------------
  186. */
  187. function fMiniInPat(){
  188. var ordrecflag = model.getValue(root.main.cond.ordrecflag);
  189. var currow = grd_inpatlist.row;
  190. if(currow < 1){
  191. return;
  192. }
  193. //처방, CP화면에 modal 또는 modaless가 뜬 경우, 환자 선택 불가
  194. if(fChkScrnModal()==false){
  195. return;
  196. }
  197. var pid = model.getValue("/root/main/inpatinfo/inpatlist[" + currow + "]/pid");
  198. var hngnm = model.getValue("/root/main/inpatinfo/inpatlist[" + currow + "]/hngnm");
  199. var reqptype = model.getValue("/root/main/inpatinfo/inpatlist[" + currow + "]/reqptype");
  200. var stnddd = model.getValue("/root/main/cond/fromdd");
  201. setParameter("SPMMO04200_openflag", "SPMMO04200");
  202. //환자수술 여부 및 수술처방 확인, 수술처방이 없는 경우 처방화면을 blocking
  203. if(fChkMiniPatOpPrcp(pid, stnddd)==false){
  204. var opcnfmdd = model.getValue("/root/main/opprcpinfo/opprcpinfo/opcnfmdd");
  205. opcnfmdd = opcnfmdd.substring(0, 4) + "-" + opcnfmdd.substring(4, 6) + "-" + opcnfmdd.substring(6, 8);
  206. messageBox("[" + hngnm + "]환자의 [" + opcnfmdd + "]일자 수술 처방을", "C001");
  207. }
  208. //CP환자 여부 확인
  209. if(fChkCPMiniPatValid(currow)==false){
  210. return;
  211. }
  212. //상단정보 설정 및 진료기록 처방화면 연동
  213. var mainObj = getMainViewer();
  214. /*
  215. if(fReqInPatPamInfo()==true){
  216. opener.javascript.setParameter("SMMMO04100_reqptype", reqptype);
  217. var cpflag = opener.model.getValue("/root/cpflag");
  218. var ordrecflag = opener.model.getValue("/root/main/cond/ordrecflag");
  219. var mainObj = getMainViewer();
  220. if(cpflag == "Y"){
  221. mainObj.window.javascript.openEmrScrn("SMMMP00800"); //CP처방 화면
  222. }else if(cpflag == "X"){
  223. mainObj.window.javascript.openEmrScrn("SPMMP01200"); //CP검색 화면
  224. }else{
  225. opener.javascript.setParameter("SMMMO04100_reqptype", reqptype);
  226. opener.javascript.fOpenPrcpMainWnd();
  227. }
  228. if(cpflag == "Y" || cpflag == "X"){
  229. if(ordrecflag == "Y"){
  230. mainObj.window.javascript.openEmrScrn("SMMMB08100"); //empty
  231. }else{
  232. mainObj.window.javascript.openEmrScrn("SMMMR00100"); //진료기록
  233. }
  234. }
  235. }
  236. */
  237. //상단정보 설정
  238. if(fReqMiniInPatPamInfo()==true){
  239. setParameter("SMMMO04100_reqptype", reqptype);
  240. fOpenPrcpMainWnd();
  241. }
  242. }
  243. /**
  244. * @desc : 입원환자 환자 기본정보설정
  245. * @ 수정 : 미니진료대상자에 맞게끔 내용 수정
  246. * @
  247. * @param :
  248. * @return :
  249. * @author : 오지훈
  250. * @---------------------------------------------------
  251. */
  252. function fReqMiniInPatPamInfo(){
  253. var iRow = grd_inpatlist.row;
  254. var pid = model.getValue("/root/main/inpatinfo/inpatlist[" + iRow + "]/pid");
  255. var indd = model.getValue("/root/main/inpatinfo/inpatlist[" + iRow + "]/indd");
  256. var cretno = model.getValue("/root/main/inpatinfo/inpatlist[" + iRow + "]/cretno");
  257. var instcd = model.getValue("/root/main/inpatinfo/inpatlist[" + iRow + "]/instcd");
  258. var srchdd = model.getValue("/root/main/cond/indd"); //조회일자
  259. var param;
  260. param = "I" + "▦" + pid + "▦" + indd + "▦" + cretno + "▦" + instcd + "▦" + srchdd;
  261. setParameter("condparam", param);
  262. modal("SPMMO08900", 1, "", "", "", "", "", "left:0; right:0; width:0; height:0; sysmenu:hidden; caption:hidden; min:hidden, max:hidden;");
  263. var useyn = getParameter("SPMMO08900_rtn_useyn");
  264. if(useyn == "Y"){
  265. setParameter("SPMMO08900_rtn_useyn", "");
  266. return true;
  267. }else{
  268. return false;
  269. }
  270. }
  271. /**
  272. * @desc : CP환자 여부 검사
  273. * @
  274. * @param :
  275. * @return :
  276. * @author : 오지훈
  277. * @---------------------------------------------------
  278. */
  279. function fChkCPMiniPatValid(currow){
  280. var pid = model.getValue("/root/main/inpatinfo/inpatlist[" + currow + "]/pid");
  281. var orddd = model.getValue("/root/main/inpatinfo/inpatlist[" + currow + "]/indd");
  282. var cretno = model.getValue("/root/main/inpatinfo/inpatlist[" + currow + "]/cretno");
  283. var cpyn = model.getValue("/root/main/inpatinfo/inpatlist[" + currow + "]/cpyn");
  284. var hngnm = model.getValue("/root/main/inpatinfo/inpatlist[" + currow + "]/hngnm");
  285. //입원환자이나 외래CP가 진행중인 경우, 경고 메시지를 띄운다. (박유미요청)
  286. //2008. 07. 25 오지훈
  287. model.removeNodeset("/root/send/reqdata");
  288. model.makeValue("/root/send/reqdata/pid" , pid);
  289. model.makeValue("/root/send/reqdata/orddd", orddd);
  290. if(submit("TRMMO04303")==true){
  291. var outcppatnode = model.instance1.selectNodes("/root/init/getdata/getdata");
  292. if(outcppatnode.length > 0){
  293. messageBox("외래 cp적용중인 환자입니다. 외래 CP Drop을", "C003");
  294. model.setValue(opener.root.cpflag, "N");
  295. return false;
  296. }
  297. }
  298. model.removeNodeset("/root/send/reqdata");
  299. model.makeValue("/root/send/reqdata/pid" , pid);
  300. model.makeValue("/root/send/reqdata/orddd" , orddd);
  301. model.makeValue("/root/send/reqdata/cretno" , cretno);
  302. model.makeValue("/root/send/reqdata/prcpgenrflag", "I");
  303. if(submit("TRMMO04303")==true){
  304. var cppatnode = model.instance1.selectNodes("/root/init/rsltgetdata/getdata");
  305. if(cppatnode.length < 1){ //cp적용환자 tbl에 유효한 데이터가 없는 경우
  306. model.setValue(root.cpflag, "N");
  307. return true;
  308. }else{ //CP적용환자 tbl에 유효한 데이터가 있는 경우
  309. var appstat = model.getValue("/root/init/rsltgetdata/getdata/appstat");
  310. var cpgnm = model.getValue("/root/init/rsltgetdata/getdata/cpgnm");
  311. if(appstat == 12){ //CP적용상태가 12인 경우, 무조건 CP(M-GPS)창을 띄운다
  312. model.setValue(root.cpflag, "Y");
  313. return true;
  314. }else if(appstat == 52){
  315. var rtnval = messageBox("[" + hngnm + "]환자에게 CP를", "Q003");
  316. if(rtnval == 6){ //예, CP Main open, CP적용환자 tbl에 appstat 10 진행중
  317. model.setValue(root.cpflag, "X");
  318. return true;
  319. }else{
  320. model.setValue(root.cpflag, "N");
  321. return fUpdtCPPatAppStatVal(41); //41 : CP취소
  322. }
  323. }else{ //CP적용상태가 12가 아닌 경우, CP Main창 open
  324. model.setValue(root.cpflag, "Y");
  325. return true;
  326. }
  327. }
  328. }
  329. }
  330. //===================================================================
  331. // 외래에서 사용하는 함수들
  332. //===================================================================
  333. /**
  334. * @desc : 환자 선택 후, 환자 정보 조회 및 기록지 화면 연동
  335. * @
  336. * @param :
  337. * @return :
  338. * @author : 오지훈
  339. * @---------------------------------------------------
  340. */
  341. function fMiniOutPat(){
  342. var ordrecflag = model.getValue(root.main.cond.ordrecflag);
  343. var currow = grd_outpatlist.row;
  344. if(currow < 1){
  345. return;
  346. }
  347. //처방, CP화면에 modal 또는 modaless가 뜬 경우, 환자 선택 불가
  348. if(fChkScrnModal()==false){
  349. return;
  350. }
  351. var pid = model.getValue("/root/main/outpatinfo/outpatlist[" + currow + "]/pid");
  352. var stnddd = model.getValue("/root/main/outpatinfo/outpatlist[" + currow + "]/orddd");
  353. var hngnm = model.getValue("/root/main/outpatinfo/outpatlist[" + currow + "]/hngnm");
  354. var reqptype = model.getValue("/root/main/outpatinfo/outpatlist[" + currow + "]/reqptype");
  355. setParameter("SPMMO04200_openflag", "SPMMO04200");
  356. //환자수술 여부 및 수술처방 확인, 수술처방이 없는 경우 처방화면을 blocking
  357. if(fChkPatOpPrcp(pid, stnddd)==false){
  358. var opcnfmdd = model.getValue("/root/main/opprcpinfo/opprcpinfo/opcnfmdd");
  359. opcnfmdd = opcnfmdd.substring(0, 4) + "-" + opcnfmdd.substring(5, 6) + "-" + opcnfmdd.substring(7, 8);
  360. messageBox("[" + hngnm + "]환자의 [" + opcnfmdd + "]일자 수술 처방을", "C001");
  361. }
  362. //CP환자 여부 확인, update시 에러나면 변경 불가
  363. if(fChkCPMiniOutPatValid(currow)==false){
  364. return;
  365. }
  366. //상단정보 설정 및 진료기록, 처방화면 연동
  367. var mainObj = getMainViewer();
  368. /*
  369. if(fReqMiniOutPatPamInfo()==true){
  370. opener.javascript.setParameter("SMMMO04100_reqptype", reqptype);
  371. var cpflag = opener.model.getValue("/root/cpflag");
  372. var ordrecflag = opener.model.getValue("/root/main/cond/ordrecflag");
  373. var mainObj = getMainViewer();
  374. if(cpflag == "Y"){
  375. mainObj.window.javascript.openEmrScrn("SMMMP00800"); //CP화면 open
  376. }else if(cpflag == "X"){
  377. mainObj.window.javascript.openEmrScrn("SPMMP01200"); //CP검색화면 open
  378. }else{
  379. opener.javascript.setParameter("SMMMO04100_reqptype", reqptype);
  380. opener.javascript.fOpenPrcpMainWnd();
  381. }
  382. if(cpflag == "Y" || cpflag == "X"){
  383. if(ordrecflag == "Y"){
  384. mainObj.window.javascript.openEmrScrn("SMMMB08100"); //empty
  385. }else{
  386. mainObj.window.javascript.openEmrScrn("SMMMR00100"); //진료기록
  387. }
  388. }
  389. }
  390. */
  391. //상단정보 설정
  392. if(fReqMiniOutPatPamInfo()==true){
  393. setParameter("SMMMO04100_reqptype", reqptype);
  394. fOpenPrcpMainWnd();
  395. }
  396. }
  397. /**
  398. * @desc : CP환자 여부 검사
  399. * @
  400. * @param :
  401. * @return :
  402. * @author : 오지훈
  403. * @---------------------------------------------------
  404. */
  405. function fChkCPMiniOutPatValid(currow){
  406. var pid = model.getValue("/root/main/outpatinfo/outpatlist[" + currow + "]/pid");
  407. var orddd = model.getValue("/root/main/outpatinfo/outpatlist[" + currow + "]/orddd");
  408. var cretno = model.getValue("/root/main/outpatinfo/outpatlist[" + currow + "]/cretno");
  409. var cpyn = model.getValue("/root/main/outpatinfo/outpatlist[" + currow + "]/cpyn");
  410. var hngnm = model.getValue("/root/main/outpatinfo/outpatlist[" + currow + "]/hngnm");
  411. model.removeNodeset("/root/send/reqdata");
  412. model.makeValue("/root/send/reqdata/pid" , pid);
  413. model.makeValue("/root/send/reqdata/orddd" , orddd);
  414. model.makeValue("/root/send/reqdata/cretno" , cretno);
  415. model.makeValue("/root/send/reqdata/prcpgenrflag", "O");
  416. if(submit("TRMMO04303")==true){
  417. var cppatnode = model.instance1.selectNodes("/root/init/rsltgetdata/getdata");
  418. if(cppatnode.length < 1){ //cp적용환자 tbl에 유효한 데이터가 없는 경우
  419. model.setValue(root.cpflag, "N"); //처방open
  420. return true;
  421. }else{ //CP적용환자 tbl에 유효한 데이터가 있는 경우
  422. var appstat = model.getValue("/root/init/rsltgetdata/getdata/appstat");
  423. var cpgnm = model.getValue("/root/init/rsltgetdata/getdata/cpgnm");
  424. if(appstat == 11){ //CP적용상태가 11인 경우
  425. var rtnval = messageBox("[" + hngnm + "]환자의 [" + cpgnm + "] CP를", "Q003");
  426. if(rtnval == 6){ //예 선택, CP Main open, CP적용환자 tbl에 appstat 10 진행중
  427. model.setValue(root.cpflag, "N");
  428. return fUpdtCPPatAppStatVal(51);
  429. }else{ //아니오 선택, 처방 Main open, CP적용환자 tbl에 appstat 51 drop out
  430. model.setValue(root.cpflag, "Y");
  431. return fUpdtCPPatAppStatVal(10);
  432. }
  433. }else if(appstat == 53){
  434. model.setValue(root.cpflag, "X");
  435. return true;
  436. }else{ //CP적용상태가 11가 아닌 경우, CP Main창 open
  437. model.setValue(root.cpflag, "Y");
  438. return true;
  439. }
  440. }
  441. }
  442. }
  443. /**
  444. * @desc : 외래환자 환자 기본정보설정
  445. * @ 수정 : 미니진료대상자에 맞게끔 내용 수정
  446. * @
  447. * @param :
  448. * @return :
  449. * @author : 오지훈
  450. * @---------------------------------------------------
  451. */
  452. function fReqMiniOutPatPamInfo(){
  453. var iRow = grd_outpatlist.row;
  454. var pid = model.getValue("/root/main/outpatinfo/outpatlist[" + iRow + "]/pid");
  455. var orddd = model.getValue("/root/main/outpatinfo/outpatlist[" + iRow + "]/orddd");
  456. var cretno = model.getValue("/root/main/outpatinfo/outpatlist[" + iRow + "]/cretno");
  457. var instcd = model.getValue("/root/main/outpatinfo/outpatlist[" + iRow + "]/instcd");
  458. var param = "O" + "▦" + pid + "▦" + orddd + "▦" + cretno + "▦" + instcd;
  459. setParameter("condparam", param);
  460. modal("SPMMO08900", 1, 0, 0, "", "", "", "left:0; right:0; width:0; height:0; sysmenu:hidden; caption:hidden; min:hidden, max:hidden;");
  461. var useyn = getParameter("SPMMO08900_rtn_useyn");
  462. if(useyn == "Y"){
  463. setParameter("SPMMO08900_rtn_useyn", "");
  464. return true;
  465. }else{
  466. return false;
  467. }
  468. }
  469. /*===============================================================================
  470. @desc : 검색구분에 대한 항목 선택시 각 화면 선택
  471. ===============================================================================*/
  472. function fGrdInit() {
  473. var searflag = model.getValue("/root/main/cond/searflag");
  474. if (searflag =='O'){
  475. model.setValue("/root/main/cond/fromdd" , getCurrentDate());
  476. rdo_patflag.visible = true;
  477. rdo_patflagstat.visible = false;
  478. ipt_todd.visible = false;
  479. cmb_concslip.visible = false;
  480. caption4.visible = true;
  481. chk_myPat.visible = false;
  482. caption5.visible = false;
  483. rdo_opstatcd.visible = false;
  484. caption1.text = "조회기간 :";
  485. rdo_clsflag.visible = true;
  486. caption2.text= "분류구분 :";
  487. cmb_orddept.visible = false;
  488. bool1.visible = false;
  489. caption6.visible = false;
  490. model.toggle("case1");
  491. } else if (searflag =='I') {
  492. model.setValue("/root/main/cond/fromdd" , getCurrentDate());
  493. rdo_patflag.visible = false;
  494. rdo_patflagstat.visible = true;
  495. ipt_todd.visible = false;
  496. cmb_concslip.visible = false;
  497. caption4.visible = true;
  498. chk_myPat.visible = true;
  499. caption5.visible = true;
  500. chk_myPat.value = 'Y'
  501. rdo_opstatcd.visible = false;
  502. caption1.text = "조회기간 :";
  503. rdo_clsflag.visible = true;
  504. caption2.text= "분류구분 :";
  505. cmb_orddept.visible = false;
  506. bool1.visible = false;
  507. caption6.visible = false;
  508. model.toggle("case2");
  509. } else if (searflag =='P'){
  510. fInitialize();
  511. var cur_day = getCurrentDate();
  512. var idate = new Date();
  513. var peveDate = idate.getAddDate(-2, "D");
  514. model.setValue("/root/main/cond/fromdd", peveDate.getDateFormat());
  515. model.setValue("/root/main/cond/todd" , cur_day );
  516. rdo_patflag.visible = false;
  517. rdo_patflagstat.visible = false;
  518. ipt_todd.visible = true;
  519. cmb_concslip.visible = true;
  520. caption4.visible = false;
  521. chk_myPat.visible = false;
  522. caption5.visible = false;
  523. rdo_opstatcd.visible = false;
  524. caption1.text = "조회기간 :";
  525. rdo_clsflag.visible = true;
  526. caption2.text= "분류구분 :";
  527. cmb_orddept.visible = false;
  528. bool1.visible = false;
  529. caption6.visible = false;
  530. model.toggle("case3");
  531. } else if (searflag =='A'){
  532. fInitialize();
  533. var cur_day = getCurrentDate();
  534. var idate = new Date();
  535. var peveDate = idate.getAddDate(-2, "D");
  536. model.setValue("/root/main/cond/fromdd", cur_day);
  537. model.setValue("/root/main/cond/todd" , cur_day );
  538. rdo_patflag.visible = false;
  539. rdo_patflagstat.visible = false;
  540. ipt_todd.visible = false;
  541. cmb_concslip.visible = false;
  542. caption4.visible = true;
  543. chk_myPat.visible = false;
  544. caption5.visible = false;
  545. rdo_opstatcd.visible = true;
  546. caption1.text = "수술일자 :";
  547. rdo_clsflag.visible = false;
  548. caption2.text= "집도과 :";
  549. cmb_orddept.visible = true;
  550. bool1.visible = true;
  551. caption6.visible = true;
  552. model.toggle("case4");
  553. }
  554. model.refresh();
  555. }
  556. /*===============================================================================
  557. @desc : 입원시 조회
  558. ===============================================================================*/
  559. function fInPatList() {
  560. model.removeNodeset("/root/main/inpatinfo/inpatlist");
  561. model.removeNodeset("/root/main/outpatinfo/outpatlist");
  562. model.removeNodeset("/root/main/info/concslippatlist");
  563. model.removeNodeset("/root/main/oppatinfo/oppatlist");
  564. model.resetInstanceNode("/root/send/reqdata");
  565. model.copyNode("/root/send/reqdata", "/root/main/cond");
  566. submit("TRMMO04205");
  567. window.modelesstopmost = true;
  568. }
  569. /*===============================================================================
  570. @desc : 외래시 조회
  571. ===============================================================================*/
  572. function fOutPatList() {
  573. model.removeNodeset("/root/main/inpatinfo/inpatlist");
  574. model.removeNodeset("/root/main/outpatinfo/outpatlist");
  575. model.removeNodeset("/root/main/info/concslippatlist");
  576. model.removeNodeset("/root/main/oppatinfo/oppatlist");
  577. model.resetInstanceNode("/root/send/reqdata");
  578. model.copyNode("/root/send/reqdata", "/root/main/cond");
  579. submit("TRMMO04207");
  580. window.modelesstopmost = true;
  581. }
  582. /*===============================================================================
  583. @desc : 조회일자가 2일이 넘지 않도록 설정
  584. ===============================================================================*/
  585. function fChkDate() {
  586. var todd = model.getValue("/root/main/cond/todd");
  587. fromdd2 = Number(todd-2)
  588. var fromdd = model.getValue("/root/main/cond/fromdd");
  589. Number(fromdd);
  590. if (fromdd < fromdd2 || fromdd > todd) {
  591. var cur_day = getCurrentDate();
  592. model.setValue("/root/main/cond/fromdd" , todd );
  593. ipt_fromdd.refresh();
  594. messageBox("시작일은 2일 이전일 또는 종료일보다 클 수 ","E001");
  595. } else {
  596. fChkGetData() ;
  597. }
  598. }
  599. function fInitialize() {
  600. //관심슬립콤보 아이템추가
  601. if (model.getValue ("/root/main/cond/clsflag") == "P" ){
  602. model.setValue("/root/main/cond/userid", getUserInfo("userid"));
  603. } else if ( model.getValue ("/root/main/cond/clsflag") == "G" ) {
  604. model.setValue("/root/main/cond/userid", getUserInfo("dutplcecd"));
  605. }
  606. model.copyNode("/root/send/reqdata", "/root/main/cond");
  607. submit("TRMMB00101");
  608. addComboItem("cmb_concslip","","","above");
  609. }
  610. /*===============================================================================
  611. @desc : 관심슬립대상자 조회
  612. ===============================================================================*/
  613. function fGetConcSlipPatList(){
  614. model.makeNode("/root/send/cond");
  615. if (model.getValue ("/root/main/cond/clsflag") == "P" ){
  616. model.setValue("/root/main/cond/userid", getUserInfo("userid"));
  617. } else if ( model.getValue ("/root/main/cond/clsflag") == "G" ) {
  618. model.setValue("/root/main/cond/userid", getUserInfo("dutplcecd"));
  619. }
  620. model.copyNode("/root/send/reqdata", "/root/main/cond");
  621. submit("TRMMB00102");
  622. window.modelesstopmost = true;
  623. model.refresh();
  624. }
  625. /*===============================================================================
  626. @desc : 수술마취대상자조회
  627. ===============================================================================*/
  628. function fGetOpPatList(){
  629. model.makeNode("/root/send/cond");
  630. model.removeNodeset("/root/main/inpatinfo/inpatlist");
  631. model.removeNodeset("/root/main/outpatinfo/outpatlist");
  632. model.removeNodeset("/root/main/info/concslippatlist");
  633. model.removeNodeset("/root/main/oppatinfo/oppatlist");
  634. // if (model.getValue ("/root/main/cond/clsflag") == "P" ){
  635. // model.setValue("/root/main/cond/userid", getUserInfo("userid"));
  636. // } else if ( model.getValue ("/root/main/cond/clsflag") == "G" ) {
  637. // model.setValue("/root/main/cond/userid", getUserInfo("dutplcecd"));
  638. // }
  639. model.copyNode("/root/send/reqdata", "/root/main/cond");
  640. submit("TRMMO04206");
  641. window.modelesstopmost = true;
  642. model.refresh();
  643. }
  644. function fChkGetData() {
  645. var searflag = model.getValue("/root/main/cond/searflag");
  646. if (searflag =="P") {
  647. fInitialize();
  648. fGetConcSlipPatList();
  649. } else if(searflag =="A") {
  650. fGetOpPatList();
  651. } else if(searflag =="O") {
  652. fOutPatList() ;
  653. } else if (searflag == "I") {
  654. fInPatList() ;
  655. fMyPatChngColor();
  656. }
  657. }
  658. function fMyPatChngColor(){
  659. for(var currow = 1; currow < grd_inpatlist.rows; currow++){
  660. var color = model.getValue("/root/main/inpatinfo/inpatlist[" + currow + "]/color");
  661. if(color == ""){
  662. color = "ffffff";
  663. }
  664. grd_inpatlist.rowStyle(currow, "data", "background-color") = "#" + color;
  665. }
  666. grd_inpatlist.refresh();
  667. }
  668. //===================================================================
  669. // 수술에서 사용하는 함수들
  670. //===================================================================
  671. /**
  672. * @desc : 환자 선택 후, 환자 정보 조회 및 기록지 화면 연동
  673. * @
  674. * @param :
  675. * @return :
  676. * @author : 오지훈
  677. * @---------------------------------------------------
  678. */
  679. /**
  680. * @desc : 수술환자 선택
  681. * @
  682. * @param :
  683. * @return :
  684. * @author : 오지훈
  685. * @---------------------------------------------------
  686. */
  687. function fMiniOpPat(){
  688. var ordrecflag = model.getValue(root.main.cond.ordrecflag);
  689. var currow = grd_oppatlist.row;
  690. if(currow < 1){
  691. return;
  692. }
  693. var opstatcd = model.getValue("/root/main/oppatinfo/oppatlist[" + currow + "]/opstatcd");
  694. if(opstatcd == "00" || opstatcd == "10"){
  695. messageBox("선택된 환자는 수술확정이 되지", "E007");
  696. return;
  697. }
  698. //처방, CP화면에 modal 또는 modaless가 뜬 경우, 환자 선택 불가
  699. if(fChkScrnModal()==false){
  700. return;
  701. }
  702. //CP환자 여부 확인
  703. if(fChkCPMiniOpPatValid(currow)==false){
  704. return;
  705. }
  706. //상단정보 설정
  707. //model.setValue(opener.root.cpflag, "N"); //처방open
  708. if(fReqMiniOpPatPamInfo(currow)==true){
  709. fOpenPrcpMainWnd();
  710. }
  711. var mainobj = getMainViewer();
  712. var mainscrnid = mainobj.javascript.getScreenID(); //메인화면의 기록지 ID
  713. if(getUserInfo("dutplcecd") == "2090000000"){ //로그인한 의사가 마취통증의학과인 경우
  714. if(mainscrnid == "SMMMR03700"){
  715. mainobj.javascript.fFormInit();
  716. }else{
  717. mainobj.javascript.navigate("SMMMR03700");
  718. }
  719. }
  720. }
  721. /**
  722. * @desc : 수술환자 환자 기본정보설정
  723. * @ 수정 : 미니진료대상자에 맞게끔 내용 수정
  724. * @
  725. * @param :
  726. * @return :
  727. * @author : 오지훈
  728. * @---------------------------------------------------
  729. */
  730. function fReqMiniOpPatPamInfo(iRow){
  731. var ioflag = "T" // 수술일 경우 ioflag:T
  732. var pid = model.getValue("/root/main/oppatinfo/oppatlist[" + iRow + "]/pid");
  733. var opcnfmdd = model.getValue("/root/main/oppatinfo/oppatlist[" + iRow + "]/opcnfmdd");
  734. var cretno = "";
  735. var instcd = model.getValue("/root/main/oppatinfo/oppatlist[" + iRow + "]/instcd");
  736. var perfdeptcd = model.getValue("/root/main/oppatinfo/oppatlist[" + iRow + "]/perfdeptcd");
  737. var perfdrid = model.getValue("/root/main/oppatinfo/oppatlist[" + iRow + "]/perfdrid");
  738. var patflag = model.getValue("/root/main/oppatinfo/oppatlist[" + iRow + "]/ioflag");
  739. var procflag = "F"; // 최초조회:F , 재조회:R
  740. var oprsrvno = model.getValue("/root/main/oppatinfo/oppatlist[" + iRow + "]/oprsrvno");
  741. var ophistno = model.getValue("/root/main/oppatinfo/oppatlist[" + iRow + "]/ophistno");
  742. var srchdd = model.getValue("/root/main/cond/fromdd"); //조회일자
  743. var param = ioflag + "▦" +
  744. pid + "▦" +
  745. opcnfmdd + "▦" +
  746. cretno + "▦" +
  747. instcd + "▦" +
  748. perfdeptcd + "▦" +
  749. perfdrid + "▦" +
  750. patflag + "▦" +
  751. procflag + "▦" +
  752. oprsrvno + "▦" +
  753. ophistno + "▦" +
  754. srchdd;
  755. setParameter("condparam", param);
  756. model.setValue("/root/init", param);
  757. modal("SPMMO08900", 1, 0, 0, "", "", "", "left:0; right:0; width:0; height:0; sysmenu:hidden; caption:hidden; min:hidden, max:hidden;");
  758. var useyn = getParameter("SPMMO08900_rtn_useyn");
  759. if(useyn == "Y"){
  760. setParameter("SPMMO08900_rtn_useyn", "");
  761. return true;
  762. }else{
  763. return false;
  764. }
  765. }
  766. /**
  767. * @desc : 수술환자 CP적용여부 확인
  768. * @
  769. * @param :
  770. * @return :
  771. * @author : 오지훈
  772. * @---------------------------------------------------
  773. */
  774. function fChkCPMiniOpPatValid(currow){
  775. var pid = model.getValue("/root/main/oppatinfo/oppatlist[" + currow + "]/pid");
  776. var opcnfmdd = model.getValue("/root/main/oppatinfo/oppatlist[" + currow + "]/opcnfmdd");
  777. var perfdeptcd = model.getValue("/root/main/oppatinfo/oppatlist[" + currow + "]/perfdeptcd");
  778. var perfdrid = model.getValue("/root/main/oppatinfo/oppatlist[" + currow + "]/perfdrid");
  779. var ioflag = model.getValue("/root/main/oppatinfo/oppatlist[" + currow + "]/ioflag");
  780. var instcd = model.getValue("/root/main/oppatinfo/oppatlist[" + currow + "]/instcd");
  781. var srchdd = model.getValue("/root/main/cond/opcnfmdd");
  782. model.removeNodeset("/root/send/reqdata");
  783. model.makeValue("/root/send/reqdata/ioflag" , "T"); //수술환자 ioflag는 T로 설정, 실제로 T는 없으나, 로직처리를 위해 임시로, 실제 ioflag는 patflag
  784. model.makeValue("/root/send/reqdata/pid" , pid);
  785. model.makeValue("/root/send/reqdata/orddd" , opcnfmdd);
  786. model.makeValue("/root/send/reqdata/orddeptcd", perfdeptcd);
  787. model.makeValue("/root/send/reqdata/orddrid" , perfdrid);
  788. model.makeValue("/root/send/reqdata/patflag" , ioflag); //실제 ioflag는 patflag로 설정
  789. model.makeValue("/root/send/reqdata/instcd" , instcd); //기관코드
  790. model.makeValue("/root/send/reqdata/srchdd" , srchdd); //기준일자
  791. if(submit("TRMMO04503")==true){ //수술환자의 원무키 조회
  792. var pid = model.getValue("/root/init/pamkeyinfo/pamkeyinfo/pid");
  793. var orddd = model.getValue("/root/init/pamkeyinfo/pamkeyinfo/orddd");
  794. var cretno= model.getValue("/root/init/pamkeyinfo/pamkeyinfo/cretno");
  795. var instcd= model.getValue("/root/init/pamkeyinfo/pamkeyinfo/instcd");
  796. var ioflag= model.getValue("/root/init/pamkeyinfo/pamkeyinfo/ioflag");
  797. model.removeNodeset("/root/send/reqdata");
  798. model.makeValue("/root/send/reqdata/pid" , pid);
  799. model.makeValue("/root/send/reqdata/orddd" , orddd);
  800. model.makeValue("/root/send/reqdata/cretno" , cretno);
  801. model.makeValue("/root/send/reqdata/prcpgenrflag", ioflag);
  802. var ocsflag = model.getValue("root/main/cond/ocsflag");
  803. if(ocsflag == "Y"){
  804. if(submit("TRMMO04303")==true){ //수술환자의 CP적용 여부 확인
  805. var cppatnode = model.instance1.selectNodes("/root/init/rsltgetdata/getdata");
  806. if(cppatnode.length < 1){ //cp적용환자 tbl에 유효한 데이터가 없는 경우
  807. model.setValue(root.cpflag, "N"); //처방open
  808. return true;
  809. }else{ //CP적용환자 tbl에 유효한 데이터가 있는 경우
  810. var appstat = model.getValue("/root/init/rsltgetdata/getdata/appstat");
  811. var cpgnm = model.getValue("/root/init/rsltgetdata/getdata/cpgnm");
  812. if(appstat == 12){ //CP적용상태가 12인 경우
  813. model.setValue(root.cpflag, "Y");
  814. return true;
  815. /*
  816. var rtnval = messageBox("[" + hngnm + "]환자의 [" + cpgnm + "] CP를", "Q003");
  817. if(rtnval == 6){ //예 선택, CP Main open, CP적용환자 tbl에 appstat 10 진행중
  818. model.setValue(opener.root.cpflag, "N");
  819. return fUpdtCPPatAppStatVal(52);
  820. }else{ //아니오 선택, 처방 Main open, CP적용환자 tbl에 appstat 51 drop out
  821. model.setValue(opener.root.cpflag, "Y");
  822. return fUpdtCPPatAppStatVal(10);
  823. }*/
  824. }else if(appstat == 52){
  825. var rtnval = messageBox("[" + hngnm + "]환자에게 CP를", "Q003");
  826. if(rtnval == 6){ //예, CP Main open, CP적용환자 tbl에 appstat 10 진행중
  827. model.setValue(root.cpflag, "X");
  828. return true;
  829. }else{
  830. model.setValue(root.cpflag, "N");
  831. return fUpdtCPPatAppStatVal(41); //41 : CP취소
  832. }
  833. }else{ //CP적용상태가 11가 아닌 경우, CP Main창 open
  834. model.setValue(root.cpflag, "Y");
  835. return true;
  836. }
  837. }
  838. }
  839. }
  840. }
  841. }
  842. /**
  843. * @desc : OCS Check Box 클릭시 처리
  844. * : check 할 경우 진료기록 화면만 열리고 처방화면은 열지 않는다
  845. * @
  846. * @param :
  847. * @return :
  848. * @author : 오지훈
  849. * @---------------------------------------------------
  850. */
  851. function fClkCheckBoxOCS(){
  852. var ocsflag = model.getValue("/root/main/cond/ocsflag");
  853. if(ocsflag == "Y"){
  854. model.setValue("/root/main/cond/ocsflag", "Y");
  855. }else{
  856. model.setValue("/root/main/cond/ocsflag", "N");
  857. }
  858. model.refresh();
  859. }