SMMMO02100.js 49 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213
  1. /*function list
  2. fIvwDetlVwBf: 전처방 상세보기
  3. fIvwDetlVwOpener: 전처방 상세보기에 따른 opener 축소
  4. fInitializeConDone: 전처방화면 초기화 ( xforms-model-construct-done )
  5. fBdClick: iviewer 선택시 opener 의 grid select를 초기화 한다.
  6. fMouseRghtBtnPopup: 오른쪽 마우스 팝업
  7. */
  8. var prcpNode = "/root/main/prcp/prcplist"; //처방 grid instance
  9. /**
  10. * @desc : 화면 초기화
  11. * @
  12. * @param : flag: save (처방저장후에는 다시 조회하지 않고 저장후 리턴된 값으로 대신 보인다.)
  13. * @event : void
  14. * @return :
  15. * @authur : 마정민 2007. 3. 13
  16. * @---------------------------------------------------
  17. */
  18. function fInitialize( flag ){
  19. model.addlog(" SPEED CHECK START OF SMMO02100 fInitialize()");
  20. grd_bfprcplist.backcoloralternate = "transparent";
  21. grd_bfprcplist.frozencols = "16";
  22. cmb_bfprcpdd.value = opener.model.getValue ( "/root/init/prcpdd" );
  23. var prcpgenrflag = opener.model.getValue ( "/root/patflag/list/prcpgenrflag" );
  24. //dc처방 색변경을 위한 수정 시작 by 손주연 2008-06-30
  25. //전처방화면이 로드되기전 간호반납의뢰창이 먼저 뜰때 오류발생.
  26. opener.model.makeValue("/root/bfinityn", "Y");
  27. //dc처방 색변경을 위한 수정 종료 by 손주연 2008-06-30
  28. //by sonjy 20081027 인증 저장 후 초기화 함수 호출시 마우스 오른쪽 메뉴가 지워지는 현상 수정.
  29. //flag == save일때는 타지 않도록 처리.
  30. if ( prcpgenrflag != "O" && flag != "save" ) {
  31. //grd_bfprcplist.colWidth(2) = 50;
  32. //grd_bfprcplist.colWidth(3) = 242;
  33. if ( isNull(getParameter("payflagcd")) ) //급비변경 후 메뉴 사라지지 않도록 조건 추가
  34. model.removenode ( "/root/init/msrght/mouserght[2]");
  35. }
  36. if ( opener.model.getValue( "/root/init/detlivw" ) == "m" ) {
  37. grd_bfprcplist.colWidth(grd_bfprcplist.colRef ( "tempcol6" )) = model.getValue ( "/root/init/tempcol6exwd" );
  38. grd_bfprcplist.colWidth(grd_bfprcplist.colRef ( "tempcol7" )) = model.getValue ( "/root/init/tempcol7exwd" );
  39. //grd_bfprcplist.autoResize = true ;
  40. //grd_bfprcplist.rebuild();
  41. }
  42. grd_bfprcplist.visible = true; //컬럼모양이 바뀌는 것을 보여주지 않기 위해 사이즈 조절후 보여준다.
  43. //init: 전처방 처음 띄울 때 최초 조회는 최신 전처방 가져오기 ( 단 입원, 응급은 입원기간 내 )
  44. if (isNull(prcpgenrflag)){
  45. return;
  46. }
  47. if ( flag == "save" ) {
  48. //20080819 마정민 수정 저장후에는 한 submit에서 가져오는 걸로 수정
  49. if ( !isNull(opener.model.getValue ( "/root/savertninfo/prcplist[2]/prcpcd" ))) {
  50. model.copyNode ( root.prcpsrch, opener.root.savertninfo );
  51. model.removeNodeset ( "/root/prcpsrch/prcpetccnts" );
  52. model.removeNodeset ( "/root/prcpsrch/rsrvcvrtprcp" );
  53. model.removeNodeset ( "/root/prcpsrch/saveestmspclcs" );
  54. model.removeNodeset ( "/root/prcpsrch/saveserdiagappfrm" );
  55. model.removeNodeset ( "/root/prcpsrch/savelglydis" );
  56. model.removeNodeset ( "/root/prcpsrch/saverareobst" );
  57. model.refresh();
  58. //temp에 딸려온 데이터를 삭제한다.
  59. setPrcpColor();
  60. opener.group2.visible = true;
  61. opener.model.refresh();
  62. } else {
  63. btn_bfprcpsrch.dispatch ( "DOMActivate" );
  64. }
  65. } else { //flag != "save"
  66. fBfPrcpSrch( "init" );
  67. //자가보유처방 조회 (최초 처방창을 열때만 호출한다.) 20100210 by LYJ
  68. var mainObj = getMainViewer();
  69. var curPrcpObj = mainObj.javascript.getOpenWindow("SMMMO00100");
  70. if(opener.model.getValue("/root/hidden/selfhld/selfopenyn") != "Y") {
  71. if (curPrcpObj != null){
  72. curPrcpObj.javascript.fSelfHldPrcpSub();
  73. }
  74. }
  75. //kimsj 처방시 미비기록 유무 확인(submit) - (최초 처방창을 열때만 호출.) - SMMMO04100.js에서 message 실행
  76. if (curPrcpObj != null){
  77. curPrcpObj.javascript.fChkValidRecInfo();
  78. }
  79. //var sDutPlceCd = getUserInfo("dutplcecd");
  80. //if(getUserInfo("userid") == "EMR") { // 테스트
  81. /*
  82. if(sDutPlceCd == "4072000000" || sDutPlceCd == "4070700000" ) { // 심사실에서만 분리청구를 위해 사용하는 우측버튼 기능 생성. 2014.03.25 엄영만
  83. if(isNull(model.getValue("/root/init/msrght/mouserght[func='fFreeCalcs']/func"))) { // 기존에 추가되지 않았을경우만 추가.
  84. var ndMouseRght = instance1.selectNodes( "/root/init/msrght/mouserght");
  85. model.makeValue("/root/init/msrght/mouserght["+ndMouseRght.length+ 1 +"]/func", ""); // 분리선 추가
  86. model.makeValue("/root/init/msrght/mouserght["+ndMouseRght.length+ 1 +"]/label", ""); // 분리선 추가
  87. model.makeValue("/root/init/msrght/mouserght["+ndMouseRght.length+ 2 +"]/func", "fFreeCalcs");
  88. model.makeValue("/root/init/msrght/mouserght["+ndMouseRght.length+ 2 +"]/label", "무산정 처리");
  89. }
  90. }
  91. */
  92. // 칠곡 응급실 원격판독요청(TPLUS 임시사업) 2015.05.12 엄영만
  93. var sInstCd = getUserInfo("dutplceinstcd")
  94. var sDutPlceCd = getUserInfo("dutplcecd");
  95. //if(getUserInfo("userid") == "EMR") { // 테스트
  96. if(prcpgenrflag != "O" && prcpgenrflag != "S") {
  97. if(sInstCd == "032" && sDutPlceCd == "2280000000" ) { // 칠곡 응급의학과 로그인 사용자만 우측버튼 기능 생성. 2015.05.12 엄영만
  98. if(isNull(model.getValue("/root/init/msrght/mouserght[func='fReqPacs']/func"))) { // 기존에 추가되지 않았을경우만 추가.
  99. var ndMouseRght = instance1.selectNodes( "/root/init/msrght/mouserght");
  100. model.makeValue("/root/init/msrght/mouserght["+ndMouseRght.length+ 1 +"]/func", ""); // 분리선 추가
  101. model.makeValue("/root/init/msrght/mouserght["+ndMouseRght.length+ 1 +"]/label", ""); // 분리선 추가
  102. model.makeValue("/root/init/msrght/mouserght["+ndMouseRght.length+ 2 +"]/func", "fReqPacs");
  103. model.makeValue("/root/init/msrght/mouserght["+ndMouseRght.length+ 2 +"]/label", "원격판독요청");
  104. }
  105. }
  106. }
  107. }
  108. // //자가보유처방 조회 (최초 처방창을 열때만 호출한다.) 20100210 by LYJ
  109. // if (flag != "save" && opener.model.getValue("/root/hidden/selfhld/selfopenyn") != "Y" ){
  110. // var mainObj = getMainViewer();
  111. // var curPrcpObj = mainObj.javascript.getOpenWindow("SMMMO00100");
  112. // if (curPrcpObj != null){
  113. // curPrcpObj.javascript.fSelfHldPrcpSub();
  114. // }
  115. // }
  116. var prcppkspecArray = model.getValue ( "/root/prcpsrch/prcplist[1]/prcppkspec").split("|");
  117. if ( isNull (prcppkspecArray[0] )) {
  118. var orddd = opener.model.getValue ( "/root/paminfo/list/orddd" );
  119. if (prcpgenrflag == "O" ) {
  120. model.setValue ("/root/init/bfprcpdd" , orddd );
  121. } else {
  122. model.setValue ("/root/init/bfprcpdd" , getCurrentDate());
  123. }
  124. } else {
  125. model.setValue ("/root/init/bfprcpdd" , prcppkspecArray[0] );
  126. // 입원이고 입원전 처방이 전처방에 보일때 날짜를 입원당일로 보여준다.
  127. if (prcpgenrflag != "O" ) {
  128. if ( eval ( prcppkspecArray[0]) < opener.model.getValue( "/root/paminfo/list/indd" )) {
  129. model.setValue ("/root/init/bfprcpdd" , opener.model.getValue( "/root/paminfo/list/indd" ));
  130. }
  131. //입원일 때는 follow up 처방 검색을 위해 /root/init/initdd 에 최종 검색일자를 넣어준다.
  132. //followup 처방이 있을 경우는 initdd와 같은 날짜는 folowup 처방과 같이 보여주기 위해서 이다.
  133. model.setValue ( "/root/init/initdd", model.getValue ( "/root/init/bfprcpdd" ));
  134. var followupArray = model.getValue ( "/root/prcpsrch/prcplist[prcpkindcd='70']/prcppkspec" ).split("|");
  135. if ( !isNull(followupArray)){
  136. model.setValue ( "/root/init/followup", followupArray[0]);
  137. }
  138. }
  139. }
  140. model.refresh();
  141. var addprcpflag = opener.model.getValue("/root/init/addprcpflag"); //시행부서화면 여부
  142. //전처방 로딩이 완료되면 진료대상자에서 진료기록을 호출하는 로직 추가 (2008.08.28 : 김영학)
  143. if (addprcpflag !="Y") { // 시행부서 화면일 경우에는 호출하는 로직 수행하지않음
  144. //전회처방 복사
  145. fCopyBfPrcp(flag);
  146. if(flag != "save"){
  147. fGetHosOutPrcpResn(); //원외처방 사후관리 팝업 호출, 최초 1회만 (2010.01.18 JJE)
  148. }
  149. var mainObj = getMainViewer();
  150. var srcOrdPatListwnd = mainObj.javascript.getOpenWindow("SMMMO04100");
  151. //마취기록지에서 처방창을 열경우 마취기록지를 initialize 시키지 않는 로직 추가 (평화IS 이은영GJ요청 : 2008.08.28)
  152. var srcAnstRecwnd = mainObj.javascript.getOpenWindow("SMMMR03700");
  153. var anstrereload = mainObj.javascript.getParameter("SMMMR03700_refresh");
  154. if (srcAnstRecwnd != null) {
  155. var anstrereload = srcAnstRecwnd.javascript.getParameter("SMMMR03700_refresh");
  156. }
  157. if (anstrereload != "false") {
  158. var fstopenflag = opener.model.getValue("/root/init/fstopenflag"); //처방화면이 최초 생성 여부
  159. if (srcOrdPatListwnd != null ) {
  160. var cpflag= srcOrdPatListwnd.model.getValue("/root/cpflag");
  161. if(cpflag != "Y"){ //CP가 아닐 경우만, 전처방에서 기록지 변경하는 로직 호출(CP 일 경우는 대상자 리스트 클릭시 동작
  162. if (fstopenflag !="N") {
  163. var answcnt = srcOrdPatListwnd.javascript.getParameter("SMMMO04100_ANSWCNT");
  164. if (answcnt =="004" || isNull(answcnt)) {
  165. srcOrdPatListwnd.javascript.fChngMainEMRScrn();
  166. }
  167. var scrnwnd = getOpenWindow("SPMMB08400");
  168. if(scrnwnd != null){
  169. scrnwnd.javascript.fCloseOpenEmrWnd();
  170. }
  171. }
  172. }
  173. }
  174. /* CP 초기화 해주는 로직 처방.js로 이동 김영학 ( 2009.03.16)
  175. //JJE- (추가, srcOrdPatListwnd=null의 Y/N 상관없이 체크해야 함)
  176. var cpWdwFlag= opener.model.getValue("/root/cp");
  177. if( fstopenflag == "Y" && cpWdwFlag == "Y" ){ //CP가 open된 첫회만 수행(CP가 열린상태에서 다른환자 선택 시 수행 안함 -> fReconstruct()*2 방지)
  178. //fOpenPrcpMainWnd();
  179. opener.javascript.fReconstruct();
  180. }
  181. */
  182. }
  183. } //end if(addprcpflag !="Y")
  184. model.addlog(" SPEED CHECK END OF SMMO02100 fInitialize()");
  185. }
  186. /**
  187. * @desc : 전회처방을 개인설정에 따라 처방 화면으로 복사 한다.
  188. * @param :
  189. * @id : fCopyBfPrcp
  190. * @event : 처방 화면 로딩(리로딩)시 호출
  191. * @return : void
  192. * @authur : 엄영만 2011. 11. 16
  193. * @---------------------------------------------------
  194. */
  195. function fCopyBfPrcp(flag) {
  196. if (flag == "save") { return; }
  197. var prcpgenrflag = opener.model.getValue ( "/root/patflag/list/prcpgenrflag" );
  198. if (prcpgenrflag != "O") { return; }
  199. var copybfprcpyn = model.getValue ( "/root/init/copybfprcpyn" );
  200. if (copybfprcpyn != "N") { return; }
  201. //start : 환경설정(임시처방 존재시 전처방 자동 copy 기능 사용여부 설정)에 따른 전처방 copy 추가 엄영만 2013.02.06
  202. var copyTempPrcpYnNode = opener.instance1.selectSingleNode("/root/initsrch/envinfo[qestcd='034' and answcnt='002']/answcnt"); //001:사용, 002:사용안함
  203. var existTempPrcpNode = opener.instance1.selectSingleNode("/root/main/prcp/prcplist[prcphistcd='T']/prcpcd"); //임시저장 처방 정보
  204. if (existTempPrcpNode != null && copyTempPrcpYnNode != null) {
  205. return;
  206. }
  207. //start : 환경설정(전처방 자동 copy 기능 설정)에 따른 전처방 copy 추가 (요청번호:8586, 2009.11.02 JJE)
  208. var copyPrcpInfoNode = opener.instance1.selectSingleNode("/root/initsrch/envinfo[qestcd='016' and answcnt!='003']/answcnt"); //001:약만COPY, 002:전체COPY, 003:설정안함
  209. if( !opener.javascript.fIsOnSubmit() && copyPrcpInfoNode != null ){
  210. model.refresh();
  211. var orgNodes = instance1.selectNodes("/root/prcpsrch/prcplist");
  212. var orgNode = null;
  213. var orgPrcpcdNode = null;
  214. var orgPrcpclscdNode = null;
  215. var orgStatusNode = null;
  216. var orgPrcphistcdNode = null;
  217. var copyPrcpInfo = copyPrcpInfoNode.text;
  218. var orgPrcpcd = "";
  219. var orgPrcpclscd = "";
  220. var orgPrcphistcd = "";
  221. var copyCnt = 0;
  222. if( orgNodes.length > 0 ){
  223. opener.model.removeNode("/root/migdrugmthd");
  224. //copy해야 하는 처방을 select 한다
  225. for( var i=0; i<orgNodes.length; i++ ){
  226. orgNode = orgNodes.item(i);
  227. orgPrcpcdNode = orgNode.selectSingleNode("prcpcd");
  228. orgPrcpclscdNode = orgNode.selectSingleNode("prcpclscd");
  229. orgStatusNode = orgNode.selectSingleNode("status");
  230. orgPrcphistcdNode = orgNode.selectSingleNode("prcphistcd");
  231. if(orgPrcpcdNode!=null) orgPrcpcd = orgPrcpcdNode.text;
  232. if(orgPrcpclscdNode!=null) orgPrcpclscd = orgPrcpclscdNode.text;
  233. if(orgPrcphistcdNode!=null) orgPrcphistcd = orgPrcphistcdNode.text;
  234. if(orgPrcpcd!="" && orgPrcphistcd == "O" && ((copyPrcpInfo=="001" && (orgPrcpclscd=="A2" || orgPrcpclscd=="A4" || orgPrcpclscd=="A6")) || copyPrcpInfo=="002") ){
  235. grd_bfprcplist.select((i+1), 1) = true;
  236. model.setValue(orgStatusNode, "I");
  237. copyCnt++;
  238. }
  239. } //end for()
  240. //select된 처방에 대해 addPrcp()
  241. //opener의 서브밋 여부를 체크 하여 실행 하도록 수정함.
  242. if(!opener.javascript.fIsOnSubmit() && copyCnt > 0 ){
  243. model.setValue ( "/root/init/copybfprcpyn" , "Y");
  244. opener.javascript.setParameter("SMMMO02100_skipAddPrcpPopYN", "Y");
  245. addPrcp ( "child", "/root/prcpsrch/prcplist", "/root/main/prcp", "Y", "status", "I", grd_bfprcplist, "N", "01");
  246. for (i= 0; i < orgNodes.length; i++){
  247. orgNode = orgNodes.item(i);
  248. orgStatusNode = orgNode.selectSingleNode("status");
  249. if (orgStatusNode.nodeValue == "I") {
  250. model.setValue ( orgStatusNode, "-" );
  251. }
  252. }
  253. opener.window.javascript.fOldDrugMthdPop();
  254. opener.javascript.clearParameter("SMMMO02100_skipAddPrcpPopYN"); //parameter로 상세팝업 호출 여부 체크를 위함
  255. }
  256. }
  257. } //end if(환경설정에 따른 전처방 copy)
  258. //end : 환경설정(전처방 자동 copy 기능 설정)에 따른 전처방 copy 추가
  259. }
  260. /**
  261. * @desc : iviewer 선택시 opener 의 grid select를 초기화 한다.
  262. * @param :
  263. * @id : body
  264. * @event : onclick
  265. * @return : void
  266. * @authur : 마정민 2007. 3. 26
  267. * @---------------------------------------------------
  268. */
  269. function fBdClick()
  270. {
  271. //처방 select 초기화
  272. grd_prcplist.select(0,0) = true;
  273. //진단 select 초기화
  274. grd_diaglist.select(0,0) = true;
  275. }
  276. /**
  277. * @desc : 오른쪽 마우스 팝업 처리
  278. * @param :2007-03-29
  279. * @id : grd_bfprcplist
  280. * @event : onmousedown
  281. * @return : void
  282. * @authur : 마정민 2007. 3. 29
  283. * @---------------------------------------------------
  284. */
  285. function fMouseRghtBtnPopup() {
  286. if (event.button == 3) {
  287. if(grd_bfprcplist.isCell(event.target) && grd_bfprcplist.mouseRow >= grd_bfprcplist.fixedRows){
  288. app.showPopupMenu(true);
  289. window.setPopupMenu(true, "/root/init/msrght/mouserght", "label", "func", false);
  290. }else{
  291. window.setPopupMenu(false);
  292. }
  293. }
  294. }
  295. /**
  296. * @desc : 전처방을 검색한다.
  297. * @param : flag: 전처방 구분 ( init: 전처방 처음 띄울 때 최초 조회는 최신 전처방 가져오기 ( 단 입원, 응급은 입원기간 내 )
  298. : prcpgenrflag: 외래입원구분
  299. * @id :
  300. * @event :
  301. * @return : void
  302. * @authur : 마정민 2007. 5. 5
  303. * @---------------------------------------------------
  304. */
  305. function fBfPrcpSrch( flag ) {
  306. var cnt = 0;
  307. var orddd = "";
  308. var orddrid = "";
  309. var todd = "";
  310. var pid = opener.model.getValue ( "/root/paminfo/list/pid" );
  311. var prcpdd = model.getValue("/root/init/bfprcpdd");
  312. var bfflag = "bfprcp";
  313. var rsrvflag = opener.model.getValue ( "/root/paminfo/list/rsrvflag" );
  314. if ( opener.model.getValue ( "/root/addprcp" ) == "Y" || rsrvflag == "P" ) {
  315. bfflag = "addprcp";
  316. }
  317. if (isNull(flag)) flag ="";
  318. var prcpgenrflag = opener.model.getValue ( "/root/patflag/list/prcpgenrflag" );
  319. if (prcpgenrflag == "O" || prcpgenrflag == "S") {
  320. orddd = prcpdd;
  321. orddrid = opener.model.getValue ( "/root/paminfo/list/orddrid" );
  322. todd = opener.model.getValue ( "/root/paminfo/list/orddd" );
  323. }
  324. else {
  325. orddd = opener.model.getValue ( "/root/paminfo/list/indd" );
  326. todd = getCurrentDate().toDate().getAddDate(1,"D").getDateFormat();
  327. }
  328. orddeptcd = opener.model.getValue ( "/root/paminfo/list/orddeptcd" );
  329. cretno = opener.model.getValue ( "/root/paminfo/list/cretno" );
  330. var prcpauthflag = opener.model.getValue ( "/root/init/prcpauthflag" );
  331. var followup = model.getValue ( "/root/init/followup" );
  332. //by sonjy 20091120 전처방 조회 개인별 설정 추가
  333. var bfprcpviewnode = opener.instance1.selectSingleNode("/root/initsrch/envinfo[qestcd='018']/answcnt");
  334. var bfprcpviewflag = "";
  335. if( bfprcpviewnode != null ) bfprcpviewflag = bfprcpviewnode.text ;
  336. //검색처방일이 followup 날짜와 같다면 followup 처방을 검색한다.
  337. if ( ( prcpdd == followup && !isNull(prcpdd)) || ( flag == "aft" && !isNull(followup))) {
  338. //by sonjy 20091120 전처방 조회 개인별 설정 추가
  339. var rtnval = fBfPrcpSrchCom ( pid, orddd, prcpdd, bfflag, flag, orddrid, todd, prcpgenrflag, orddeptcd, cretno, "TRMMO00100", true, prcpauthflag, followup, bfprcpviewflag);
  340. model.setValue ( "/root/send/cond12", "" );
  341. //followup 검색 초기화
  342. } else {
  343. //by sonjy 20091120 전처방 조회 개인별 설정 추가
  344. var rtnval = fBfPrcpSrchCom ( pid, orddd, prcpdd, bfflag, flag, orddrid, todd, prcpgenrflag, orddeptcd, cretno, "TRMMO00100", true, prcpauthflag, "", bfprcpviewflag);
  345. }
  346. if(rtnval == true){
  347. setPrcpColor();
  348. opener.group2.visible = true;
  349. opener.model.refresh();
  350. }
  351. }
  352. /**
  353. * @desc : 오른쪽 마우스 클릭 D/C
  354. * @ : 신규일 때는 removeNode
  355. * @ : 수정중일 때 원복시킨 후 삭제, D/C 표시
  356. * @ : 삭제, D/C 원복시킬려면 ? 오른쪽 마우스에 삭제, D/C 취소
  357. * @ : 삭제 후 D/C는 불가
  358. * @param :
  359. * @id : grd_prcplist
  360. * @event : 오른쪽 마우스 클릭 삭제
  361. * @return : void
  362. * @authur : 마정민 2007. 3. 26
  363. * @history: vAftClamDcFg 추가 by sonjy vAftClamDcFg가 C이면
  364. * @---------------------------------------------------
  365. */
  366. function fDCRow(vAftClamDcFg) {
  367. //by sonjy 20081022
  368. if( isNull(vAftClamDcFg) || vAftClamDcFg == null ){
  369. vAftClamDcFg = "";
  370. //청구 후 d/c를 일반 d/c와 함께 낼 수 없도록 처리. by sonjy 20081027
  371. var aftNodeList = model.instance1.selectNodes("/root/prcpsrch/prcplist[tempcol21='C']");
  372. if( aftNodeList != null ){
  373. if( aftNodeList.length > 0 ){
  374. messageBox ( "청구 후 D/C는 일반 D/C와 함께 내리실 수 없습니다.", "E" );
  375. return;
  376. }
  377. }
  378. }
  379. //덤프된 처방은 d/c 할 수 없도로 처리. cha 20090525
  380. var cvrtbfprcp = model.getValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.selectedRow(i) + "]/prcphistcd");
  381. if( cvrtbfprcp == "M"){
  382. messageBox ( "Dump된 처방은 D/C 할 수 없습니다.", "E" );
  383. return;
  384. }
  385. var prcpgenrflag = opener.model.getValue ( "/root/patflag/list/prcpgenrflag" );
  386. var pampkspec = "";
  387. var pamorddd = "";
  388. var pamcretno = "";
  389. var pamstatus = "";
  390. var statcdcnts = 0;
  391. var nurdrugrtn = "";
  392. var dchosoutcnt = 0;
  393. var orghosoutcnt = 0;
  394. var sumhosoutfg = "";
  395. var addprcp = opener.model.getValue("/root/init/addprcpflag");
  396. var cretno = "";
  397. //SON1006 첫번째 로우값으로 체크하던 로직을 선택된 row를 체크하는 로직으로 변경. START
  398. for( var i = 0 ; i < grd_bfprcplist.selectedRows ; i++) {
  399. pampkspec = model.getValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.selectedRow(i) + "]/pampkspec") + "^";
  400. pamorddd = getArrayData (pampkspec, 0, 1, "^", "|" );
  401. pamcretno = getArrayData (pampkspec, 0, 2, "^", "|" );
  402. pamstatus = model.getValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.selectedRow(i) + "]/tempcol1")
  403. if ( prcpgenrflag == "O" ) {
  404. orddd = opener.model.getValue ( "/root/paminfo/list/orddd" );
  405. if (pamorddd != orddd ) {
  406. messageBox ( "진료일에만 D/C를 내리실 수 있습니다.", "E" );
  407. return;
  408. }
  409. //진료환자와 원무정보가 다른 처방은 D/C할 수 없습니다.
  410. cretno = opener.model.getValue ( "/root/paminfo/list/cretno" );
  411. if (pamcretno != cretno ) {
  412. messageBox ( "진료환자와 원무정보가 다른 처방은 D/C할 수", "I004" );
  413. return;
  414. }
  415. //kimsj 20090828 수납 후 D/C 처방시 메세지
  416. if (pamstatus >= "230") {
  417. statcdcnts++;
  418. }
  419. //kimsj 20100105 연속처방 D/c 선택시 청구된 내역 존재할 경우 메세지
  420. if ( pamstatus == "601" ) {
  421. messageBox ( "연속처방중 청구된 건이 있습니다. \n부분반환을 하시기 바랍니다.", "E" );
  422. return;
  423. }
  424. }
  425. /*
  426. * 진료에서 반환처방등록시 간호에서 반환요청된 처방이 있는 경우 반환요청된 처방임을 알리고 반환처방발행대신에 반환요청 팝업창이 생성되어 반환저장만 가능하도록
  427. * 변경요청번호 : 8869
  428. *by sonjy 20091030 간호투약기록 반환요청 약 check
  429. */
  430. if( prcpgenrflag != "O" && prcpgenrflag != "S" && addprcp != "Y" &&
  431. (model.getValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.selectedRow(i) + "]/prcpclscd") == "A2" ||
  432. model.getValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.selectedRow(i) + "]/prcpclscd") == "A4" ||
  433. model.getValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.selectedRow(i) + "]/prcpclscd") == "A6" ) ){
  434. nurdrugrtn = getArrayData ( model.getValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.selectedRow(i) + "]/tempcol10") + "^", 0, 3, "^", "|" ) ;
  435. if( nurdrugrtn == "P" ) {
  436. messageBox ( model.getValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.selectedRow(i) + "]/prcpnm") + "간호에서 반납요청된 처방으로 D/C할 수 없습니다.\n 간호반납 화면에서 확인", "I008" );
  437. if(opener != null){
  438. opener.model.setValue("/root/initsrchprcp/prcpetccnts/drugprcprtnyn", "Y");
  439. opener.javascript.fDrugPrcpDc();
  440. }
  441. return ;
  442. }
  443. }
  444. /*
  445. * 원외처방전에만 해당되며, 반환시 부분반환은 블러킹하고 전체 반환만 가능하도록(변경요청번호:8829) , 단, admin mode제외
  446. * by sonjy 20091030 부분반환은 블러킹
  447. */
  448. if(prcpgenrflag == "O" && ( opener.model.getValue ( "/root/admininfo" ) == "NNNNNNNNNNNNNNNNNNNN" || isNull( opener.model.getValue ("/root/admininfo")) ) &&
  449. (model.getValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.selectedRow(i) + "]/prcpclscd") == "A2" ||
  450. model.getValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.selectedRow(i) + "]/prcpclscd") == "A4" ||
  451. model.getValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.selectedRow(i) + "]/prcpclscd") == "A6") ){
  452. //by sonjy 20091126 현재 환자의 원무정보와 동일 할 경우만 check하도록
  453. sumhosoutfg = getArrayData ( model.getValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.selectedRow(i) + "]/tempcol10") + "^", 0, 4, "^", "|" ) ;
  454. if( sumhosoutfg == "Y" && pamcretno == cretno ) dchosoutcnt++;
  455. }
  456. }
  457. /*
  458. * 원외처방전에만 해당되며, 반환시 부분반환은 블러킹하고 전체 반환만 가능하도록(변경요청번호:8829)
  459. * by sonjy 20091030 부분반환은 블러킹
  460. */
  461. if(prcpgenrflag == "O" && dchosoutcnt > 0 && (opener.model.getValue ( "/root/admininfo" ) == "NNNNNNNNNNNNNNNNNNNN" || isNull( opener.model.getValue ("/root/admininfo")) ) ) {
  462. orghosoutcnt = 0;
  463. cretno = opener.model.getValue ( "/root/paminfo/list/cretno" ); //현재 환자의 원무정보
  464. for( var i = 1 ; i <= grd_bfprcplist.rows ; i++) {
  465. if((model.getValue ( "/root/prcpsrch/prcplist[" + i + "]/prcpclscd") == "A2" ||
  466. model.getValue ( "/root/prcpsrch/prcplist[" + i + "]/prcpclscd") == "A4" ||
  467. model.getValue ( "/root/prcpsrch/prcplist[" + i + "]/prcpclscd") == "A6") ){
  468. pampkspec = model.getValue ( "/root/prcpsrch/prcplist[" + i + "]/pampkspec") + "^";
  469. pamorddd = getArrayData (pampkspec, 0, 1, "^", "|" );
  470. pamcretno = getArrayData (pampkspec, 0, 2, "^", "|" );
  471. sumhosoutfg = getArrayData ( model.getValue ( "/root/prcpsrch/prcplist[" + i + "]/tempcol10") + "^", 0, 4, "^", "|" ) ;
  472. if( sumhosoutfg == "Y" && pamcretno == cretno ) orghosoutcnt++;
  473. }
  474. }
  475. if( dchosoutcnt != orghosoutcnt ) {
  476. messageBox ("원외처방전이 출력되어 부분 반환이 불가 합니다.전체 반환 후 처방", "I008");
  477. return ;
  478. }
  479. }
  480. //kimsj 20090828 수납 후 D/C 처방시 메세지
  481. if (statcdcnts > 0) {
  482. if (messageBox ( "수납이 완료된 환자입니다. 처방을 수정하시겠습니까? \n 수정하신 후에는 환자에게 재수납하실 것을 설명해 주시기 바랍니다.", "Q" ) != "6" ) {
  483. return;
  484. }
  485. }
  486. //SON1006 END
  487. var prcpcslcd = "";
  488. var contprcpspec = "";
  489. var prcplen = "";
  490. var status = "";
  491. var actorddd = "";
  492. var actcretno = "";
  493. var execprcpstatcd = "";
  494. var prcpdd = "";
  495. var execprcpno = "";
  496. var rcptdd = "";
  497. var keyval = "";
  498. var prcpno = "";
  499. var prcphistno = "";
  500. var clamdd = "";
  501. var anticncrprtlnochk = 0;
  502. var nortnchk = 0;
  503. var selectedRows = grd_bfprcplist.selectedRows;
  504. for ( var i=0; i < selectedRows; i++ ) {
  505. //제목은 DC 불가
  506. var tempcol9 = model.getValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.selectedrow(i) + "]/tempcol9" );
  507. if ( tempcol9 == "N" || tempcol9 == "C" ) {
  508. continue;
  509. }
  510. var prcphistcd = model.getValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.selectedrow(i) + "]/prcphistcd" );
  511. if ( prcphistcd == "C" ) {
  512. continue;
  513. }
  514. if (model.getValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.selectedrow(i) + "]/anticncrprtlno" ) != "0" ) {
  515. if (anticncrprtlnochk==0) {
  516. messageBox ( "항암프로토콜 처방은 항암프로토콜 화면에서 가능합니다.", "E" );
  517. }
  518. anticncrprtlnochk++;
  519. continue;
  520. }
  521. //M은 DC 불가, 다선택하면 M도 DC 가능
  522. var chkcol = model.getValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.selectedrow(i) + "]/chkcol" );
  523. //*************************** **********************************//
  524. iFind = model.getValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.selectedrow(i) + "]/suppdeptspec" ).search( "NORTN" );
  525. if ( iFind >= 0) {
  526. //messageBox ( "특수조제실에서 조제완료하였으므로 반환불가합니다. 특수조제실로 문의바랍니다.", "E" );
  527. //퇴원약 처방 출력후 반환도 추가되어서 메시지를 바꿨다.
  528. if ( nortnchk == 0 ) {
  529. messageBox ( "반환불가한 상태입니다. 약국에 문의바랍니다.", "E" );
  530. }
  531. nortnchk++;
  532. continue;
  533. }
  534. if ( model.getValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.selectedrow(i) + "]/tempcol4" ) == "incldcchk" ) {
  535. continue; // 종속처방 처리 됐으면 d/c 처리 할 필요 없음
  536. }
  537. if (chkcol!="D") {
  538. model.setValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.selectedrow(i) + "]/chkcol", "D" );
  539. model.setValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.selectedrow(i) + "]/tempcol21", vAftClamDcFg) ; //SON20081022 청구 후 D/C
  540. //종속처방 DC 처리
  541. var inclprcpno = model.getValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.selectedrow(i) + "]/inclprcpno" );
  542. //종속처방 값이 있으면
  543. if ( model.getValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.selectedrow(i) + "]/inclprcpno" ) > 0 ) {
  544. for ( var j=1; j < grd_bfprcplist.rows; j++ ) {
  545. if ( inclprcpno == model.getValue ( "/root/prcpsrch/prcplist[" + j + "]/inclprcpno" )) {
  546. var tempcol9 = model.getValue ( "/root/prcpsrch/prcplist[" + j + "]/tempcol9" );
  547. if ( tempcol9 == "N" || tempcol9 == "C" ) {
  548. continue;
  549. }
  550. if ( eval(model.getValue ( "/root/prcpsrch/prcplist[" + j + "]/tempcol1" )) >= 400 && isNull(vAftClamDcFg) ){
  551. //종속처방에서 상태값이 400이상이면 d/c처리에서 뺀다.
  552. //단, 청구후 d/c가 아닐 경우만...by sonjy 20081027
  553. model.setValue ( "/root/prcpsrch/prcplist[" + j + "]/chkcol", "" );
  554. model.setValue ( "/root/prcpsrch/prcplist[" + j + "]/tempcol21", "" );//SON20081022 청구 후 D/C
  555. } else {
  556. if ( model.getValue ( "/root/prcpsrch/prcplist[" + j + "]/chkcol") == "D" ) {
  557. //model.setValue ( "/root/prcpsrch/prcplist[" + j + "]/chkcol", "" );
  558. //model.setValue ( "/root/prcpsrch/prcplist[" + j + "]/tempcol4", "incldcchk" );
  559. } else {
  560. model.setValue ( "/root/prcpsrch/prcplist[" + j + "]/chkcol", "D" );
  561. model.setValue ( "/root/prcpsrch/prcplist[" + j + "]/tempcol21", vAftClamDcFg );//SON20081022 청구 후 D/C
  562. model.setValue ( "/root/prcpsrch/prcplist[" + j + "]/tempcol4", "incldcchk" );
  563. }
  564. }
  565. }
  566. }
  567. }
  568. } else {
  569. model.setValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.selectedrow(i) + "]/chkcol", "" );
  570. model.setValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.selectedrow(i) + "]/tempcol21", "") ; //SON20081022 청구 후 D/C
  571. //dc처방 색 변경 후 d/c를 풀경우 바탕색 재 변경 by 손주연 수정 시작 2008-06-30
  572. fSetChngBkColor(grd_bfprcplist.selectedrow(i) , "");
  573. //dc처방 색 변경 후 d/c를 풀경우 바탕색 재 변경 by 손주연 수정 종료
  574. //연속처방 클리어 처리
  575. prcpcslcd = model.getValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.selectedrow(i) + "]/prcpclscd" );
  576. if ( prcpcslcd == "A6" || prcpcslcd == "F2" ) {
  577. var contprcpspec = model.getValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.selectedrow(i) + "]/contprcpspec" );
  578. if ( contprcpspec != "-" ) {
  579. var prcplen = contprcpspec.split("^").length;
  580. var strContprcpspec = "status|actorddd|actcretno|execprcpstatcd|prcpdd|execprcpno|execprcpuniqno|rcptdd|keyval|prcpno|prcphistno|clamdd";
  581. for ( var j=1; j < prcplen; j++ ) {
  582. status = "^-|";
  583. actorddd = getArrayData ( contprcpspec, j, 1, "^", "|" ) + "|";
  584. actcretno = getArrayData ( contprcpspec, j, 2, "^", "|" ) + "|";
  585. execprcpstatcd = getArrayData ( contprcpspec, j, 3, "^", "|" ) + "|";
  586. prcpdd = getArrayData ( contprcpspec, j, 4, "^", "|" ) + "|";
  587. execprcpno = getArrayData ( contprcpspec, j, 5, "^", "|" ) + "|";
  588. execprcpuniqno = getArrayData ( contprcpspec, j, 6, "^", "|" ) + "|";
  589. rcptdd = getArrayData ( contprcpspec, j, 7, "^", "|" ) + "|";
  590. keyval = getArrayData ( contprcpspec, j, 8, "^", "|" ) + "|";
  591. prcpno = getArrayData ( contprcpspec, j, 9, "^", "|" ) + "|";
  592. prcphistno = getArrayData ( contprcpspec, j, 10, "^", "|" ) + "|";
  593. clamdd = getArrayData ( contprcpspec, j, 11, "^", "|" );
  594. strContprcpspec = strContprcpspec + status + actorddd + actcretno + execprcpstatcd + prcpdd + execprcpno + execprcpuniqno + rcptdd + keyval + prcpno + prcphistno + clamdd;
  595. }
  596. model.setValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.selectedrow(i) + "]/contprcpspec", strContprcpspec );
  597. }
  598. }
  599. }
  600. }
  601. //종속처방 DC풀기 처리
  602. for ( var i=1; i < grd_bfprcplist.rows; i++ ){
  603. model.setValue ( "/root/prcpsrch/prcplist[" + i + "]/tempcol4", "" );
  604. //제목은 DC 불가
  605. var tempcol9 = model.getValue ( "/root/prcpsrch/prcplist[" + i + "]/tempcol9" );
  606. if ( tempcol9 == "N" || tempcol9 == "C" ) {
  607. continue;
  608. }
  609. var prcphistcd = model.getValue ( "/root/prcpsrch/prcplist[" + i + "]/prcphistcd" );
  610. if ( prcphistcd == "C" ) {
  611. continue;
  612. }
  613. if ( model.getValue ( "/root/prcpsrch/prcplist[" + i + "]/tempcol1" ) >= 400 && isNull(vAftClamDcFg) ){
  614. //종속처방에서 상태값이 400이상이면 d/c처리에서 뺀다.
  615. //단, 청구후 d/c가 아닐 경우만...by sonjy 20081027
  616. continue;
  617. } else {
  618. if ( model.getValue ( "/root/prcpsrch/prcplist[" + i + "]/chkcol") == "" ) {
  619. var inclprcpno = model.getValue ( "/root/prcpsrch/prcplist[" + i + "]/inclprcpno" );
  620. if ( inclprcpno > 0 ) { //종속처방 번호가 있는 것중
  621. var inclprcpno = model.getValue ( "/root/prcpsrch/prcplist[" + i + "]/inclprcpno" );
  622. for ( var j=1; j < grd_bfprcplist.rows; j++ ) {
  623. if ( model.getValue ( "/root/prcpsrch/prcplist[" + j + "]/chkcol") == "D" ){ //같은종속처방중 D가 아닌것은 D로 처리
  624. if ( inclprcpno == model.getValue ( "/root/prcpsrch/prcplist[" + j + "]/inclprcpno" )) {
  625. if ( eval(model.getValue ( "/root/prcpsrch/prcplist[" + j + "]/tempcol1" )) >= 400 && isNull(vAftClamDcFg) ){
  626. //종속처방에서 상태값이 400이상이면 d/c처리에서 뺀다.
  627. //단, 청구후 d/c가 아닐 경우만...by sonjy 20081027
  628. continue;
  629. } else {
  630. model.setValue ( "/root/prcpsrch/prcplist[" + j + "]/chkcol", "" );
  631. model.setValue ( "/root/prcpsrch/prcplist[" + j + "]/tempcol21", "" ); //SON20081022 청구 후 D/C
  632. //dc처방 색 변경 후 d/c를 풀경우 바탕색 재 변경 by 손주연 수정 시작 2008-06-30
  633. fSetChngBkColor(j ,"");
  634. //dc처방 색 변경 후 d/c를 풀경우 바탕색 재 변경 by 손주연 수정 종료
  635. }
  636. }
  637. }
  638. }
  639. }
  640. }
  641. }
  642. }
  643. grd_bfprcplist.refresh();
  644. }
  645. function fAppendDC() {
  646. var srcNodeList = model.instances(0).selectNodes("/root/prcpsrch/prcplist");
  647. var destNode = opener.model.instances(0).selectSingleNode("/root/prcpdc");
  648. var curRow = 0;
  649. for ( i=0; i < srcNodeList.length; i++ ){
  650. curRow = i + 1;
  651. if ( model.getValue( "/root/prcpsrch/prcplist[" + curRow + "]/chkcol" ) == "D" ) {
  652. model.setValue ( "/root/prcpsrch/prcplist[" + curRow + "]/status", "C" );
  653. destNode.appendChild(srcNodeList.item(i).cloneNode(true));
  654. }
  655. }
  656. }
  657. function fContPrcpDC() {
  658. var prcpcslcd = model.getValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.row + "]/prcpclscd" );
  659. var selectedRows = grd_bfprcplist.selectedRows;
  660. if ( selectedRows > 1 ) {
  661. messageBox ( "부분D/C는 멀티 선택", "E001" );
  662. return;
  663. }
  664. //제목은 DC 불가
  665. var tempcol9 = model.getValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.row + "]/tempcol9" );
  666. if ( tempcol9 == "N" ) {
  667. return;
  668. }
  669. //덤프된 처방은 d/c 할 수 없도로 처리. cha 20090525
  670. var cvrtbfprcp = model.getValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.row + "]/prcphistcd");
  671. if( cvrtbfprcp == "M"){
  672. messageBox ( "Dump된 처방은 D/C 할 수 없습니다.", "E" );
  673. return;
  674. }
  675. //by sonjy 2008-08-28 mset부분d/c시 하나만 d/c되는 경우 발생. 주사이나 종속처방이 아닌경우만 처리.
  676. if ( (prcpcslcd == "A6" || prcpcslcd == "F2" ) && (model.getValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.row + "]/inclprcpno") )=="0"
  677. ) {
  678. if ( model.getValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.row + "]/contprcpspec" ) != "-" ) {
  679. var prcpgenrflag = opener.model.getValue ( "/root/patflag/list/prcpgenrflag" );
  680. setParameter ( "SMMM02100_prcpgenrflag", prcpgenrflag );
  681. fPrcpModal ( "SPMMO11300", 100, 150 );
  682. } else {
  683. model.setValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.row + "]/chkcol", "D" );
  684. }
  685. } else {
  686. //model.setValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.row + "]/chkcol", "D" );
  687. //by sonjy 2008-08-28 mset부분d/c시 하나만 d/c되는 경우 발생.
  688. messageBox ( "부분D/C는 주사 및 재활 연속처방만 가능합니다.", "I" );
  689. }
  690. }
  691. /**
  692. * @desc : 환자급여변경
  693. * @param :
  694. * @id : grd_prcplist
  695. * @event : 오른쪽 마우스 클릭 함수
  696. * @return : void
  697. * @authur : 마정민 2007. 9. 10
  698. * @---------------------------------------------------
  699. */
  700. function fChngPayflagCd() {
  701. //setParameter ( "bfpayflagcd", model.getValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.row + "]/payflagcd"));
  702. fPrcpModal ( "SPMMO14000", 100, 150 );
  703. var payflagcd = "";
  704. if ( isNull(getParameter ( "payflagcd" ))){
  705. return;
  706. } else {
  707. payflagcd = getParameter ( "payflagcd" );
  708. }
  709. var selectedRows = grd_bfprcplist.selectedRows;
  710. model.removeNodeset ( "/root/prcppaychg/prcppaychglist" );
  711. var row = 0;
  712. for (var i=0; i< selectedRows; i++) {
  713. var orgpayflagcd = model.getValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.selectedrow(i) + "]/payflagcd");
  714. if(isNull(orgpayflagcd)) continue; // 처방 입력 설명행은 체크 하지 않는다. 2013.12.20
  715. if ( payflagcd == orgpayflagcd ) {
  716. var prcpcd = model.getValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.selectedrow(i) + "]/prcpcd");
  717. var prcpnm = model.getValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.selectedrow(i) + "]/prcpnm");
  718. messageBox ( "[" + prcpcd + ":" + prcpnm + "] " + "처방은 변경된 급비가", "I004" );
  719. continue;
  720. }
  721. row++;
  722. appendChildPrcp ( "/root/reset/prcppaychglist", "/root/prcppaychg", "main" );
  723. var prcpgenrflag = opener.model.getValue ( "/root/patflag/list/prcpgenrflag" );
  724. model.setValue ( "/root/prcppaychg/prcppaychglist[" + row + "]/ioflag", prcpgenrflag );
  725. model.setValue ( "/root/prcppaychg/prcppaychglist[" + row + "]/pid", opener.model.getValue ( "/root/paminfo/list/pid" ));
  726. var orddd = "";
  727. if ( prcpgenrflag == "O" ){ //외래일때
  728. orddd = opener.model.getValue ( "/root/paminfo/list/orddd" );
  729. } else {
  730. orddd = opener.model.getValue ( "/root/paminfo/list/indd" );
  731. }
  732. model.setValue ( "/root/prcppaychg/prcppaychglist[" + row + "]/orddd", orddd);
  733. model.setValue ( "/root/prcppaychg/prcppaychglist[" + row + "]/cretno", opener.model.getValue ( "/root/paminfo/list/cretno" ));
  734. model.setValue ( "/root/prcppaychg/prcppaychglist[" + row + "]/instcd", opener.model.getValue ( "/root/paminfo/list/instcd" ));
  735. var prcppkspec = model.getValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.selectedrow(i) + "]/prcppkspec") + "^";
  736. var prcpdd = getArrayData ( prcppkspec, 0, 0, "^", "|" );
  737. var prcpno = getArrayData ( prcppkspec, 0, 1, "^", "|" );
  738. var prcphistno = getArrayData ( prcppkspec, 0, 2, "^", "|" );
  739. model.setValue ( "/root/prcppaychg/prcppaychglist[" + row + "]/prcpdd", prcpdd);
  740. model.setValue ( "/root/prcppaychg/prcppaychglist[" + row + "]/prcpno", prcpno);
  741. model.setValue ( "/root/prcppaychg/prcppaychglist[" + row + "]/payflagcd", payflagcd);
  742. model.setValue ( "/root/prcppaychg/prcppaychglist[" + row + "]/deptcd", getUserInfo("dutplcecd"));
  743. model.setValue ( "/root/prcppaychg/prcppaychglist[" + row + "]/userid", getUserInfo ("userid"));
  744. model.setValue ( "/root/prcppaychg/prcppaychglist[" + row + "]/prcphistno", prcphistno);
  745. model.setValue ( "/root/prcppaychg/prcppaychglist[" + row + "]/orgpayflagcd", orgpayflagcd);
  746. }
  747. var saveInfo = model.instances(0).selectNodes( "/root/prcppaychg/prcppaychglist" );
  748. if ( saveInfo.length > 0 ) {
  749. model.setValue ( "/root/send/cond1", getNodeListCSV(saveInfo));
  750. if (submit( "TXMMO02101", false )){
  751. var errNode = model.instances(0).selectNodes ( "/root/savetemp/prcperrlist[flag='9']" );
  752. if (errNode != null && errNode.length > 0) {
  753. var xpt = window.screenleft + 200;
  754. var ypt = window.screenTop + 100;
  755. var coord = getRelativeCoordinate ( xpt, ypt );
  756. var mon = coord[0];
  757. xpt = coord[1];
  758. ypt = coord[2];
  759. modal ( "SPMMO21501", mon, xpt, ypt, "prcpdetl", "/root/savetemp", "/root/result", "", false ); //오류팝업
  760. }
  761. opener.javascript.fInitPaminfo();
  762. //fInitialize("save"); //오른쪽 마우스 메뉴 삭제 오류 수정 by sonjy 20091030
  763. if(row > 0){ //급비 변경 후, opener에 savertninfo가 없는 경우 전처방이 제대로 refresh안됨 (2010.03.02 JJE)
  764. fInitialize();
  765. model.refresh();
  766. }
  767. }
  768. setParameter ( "payflagcd", "");
  769. }
  770. }
  771. /**
  772. * @desc : 심사팀에서 분리청구를 위해 무산정 처리할경우 사용 (2014.03.25)
  773. * @param :
  774. * @return :
  775. * @authur : 엄영만 2014.03.25
  776. * @---------------------------------------------------
  777. */
  778. function fFreeCalcs() {
  779. var selectedRows = grd_bfprcplist.selectedRows;
  780. if(selectedRows < 1) {
  781. messageBox("선택된 처방이 없습니다. ", "I" );
  782. return;
  783. }
  784. if(selectedRows > 1) {
  785. messageBox("한건만 선택 하세요.", "I" );
  786. return;
  787. }
  788. var sPrcpHistCd = model.getValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.row + "]/prcphistcd" );
  789. if(sPrcpHistCd != "O") {
  790. messageBox ("DC 또는 반환 요청된 처방은 무산정 처리가 불가능 합니다. ", "E" );
  791. return;
  792. }
  793. var sPrcpGenrFlag = model.getValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.row + "]/prcpgenrflag" );
  794. if(sPrcpGenrFlag != "O") {
  795. messageBox ("외래처방에 대해서만 무산정 처리가 가능 합니다. ", "E" );
  796. return;
  797. }
  798. var sPrcpPkSpec = model.getValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.row + "]/prcppkspec" );
  799. setParameter ( "SSPMMO14001_Param", sPrcpPkSpec );
  800. fPrcpModal ( "SPMMO14001", 100, 150 );
  801. return;
  802. }
  803. function setPrcpColor() {
  804. //grd_bfprcplist.autoResize = true ;
  805. //grd_bfprcplist.rebuild();
  806. var srcNodeList = model.instances(0).selectNodes ( "/root/prcpsrch/prcplist" );
  807. for ( var i=1; i <= srcNodeList.length; i++ ) {
  808. var colorArray = model.getValue ( "/root/prcpsrch/prcplist[" + i + "]/tempcol10" ) + "^";
  809. var backgroundcolor = getArrayData (colorArray, 0, 0, "^", "|" );
  810. var fontcolor = getArrayData (colorArray, 0, 1, "^", "|" );
  811. var boldflag = getArrayData (colorArray, 0, 2, "^", "|" );
  812. if ( !isNull(backgroundcolor)) {
  813. grd_bfprcplist.rowstyle(i, "data", "background-color") = backgroundcolor;
  814. } else {
  815. grd_bfprcplist.rowstyle(i, "data", "background-color") = "#ffffff";
  816. }
  817. if ( !isNull(fontcolor)) {
  818. grd_bfprcplist.rowstyle(i, "data", "color") = fontcolor;
  819. } else {
  820. grd_bfprcplist.rowstyle(i, "data", "color") = "#000000";
  821. }
  822. if ( !isNull(boldflag)) {
  823. grd_bfprcplist.rowstyle(i, "data", "font-weight") = boldflag;
  824. } else {
  825. grd_bfprcplist.rowstyle(i, "data", "font-weight") = "normal";
  826. }
  827. //if ( model.getValue ( "/root/prcpsrch/prcplist[" + i + "]/prcphistcd" ) == "E" ) {
  828. // grd_bfprcplist.rowstyle(i, "data", "background-color") = "#ececec";
  829. //} else if ( !isNull(model.getValue ( "/root/prcpsrch/prcplist[" + i + "]/tempcol10" ))) {
  830. // grd_bfprcplist.rowstyle(i, "data", "background-color") = model.getValue ( "/root/prcpsrch/prcplist[" + i + "]/tempcol10" );
  831. //} else {
  832. // grd_bfprcplist.rowstyle(i, "data", "background-color") = "#ffffff";
  833. //}
  834. }
  835. }
  836. /**
  837. * @desc : D/C처방 오류처방 색변경
  838. * @param :
  839. * @id : grd_bfprcplist
  840. * @event : D/C처방 오류발생시
  841. * @return : void
  842. * @authur : 손주연 2008. 6. 30
  843. * @---------------------------------------------------
  844. */
  845. function fSetErrDCRow(DcErrArray) {
  846. if( DcErrArray == null || DcErrArray.length < 1) return ;
  847. var lstDC = new Array();
  848. lstDC = DcErrArray ;
  849. var bfNode = "/root/prcpsrch/prcplist";
  850. var DcNode = model.instances(0).selectNodes ( bfNode ) ;
  851. for ( var i = 0 ; i < lstDC.length ; i++){
  852. for( var j = 1 ; j <= DcNode.length ; j++) {
  853. if( model.getValue( bfNode + "[" + j + "]/chkcol" ) != "D" ) continue ;
  854. if( model.getValue(bfNode + "[" + j + "]/prcppkspec") == lstDC[i] ){
  855. fSetChngBkColor( j, "#ff6600" ) ;
  856. }
  857. }
  858. }
  859. //setPrcpColor();
  860. grd_bfprcplist.refresh();
  861. }
  862. /**
  863. * @desc : 전처방 배경색 바꾸기
  864. * @param :
  865. * @id : grd_bfprcplist
  866. * @event :
  867. * @return : void
  868. * @authur : 손주연 2008. 6. 30
  869. * @---------------------------------------------------
  870. */
  871. function fSetChngBkColor( iRow , chngColor ){
  872. if( iRow < 0 ) return ;
  873. var colorArray = model.getValue ( "/root/prcpsrch/prcplist[" + iRow + "]/tempcol10" ) + "^";
  874. if( isNull(chngColor) ){
  875. chngColor = getArrayData (colorArray, 0, 0, "^", "|" );
  876. }
  877. //var fontcol = getArrayData (colorArray, 0, 1, "^", "|" );
  878. //var boldflag = getArrayData (colorArray, 0, 2, "^", "|" );
  879. //colorArray = chngColor + "|" + fontcol + "|" + boldflag ;
  880. //model.setValue("/root/prcpsrch/prcplist[" + iRow + "]/tempcol10", colorArray );
  881. grd_bfprcplist.rowstyle(iRow , "data", "background-color") = chngColor;
  882. }
  883. /**
  884. * @desc : 오른쪽 마우스 클릭 청구후 D/C
  885. * @ : 신규일 때는 removeNode
  886. * @ : 수정중일 때 원복시킨 후 삭제, D/C 표시
  887. * @ : 삭제, D/C 원복시킬려면 ? 오른쪽 마우스에 삭제, D/C 취소
  888. * @ : 삭제 후 D/C는 불가
  889. * @param :
  890. * @id : grd_prcplist
  891. * @event : 오른쪽 마우스 클릭 삭제
  892. * @return : void
  893. * @authur :
  894. * @---------------------------------------------------
  895. */
  896. function fAftDCRow() {
  897. fDCRow("C");
  898. }
  899. /**
  900. * @desc : 메인화면 변경
  901. * @param :
  902. * @return :
  903. * @authur : 오지훈
  904. * @---------------------------------------------------
  905. */
  906. function fChngMainScrn() {
  907. var mainobj = getMainViewer();
  908. var mainscrnid = mainobj.javascript.getScreenID(); //메인화면의 기록지 ID
  909. var addprcpflag = opener.model.getValue("/root/init/addprcpflag"); //시행부서화면 여부
  910. var fstopenflag = opener.model.getValue("/root/init/fstopenflag"); //처방화면이 최초 생성 여부
  911. var bfprcpload = opener.model.getValue("/root/init/bfprcpload"); //전처방화면 최초 생성 여부
  912. var cpflag = opener.model.getValue("/root/cp"); //CP화면여부
  913. var curordpatobj = getOpenWindow("SMMMO04100");
  914. if(curordpatobj != null){
  915. var ordrecflag = curordpatobj.model.getValue("/root/main/cond/ordrecflag"); //OCS 체크여부
  916. var chngflag = curordpatobj.model.getValue("/root/main/cond/chngflag"); //OCS 체크여부
  917. }
  918. if(mainobj != null){
  919. var dutplcecd = getUserInfo("dutplcecd"); //사용자부서
  920. var operation = getGlobalVariable("operation"); //수술정보
  921. var wndid = "SMMMR00100"; //진료기록화면이 default
  922. if(addprcpflag != "Y"){ //시행부서화면이 아닌 경우에만 메인화면 변경 로직 처리
  923. if(fstopenflag !="N" || chngflag == "Y"){ //처방화면이 최초로 열린 경우, 진료대상자의 ocs체크값이 변경된 경우에는 메인화면 변경
  924. if(bfprcpload != "Y"){ //전처방화면이 로딩된 여부,(단순히 tab변경인 경우에는 메인화면 변경 로직을 처리하지 않음
  925. if(cpflag == "Y"){ //CP화면인 경우, CP초기화 후, 메인화면 변경 수행
  926. var cpendflag = opener.javascript.fReconstruct();
  927. if(cpendflag == "True"){
  928. }
  929. }
  930. //if(cpendflag == "True"){ //CPMain의 fReconstruct()가 완료된 이후 진료기록 변경로직을 수행
  931. if(dutplcecd == "2090000000" || dutplcecd == "2090300000"){ //사용자부서가 마취통증의학과, 통증클리닉인 경우
  932. if(operation.length > 0){ //수술환자리스트에서 환자 선택된 경우, 메인화면은 '마취환자기록' loading
  933. wndid = "SMMMR03700";
  934. }else{
  935. if(ordrecflag == "Y"){
  936. wndid = "SMMMB08100";
  937. }
  938. }
  939. }else{
  940. if(ordrecflag == "Y"){
  941. wndid = "SMMMB08100";
  942. }
  943. }
  944. opener.model.setValue("/root/init/bfprcpload" , "Y");
  945. opener.model.setValue("/root/init/fstopenflag", "N");
  946. if(curordpatobj != null){
  947. curordpatobj.model.setValue("/root/main/cond/chngflag", "N"); //OCS 체크여부
  948. }
  949. if(mainscrnid == wndid){
  950. if(wndid == "SMMMR03700"){
  951. mainobj.javascript.fFormInit();
  952. }else{
  953. mainobj.javascript.fInitRecPamInfo();
  954. }
  955. }else{
  956. if(cpflag != "Y"){
  957. mainobj.javascript.navigate(wndid);
  958. }
  959. }
  960. //}
  961. }else{ //전처방화면이 최초 생성된 경우, bfprcpload를 Y로 변경, 추후 tab변경시 메인화면 변경이 되지 않게함
  962. opener.model.setValue("/root/init/bfprcpload", "Y");
  963. }
  964. }
  965. }
  966. }
  967. }
  968. function fBtnInit(value){
  969. if (value == "A") {
  970. btn_bfinit.visible = true;
  971. btn_bfreinit.visible = false;
  972. } else if (value == "B") {
  973. btn_bfinit.visible = false;
  974. btn_bfreinit.visible = true;
  975. } else {
  976. btn_bfinit.visible = false;
  977. btn_bfreinit.visible = false;
  978. }
  979. //body.attribute ( "opacity" ) = "50";
  980. }
  981. /**
  982. * @desc : 원외처방 사후관리 팝업 호출, 최초 1회만 (2010.01.18 JJE)
  983. * @param :
  984. * @return :
  985. * @authur : 전지은, submission은 약제(뱍유미) 제공
  986. * @---------------------------------------------------
  987. */
  988. function fGetHosOutPrcpResn(){
  989. var prcpgenrflag = opener.model.getValue ( "/root/patflag/list/prcpgenrflag" );
  990. var orddd = "";
  991. if (prcpgenrflag == "O" || prcpgenrflag == "S"){
  992. orddd = opener.model.getValue ( "/root/paminfo/list/orddd" );
  993. }else{
  994. orddd = opener.model.getValue ( "/root/paminfo/list/indd" );
  995. }
  996. model.makeNode("/root/send/hosoutprcpresninfo");
  997. model.makeNode("/root/hosoutprcpresninfo/result");
  998. model.makeValue("/root/send/hosoutprcpresninfo/pid" , opener.model.getValue ( "/root/paminfo/list/pid" ));
  999. model.makeValue("/root/send/hosoutprcpresninfo/cretno" , opener.model.getValue ( "/root/paminfo/list/cretno" ));
  1000. model.makeValue("/root/send/hosoutprcpresninfo/orddeptcd", opener.model.getValue ( "/root/paminfo/list/orddeptcd" ));
  1001. model.makeValue("/root/send/hosoutprcpresninfo/orddd" , orddd);
  1002. model.makeValue("/root/send/hosoutprcpresninfo/prcpdd" , model.getValue("/root/init/bfprcpdd"));
  1003. if(submit("TRMMO02102", false)){
  1004. var rtnMsg = instance1.selectSingleNode("/root/hosoutprcpresninfo/result/msg");
  1005. if(rtnMsg != null){
  1006. messageBox(rtnMsg.text, "I");
  1007. }
  1008. }
  1009. model.removeNodeSet("/root/send/hosoutprcpresninfo");
  1010. model.removeNodeSet("/root/hosoutprcpresninfo");
  1011. }
  1012. /**
  1013. * @desc : 원격판독요청 (TPLUS 원격판독 임시사업)
  1014. * @param :
  1015. * @return :
  1016. * @authur : 엄영만 2015.05.11
  1017. * @---------------------------------------------------
  1018. */
  1019. function fReqPacs(){
  1020. var selectedRows = grd_bfprcplist.selectedRows;
  1021. if(selectedRows < 1) {
  1022. messageBox ("선택된 처방이 없습니다.", "I004" );
  1023. return;
  1024. }
  1025. if(selectedRows > 1) {
  1026. messageBox ("하나의 처방만 선택하세요.", "I004" );
  1027. return;
  1028. }
  1029. var sRowKey = model.getValue ( "/root/prcpsrch/prcplist[" + grd_bfprcplist.selectedrow(0) + "]/rowkey");
  1030. if(isNull(sRowKey)) {
  1031. messageBox ("선택된 처방이 없습니다.", "I004");
  1032. return;
  1033. }
  1034. model.makeNode("/root/send/reqpacs");
  1035. model.makeNode("/root/reqpacs/result");
  1036. model.makeValue("/root/send/reqpacs/rowkey" , sRowKey);
  1037. if(submit("TXMMO02102", false)){
  1038. var rtnMsg = instance1.selectSingleNode("/root/reqpacs/result/msg");
  1039. if(rtnMsg != null){
  1040. messageBox(rtnMsg.text, "I");
  1041. }
  1042. }
  1043. model.removeNodeSet("/root/send/reqpacs");
  1044. model.removeNodeSet("/root/reqpacs");
  1045. }