SMZTP00400_프로젝트진척관리(개발자용).xrw 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545
  1. <?xml version="1.0" encoding="EUC-KR"?>
  2. <?xml-stylesheet href="../../../com/commonweb/css/common.css" type="text/css" ?>
  3. <?xml-stylesheet type="text/css" href="../../../com/commonweb/css/common.css" ?>
  4. <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">
  5. <xhtml:head>
  6. <xhtml:title>프로젝트진척관리(개발자용)</xhtml:title>
  7. <model id="model1">
  8. <instance id="instance1">
  9. <root xmlns="">
  10. <main>
  11. <projlist>
  12. <list>
  13. <proj>
  14. <prcscd/>
  15. <subteam/>
  16. <lrg/>
  17. <mdl/>
  18. <sml/>
  19. <srfeflag/>
  20. <scrnid/>
  21. <scrnname/>
  22. <insuimp/>
  23. <detailfe/>
  24. <dev/>
  25. <usernm/>
  26. <schestartdd/>
  27. <schedd/>
  28. <acptdd/>
  29. <startdd/>
  30. <enddd/>
  31. <prcsrate/>
  32. <prcsyn/>
  33. <remark/>
  34. <funt1/>
  35. <funt2/>
  36. <funt3/>
  37. <updtneedyn/>
  38. <fstrgstrid/>
  39. <fstrgstdt/>
  40. <lastupdtrid/>
  41. <lastupdtdt/>
  42. <useyn/>
  43. <adchflag/>
  44. <appdd/>
  45. <sort/>
  46. </proj>
  47. </list>
  48. </projlist>
  49. <list/>
  50. </main>
  51. <send>
  52. <search>
  53. <subteam/>
  54. <lrg/>
  55. <mdl/>
  56. <sml/>
  57. <srfeflag/>
  58. <scrnname/>
  59. <scrnid/>
  60. <dev/>
  61. <usernm/>
  62. <schedd/>
  63. <startdd/>
  64. <enddd/>
  65. </search>
  66. <projlist/>
  67. </send>
  68. <init>
  69. <srfe>
  70. <item>
  71. <name>전체</name>
  72. <id>-</id>
  73. </item>
  74. <item>
  75. <name>화면</name>
  76. <id>화면</id>
  77. </item>
  78. <item>
  79. <name>보고서</name>
  80. <id>보고서</id>
  81. </item>
  82. <item>
  83. <name>기능</name>
  84. <id>기능</id>
  85. </item>
  86. <item>
  87. <name>오류</name>
  88. <id>오류</id>
  89. </item>
  90. <item>
  91. <name>DB변경</name>
  92. <id>DB변경</id>
  93. </item>
  94. </srfe>
  95. <subteam>
  96. <item>
  97. <name>전체</name>
  98. <id>-</id>
  99. </item>
  100. <item>
  101. <name>CMC네트워크</name>
  102. <id>CMC네트워크</id>
  103. </item>
  104. <item>
  105. <name>CRM</name>
  106. <id>CRM</id>
  107. </item>
  108. <item>
  109. <name>LIS</name>
  110. <id>LIS</id>
  111. </item>
  112. <item>
  113. <name>MIS</name>
  114. <id>MIS</id>
  115. </item>
  116. <item>
  117. <name>SWAT</name>
  118. <id>SWAT</id>
  119. </item>
  120. <item>
  121. <name>간호EMR</name>
  122. <id>간호EMR</id>
  123. </item>
  124. <item>
  125. <name>건진</name>
  126. <id>건진</id>
  127. </item>
  128. <item>
  129. <name>공통</name>
  130. <id>공통</id>
  131. </item>
  132. <item>
  133. <name>보험청구</name>
  134. <id>보험청구</id>
  135. </item>
  136. <item>
  137. <name>원무</name>
  138. <id>원무</id>
  139. </item>
  140. <item>
  141. <name>진료EMR</name>
  142. <id>진료EMR</id>
  143. </item>
  144. <item>
  145. <name>진료지원</name>
  146. <id>진료지원</id>
  147. </item>
  148. </subteam>
  149. </init>
  150. <popup>
  151. <grd_projlist>
  152. <item>
  153. <name>일괄수정</name>
  154. <func>fBatUpdate</func>
  155. </item>
  156. </grd_projlist>
  157. </popup>
  158. <popIndex>dev</popIndex>
  159. </root>
  160. </instance>
  161. <script type="javascript" ev:event="xforms-model-construct-done">
  162. <![CDATA[
  163. combo1.select(0);
  164. combo2.select(0);
  165. ]]>
  166. </script>
  167. <script type="javascript" ev:event="xforms-ready">
  168. <![CDATA[
  169. model.removeNodeset("/root/main/projlist/list/proj");
  170. model.refresh();
  171. ]]>
  172. </script>
  173. <submission id="TRZTP00101" mediatype="application/x-www-form-urlencoded" method="post" ref="/root/send/search" resultref="/root/main/projlist/list"/>
  174. <submission id="TXZTP00101" mediatype="application/x-www-form-urlencoded" method="post" ref="/root/send" resultref="/root/main/list"/>
  175. </model>
  176. <script type="javascript" src="../../../com/commonweb/js/common.js"/>
  177. <script type="javascript" src="../../../com/commonweb/js/tfHelper.js"/>
  178. <script type="javascript">
  179. <![CDATA[
  180. var prcsrate;
  181. function checkGridUpdate(grid)
  182. {
  183. var iData = grid.getUpdateDataXml("insert");
  184. var uData = grid.getUpdateDataXml("update");
  185. var dData = grid.getUpdateDataXml("delete");
  186. if (iData=="" && uData=="" && dData=="") return false;
  187. else return true;
  188. }
  189. function checkGridField(grid, field)
  190. {
  191. var nodeset = grid.nodeset;
  192. var iStatus;
  193. var iData = grid.getUpdateDataXml("insert");
  194. for (i=grid.fixedRows; i<grid.rows; i++)
  195. {
  196. iStatus = grid.rowstatus(i);
  197. if (iStatus == 1) // ?? ??? ?? ????
  198. {
  199. if(model.getValue(nodeset+"["+i+"]/"+field)=="") return false;
  200. }
  201. }
  202. return true;
  203. }
  204. // 일괄수정
  205. function fBatUpdate() {
  206. for(var i=0; i<grd_projlist.selectedRows; i++)
  207. {
  208. var row = grd_projlist.selectedRow(i);
  209. grd_projlist.addStatus(row, "update");
  210. }
  211. modal("SPZTP01000", "", "", "", "popup", "/root/send/popup", "/root/main/grd_projlist","left:300; top:300; width:750; height:200; sysmenu:visible; min:visible; max:true; resize:true; caption:visible;");
  212. }
  213. function fSearch()
  214. {
  215. submit("TRZTP00101");
  216. var gridObj = document.all("grd_projlist");
  217. for(var i=0 ; i <= grd_projlist.rows; i++)
  218. {
  219. for(var j=0; j<grd_projlist.cols-1; j++)
  220. {
  221. if(model.getValue("/root/main/projlist/list/proj["+i+"]/useyn") == "N")
  222. {
  223. gridObj.cellStyle("text-decoration", i+1, j) = "line-through";
  224. }
  225. }
  226. }
  227. }
  228. ]]>
  229. </script>
  230. </xhtml:head>
  231. <xhtml:body guideline="2,783;" style="margin-left:8; margin-top:0; margin-right:8; margin-bottom:0; ">
  232. <group id="group1" style="left:0px; top:0px; width:1195px; height:13px; ">
  233. <caption id="caption1" class="tit_1" style="left:0px; top:0px; width:189px; height:14px; ">프로젝트진척관리(개발자)</caption>
  234. </group>
  235. <group id="group5" scroll="auto" style="left:0px; top:45px; width:1195px; height:730px; ">
  236. <group id="group6" style="left:0px; top:0px; width:1194px; height:65px; vertical-align:top; ">
  237. <shape id="roundrect3" class="roundrect_search" appearance="roundrect" style="left:0px; top:0px; width:1194px; height:60px; "/>
  238. <line id="line18" class="line_4" style="x1:1071px; y1:7px; x2:1071px; y2:54px; border-left-style:solid; "/>
  239. <caption id="caption2" class="search_name" style="left:6px; top:8px; width:86px; height:17px; ">SubTeam</caption>
  240. <caption id="caption3" class="search_name" style="left:231px; top:8px; width:66px; height:17px; ">대분류</caption>
  241. <caption id="caption4" class="search_name" style="left:441px; top:8px; width:71px; height:17px; ">중분류</caption>
  242. <caption id="caption5" class="search_name" style="left:638px; top:8px; width:66px; height:17px; ">소분류</caption>
  243. <caption id="caption6" class="search_name" style="left:855px; top:10px; width:64px; height:17px; ">구분</caption>
  244. <caption id="caption7" class="search_name" style="left:190px; top:35px; width:63px; height:17px; ">화면명</caption>
  245. <button id="button1" class="btn1_letter2" navindex="12" style="left:1105px; top:17px; width:56px; height:22px; background-image:../../../com/commonweb/images/btn1_letter2.gif; ">
  246. <caption>조회</caption>
  247. <script type="javascript" ev:event="DOMActivate">
  248. <![CDATA[
  249. fSearch();
  250. ]]>
  251. </script>
  252. </button>
  253. <input id="input2" ref="/root/send/search/lrg" class="input_search" navindex="2" style="left:305px; top:10px; width:100px; height:19px; ">
  254. <script type="javascript" ev:event="onkeypress">
  255. <![CDATA[
  256. if (event.keycode == 13)
  257. {
  258. input2.value = input2.currentText;
  259. fSearch();
  260. }
  261. ]]>
  262. </script>
  263. </input>
  264. <input id="input3" ref="/root/send/search/mdl" class="input_search" navindex="3" style="left:515px; top:10px; width:100px; height:19px; ">
  265. <script type="javascript" ev:event="onkeypress">
  266. <![CDATA[
  267. if (event.keycode == 13)
  268. {
  269. input3.value = input3.currentText;
  270. fSearch();
  271. }
  272. ]]>
  273. </script>
  274. </input>
  275. <input id="input4" ref="/root/send/search/sml" class="input_search" navindex="4" style="left:739px; top:10px; width:100px; height:19px; ">
  276. <script type="javascript" ev:event="onkeypress">
  277. <![CDATA[
  278. if (event.keycode == 13)
  279. {
  280. input4.value = input4.currentText;
  281. fSearch();
  282. }
  283. ]]>
  284. </script>
  285. </input>
  286. <select1 id="combo1" ref="/root/send/search/srfeflag" class="combo_search" navindex="5" appearance="minimal" style="left:930px; top:10px; width:100px; height:19px; ">
  287. <choices>
  288. <itemset nodeset="/root/init/srfe/item">
  289. <label ref="name"/>
  290. <value ref="id"/>
  291. </itemset>
  292. </choices>
  293. </select1>
  294. <input id="input5" ref="/root/send/search/scrnname" class="input_search" navindex="7" style="left:265px; top:35px; width:100px; height:19px; ">
  295. <script type="javascript" ev:event="onkeypress">
  296. <![CDATA[
  297. if (event.keycode == 13)
  298. {
  299. input5.value = input5.currentText;
  300. fSearch();
  301. }
  302. ]]>
  303. </script>
  304. </input>
  305. <select1 id="combo2" ref="/root/send/search/subteam" class="combo_search" navindex="1" appearance="minimal" style="left:100px; top:10px; width:100px; height:19px; ">
  306. <choices>
  307. <itemset nodeset="/root/init/subteam/item">
  308. <label ref="name"/>
  309. <value ref="id"/>
  310. </itemset>
  311. </choices>
  312. </select1>
  313. <caption id="caption9" class="search_name" style="left:5px; top:35px; width:63px; height:17px; ">화면ID</caption>
  314. <input id="input1" ref="/root/send/search/scrnid" class="input_search" navindex="6" style="left:80px; top:35px; width:100px; height:19px; ">
  315. <script type="javascript" ev:event="onkeypress">
  316. <![CDATA[
  317. if (event.keycode == 13)
  318. {
  319. input1.value = input1.currentText;
  320. fSearch();
  321. }
  322. ]]>
  323. </script>
  324. </input>
  325. <caption id="caption10" class="search_name" style="left:375px; top:35px; width:63px; height:17px; ">개발자</caption>
  326. <input id="input6" ref="/root/send/search/usernm" class="input_search" navindex="8" style="left:450px; top:35px; width:70px; height:19px; ">
  327. <script type="javascript" ev:event="onkeypress">
  328. <![CDATA[
  329. if (event.keycode == 13)
  330. {
  331. input6.value = input6.currentText;
  332. fSearch();
  333. }
  334. ]]>
  335. </script>
  336. </input>
  337. <caption id="caption11" class="search_name" style="left:528px; top:35px; width:89px; height:17px; ">예정완료일</caption>
  338. <input id="input7" ref="/root/send/search/schedd" class="input_search" navindex="9" inputtype="date" mask="include" style="left:625px; top:35px; width:90px; height:19px; ">
  339. <script type="javascript" ev:event="onkeypress">
  340. <![CDATA[
  341. if (event.keycode == 13)
  342. {
  343. input6.value = input6.currentText;
  344. fSearch();
  345. }
  346. ]]>
  347. </script>
  348. </input>
  349. <input id="input8" ref="/root/send/search/startdd" class="input_search" navindex="10" inputtype="date" mask="include" style="left:800px; top:35px; width:90px; height:19px; ">
  350. <script type="javascript" ev:event="onkeypress">
  351. <![CDATA[
  352. if (event.keycode == 13)
  353. {
  354. input6.value = input6.currentText;
  355. fSearch();
  356. }
  357. ]]>
  358. </script>
  359. </input>
  360. <caption id="caption12" class="search_name" style="left:725px; top:35px; width:76px; height:17px; ">시작일</caption>
  361. <input id="input9" ref="/root/send/search/enddd" class="input_search" navindex="11" inputtype="date" mask="include" style="left:970px; top:35px; width:90px; height:19px; ">
  362. <script type="javascript" ev:event="onkeypress">
  363. <![CDATA[
  364. if (event.keycode == 13)
  365. {
  366. input6.value = input6.currentText;
  367. fSearch();
  368. }
  369. ]]>
  370. </script>
  371. </input>
  372. <caption id="caption13" class="search_name" style="left:895px; top:35px; width:76px; height:17px; ">종료일</caption>
  373. </group>
  374. <line id="line20" class="line_1" style="x1:0px; y1:96px; x2:1194px; y2:96px; "/>
  375. <caption id="caption8" class="tit_2" style="left:5px; top:81px; width:160px; height:13px; ">프로젝트 진척관리내역</caption>
  376. <group id="group2" style="left:820px; top:70px; width:375px; height:25px; ">
  377. <button id="button3" class="btn2_letter4" navindex="15" disable.background-image="../../../com/commonweb/images/dis_btn2_letter4.gif" style="left:310px; top:5px; width:64px; height:19px; background-image:../../../com/commonweb/images/btn2_letter4.gif; ">
  378. <caption>엑셀저장</caption>
  379. <script type="javascript" ev:event="DOMActivate">
  380. <![CDATA[
  381. var fileName = window.fileDialog("save", ",", false, "excel", "xls", "All Files (*.*)|*.*|Excel Files(*.xls)|*.xls");
  382. if (fileName != "")
  383. {
  384. grd_projlist.saveExcel(fileName);
  385. }
  386. ]]>
  387. </script>
  388. </button>
  389. </group>
  390. <datagrid id="grd_projlist" nodeset="/root/main/projlist/list/proj" autoresize="true" caption="seq^SubTeam^대분류^중분류^소분류^구분^화면ID^화면명^중요도^세부기능/오류^개발자ID^개발자^예정시작일^예정완료일^추가일^시작일^종료일^진행률^공정대상^비고^기능분해1^기능분해2^기능분해3^수정필요여부^최초입력자^입력일시^수정자^수정일시^사용여부^변경구분^적용기준일^sort|seq^SubTeam^대분류^중분류^소분류^구분^화면ID^화면명^중요도^세부기능/오류^개발자ID^개발자^예정시작일^예정완료일^추가일^시작일^종료일^진행률^공정대상^비고^기능분해1^기능분해2^기능분해3^수정필요여부^최초입력자^입력일시^수정자^수정일시^사용여부^변경구분^적용기준일^sort" colsep="^" colwidth="55, 60, 80, 80, 80, 50, 83, 100, 30, 180, 55, 45, 67, 67, 67, 67, 67, 45, 30, 100, 100, 100, 100, 100, 70, 67, 70, 67, 40, 50, 100, 65" dataheight="23" defaultrows="0" explorerbar="sortshow" extendlastcol="scroll" mergecellsfixedrows="bycolrec" rowheader="seq" rowheight="23" rowsep="|" tooltip="true" style="left:0px; top:100px; width:1194px; height:610px; ">
  391. <col ref="prcscd"/>
  392. <col ref="subteam"/>
  393. <col ref="lrg"/>
  394. <col ref="mdl"/>
  395. <col ref="sml"/>
  396. <col ref="srfeflag"/>
  397. <col ref="scrnid"/>
  398. <col ref="scrnname"/>
  399. <col ref="insuimp"/>
  400. <col ref="detailfe"/>
  401. <col ref="dev"/>
  402. <col ref="usernm"/>
  403. <col ref="schestartdd"/>
  404. <col ref="schedd"/>
  405. <col ref="acptdd"/>
  406. <col ref="startdd" type="input" format="yyyy-mm-dd" mask="include"/>
  407. <col ref="enddd" type="input" format="yyyy-mm-dd" mask="include"/>
  408. <col ref="prcsrate" type="input" format="###%"/>
  409. <col ref="prcsyn"/>
  410. <col ref="remark" type="input"/>
  411. <col ref="funt1"/>
  412. <col ref="funt2"/>
  413. <col ref="funt3"/>
  414. <col ref="updtneedyn"/>
  415. <col ref="fstrgstrid"/>
  416. <col ref="fstrgstdt" format="yyyy-mm-dd"/>
  417. <col ref="lastupdtrid"/>
  418. <col ref="lastupdtdt" format="yyyy-mm-dd"/>
  419. <col ref="useyn"/>
  420. <col ref="adchflag"/>
  421. <col ref="appdd"/>
  422. <col ref="sort"/>
  423. <script type="javascript" ev:event="xforms-value-changed">
  424. <![CDATA[
  425. var cur_row = grd_projlist.row;
  426. var cur_col = grd_projlist.col;
  427. var col_name = grd_projlist.textmatrix(1,cur_col);
  428. if(col_name == "진행률") // 진행률일 경우
  429. {
  430. if(parseInt(grd_projlist.textmatrix(cur_row, cur_col)) < parseInt(prcsrate))
  431. {
  432. alert("현재 공정율 보다 작은 값을 입력하셨습니다.");
  433. grd_projlist.editCell();
  434. }
  435. }
  436. if(col_name == "종료일") // 추가일
  437. {
  438. nday = new Date() // 오늘의 날짜와 시간을 구함
  439. t_year = nday.getYear();
  440. t_mon = nday.getMonth()+1; // 0부터 시작해서 1월이다.
  441. t_day = nday.getDate();
  442. // 날짜 포맷 맞추기
  443. if(t_mon < 10)
  444. t_mon = "0" + t_mon;
  445. if(t_day < 10)
  446. t_day = "0" + t_day;
  447. if(grd_projlist.textmatrix(cur_row, cur_col) > t_year + "-" + t_mon + "-" + t_day)
  448. {
  449. alert("종료일은 현재날짜 보다 클 수 없습니다.");
  450. grd_projlist.textmatrix(cur_row, cur_col) = "";
  451. grd_projlist.editCell();
  452. }
  453. }
  454. ]]>
  455. </script>
  456. <script type="javascript" ev:event="onentercell">
  457. <![CDATA[
  458. var cur_row = grd_projlist.row;
  459. var cur_col = grd_projlist.col;
  460. var col_name = grd_projlist.textmatrix(1,cur_col);
  461. if(col_name == "진행률") // 진행률일 경우
  462. {
  463. prcsrate = model.getValue("/root/main/projlist/list/proj["+(cur_row-1)+"]/prcsrate");
  464. }
  465. ]]>
  466. </script>
  467. <script type="javascript" ev:event="onaftersort">
  468. <![CDATA[
  469. grd_projlist.gridToInstance();
  470. ]]>
  471. </script>
  472. <!-- 일괄 처리-->
  473. <script type="javascript" ev:event="onmousedown">
  474. <![CDATA[
  475. setPopupMenu("grd_projlist", false, "/root/popup/grd_projlist/item", "name", "func");
  476. ]]>
  477. </script>
  478. <script type="javascript" ev:event="DOMFocusOut">
  479. <![CDATA[
  480. initPopupMenu();
  481. ]]>
  482. </script>
  483. </datagrid>
  484. </group>
  485. <group id="group3" style="left:0px; top:13px; width:1190px; height:27px; ">
  486. <button id="button2" class="btn4_letter2" navindex="13" disable.background-image="../../../com/commonweb/images/dis_btn4_letter2.gif" style="left:1060px; top:2px; width:56px; height:22px; background-image:../../../com/commonweb/images/btn4_letter2.gif; ">
  487. <caption>저장</caption>
  488. <script type="javascript" ev:event="DOMActivate">
  489. <![CDATA[
  490. if(messageBox("", "Q002")==6){
  491. if(!checkGridUpdate(grd_projlist))
  492. {
  493. alert("저장할 자료가 존재하지 않습니다.");
  494. return;
  495. }
  496. if(checkGridField(grd_projlist,"subteam")==false)
  497. {
  498. alert("데이터중에 비어있는 필수필드가 있습니다.");
  499. return;
  500. }
  501. model.setValue("/root/send/projlist",grd_projlist.getUpdateData());
  502. if ( submit("TXZTP00101") ) {
  503. grd_projlist.clearStatus(); // submit() 성공하면 그리드의 i,u,d 상태 제거
  504. fSearch();
  505. //changeNodeSet();
  506. }
  507. }
  508. ]]>
  509. </script>
  510. </button>
  511. <button id="button7" class="btn4_letter3" navindex="14" style="left:1120px; top:2px; width:68px; height:22px; ">
  512. <caption>초기화</caption>
  513. <script type="javascript" ev:event="DOMActivate">
  514. <![CDATA[
  515. model.removeNodeset("/root/main/projlist/list/proj");
  516. model.resetInstanceNode("/root/send");
  517. //model.resetInstanceNode("/root/main/item");
  518. model.refresh();
  519. combo1.select(0);
  520. combo2.select(0);
  521. ]]>
  522. </script>
  523. </button>
  524. <line id="line1" class="line_6" style="x1:0px; y1:25px; x2:1189px; y2:25px; "/>
  525. </group>
  526. </xhtml:body>
  527. </xhtml:html>