SPMMO08800.xjs 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <Script type="xscript4.0"><![CDATA[/***************************************************************************************
  3. * System Name : KNUH2.0
  4. * Job Name : EMR
  5. * Creator :
  6. * Make Date : 2015-02-05
  7. * Description :
  8. *---------------------------------------------------------------------------------------
  9. * Modify Date Modifier Modify Description
  10. *---------------------------------------------------------------------------------------
  11. * 2015-02-05 Live Converter TF->XP
  12. *
  13. *---------------------------------------------------------------------------------------
  14. ****************************************************************************************/
  15. var SELECTED_OPROOMCD = "";
  16. var SELECTED_GRDOBJ_ID = "";
  17. var gSTATUS_VAL = ""; //status
  18. var gOPROOMCD_VAL = ""; //oproomcd
  19. var gOPREGSTNO_VAL = ""; //opregstno
  20. var gOPREGSTHISTNO_VAL = ""; //opregsthistno
  21. var gPID = ""; //pid
  22. var gOPSCHEDD = ""; //opschedd
  23. var gPERFDEPTCD = ""; //perfdeptcd
  24. var gOPFROMTMCD = "";
  25. var gOPENDTMCD = "";
  26. var gQUERYFLAG = "";
  27. var gOPSTATCD = ""; //opstatcd
  28. var g_startpos = 0; //시작점
  29. var g_endpos = 0; //끝점
  30. var g_choiceflag = "N";//선택여부
  31. var nextmin = "";
  32. //=======================================================================================
  33. // Function
  34. //---------------------------------------------------------------------------------------
  35. /****************************************************************************************
  36. * Function : fInitOpScheTime
  37. * Description : 수술예약시간 초기화
  38. * : -마취스케줄관리 tbl의 시작, 종료시간 조회 정보를 기반으로
  39. * : -그리드의 시간표시 범위를 설정함
  40. * Argument :
  41. * return type :
  42. * Creator :
  43. ****************************************************************************************/
  44. function fInitOpScheTime(){
  45. fReqRegOpTime();
  46. }
  47. /****************************************************************************************
  48. * Function : fReqRegOpTime
  49. * Description : 정규수술시간 조회
  50. * Argument :
  51. * return type :
  52. * Creator :
  53. ****************************************************************************************/
  54. function fReqRegOpTime(){
  55. if(gOPSCHEDD == ""){
  56. var nextdate = utlf_getCurrentDate();
  57. }else{
  58. var nextdate = gOPSCHEDD;
  59. }
  60. ds_send_reqdata.clear();
  61. dsf_makeValue(ds_send_reqdata,"nextdate","string",nextdate);
  62. var oParam = {};
  63. oParam.id = "TRMMO05705";
  64. oParam.service = "prcpmngtapp.OpMngt";
  65. oParam.method = "reqGetOpScheRegTimeList";
  66. oParam.inds = "req=ds_send_reqdata";
  67. oParam.outds = "ds_main_scheregtimelist=scheregtimelist";
  68. oParam.async = false;
  69. oParam.callback = "cf_TRMMO05705";
  70. tranf_submit(oParam);
  71. }
  72. function cf_TRMMO05705(sSvcId, nErrorCode, sErrorMsg) {
  73. if(nErrorCode < 0) return;
  74. else {
  75. // var xml = instance1.selectSingleNode("/root/main/scheregtimelist/scheregtimelist");
  76. var rsltcnt = ds_main_scheregtimelist.rowcount
  77. if(rsltcnt > 0){
  78. dsf_makeValue(ds_tmp,"regtmflag","string","N");
  79. dsf_makeValue(ds_main_scheregtimelist,"regfromtm","string","08");
  80. dsf_makeValue(ds_main_scheregtimelist,"regendtm" ,"string","17");
  81. } else {
  82. dsf_makeValue(ds_tmp,"regtmflag","string","Y");
  83. }
  84. }
  85. }
  86. /****************************************************************************************
  87. * Function : fInitialize_SMMMO08800
  88. * Description : 수술예약시간설정 화면 초기화
  89. * Argument :
  90. * return type :
  91. * Creator :
  92. ****************************************************************************************/
  93. function fInitialize_SMMMO08800(){
  94. var param = opener.frmf_getParameter("SPMMO08800_param");
  95. if(utlf_isNull(param)){
  96. sysf_messageBox("수술예약정보를 찾을 수 ", "I004");
  97. this.close();
  98. }
  99. fDispRegOpTime(grd_optimelist1); //grid1 정규시간설정
  100. fDispRegOpTime(grd_optimelist2); //grid2 정규시간설정
  101. fDispRegOpTime(grd_optimelist3); //grid3 정규시간설정
  102. param = param.split("▦");
  103. gSTATUS_VAL = param[0];
  104. gOPROOMCD_VAL = param[1];
  105. gOPREGSTNO_VAL = param[2];
  106. gOPREGSTHISTNO_VAL = param[3];
  107. gPID = param[4];
  108. gOPSCHEDD = param[5];
  109. gPERFDEPTCD = param[6];
  110. gOPFROMTMCD = param[7];
  111. gOPENDTMCD = param[8];
  112. gQUERYFLAG = param[9];
  113. gPERFDRID = param[10];
  114. gOPSTATCD = param[11];
  115. SELECTED_OPROOMCD = gOPROOMCD_VAL;
  116. // reqHardCodeInfo("/root/send/reqdata", "/root/init/hardcd", 18);
  117. lf_reqHardCodeInfo(ds_init_hardcd, 18);
  118. var hardcd = ds_init_hardcd.getColumn(0,"hardcd");
  119. if(sysf_getUserInfo("dutplcecd")== hardcd || sysf_getUserInfo("userid") == "EMR"){ //마취통증의학과의 경우 모든 수술방에 대해 예약입력 가능 권한을 부여
  120. lf_reqOpRoomList(utlf_getCurrentDate(), ds_init_oproomlist, ds_init_alloproomlist, "total"); //전체 수술실 조회
  121. }else{
  122. lf_reqOpRoomList(gOPSCHEDD, ds_init_oproomlist, ds_init_alloproomlist, "detl", gPERFDEPTCD, gPERFDRID); //수술방 조회(일별로 예약가능한)
  123. }
  124. var depthngnm = "";
  125. // var oproomnode= model.instance1.selectSingleNode("/root/init/oproomlist/oproomlist");
  126. var oprommcnt = ds_init_oproomlist.rowcount;
  127. if(oprommcnt == 0){
  128. sysf_messageBox("[" + depthngnm + "]등록된 수술방이", "I004");
  129. this.close();
  130. return;
  131. }
  132. if(gSTATUS_VAL == "r"){ //status 조회인 경우, grdobj를 disabled로 설정
  133. grd_optimelist1.enable = false;
  134. grd_optimelist2.enable = false;
  135. grd_optimelist3.enable = false;
  136. } else if(gSTATUS_VAL == "x") {
  137. // caption7.visible = "visible";
  138. // combo1.visible = "visible";
  139. }
  140. //sysf_trace("param/hardcd/oprommcnt/gSTATUS_VAL = "+param+"/"+hardcd+"/"+oprommcnt+"/"+gSTATUS_VAL);
  141. fSetOpRoomNM(Math.ceil(fFindInstanceCount()/3)); //수술방명 설정
  142. fReqOpRoomScheList(); //수술방 스케줄 조회
  143. fSetOpScheTimeGrd(); //스케줄 표시
  144. if(gSTATUS_VAL == "i" || gSTATUS_VAL == "u"){ //status 가 신규인 경우,
  145. if(gOPFROMTMCD != "" && gOPENDTMCD != ""){ //시작, 종료시간이 설정된 경우에만 실행
  146. g_choiceflag = "X";
  147. fFindGridID();
  148. // grdobj = document.controls.item(SELECTED_GRDOBJ_ID);
  149. grdobj = components[SELECTED_GRDOBJ_ID];
  150. if(!utlf_isNull(grdobj)) { //grid object가 null이 아닌 경우에만 표시
  151. fChkOpScheTime(grdobj, gOPFROMTMCD.substr(0,4), gOPENDTMCD.substr(0,4), "", "#0000ff"); //grid에 표시될 시작, 종료시간을 check
  152. }
  153. }
  154. }
  155. frmf_createPopupMenu("popmenu"
  156. ,"fCnclOpScheTime"
  157. ,[{id: "D", level: "0", title: "삭제"}] //항목추가
  158. );
  159. }
  160. /****************************************************************************************
  161. * Function : fDispRegOpTime
  162. * Description : 정규수술시간 조회
  163. * Argument : grdobj : 대상 그리드
  164. * return type :
  165. * Creator :
  166. ****************************************************************************************/
  167. function fDispRegOpTime(grdobj){
  168. var regfromtm = ds_main_scheregtimelist.getColumn(0,"regfromtm");
  169. var regendtm = ds_main_scheregtimelist.getColumn(0,"regendtm");
  170. var totcol = grdobj.getFormatColCount();
  171. for(var i = 2; i < totcol; i++){ //정규시작 시간까지 column을 hidden
  172. var cellidx = Math.ceil((i+5)/6); // col index로 cell index구함
  173. var time = grdobj.getCellText(-1, cellidx);
  174. if(time == regfromtm){
  175. break;
  176. } else {
  177. grdobj.setFormatColProperty(i,"size",0);
  178. }
  179. }
  180. for(var j = i; i < totcol; i++){ //정규종료 시간까지 column을 visible
  181. var cellidx = Math.ceil((i+5)/6); // col index로 cell index구함
  182. var time = grdobj.getCellText(-1, cellidx);
  183. if(time == regendtm){
  184. break;
  185. } else {
  186. grdobj.setFormatColProperty(i,"size",25);
  187. }
  188. }
  189. // 2008.11.19 종료시간 이후도 hidden 되도록
  190. for(var x = i; i < totcol; i++){ //정규종료 시간까지 column을 hidden
  191. var cellidx = Math.ceil((i+5)/6); // col index로 cell index구함
  192. var time = grdobj.getCellText(-1, cellidx);
  193. grdobj.setFormatColProperty(i,"size",0);
  194. }
  195. // (e)
  196. }
  197. /****************************************************************************************
  198. * Function : fSetOpRoomNM
  199. * Description : 수술방명 설정
  200. * Argument : curcnt : 들어갈 수술방
  201. * return type :
  202. * Creator :
  203. ****************************************************************************************/
  204. function fSetOpRoomNM(curcnt){
  205. var roomcnt = ds_init_oproomlist.rowcount;
  206. fSetOpRoomCnt(curcnt, roomcnt);
  207. var curcnt = ds_main_cond.getColumn(0,"curcnt");
  208. var tmpval = (curcnt - 1) * 3; // 1, 4, 7..순으로 수술방을 표현하기 위함
  209. for(var i = 1; i <= 3; i++){
  210. // var xmlnode = model.instance1.selectSingleNode("/root/init/oproomlist/oproomlist[" + (i + tmpval) + "]/oproomnm");
  211. var xmlnode = ds_init_oproomlist.getColumn(i+tmpval-1,"oproomnm");
  212. // sysf_trace(ds_init_oproomlist.saveXML());
  213. // alert(xmlnode);
  214. if(utlf_isNull(xmlnode)){
  215. continue;
  216. }
  217. var oproomnm = ds_init_oproomlist.getColumn(i + tmpval-1,"oproomnm");
  218. var oproomcd = ds_init_oproomlist.getColumn(i + tmpval-1,"oproomcd");
  219. var grdid = "grd_optimelist" + "" + i + "";
  220. // var grdobj = document.controls.item(grdid);
  221. var grdobj = components[grdid];
  222. if(utlf_isNull(grdobj)){break;}
  223. grdobj.setCellProperty("Head",0,"text",oproomnm); //수술방명 설정
  224. //grdobj.setCellProperty("Head",0,"text",oproomnm);
  225. grdobj.setCellProperty("Head",1,"text",oproomcd); //수술방코드 설정
  226. //grdobj.setCellProperty("Head",1,"text",oproomcd);
  227. }
  228. // if(utlf_isNull(grdobj)){grdobj.refresh();}
  229. }
  230. /****************************************************************************************
  231. * Function : fReqOpRoomScheList
  232. * Description : 수술방명 설정
  233. * Argument :
  234. * return type :
  235. * Creator :
  236. ****************************************************************************************/
  237. function fReqOpRoomScheList(){
  238. ds_send_reqdata.clear();
  239. dsf_makeValue(ds_send_reqdata,"opschedd" ,"string", gOPSCHEDD);
  240. dsf_makeValue(ds_send_reqdata,"perfdeptcd","string", gPERFDEPTCD);
  241. dsf_makeValue(ds_send_reqdata,"queryflag" ,"string", gQUERYFLAG);
  242. dsf_makeValue(ds_send_reqdata,"regtmflag" ,"string", ds_tmp.getColumn(0,"regtmflag"));
  243. if(gQUERYFLAG == "oprsrv" && gSTATUS_VAL == "u"){ //시간설정화면에서 수술예약정보의 데이터를 수정하는 경우
  244. dsf_makeValue(ds_send_reqdata,"oprsrvno" ,"string", gOPREGSTNO_VAL); //해당 환자의 수술예약정보는 조회하지 않음. 화면에 표시는 parameter로 처리
  245. }
  246. // submit("TRMMO08801");
  247. var oParam = {};
  248. oParam.id = "TRMMO08801";
  249. oParam.service = "prcpmngtapp.OpMngt";
  250. oParam.method = "reqGetOpScheTimeInfo";
  251. oParam.inds = "req=ds_send_reqdata";
  252. oParam.outds = "ds_main_optimelist=optimelist";
  253. oParam.async = false;
  254. oParam.callback = "";
  255. tranf_submit(oParam);
  256. }
  257. /****************************************************************************************
  258. * Function : fSetOpScheTimeGrd
  259. * Description : 수술방 시간 그리드 표시
  260. * Argument :
  261. * return type :
  262. * Creator :
  263. ****************************************************************************************/
  264. function fSetOpScheTimeGrd(){
  265. var totcnt = ds_main_optimelist.rowcount; //수술방 시간 전체 count
  266. for(var i = 0 ; i <= totcnt ; i++){
  267. var oproomcd = ds_main_optimelist.getColumn(i,"oproomcd"); //oproomcd를 구한후,
  268. var opfromtmcd = ds_main_optimelist.getColumn(i,"opfromtmcd"); //opfromtmcd
  269. var opendtmcd = ds_main_optimelist.getColumn(i,"opendtmcd"); //opendtmcd
  270. var usernm = ds_main_optimelist.getColumn(i,"usernm"); //usernm
  271. var opregstno = ds_main_optimelist.getColumn(i,"opregstno"); //opregstno
  272. var opregsthistno = ds_main_optimelist.getColumn(i,"opregsthistno"); //opregsthistno
  273. var pid = ds_main_optimelist.getColumn(i,"pid"); //pid
  274. for(var j = 1; j < 4; j++){
  275. var grdid = "grd_optimelist" + "" + j + "";
  276. // var grdobj = document.controls.item(grdid);
  277. var grdobj = components[grdid];
  278. if(oproomcd == grdobj.getCellText(-1,1)){ //grid에 설정된 oproomcd와 동일한 경우, 해당 정보를 setting
  279. if(gSTATUS_VAL == "u" && opregstno == gOPREGSTNO_VAL && opregsthistno == gOPREGSTHISTNO_VAL && pid == gPID){
  280. var opfromtmcd = gOPFROMTMCD.substr(0,4);
  281. var opendtmcd = gOPENDTMCD.substr(0,4);
  282. var color = "#0000ff";
  283. usernm = "";
  284. }else{
  285. var opfromtmcd = opfromtmcd.substr(0,4);
  286. var opendtmcd = opendtmcd.substr(0,4);
  287. var color ="#00ff00";
  288. }
  289. fChkOpScheTime(grdobj, opfromtmcd, opendtmcd, usernm, color); //grid에 표시될 시작, 종료시간을 check
  290. }
  291. }
  292. }
  293. }
  294. /****************************************************************************************
  295. * Function : fFindGridID
  296. * Description : rd id 찾기, global변수에 id 설정
  297. * Argument :
  298. * return type :
  299. * Creator :
  300. ****************************************************************************************/
  301. function fFindGridID(){
  302. for(var i = 1 ; i <= 3; i++){ //grid id찾기
  303. var grdid = "grd_optimelist" + i + "";
  304. var tmpobj = components[grdid];
  305. if(tmpobj.getCellText(-1, 1) == SELECTED_OPROOMCD){
  306. SELECTED_GRDOBJ_ID = grdid;
  307. }
  308. }
  309. }
  310. /****************************************************************************************
  311. * Function : fChkOpScheTime
  312. * Description : 수술방 시간 그리드 표시
  313. * Argument :
  314. * return type :
  315. * Creator :
  316. ****************************************************************************************/
  317. function fChkOpScheTime(grdobj, fromtime, endtime, usernm, color){
  318. for(var i = 2; i < grdobj.getFormatColCount(); i++){
  319. var cellidx = Math.ceil((i+5)/6); // col index로 cell index구함
  320. var header = fGetOpSchdHeaderInfo(grdobj, cellidx, i+15); //그리드 상단 시간정보 조회
  321. if(header == fromtime){ //시작시간과 같은 경우 startpos 설정
  322. var startpos = i;
  323. }
  324. if(header == endtime){ //종료시간과 같은 경우 endpos 설정
  325. var endpos = i;
  326. }
  327. }
  328. fPaintGrdColor(grdobj, startpos, endpos, usernm, color);
  329. }
  330. /****************************************************************************************
  331. * Function : fGetOpSchdHeaderInfo
  332. * Description : 수술방 그리드 상단시간 정보 조회
  333. * Argument : grdobj : grid ID
  334. * : cellh : 시표시 부분 cell index
  335. * : cellm : 분표시 부분 cell index
  336. * return type :
  337. * Creator :
  338. ****************************************************************************************/
  339. function fGetOpSchdHeaderInfo(grdobj, cellh, cellm){
  340. var hour = grdobj.getCellText(-1, cellh);
  341. var minutes= grdobj.getCellText(-1, cellm);
  342. if(minutes == "00"){
  343. nextmin = "10";
  344. }else if(minutes == "20"){
  345. nextmin = "30";
  346. }else if(minutes == "40"){
  347. nextmin = "50";
  348. }
  349. if(minutes == ""){
  350. minutes = nextmin;
  351. }
  352. var header = hour + "" + minutes;
  353. return header;
  354. }
  355. /****************************************************************************************
  356. * Function : fGetOpSchdHeaderInfo
  357. * Description : 그리드 색깔 설정 및 데이터 입력
  358. * Argument : grdobj : grid ID
  359. * : startpos : 시작 컬럼index
  360. * : endpos : 종료 컬럼index
  361. * : usernm : Text 표기할 데이터
  362. * : color : 설정할 색
  363. * return type :
  364. * Creator :
  365. ****************************************************************************************/
  366. function fPaintGrdColor(grdobj, startpos, endpos, usernm, color){
  367. for(var i = startpos; i < endpos; i++){
  368. // grdobj.cellStyle("background-color", 2, i) = color;
  369. grdobj.setCellProperty("body",i,"background",color);
  370. // objects[grdobj.binddataset].setColumn(0, i, usernm); // 굳이 필요한지? 쓰임새가 없는듯
  371. }
  372. if(startpos != endpos-1){
  373. if(color == "#00ff00"){
  374. //grdobj.mergeByFree(2, startpos, 2, endpos-1); // 데이터 영역 colspan이 가능할까?
  375. }
  376. }
  377. }
  378. /****************************************************************************************
  379. * Function : fFindInstanceCount
  380. * Description : 해당값이 instance에 몇번째 있는지 확인한다.
  381. * Argument : param : 찾으려는 값
  382. * return type :
  383. * Creator :
  384. ****************************************************************************************/
  385. function fFindInstanceCount(param){
  386. if(!utlf_isNull(param)){
  387. var cmpval = param;
  388. }else{ //param이 없는 경우, opener에서 받은 oproomcd를 기본으로 설정함
  389. var cmpval = gOPROOMCD_VAL;
  390. }
  391. var totcnt = ds_init_oproomlist.rowcount;
  392. for(var i = 0; i < totcnt; i++){
  393. var oproomcd = ds_init_oproomlist.getColumn(i,"oproomcd");
  394. if(oproomcd == cmpval){
  395. return i+1;
  396. }
  397. }
  398. return 1; //선택된 수술방이 없는 경우 첫번째 instance로 무조건 설정함
  399. }
  400. /****************************************************************************************
  401. * Function : fSetOpRoomCnt
  402. * Description : 수술방 count 설정, 현재 page / 총 page
  403. * Argument : curcnt : 수술방번호
  404. * : totcnt : 전체수술실수
  405. * return type :
  406. * Creator :
  407. ****************************************************************************************/
  408. function fSetOpRoomCnt(curcnt, totcnt){
  409. ds_main_cond.setColumn(0,"totcnt", Math.ceil(totcnt/3));
  410. ds_main_cond.setColumn(0,"curcnt", curcnt);
  411. }
  412. /****************************************************************************************
  413. * Function : fSelectOpScheTime
  414. * Description : 그리드 클릭시, 색깔 설정
  415. * Argument :
  416. * return type :
  417. * Creator :
  418. ****************************************************************************************/
  419. function fSelectOpScheTime(grdobj){
  420. var extra = ds_main_cond.getColumn(0,"extra");
  421. if(extra == "Y"){
  422. var rtnval = sysf_messageBox("정규시간 이외 설정을 해체를", "Q004");
  423. if(rtnval == 6){
  424. ds_main_cond.setColumn(0,"extra" , "N");
  425. ds_main_cond.setColumn(0,"oproomcd" , "");
  426. ds_main_cond.setColumn(0,"exfromtmcd", "");
  427. ds_main_cond.setColumn(0,"exendtmcd" , "");
  428. cmb_oproom.enable = false;
  429. cmb_exfromtmcd.enable = false;
  430. cmb_exendtmcd.enable = false;
  431. fCnclOpScheTime();
  432. }else{
  433. return;
  434. }
  435. }
  436. var col = grdobj.getCellPos();
  437. if(col < 2){
  438. return;
  439. }
  440. if(grdobj.getCellText(-1,1) == ""){
  441. return;
  442. }
  443. if(fChkChngOpRoom(grdobj) == false){
  444. return;
  445. }
  446. SELECTED_OPROOMCD = grdobj.getCellText(-1, 1);
  447. // 오전과 오후의 진료과가 다른 경우 자신의 해당하는 시간에만 정규 수술의뢰를 할 수 있도록 수정 : 2009. 07. 09 김영학
  448. var cellidx = Math.ceil((col+5)/6); // col index로 cell index구함
  449. SELECTED_time = grdobj.getCellText(-1, cellidx);
  450. SELECTED_MIN = grdobj.getCellText(-1, col+15);
  451. if(SELECTED_MIN == ""){ //값이 없는 부분은 그 전의 값에 따라 15분 또는 45분
  452. var bfminutes = grdobj.getCellText(-1, col+14);
  453. if(bfminutes == "00"){
  454. SELECTED_MIN = "10";
  455. }else if(bfminutes == "20"){
  456. SELECTED_MIN = "30";
  457. }else if(bfminutes == "40"){
  458. SELECTED_MIN = "50";
  459. }
  460. }
  461. var amdeptcd = ds_init_alloproomlist.getColumn(ds_init_alloproomlist.findRowExpr("oproomcd == '"+ SELECTED_OPROOMCD +"' && usescheflag == '1'"),"perfdeptcd");
  462. var amdeptnm = ds_init_alloproomlist.getColumn(ds_init_alloproomlist.findRowExpr("oproomcd == '"+ SELECTED_OPROOMCD +"' && usescheflag == '1'"),"deptnm");
  463. var pmdeptcd = ds_init_alloproomlist.getColumn(ds_init_alloproomlist.findRowExpr("oproomcd == '"+ SELECTED_OPROOMCD +"' && usescheflag == '2'"),"perfdeptcd");
  464. var pmdeptnm = ds_init_alloproomlist.getColumn(ds_init_alloproomlist.findRowExpr("oproomcd == '"+ SELECTED_OPROOMCD +"' && usescheflag == '2'"),"deptnm");
  465. var oproomnm = ds_init_alloproomlist.getColumn(ds_init_alloproomlist.findRowExpr("oproomcd == '"+ SELECTED_OPROOMCD +"'"),"oproomcd");
  466. var perfdeptcd = ds_send_reqdata.getColumn(0,"perfdeptcd");
  467. if (amdeptcd != pmdeptcd) {
  468. if (SELECTED_time + SELECTED_MIN >= "1300" && pmdeptcd != perfdeptcd && pmdeptcd !="-") {
  469. sysf_messageBox("오후시간은 " + pmdeptnm + "로 배정된 시간으로 수술시간 지정이 불가합니다.\n 수술 소요시간이 배정된 시간을 초과되는 경우에는 전달사항에 입력하시기 바랍니다. ", "I");
  470. fCnclOpScheTime();
  471. return;
  472. } else if (SELECTED_time + SELECTED_MIN < "1300" && amdeptcd != perfdeptcd && amdeptcd !="-") {
  473. sysf_messageBox("오전시간은 " + amdeptnm + "로 배정된 시간으로 수술시간 지정이 불가합니다.\n 수술 소요시간이 배정된 시간을 초과되는 경우에는 전달사항에 입력하시기 바랍니다. ", "I");
  474. fCnclOpScheTime();
  475. return;
  476. }
  477. }
  478. // 오전과 오후의 진료과가 다른 경우 자신의 해당하는 시간에만 정규 수술의뢰를 할 수 있도록 수정 : 2009. 07. 09 김영학 -- end
  479. if(g_choiceflag == "N"){ //선택이 안된 경우
  480. var bgcolor = grdobj.getCellProperty("body",col,"background");
  481. bgcolor = String(bgcolor).substr(0,7);
  482. if(bgcolor == "#0000ff"){
  483. grdobj.setCellProperty("body",col,"background","#ffffff");
  484. }else if(bgcolor == "#00ff00"){
  485. return;
  486. }else{
  487. grdobj.setCellProperty("body",col,"background","#0000ff");
  488. }
  489. g_choiceflag = "Y";
  490. g_startpos = col;
  491. }else if(g_choiceflag == "Y"){//선택이 된 경우
  492. g_endpos = col;
  493. grdobj.setCellProperty("body",col,"background","#0000ff");
  494. for(var i = g_startpos + 1; i < g_endpos; i++){
  495. if(grdobj.getCellProperty("body",i,"background") != "white"){
  496. break;
  497. }else{
  498. grdobj.setCellProperty("body",i,"background","#0000ff");
  499. }
  500. }
  501. g_choiceflag = "X";
  502. g_startpos = 0;
  503. g_endpos = 0;
  504. }
  505. }
  506. /****************************************************************************************
  507. * Function : fCnclOpScheTime
  508. * Description : 수술예약시간 삭제
  509. * Argument :
  510. * return type :
  511. * Creator :
  512. ****************************************************************************************/
  513. function fCnclOpScheTime(){
  514. fClearOpScheGrdInfo();
  515. var curcnt = ds_main_cond.getColumn(0,"curcnt");
  516. fSetOpRoomNM(curcnt);
  517. //var opregstno = model.getValue("/root/main/optimeinfo/optimelist[" + i + "]/opregstno"); //opregstno
  518. // model.removeNode("/root/main/optimeinfo/optimelist[opregstno='" + gOPREGSTNO_VAL + "']");
  519. ds_main_optimelist.deleteRow(ds_main_optimelist.findRow("opregstno",gOPREGSTNO_VAL));
  520. fSetOpScheTimeGrd();
  521. g_choiceflag = "N";
  522. g_startpos = 0;
  523. g_endpos = 0;
  524. }
  525. /****************************************************************************************
  526. * Function : fClearOpScheGrdInfo
  527. * Description : 수술예약시간 설정 정보 clear
  528. * Argument :
  529. * return type :
  530. * Creator :
  531. ****************************************************************************************/
  532. function fClearOpScheGrdInfo(){
  533. for(var i = 1; i <= 3; i++){
  534. var grdid = "grd_optimelist" + "" + i + "";
  535. var grdobj = components[grdid];
  536. grdobj.setCellProperty("Head",0,"text",""); //수술방명 설정
  537. //grdobj.valueMatrix(1, 0) = "";
  538. grdobj.setCellProperty("Head",1,"text",""); //수술방코드 설정
  539. //grdobj.valueMatrix(1, 1) = "";
  540. //model.removeNodeset(grdobj.nodeset);
  541. objects[grdobj.binddataset].clearData();
  542. }
  543. for(var i = 1; i <= 3; i++){
  544. var grdid = "grd_optimelist" + "" + i + "";
  545. var grdobj = components[grdid];
  546. objects[grdobj.binddataset].addRow();
  547. for(var j = 2; j < grdobj.getFormatColCount(); j++) {
  548. grdobj.setCellProperty("body",j,"background","white");
  549. }
  550. }
  551. }
  552. /****************************************************************************************
  553. * Function : fChkChngOpRoom
  554. * Description : 수술방변경 검사
  555. * Argument :
  556. * return type :
  557. * Creator :
  558. ****************************************************************************************/
  559. function fChkChngOpRoom(grdobj){
  560. var oproomcd = grdobj.getCellText(-1, 1);
  561. if(SELECTED_OPROOMCD != oproomcd && SELECTED_OPROOMCD != ""){
  562. if(gSTATUS_VAL != "i"){ //신규인 경우 변경 여부를 묻는다.
  563. if(gOPSTATCD > 30) {
  564. var rtnval = sysf_messageBox("예정된 수술방에서 수술이 진행되었습니다. 수술방은 변경 ", "E001");
  565. return false;
  566. }else{
  567. var rtnval = sysf_messageBox("수술방을 [" + grdobj.getCellText(-1, 0) + "]로 변경하고 ", "Q003");
  568. }
  569. }else{ //신규가 아닌 경우는 변경 여부 없이 바로 진행
  570. var rtnval = 6
  571. }
  572. if(rtnval == 7){ //아니오를 클릭한 경우
  573. return false;
  574. }else{
  575. fClearOpScheGrdInfo();
  576. var curcnt = ds_main_cond.getColumn(0,"curcnt");
  577. fSetOpRoomNM(curcnt);
  578. fSetOpScheTimeGrd();
  579. g_choiceflag = "N";
  580. g_startpos = 0;
  581. g_endpos = 0;
  582. ds_main_cond.setColumn(0,"roomflag", "N"); //방없음 N으로 해체
  583. return true;
  584. }
  585. }
  586. }
  587. /****************************************************************************************
  588. * Function : fClkBtnBefore
  589. * Description : 이전 버튼 클릭
  590. * Argument :
  591. * return type :
  592. * Creator :
  593. ****************************************************************************************/
  594. function fClkBtnBefore(){
  595. var totcnt = ds_main_cond.getColumn(0,"totcnt");
  596. var curcnt = ds_main_cond.getColumn(0,"curcnt");
  597. curcnt--;
  598. if(curcnt == 0){
  599. curcnt++;
  600. return;
  601. }
  602. fClearOpScheGrdInfo(); //그리드에 설정된 값을 모두 clear
  603. ds_main_cond.setColumn(0,"curcnt",curcnt);
  604. fSetOpRoomNM(curcnt);
  605. fSetOpScheTimeGrd();
  606. }
  607. /****************************************************************************************
  608. * Function : fClkBtnAfter
  609. * Description : 다음 버튼 클릭
  610. * Argument :
  611. * return type :
  612. * Creator :
  613. ****************************************************************************************/
  614. function fClkBtnAfter(){
  615. var totcnt = ds_main_cond.getColumn(0,"totcnt");
  616. var curcnt = ds_main_cond.getColumn(0,"curcnt");
  617. curcnt++;
  618. if(curcnt == 0){
  619. curcnt--;
  620. return;
  621. }
  622. fClearOpScheGrdInfo(); //그리드에 설정된 값을 모두 clear
  623. ds_main_cond.setColumn(0,"curcnt",curcnt);
  624. fSetOpRoomNM(curcnt);
  625. fSetOpScheTimeGrd();
  626. }
  627. /****************************************************************************************
  628. * Function : fChkSaveData
  629. * Description : 수술예약시간 무결성 확인
  630. * Argument :
  631. * return type :
  632. * Creator :
  633. ****************************************************************************************/
  634. function fChkSaveData(){
  635. var extra = ds_main_cond.getColumn(0,"extra");
  636. var roomflag = ds_main_cond.getColumn(0,"roomflag");
  637. var startpos = 0;
  638. var endpos = 0;
  639. fFindGridID(); //grid id찾기 global변수에 id 설정
  640. var icnt = 0;
  641. grdobj = components[SELECTED_GRDOBJ_ID];
  642. for(var col = 2; col < grdobj.getFormatColCount(); col++){
  643. var color = grdobj.getCellProperty("body",col,"background");
  644. color = String(color).substr(0,7);
  645. if(color == "#0000ff" && startpos == 0){ //파란색으로 시작되는 지점 구하기
  646. startpos = col;
  647. }
  648. if(startpos!=0){icnt++;} //시작지점이 0이 아닌때부터 count함
  649. if(color != "#0000ff" && startpos != 0){ //파란색으로 종료되는 지점 구하기
  650. endpos = col-1;
  651. break;
  652. }
  653. }
  654. if(startpos == 0){ //시작점이 없는 경우는 값이 없는 값으로 넘긴다
  655. var oproomcd = grdobj.getCellText(-1,1);
  656. var rtnparam = oproomcd + "▦▦"
  657. opener.frmf_setParameter("SPMMO08800_rtn_param", rtnparam);
  658. opener.frmf_setParameter("SPMMO08800_rtn_useyn", "Y");
  659. this.close();
  660. }
  661. var cellidx = Math.ceil((startpos+5)/6); // col index로 cell index구함
  662. var starthour = grdobj.getCellText(-1,cellidx);
  663. var startminutes = grdobj.getCellText(-1,startpos+15);
  664. if(utlf_isNull(startminutes)){ //값이 없는 부분은 그 전의 값에 따라 15분 또는 45분
  665. var bfminutes = grdobj.getCellText(-1,startpos+14);
  666. if(bfminutes == "00"){
  667. startminutes = "10";
  668. }else if(bfminutes == "20"){
  669. startminutes = "30";
  670. }else if(bfminutes == "40"){
  671. startminutes = "50";
  672. }
  673. }
  674. var opfromtmcd = starthour + "" + startminutes + "" + "00";
  675. var inchour = 0;
  676. for(var i = 1; i < icnt; i++){
  677. startminutes = eval(startminutes) + 10;
  678. if(startminutes == 60){
  679. inchour++;
  680. startminutes = 0;
  681. }
  682. }
  683. var endhour = eval(starthour) + eval(inchour);
  684. if(endhour < 10){endhour = "0".concat(endhour);}
  685. if(startminutes==0){startminutes = "00";}
  686. var opendtmcd = endhour + "" + startminutes + "" + "00";
  687. var oproomcd = grdobj.getCellText(-1,1);
  688. var rtnparam = oproomcd + "▦" + opfromtmcd + "▦" + opendtmcd;
  689. opener.frmf_setParameter("SPMMO08800_rtn_param", rtnparam);
  690. opener.frmf_setParameter("SPMMO08800_rtn_useyn", "Y");
  691. this.close();
  692. }
  693. ]]></Script>