SPMMP01500_CP색인관리.xrw 72 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782
  1. <?xml version="1.0" encoding="EUC-KR"?>
  2. <?xml-stylesheet href="../../../com/commonweb/css/common.css" type="text/css" ?>
  3. <xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.w3.org/2002/01/xforms" xmlns:ev="http://www.w3.org/2001/xml-events">
  4. <xhtml:head>
  5. <xhtml:title>CPG 색인관리</xhtml:title>
  6. <model id="model1">
  7. <instance id="instance1">
  8. <root xmlns="">
  9. <main>
  10. <formdata>
  11. <item>
  12. <status/>
  13. <indxno/>
  14. <indxnm/>
  15. <supindxno/>
  16. <indxrefseq/>
  17. <depth/>
  18. <indxseq/>
  19. <cpgno/>
  20. <cpghistseq/>
  21. <image/>
  22. <cpgflagcd/>
  23. </item>
  24. <cpinfo>
  25. <appdd/>
  26. <cpgno/>
  27. <cpghistseq/>
  28. <purpose/>
  29. </cpinfo>
  30. </formdata>
  31. <indxlist>
  32. <itemlist>
  33. <item>
  34. <status/>
  35. <indxno/>
  36. <indxnm/>
  37. <supindxno/>
  38. <indxrefseq/>
  39. <depth/>
  40. <indxseq/>
  41. <cpgno/>
  42. <cpghistseq/>
  43. <image/>
  44. <cpgflagcd/>
  45. </item>
  46. </itemlist>
  47. <popupmenu>
  48. <tree>
  49. <supmenu>
  50. <name>새폴더</name>
  51. <func>fFolderAdd</func>
  52. </supmenu>
  53. <supmenu>
  54. <name>-</name>
  55. <func/>
  56. </supmenu>
  57. <supmenu>
  58. <name>폴더붙여넣기</name>
  59. <func>fPasteFolder</func>
  60. </supmenu>
  61. <!--
  62. <supmenu>
  63. <name>색인 추가</name>
  64. <func>fIndxAdd</func>
  65. </supmenu>
  66. -->
  67. <submenu>
  68. <name>새폴더</name>
  69. <func>fFolderAdd</func>
  70. </submenu>
  71. <submenu>
  72. <name>이름바꾸기</name>
  73. <func>fFolderSet</func>
  74. </submenu>
  75. <submenu>
  76. <name>삭제</name>
  77. <func>fFolderDel</func>
  78. </submenu>
  79. <submenu>
  80. <name>-</name>
  81. <func/>
  82. </submenu>
  83. <submenu>
  84. <name>폴더복사</name>
  85. <func>fCopyFolder</func>
  86. </submenu>
  87. <!--
  88. <submenu>
  89. <name>색인 추가</name>
  90. <func>fIndxAdd</func>
  91. </submenu>
  92. -->
  93. <indxmenu>
  94. <name>미등록변경</name>
  95. <func>fIndxSet</func>
  96. </indxmenu>
  97. <indxmenu>
  98. <name>종료변경</name>
  99. <func>fToEndIndxSet</func>
  100. </indxmenu>
  101. <indxmenu>
  102. <name>-</name>
  103. <func/>
  104. </indxmenu>
  105. <indxmenu>
  106. <name>삭제</name>
  107. <func>fIndxDel</func>
  108. </indxmenu>
  109. <tmpindxmenu>
  110. <name>등록변경</name>
  111. <func>fTmpIndxSet</func>
  112. </tmpindxmenu>
  113. <tmpindxmenu>
  114. <name>종료변경</name>
  115. <func>fToEndIndxSet</func>
  116. </tmpindxmenu>
  117. <tmpindxmenu>
  118. <name>-</name>
  119. <func/>
  120. </tmpindxmenu>
  121. <tmpindxmenu>
  122. <name>삭제</name>
  123. <func>fIndxDel</func>
  124. </tmpindxmenu>
  125. <endindxmenu>
  126. <name>종료취소</name>
  127. <func>fFromEndIndxSet</func>
  128. </endindxmenu>
  129. <endindxmenu>
  130. <name>-</name>
  131. <func/>
  132. </endindxmenu>
  133. <endindxmenu>
  134. <name>삭제</name>
  135. <func>fIndxDel</func>
  136. </endindxmenu>
  137. </tree>
  138. </popupmenu>
  139. </indxlist>
  140. <indexinfo>
  141. <item/>
  142. </indexinfo>
  143. <srcindxinfo>
  144. <itemlist/>
  145. </srcindxinfo>
  146. </main>
  147. <hidden/>
  148. <send/>
  149. <init/>
  150. <temp>
  151. <copysset>
  152. <!--
  153. <copy>
  154. <item/>
  155. </copy>
  156. -->
  157. <copyfolderinfo>
  158. <item/>
  159. </copyfolderinfo>
  160. </copysset>
  161. <supindx>
  162. <supindxno/>
  163. </supindx>
  164. <reqdata>
  165. <cpgno/>
  166. <cpghistseq/>
  167. <cpgflagcd/>
  168. <cpgnm/>
  169. <selectindxcd/>
  170. <selectindxnm/>
  171. </reqdata>
  172. <selecedkind>
  173. <kind/>
  174. </selecedkind>
  175. <savedfolder>
  176. <item>
  177. <indxno/>
  178. <indxseq/>
  179. <supindxno/>
  180. <indxrefseq/>
  181. <indxnm/>
  182. </item>
  183. </savedfolder>
  184. <openeruid/>
  185. <indxdelyn>N</indxdelyn>
  186. </temp>
  187. </root>
  188. </instance>
  189. <script type="javascript" ev:event="xforms-ready">
  190. <![CDATA[
  191. //fInitialize();
  192. ]]>
  193. </script>
  194. <submission id="TRMMP01501" mediatype="application/x-www-form-urlencoded" method="post" ref="/root/send/reqdata" resultref="/root/main/srcindxinfo/itemlist"/>
  195. <submission id="TXMMP01501" mediatype="application/x-www-form-urlencoded" method="post" ref="/root/send/reqdata" resultref="/root/temp/savedfolder"/>
  196. <submission id="TXMMP01502" mediatype="application/x-www-form-urlencoded" method="post" ref="/root/send" resultref="/root/main/srcindxinfo/itemlist"/>
  197. <submission id="TXMQP00601" mediatype="application/x-www-form-urlencoded" method="post" ref="/root/send" resultref="/root/temp/masterinfo"/>
  198. </model>
  199. <script type="javascript" src="../../../com/commonweb/js/common.js"/>
  200. <script type="javascript" src="../../../com/commonweb/js/tfHelper.js"/>
  201. <script type="javascript" src="../../../com/commonweb/js/dateHelper.js"/>
  202. <script type="javascript" src="../../../com/commonweb/js/stringHelper.js"/>
  203. <script type="javascript">
  204. <![CDATA[
  205. var folderImg = "../../../com/commonweb/images/icon_folder_close.gif";
  206. var fileImg = "../../../com/commonweb/images/icon_list.gif";
  207. var selectIndxCd = model.getValue("/root/temp/reqdata/selectindxcd");
  208. var flagcd = "";
  209. var itemRef = "/root/main/indxlist/itemlist/item";
  210. var iFocusIndx;
  211. var preItem;
  212. var preindx;
  213. var sIndxNo = "";
  214. var tIndxNo = "";
  215. var appCpYN = "N";
  216. //초기화 및 색인을 조회한다.
  217. function fInitialize() {
  218. model.removeNodeset("/root/temp/setdata/item");
  219. model.removeNodeset("/root/temp/poollist/pool/item");
  220. treeview1.refresh();
  221. model.removeNodeset("/root/temp/reqdata");
  222. copyNodeListType("/root/temp", "/root/temp/reqdata", "after", model, opener.model);
  223. selectIndxCd = model.getValue("/root/temp/reqdata/selectindxcd");
  224. flagcd = model.getValue("/root/temp/reqdata/cpgflagcd");
  225. if( instance1.selectSingleNode("/root/temp/reqdata/reqdata") != null ){
  226. if( !isNull("/root/temp/reqdata/reqdata/cpgno") ){
  227. model.resetInstanceNode("/root/send/reqdata");
  228. model.copyNode("/root/send/reqdata", "/root/temp/reqdata/reqdata");
  229. model.setValue("/root/temp/reqdata/selectindxcd", selectIndxCd);
  230. submit("TXMMP01501", false);
  231. }
  232. }
  233. fGetIndxList("A");
  234. if( instance1.selectSingleNode("/root/temp/reqdata/selectindxcd") ){
  235. model.setValue("/root/temp/reqdata/selectindxcd", selectIndxCd);
  236. model.refresh();
  237. }
  238. }
  239. //CP/CPG 색인을 조회한다.
  240. function fGetIndxList(flag) {
  241. //opener 에서 받아온 cpgflagcd 를 input 으로 한다.
  242. //model.resetInstanceNode("/root/send/reqdata");
  243. model.removeNodeset("/root/send/reqdata");
  244. model.makeNode("/root/send/reqdata");
  245. model.resetInstanceNode("/root/main/indxlist/itemlist");
  246. model.copyNode("/root/send/reqdata", "/root/temp/reqdata");
  247. model.makeValue("/root/send/reqdata/authflag", opener.model.getValue("/root/main/search_cond/authflag") );
  248. if( opener.model.getValue("/root/main/search_cond/authflag") != "M" && !isNull(opener.model.getValue("/root/main/search_cond/cpgorddeptcd")) ){
  249. model.makeValue("/root/send/reqdata/cpgorddeptcd", opener.model.getValue("/root/main/search_cond/cpgorddeptcd"));
  250. model.makeValue("/root/send/reqdata/cpgorddeptnm", opener.cmb_cpgorddeptcd.label);
  251. }else{
  252. model.makeValue("/root/send/reqdata/cpgorddeptcd", "");
  253. }
  254. /*if(flag == "F"){
  255. model.makeValue("/root/send/reqdata/cpgflagcd", opener.model.getValue("/root/main/search_cond/cpgflagcd"));
  256. }else if(flag == "A" || flag == "ALL" || isNull(flag) ){
  257. model.makeValue("/root/send/reqdata/cpgflagcd", "ALL");
  258. //model.makeValue("/root/send/reqdata/authdept", opener.window.javascript.dutPlceCd );
  259. }*/
  260. model.makeValue("/root/send/reqdata/cpgflagcd", opener.model.getValue("/root/main/search_cond/cpgflagcd")); //flag에 상관없이 조건에 맞는 리스트를 조회하도록 2010.04.07
  261. model.makeValue("/root/send/reqdata/mode", "A" ); //all index list
  262. //[요청번호: 11937] 권한 설정을 병원별로 달리 설정하여 부여하도록 변경함에 따라 미등록CP도 함께 조회 (2010.03.26 JJE)
  263. if(opener.window.javaScript.checkAuth("X") ){
  264. //model.makeValue("/root/send/reqdata/tmpyn", opener.model.getValue("/root/main/search_cond/tmpyn") );
  265. //model.makeValue("/root/send/reqdata/delyn", opener.model.getValue("/root/main/search_cond/delyn") );
  266. model.makeValue("/root/send/reqdata/tmpyn", "Y" );
  267. model.makeValue("/root/send/reqdata/delyn", "Y" );
  268. }
  269. if( submit("TRMMP01501") ){
  270. // 조회 결과를 /root/main/indxlist/itemlist 로 복사
  271. model.copyNode("/root/main/indxlist/itemlist", "/root/main/srcindxinfo/itemlist");
  272. treeview1.rebuild();
  273. fImageMapping();
  274. model.setValue("/root/temp/reqdata/cpgflagcd", flagcd);
  275. if( opener.model.getValue("/root/main/search_cond/authflag") == "M" ){
  276. //2008.12.13 색인 삭제 후 삭제된 색인의 진료과 폴더로 focus 이동
  277. if( model.getValue("/root/temp/indxdelyn") == "Y" ){
  278. var selSupIndxNo = model.getValue("/root/main/indexinfo/item/supfolderno");
  279. }else{
  280. var selSupIndxNo = "1";
  281. }
  282. //관리자 모드일 경우, 모든 폴더를 닫고, 미등록 폴더만 펼친다
  283. var treeNodeList = instance1.selectNodes("/root/main/indxlist/itemlist/item");
  284. for( var i=treeNodeList.length; i>0; i--){
  285. if( model.getValue("/root/main/indxlist/itemlist/item[" + i + "]/indxno") == selSupIndxNo ){
  286. treeview1.expand((i-1), true);
  287. return;
  288. }
  289. }
  290. }else{
  291. //조회 모드일 경우, 해당과 폴더만 펼친다
  292. treeview1.expandDepth = 1;
  293. //사용자(진료의)가 마스터 권한을 갖을 때, 미등록, 종료 폴더는 닫힌 상태에서 초기화 (2010.03.30 JJE)
  294. if( opener.window.javascript.checkAuth("X") == true ){
  295. var tmp_IndxNo = fSrchItemIndxNo("1");
  296. var del_IndxNo = fSrchItemIndxNo("2");
  297. if( tmp_IndxNo > 0 ) treeview1.expand(tmp_IndxNo, false);
  298. if( del_IndxNo > 0 ) treeview1.expand(del_IndxNo, false);
  299. }
  300. }
  301. }
  302. model.setValue("/root/temp/indxdelyn", "N");
  303. }
  304. //선택한 폴더의 하위 CP/CPG 색인을 조회한다.
  305. function fGetSubIndxList(indx){
  306. model.resetInstanceNode("/root/send/reqdata");
  307. model.resetInstanceNode("/root/main/indxlist/itemlist");
  308. model.copyNode("/root/send/reqdata", "/root/temp/reqdata");
  309. model.makeValue("/root/send/reqdata/cpgno", indx);
  310. model.makeValue("/root/send/reqdata/cpgflagcd", opener.model.getValue("/root/main/search_cond/cpgflagcd"));
  311. model.makeValue("/root/send/reqdata/mode", "S" ); //sub Index list
  312. if( submit("TRMMP01501") ){
  313. treeview1.rebuild();
  314. fImageMapping();
  315. }
  316. }
  317. //폴더를 추가하는 메뉴그룹을 연다. ( '확인' 이벤트를 실행하면 DB에 저장한다.)
  318. function fFolderAdd() {
  319. if(parseInt(event.clientY) > 590 ){
  320. group2.attribute("top") = "590px";
  321. } else{
  322. group2.attribute("top") = event.clientY;
  323. }
  324. group2.attribute("visibility") ="visible";
  325. //추가되는 색인의 조회순서는 Default로 선택한 아이템의 가장 마지막 차일드 아이템 조회순서(indxrefseq) + 1 이다.
  326. var prtIndx = iFocusIndx;
  327. var treeItemNodeSet = treeview1.itemset.attribute("nodeset");
  328. var srcLastChildItemIndex = getLastChildItemIndex( prtIndx , treeItemNodeSet );
  329. var lastNodeSeq = model.getValue(itemRef + "[" + (srcLastChildItemIndex+1) + "]/indxrefseq");
  330. model.setValue("/root/main/formdata/item/indxrefseq", (parseInt(lastNodeSeq) + 1) ); //마지막 노드의 조회순서+1
  331. model.setValue("/root/main/formdata/item/supindxno", model.getValue(itemRef + "[" + (prtIndx + 1) + "]/indxno"));
  332. model.setValue("/root/main/formdata/item/indxnm", "");
  333. model.setValue("/root/main/formdata/item/image", folderImg);
  334. iFocusIndx = prtIndx; //전역변수 iFocusIndx에 포커스인덱스를 넣는다.
  335. cap_menu.attribute("text") = "폴더명";
  336. btn_ok.attribute("visibility") = "visible";
  337. btn_modify.attribute("visibility") = "hidden";
  338. btn_copyfolder.attribute("visibility") = "hidden";
  339. input1.refresh();
  340. input1.disabled = false;
  341. model.setFocus("input1");
  342. model.setValue("/root/temp/selecedkind/kind", "F");
  343. }
  344. //색인 추가하는 메뉴그룹을 연다.
  345. function fIndxAdd() {
  346. if(parseInt(event.clientY) > 590 ){
  347. group2.attribute("top") = "590px";
  348. } else{
  349. group2.attribute("top") = event.clientY;
  350. }
  351. group2.attribute("visibility") = "visible";
  352. //추가되는 색인의 조회순서는 Default로 선택한 아이템의 가장 마지막 차일드 아이템 조회순서(indxrefseq) + 1 이다.
  353. var prtIndx = iFocusIndx;
  354. var treeItemNodeSet = treeview1.itemset.attribute("nodeset");
  355. var srcLastChildItemIndex = getLastChildItemIndex( prtIndx , treeItemNodeSet );
  356. var lastNodeSeq = model.getValue(itemRef + "[" + (srcLastChildItemIndex+1) + "]/indxrefseq");
  357. model.setValue("/root/main/formdata/item/indxrefseq", (parseInt(lastNodeSeq) + 1) ); //마지막 노드의 조회순서+1
  358. model.setValue("/root/main/formdata/item/supindxno", model.getValue(itemRef + "[" + (prtIndx + 1) + "]/indxno"));
  359. model.setValue("/root/main/formdata/item/indxnm", model.getValue("/root/temp/reqdata/cpgnm"));
  360. model.setValue("/root/main/formdata/item/cpgflagcd", model.getValue("/root/temp/reqdata/cpgflagcd"));
  361. model.setValue("/root/main/formdata/item/image", fileImg);
  362. //cpg 검색 그리드에서 cpg를 선택했다면, 그 cpgno를 셋팅
  363. if(opener.model.getValue("/root/main/search_cond/no") != ""){
  364. model.setValue("/root/temp/reqdata/cpgno", opener.model.getValue("/root/temp/selected/cpgno"));
  365. model.setValue("/root/main/formdata/item/cpghistseq", opener.window.javascript.fModifyCpgHistSeq(opener.model.getValue("/root/temp/selected/cpghistseq"))); //임시->9999
  366. model.setValue("/root/main/formdata/item/indxnm", opener.model.getValue("/root/temp/selected/cpgnm"));
  367. model.setValue("/root/main/formdata/cpinfo/cpgno", model.getValue("/root/temp/reqdata/cpgno"));
  368. model.setValue("/root/main/formdata/cpinfo/cpghistseq", model.getValue("/root/main/formdata/item/cpghistseq"));
  369. }
  370. if( !isNull(model.getValue("/root/temp/reqdata/cpgno")) ){
  371. model.setValue("/root/main/formdata/item/cpgno", model.getValue("/root/temp/reqdata/cpgno"));
  372. cap_menu.attribute("text") = "색인명";
  373. btn_ok.attribute("visibility") = "visible";
  374. btn_modify.attribute("visibility") = "hidden";
  375. btn_copyfolder.attribute("visibility") = "hidden";
  376. input1.refresh();
  377. input1.disabled = true;
  378. model.setValue("/root/temp/selecedkind/kind", "i");
  379. }else{
  380. messageBox("CP를 ", "C002");
  381. group2.attribute("visibility") = "hidden";
  382. return;
  383. }
  384. }
  385. //폴더를 수정하는 동시에, DB에 저장한다.
  386. function fFolderSet(){
  387. if( model.getValue(itemRef + "[" + (iFocusIndx + 1) + "]/supindxno") == "0" ){
  388. messageBox("최상위 폴더명은 수정", "E001");
  389. return;
  390. }
  391. if(parseInt(event.clientY) > 590 ){
  392. group2.attribute("top") = "590px";
  393. } else{
  394. group2.attribute("top") = event.clientY;
  395. }
  396. group2.attribute("visibility") = "visible";
  397. model.setValue("/root/main/formdata/item/indxnm", model.getValue(itemRef + "[" + (iFocusIndx + 1) + "]/indxnm"));
  398. input1.refresh();
  399. cap_menu.attribute("text") = "폴더명";
  400. btn_ok.attribute("visibility") = "hidden";
  401. btn_modify.attribute("visibility") = "visible";
  402. btn_copyfolder.attribute("visibility") = "hidden";
  403. input1.disabled = false;
  404. model.setFocus("input1");
  405. model.setValue("/root/temp/selecedkind/kind", "F");
  406. }
  407. //물어보는 팝업을 재구성
  408. function fRefreshMsgBox( purpose ){
  409. model.setValue("/root/main/formdata/cpinfo/purpose", purpose);
  410. switch ( purpose ){
  411. case "2" :
  412. cap_question.attribute("text") = "선택하신 CP의 등록을 취소하시겠습니까?"; //등록->미등록
  413. cap_appdd.visible = false;
  414. ipt_appdd.visible = false;
  415. break;
  416. case "3" :
  417. cap_question.attribute("text") = "선택하신 CP의 적용일이 존재하지 않습니다.\n적용일을 등록하시겠습니까?"; //미등록->등록
  418. cap_appdd.visible = true;
  419. ipt_appdd.visible = true;
  420. break;
  421. case "4" :
  422. cap_question.attribute("text") = "선택하신 CP의 종료를 취소하시겠습니까?"; //종료->정상
  423. cap_appdd.visible = false;
  424. ipt_appdd.visible = false;
  425. break;
  426. case "5" :
  427. cap_question.attribute("text") = "선택하신 CP를 종료하시겠습니까?"; //정상->종료
  428. cap_appdd.visible = false;
  429. ipt_appdd.visible = false;
  430. break;
  431. }
  432. cap_question.refresh();
  433. cap_appdd.refresh();
  434. ipt_appdd.refresh();
  435. group1.visible = true;
  436. }
  437. //등록 -> 미등록 변경
  438. function fIndxSet(){
  439. /*
  440. //COPY SET을 뒤져서 해당 노드가 있다면 COPY SET 인스턴스 데이터 바로 수정, 없다면 Y일때는 'U'라는 플래그로 등록, 'N'이라면 트리에서만 수정
  441. //상태가 'I / U' 이면 COPY SET의 해당 인스턴스 데이터를 수정, 상태가 ' Y'이면 'U'라는 status로 COPY 셋에 등록
  442. if(parseInt(event.clientY) > 590 ){
  443. group2.attribute("top") = "590px";
  444. } else{
  445. group2.attribute("top") = event.clientY;
  446. }
  447. group2.attribute("left") = 100;
  448. group2.attribute("height") = 55;
  449. model.setValue("/root/main/formdata/item/indxnm", model.getValue(itemRef + "[" + (iFocusIndx + 1) + "]/indxnm"));
  450. input1.refresh();
  451. cap_menu.attribute("text") = "색인명";
  452. btn_ok.attribute("visibility") = "hidden";
  453. btn_modify.attribute("visibility") = "visible";
  454. input1.disabled = false;
  455. model.setFocus("input1");
  456. model.setValue("/root/temp/selecedkind/kind", "i");
  457. */
  458. model.makeValue("/root/temp/skiptopcheck", "Y");
  459. fRefreshMsgBox("2");
  460. group1.visible = true;
  461. }
  462. //미등록 -> 등록 변경
  463. function fTmpIndxSet(){
  464. model.makeValue("/root/temp/skiptopcheck", "Y");
  465. fRefreshMsgBox("3");
  466. group1.visible = true;
  467. }
  468. //종료 -> 종료취소
  469. function fFromEndIndxSet(){
  470. model.makeValue("/root/temp/skiptopcheck", "Y");
  471. fRefreshMsgBox("4");
  472. group1.visible = true;
  473. }
  474. //일반 -> 종료
  475. function fToEndIndxSet(){
  476. model.makeValue("/root/temp/skiptopcheck", "Y");
  477. fRefreshMsgBox("5");
  478. group1.visible = true;
  479. }
  480. //트리 조회 후, 바로 아이템을 체크한다
  481. function fItemCheck( chkIndx ){
  482. var indxCnt = treeview1.length;
  483. var iStatus = "";
  484. if( chkIndx == null || chkIndx == "" ) {
  485. //road 시 전체조회 후
  486. for(var i=1; i<=indxCnt; i++){
  487. iStatus = model.getValue(itemRef + "[" + i + "]/status");
  488. if(iStatus == "Y" || iStatus == "i"){
  489. var indx = parseInt( i ) - 1;
  490. item = treeview1.item(indx);
  491. item.checked = true;
  492. }
  493. //말단 아이템이 아니라면 폴더 이미지를 설정한다.
  494. if( model.getValue(itemRef + "[" + i + "]/cpgno") == "0" ){
  495. model.setValue(itemRef + "[" + i + "]/image", folderImg);
  496. }
  497. //depth가 2이상인 폴더 존재시, 상위색인번호가 일치하지 않기 때문에, 최상위폴더 번호로 통일
  498. /*
  499. if( model.getValue(itemRef + "[" + i + "]/supindxno") == "0" && model.getValue(itemRef + "[" + i + "]/indxrefseq") == "0" ){
  500. model.makeValue(itemRef + "[" + i + "]/supfolderno", model.getValue(itemRef + "[" + i + "]/supindxno") );
  501. }else{
  502. var supno = model.getValue(itemRef + "[" + i + "]/supindxno");
  503. model.makeValue(itemRef + "[" + i + "]/supfolderno", model.getValue(itemRef + "[" + i + "]/supfolderno") );
  504. }
  505. */
  506. }
  507. treeview1.rebuild();
  508. } else {
  509. //수동 체크할 경우
  510. item = treeview1.item( chkIndx );
  511. item.checked = true;
  512. }
  513. }
  514. //아이템에 이미지를 매핑시킨다.
  515. function fImageMapping() {
  516. var indxCnt = treeview1.length;
  517. for(var i = 1; i <= indxCnt; i++){
  518. //말단 아이템이 아니라면 폴더 이미지를 설정한다.
  519. if( isNull(model.getValue(itemRef + "[" + i + "]/cpgno")) || model.getValue(itemRef + "[" + i + "]/cpgno") == "0"){
  520. model.setValue(itemRef + "[" + i + "]/image", folderImg);
  521. } else {
  522. model.setValue(itemRef + "[" + i + "]/image", fileImg);
  523. }
  524. //depth가 2이상인 폴더 존재시, 상위색인번호가 일치하지 않기 때문에, 최상위폴더 번호로 통일
  525. if( model.getValue(itemRef + "[" + i + "]/supindxno") == "0" && model.getValue(itemRef + "[" + i + "]/cpgno") == "0" ){
  526. model.makeValue(itemRef + "[" + i + "]/supfolderno", model.getValue(itemRef + "[" + i + "]/indxno") );
  527. }else{
  528. //var supno = model.getValue(itemRef + "[" + i + "]/supindxno");
  529. model.makeValue(itemRef + "[" + i + "]/supfolderno", model.getValue(itemRef + "[" + (i-1) + "]/supfolderno") );
  530. }
  531. }
  532. treeview1.rebuild();
  533. }
  534. //아이템 이동 시, 체크 상태까지 함께 바꾼다.
  535. function fMoveCheck( from, to ) {
  536. var iStatus;
  537. for(var i=from; i<=to; i++){
  538. var indx = parseInt( i ) + 1;
  539. //item = treeview1.item(i);
  540. iStatus = model.getValue(itemRef + "[" + indx + "]/status");
  541. if(iStatus == "Y" || iStatus == "i"){
  542. item = treeview1.item(i);
  543. item.checked = true;
  544. } else {
  545. item = treeview1.item(i);
  546. item.checked = false;
  547. }
  548. if(iStatus == "d"){
  549. treeview1.item( i ).attribute("color") = "#999999";
  550. } else {
  551. treeview1.item( i ).attribute("color") = "#000000";
  552. }
  553. }
  554. }
  555. //두개의 노드셋을 비교한다. (같으면 true, 다르면 false 리턴)
  556. function fCompareNodes(originalNode, copyNode){
  557. var ins = document.models( 0 ).instances( 0 );
  558. var original = ins.selectSingleNode(originalNode).xml;
  559. var copy = ins.selectSingleNode(copyNode).xml;
  560. if(original == null || copy == null){
  561. return false;
  562. }else if (original == copy){
  563. return true;
  564. }else{
  565. return false;
  566. }
  567. }
  568. //색인을 삭제한다.
  569. function fIndxDel() {
  570. var focusIndex = iFocusIndx;
  571. var iRow = parseInt(focusIndex) + 1; //선택한 인스턴스의 인덱스
  572. var selNo = model.getValue(itemRef + "["+ iRow + "]/indxno");
  573. var status = model.getValue(itemRef + "["+ iRow + "]/status");
  574. model.makeValue("/root/temp/skiptopcheck", "Y");
  575. if(status == "i"){
  576. //DB에 존재하지 않는 신규 인덱스라면, 아이템 바로 삭제
  577. model.removenode(itemRef + "[" + iRow + "]");
  578. treeview1.refresh();
  579. } else {
  580. model.setValue(itemRef + "["+ iRow + "]/status", "d");
  581. //treeview1.item( iRow - 1 ).attribute("color") = "#999999";
  582. //treeview1.refresh();
  583. //바로 데이터 삭제
  584. var flag = opener.model.getValue("/root/main/search_cond/cpgflagcd");
  585. model.setValue("/root/temp/indxdelyn", "Y");
  586. fSaveCpgIndxList();
  587. fGetIndxList(flag);
  588. }
  589. }
  590. //폴더를 삭제한다.
  591. function fFolderDel() {
  592. var focusIndex = iFocusIndx;
  593. var iRow = parseInt(focusIndex) + 1; //선택한 인스턴스의 인덱스
  594. //바로 데이터를 삭제하는 서브밋을 실행한다.
  595. if( fSaveFolderIndx( iRow , "d" ) == false ){
  596. return;
  597. }
  598. //직접 노드를 삭제
  599. model.removenode(itemRef + "[" + iRow + "]");
  600. treeview1.refresh();
  601. }
  602. //현재 아이템 인덱스의 부모 아이템 인덱스를 반환 한다
  603. function getParentItemIndex(itemIndex, treeItemNodeSet) {
  604. var curDepthValue = model.getValue(treeItemNodeSet + "[" + (itemIndex + 1) + "]/depth");
  605. var parentDepthValue = curDepthValue - 1;
  606. do {
  607. itemIndex--;
  608. curDepthValue = model.getValue(treeItemNodeSet + "[" + (itemIndex + 1) + "]/depth");
  609. } while(curDepthValue != parentDepthValue)
  610. return itemIndex;
  611. }
  612. //현재 아이템 인덱스의 자식 아이템중 마지막 아이템 인덱스를 반환 한다
  613. function getLastChildItemIndex(itemIndex, treeItemNodeSet) {
  614. var curDepthValue = model.getValue(treeItemNodeSet + "[" + (itemIndex + 1) + "]/depth");
  615. var childDepthValue = model.getValue(treeItemNodeSet + "[" + (itemIndex + 2) + "]/depth");
  616. while(curDepthValue < childDepthValue) {
  617. itemIndex++;
  618. childDepthValue = model.getValue(treeItemNodeSet + "[" + (itemIndex + 2) + "]/depth");
  619. }
  620. return itemIndex;
  621. }
  622. //폴더 색인을 추가/수정/삭제한 경우 바로 저장한다
  623. function fSaveFolderIndx( indx, status ){
  624. var curIndxNo = model.getValue(itemRef + "[" + indx + "]/indxno");
  625. var iSupIndxNo = model.getValue(itemRef + "[" + indx + "]/supindxno");
  626. if( status == "d" ){
  627. //var curIndxNo = indx+1;
  628. //하위 CP를 모두 종료CP로 업데이트 하기로 함. 삭제 확인 msg 뜨움. (2008.10.07)
  629. // ===========> 아직 CP 및 CP색인 update 처리 미개발 (10/10 개발 예정)
  630. if( instance1.selectSingleNode(itemRef + "[supindxno='"+curIndxNo+"']") != null ){
  631. if( messageBox ("폴더를 삭제하면 하위 항목이 모두 삭제됩니다.\n\n정말로 폴더를", "Q001") == 7 ){
  632. group1.visible = false;
  633. tIndxNo = iFocusIndx;
  634. return false;
  635. }
  636. if( instance1.selectSingleNode(itemRef + "[supindxno='"+curIndxNo+"' and cpgno='0']") != null ){
  637. messageBox ("하위 폴더가 존재합니다.\n\n하위 폴더를 먼저 삭제", "I008");
  638. group1.visible = false;
  639. tIndxNo = iFocusIndx;
  640. return false;
  641. }
  642. }
  643. }
  644. model.removeNodeset("/root/send");
  645. //model.resetInstanceNode("/root/temp/savedfolder/item");
  646. model.removeNodeset("/root/temp/savedfolder/item"); //조회해온 데이터 받아올 인스턴스
  647. model.makeNode("/root/temp/savedfolder/item");
  648. model.makeNode("/root/send/reqdata");
  649. model.copyNode("/root/send/reqdata", itemRef + "[" + parseInt(indx) +"]");
  650. model.makeValue("/root/send/reqdata/status", status );
  651. if( submit("TXMMP01501", false) ){
  652. if( status == "d" ){
  653. //삭제시에는 tree 전체 재조회
  654. fGetIndxList("A");
  655. //focus 진료과 폴더로 지정
  656. var treeNodeList = instance1.selectNodes("/root/main/indxlist/itemlist/item");
  657. for( var i=treeNodeList.length; i>0; i--){
  658. if( model.getValue("/root/main/indxlist/itemlist/item[" + i + "]/indxno") == iSupIndxNo ){
  659. treeview1.expand((i-1), true);
  660. return false; //fSaveFolderIndx()를 호출한 func에 false return 시, 다시 rebuild 하는 것을 막음.
  661. }
  662. }
  663. }else{
  664. if( instance1.selectSingleNode("/root/temp/savedfolder/item/indxno") != null ){
  665. model.setValue(itemRef + "[" + parseInt(indx) +"]/indxno", model.getValue("/root/temp/savedfolder/item/indxno"));
  666. model.setValue(itemRef + "[" + parseInt(indx) +"]/indxnm", model.getValue("/root/temp/savedfolder/item/indxnm"));
  667. if( status == "u" || status == "i" ){
  668. model.setValue(itemRef + "[" + parseInt(indx) +"]/status", "");
  669. }
  670. treeview1.rebuild();
  671. }
  672. }
  673. }
  674. }
  675. //Drop 이벤트 시 처리
  676. function fOnDropEvnt() {
  677. if( opener.model.getValue("/root/main/search_cond/authflag") == "S" ){
  678. return false;
  679. }
  680. // 드래그 시점의 아이템
  681. var srcIndex = treeview1.selectedIndex;
  682. var org_srcIndex = srcIndex;
  683. var org_srcKind = model.getValue(itemRef + "[" + (srcIndex + 1) + "]/image");
  684. var org_srcDepth = model.getValue(itemRef + "[" + (srcIndex + 1) + "]/depth");
  685. var org_srcIndxNo = model.getValue(itemRef + "[" + (srcIndex + 1) + "]/indxno"); //색인 no
  686. var org_srcSupIndxNo = model.getValue(itemRef + "[" + (srcIndex + 1) + "]/supindxno"); //상위 indx no
  687. var org_srcSupFolderNo = model.getValue(itemRef + "[" + (srcIndex + 1) + "]/supfolderno"); //최상위 폴더 no
  688. var srcValue = treeview1.item(srcIndex).value;
  689. sIndxNo = srcIndex;
  690. if( model.getValue(itemRef + "[" + (srcIndex + 1) + "]/cpgflagcd") == "01" )
  691. var org_cpgFlag = "CP";
  692. else if( model.getValue(itemRef + "[" + (srcIndex + 1) + "]/cpgflagcd") == "02" )
  693. var org_cpgFlag = "CPG";
  694. else var org_cpgFlag = "폴더";
  695. model.setValue("/root/main/formdata/cpinfo/cpgno", model.getValue(itemRef + "[" + (srcIndex + 1) + "]/cpgno"));
  696. model.setValue("/root/main/formdata/cpinfo/cpghistseq", model.getValue(itemRef + "[" + (srcIndex + 1) + "]/cpghistseq"));
  697. model.setValue("/root/main/formdata/cpinfo/purpose", "6"); //이동
  698. // 드롭 시점의 아이템
  699. var trgIndex = treeview1.mouseRow;
  700. var org_trgIndex = trgIndex;
  701. tIndxNo = trgIndex;
  702. var trgValue = treeview1.item(trgIndex).text;
  703. var org_trgIndxNo = model.getValue(itemRef + "[" + (trgIndex + 1) + "]/indxno"); //색인 no
  704. var org_trgSupIndxNo = model.getValue(itemRef + "[" + (trgIndex + 1) + "]/supindxno"); //상위 indx no
  705. var org_trgSupFolderNo = model.getValue(itemRef + "[" + (trgIndex + 1) + "]/supfolderno"); //최상위 폴더 no
  706. var node = instance1.selectSingleNode(itemRef + "[supindxno = '1']");
  707. if(org_srcIndex == org_trgIndex){
  708. //더블클릭 시, 약간의 이동이 있어 드롭 이벤트를 실행했지만, 같은 index 라면, 더블클릭으로 간주한다
  709. treeview1.dispatch("ondblclick");
  710. return false;
  711. }
  712. if( org_srcDepth == "1"){
  713. messageBox("최상위 폴더는 하위로 이동할 수", "I004");
  714. preItem = treeview1.item(trgIndex);
  715. preItem.attribute("background-color") = "#ffffff";
  716. return false;
  717. }
  718. //purpose 처리
  719. if( org_srcSupFolderNo == "1" ){ //미등록->등록
  720. /*
  721. messageBox("임시 파일은 이동할 수", "I004");
  722. preItem = treeview1.item(trgIndex);
  723. preItem.attribute("background-color") = "#ffffff";
  724. return false;
  725. */
  726. if( org_srcSupIndxNo == org_trgIndxNo || org_srcSupIndxNo == org_trgSupFolderNo ){
  727. //model.setValue("/root/main/formdata/cpinfo/purpose", "3");
  728. //group1.visible = true;
  729. fTmpIndxSet();
  730. return false;
  731. }else{
  732. messageBox("미등록 파일은 다른과로 이동할 수", "I004");
  733. return false;
  734. }
  735. }else if( org_trgIndxNo == "1" || org_trgSupFolderNo == "1" ){ //등록->미등록
  736. fIndxSet();
  737. /*
  738. messageBox("미등록 폴더로 이동할 수", "I004");
  739. preItem = treeview1.item(trgIndex);
  740. preItem.attribute("background-color") = "#ffffff";
  741. */
  742. return false;
  743. }else if( org_srcSupFolderNo == "2" ){ //종료->종료취소
  744. if( org_srcSupIndxNo == org_trgIndxNo || org_srcSupIndxNo == org_trgSupFolderNo ){
  745. fFromEndIndxSet();
  746. return false;
  747. }else{
  748. messageBox("종료 파일은 다른과로 이동할 수", "I004");
  749. return false;
  750. }
  751. }else if( org_trgIndxNo == "2" || org_trgSupFolderNo == "2" ){ //일반->종료
  752. fToEndIndxSet();
  753. return false;
  754. }
  755. if( org_srcSupFolderNo != org_trgSupFolderNo ){
  756. if( messageBox("선택한 " + org_cpgFlag + "의 진료과 변경을", "Q004") != 6 ){
  757. return false;
  758. }
  759. }else{
  760. if( messageBox("선택한 " + org_cpgFlag + "의 순서 변경을", "Q004") != 6 ){
  761. return false;
  762. }
  763. }
  764. var num = 0;
  765. if(org_srcKind == folderImg) {
  766. var flag = "";
  767. var nextIndx = srcIndex + 2;
  768. var org_nextSrcDepth = model.getValue(itemRef + "[" + nextIndx + "]/depth");
  769. var nextValue;
  770. var moveItemArray = new Array();
  771. while( flag == "" ){
  772. if( parseInt(org_srcDepth) < parseInt(org_nextSrcDepth) ){
  773. nextValue = treeview1.item(nextIndx-1).value;
  774. moveItemArray[num] = new Array();
  775. moveItemArray[num][0] = nextIndx-1;
  776. moveItemArray[num][1] = nextValue;
  777. num = num + 1;
  778. nextIndx = nextIndx + 1;
  779. org_nextSrcDepth = model.getValue(itemRef + "[" + nextIndx + "]/depth");
  780. } else{
  781. flag = "end";
  782. }
  783. }
  784. }
  785. var val = fMoveItem(srcIndex, srcValue, trgIndex, trgValue);
  786. var no_1, no_2;
  787. //return;
  788. /* 2008.06.16 DBMS변경->sql변경과 함께, fMoveItem() 변경으로 인해 사용 안함.
  789. //이동하려는 원본이 폴더인 경우, 이동된 후, 순서를 뒤바꿔 주어야함(3,2,1 순으로 복사되므로, 1,2,3 순으로 재조정 해야함)
  790. if(srcIndex != trgIndex){
  791. for(var i=0; i<num-1; i++){
  792. no_1 = 1;
  793. no_2 = 1;
  794. //src(child[])를 다시 찾는다.
  795. while(moveItemArray[i][1] != model.getValue(itemRef + "[" + no_1 + "]/indxno")){
  796. no_1++;
  797. }
  798. //trg를 다시 찾는다.
  799. while(org_srcIndxNo != model.getValue(itemRef + "[" + no_2 + "]/indxno")){
  800. no_2++;
  801. }
  802. srcIndex = no_1 - 1;
  803. srcValue = treeview1.item(srcIndex).text;
  804. trgIndex = no_2 - 1;
  805. trgValue = treeview1.item(trgIndex).text;
  806. fMoveItem(srcIndex, srcValue, trgIndex, trValue);
  807. if(org_srcIndex < org_trgIndex){
  808. no_3 = 1;
  809. while(org_trgIndxNo != model.getValue(itemRef + "[" + no_3 + "]/indxno")){
  810. no_3++;
  811. }
  812. no_3--;
  813. fChangedRefSeq( parseInt(no_3) );
  814. }
  815. }
  816. }
  817. */
  818. //드롭 후 변경 내용을 바로 저장한다
  819. var flag = opener.model.getValue("/root/main/search_cond/cpgflagcd");
  820. fSaveCpgIndxList();
  821. fGetIndxList(flag);
  822. }
  823. //드래그&드롭 시 타겟 인덱스의 PARENTS에 속한 이에템들의 조회순서를 정렬한다.
  824. function fChangedRefSeq( trgIndx ) {
  825. /* //2008.06.16 트리 sroting 및 이동에 의한 로직 변경
  826. var supFolderNo = instance1.selectSingleNode(itemRef+"[indxno = '" + trgIndx + "']/indxno").text;
  827. var treeItemNodeSet = instance1.selectNodes(itemRef+"[supfolderno = '" + treeItemNodeSet + "']"); // itemRef+ = root/main/indxlist/itemlist/item
  828. var srcLastChildItemIndex = getLastChildItemIndex(trgIndx, treeItemNodeSet);
  829. var from = trgIndx + 1; //차일드 아이템 중 첫번째
  830. var to = srcLastChildItemIndex; //차일드 아이템 중 마지막
  831. var iStatus = "";
  832. var newRefSeq = 0;
  833. for(var i = 0; i< treeItemNodeSet.length; i++) {
  834. iStatus = model.getValue(itemRef + "["+ ( i + 1 ) + "]/status");
  835. if( iStatus == "N" || iStatus == "") {
  836. model.setValue(itemRef + "["+ ( i + 1 ) + "]/status", "u");
  837. }
  838. newRefSeq = newRefSeq + 1;
  839. model.setValue(itemRef + "["+ ( i + 1 ) + "]/indxrefseq", newRefSeq);
  840. }
  841. */
  842. var treeItemNodeSet = treeview1.itemset.attribute("nodeset");
  843. //아래폴더 첫번째 색인->바로위폴더 타겟으로 이동시 전체 순번 매겨지는 문제
  844. var trgLastChildItemIndex = getLastChildItemIndex(trgIndx, treeItemNodeSet); //getLastChildItemIndex 의심
  845. var from = trgIndx + 1; //차일드 아이템 중 첫번째
  846. var to = trgLastChildItemIndex; //차일드 아이템 중 마지막
  847. //alert( "시작 노드= " + model.getValue(itemRef+"[" + (trgIndx+1) + "]/indxnm") );
  848. //alert( "마지막 노드= " + model.getValue(itemRef+"[" + (to+1) + "]/indxnm") );
  849. var iStatus = "";
  850. var newRefSeq = 0;
  851. var supIndxNo = instance1.selectSingleNode(itemRef+"[" + from + "]/supindxno").text;
  852. var iNo = instance1.selectSingleNode(itemRef+"[" + from + "]/indxnm").text;
  853. if( supIndxNo == "0" ){
  854. var supIndxRefSeq = 0;
  855. }else{
  856. var supIndxRefSeq = parseInt( instance1.selectSingleNode(itemRef+"[" + from + "]/indxrefseq").text );
  857. }
  858. for(var i = from; i<= to; i++) {
  859. iStatus = model.getValue(itemRef + "["+ ( i + 1 ) + "]/status");
  860. if( iStatus == "N" || iStatus == "") {
  861. model.setValue(itemRef + "["+ ( i + 1 ) + "]/status", "u");
  862. }
  863. supIndxRefSeq = supIndxRefSeq + 1;
  864. model.setValue(itemRef + "["+ ( i + 1 ) + "]/indxrefseq", supIndxRefSeq);
  865. }
  866. }
  867. // 드래그 & 드롭 시 아이템의 순서를 바꾼다.
  868. function fMoveItem(srcIndex, srcValue, trgIndex, trgValue){
  869. var treeItemNodeSet = treeview1.itemset.attribute("nodeset"); //전체 색인 범위
  870. var newSupIndxNo = model.getValue(itemRef + "[" + (trgIndex + 1) + "]/supindxno"); //타겟의 상위색인번호
  871. var newSupFolderNo = model.getValue(itemRef + "[" + (trgIndex + 1) + "]/supfolderno"); //타겟의 최상위색인번호
  872. var newIndxNo = model.getValue(itemRef + "[" + (trgIndex + 1) + "]/indxno"); //타겟의 색인번호
  873. var org_srcSupIndxNo = model.getValue(itemRef + "[" + (srcIndex + 1) + "]/supindxno"); //원본의 상위색인번호
  874. var org_srcSupFolderNo = model.getValue(itemRef + "[" + (srcIndex + 1) + "]/supfolderno"); //원본의 최상위색인번호
  875. //소스와 타겟 아이템의 상위인덱스번호를 교환한다.
  876. var trgNodeDepth = instance1.selectSingleNode(treeItemNodeSet + "[" + ( trgIndex + 1 ) + "]/depth") //타겟의 depth
  877. var subIndxCnt = 0;
  878. var fYN = "N";
  879. /*-----------------------srcParentIndex, trgParentIndex, srcLastChildItemIndex, trgLastChildItemIndex 구하기 ----------------------*/
  880. //1. 선택한 원본의 부모 폴더 색인
  881. var srcParentIndex = getParentItemIndex(srcIndex, treeItemNodeSet);
  882. //2. 타겟의 부모 폴더 색인
  883. if( model.getValue(itemRef + "[" + (trgIndex + 1) + "]/supindxno") == "0" ){
  884. var trgParentIndex = trgIndex; //타겟이 최상위 폴더일 경우, 엄마 노드를 찾을 필요가 없음
  885. }else if( model.getValue(itemRef + "[" + (srcIndex + 1) + "]/supindxno") != model.getValue(itemRef + "[" + (trgIndex + 1) + "]/supindxno")
  886. && model.getValue(itemRef + "[" + (srcIndex + 1) + "]/supfolderno") == model.getValue(itemRef + "[" + (trgIndex + 1) + "]/supfolderno") ){
  887. //trgParentIndex = getParentItemIndex(trgParentIndex, treeItemNodeSet); //depth만큼 돌린다...
  888. var cmp_IndxNo = parseInt(model.getValue(itemRef + "[" + (trgIndex + 1) + "]/supfolderno"));
  889. cnt = fSrchItemIndxNo( cmp_IndxNo );
  890. //alert( model.getValue(itemRef + "[" + (cnt + 1) + "]/supfolderno") );
  891. var trgParentIndex = cnt; //타겟이 중간 단계의 폴더일 경우, 상위폴더를 찾으면 안되고, 최상위를 찾아야 함
  892. }else{
  893. var trgParentIndex = getParentItemIndex(trgIndex, treeItemNodeSet);
  894. }
  895. if( model.getValue(itemRef + "[" + (srcIndex + 1) + "]/image") == folderImg ){
  896. fYN = "Y";
  897. }else{
  898. fYN = "N";
  899. }
  900. var srcLastChildItemIndex = getLastChildItemIndex(srcIndex, treeItemNodeSet); // 드래그 아이템이 속한 아이템셋의 마지막 엔덱스
  901. var trgLastChildItemIndex = getLastChildItemIndex(trgIndex, treeItemNodeSet); // 드롭 아이템이 속한 아이템셋의 마지막 인덱스
  902. /*------------------------------------------------------------------------------------------------------------------------------*/
  903. var srcNodeList = instance1.selectNodes(treeItemNodeSet + "[position() >= " + (srcIndex + 1)+ " and position() <=" + (srcLastChildItemIndex + 1) + "]");
  904. var srcNode, trgNode, newNode;
  905. var itemtParentNode = instance1.selectSingleNode(treeItemNodeSet).parentNode;
  906. var cloneSrcNode;
  907. //소스아이템이 타겟아이템보다 작으면, 소스아이템을 타겟+1에 위치
  908. if(srcIndex < trgIndex) {
  909. trgNode = instance1.selectSingleNode(treeItemNodeSet + "[" + ( trgIndex + 1 ) + "]");
  910. if(model.getValue(itemRef + "[" + (trgIndex + 1) + "]/image") == fileImg){
  911. // target 이 파일이면,
  912. model.setValue(itemRef + "[" + (srcIndex + 1) + "]/supindxno", newSupIndxNo);
  913. model.setValue(itemRef + "[" + (srcIndex + 1) + "]/supfolderno", newSupFolderNo);
  914. var val = trgNodeDepth.value;
  915. preItem.attribute("background-color") = "#ffffff";
  916. }else{
  917. // target 이 폴더면,
  918. model.setValue(itemRef + "[" + (srcIndex + 1) + "]/supindxno", newIndxNo);
  919. model.setValue(itemRef + "[" + (srcIndex + 1) + "]/supfolderno", newSupFolderNo);
  920. trgLastChildItemIndex = parseInt(trgLastChildItemIndex);
  921. trgNode = instance1.selectSingleNode(treeItemNodeSet + "[" + ( trgLastChildItemIndex + 1 ) + "]");
  922. var val = parseInt(trgNodeDepth.value) + 1; //target의 depth+1
  923. var curItem = treeview1.item(treeview1.mouseRow);
  924. curItem.attribute("background-color") = "#ffffff";
  925. var subIndxNodeList = instance1.selectNodes(itemRef + "[supindxno = '" + srcValue + "']");
  926. subIndxCnt = subIndxNodeList.length;
  927. }
  928. // 아이템을 타겟 위치에 복제, 소스 아이템은 삭제한다.
  929. while(srcNode = srcNodeList.nextNode()) {
  930. cloneSrcNode = srcNode.cloneNode(true);
  931. newNode = itemtParentNode.insertAfter(cloneSrcNode, trgNode); //insertAfter
  932. trgNode = newNode;
  933. trgNode.childNodes(5).nodeValue = val;
  934. itemtParentNode.removeChild(srcNode);
  935. }
  936. treeview1.refresh();
  937. if( fYN == "Y" ){
  938. var subIndxNodeList = instance1.selectNodes(itemRef + "[supindxno = '" + srcValue + "']");
  939. subIndxCnt = subIndxNodeList.length; //원본 폴더의 색인 갯수
  940. trgIndex = trgIndex - subIndxCnt ; //타겟 위치 - 원본폴더의 색인 갯수(원본 갯수만큼 indx 위치가 줄어든다)
  941. if(newSupFolderNo != org_srcSupFolderNo ) {
  942. trgIndex++ ;
  943. trgParentIndex= trgParentIndex - subIndxCnt - 1; //타겟 부모 indx - 원본폴더의 색인 갯수
  944. }
  945. }else{
  946. if(newSupFolderNo != org_srcSupFolderNo ) {
  947. trgParentIndex--;
  948. }
  949. }
  950. //타겟이 포함된 폴더 전체 조회순서 재조정
  951. if(model.getValue(itemRef + "[" + (trgIndex-1) + "]/image") != fileImg){
  952. trgIndex--; //fChangedRefSeq()에서 trgIndex++ 후 사용하므로 trgIndex=현위치-1로 셋팅
  953. }
  954. fChangedRefSeq( trgParentIndex );
  955. return val;
  956. }
  957. //소스인덱스가 타겟인덱스보다 크면, 소스아이템을 타겟-1에 위치
  958. else if(srcIndex > trgIndex) {
  959. if(model.getValue(itemRef + "[" + (trgIndex + 1) + "]/image") == fileImg){
  960. model.setValue(itemRef + "[" + (srcIndex + 1) + "]/supindxno", newSupIndxNo);
  961. model.setValue(itemRef + "[" + (srcIndex + 1) + "]/supfolderno", newSupFolderNo);
  962. trgNode = instance1.selectSingleNode(treeItemNodeSet + "[" + ( trgIndex + 1 ) + "]");
  963. var val = trgNodeDepth.value;
  964. preItem.attribute("background-color") = "#ffffff";
  965. }else{
  966. model.setValue(itemRef + "[" + (srcIndex + 1) + "]/supindxno", newIndxNo);
  967. model.setValue(itemRef + "[" + (srcIndex + 1) + "]/supfolderno", newSupFolderNo);
  968. trgLastChildItemIndex = parseInt(trgLastChildItemIndex);
  969. trgNode = instance1.selectSingleNode(treeItemNodeSet + "[" + ( trgLastChildItemIndex + 2 ) + "]");
  970. var val = parseInt(trgNodeDepth.value) + 1;
  971. var curItem = treeview1.item(treeview1.mouseRow);
  972. curItem.attribute("background-color") = "#ffffff";
  973. }
  974. var count = 0;
  975. while(srcNode = srcNodeList.nextNode()) {
  976. cloneSrcNode = srcNode.cloneNode(true);
  977. count++;
  978. if(count == 1){ //이동된 원본의 수가 1개일 때에만, 2개이상일때에는 순서가 역순으로 copy된다
  979. newNode = itemtParentNode.insertBefore(cloneSrcNode, trgNode); //insertBefore
  980. }else{
  981. newNode = itemtParentNode.insertAfter(cloneSrcNode, trgNode);
  982. }
  983. trgNode = newNode;
  984. trgNode.childNodes(5).nodeValue = val;
  985. itemtParentNode.removeChild(srcNode);
  986. }
  987. treeview1.refresh();
  988. /*************************************************************************
  989. // 2008.06.16 변경
  990. if(model.getValue(itemRef + "[" + (trgIndex+1) + "]/image") == fileImg ){
  991. fChangedRefSeq( parseInt(trgIndex) );
  992. }else{
  993. fChangedRefSeq( trgParentIndex ); //fChangedRefSeq( parseInt(trgIndex) );
  994. }
  995. *************************************************************************/
  996. fChangedRefSeq( trgParentIndex ); //fChangedRefSeq( parseInt(trgIndex) );
  997. return val;
  998. } else {
  999. return true;
  1000. }
  1001. }
  1002. /**
  1003. * @group :
  1004. * @ver : 2007.07
  1005. * @by : 전지은
  1006. * @---------------------------------------------------
  1007. * @type : function
  1008. * @access : public
  1009. * @desc : item의 값(indxno)으로 아이템의 tree index 위치를 찾아낸다
  1010. * @param : itemVal : 찾으려는 값
  1011. * @return : cnt : 위치
  1012. * @---------------------------------------------------
  1013. */
  1014. function fSrchItemIndxNo( itemVal ){
  1015. var stopYN = "N";
  1016. var cnt = 0;
  1017. if( isNull(itemVal) ) return 0;
  1018. while( stopYN == "N" && cnt < treeview1.length ){
  1019. if( treeview1.item(cnt).value == itemVal ){
  1020. stopYN = "Y";
  1021. }else{
  1022. cnt++;
  1023. }
  1024. }
  1025. return cnt;
  1026. }
  1027. /**
  1028. * @group :
  1029. * @ver : 2007.07
  1030. * @by : 전지은
  1031. * @---------------------------------------------------
  1032. * @type : function
  1033. * @access : public
  1034. * @desc : status 값이 I 이거나 U 인 것들을 - 상태로 변환한다.
  1035. * @param :
  1036. * @return :
  1037. * @---------------------------------------------------
  1038. */
  1039. function fChangeStatus(){
  1040. var nodeList = instance1.selectNodes(itemRef + "[m = 'i' or m = 'u']");
  1041. for(var i= 0; i<nodeList.length; i++){
  1042. var node = nodeList.item(i);
  1043. var statusNode = node.selectSingleNode("m");
  1044. model.setValue(statusNode, "");
  1045. }
  1046. }
  1047. /**
  1048. * @group :
  1049. * @ver : 2007.07
  1050. * @by : 전지은
  1051. * @---------------------------------------------------
  1052. * @type : function
  1053. * @access : public
  1054. * @desc : CP/CPG의 변경 이력을 조회한다. (사용안함)
  1055. * @param :
  1056. * @return :
  1057. * @---------------------------------------------------
  1058. */
  1059. function fGetHistList(){
  1060. opener.model.removeNodeset("/root/main/search_cond");
  1061. opener.model.makeNode("/root/main/search_cond");
  1062. opener.model.makeValue("/root/main/search_cond/no", model.getValue(itemRef + "[" + (iFocusIndx + 1) + "]/cpgno"));
  1063. opener.model.makeValue("/root/main/search_cond/seq", model.getValue(itemRef + "[" + (iFocusIndx + 1) + "]/cpghistseq"));
  1064. opener.model.makeValue("/root/main/search_cond/cpgflagcd", model.getValue(itemRef + "[" + (iFocusIndx + 1) + "]/cpgflagcd"));
  1065. opener.model.makeValue("/root/main/search_cond/getflag", "H");
  1066. opener.window.javascript.fGetCpgHist();
  1067. }
  1068. /**
  1069. * @group :
  1070. * @ver : 2008.06
  1071. * @by : 전지은
  1072. * @---------------------------------------------------
  1073. * @type : function
  1074. * @access : public
  1075. * @desc : 폴더를 복사한다
  1076. * @param :
  1077. * @return :
  1078. * @---------------------------------------------------
  1079. */
  1080. function fCopyFolder(){
  1081. model.resetInstanceNode("/root/temp/copysset/copyfolderinfo/item");
  1082. model.copyNode("/root/temp/copysset/copyfolderinfo/item" , itemRef + "[" + (iFocusIndx + 1) + "]");
  1083. }
  1084. /**
  1085. * @group :
  1086. * @ver : 2008.06
  1087. * @by : 전지은
  1088. * @---------------------------------------------------
  1089. * @type : function
  1090. * @access : public
  1091. * @desc : 폴더를 붙여넣는다
  1092. * @param :
  1093. * @return :
  1094. * @---------------------------------------------------
  1095. */
  1096. function fPasteFolder(){
  1097. if( instance1.selectSingleNode("/root/temp/copysset/copyfolderinfo/item/indxno") == null ){
  1098. messageBox("복사하려는 원본 폴더를", "C002");
  1099. return;
  1100. }
  1101. if(parseInt(event.clientY) > 590 ){
  1102. group2.attribute("top") = "590px";
  1103. } else{
  1104. group2.attribute("top") = event.clientY;
  1105. }
  1106. //group2.attribute("left") = 100;
  1107. group2.attribute("visibility") = "visible";
  1108. cap_menu.attribute("text") = "폴더명";
  1109. btn_copyfolder.attribute("visibility") = "visible";
  1110. btn_modify.attribute("visibility") = "hidden";
  1111. btn_ok.attribute("visibility") = "hidden";
  1112. /*
  1113. if( isNull(sIndxNo) ){
  1114. sIndxNo = iFocusIndx; //sIndxNo = treeview1.focusIndex;
  1115. }
  1116. var selIndxno = model.getValue(itemRef + "[" + (sIndxNo + 1) + "]/indxno");
  1117. var selSupindxno = model.getValue(itemRef + "[" + (sIndxNo + 1) + "]/supindxno");
  1118. var srcNodeList = instance1.selectNodes(itemRef + "[supindxno='"+ selIndxno +"']");
  1119. for( var i=0; i<srcNodeList.length; i++ ){
  1120. var node = srcNodeList.item(i);
  1121. var
  1122. }
  1123. */
  1124. }
  1125. /**
  1126. * @group :
  1127. * @ver : 2007.07
  1128. * @by : 전지은
  1129. * @---------------------------------------------------
  1130. * @type : function
  1131. * @access : public
  1132. * @desc : CP/CPG의 변경 이력을 조회한다.
  1133. * @param :
  1134. * @return : true/false
  1135. * @---------------------------------------------------
  1136. */
  1137. function fSaveCpgIndxList( getData ){
  1138. var amountIndxCnt = treeview1.length;
  1139. var iStatus; //트리의 i번째 인덱스의 상태값
  1140. var getindxlistRowCnt = 0; //데스티네이션 인덱스의 컬럼 포인트
  1141. var saveIndxlist = "";
  1142. var saveIndxHeader;
  1143. //model.removeNodeset("/root/send/indxlist");
  1144. //model.removeNodeset("/root/send/masterinfo");
  1145. model.removeNodeset("/root/send"); //getData의 정보가 담긴 인스턴스, 아래에서 사용하므로 삭제 안됨
  1146. model.makeNode("/root/send/indxlist");
  1147. model.makeNode("/root/send/masterinfo");
  1148. //색인 노드셋을 리퀘스트데이터에 함께 보낸다.
  1149. if( isNull(getData) ){
  1150. model.removeNodeset("/root/main/indexinfo");
  1151. //ivw_indxmngt 의 색인트리에서 변경 데이터만 copy 해온다.
  1152. for(var i = 1; i <= amountIndxCnt; i++){
  1153. iStatus = model.getValue("/root/main/indxlist/itemlist/item[" + i + "]/status");
  1154. if(iStatus == "i" || iStatus == "u" || iStatus == "d") {
  1155. getindxlistRowCnt = getindxlistRowCnt + 1;
  1156. model.makeNode("/root/main/indexinfo/item[" + getindxlistRowCnt + "]");
  1157. copyNodesetType("/root/main/indexinfo/item[" + getindxlistRowCnt + "]", "/root/main/indxlist/itemlist/item[" + i + "]", "replace", model, model);
  1158. model.makeValue("/root/temp/reqdata/cpgno", model.getValue("/root/main/formdata/cpinfo/cpgno"));
  1159. model.makeValue("/root/temp/reqdata/cpghistseq", model.getValue("/root/main/formdata/cpinfo/cpghistseq"));
  1160. var nodelist = instance1.selectNodes( "/root/main/indexinfo/item[" + getindxlistRowCnt + "]" );
  1161. saveIndxlist = saveIndxlist + "▩" + getNodeListCSV(nodelist).split("▩")[1];
  1162. saveIndxHeader = getNodeListCSV(nodelist).split("▩")[0];
  1163. }
  1164. }
  1165. amountRows = grd_getindxlist.rows;
  1166. }else{
  1167. var src_supindxno = model.getValue(itemRef + "[" + (sIndxNo + 1) + "]/supindxno");
  1168. var trg_supindxno = model.getValue(itemRef + "[" + (tIndxNo + 1) + "]/supindxno");
  1169. //임시 폴더에 보이는 cp를 동일부서가 아닌 타부서로 이동할 경우, 색인을 save as(release 를 증가)
  1170. model.makeValue("/root/send/masterinfo/appdd", model.getValue("/root/main/formdata/cpinfo/appdd"));
  1171. model.makeValue("/root/send/masterinfo/cpgno", model.getValue("/root/main/formdata/cpinfo/cpgno"));
  1172. model.makeValue("/root/send/masterinfo/cpghistseq", model.getValue("/root/main/formdata/cpinfo/cpghistseq"));
  1173. model.makeValue("/root/send/masterinfo/nm", ""); //필요없는 값...
  1174. saveIndxlist = getData;
  1175. amountRows = 1;
  1176. }
  1177. model.makeValue("/root/send/saveinfo/purpose", model.getValue("/root/main/formdata/cpinfo/purpose")); //2008.06.19 추가
  1178. var header = "m▦indxno▦indxnm▦supindxno▦indxrefseq▦depth▦indxseq▦cpgno▦cpghistseq▦image▦cpgflagcd";
  1179. if(amountRows > 0 ) {
  1180. model.setValue("/root/send/indxlist", header + saveIndxlist + "▩");
  1181. model.makeValue("/root/send/masterinfo/status", "");
  1182. if( !(isNull(getData)) ){
  1183. model.makeValue("/root/send/masterinfo/status", "u");
  1184. }
  1185. //2줄 주석
  1186. //model.makeValue("/root/send/masterinfo/cpgno", model.getValue("/root/temp/reqdata/cpgno"));
  1187. //model.makeValue("/root/send/masterinfo/cpghistseq", model.getValue("/root/temp/reqdata/cpghistseq"));
  1188. model.makeNode("/root/temp/masterinfo");
  1189. if( submit("TXMQP00601", false) ){
  1190. return true;
  1191. } else {
  1192. return false;
  1193. }
  1194. }
  1195. }
  1196. ]]>
  1197. </script>
  1198. </xhtml:head>
  1199. <xhtml:body guideline="2,590;" style="margin-left:0; margin-top:0; margin-right:0; margin-bottom:0; ">
  1200. <treeview id="treeview1" ref="/root/temp/reqdata/selectindxcd" dragmode="true" dropmode="true" expanddepth="0" hasimages="true" itemsettype="depth" style="left:0px; top:0px; width:345px; height:673px; ">
  1201. <itemset nodeset="/root/main/indxlist/itemlist/item">
  1202. <label ref="indxnm"/>
  1203. <value ref="indxno"/>
  1204. <depth ref="depth"/>
  1205. <image ref="image"/>
  1206. <selectedimage/>
  1207. <expandedimage/>
  1208. </itemset>
  1209. <script type="javascript" ev:event="onmousedown">
  1210. <![CDATA[
  1211. if(treeview1.isCell(event.target)) {
  1212. var indx = treeview1.focusIndex;
  1213. var row = treeview1.mouseRow;
  1214. if(indx == -1 || indx != row ){
  1215. treeview1.select(row);
  1216. indx = row;
  1217. }
  1218. iFocusIndx = indx;
  1219. //TRMMP01501 실행해서 선택한 색인 하위 데이터를 조회
  1220. //fGetSubIndxList(indx);
  1221. //if( opener.model.getValue("/root/main/search_cond/authflag") == "M" ){
  1222. if(opener.window.javaScript.checkAuth("X") ){
  1223. if(event.button == 3){
  1224. //DB에 저장되어 있는 인덱스의 삭제는 체크버튼으로 control한다. 트리상에서 추가된 아이템은 바로 삭제 가능하다.
  1225. if(model.getValue(itemRef + "[" + (indx + 1) + "]/image") == fileImg) {
  1226. model.resetInstanceNode("/root/main/formdata/item");
  1227. if(model.getValue(itemRef + "[" + (indx + 1) + "]/supfolderno") == "1") { // 미등록 색인은 등록변경만 가능하도록! tmpindxmenu
  1228. setPopupMenu("treeview1", false, "/root/main/indxlist/popupmenu/tree/tmpindxmenu", "name", "func", false);
  1229. }else if(model.getValue(itemRef + "[" + (indx + 1) + "]/supfolderno") == "2") { // 미등록 색인은 등록변경만 가능하도록! tmpindxmenu
  1230. setPopupMenu("treeview1", false, "/root/main/indxlist/popupmenu/tree/endindxmenu", "name", "func", false);
  1231. }else{
  1232. setPopupMenu("treeview1", false, "/root/main/indxlist/popupmenu/tree/indxmenu", "name", "func", false);
  1233. }
  1234. } else {
  1235. var selIndxNo = model.getValue(itemRef + "[" + (indx + 1) + "]/indxno");
  1236. if( selIndxNo == "1" || selIndxNo == "2" ) {
  1237. return;
  1238. }
  1239. if( model.getValue(itemRef + "[" + (indx + 1) + "]/supindxno") == "0" ) {
  1240. setPopupMenu("treeview1", false, "/root/main/indxlist/popupmenu/tree/supmenu", "name", "func", false);
  1241. } else {
  1242. setPopupMenu("treeview1", false, "/root/main/indxlist/popupmenu/tree/submenu", "name", "func", false);
  1243. }
  1244. }
  1245. var itemNode = instance1.selectSingleNode(itemRef + "[" + (indx + 1) + "]");
  1246. var itemNodeDepth = itemNode.depth.text;
  1247. model.resetInstanceNode("/root/main/formdata/item");
  1248. model.setValue("/root/main/formdata/item/depth", parseInt(itemNodeDepth) + 1);
  1249. }
  1250. }
  1251. }else{
  1252. window.setPopupMenu(false);
  1253. }
  1254. ]]>
  1255. </script>
  1256. <script type="javascript" ev:event="DOMFocusOut">
  1257. <![CDATA[
  1258. window.setPopupMenu(false);
  1259. ]]>
  1260. </script>
  1261. <!--
  1262. <script type="javascript" ev:event="onchecked">
  1263. <![CDATA[
  1264. var focusIndex = treeview1.focusIndex;
  1265. var iRow = parseInt(focusIndex) + 1; //선택한 인스턴스의 인덱스
  1266. treeview1.select( focusIndex );
  1267. if( ! (treeview1.selectedindex ==-1 ) ){
  1268. if(model.getValue(itemRef + "[" + iRow + "]/image") == fileImg) {
  1269. fCopyIndx( iRow, "chk" );
  1270. } else {
  1271. return;
  1272. }
  1273. }
  1274. ]]>
  1275. </script>
  1276. <script type="javascript" ev:event="onunchecked">
  1277. <![CDATA[
  1278. var focusIndex = treeview1.focusIndex;
  1279. var iRow = parseInt(focusIndex) + 1; //선택한 인스턴스의 인덱스
  1280. treeview1.select( focusIndex );
  1281. if( ! (treeview1.selectedindex ==-1 ) ){
  1282. if(model.getValue("/root/main/indxlist/itemlist/item[" + iRow + "]/image") == fileImg) {
  1283. fCopyIndx( iRow, "unchk" );
  1284. } else {
  1285. return;
  1286. }
  1287. }
  1288. ]]>
  1289. </script>
  1290. -->
  1291. <script type="javascript" ev:event="ondragstart">
  1292. <![CDATA[
  1293. //if( opener.model.getValue("/root/main/search_cond/authflag") == "M" ){
  1294. if(opener.window.javaScript.checkAuth("X") ){
  1295. preItem = treeview1.item(treeview1.mouseRow);
  1296. preindx = treeview1.mouseRow;
  1297. preItem.attribute("background-color") = "#ffffff";
  1298. }
  1299. ]]>
  1300. </script>
  1301. <script type="javascript" ev:event="ondragover">
  1302. <![CDATA[
  1303. //드래그 시, 마우스가 위치한 아이템의 배경 색을 변경해준다.
  1304. curItem = treeview1.item(treeview1.mouseRow);
  1305. var curindx = treeview1.mouseRow;
  1306. if(preindx < curindx){
  1307. preItem.attribute("background-color") = "#ffffff";
  1308. curItem.attribute("background-color") = "#ece1ec";
  1309. preItem = treeview1.item(treeview1.mouseRow);
  1310. } else if(preindx > curindx){
  1311. preItem.attribute("background-color") = "#ffffff";
  1312. curItem.attribute("background-color") = "#ece1ec";
  1313. preItem = treeview1.item(treeview1.mouseRow);
  1314. }
  1315. ]]>
  1316. </script>
  1317. <script type="javascript" ev:event="ondrop">
  1318. <![CDATA[
  1319. //if( opener.model.getValue("/root/main/search_cond/authflag") == "M" ){
  1320. if(opener.window.javaScript.checkAuth("X") ){
  1321. if( !fOnDropEvnt() ){
  1322. //실패 시, 포커스 칼러는 처음 선택했던 색인만 색상 지정
  1323. curItem = treeview1.item(treeview1.mouseRow);
  1324. curItem.attribute("background-color") = "#ffffff";
  1325. }
  1326. }
  1327. ]]>
  1328. </script>
  1329. <script type="javascript" ev:event="ondblclick">
  1330. <![CDATA[
  1331. treeview1.expand(treeview1.focusIndex, false);
  1332. // opener 의 uid 로 비교..
  1333. if(model.getValue("/root/temp/openeruid") != ""){
  1334. var i = treeview1.focusIndex + 1;
  1335. if(model.getValue(itemRef + "[" + i + "]/image") == fileImg){
  1336. opener.model.setValue("/root/main/search_cond/getflag", "C"); //CP직접 선택
  1337. opener.model.setValue("/root/main/search_cond/no", model.getValue(itemRef + "[" + i + "]/cpgno"));
  1338. opener.model.setValue("/root/main/search_cond/seq", model.getValue(itemRef + "[" + i + "]/cpghistseq"));
  1339. }else{
  1340. opener.model.setValue("/root/main/search_cond/getflag", "F"); //진료과 폴더 선택
  1341. opener.model.setValue("/root/main/search_cond/no", model.getValue(itemRef + "[" + i + "]/indxno"));
  1342. opener.model.setValue("/root/main/search_cond/seq", model.getValue(itemRef + "[" + i + "]/indxseq"));
  1343. }
  1344. // indxno 혹은 supindxno가 1 이면, tmpyn = 'Y'로 셋팅하여 reqdata에 포함
  1345. if( model.getValue(itemRef + "[" + (treeview1.focusIndex + 1) + "]/indxno") == "1" || model.getValue(itemRef + "[" + (treeview1.focusIndex + 1) + "]/supfolderno") == "1"){
  1346. opener.model.makeValue("/root/main/search_cond/tmpyn", "Y");
  1347. }else{
  1348. opener.model.makeValue("/root/main/search_cond/tmpyn", "N");
  1349. }
  1350. // indxno 혹은 supindxno가 2 이면, delyn = 'Y'로 셋팅하여 reqdata에 포함
  1351. if( model.getValue(itemRef + "[" + (treeview1.focusIndex + 1) + "]/indxno") == "2" || model.getValue(itemRef + "[" + (treeview1.focusIndex + 1) + "]/supfolderno") == "2"){
  1352. opener.model.makeValue("/root/main/search_cond/delyn", "Y");
  1353. }else{
  1354. opener.model.makeValue("/root/main/search_cond/delyn", "N");
  1355. }
  1356. //opener.model.setValue("/root/main/search_cond/cpgnm", model.getValue(itemRef + "[" + i + "]/indxnm"));
  1357. model.setValue("/root/temp/reqdata/cpgflagcd", model.getValue(itemRef + "[" + i + "]/cpgflagcd"));
  1358. opener.window.javascript.fGetCPGInfo();
  1359. opener.model.setValue("/root/main/search_cond/delyn", "N");
  1360. } else {
  1361. return;
  1362. }
  1363. ]]>
  1364. </script>
  1365. </treeview>
  1366. <group id="group2" visibility="hidden" style="left:95px; top:20px; width:221px; height:55px; background-color:#ffffff; border-color:#000000; ">
  1367. <input id="input1" ref="/root/main/formdata/item/indxnm" class="input_default" style="left:67px; top:5px; width:147px; height:14px; border-style:solid; ">
  1368. <script type="javascript" ev:event="onkeyup">
  1369. <![CDATA[
  1370. /*if(btn_modify.attribute("visibility") = "visible" ){
  1371. inputEnterKey("btn_modify", "DOMActivate");
  1372. // } else if(btn_ok.attribute("visibility") = "visible" 1){
  1373. inputEnterKey("btn_ok", "DOMActivate");
  1374. }*/
  1375. ]]>
  1376. </script>
  1377. </input>
  1378. <input id="input2" ref="/root/main/formdata/item/indxrefseq" class="input_default" visibility="hidden" style="left:67px; top:27px; width:57; height:19px; border-style:solid; "/>
  1379. <input id="input3" ref="/root/main/formdata/item/supindxno" class="input_default" visibility="hidden" style="left:9px; top:27px; width:55px; height:19px; border-style:solid; "/>
  1380. <button id="btn_ok" class="btn2_letter2" style="left:127px; top:28px; width:42px; height:19px; ">
  1381. <caption>확인</caption>
  1382. <script type="javascript" ev:event="DOMActivate">
  1383. <![CDATA[
  1384. //확인버튼1 : 색인저장, 폴더명 수정...
  1385. var iRow = iFocusIndx;
  1386. model.setValue("/root/main/formdata/item/status", "i");
  1387. var treeItemNodeSet = treeview1.itemset.attribute("nodeset");
  1388. var srcLastChildItemIndex = getLastChildItemIndex( iFocusIndx , treeItemNodeSet );
  1389. var roc = parseInt(srcLastChildItemIndex) + 1;
  1390. //새로운 아이템을 추가한다
  1391. var pDesNode = instance1.selectSingleNode("/root/main/indxlist/itemlist");
  1392. var desNode = instance1.selectSingleNode(itemRef + "[" + parseInt(roc) +"]");
  1393. var srcNode = instance1.selectSingleNode("/root/main/formdata/item");
  1394. var cSrcNode = srcNode.cloneNode(true);
  1395. pDesNode.insertAfter(cSrcNode, desNode);
  1396. group2.attribute("visibility") = "hidden";
  1397. treeview1.rebuild();
  1398. if(model.getValue("/root/temp/selecedkind/kind") == "F"){
  1399. //만일 추가한 아이템이 폴더라면 IndxNo를 얻어오기 위해 저장을 선행한다.
  1400. fSaveFolderIndx( parseInt(roc)+1, "i" );
  1401. treeview1.select( parseInt(roc) );
  1402. var falg = opener.model.getValue("/root/main/search_cond/cpgflagcd");
  1403. fGetIndxList(falg);
  1404. } else {
  1405. //추가한 아이템이 인덱스일 경우는 상태만 바꿔놓고 나중에 일괄 저장한다.
  1406. //새로 생성된 아이템을 선택하고 체크한다.
  1407. treeview1.select( parseInt(roc) );
  1408. //드롭 후 변경 내용을 바로 저장한다
  1409. var flag = opener.model.getValue("/root/main/search_cond/cpgflagcd");
  1410. fSaveCpgIndxList();
  1411. fGetIndxList(flag);
  1412. }
  1413. ]]>
  1414. </script>
  1415. </button>
  1416. <button id="btn_modify" class="btn2_letter2" style="left:127px; top:28px; width:42px; height:19px; ">
  1417. <caption>확인</caption>
  1418. <script type="javascript" ev:event="DOMActivate">
  1419. <![CDATA[
  1420. //확인버튼2 : 폴더 추가.
  1421. var iRow = iFocusIndx;
  1422. model.setValue(itemRef + "[" + (iRow+1) + "]/indxnm", model.getValue("/root/main/formdata/item/indxnm"));
  1423. group2.attribute("visibility") = "hidden";
  1424. //treeview1.rebuild();
  1425. fSaveFolderIndx ( parseInt(iRow)+1, "u" );
  1426. ]]>
  1427. </script>
  1428. </button>
  1429. <button id="btn_copyfolder" class="btn2_letter2" style="left:127px; top:28px; width:42px; height:19px; ">
  1430. <caption>확인</caption>
  1431. <script type="javascript" ev:event="DOMActivate">
  1432. <![CDATA[
  1433. //확인버튼3 : 폴더 복사/붙여넣기 시, copy 폴더명 입력 후 저장
  1434. if( isNull(sIndxNo) ){
  1435. sIndxNo = iFocusIndx;
  1436. }
  1437. if( messageBox("선택한 폴더를 붙여넣기", "Q004") != "6" ){
  1438. group2.visible = false;
  1439. return false;
  1440. }
  1441. if( instance1.selectSingleNode("/root/temp/copysset/copyfolderinfo/item/indxno") == null ){
  1442. group2.visible = false;
  1443. messageBox("복사한 폴더가", "E001");
  1444. return;
  1445. }
  1446. if( model.getValue("/root/main/formdata/item/indxnm") == "" ){
  1447. messageBox("새로운 폴더명을", "C001");
  1448. return;
  1449. }
  1450. // /root/main/indxlist/itemlist/item <- /root/temp/copysset/copyfolderinfo/item
  1451. var selIndxno = model.getValue("/root/temp/copysset/copyfolderinfo/item/indxno");
  1452. var selSupindxno = model.getValue("/root/temp/copysset/copyfolderinfo/item/supindxno");
  1453. var trgindxno = model.getValue(itemRef + "[" + (sIndxNo + 1) +"]/indxno");
  1454. model.removeNodeset("/root/send");
  1455. model.makeNode("/root/send/masterinfo");
  1456. model.makeNode("/root/send/reqdata");
  1457. model.makeNode("/root/send/itemlist");
  1458. //색인 정보 구성
  1459. model.resetInstanceNode("/root/temp/savedfolder/item");
  1460. model.makeValue("/root/send/reqdata/srcindx/srcindxno" , selIndxno);
  1461. model.makeValue("/root/send/reqdata/srcindx/srcsupindxno" , selSupindxno);
  1462. model.makeValue("/root/send/reqdata/srcindx/trgindxno" , trgindxno);
  1463. model.makeValue("/root/send/reqdata/srcindx/trgsupindxno" , model.getValue(itemRef + "[" + (sIndxNo + 1) +"]/supindxno"));
  1464. model.makeValue("/root/send/reqdata/srcindx/trgindxnm" , model.getValue("/root/main/formdata/item/indxnm")); //입력한폴더명
  1465. var treeItemNodeSet = treeview1.itemset.attribute("nodeset"); //전체 색인 범위
  1466. var trgLastChildItemIndex = getLastChildItemIndex(sIndxNo, treeItemNodeSet); // 드롭 아이템이 속한 아이템셋의 마지막 인덱스
  1467. model.makeValue("/root/send/reqdata/srcindx/lastindxrefseq" , model.getValue(itemRef + "[" + (trgLastChildItemIndex + 1) +"]/indxrefseq")); //마지막 색인순번
  1468. if( submit( "TXMMP01502", false ) ){
  1469. group2.visible = false;
  1470. var flag = opener.model.getValue("/root/main/search_cond/cpgflagcd");
  1471. fGetIndxList(flag);
  1472. //trgindxno와 동일한 색인번호를 갖는 indx를 펼친다
  1473. var cnt = fSrchItemIndxNo( trgindxno );
  1474. treeview1.expand(cnt, true);
  1475. //복사 원본폴더 정보 노드 리셋
  1476. model.removeNodeset("/root/temp/copysset/copyfolderinfo/item");
  1477. model.makeNode("/root/temp/copysset/copyfolderinfo/item");
  1478. }
  1479. ]]>
  1480. </script>
  1481. </button>
  1482. <caption id="cap_menu" class="cell_1" style="left:5px; top:5px; width:60px; height:20px; font-weight:bold; vertical-align:middle; ">색인명</caption>
  1483. <button id="btn_cancle" class="btn2_letter2" style="left:172px; top:28px; width:42px; height:19px; ">
  1484. <caption>취소</caption>
  1485. <script type="javascript" ev:event="DOMActivate">
  1486. <![CDATA[
  1487. group2.attribute("visibility") = "hidden";
  1488. ]]>
  1489. </script>
  1490. </button>
  1491. <shape id="roundrect2" class="roundrect_btnset" appearance="roundrect" style="left:1px; top:0px; width:219px; height:53px; "/>
  1492. </group>
  1493. <datagrid id="grd_getindxlist" nodeset="/root/main/indexinfo/item" visibility="hidden" caption="indxNO^indxSeq^indxNM^supIndxNO^indxRefSeq^cpgNo^cpgHistSeq^depth^status" colsep="^" colwidth="45, 51, 50, 66, 73, 49, 72, 41, 39" mergecellsfixedrows="bycolrec" rowheader="update" rowsep="|" style="left:0px; top:590px; width:345px; height:77px; ">
  1494. <col ref="indxno"/>
  1495. <col ref="indxseq"/>
  1496. <col ref="indxnm"/>
  1497. <col ref="supindxno"/>
  1498. <col ref="indxrefseq"/>
  1499. <col ref="cpgno"/>
  1500. <col ref="cpghistseq"/>
  1501. <col ref="depth"/>
  1502. <col ref="status"/>
  1503. </datagrid>
  1504. <group id="group1" visibility="hidden" style="left:60px; top:175px; width:269px; height:70px; background-color:#ffffff; border-color:#000000; border-style:none; ">
  1505. <shape id="roundrect1" class="roundrect_btnset" appearance="roundrect" style="left:2px; top:1px; width:265px; height:68px; "/>
  1506. <input id="input5" ref="/root/main/formdata/cpinfo/cpghistseq" class="input_default" visibility="hidden" style="left:80px; top:45px; width:17px; height:19px; border-style:solid; "/>
  1507. <input id="input6" ref="/root/main/formdata/cpinfo/cpgno" class="input_default" visibility="hidden" style="left:70px; top:45px; width:15px; height:19px; border-style:solid; "/>
  1508. <img id="img1" src="../../../com/commonweb/images/icon_n.gif" style="left:7px; top:15px; width:10px; height:13px; background-stretch:stretch; "/>
  1509. <input id="input7" ref="/root/main/formdata/cpinfo/purpose" class="input_default" visibility="hidden" style="left:60px; top:45px; width:17px; height:19px; border-style:solid; "/>
  1510. <caption id="cap_question" style="left:20px; top:10px; width:246px; height:28px; ">
  1511. <![CDATA[선택하신 CP의 적용일이 존재하지 않습니다.
  1512. 적용일을 등록하시겠습니까?]]>
  1513. </caption>
  1514. <input id="ipt_appdd" ref="/root/main/formdata/cpinfo/appdd" class="input_default" inputtype="date" style="left:70px; top:44px; width:97px; height:19px; border-style:solid; ">
  1515. <script type="javascript" ev:event="onkeyup">
  1516. <![CDATA[
  1517. /*if(btn_modify.attribute("visibility") = "visible" ){
  1518. inputEnterKey("btn_modify", "DOMActivate");
  1519. } else if(btn_ok.attribute("visibility") = "visible" ){
  1520. inputEnterKey("btn_ok", "DOMActivate");
  1521. }*/
  1522. ]]>
  1523. </script>
  1524. </input>
  1525. <button id="btn_msgcncl" class="btn2_letter2" style="left:219px; top:43px; width:42px; height:19px; ">
  1526. <caption>취소</caption>
  1527. <script type="javascript" ev:event="DOMActivate">
  1528. <![CDATA[
  1529. group1.visible = false;
  1530. tIndxNo = iFocusIndx; //sIndxNo = treeview1.focusIndex;
  1531. if( tIndxNo != null ){
  1532. var curItem = treeview1.item(tIndxNo);
  1533. curItem.attribute("background-color") = "#ffffff";
  1534. }
  1535. /*
  1536. var org_srcKind = model.getValue(itemRef + "[" + (tIndxNo + 1) + "]/image");
  1537. if(org_srcKind == folderImg) {}
  1538. fMoveItem( tIndxNo, "", sIndxNo , "");
  1539. */
  1540. ]]>
  1541. </script>
  1542. </button>
  1543. <button id="btn_msgcnfm" class="btn2_letter2" style="left:174px; top:43px; width:42px; height:19px; ">
  1544. <caption>확인</caption>
  1545. <script type="javascript" ev:event="DOMActivate">
  1546. <![CDATA[
  1547. //if( isNull(sIndxNo) ){
  1548. sIndxNo = iFocusIndx; //sIndxNo = treeview1.focusIndex;
  1549. //}
  1550. //if( isNull(tIndxNo) ){
  1551. var srchVal = model.getValue(itemRef + "[" + (sIndxNo + 1) + "]/supindxno");
  1552. tIndxNo = fSrchItemIndxNo( srchVal );
  1553. //}
  1554. var appDD = model.getValue("/root/main/formdata/cpinfo/appdd");
  1555. if( ipt_appdd.visible == true && isNull(appDD) ){
  1556. messageBox("적용일을 ", "C001");
  1557. return;
  1558. }else if( ipt_appdd.visible == true && (getStringLength(appDD) < 8 || getStringLength(appDD) > 8 ) ){
  1559. messageBox("적용일은 8자리", "I009");
  1560. return;
  1561. }else {
  1562. var m = "";
  1563. var indxno = model.getValue(itemRef + "[" + (sIndxNo + 1) + "]/indxno");
  1564. var indxnm = model.getValue(itemRef + "[" + (sIndxNo + 1) + "]/indxnm");
  1565. var indxrefseq = model.getValue(itemRef + "[" + (sIndxNo + 1) + "]/indxrefseq");
  1566. var indxseq = parseInt( model.getValue(itemRef + "[" + (sIndxNo + 1) + "]/indxseq") ) + 1;
  1567. var no = model.getValue(itemRef + "[" + (sIndxNo + 1) + "]/cpgno");
  1568. var ver = model.getValue(itemRef + "[" + (sIndxNo + 1) + "]/cpghistseq");
  1569. var flag = model.getValue(itemRef + "[" + (sIndxNo + 1) + "]/cpgflagcd");
  1570. var src_supindxno = model.getValue(itemRef + "[" + (sIndxNo + 1) + "]/supindxno");
  1571. var src_supflderno = model.getValue(itemRef + "[" + (sIndxNo + 1) + "]/supfolderno");
  1572. var supindxno = model.getValue(itemRef + "[" + (tIndxNo + 1) + "]/supindxno");
  1573. var supfolderno = model.getValue(itemRef + "[" + (tIndxNo + 1) + "]/supfolderno");
  1574. //최상위이면, supindxno는 자신의 indxno
  1575. if( model.getValue(itemRef + "[" + (tIndxNo + 1) + "]/image") == folderImg && model.getValue(itemRef + "[" + (tIndxNo + 1) + "]/supindxno") == "0" ){
  1576. trg_supindxno = model.getValue(itemRef + "[" + (tIndxNo + 1) + "]/indxno");
  1577. supindxno = trg_supindxno;
  1578. }
  1579. // 선택한 CP의 진료과와 타겟의 진료과가 다르면, 등록변경 안됨 (2008.06.18 변경됨... 원래 처리 : 색인도 새로 생성)
  1580. // 삭제 종료 미등록 변경은 상위노드의 인덱스 번호와 상관없이 진행될 수 있도록 flag 추가 (2008. 09.18)
  1581. var skipcheck = model.getValue("/root/temp/skiptopcheck");
  1582. if (skipcheck != "Y" ) {
  1583. if(src_supindxno != supindxno){
  1584. //m = "i"; //색인을 save as한다.
  1585. messageBox("다른 진료과로 옮길 수", "E001");
  1586. return;
  1587. }
  1588. }
  1589. model.removenode("/root/temp/skiptopcheck");
  1590. //var header = "m▦indxno▦indxnm▦supindxno▦indxrefseq▦depth▦indxseq▦cpgno▦cpghistseq▦image▦cpgflagcd";
  1591. var saveIndxlist = "▩"+m+"▦"+indxno+"▦"+indxnm+"▦"+supindxno+"▦"+indxrefseq+"▦▦"+indxseq+"▦"+no+"▦"+ver+"▦▦"+flag;
  1592. model.setValue("/root/main/formdata/cpinfo/cpgno", no);
  1593. model.setValue("/root/main/formdata/cpinfo/cpghistseq", ver);
  1594. if( fSaveCpgIndxList( saveIndxlist ) ){
  1595. fGetIndxList("F");
  1596. }else {
  1597. var curItem = treeview1.item(tIndxNo);
  1598. curItem.attribute("background-color") = "#ffffff";
  1599. }
  1600. group1.visible = false;
  1601. }
  1602. ]]>
  1603. </script>
  1604. </button>
  1605. <caption id="cap_appdd" class="tit_2" style="left:8px; top:46px; width:66px; height:13px; ">적용일</caption>
  1606. </group>
  1607. </xhtml:body>
  1608. </xhtml:html>