SPMMO08800.js 24 KB

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