SMPEA00200.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437
  1. var RSRV_PLCE = "";
  2. function fInitRsrvCtrl() {
  3. model.resetInstanceNode("/root/ctrl/send/rsrvinfo");
  4. model.resetInstanceNode("/root/ctrl/main/ctrllist/ctrlinfo");
  5. model.resetInstanceNode("/root/ctrl/temp/ctrllist/ctrlinfo");
  6. grd_ctrl.refresh();
  7. grd_ctrl.resizeCells();
  8. grd_ctrl.rebuildStyle();
  9. btn_rsrv.disabled = false;
  10. btn_cncl.disabled = false;
  11. model.resetInstanceNode("/root/temp/pmsglist/pmsginfo");
  12. }
  13. // 예약 제어 정보 조회
  14. function fGetRsrvCtrlList(grd, pRow, pExcuRoomCd, pRsrvDd, pRsrvTm) {
  15. // 호출 시점
  16. // 1. 검사 선택 후
  17. // 2. 검사실 선택 후
  18. // 3. 검사 시각 선택 후
  19. // 예약 적용까지의 딜레이 동안 버튼이 클릭될 수 있기 때문에
  20. // 미리 예약 버튼을 비활성화 해두고 적용한다.
  21. var prevRsrvBtnFlag = btn_rsrv.disabled;
  22. btn_rsrv.disabled = true;
  23. var path = grd.nodeset;
  24. var cnt = instance1.selectNodes(path).length;
  25. if (cnt < 1 || model.getValue(path + "/calcscorcd") == "") {
  26. return;
  27. }
  28. model.resetInstanceNode("/root/ctrl/send/rsrvinfo");
  29. var ctrlIdx = 1;
  30. for (var i = 1; i <= cnt; i++) {
  31. path = grd.nodeset + "[" + i + "]/";
  32. if (i != pRow && model.getValue(path + "chk") != "Y") {
  33. continue;
  34. }
  35. var ctrlPath = "/root/ctrl/send/rsrvinfo[" + ctrlIdx + "]/";
  36. ctrlIdx++;
  37. // 기본 항목
  38. model.makeValue(ctrlPath + "srchdd", getCurrentDate()); // 조회기준일
  39. model.makeValue(ctrlPath + "instcd", getUserInfo("dutplceinstcd")); // 기관코드
  40. model.makeValue(ctrlPath + "userid", getUserId()); // 사용자ID
  41. model.makeValue(ctrlPath + "userdept", getUserInfo("dutplcecd")); // 사용자부서
  42. model.makeValue(ctrlPath + "rsrvplce", RSRV_PLCE); // 예약처 (통합예약)
  43. model.makeValue(ctrlPath + "age", model.getValue("/root/main/ptinfo/age")); // 나이
  44. model.makeValue(ctrlPath + "creatine", model.getValue("/root/main/ptinfo/creatine")); // Creatine 수치 설정
  45. // 검사 현황 항목
  46. for (var j = 0; j < grd.cols; j++) {
  47. var ref = grd.colAttribute(j, "ref");
  48. model.makeValue(ctrlPath + ref, model.getValue(path + ref));
  49. }
  50. // 예약 가능 검사실 처리
  51. if (model.getValue(ctrlPath + "rsrvexcuroomposscd") == "") {
  52. model.makeValue(ctrlPath + "rsrvexcuroomposscd", model.getValue(ctrlPath + "excuroomnm"));
  53. }
  54. // 검사실 설정
  55. if (pExcuRoomCd != null) {
  56. model.makeValue(ctrlPath + "excuroomcd", pExcuRoomCd);
  57. }
  58. // 예약일, 예약 시각 설정
  59. var rsrvdd = "";
  60. var rsrvtm = "";
  61. var srchrsrvtm = model.getValue(path + "srchrsrvtm");
  62. if (pRsrvDd != null) {
  63. rsrvdd = pRsrvDd;
  64. } else if (srchrsrvtm.length == 12) {
  65. rsrvdd = srchrsrvtm.substr(0, 8);
  66. }
  67. if (pRsrvTm != null) {
  68. rsrvtm = pRsrvTm;
  69. } else if (srchrsrvtm.length == 12) {
  70. rsrvtm = srchrsrvtm.substr(8, 4);
  71. }
  72. model.makeValue(ctrlPath + "rsrvdd", rsrvdd); // 예약일
  73. model.makeValue(ctrlPath + "rsrvtm", rsrvtm); // 예약시각
  74. // 예약 현황
  75. model.makeValue(ctrlPath + "stat", "0"); // 가용 현황
  76. // 가용 현황, 이전 검사 종료 여부, 본인 제외 가용 현황 설정
  77. model.makeValue(ctrlPath + "capastat", "9"); // 가용 현황
  78. model.makeValue(ctrlPath + "tmflag", ""); // 이전 검사 종료 여부
  79. model.makeValue(ctrlPath + "excapastat", "9"); // 본인 제외 가용 현황
  80. model.makeValue(ctrlPath + "avtm", "0"); // 가용 시간
  81. model.makeValue(ctrlPath + "ertmflag", "N"); // 긴급 시각 여부
  82. var rPath = "/root/main3/rmrvlist/rmrvinfo";
  83. for (var j = 1; j <= instance1.selectNodes(rPath).length; j++) {
  84. if (model.getValue(rPath + "[" + j + "]/rsrvtm") != rsrvtm) {
  85. continue;
  86. }
  87. // 예약 현황
  88. var stat = Number(model.getValue(rPath + "[" + j + "]/stat"));
  89. model.setValue(ctrlPath + "stat", stat);
  90. // 가용 현황
  91. var capa = Number(model.getValue(rPath + "[" + j + "]/capa"));
  92. model.setValue(ctrlPath + "capastat", capa - stat);
  93. // 이전 검사 종료 여부
  94. var tmflag = model.getValue(rPath + "[" + j + "]/tmflag");
  95. model.setValue(ctrlPath + "tmflag", tmflag);
  96. if (pRsrvTm != null) {
  97. // 본인 제외 가용 현황
  98. var excnt = instance1.selectNodes(rPath + "[rsrvtm='" + rsrvtm + "' and pid = '" + model.getValue(path + "pid") + "']").length;
  99. model.setValue(ctrlPath + "excapastat", capa - stat + excnt);
  100. // 가용 시간
  101. var rcnt = instance1.selectNodes(rPath).length;
  102. for (var k = 1; k <= rcnt; k++) {
  103. var nexttm = model.getValue(rPath + "[" + k + "]/rsrvtm");
  104. if (nexttm > Number(rsrvtm) && model.getValue(rPath + "[" + k + "]/stat") != "0") {
  105. model.setValue(ctrlPath + "avtm", fGetMinInterval(nexttm, rsrvtm));
  106. break;
  107. }
  108. if (k == rcnt) {
  109. model.setValue(ctrlPath + "avtm", fGetMinInterval(nexttm, rsrvtm));
  110. }
  111. }
  112. }
  113. // 긴급 시각 여부
  114. model.setValue(ctrlPath + "ertmflag", model.getValue(rPath + "[" + j + "]/ertmflag"));
  115. }
  116. }
  117. // 환자 전달 사항 (구분자 '|'로 연결) (아직 쓰지 말자..)
  118. /*
  119. cnt = instance1.selectNodes("/root/main/ptcmtlist/ptcmtinfo").length;
  120. var patcmt = "";
  121. for (var i = 1; i <= cnt; i++) {
  122. patcmt += model.getValue("/root/main/ptcmtlist/ptcmtinfo[" + i + "]/patcmt");
  123. if (i < cnt) {
  124. patcmt += "|";
  125. }
  126. }
  127. model.makeValue("/root/ctrl/send/rsrvinfo/patcmt", patcmt); // 환자 전달 사항
  128. */
  129. // ref : /root/ctrl/send/rsrvinfo
  130. // resultref : /root/ctrl/temp/ctrllist/ctrlinfo
  131. submit("TRPEA00210", false);
  132. var tPath = "/root/ctrl/temp/ctrllist/ctrlinfo";
  133. var mPath = "/root/ctrl/main/ctrllist/ctrlinfo";
  134. cnt = instance1.selectNodes(tPath).length;
  135. var flag = false;
  136. // 데이터 확인 후 기존 데이터와 달라졌을 경우만 그리드에 새로 표시
  137. if (instance1.selectNodes(tPath + "[ctrldesc != '']").length == instance1.selectNodes(mPath).length) {
  138. for (var i = 1; i <= cnt; i++) {
  139. if (model.getValue(tPath + "[" + i + "]/ctrldesc") == "") {
  140. continue;
  141. }
  142. if (instance1.selectNodes(mPath + "[rsrvplce = '" + model.getValue(tPath + "[" + i + "]/rsrvplce") + "' and"
  143. + " suppdeptcd = '" + model.getValue(tPath + "[" + i + "]/suppdeptcd") + "' and"
  144. + " excuroomcd = '" + model.getValue(tPath + "[" + i + "]/excuroomcd") + "' and"
  145. + " excucd = '" + model.getValue(tPath + "[" + i + "]/excucd") + "' and"
  146. + " ctrlseq = '" + model.getValue(tPath + "[" + i + "]/ctrlseq") + "' and"
  147. + " ctrlflag = '" + model.getValue(tPath + "[" + i + "]/ctrlflag") + "' and"
  148. + " appflag = '" + model.getValue(tPath + "[" + i + "]/appflag") + "']").length < 1) {
  149. flag = true;
  150. break;
  151. }
  152. }
  153. } else {
  154. flag = true;
  155. }
  156. if (!flag) {
  157. btn_rsrv.disabled = prevRsrvBtnFlag;
  158. } else {
  159. model.resetInstanceNode(mPath);
  160. btn_cncl.disabled = false;
  161. var idx = 1;
  162. for (var i = 1; i <= cnt; i++) {
  163. // 제어 내역 설명이 없는 행은 표시하지 않음
  164. if (model.getValue(tPath + "[" + i + "]/ctrldesc") == "") {
  165. continue;
  166. }
  167. model.makeValue(mPath + "[" + idx + "]/rsrvplce", model.getValue(tPath + "[" + i + "]/rsrvplce"));
  168. model.makeValue(mPath + "[" + idx + "]/suppdeptcd", model.getValue(tPath + "[" + i + "]/suppdeptcd"));
  169. model.makeValue(mPath + "[" + idx + "]/excuroomcd", model.getValue(tPath + "[" + i + "]/excuroomcd"));
  170. model.makeValue(mPath + "[" + idx + "]/excucd", model.getValue(tPath + "[" + i + "]/excucd"));
  171. model.makeValue(mPath + "[" + idx + "]/ctrlseq", model.getValue(tPath + "[" + i + "]/ctrlseq"));
  172. model.makeValue(mPath + "[" + idx + "]/ctrldesc", model.getValue(tPath + "[" + i + "]/ctrldesc"));
  173. model.makeValue(mPath + "[" + idx + "]/ctrlflag", model.getValue(tPath + "[" + i + "]/ctrlflag"));
  174. model.makeValue(mPath + "[" + idx + "]/appflag", model.getValue(tPath + "[" + i + "]/appflag"));
  175. idx++;
  176. }
  177. grd_ctrl.refresh();
  178. grd_ctrl.rebuildStyle();
  179. // 제어 적용 예외 여부
  180. var excpflag = false;
  181. for (var i = 1; i <= instance1.selectNodes("/root/ctrl/hidden/excplist/excpinfo").length; i++) {
  182. if (getUserId() == model.getValue("/root/ctrl/hidden/excplist/excpinfo[" + i + "]/userid")) {
  183. excpflag = true;
  184. break;
  185. }
  186. }
  187. var rsrvCtrlFlag = false;
  188. cnt = instance1.selectNodes(mPath).length;
  189. // 제어 적용
  190. for (var i = 1; i <= cnt; i++) {
  191. var appflag = model.getValue(mPath + "[" + i + "]/appflag") == "Y" ? true : false;
  192. var ctrlflag = model.getValue(mPath + "[" + i + "]/ctrlflag");
  193. if (ctrlflag.indexOf("I") >= 0) { // 정보 (단순 확인용)
  194. grd_ctrl.rowStyle(i, "data", "background-color") = "#ffffff";
  195. }
  196. if (ctrlflag.indexOf("R") >= 0) { // 예약 제한
  197. grd_ctrl.rowStyle(i, "data", "background-color") = "#ffffa0";
  198. if (appflag) {
  199. grd_ctrl.rowStyle(i, "data", "font-weight") = "bold";
  200. } else {
  201. grd_ctrl.rowStyle(i, "data", "font-weight") = "";
  202. }
  203. if (!excpflag && appflag) {
  204. rsrvCtrlFlag = true;
  205. }
  206. }
  207. if (ctrlflag.indexOf("C") >= 0) { // 취소 제한
  208. grd_ctrl.rowStyle(i, "data", "background-color") = "#ffffa0";
  209. if (appflag) {
  210. grd_ctrl.rowStyle(i, "data", "font-weight") = "bold";
  211. } else {
  212. grd_ctrl.rowStyle(i, "data", "font-weight") = "";
  213. }
  214. if (!excpflag && appflag) {
  215. btn_cncl.disabled = true;
  216. }
  217. }
  218. if (ctrlflag.indexOf("T") >= 0) { // 통합 예약
  219. if (grd_ctrl.rowStyle(i, "data", "background-color") != "#ffffa0") {
  220. grd_ctrl.rowStyle(i, "data", "background-color") = "#ffdcdc";
  221. }
  222. // 통합 예약 담당 적용
  223. tPath = "/root/init/stafflist/P0127info";
  224. var tCnt = instance1.selectNodes(tPath).length;
  225. for (var j = 1; j <= tCnt; j++) {
  226. if (model.getValue(tPath + "[" + j + "]/cdid") == getUserId()) {
  227. appflag = false;
  228. break;
  229. }
  230. }
  231. if (appflag) {
  232. grd_ctrl.rowStyle(i, "data", "font-weight") = "bold";
  233. } else {
  234. grd_ctrl.rowStyle(i, "data", "font-weight") = "";
  235. }
  236. if (!excpflag && appflag) {
  237. rsrvCtrlFlag = true;
  238. //btn_cncl.disabled = true;
  239. }
  240. /*
  241. if (RSRV_PLCE != "T") {
  242. if (!excpflag && appflag) {
  243. btn_rsrv.disabled = true;
  244. btn_cncl.disabled = true;
  245. }
  246. }
  247. */
  248. }
  249. if (ctrlflag.indexOf("P") >= 0) { // 팝업 메시지
  250. if (grd_ctrl.rowStyle(i, "data", "background-color") != "#ffffa0" &&
  251. grd_ctrl.rowStyle(i, "data", "background-color") != "#ffdcdc") {
  252. grd_ctrl.rowStyle(i, "data", "background-color") = "#ebebff";
  253. }
  254. if (appflag) {
  255. tPath = "/root/ctrl/temp/termlist/terminfo";
  256. var tCnt = instance1.selectNodes(tPath).length;
  257. for (var j = 1; j <= tCnt; j++) {
  258. // 제어항 확인
  259. if (model.getValue(tPath + "[" + j + "]/rsrvplce") == model.getValue(mPath + "[" + i + "]/rsrvplce") &&
  260. model.getValue(tPath + "[" + j + "]/suppdeptcd") == model.getValue(mPath + "[" + i + "]/suppdeptcd") &&
  261. model.getValue(tPath + "[" + j + "]/excuroomcd") == model.getValue(mPath + "[" + i + "]/excuroomcd") &&
  262. model.getValue(tPath + "[" + j + "]/excucd") == model.getValue(mPath + "[" + i + "]/excucd") &&
  263. model.getValue(tPath + "[" + j + "]/ctrlseq") == model.getValue(mPath + "[" + i + "]/ctrlseq") &&
  264. model.getValue(tPath + "[" + j + "]/itemtype") == "C" &&
  265. model.getValue(tPath + "[" + j + "]/itemid") == "POPUP") {
  266. var msg = model.getValue(tPath + "[" + j + "]/valnm");
  267. if (instance1.selectNodes("/root/temp/pmsglist/pmsginfo[msg='" + msg + "']").length > 0) {
  268. continue;
  269. }
  270. var mcnt = instance1.selectNodes("/root/temp/pmsglist/pmsginfo[msg != '']").length;
  271. model.makeValue("/root/temp/pmsglist/pmsginfo[" + ( mcnt + 1 ) + "]/msg", msg);
  272. if (getUserInfo("dutplceinstcd") == "031") {
  273. model.setValue("/root/temp/alertmsg", msg);
  274. tar_alertmsg.refresh();
  275. grp_msg.visible = true;
  276. } else {
  277. messageBox(msg, "E999");
  278. }
  279. }
  280. }
  281. }
  282. }
  283. }
  284. grd_ctrl.resizeCells();
  285. // 예약 버튼에 제어 적용
  286. btn_rsrv.disabled = rsrvCtrlFlag;
  287. }
  288. }
  289. function fGetMinInterval(pVal1, pVal2) {
  290. var str1Front = pVal1.substr(0, 2);
  291. var str1Rear = pVal1.substr(2, 2);
  292. var val1 = Number(str1Front) * 60 + Number(str1Rear);
  293. var str2Front = pVal2.substr(0, 2);
  294. var str2Rear = pVal2.substr(2, 2);
  295. var val2 = Number(str2Front) * 60 + Number(str2Rear);
  296. return val1 - val2;
  297. }
  298. function setExcuEndTime() {
  299. var startTm = "";
  300. var tmSum = 0;
  301. var cnt = instance1.selectNodes("/root/main/exculist/excuinfo").length;
  302. for (var i = 1; i <= cnt; i++) {
  303. if (i == EXCU_SEL_ROW || model.getValue("/root/main/exculist/excuinfo[" + i + "]/chk") == "Y") {
  304. var excutm = model.getValue("/root/main/exculist/excuinfo[" + i + "]/excutm");
  305. if (excutm.isNumber()) {
  306. tmSum += Number(excutm);
  307. }
  308. if (startTm == "") {
  309. startTm = model.getValue("/root/main/exculist/excuinfo[" + i + "]/srchrsrvtm").substr(8, 4);
  310. }
  311. }
  312. }
  313. var endTm = "";
  314. if (startTm.isNumber()) {
  315. endTm = ( parseInt(startTm / 100) + parseInt(tmSum / 60) + parseInt( ( startTm % 100 + tmSum % 60 ) / 60) ) * 100
  316. + ( startTm % 100 + tmSum % 60 ) % 60;
  317. }
  318. endTm = endTm < 1000 ? "0" + endTm : String(endTm);
  319. if (tmSum > 0) {
  320. model.setValue("/root/temp/tmsum", parseInt(tmSum / 60) + ":" + ( tmSum % 60 ));
  321. model.setValue("/root/temp/endtm", endTm.substr(0, 2) + ":" + endTm.substr(2, 2));
  322. } else {
  323. model.setValue("/root/temp/tmsum", "");
  324. model.setValue("/root/temp/endtm", "");
  325. }
  326. cap_tmsum.refresh();
  327. cap_endtm.refresh();
  328. }