123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495 |
- /**
- * 최초 로딩시
- */
- function fInit() {
- //사용자 정보가 없으면 닫기
- fGetPatInfo();
- //하드코드 정보 조회
- fGethardcdArrayList(new Array('hardcd5901|5901', 'hardcd5902|5902', 'hardcd5903|5903', 'hardcd5904|5904', 'hardcd5905|5905', 'hardcd5906|5906', 'hardcd5907|5907', 'hardcd5908|5908', 'hardcd5909|5909', 'hardcd5910|5910', 'hardcd5911|5911',
- 'hardcd5912|5912', 'hardcd5913|5913', 'hardcd5914|5914', 'hardcd5915|5915', 'hardcd5916|5916', 'hardcd5917|5917', 'hardcd5918|5918', 'hardcd5919|5919', 'hardcd5920|5920', 'hardcd5921|5921', 'hardcd5922|5922', 'hardcd5923|5923',
- 'hardcd5931|5931', 'hardcd5932|5932', 'hardcd5933|5933', 'hardcd5934|5934', 'hardcd5935|5935', 'hardcd5936|5936'),
- new Array('/root/init','/root/init','/root/init','/root/init','/root/init','/root/init','/root/init','/root/init','/root/init','/root/init','/root/init','/root/init','/root/init','/root/init','/root/init','/root/init','/root/init',
- '/root/init','/root/init','/root/init','/root/init','/root/init','/root/init', '/root/init','/root/init','/root/init','/root/init','/root/init','/root/init'));
- //상세정보 조회
- fGetDetlInfo();
-
- //버튼 처리(심사/심사파트, 의사 구분하여)
- fProcBtn();
- }
- /**
- * 선택한 환자 정보 설정
- */
- function fGetPatInfo() {
- var node = getGlobalVariable("paminfo");
- setCSVToNode("/root/main/session/paminfo", node);
- if (model.getValue("/root/main/session/paminfo/list/pid") == "") {
- if(checkOpener() && opener.model.getValue("/root/hidden/temp/pid") != "") {
- var p = opener.model;
- model.setValue("/root/send/reqdata/pid", p.getValue("pid"));
- model.setValue("/root/send/reqdata/orddd", p.getValue("indd"));
- model.setValue("/root/send/reqdata/cretno", p.getValue("cretno"));
- model.setValue("/root/send/reqdata/ordtype", p.getValue("ordtype"));
-
- } else {
- messageBox("환자를 선택하지", "E007");
- opener.close();
- }
- } else {
- //진단 조회용
- model.setValue("/root/send/reqdata/instcd", model.getValue("/root/main/session/paminfo/list/instcd"));
- model.setValue("/root/send/reqdata/pid", model.getValue("/root/main/session/paminfo/list/pid"));
- model.setValue("/root/send/reqdata/orddd", model.getValue("/root/main/session/paminfo/list/indd"));
- model.setValue("/root/send/reqdata/cretno", model.getValue("/root/main/session/paminfo/list/cretno"));
- model.setValue("/root/send/reqdata/ioflag", model.getValue("/root/main/session/paminfo/list/ioflag"));
- model.setValue("/root/send/reqdata/orddeptcd", model.getValue("/root/main/session/paminfo/list/orddeptcd"));
- model.setValue("/root/send/reqdata/fromdd", model.getValue("/root/main/session/paminfo/list/indd"));
- model.setValue("/root/send/reqdata/todd", model.getValue("/root/main/session/paminfo/list/dschdd"));
- }
- return true;
- }
- /**
- * 원무 정보로 서식 상세정보 조회
- */
- function fGetDetlInfo() {
- if (submit("TRMMR09000")) {
- //서식 원무정보 설정
- if(checkOpener() && opener.model.getValue("/root/hidden/temp/pid") != "") {
- var p = opener.model;
- model.setValue("/root/main/detlinfo/formdetl[itemcd='DI010001']/itemval1", p.getValue("/root/hidden/temp/orddeptcd"));
- model.setValue("/root/main/detlinfo/formdetl[itemcd='DI010002']/itemval1", p.getValue("/root/hidden/temp/hngnm"));
- model.setValue("/root/main/detlinfo/formdetl[itemcd='DI010003']/itemval1", p.getValue("/root/hidden/temp/rrgstno"));
- model.setValue("/root/main/detlinfo/formdetl[itemcd='DI010004']/itemval1", p.getValue("/root/hidden/temp/dschdd"));
-
- //심사실 로그인정보.. dutplce
- } else {
- model.setValue("/root/main/detlinfo/formdetl[itemcd='DI010001']/itemval1", model.getValue("/root/main/session/paminfo/list/orddeptcd"));
- model.setValue("/root/main/detlinfo/formdetl[itemcd='DI010002']/itemval1", model.getValue("/root/main/session/paminfo/list/hngnm"));
- model.setValue("/root/main/detlinfo/formdetl[itemcd='DI010003']/itemval1", model.getValue("/root/main/session/paminfo/list/rrgstno1")+ ""+ model.getValue("/root/main/session/paminfo/list/rrgstno2"));
- model.setValue("/root/main/detlinfo/formdetl[itemcd='DI010004']/itemval1", model.getValue("/root/main/session/paminfo/list/dschdd"));
- }
- /**
- * 환자과별 설정
- * 안과 :2120000000, 외과 : 2040000000, 산부인과 : 2100000000, 이비인후과 : 2130000000
- */
- switch (model.getValue("/root/main/detlinfo/formdetl[itemcd='DI010001']/itemval1")) {//model.getValue("/root/main/session/paminfo/list/orddeptcd")) {
- case '2120000000' :
- cmb2_3a.choices.itemset.attribute("nodeset") = "/root/init/hardcd5908/hardcd[hardcd='1']";
- rdo_5931.attribute("required") = "{msg:'[단안/양안] 여부'}";
- rdo_5932.attribute("required") = "{msg:'[소절개/대절개] 여부'}";
- model.toggle("안과");
- break;
- case '2040000000' :
- case '2040400000' :
- case '2041300000' :
- case '2041700000' :
- cmb2_3a.choices.itemset.attribute("nodeset") = "/root/init/hardcd5908/hardcd[hardcd='3' or hardcd='4' or hardcd='5']";
- //rdo_5933.attribute("required") = "{msg:'[개복술/복강경수술] 여부'}";
- //rdo_5934.attribute("required") = "{msg:'[편측/양측] 여부'}";
- model.toggle('외과');
- break;
- case '2100000000' :
- cmb2_3a.choices.itemset.attribute("nodeset") = "/root/init/hardcd5908/hardcd[hardcd='6' or hardcd = '7']";
- rdo_5935.attribute("required") = "{msg:'[개복술/자궁경/복강경수술] 여부'}";
- model.toggle('산부인과');
- break;
- case '2130000000' :
- cmb2_3a.choices.itemset.attribute("nodeset") = "/root/init/hardcd5908/hardcd[hardcd='2']";
- rdo_5936.attribute("required") = "{msg:'[부비동 내시경사용] 여부'}";
- model.toggle('이비인후과');
- break;
- default :
- switch1.visible = false;
- }
- //아직 저장된 주진단, 기타진단이 없는 경우 진단내역 조회
- if (model.getValue("/root/main/detlinfo/formdetl[itemcd='DI010006']/itemval1") == "") {
- fGetDiagInfo(); //진단 정보 조회
- } else {
- var s = "/root/temp/diaginfo/diagcdlist";
- var iCnt = getNodesetCount(s);
- var iFirst = 7;
- for (var i = 9; i <= 38; i++) { //기타진단 저장을 위한 노드가 10개밖에 없다네~~
- if (model.getValue("/root/main/detlinfo/formdetl[itemcd='DI0100"+ (i+"").getLeftPad(2, "0") +"']/itemval1") == "") {
- i++;
- continue;
- }
- grd_diag.addRow();
- grd_diag.valueMatrix(grd_diag.row, grd_diag.colRef("diagcd")) = model.getValue("/root/main/detlinfo/formdetl[itemcd='DI0100"+ ((i++)+"").getLeftPad(2, "0") +"']/itemval1");
- grd_diag.valueMatrix(grd_diag.row, grd_diag.colRef("diaghngnm")) = model.getValue("/root/main/detlinfo/formdetl[itemcd='DI0100"+ ((i++)+"").getLeftPad(2, "0") +"']/itemval1");
- grd_diag.valueMatrix(grd_diag.row, grd_diag.colRef("poa")) = model.getValue("/root/main/detlinfo/formdetl[itemcd='DI0100"+ (i+"").getLeftPad(2, "0") +"']/itemval1");
- }
- }
- //2.3 수술 합병증 및 부작용은 상위 콤보값에 따라 세분류 콤보값이 달라짐
- cmb2_3a.dispatch("xforms-value-changed");
- //수술 합병증 관련 델리미터("|") 포함된 문자열을 그리드에 설정
- var s = grd2_3.nodeset;
- var val = model.getValue("/root/main/detlinfo/formdetl[itemcd='DI010054']/itemval1");
- if (val.indexOf("|") != -1) {
- var arr = val.split("|");
- for (var i = 0; i < arr.length; i++) { //그리드 기 선택된 값의 체크박스 설정
- for (var j = 0; j <= grd2_3.rows; j++) {
- if (grd2_3.valueMatrix(j, grd2_3.colRef("hardcd")) == arr[i]) {
- grd2_3.valueMatrix(j, grd2_3.colRef("chk")) = "true";
- }
- }
- }
- }
- }
- model.refresh();
- }
- /***
- * 진단 정보 조회
- */
- function fGetDiagInfo() {
- //주진단 조회 //현재 주진단 부진단 구분이 SUBMIT에는 있는데.... 쿼리에는 없음.. 그래서 kindcdflag에 값을 loop안에서 구분하여.. 설정해줘야 할것 같은데..
- model.makeValue("/root/send/reqdata/mskind", "M");
- if (submit("TRMMR02908")) {
- var s = "/root/temp/diaginfo/diagcdlist";
- var iCnt = getNodesetCount(s);
- for (var i = 0; i < iCnt; i++) {
- if (model.getValue(s+"["+ (i+1) +"]/diagkindcdflag") == "S") {
- grd_diag.addRow();
- grd_diag.valueMatrix(grd_diag.row, grd_diag.colRef("diagcd")) = model.getValue(s+"["+ (i+1) +"]/diagcd");
- grd_diag.valueMatrix(grd_diag.row, grd_diag.colRef("diaghngnm")) = model.getValue(s+"["+ (i+1) +"]/diaghngnm");
- grd_diag.valueMatrix(grd_diag.row, grd_diag.colRef("poa")) = "";
- } else if (model.getValue(s+"["+ (i+1) +"]/diagkindcdflag") == "M") {
- model.setValue("/root/main/detlinfo/formdetl[itemcd='DI010006']/itemval1", model.getValue(s+"["+ (i+1) +"]/diagcd"));
- model.setValue("/root/main/detlinfo/formdetl[itemcd='DI010007']/itemval1", model.getValue(s+"["+ (i+1) +"]/diaghngnm"));
- }
- }
- grd_diag.refresh();
- }
- //기타주진단 조회
- /**
- model.makeValue("/root/send/reqdata/mskind", "S");
- if (submit("TRMMR02908")) {
- model.setValue("/root/main/detlinfo/formdetl[itemcd='DI010006']/itemval1", model.getValue("/root/temp/diaginfo/diaghngnm"));
- }
- */
- }
- /**
- * 설명 비고 팝업
- */
- function fProcBtn() {
- if (getUserInfo("jobkindcd").indexOf("03") > -1) { //의사인 경우 '저장만 보이게'
- opener.btn_save.visible = "true";
- opener.btn_complete.visible = "false";
- opener.btn_cancel.visible = "false";
- }
- if (getUserInfo("dutplcecd") == "4072000000" || getUserInfo("dutplcecd") == '4070700000') { //심사팀, 심사파트인 경우
- opener.btn_save.visible = "true";
- opener.btn_complete.visible = "true";
- opener.btn_cancel.visible = "true";
-
- }
-
- if (model.getValue("/root/main/detlinfo/master/status") == "C") {
- opener.btn_save.disabled = true;
- opener.btn_complete.disabled = true;
- opener.btn_cancel.disabled = false;
- } else {//if (model.getValue("/root/main/detlinfo/master/status") == "A") {
- opener.btn_save.disabled = false;
- opener.btn_complete.disabled = false;
- opener.btn_cancel.disabled = true;
- }
- }
- /**
- * 설명 비고 팝업
- */
- function fShowDesc() {
- var iEventX = parseInt(event.clientX, 10) - 315;
- var iEventY = parseInt(event.clientY, 10) + 10;
- grp_desc.attribute("style") = style="left:"+ iEventX +"px; top:"+ iEventY +"px; width:315px; height:230px; ";
- var iLen = arguments.length;
- var s = "";
- for (var i = 0; i < iLen; i++) {
- var arr = arguments[i].split('|');
- s += "\n"+ model.getValue("/root/init/hardcd"+arr[0]+"/hardcd[hardcd='"+arr[1]+"']/hardcdnm");
- }
- if (iLen > 1) {
- s = s.substr(1);
- }
- model.setValue("/root/hidden/desc", s);
- model.refresh();
- grp_desc.visible = true;
- }
- /**
- * 현재 의료질 향상 점검표 서식 정보 저장
- */
- function fConfirm(status) {
- var msg = "저장";
- model.makeValue("/root/main/detlinfo/master/status", status);
- switch (status) {
- case "A":
- msg = "저장";
- break;
- case "C":
- msg = "종결";
- break;
- case "R":
- model.makeValue("/root/main/detlinfo/master/status", "A");
- msg = "종결취소";
- break;
- default :
- msg = "저장";
- }
-
-
- //기타진단 저장 그리드 자료를 서식 자료로
- var s = "/root/main/diaginfo/diagcdlist";
- var iCnt = getNodesetCount(s);
- var iFirst = 9;
- var diagnm = "";
- var poa = "";
- var diagcd = "";
- for (var i = 1; i<= 10; i++) {//i <= iCnt; i++) { //기타진단 저장 그리드 자료를 서식 자료로
- if (i > iCnt) {
- diagcd = "";
- diagnm = "";
- poa = "";
- } else {
- diagcd = model.getValue("/root/main/diaginfo/diagcdlist["+i+"]/diagcd");
- diagnm = model.getValue("/root/main/diaginfo/diagcdlist["+i+"]/diaghngnm");
- poa = model.getValue("/root/main/diaginfo/diagcdlist["+i+"]/poa");
- }
- model.setValue("/root/main/detlinfo/formdetl[itemcd='DI0100"+ ((iFirst++)+"").getLeftPad(2, "0") +"']/itemval1", diagcd);
- model.setValue("/root/main/detlinfo/formdetl[itemcd='DI0100"+ ((iFirst++)+"").getLeftPad(2, "0") +"']/itemval1", diagnm);
- model.setValue("/root/main/detlinfo/formdetl[itemcd='DI0100"+ ((iFirst++)+"").getLeftPad(2, "0") +"']/itemval1", poa);
- }
- //수술 합병증 관련 그리드 선택을 델리미터('|') 포함된 문자열로
- s = grd2_3.nodeset;
- iCnt = getNodesetCount(s);
- var rslt = "";
- for (var i = 1; i <= iCnt; i++) {
- if (model.getValue(s+"["+ i +"]/chk") == "true") {
- rslt += "|" + model.getValue(s+"["+ i +"]/hardcd");
- }
- }
- //if (iCnt > 1) {
- //rslt = rslt.substring(1);
- model.setValue("/root/main/detlinfo/formdetl[itemcd='DI010054']/itemval1" , rslt);
- //}
- if (!fValidAll()) {
- return;
- }
-
- //로그인 구분에 따라.. status설정?? 20130508
- model.makeValue("/root/main/detlinfo/masterinfo", getPrcpNodeListCSV(instance1.selectNodes("/root/main/detlinfo/master")));
- if (submit("TXMMR09000")) {
- if (model.getValue("/root/hidden/savedetl/rslt/success") == "true") {
- messageBox(msg+"되었습니다.", "I000");
- fProcBtn();
- }
- }
- }
- /**
- * 주/기타 진단 팝업
- */
- function fPopDiag(o) {
- setParameter("SPMMO03100_patinfo", model.getValue("/root/send/reqdata/pid")+"▦"+model.getValue("/root/send/reqdata/orddd"));
- fPrcpModal ("SPMMO03100", 5, 40);
- if ( getParameter( "SPMMO03100_rtn_useyn" ) == "Y" ) {
- var rtn = getParameter( "SPMMO03100_rtn" ); //이걸 왜 델리미터 문자열로 반환해서 이고생인지.. 걍 인스턴스로 주던가 하면 명확할텐데.. 넘겨줄때 스트링문자열로 바꿔 넘겨받아서 또 잘라서 배열이나 다른 형태로 또 바꿔.. 에효!!
- var list = fTransList(rtn); //델리미터로 구분된 문자열을 자바형태의 ArrayList로 변환
-
- if (o.grid == "" || o.grid == "undefined" || o.grid == undefined) {
- document.all(o.cd).value = list.get(0).get("diagcd");
- document.all(o.nm).value = list.get(0).get("diaghngnm");
- } else {
- var t = document.all(o.grid);
- var iRow = t.row;
- var iTot = iRow + list.length();
- var j = 0;
-
- for (var i = iRow; i < iTot; i++) { //현재 로우부터 선택된 행 만큼
- var m = list.get(j++);
- if (i >= t.rows) {
- t.addRow(); //행이 없을 경우 행추가
- }
- t.valueMatrix(i, t.colRef(o.cd)) = m.get("diagcd");
- t.valueMatrix(i, t.colRef(o.nm)) = m.get("diaghngnm");
- }
- }
- model.refresh();
- setParameter( "SPMMO03100_rtn_useyn", "" );
- }
-
-
- }
- /**
- * 필수 입력 및 유효성 체크
- * attribute이용
- * ex) required="Y" , requiredEither="{obj:'rdo2_1_1b', msg:'예/아니오'}", requiredWith="{obj:['rdo1_1_1', 'rdo1_1_2', 'rdo1_1_3'], msg:'수술전 검사 시점', when:'B'}"
- */
- function fValidAll() {
- var w = document.controls;
- for (var i =0; i < w.length; i++) {
- var o = w.item(i);
-
- var v = null;
- //필수 입력
- if (o.attribute("required") != "" ) {
- eval("v = "+o.attribute("required")); //넣어두기는 object형태로 넣어뒀는데.. 문자열로 인식해서 eval로 다시 오브젝트 형태로 바꿔줌
- if (o.value == "") {
- messageBox(v.msg+"은(는)", "I003");
- model.setFocus(o.attribute("id"));
- return;
- }
- }
- //두개의 값중 하나는 필수
- if (o.attribute("requiredEither") != "" ) {
- if (o.value == "") {
- eval("v = "+o.attribute("requiredEither"));
- if (document.all(v.obj).value == "") {
- messageBox(v.msg+" 둘중 하나를 반드시 ", "C002");
- model.setFocus(v.obj);
- return;
- }
- }
- }
- //연결된 다른 컨트롤의 값이 필수
- if (o.attribute("requiredWithOne") != "") {
- if (o.value != "") {
- eval("v ="+o.attribute("requiredWithOne"));
- var arr = v.obj;
- var bExist = false;
- if (o.elementName == "xforms:select1" && o.attribute("appearance") == "full") { //라디오 일 경우 해당 컨트롤이 체크된 경우만 체크 수행
- if (v.when != o.value) {
- continue;
- }
- }
- for (var j = 0; j < arr.length && !bExist; j++) {
- var t = document.all(arr[j]);
- if (t.value != "") {
- bExist = true;
- break;
- }
- }
- if (!bExist) {
- messageBox(v.msg+" 중 하나를 반드시 ", "C002");
- model.setFocus(v.obj);
- return;
- }
- }
- }
- //연결된 다른 컨트롤의 값이 필수
- if (o.attribute("requiredWithAll") != "") {
- if (o.value != "") {
- eval("v ="+o.attribute("requiredWithAll"));
- var arr = v.obj;
- var bExist = true;
- if (o.elementName == "xforms:select1" && o.attribute("appearance") == "full") { //라디오 일 경우 해당 컨트롤이 체크된 경우만 체크 수행
- if (v.when != o.value) {
- continue;
- }
- }
- for (var j = 0; j < arr.length && bExist; j++) {
- var t = document.all(arr[j]);
- if (t.elementName == "xforms:datagrid") { //데이타 그리드 일때 체크된 값이 있는지 체크
- var iChk = getNodesetCount(t.nodeset+"[chk='true']");
- if (iChk == 0) {
- bExist = false;
- }
- } else {
- if (t.value == "") {
- bExist = false;
- }
- }
- }
- if (!bExist) {
- messageBox(v.msg+" 를 반드시 ", "C002");
- model.setFocus(v.obj);
- return;
- }
- }
- }
- }
-
-
-
- var poi = model.getValue("/root/main/detlinfo/formdetl[itemcd='DI010008']/itemval1") ;
- if (poi =="") {
- messageBox("주진단의 POI이 없습니다", "I999");
- return;
- }
-
-
- //외과 예외사항
- var patdeptcd = model.getValue("/root/main/detlinfo/formdetl[itemcd='DI010001']/itemval1") ;
- if (patdeptcd =="2040000000") {
- if (rdo_5933.value == "" && rdo_5934.value =="") {
- var msg ="[개복술/복강경수술] 여부 또는 [편측/양측] 여부를 반드시 입력하셔야 합니다";
- messageBox(msg, "I999");
- return;
- }
- }
- return true;
- }
- /**
- * 진단 팝업으로 받은 델리미터 문자열을 ArrayList<Map>(emr/common/util.js)로 변경해서 반환
- */
- function fTransList(s) {
- var colSep = "▦";
- var rowSep = "▩";
-
- var arrRow = s.split(rowSep);
- var list = new ArrayList();
- for (var i = 1; i < arrRow.length; i++) {
- var arrName = arrRow[0].split(colSep);
- var arrCol = arrRow[i].split(colSep);
- var curMap = new Map();
- for (var j = 0; j < arrCol.length; j++) {
- curMap.put(arrName[j], arrCol[j]);
- }
- if (arrCol.length > 0 && arrRow[i] != "") {
- list.add(curMap);
- }
- }
- return list;
- }
|