SPMMO10500.xjs 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463
  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-01-20
  7. * Description :
  8. *---------------------------------------------------------------------------------------
  9. * Modify Date Modifier Modify Description
  10. *---------------------------------------------------------------------------------------
  11. * 2015-01-20 Live Converter TF->XP
  12. *
  13. *---------------------------------------------------------------------------------------
  14. ****************************************************************************************/
  15. var teethArray = new Array(8);
  16. var sTOOTFACT = ""; //치식사항
  17. var bRIGHT_TOP = false;
  18. var bRIGHT_YOUTH_TOP = false;
  19. var bLEFT_TOP = false;
  20. var bLEFT_YOUTH_TOP = false;
  21. var bRIGHT_BOTTOM = false;
  22. var bRIGHT_YOUTH_BOTTOM = false;
  23. var bLEFT_BOTTOM = false;
  24. var bLEFT_YOUTH_BOTTOM = false;
  25. var bRIGHT_TOP_THIRD = false;
  26. var bRIGHT_TOP_YOUTH_THIRD = false;
  27. var bRIGHT_BOTTOM_THIRD = false;
  28. var bRIGHT_BOTTOM_YOUTH_THIRD = false;
  29. var bMIDDLE_TOP_THIRD = false;
  30. var bMIDDLE_TOP_YOUNG_THIRD = false;
  31. var bMIDDLE_BOTTOM_THIRD = false;
  32. var bMIDDLE_BOTTOM_YOUNG_THIRD = false;
  33. var bLEFT_TOP_THIRD = false;
  34. var bLEFT_TOP_THIRD_YOUTH = false;
  35. var bLEFT_BOTTOM_THIRD = false;
  36. var bLEFT_BOTTOM_THIRD_YOUTH = false;
  37. var bTOTAL = false;
  38. var bTOTAL_YOUTH = false;
  39. var sRIGHT_TOP_TEETH = "#11#12#13#14#15#16#17#18"; //우상
  40. var sRIGHT_TOP_YOUNG_TEETH = "#51#52#53#54#55"; //우상유치
  41. var sLEFT_TOP_TEETH = "#21#22#23#24#25#26#27#28"; //좌상
  42. var sLEFT_TOP_YOUNG_TEETH = "#61#62#63#64#65"; //좌상유치
  43. var sRIGHT_BOTTOM_YOUNG_TEETH = "#81#82#83#84#85"; //우하유치
  44. var sRIGHT_BOTTOM_TEETH = "#41#42#43#44#45#46#47#48"; //우하
  45. var sLEFT_BOTTOM_YOUNG_TEETH = "#71#72#73#74#75"; //좌하유치
  46. var sLEFT_BOTTOM_TEETH = "#31#32#33#34#35#36#37#38"; //좌하
  47. var sRIGHT_TOP_THIRD_TEETH = "#14#15#16#17#18"; //영구치(1/3)
  48. var sRIGHT_TOP_THIRD_YOUNG_TEETH = "#54#55"; //유치(1/3)
  49. var sRIGHT_BOTTOM_THIRD_YOUNG_TEETH = "#84#85"; //유치(1/3)
  50. var sRIGHT_BOTTOM_THIRD_TEETH = "#44#45#46#47#48"; //영구치(1/3)
  51. var sMIDDLE_TOP_THIRD_TEETH = "#11#12#13#21#22#23";
  52. var sMIDDLE_TOP_THIRD_YOUNG_TEETH = "#51#52#53#61#62#63";
  53. var sMIDDLE_BOTTOM_THIRD_YOUNG_TEETH = "#81#82#83#71#72#73";
  54. var sMIDDLE_BOTTOM_THIRD_TEETH = "#41#42#43#31#32#33";
  55. var sLEFT_TOP_THIRD_TEETH = "#24#25#26#27#28";
  56. var sLEFT_BOTTOM_THIRD_TEETH = "#34#35#36#37#38";
  57. var sLEFT_TOP_THIRD_YOUTH_TEETH = "#64#65";
  58. var sLEFT_BOTTOM_THIRD_YOUTH_TEETH = "#74#75";
  59. var objDiagGrdID = ""; //global grid object
  60. var objPrcpGrdID = ""; //global grid object
  61. var objCurGrdID = ""; //현재 focus가 설정된 grid
  62. var iDiagBfRow = 0; //이전 diaglist row의 위치
  63. var iPrcpBfRow = 0; //이전 prcplist row의 위치
  64. //=======================================================================================
  65. // Function
  66. //---------------------------------------------------------------------------------------
  67. /****************************************************************************************
  68. * Function : fInitialize
  69. * Description : 화면 초기화
  70. * Argument :
  71. * return type :
  72. * Creator :
  73. ****************************************************************************************/
  74. function fInitialize() {
  75. lf_reqHardCodeInfo(ds_init_hardcd, 20);
  76. var hardcd = ds_init_hardcd.getColumn(0,"hardcd");
  77. var dutplcecd = sysf_getUserInfo("dutplcecd");
  78. ds_main_prcplist.clearData();
  79. ds_main_diaglist.clearData();
  80. fMakeSndArray();
  81. objDiagGrdID = grd_diaglist;
  82. objPrcpGrdID = grd_prcplist;
  83. if(frmf_checkOpener()) {
  84. sTOOTFACT = opener.frmf_getParameter("param_tootfact"); //치식사항
  85. sDIAGLIST = opener.frmf_getParameter("param_diaglist"); //진단내용
  86. sPRCPLIST = opener.frmf_getParameter("param_prcplist"); //처방내용
  87. if(!utlf_isNull(sDIAGLIST)) {
  88. // setCSVToNode("/root/main/diaglist", sDIAGLIST, "diaglist");
  89. dsf_setCSVToDs("ds_main_diaglist",sDIAGLIST);
  90. for(var i = 0 ; i < objDiagGrdID.rowcount ; i++) {
  91. fInitLoadTootFact(ds_main_diaglist.getColumn(i,"rtntootfact"), i, objDiagGrdID);
  92. }
  93. fShowTootFact(lf_getDsValue(ds_main_diaglist,0,"rtntootfact")); //첫번째 row값을 화면에 뿌린다.
  94. //objDiagGrdID.select(1,2,1,2) = true; //기본 focus를 진단 첫번째 row에 잡는다.
  95. objCurGrdID = objDiagGrdID;
  96. objects[objCurGrdID.binddataset].rowposition = 0;
  97. iDiagBfRow = objects[objDiagGrdID.binddataset].rowposition; //이전 row값을 기억해서 다른 row가 클릭된 경우 clear할 수 있도록한다.
  98. }
  99. if(!utlf_isNull(sPRCPLIST)) {
  100. // setCSVToNode("/root/main/prcplist", sPRCPLIST, "prcplist");
  101. dsf_setCSVToDs("ds_main_prcplist",sPRCPLIST);
  102. for(var i = 0; i < objPrcpGrdID.rowcount; i++) {
  103. fInitLoadTootFact(ds_main_prcplist.getColumn(i,"rtntootfact"), i, objPrcpGrdID);
  104. }
  105. if(objDiagGrdID.rowcount < 1) { //진단이 없는 경우, default로 처방에 focus를 set한다.
  106. objCurGrdID = objPrcpGrdID;
  107. objects[objCurGrdID.binddataset].rowposition = 0;
  108. iPrcpBfRow = objects[objPrcpGrdID.binddataset].rowposition; //이전 row값을 기억해서 다른 row가 클릭된 경우 clear할 수 있도록한다.
  109. fShowTootFact(lf_getDsValue(ds_main_prcplist,0,"rtntootfact")); //첫번째 row값을 화면에 뿌린다.
  110. }
  111. }
  112. // objDiagGrdID.sort(1, objDiagGrdID.colRef("rowcnt"), objDiagGrdID.rows - 1, objDiagGrdID.colRef("rowcnt")) = "asc";
  113. // objPrcpGrdID.sort(1, objPrcpGrdID.colRef("rowcnt"), objPrcpGrdID.rows - 1, objPrcpGrdID.colRef("rowcnt")) = "asc";
  114. objects[objDiagGrdID.binddataset].keystring.current = "S:rowcnt";
  115. objects[objPrcpGrdID.binddataset].keystring.current = "S:rowcnt";
  116. } else {
  117. sysf_messageBox("메인 화면을 찾는데", "E009");
  118. this.close();
  119. }
  120. //2008. 07. 04 opener에서 진단, 처방의 치식정보가 설정된 경우, 자동으로 처방선택 또는 진단선택하게 하기 위해 추가 오지훈
  121. // var isVal = sDIAGLIST.split("▩");
  122. // var isVal2 = sPRCPLIST.split("▩");
  123. if(!utlf_isNull(sPRCPLIST)) {
  124. // grd_prcplist.row = 1;
  125. // grd_prcplist.col = 1;
  126. // grd_prcplist.select(grd_prcplist.row, grd_prcplist.col) = true;
  127. ds_main_prcplist.rowposition = 0;
  128. var ev = new GridMouseEventInfo;
  129. frmf_inputEnterKey("grd_prcplist", "onlbuttonup", ev );
  130. } else if(!utlf_isNull(sDIAGLIST)) {
  131. // grd_diaglist.row = 1;
  132. // grd_diaglist.col = 1;
  133. // grd_diaglist.select(grd_diaglist.row, grd_diaglist.col) = true;
  134. ds_main_diaglist.rowposition = 0;
  135. var ev = new GridMouseEventInfo;
  136. frmf_inputEnterKey("grd_diaglist", "onlbuttonup", ev );
  137. }
  138. }
  139. /****************************************************************************************
  140. * Function : fMakeSndArray
  141. * Description : 2차원배열 생성
  142. * Argument :
  143. * return type :
  144. * Creator :
  145. ****************************************************************************************/
  146. function fMakeSndArray(){
  147. for(var i = 0; i < 8; i++){
  148. teethArray[i] = new Array(8);
  149. }
  150. //배열의 초기값을 0로 setting한다.
  151. for(var i = 0; i < 8; i++){
  152. for(var j = 0; j < 8; j++){
  153. teethArray[i][j] = 0;
  154. }
  155. }
  156. }
  157. /****************************************************************************************
  158. * Function : fInitLoadTootFact
  159. * Description : tootfact를 ','로 구분자를 두어 화면에 표시한다.
  160. * Argument : sTootFact : 치식정보
  161. * : curRow : Grid Row정보
  162. * : grdObj : Grid ID
  163. * return type :
  164. * Creator :
  165. ****************************************************************************************/
  166. function fInitLoadTootFact(sTootFact, curRow, grdObj){
  167. var loadStr = utlf_transNullToEmpty(sTootFact).replace(',', '').replace('#', ', #').replace('ⓘ', ', ⓘ');
  168. objects[grdObj.binddataset].setColumn(curRow,1,loadStr.substr(2, loadStr.length)); //grid의 첫번째 cell에 setting!!
  169. }
  170. /****************************************************************************************
  171. * Function : fShowTootFact
  172. * Description : 진단화면에서 load..치식data로 초기화
  173. * Argument : sTootFact : 치식정보
  174. * return type :
  175. * Creator :
  176. ****************************************************************************************/
  177. function fShowTootFact(sTootFact){
  178. if(sTootFact.length < 1){ //opener에서 넘어온 치식이 없는 경우
  179. return;
  180. }else{
  181. fFillColorCaption(sTootFact, "#99ccff");
  182. }
  183. }
  184. /****************************************************************************************
  185. * Function : fFillColorCaption
  186. * Description : 치식데이터에 따라 화면에 선택된 값을 칠한다.
  187. * Argument : sTeeth : 치식정보
  188. * : sColor : 채워넣을 색상코드
  189. * return type :
  190. * Creator :
  191. ****************************************************************************************/
  192. function fFillColorCaption(sTeeth, sColor){
  193. var sCls;
  194. var iRow;
  195. var iCol;
  196. var tmp;
  197. var capObj;
  198. if(sColor == "#99ccff") {
  199. val = 1;
  200. } else {
  201. val = 0;
  202. }
  203. var sTempTootFact = utlf_transNullToEmpty(sTeeth).replace(',', '').replace('#', ',#').replace('ⓘ', ',ⓘ');
  204. teethPos = sTempTootFact.split(",");
  205. for(var i=1; i < teethPos.length; i ++ ){
  206. tmp = teethPos[i];
  207. if(!utlf_isNull(tmp)) {
  208. // capObj = document.controls("caption" + tmp.substr(1,2)); //by sonjy 전환데이터 관련 수정 20080905
  209. capObj = group1.components["caption"+tmp.substr(1,2)];
  210. sCls = tmp.substr(0,1);
  211. iRow = tmp.substr(1,1);
  212. iCol = tmp.substr(2,1);
  213. iRow--;
  214. iCol--;
  215. if(fChkValidTeeth(iRow, iCol) == true){
  216. if(sCls == "ⓘ") { // 임플란트 치식이면
  217. teethArray[iRow][iCol] = 2;
  218. capObj.style.backgroundColor = "#ff9090";
  219. } else {
  220. teethArray[iRow][iCol] = val;
  221. capObj.style.backgroundColor = sColor;
  222. }
  223. }else{
  224. sysf_messageBox("영구치와 유치를 동시에 선택할 수", "I004");
  225. return;
  226. }
  227. }
  228. }
  229. }
  230. /****************************************************************************************
  231. * Function : fChkValidTeeth
  232. * Description : 유효한 치식 선택 검사(동일한 위치의 영구치와 유치는 선택될 수 없다.)
  233. * 치식을 저장하는 array의 row에 +3을 한 row위치에 값이
  234. * 동일하게 1로 적용되는 것을 막는다.
  235. * : ex) 11 - 51, 21 - 61, 31 - 71, 41 - 81(x)
  236. * Argument : row : Array row값
  237. * : col : Array col값
  238. * return type :
  239. * Creator :
  240. ****************************************************************************************/
  241. function fChkValidTeeth(row, col){
  242. if(row < 4) {
  243. tmprow = row + 4; //영구치가 선택된 경우
  244. } else {
  245. tmprow = row - 4; //유치가 선택된 경우
  246. }
  247. if(teethArray[tmprow][col] == 1) {return false;}
  248. return true;
  249. }
  250. /****************************************************************************************
  251. * Function : fDragChoiTeeth
  252. * Description : Drag Mode에서의 치식 선택
  253. * Argument : grdObj : 그리드객체
  254. * : staObj : 캡션객체
  255. * return type :
  256. * Creator :
  257. ****************************************************************************************/
  258. function fDragChoiTeeth(grdObj, staObj){
  259. if(objects[grdObj.binddataset].rowposition < 0) return;
  260. // var capObj = document.controls(event.target);
  261. var capObj = staObj;
  262. var capVal = capObj.name.substr(7,3); // capObj.attribute("_value");
  263. if(capVal != "") {
  264. var row = capVal.substr(0,1);
  265. var col = capVal.substr(1,2);
  266. row--;
  267. col--;
  268. //alert(row + "," + col);
  269. if(fChkValidTeeth(row, col) == true) {
  270. var choiYN = teethArray[row][col];
  271. if(choiYN == 1 || choiYN == 2) {
  272. capObj.style.backgroundColor = "#ffffff";
  273. teethArray[row][col] = 0;
  274. } else {
  275. var implantyn = ds_main_cond.getColumn(0,"implantyn");
  276. if(implantyn == "Y") {
  277. capObj.style.backgroundColor = "#ff9090";
  278. teethArray[row][col] = 2; // 임플란트치식
  279. ds_main_cond.setColumn(0,"implantyn","N");
  280. } else {
  281. capObj.style.backgroundColor = "#99ccff";
  282. teethArray[row][col] = 1; // 일반치식
  283. }
  284. }
  285. } else {
  286. sysf_messageBox("영구치와 유치를 동시에 선택할 수", "I004");
  287. return;
  288. }
  289. }
  290. fGrdInptVal(objCurGrdID);
  291. }
  292. /****************************************************************************************
  293. * Function : fGrdInptVal
  294. * Description : 선택된 치식값을 grd에 표시한다.
  295. * Argument : grdObj : 그리드객체
  296. * return type :
  297. * Creator :
  298. ****************************************************************************************/
  299. function fGrdInptVal(grdObj){
  300. var objDs = objects[grdObj.binddataset];
  301. var iRow = objDs.rowposition;
  302. var iTotRow = objDs.rowcount;
  303. if(iRow < 0){
  304. return;
  305. }
  306. var selectedRows = grdf_getSelectedRows(grdObj);
  307. for (var iRow = 0; iRow < selectedRows.length; iRow++){
  308. var toothcd = objDs.getColumn(selectedRows[iRow],0);
  309. if( utlf_isNull(toothcd) && utlf_isNull(opener.frmf_getParameter("SPMMO10500_open"))){ continue; } //grd에 진단코드가 맵핑 안된 경우 skip
  310. objDs.setColumn(selectedRows[iRow], 1, fMakeSaveData(2)); // 치식사항(user보기용)
  311. objDs.setColumn(selectedRows[iRow], 2, fMakeSaveData(0)); // 치식사항(data저장용)
  312. }
  313. // for(var iRow = 0; iRow < iTotRow ; iRow++){ //멀티선택된 경우를 감안하여 전체를 검사
  314. // if(grdObj.isSelected(iRow) == true){ //grd가 선택된 경우
  315. // var toothcd = grdObj.valueMatrix(iRow, 0);
  316. // if( utlf_isNull(toothcd) && utlf_isNull(opener.frmf_getParameter("SPMMO10500_open"))){ continue; } //grd에 진단코드가 맵핑 안된 경우 skip
  317. // grdObj.valueMatrix(iRow, 1) = fMakeSaveData(2); // 치식사항(user보기용)
  318. // grdObj.valueMatrix(iRow, 2) = fMakeSaveData(0); // 치식사항(data저장용)
  319. // }
  320. // }
  321. }
  322. /****************************************************************************************
  323. * Function : fDragChoiTeeth
  324. * Description : 치식저장될 SaveData instance를 생성함
  325. * Argument : iPFlag : DS 저장위치구분(2 : user보기용 / 0 : data저장용)
  326. * return type :
  327. * Creator :
  328. ****************************************************************************************/
  329. function fMakeSaveData(iPFlag){
  330. var saveStr = "";
  331. var tmpStr = "";
  332. var concatStr = "";
  333. if(iPFlag == 2){ //user보기용
  334. var concatStr = ", ";
  335. }else{ //data저장용
  336. var concatStr = "";
  337. }
  338. for(var i = 0 ; i < 8 ; i++){
  339. for(var j = 0 ; j < 8 ; j++){
  340. if(teethArray[i][j] == 1){ // 일반치식
  341. row = i + 1;
  342. col = j + 1;
  343. tmpStr = "#" + row + col;
  344. saveStr += tmpStr.concat(concatStr);
  345. } else if(teethArray[i][j] == 2){ // 임플란트 치식
  346. row = i + 1;
  347. col = j + 1;
  348. tmpStr = "ⓘ" + row + col;
  349. saveStr += tmpStr.concat(concatStr);
  350. }
  351. }
  352. }
  353. saveStr = saveStr.substr(0,saveStr.length-iPFlag);
  354. return saveStr;
  355. }
  356. /****************************************************************************************
  357. * Function : fInitToothfact
  358. * Description : 치식데이터 init
  359. * Argument : grdObj : 그리드객체
  360. * return type :
  361. * Creator :
  362. ****************************************************************************************/
  363. function fInitToothfact(grdObj){
  364. fFillColorCaption(objects[grdObj.binddataset].getColumn(objects[grdObj.binddataset].rowposition,2), "#ffffff");
  365. fGrdInptVal(grdObj);
  366. }
  367. /****************************************************************************************
  368. * Function : fCnfm_SPMMO10500
  369. * Description : 치식데이터 확인버튼 click
  370. * Argument :
  371. * return type :
  372. * Creator :
  373. ****************************************************************************************/
  374. function fCnfm_SPMMO10500(){
  375. iRow = objects[objDiagGrdID.binddataset].rowposition;
  376. if(frmf_checkOpener()){
  377. opener.frmf_setParameter("rtn_diagtootfact", fMakeRtnTootFact(grd_diaglist, "diagcd▦tootfact▦rtntootfact▦rowcnt▩")); //진단치식사항
  378. opener.frmf_setParameter("rtn_prcptootfact", fMakeRtnTootFact(grd_prcplist, "prcpcd▦tootfact▦rtntootfact▦rowcnt▩")); //처방치식사항
  379. opener.frmf_setParameter("rtn_useyn", "Y");
  380. }else{
  381. opener.frmf_setParameter("rtn_useyn", "N");
  382. sysf_messageBox("메인 화면을 찾는데", "E009");
  383. }
  384. this.close();
  385. return;
  386. }
  387. /****************************************************************************************
  388. * Function : fCncl_SPMMO010500
  389. * Description : 치식데이터 취소버튼 click
  390. * Argument :
  391. * return type :
  392. * Creator :
  393. ****************************************************************************************/
  394. function fCncl_SPMMO010500(){
  395. if(frmf_checkOpener()){
  396. opener.frmf_setParameter("rtn_useyn", "N");
  397. }else{
  398. sysf_messageBox("메인 화면을 찾는데", "E009");
  399. }
  400. this.close();
  401. return;
  402. }
  403. /****************************************************************************************
  404. * Function : fMakeRtnTootFact
  405. * Description : 치식전달 데이터 생성
  406. * Argument : grdObj : 그리드객체
  407. * : header : 그리드 타이틀
  408. * return type :
  409. * Creator :
  410. ****************************************************************************************/
  411. function fMakeRtnTootFact(grdObj, header){
  412. var rtnparam = header;
  413. var dsObj = objects[grdObj.binddataset];
  414. for(var i = 0; i < dsObj.rowcount; i++){
  415. rtnparam += dsObj.getColumn(i, 0) + "▦" + //diagcd
  416. dsObj.getColumn(i, 1) + "▦" + //tootfact
  417. dsObj.getColumn(i, 2) + "▦" + //rtntootfact
  418. dsObj.getColumn(i, 3) + "▩"; //rowcnt
  419. }
  420. return rtnparam;
  421. }
  422. ]]></Script>