123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479 |
- /*
- - ▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩
- 치식 ( SPMMO10500_치식.xrw - JScript )
- - ▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩
- */
- var teethArray = new Array(8);
- var sTOOTFACT = ""; //치식사항
- var bRIGHT_TOP = false;
- var bRIGHT_YOUTH_TOP = false;
- var bLEFT_TOP = false;
- var bLEFT_YOUTH_TOP = false;
- var bRIGHT_BOTTOM = false;
- var bRIGHT_YOUTH_BOTTOM = false;
- var bLEFT_BOTTOM = false;
- var bLEFT_YOUTH_BOTTOM = false;
- var bRIGHT_TOP_THIRD = false;
- var bRIGHT_TOP_YOUTH_THIRD = false;
- var bRIGHT_BOTTOM_THIRD = false;
- var bRIGHT_BOTTOM_YOUTH_THIRD = false;
- var bMIDDLE_TOP_THIRD = false;
- var bMIDDLE_TOP_YOUNG_THIRD = false;
- var bMIDDLE_BOTTOM_THIRD = false;
- var bMIDDLE_BOTTOM_YOUNG_THIRD= false;
- var bLEFT_TOP_THIRD = false;
- var bLEFT_TOP_THIRD_YOUTH = false;
- var bLEFT_BOTTOM_THIRD = false;
- var bLEFT_BOTTOM_THIRD_YOUTH = false;
- var bTOTAL = false;
- var bTOTAL_YOUTH = false;
- var sRIGHT_TOP_TEETH = "#11#12#13#14#15#16#17#18"; //우상
- var sRIGHT_TOP_YOUNG_TEETH = "#51#52#53#54#55"; //우상유치
- var sLEFT_TOP_TEETH = "#21#22#23#24#25#26#27#28"; //좌상
- var sLEFT_TOP_YOUNG_TEETH = "#61#62#63#64#65"; //좌상유치
- var sRIGHT_BOTTOM_YOUNG_TEETH = "#81#82#83#84#85"; //우하유치
- var sRIGHT_BOTTOM_TEETH = "#41#42#43#44#45#46#47#48"; //우하
- var sLEFT_BOTTOM_YOUNG_TEETH = "#71#72#73#74#75"; //좌하유치
- var sLEFT_BOTTOM_TEETH = "#31#32#33#34#35#36#37#38"; //좌하
- var sRIGHT_TOP_THIRD_TEETH = "#14#15#16#17#18"; //영구치(1/3)
- var sRIGHT_TOP_THIRD_YOUNG_TEETH = "#54#55"; //유치(1/3)
- var sRIGHT_BOTTOM_THIRD_YOUNG_TEETH = "#84#85"; //유치(1/3)
- var sRIGHT_BOTTOM_THIRD_TEETH = "#44#45#46#47#48"; //영구치(1/3)
- var sMIDDLE_TOP_THIRD_TEETH = "#11#12#13#21#22#23";
- var sMIDDLE_TOP_THIRD_YOUNG_TEETH = "#51#52#53#61#62#63";
- var sMIDDLE_BOTTOM_THIRD_YOUNG_TEETH = "#81#82#83#71#72#73";
- var sMIDDLE_BOTTOM_THIRD_TEETH = "#41#42#43#31#32#33";
- var sLEFT_TOP_THIRD_TEETH = "#24#25#26#27#28";
- var sLEFT_BOTTOM_THIRD_TEETH = "#34#35#36#37#38";
- var sLEFT_TOP_THIRD_YOUTH_TEETH = "#64#65";
- var sLEFT_BOTTOM_THIRD_YOUTH_TEETH = "#74#75";
- var objDiagGrdID = ""; //global grid object
- var objPrcpGrdID = ""; //global grid object
- var objCurGrdID = ""; //현재 focus가 설정된 grid
- var iDiagBfRow = 0; //이전 diaglist row의 위치
- var iPrcpBfRow = 0; //이전 prcplist row의 위치
- /**
- * @desc : 화면 초기화
- * @
- * @param :
- * @return :
- * @author : 오지훈
- * @---------------------------------------------------
- */
- function fInitialize(){
- reqHardCodeInfo("/root/send/reqdata", "/root/init/hardcd", 20);
- var hardcd = model.getValue("/root/init/hardcd/hardcd/hardcd");
- var dutplcecd = getUserInfo("dutplcecd");
- //alert(dutplcecd + "," + hardcd);
- /*
- if(hardcd != dutplcecd){ //치과의사가 아닌 경우 window종료
- messageBox("치과 의사 선생님 이외에는 치식을 등록", "E001");
- window.close();
- return;
- }*/
- model.removeNodeset("/root/main/prcplist/prcplist");
- model.removeNodeset("/root/main/diaglist/diaglist");
- fMakeSndArray();
- objDiagGrdID = grd_diaglist;
- objPrcpGrdID = grd_prcplist;
-
- if(checkOpener()){
- sTOOTFACT = opener.javascript.getParameter("param_tootfact"); //치식사항
- sDIAGLIST = opener.javascript.getParameter("param_diaglist"); //진단내용
- sPRCPLIST = opener.javascript.getParameter("param_prcplist"); //처방내용
- if(sDIAGLIST.length > 1){
- setCSVToNode("/root/main/diaglist", sDIAGLIST, "diaglist");
- model.refresh();
-
- for(var i = 1; i < objDiagGrdID.rows; i++){
- fInitLoadTootFact(model.getValue("/root/main/diaglist/diaglist[" + i + "]/rtntootfact"), i, objDiagGrdID);
- }
- fShowTootFact(model.getValue("/root/main/diaglist/diaglist/rtntootfact")); //첫번째 row값을 화면에 뿌린다.
- //objDiagGrdID.select(1,2,1,2) = true; //기본 focus를 진단 첫번째 row에 잡는다.
- objCurGrdID = objDiagGrdID;
- objCurGrdID.row = 1;
- iDiagBfRow = objDiagGrdID.row; //이전 row값을 기억해서 다른 row가 클릭된 경우 clear할 수 있도록한다.
- }
- if(sPRCPLIST.length > 1){
- setCSVToNode("/root/main/prcplist", sPRCPLIST, "prcplist");
- model.refresh();
-
- for(var i = 1; i < objPrcpGrdID.rows; i++){
- fInitLoadTootFact(model.getValue("/root/main/prcplist/prcplist[" + i + "]/rtntootfact"), i, objPrcpGrdID);
- }
- if(objDiagGrdID.rows < 2){ //진단이 없는 경우, default로 처방에 focus를 set한다.
- objCurGrdID = objPrcpGrdID;
- objCurGrdID.row = 1;
- iPrcpBfRow = objPrcpGrdID.row; //이전 row값을 기억해서 다른 row가 클릭된 경우 clear할 수 있도록한다.
- fShowTootFact(model.getValue("/root/main/prcplist/prcplist/rtntootfact")); //첫번째 row값을 화면에 뿌린다.
- }
- }
-
- objDiagGrdID.sort(1, objDiagGrdID.colRef("rowcnt"), objDiagGrdID.rows - 1, objDiagGrdID.colRef("rowcnt")) = "asc";
- objPrcpGrdID.sort(1, objPrcpGrdID.colRef("rowcnt"), objPrcpGrdID.rows - 1, objPrcpGrdID.colRef("rowcnt")) = "asc";
- objDiagGrdID.refresh();
- objPrcpGrdID.refresh();
-
- }else{
- messageBox("메인 화면을 찾는데", "E009");
- window.close();
- }
-
- //2008. 07. 04 opener에서 진단, 처방의 치식정보가 설정된 경우, 자동으로 처방선택 또는 진단선택하게 하기 위해 추가 오지훈
- var isVal = sDIAGLIST.split("▩");
- var isVal2 = sPRCPLIST.split("▩");
-
- if(isVal2.length > 1){
- grd_prcplist.row = 1;
- grd_prcplist.col = 1;
- grd_prcplist.select(grd_prcplist.row, grd_prcplist.col) = true;
- grd_prcplist.dispatch("onclick");
- grd_prcplist.refresh();
- }else if(isVal.length > 1){
- grd_diaglist.row = 1;
- grd_diaglist.col = 1;
- grd_diaglist.select(grd_diaglist.row, grd_diaglist.col) = true;
- grd_diaglist.dispatch("onclick");
- grd_diaglist.refresh();
- }
- }
- /**
- * @desc : tootfact를 ','로 구분자를 두어 화면에 표시한다.
- * @
- * @param :
- * @return :
- * @author : 오지훈
- * @---------------------------------------------------
- */
- function fInitLoadTootFact(sTootFact, curRow, grdObj){
- var loadStr = sTootFact.replaceAll(',', '').replaceAll('#', ', #').replaceAll('ⓘ', ', ⓘ');
- grdObj.valueMatrix(curRow, 1) = loadStr.substr(2, loadStr.length); //grid의 첫번째 cell에 setting!!
- model.refresh();
- }
- /**
- * @desc : 진단화면에서 load..치식data로 초기화
- * @
- * @param :
- * @return :
- * @author : 오지훈
- * @---------------------------------------------------
- */
- function fShowTootFact(sTootFact){
- if(sTootFact.length < 1){ //opener에서 넘어온 치식이 없는 경우
- return;
- }else{
- fFillColorCaption(sTootFact, "#99ccff");
- }
- }
- /**
- * @desc : 치식데이터에 따라 화면에 선택된 값을 칠한다.
- * @
- * @param :
- * @return :
- * @author : 오지훈
- * @---------------------------------------------------
- */
- function fFillColorCaption(sTeeth, sColor){
- var sCls;
- var iRow;
- var iCol;
- var tmp;
- var capObj;
-
- if(sColor == "#99ccff")
- val = 1;
- else
- val = 0;
-
- var sTempTootFact = sTeeth.replaceAll(',', '').replaceAll('#', ',#').replaceAll('ⓘ', ',ⓘ');
-
- teethPos = sTempTootFact.split(",");
- for(var i=1; i < teethPos.length; i ++ ){
- tmp = teethPos[i];
- if(!isNull(tmp)) {
- capObj = document.controls("caption" + tmp.substr(1,2)); //by sonjy 전환데이터 관련 수정 20080905
- sCls = tmp.substr(0,1);
- iRow = tmp.substr(1,1);
- iCol = tmp.substr(2,1);
- iRow--;
- iCol--;
- if(fChkValidTeeth(iRow, iCol) == true){
- if(sCls == "ⓘ") { // 임플란트 치식이면
- teethArray[iRow][iCol] = 2;
- capObj.attribute("background-color") = "#ff9090";
- } else {
- teethArray[iRow][iCol] = val;
- capObj.attribute("background-color") = sColor;
- }
- }else{
- messageBox("영구치와 유치를 동시에 선택할 수", "I004");
- return;
- }
- }
- }
- }
- /**
- * @desc : 2차원배열 생성
- * @
- * @param :
- * @return :
- * @author : 오지훈
- * @---------------------------------------------------
- */
- function fMakeSndArray(){
- for(var i = 0; i < 8; i++){
- teethArray[i] = new Array(8);
- }
- //배열의 초기값을 0로 setting한다.
- for(var i = 0; i < 8; i++){
- for(var j = 0; j < 8; j++){
- teethArray[i][j] = 0;
- }
- }
- }
- /**
- * @desc : Drag Mode에서의 치식 선택
- * @
- * @param : Caption Object - 캡션객체
- * : pos - output값
- * @return :
- * @author : 오지훈
- * @---------------------------------------------------
- */
- function fDragChoiTeeth(grdObj){
- if(grdObj.row < 1)
- return;
- var capObj = document.controls(event.target);
- var capVal = capObj.attribute("_value");
- if(capVal != ""){
- if(event.button == 1){
- var row = capVal.substr(0,1);
- var col = capVal.substr(1,2);
- row--;
- col--;
- //alert(row + "," + col);
- if(fChkValidTeeth(row, col) == true){
- var choiYN = teethArray[row][col];
- if(choiYN == 1 || choiYN == 2){
- capObj.attribute("background-color") = "#ffffff";
- teethArray[row][col] = 0;
- }else{
- var implantyn = model.getValue("/root/main/cond/implantyn");
- if(implantyn == "Y") {
- capObj.attribute("background-color") = "#ff9090";
- teethArray[row][col] = 2; // 임플란트치식
- model.setValue("/root/main/cond/implantyn", "N");
- } else {
- capObj.attribute("background-color") = "#99ccff";
- teethArray[row][col] = 1; // 일반치식
- }
- }
- }else{
- messageBox("영구치와 유치를 동시에 선택할 수", "I004");
- return;
- }
- }
- }
- fGrdInptVal(objCurGrdID);
- }
- /**
- * @desc : 선택된 치식값을 grd에 표시한다.
- * @
- * @param : Caption Object - 캡션객체
- * : pos - output값
- * @return :
- * @author : 오지훈
- * @---------------------------------------------------
- */
- function fGrdInptVal(grdObj){
- var iRow = grdObj.row;
- var iTotRow = grdObj.rows;
- if(iRow < 1){
- return;
- }
-
-
-
- for(var iRow = 1; iRow < iTotRow ; iRow++){ //멀티선택된 경우를 감안하여 전체를 검사
- if(grdObj.isSelected(iRow) == true){ //grd가 선택된 경우
- var toothcd = grdObj.valueMatrix(iRow, 0);
- if( toothcd == "" && isNull(opener.javascript.getParameter( "SPMMO10500_open" ))){ continue; } //grd에 진단코드가 맵핑 안된 경우 skip
- grdObj.valueMatrix(iRow, 1) = fMakeSaveData(2); // 치식사항(user보기용)
- grdObj.valueMatrix(iRow, 2) = fMakeSaveData(0); // 치식사항(data저장용)
- }
- }
- model.refresh();
- }
- /**
- * @desc : 치식저장될 SaveData instance를 생성함
- * @
- * @param : iPFlag : 2 - user보기용
- : iPFlag : 0 - data저장용
- * @return :
- * @author : 오지훈
- * @---------------------------------------------------
- */
- function fMakeSaveData(iPFlag){
- var saveStr = "";
- var tmpStr = "";
- var concatStr = "";
-
- if(iPFlag == 2){ //user보기용
- var concatStr = ", ";
- }else{ //data저장용
- var concatStr = "";
- }
-
- for(var i = 0; i < 8; i++){
- for(var j = 0; j < 8 ; j++){
- if(teethArray[i][j] == 1){ // 일반치식
- row = i + 1;
- col = j + 1;
- tmpStr = "#" + row + col;
- saveStr += tmpStr.concat(concatStr);
- } else if(teethArray[i][j] == 2){ // 임플란트 치식
- row = i + 1;
- col = j + 1;
- tmpStr = "ⓘ" + row + col;
- saveStr += tmpStr.concat(concatStr);
- }
- }
- }
- saveStr = saveStr.substr(0,saveStr.length-iPFlag);
- return saveStr;
- }
- /**
- * @desc : 치식데이터 init
- * @
- * @param : bPFlag : 1 - user보기용
- : bPFlag : 2 - data저장용
- * @return :
- * @author : 오지훈
- * @---------------------------------------------------
- */
- function fInitToothfact(grdObj){
- fFillColorCaption(grdObj.valueMatrix(grdObj.row, 2), "#ffffff");
- fGrdInptVal(grdObj);
- }
- /**
- * @desc : 치식데이터 확인버튼 click
- * @
- * @param :
- * @return :
- * @author : 오지훈
- * @---------------------------------------------------
- */
- function fCnfm_SPMMO10500(){
- iRow = objDiagGrdID.row;
- if(checkOpener()){
- opener.javascript.setParameter("rtn_diagtootfact", fMakeRtnTootFact(grd_diaglist, "diagcd▦tootfact▦rtntootfact▦rowcnt▩")); //진단치식사항
- opener.javascript.setParameter("rtn_prcptootfact", fMakeRtnTootFact(grd_prcplist, "prcpcd▦tootfact▦rtntootfact▦rowcnt▩")); //처방치식사항
- opener.javascript.setParameter("rtn_useyn", "Y");
- }else{
- opener.javascript.setParameter("rtn_useyn", "N");
- messageBox("메인 화면을 찾는데", "E009");
- }
- window.close();
- return;
- }
- /**
- * @desc : 치식데이터 취소버튼 click
- * @
- * @param :
- * @return :
- * @author : 오지훈
- * @---------------------------------------------------
- */
- function fCncl_SPMMO010500(){
- if(checkOpener()){
- opener.javascript.setParameter("rtn_useyn", "N");
- }else{
- messageBox("메인 화면을 찾는데", "E009");
- }
- window.close();
- return;
- }
- /**
- * @desc : 치식전달 데이터 생성
- * @
- * @param : grdObj - 그리드객체
- * @return :
- * @author : 오지훈
- * @---------------------------------------------------
- */
- function fMakeRtnTootFact(grdObj, header){
- var rtnparam = header;
- for(var i = 1; i < grdObj.rows; i++){
- rtnparam += grdObj.valueMatrix(i, 0) + "▦" + //diagcd
- grdObj.valueMatrix(i, 1) + "▦" + //tootfact
- grdObj.valueMatrix(i, 2) + "▦" + //rtntootfact
- grdObj.valueMatrix(i, 3) + "▩"; //rowcnt
- }
- return rtnparam;
- }
- /**
- * @desc : 유효한 치식 선택 검사(동일한 위치의 영구치와 유치는 선택될 수 없다.)
- * 치식을 저장하는 array의 row에 +3을 한 row위치에 값이
- * 동일하게 1로 적용되는 것을 막는다.
- *
- * ex) 11 - 51, 21 - 61, 31 - 71, 41 - 81(x)
- * @
- * @param : row - Array row값
- * : col - Array col값
- * @return :
- * @author : 오지훈
- * @---------------------------------------------------
- */
- function fChkValidTeeth(row, col){
- if(row < 4)
- tmprow = row + 4; //영구치가 선택된 경우
- else
- tmprow = row - 4; //유치가 선택된 경우
-
- /*
- if(col < 3){ // 3이하로 선택된 경우
- startcol = 0;
- endcol = 3;
- }else{ // 4이상으로 선택된 경우
- startcol = 3;
- endcol = 8;
- }*/
-
- //alert(tmprow + "," + col + "," + teethArray[tmprow][col]);
- //for(var i = startcol; i < endcol; i++){
- if(teethArray[tmprow][col] == 1){return false;}
- //}
- return true;
- }
|