SMMNR014.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432
  1. /*
  2. 간호일지I_문장 속성 입력(SMMNR01400.xfm - JScript )
  3. - Version :
  4. 1) : Ver.1.00.01
  5. */
  6. var sStmtList = "";
  7. var sPageTop = 26; // 최상위 여백 :3, 속성등록버튼 : 19, 하위 여백 : 3, 구분선 : 1) 시작위치
  8. var xStmtInfoPath = "/root/main/stmtinfo";
  9. var xAttrInfopath = "/root/init/attrinfo"; //속성정보
  10. /**
  11. * @group :
  12. * @ver : 2007.04.25
  13. * @by : 이은영
  14. * @---------------------------------------------------
  15. * @type : function
  16. * @access : public
  17. * @desc : 화면 초기화
  18. * @param :
  19. * @return :
  20. * @---------------------------------------------------
  21. */
  22. function fInit(){
  23. var sSMMNR014_Param = opener.javascript.getParameter("SMMNR014_Param");
  24. opener.javascript.setParameter("SMMNR014_Return","");
  25. if(sSMMNR014_Param == "") return;
  26. sStmtList = sSMMNR014_Param.split("▩");
  27. var sAttrInfo = "";
  28. var sStmtInfo = "";
  29. var sSendData = "";
  30. model.removenode("/root/send");
  31. model.makeNode("/root/send/attrinfo");
  32. var sStmtRow = 1; // 진술문장 인스턴스
  33. var sAttrRow = 1; // 속성 인스턴스
  34. var sAttrYN = "N";
  35. // 진술문장 별로 속성 가져오고 인스턴스 생성
  36. for(var i=0; i<sStmtList.length-1; i++){
  37. sStmtInfo = sStmtList[i].split("▦");
  38. model.makeNode(xStmtInfoPath+"["+sStmtRow+"]");
  39. model.makeValue(xStmtInfoPath+"["+sStmtRow+"]/stmtcd",sStmtInfo[0]);
  40. model.makeValue(xStmtInfoPath+"["+sStmtRow+"]/stmtcnts",sStmtInfo[1]);
  41. model.makeValue(xStmtInfoPath+"["+sStmtRow+"]/attrinfo1",sStmtInfo[2]);
  42. model.makeValue(xStmtInfoPath+"["+sStmtRow+"]/attrinfo2",sStmtInfo[3]);
  43. model.makeValue(xStmtInfoPath+"["+sStmtRow+"]/attressnyn",sStmtInfo[4]);
  44. model.makeValue(xStmtInfoPath+"["+sStmtRow+"]/dnarnm",model.getValue("/root/init/dnar/itemset[itemcd = '"+sStmtInfo[5]+"']/itemnm"));
  45. sAttrRow = 1;
  46. sAttrInfo = sStmtInfo[2].split("⊙");
  47. sAttrYN = "N";
  48. // 문장 내의 속성 가져오기
  49. for(var j=0; j<sAttrInfo.length-1; j++){
  50. model.makeNode(xStmtInfoPath+"["+sStmtRow+"]/attrinfo["+sAttrRow+"]");
  51. model.makeValue(xStmtInfoPath+"["+sStmtRow+"]/attrinfo["+sAttrRow+"]/attrseq",j);
  52. model.makeNode(xStmtInfoPath+"["+sStmtRow+"]/attrinfo["+sAttrRow+"]/attrval");
  53. model.makeNode(xStmtInfoPath+"["+sStmtRow+"]/attrinfo["+sAttrRow+"]/attrvalcd");
  54. model.makeValue(xStmtInfoPath+"["+sStmtRow+"]/attrinfo["+sAttrRow+"]/attrcd",sAttrInfo[j]);
  55. sAttrRow++;
  56. if(fExistAttrCd(sAttrInfo[j]) == "Y") continue;
  57. sSendData = model.getValue("/root/send/attrinfo");
  58. if(sSendData != "") sSendData += ",";
  59. sSendData += sAttrInfo[j];
  60. model.setValue("/root/send/attrinfo", sSendData);
  61. }
  62. sStmtRow++;
  63. }
  64. var lineCnt = 1;
  65. var sAttrFlag = "";
  66. var sAttrCD = "";
  67. var sPlnumChoiYN = "";
  68. var sStmtCnt = 0;
  69. var sStmtCnts= "";
  70. var sStmtCD = "";
  71. var sClass = "";
  72. var sClassCombo = "";
  73. var sDnarNm = "";
  74. if(submit("TRMNR01401")){
  75. sStmtRow = 1; // 진술문장 인스턴스
  76. sAttrRow = 1; // 속성 인스턴스
  77. sStmtCnt = instance1.selectNodes(xStmtInfoPath).length;
  78. for(var i=1; i<=sStmtCnt; i++){
  79. sStmtCnts = model.getValue(xStmtInfoPath+"["+i+"]/stmtcnts");
  80. sDnarNm = model.getValue(xStmtInfoPath+"["+i+"]/dnarnm");
  81. if(model.getValue(xStmtInfoPath+"["+i+"]/attressnyn") == "E"){
  82. sClass = "input_essential";
  83. sClassCombo = "combo_essential";
  84. }else{
  85. sClass = "input_default";
  86. sClassCombo = "combo_default";
  87. }
  88. sPageTop += 3; // 여백
  89. if(i > 0){
  90. fCretInputTool("line","line_3",lineCnt,sPageTop-1);
  91. lineCnt++;
  92. }
  93. fCretInputTool("cap","SS",i,sPageTop,sStmtCnts); // 진술문장
  94. fCretInputTool("cap","SA",i,sPageTop,sDnarNm); // dnar구분
  95. sPageTop += 46; // caption 크기만큼 추가
  96. sAttrInfo = model.getValue(xStmtInfoPath+"["+i+"]/attrinfo1").split("⊙");
  97. sAttrRow = 1;
  98. sStmtCD = model.getValue(xStmtInfoPath+"["+i+"]/stmtcd");
  99. for(var j=0; j<sAttrInfo.length-1; j++){
  100. sPageTop+=1; // 여백
  101. fCretInputTool("cap","A",sStmtRow+""+sAttrRow, sPageTop,model.getValue(xAttrInfopath+"[attrcd='"+sAttrInfo[j]+"']/attrnm"), xStmtInfoPath+"[stmtcd='"+sStmtCD+"']/attrinfo[attrseq='"+j+"']/attrval"); // 진술문장
  102. sAttrFlag = model.getValue(xAttrInfopath+"[attrcd='"+sAttrInfo[j]+"']/attrflag");
  103. if(sAttrFlag == "C" || sAttrFlag == "A"){ // C : 코드속성, A : 사정도구 -> 입력도구 : combo
  104. sPlnumChoiYN = model.getValue(xAttrInfopath+"[attrcd='"+sAttrInfo[j]+"']/plnumchoiyn");
  105. if(sPlnumChoiYN == "Y"){
  106. //fCretInputTool("opt","",sStmtRow+""+sAttrRow,sPageTop+1, sAttrInfo[j], xStmtInfoPath+"[stmtcd='"+sStmtCD+"']/attrinfo[attrseq='"+j+"']");
  107. fCretInputTool("opt",sClass,sStmtRow+""+sAttrRow,sPageTop+1, sAttrInfo[j], xStmtInfoPath+"[stmtcd='"+sStmtCD+"']/attrinfo[attrseq='"+j+"']");
  108. }else{
  109. fCretInputTool("cmb",sClassCombo,sStmtRow+""+sAttrRow,sPageTop+1, sAttrInfo[j], xStmtInfoPath+"[stmtcd='"+sStmtCD+"']/attrinfo[attrseq='"+j+"']/attrval");
  110. }
  111. }else if(sAttrFlag == "V" || sAttrFlag == "F"){ // V : 수치속성, F : 특수속성 -> 입력도구 : input
  112. fCretInputTool("ipt", sClass,sStmtRow+""+sAttrRow,sPageTop+1,sAttrInfo[j], xStmtInfoPath+"[stmtcd='"+sStmtCD+"']/attrinfo[attrseq='"+j+"']/attrval");
  113. }
  114. sPageTop+=23; // caption 크기만큼 추가
  115. if(j != sAttrInfo.length-1){
  116. fCretInputTool("line", "line_2",lineCnt,sPageTop-1);
  117. lineCnt++;
  118. }
  119. sAttrRow++;
  120. }
  121. fCretInputTool("line", "line_3",lineCnt,sPageTop-1);
  122. lineCnt++;
  123. sStmtRow++;
  124. sPageTop+=3;
  125. }
  126. sPageTop+=50;
  127. if(sPageTop < 600){
  128. window.setSize(520,sPageTop);
  129. }
  130. document.rebuild = true;
  131. document.body.refresh();
  132. }
  133. }
  134. /**
  135. * @group :
  136. * @ver : 2007.04.25
  137. * @by : 이은영
  138. * @---------------------------------------------------
  139. * @type : function
  140. * @access : public
  141. * @desc : 가져올 데이터의 속성 코드 존재 유무 check
  142. * @param :
  143. * @return :
  144. * @---------------------------------------------------
  145. */
  146. function fExistAttrCd(pAttrCD){
  147. var sAttrInfo = model.getValue("/root/send/attrinfo").split(",");
  148. for(var i=0; i<sAttrInfo.length; i++){
  149. if(sAttrInfo[i] == pAttrCD){
  150. return "Y";
  151. }
  152. }
  153. return "N";
  154. }
  155. /**
  156. * @group :
  157. * @ver : 2007.04.25
  158. * @by : 이은영
  159. * @---------------------------------------------------
  160. * @type : function
  161. * @access : public
  162. * @desc : caption 생성
  163. * @param : pContolFlag : cap(caption) 일 경우 pFlag ( S : 진술문장, A : 속성명), pSeq : caption 순서, pTop : top위치, pText : caption명
  164. * @param : pContolFlag : line 일 경우 pFlag : class 속성 pSeq : line 순서, pTop : top위치
  165. * @param : pContolFlag : ipt(input) 일 경우 pFlag : class 속성, pSeq : input 순서, pTop : top위치, pRefPath : 매핑 경로
  166. * @param : pContolFlag : cmb(combo) 일 경우 pFlag : class 속성, pSeq : combo 순서, pTop : top위치, pText : combolist, , pRefPath : 매핑 경로
  167. * @return :
  168. * @---------------------------------------------------
  169. */
  170. function fCretInputTool(pContolFlag, pFlag, pSeq, pTop, pText, pRefPath){
  171. var bodyobj = document.body;
  172. var sHeight = 0;
  173. var sWidth = 0;
  174. var sLeft = 0;
  175. switch(pContolFlag){
  176. case "cap":
  177. var sCapID = "";
  178. if(pFlag == "SS"){
  179. sCapID = "cap_stmtcnts"+pSeq;
  180. sHeight = 46;
  181. sWidth = 369;
  182. sLeft = 121;
  183. }else if(pFlag == "SA"){
  184. sCapID = "cap_dnarnm"+pSeq;
  185. sHeight = 46;
  186. sWidth = 120;
  187. sLeft = 0;
  188. }else if(pFlag == "A"){
  189. sCapID = "cap_attrnm"+pSeq;
  190. sHeight = 23;
  191. sWidth = 120;
  192. sLeft = 0;
  193. }
  194. bodyobj.createChild("xforms:caption", "id:"+sCapID+"; left:"+sLeft+"px; top:"+ pTop+"px; width:"+sWidth+"px; height:"+sHeight+"px; vertical-align:middle; text-align:center; class:cell_1; text:"+pText+";");
  195. break;
  196. case "line":
  197. bodyobj.createChild("xforms:line", "id:line"+pSeq+"; x1:0px; y1:"+ pTop+"px; x2:490px; y2:"+pTop+"px; class:"+pFlag+";");
  198. break;
  199. case "ipt" :
  200. bodyobj.createChild("xforms:input", "id:ipt_attrinfo"+pSeq+"; left:122px; top:"+ pTop+"px; width:368px; height:19px; class:"+pFlag+"; ref:"+pRefPath+";");
  201. break;
  202. case "cmb" :
  203. var sCmbCtrl = bodyobj.createChild("xforms:select1", "id:cmb_attrinfo"+pSeq+"; ref:"+pRefPath
  204. // +"; appearance:minimal; class:"+pFlag +"; left:122px; top:"+ pTop+"px; width:354px; height:19px;");멀티속성 입력 할 때 freetext 가능하도록 20080925 김홍점
  205. +"; appearance:minimal; editmode:input; class:"+pFlag +"; left:122px; top:"+ pTop+"px; width:354px; height:19px;");
  206. var sChoice = sCmbCtrl.createChild("xforms:choices", "id:cho_"+pSeq+";");
  207. var sItemset = sChoice.createChild("xforms:itemset", "id:iset_"+pSeq+"; nodeset:"+xAttrInfopath+"[supcd='"+pText+"'];");
  208. sItemset.createChild("xforms:label","ref:attrnm;");
  209. sItemset.createChild("xforms:value","ref:attrcd;");
  210. // clear 버튼
  211. var btnObj = bodyobj.createChild("xforms:button","id:btn_attrinfo"+pSeq+"; left:478px; top:"+(pTop+2)+"px; width:10px; height:15px; class:icon_pre");
  212. btnObj.attribute("DOMActivate") = "model.setValue(\""+pRefPath+"\",\"\"); model.refresh();";
  213. break;
  214. case "opt" :
  215. //bodyobj.createChild("xforms:output","id:opt_attrinfo"+pSeq+"; ref:"+pRefPath+"/attrval; left:122px; top:"+ pTop+"px; width:324px; height:23px; ");
  216. bodyobj.createChild("xforms:input","id:ipt_attrinfo"+pSeq+"; ref:"+pRefPath+"/attrval; left:122px; top:"+ pTop+"px; width:324px; height:23px; class:"+pFlag+"; ");
  217. // 하위 항목 입력창 호출 버튼
  218. var btnObj = bodyobj.createChild("xforms:button","id:btn_attrinfo"+pSeq+"; left:448px; top:"+pTop+"px; width:42px; height:19px; class:btn2_letter2");
  219. btnObj.attribute("text") = "입력";
  220. btnObj.attribute("DOMActivate") = "fCallDetlAttrInfo(\""+pRefPath+"\");";
  221. break;
  222. }
  223. }
  224. /**
  225. * @group :
  226. * @ver : 2007.04.26
  227. * @by : 이은영
  228. * @---------------------------------------------------
  229. * @type : function
  230. * @access : public
  231. * @desc : 속성 등록 버튼 이벤트 처리
  232. * @param :
  233. * @return :
  234. * @---------------------------------------------------
  235. */
  236. function fRgstAttrInfo(){
  237. var sStmtCnt = instance1.selectNodes(xStmtInfoPath).length;
  238. var sAttrEssnYN = ""; // 선택 : C, 필수 : E
  239. var sStmtCnts = "";
  240. var sStmtCd = "";
  241. var sRetnParamTitle = "stmtcd▦stmtcnts▦attrinfo▩";
  242. var sRetnParam = "";
  243. var sStmtInfo = "";
  244. var sRtn = messageBox("","Q004");
  245. if(sRtn != 6){
  246. return;
  247. }
  248. for(var iStmtRow=1; iStmtRow <= sStmtCnt; iStmtRow++){
  249. sAttrEssnYN = model.getValue(xStmtInfoPath+"["+iStmtRow+"]/attressnyn");
  250. sStmtCd = model.getValue(xStmtInfoPath+"["+iStmtRow+"]/stmtcd");
  251. sStmtCnts = model.getValue(xStmtInfoPath+"["+iStmtRow+"]/stmtcnts");
  252. // 속성 필수 입력 check
  253. if(sAttrEssnYN == "E" && fExistAttrInput(xStmtInfoPath+"["+iStmtRow+"]/attrinfo") == "N"){
  254. messageBox(sStmtCnts+" 진술문은 속성이","I003");
  255. return;
  256. }
  257. sStmtInfo = fMakeStmt(xStmtInfoPath+"["+iStmtRow+"]");
  258. sRetnParam += sStmtCd+"▦"
  259. + sStmtInfo+"▩";
  260. }
  261. opener.javascript.setParameter("SMMNR014_Return",sRetnParamTitle+sRetnParam);
  262. model.close();
  263. }
  264. /**
  265. * @group :
  266. * @ver : 2007.04.26
  267. * @by : 이은영
  268. * @---------------------------------------------------
  269. * @type : function
  270. * @access : public
  271. * @desc : 필수 입력 진술문 내의 속성이 모두 입력되었는지 여부
  272. * @param : pPath : 속성 path
  273. * @return :
  274. * @---------------------------------------------------
  275. */
  276. function fExistAttrInput(pPath){
  277. var sAttrCnt = instance1.selectNodes(pPath).length;
  278. for(var iAttrRow=1; iAttrRow<= sAttrCnt; iAttrRow++){
  279. if(model.getValue(pPath+"["+iAttrRow+"]/attrval") == ""){
  280. return "N";
  281. }
  282. }
  283. return "Y";
  284. }
  285. /**
  286. * @group :
  287. * @ver : 2007.04.26
  288. * @by : 이은영
  289. * @---------------------------------------------------
  290. * @type : function
  291. * @access : public
  292. * @desc : 입력받은 속성정보를 가지고 완성된 진술문장을 만든다.
  293. * @param :
  294. * @return :
  295. * @---------------------------------------------------
  296. */
  297. function fMakeStmt(pStmtPath){
  298. //속성입력 에러로 인한 추가 로직
  299. var sAttrCnt = 0; //속성 카운터 수
  300. var sAttrLength = 0; //속성 전체길이
  301. var sStmtInfo = "";
  302. //var sSplitBfStmt = model.getValue(pStmtPath+"/stmtcnts").split(" ");
  303. var sSplitBfStmt = model.getValue(pStmtPath+"/stmtcnts");
  304. for(var i=0 ; i < sSplitBfStmt.length ; i++ ){
  305. if( sSplitBfStmt.substr(i, 1) == "(" ) {
  306. sAttrCnt ++;
  307. }else if(sSplitBfStmt.substr(i, 1) == ")" ){
  308. sAttrCnt --;
  309. }
  310. if(sAttrCnt == 0){
  311. sStmtInfo += sSplitBfStmt.substr(i, 1);
  312. }else{
  313. if(sSplitBfStmt.substr(i, 1) == " "){
  314. sStmtInfo += "^";
  315. }else{
  316. sStmtInfo += sSplitBfStmt.substr(i, 1);
  317. }
  318. }
  319. }
  320. sStmtInfo = sStmtInfo.split(" ");
  321. var sAttrInfo1 = model.getValue(pStmtPath+"/attrinfo1").split("⊙");
  322. var sAttrInfo2 = model.getValue(pStmtPath+"/attrinfo2").split(" ");
  323. var sStmtCnts = ""; // 완성된 문장
  324. var sAttrInfo = ""; // 기록을 원하는 속성명
  325. var sAttrSeq = 0; // 속성 위치
  326. var sAttrCd = ""; // 속성코드
  327. var sAttrNM = ""; // 속성명 (combo)
  328. var sAttrFlag = ""; // 속성 구분
  329. var sAttrVal = ""; // 입력된 속성명
  330. var sUnitNM = ""; // 단위명
  331. var sPlNumChoiYN = ""; // 속성 멀티 입력 여부
  332. var sTmpAttrNM = ""; // 속성을 제외한 기호
  333. for(var i=0; i<sStmtInfo.length; i++){
  334. sStmtInfo[i] = sStmtInfo[i].replace("^", " ");
  335. if(sStmtInfo[i] == sAttrInfo2[i]){
  336. sStmtCnts += sStmtInfo[i]+" "; // 속성이 아닌 경우
  337. }else{
  338. sAttrSeq = sAttrInfo2[i].substr(1,1);
  339. sAttrCd = model.getValue(pStmtPath+"/attrinfo[attrseq='"+sAttrSeq+"']/attrcd"); // 속성 성격을 찾기 위해 사용 (combo인지, input 상자인지)
  340. sAttrFlag = model.getValue(xAttrInfopath+"[attrcd='"+sAttrCd+"']/attrflag");
  341. sAttrVal = model.getValue(pStmtPath+"/attrinfo[attrseq='"+sAttrSeq+"']/attrval");
  342. sTmpAttrNM = sStmtInfo[i].replace(model.getValue(xAttrInfopath+"[attrcd='"+sAttrCd+"']/attrnm"),"");
  343. if(sAttrFlag == "C" || sAttrFlag == "A"){ // C : 코드속성, A : 사정도구 -> 입력도구 : combo
  344. sPlNumChoiYN = model.getValue(xAttrInfopath+"[attrcd='"+sAttrCd+"']/plnumchoiyn");
  345. if(sPlNumChoiYN == "Y"){ // 멀티 입력 여부
  346. if(sAttrVal != "") sStmtCnts += sAttrVal+sTmpAttrNM+" ";
  347. sAttrInfo += sAttrVal+"⊙";
  348. }else{
  349. sAttrNM = model.getValue(xAttrInfopath+"[attrcd='"+sAttrVal+"']/attrnm");
  350. if(sAttrNM != ""){
  351. sStmtCnts += sAttrNM+sTmpAttrNM+" ";
  352. sAttrInfo += sAttrNM+"⊙";
  353. }else if(sAttrVal != "" && sAttrNM == ""){
  354. sStmtCnts += sAttrVal+sTmpAttrNM+" ";
  355. sAttrInfo += sAttrVal+"⊙";
  356. }
  357. }
  358. }else if(sAttrFlag == "F"){ // F : 특수속성 -> 입력도구 : input
  359. if(sAttrVal != "") sStmtCnts += sAttrVal +sTmpAttrNM+ " ";
  360. sAttrInfo += sAttrVal+"⊙";
  361. }else if(sAttrFlag == "V" ){ // V : 수치속성 -> 입력도구 : input값 + 단위명
  362. sUnitNM = model.getValue(xAttrInfopath+"[attrcd='"+sAttrCd+"']/unitnm");
  363. if(sAttrVal != ""){
  364. sStmtCnts += sAttrVal + sUnitNM +sTmpAttrNM+ " ";
  365. sAttrInfo += sAttrVal + sUnitNM +"⊙";
  366. }else{
  367. sAttrInfo += "⊙";
  368. }
  369. }
  370. }
  371. }
  372. sStmtCnts = sStmtCnts.replace(" ", " ");
  373. return sStmtCnts+"▦"+sAttrInfo;
  374. }
  375. /**
  376. * @group :
  377. * @ver : 2007.04.26
  378. * @by : 이은영
  379. * @---------------------------------------------------
  380. * @type : function
  381. * @access : public
  382. * @desc : 다중 선택의 속성코드의 경우 멀티 선택 가능 화면을 호출한다.
  383. * @param : pCode : 속성 코드
  384. * @return :
  385. * @---------------------------------------------------
  386. */
  387. function fCallDetlAttrInfo(pRefPath){
  388. var sRtn_Msg = "";
  389. var sAttrInfo = "";
  390. setParameter("SPMNR03000_Param",model.getValue(pRefPath+"/attrcd"));
  391. modal("SPMNR03000");
  392. setParameter("SPMNR03000_Param","");
  393. sRtn_Msg = getParameter("SPMNR03000_Return");
  394. if(sRtn_Msg == "" ) return;
  395. sAttrInfo = sRtn_Msg.split("▦");
  396. model.setValue(pRefPath+"/attrval",sAttrInfo[0]);
  397. model.setValue(pRefPath+"/attrvalcd",sAttrInfo[1]);
  398. model.refresh();
  399. }