SPMMO10600.js 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635
  1. /*
  2. - ▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩
  3. 달력 ( SPMMO10600_달력.xrw - JScript )
  4. - ▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩
  5. */
  6. var sOPENER_COND = ""; // opener의 parameter string(sgnl:단일, multi:멀티)
  7. var sDEFAULT_DAY = ""; // 기본일자(기본일 이전의 날짜는 선택불가함)
  8. var sRTN_PARAM = ""; // return될 날짜 string
  9. var sREQ_PARAM = ""; // request된 날짜 string
  10. var sLIMIT_DAY = ""; // 제한일자 string
  11. /**
  12. * @desc : 화면 초기화
  13. * @
  14. * @param :
  15. * @return :
  16. * @author : 오지훈
  17. * @---------------------------------------------------
  18. */
  19. function fInitialize(){
  20. model.removeNodeset("/root/main/choidd/choidd");
  21. if(checkOpener()){
  22. sOPENER_COND = opener.javascript.getParameter("paramcalflag");
  23. sDEFAULT_DAY = opener.javascript.getParameter("defaultday");
  24. sLIMIT_DAY = opener.javascript.getParameter("limitday");
  25. sREQ_PARAM = opener.javascript.getParameter("reqparam");
  26. sPRCPDAYNO = opener.javascript.getParameter("prcpdayno");
  27. sLIMIT_FROM_DAY = opener.javascript.getParameter("limitfromday");
  28. opener.javascript.clearParameter("paramcalflag");
  29. opener.javascript.clearParameter("defaultday");
  30. opener.javascript.clearParameter("limitday");
  31. opener.javascript.clearParameter("reqparam");
  32. opener.javascript.clearParameter("prcpdayno");
  33. opener.javascript.clearParameter("limitfromday");
  34. }else{
  35. messageBox("메인 화면을 찾는데", "E009");
  36. window.close();
  37. }
  38. if(sDEFAULT_DAY != ""){ //기본일자가 넘겨온 경우, 최초일자를 설정한다.
  39. model.setValue("/root/init/today", fGetInitDay());
  40. }else{
  41. model.setValue("/root/init/today", getCurrentDate()); //기본일자가 안 넘겨져 온 경우, 최초 일자를 오늘로 설정
  42. sDEFAULT_DAY = "10000000"; //이전일자를 선택하지 않게 한다.
  43. }
  44. if(sLIMIT_DAY == ""){ //제한일자가 안 넘어온 경우, 최대일자를 설정한다.
  45. sLIMIT_DAY = "99991231";
  46. }
  47. if(sLIMIT_FROM_DAY == ""){
  48. sLIMIT_FROM_DAY = "19990101";
  49. }
  50. var dd = model.getValue("/root/init/today");
  51. var sYear = dd.substr(0, 4);
  52. var sMonth = dd.substr(4, 2);
  53. model.setValue("/root/main/cond/year", sYear);
  54. model.setValue("/root/main/cond/month", sMonth);
  55. model.refresh();
  56. fReqCalendar();
  57. //처방일수를 파라미터로 넘기고, 기본일자가 하루로 들어간 경우에는 휴일포함으로 달력에 표시
  58. if(sPRCPDAYNO != "" && sDEFAULT_DAY.length < 10){
  59. model.setValue("/root/main/day/daycnt", sPRCPDAYNO);
  60. btn_app.dispatch("DOMActivate");
  61. model.refresh();
  62. //기본일자만 넘어온 경우에는 기본일자를 기준으로 달력에 표시
  63. }else{
  64. sRTN_PARAM = sREQ_PARAM;
  65. fSetSelectedDay();
  66. }
  67. /*
  68. if(sDEFAULT_DAY != ""){
  69. sRTN_PARAM = sREQ_PARAM;
  70. fSetSelectedDay();
  71. }*/
  72. }
  73. /**
  74. * @desc : 달력조회
  75. * @
  76. * @param :
  77. * @return :
  78. * @author : 오지훈
  79. * @---------------------------------------------------
  80. */
  81. function fReqCalendar(){
  82. fInitCalendar(); //caption화면을 초기화 한다.
  83. var sYear = model.getValue("/root/main/cond/year");
  84. var sMonth = model.getValue("/root/main/cond/month");
  85. model.makeValue("/root/send/reqdata/basedd", sYear.concat(sMonth));
  86. if(submit("TRMMO10601")){
  87. fSetCalendar();
  88. }
  89. model.refresh();
  90. }
  91. /**
  92. * @desc : 달력초기화
  93. * @
  94. * @param :
  95. * @return :
  96. * @author : 오지훈
  97. * @---------------------------------------------------
  98. */
  99. function fInitCalendar(procflag){
  100. for(var iRow = 1; iRow < 7; iRow++){
  101. for(var iCol = 1; iCol < 8; iCol++){
  102. var capObj = document.controls("caption"+ iRow + "" + iCol);
  103. capObj.attribute("text")="";
  104. capObj.attribute("background-color") = "transparent";
  105. }
  106. }
  107. model.refresh();
  108. }
  109. /**
  110. * @desc : 달력날짜 및 휴일 색깔 설정
  111. * @
  112. * @param :
  113. * @return :
  114. * @author : 오지훈
  115. * @---------------------------------------------------
  116. */
  117. function fSetCalendar(){
  118. fInitCalendar();
  119. var iTotRow = getNodeSetCnt("/root/main/calendar/calendar");
  120. var sDay = "";
  121. for(var iRow = 1; iRow <= iTotRow ; iRow++){
  122. var sBasedd = model.getValue("/root/main/calendar/calendar[" + iRow + "]/basedd");
  123. if(sBasedd.substr(6,1) >0){
  124. sDay = sBasedd.substr(6,2);
  125. }else{
  126. sDay = sBasedd.substr(7,1);
  127. }
  128. var row = model.getValue("/root/main/calendar/calendar[" + iRow + "]/weekday"); //row(주차)
  129. var col = model.getValue("/root/main/calendar/calendar[" + iRow + "]/days"); //col(요일)
  130. var dutflag = model.getValue("/root/main/calendar/calendar[" + iRow + "]/dutflag"); //휴일구분
  131. var capObj = document.controls("caption" + row + col);
  132. capObj.attribute("text") = sDay;
  133. if(dutflag == 4){ //토요일인 경우, 파란색 설정
  134. capObj.attribute("color") = "#0000ff";
  135. }else if(dutflag == 8){//일요일인 경우, 빨간색 설정
  136. capObj.attribute("color") = "#ff0000";
  137. }else{ //그 이외는 검정색
  138. capObj.attribute("color") = "#000000";
  139. }
  140. }
  141. }
  142. /**
  143. * @desc : 이전 달버튼 클릭시 - 월 변경 및 달력 조회처리
  144. * @
  145. * @param :
  146. * @return :
  147. * @author : 오지훈
  148. * @---------------------------------------------------
  149. */
  150. function fClkBfMonth(){
  151. var sMonth = model.getValue("/root/main/cond/month");
  152. var sYear = model.getValue("/root/main/cond/year");
  153. var iBfmonth;
  154. if(sMonth.substr(0,1) == "0"){ //10월 이전인 경우, 앞자리 0을 제거
  155. iBfmonth = sMonth.substr(1,1);
  156. }else{ //10월 이후인 경우
  157. iBfmonth = eval(sMonth);
  158. }
  159. iBfmonth--;
  160. if(iBfmonth < 1){ // 1월 이전을 선택한 경우, 년도를 바꿈
  161. sMonth = 12;
  162. sYear--;
  163. }else if(iBfmonth < 10){ // 10월 이전을 선택한 경우, 월 앞에 0을 붙인다.
  164. sMonth = "0".concat(iBfmonth);
  165. }else{
  166. sMonth = iBfmonth;
  167. }
  168. model.setValue("/root/main/cond/year", sYear);
  169. model.setValue("/root/main/cond/month", sMonth);
  170. model.refresh();
  171. fReqCalendar();
  172. fSetSelectedDay();
  173. }
  174. /**
  175. * @desc : 다음 달버튼 클릭시 - 월 변경 및 달력 조회처리
  176. * @
  177. * @param :
  178. * @return :
  179. * @author : 오지훈
  180. * @---------------------------------------------------
  181. */
  182. function fClkAfMonth(){
  183. var mmonth = model.getValue("/root/main/cond/month");
  184. var yyear = model.getValue("/root/main/cond/year");
  185. var bfmonth;
  186. if(mmonth.substr(0,1) == "0"){ //10월 이전인 경우, 앞자리 0을 제거
  187. bfmonth = mmonth.substr(1,1);
  188. bfmonth++;
  189. }else{ //10월 이후인 경우
  190. bfmonth = mmonth;
  191. bfmonth++;
  192. }
  193. if(bfmonth > 12){ // 1월 이전을 선택한 경우, 년도를 바꿈
  194. bfmonth = "01";
  195. yyear++;
  196. }else if(bfmonth < 10){ //10월 이후인 경우에는 앞자리에 0을 붙임.
  197. bfmonth = "0".concat(bfmonth);
  198. }
  199. model.setValue("/root/main/cond/year", yyear);
  200. model.setValue("/root/main/cond/month", bfmonth);
  201. model.refresh();
  202. fReqCalendar();
  203. fSetSelectedDay();
  204. }
  205. /**
  206. * @desc : 이전 년버튼 클릭시 - 월 변경 및 달력 조회처리
  207. * @
  208. * @param :
  209. * @return :
  210. * @author : 오지훈 2007. 4. 25
  211. * @---------------------------------------------------
  212. */
  213. function fClkBfYear(){
  214. var sYear = model.getValue("/root/main/cond/year");
  215. sYear--;
  216. model.setValue("/root/main/cond/year", sYear);
  217. model.refresh();
  218. fReqCalendar();
  219. fSetSelectedDay();
  220. }
  221. /**
  222. * @desc : 다음 년버튼 클릭시 - 월 변경 및 달력 조회처리
  223. * @
  224. * @param :
  225. * @return :
  226. * @author : 오지훈 2007. 4. 25
  227. * @---------------------------------------------------
  228. */
  229. function fClkAfYear(){
  230. var yyear = model.getValue("/root/main/cond/year");
  231. yyear++;
  232. model.setValue("/root/main/cond/year", yyear);
  233. model.refresh();
  234. fReqCalendar();
  235. fSetSelectedDay();
  236. }
  237. /**
  238. * @desc : 달력 클릭시 해당 년월일 추출 및 제거(멀티용)
  239. * @
  240. * @param :
  241. * @return :
  242. * @author : 오지훈 2007. 4. 25
  243. * @---------------------------------------------------
  244. */
  245. function fClkMultiCalendar(){
  246. var sTmp = "";
  247. var sYear = model.getValue("/root/main/cond/year");
  248. var sMonth = model.getValue("/root/main/cond/month");
  249. var objCap = document.controls(event.target);
  250. var sDay = objCap.attribute("text");
  251. var sColor = objCap.attribute("background-color");
  252. if(sDay == ""){
  253. return;
  254. }
  255. if(sColor == "transparent"){
  256. objCap.attribute("background-color") = "#ece1ec";
  257. if(sDay.length == 1){
  258. sDay = "0".concat(sDay);
  259. }
  260. sDate = sYear + sMonth + sDay + "▩";
  261. sRTN_PARAM += sDate;
  262. }else{
  263. objCap.attribute("background-color") = "transparent";
  264. if(sDay.length == 1){
  265. sDay = "0".concat(sDay);
  266. }
  267. sDate = sYear + sMonth + sDay + "▩";
  268. sRTN_PARAM = sRTN_PARAM.setReplaceWord(sDate, "");
  269. }
  270. //alert(sRTN_PARAM);
  271. fAddGrdChoiDD(sRTN_PARAM);
  272. }
  273. /**
  274. * @desc : 기존에 셋팅한 날짜를 보여준다.
  275. * @
  276. * @param :
  277. * @return :
  278. * @author : 오지훈
  279. * @---------------------------------------------------
  280. */
  281. function fSetSelectedDay(){
  282. var sYear = "";
  283. var sMonth = "";
  284. var sDay = "";
  285. var objCap;
  286. var sCurYear = model.getValue("/root/main/cond/year");
  287. var sCurMonth = model.getValue("/root/main/cond/month");
  288. var sDays = sRTN_PARAM.split("▩");
  289. // 끝자리에 구분자""가 들어가 있는지 확인하구 split한다.
  290. // 날짜가 없는 배열 생성을 막기 위해
  291. if(sDays.length > 0){
  292. //alert(sRTN_PARAM.substr(sRTN_PARAM.length-1, 1));
  293. if(sRTN_PARAM.substr(sRTN_PARAM.length-1, 1) == "▩"){
  294. sRTN_PARAM = sRTN_PARAM.substr(0, sRTN_PARAM.length - 1);
  295. }
  296. }
  297. for(var i = 0; i < sDays.length ; i++){
  298. sYear = sDays[i].substr(0,4);
  299. sMonth = sDays[i].substr(4,2);
  300. sDay = sDays[i].substr(6,2);
  301. if(sDay.substr(0,1) == "0"){
  302. sDay = (sDay.substr(1,1)).getTrim();
  303. }
  304. if(sCurYear == sYear && sCurMonth == sMonth){
  305. for(var iRow = 1; iRow < 7; iRow++){
  306. for(var iCol = 1; iCol < 8; iCol++){
  307. objCap = document.controls("caption" + iRow + "" + iCol);
  308. //alert(objCap.attribute("text"));
  309. if(objCap.attribute("text") == sDay){
  310. objCap.attribute("background-color") = "#ece1ec";
  311. break;
  312. }
  313. }
  314. }
  315. }
  316. }
  317. if(sRTN_PARAM != ""){
  318. sRTN_PARAM = sRTN_PARAM + "▩";
  319. //alert(sRTN_PARAM);
  320. fAddGrdChoiDD(sRTN_PARAM);
  321. }
  322. }
  323. /**
  324. * @desc : 달력 클릭시 해당 년월일 추출 및 제거(싱글용)
  325. * @
  326. * @param :
  327. * @return :
  328. * @author : 오지훈
  329. * @---------------------------------------------------
  330. */
  331. function fClkSnglCalendar(){
  332. var sTmp = "";
  333. var sYear = model.getValue("/root/main/cond/year");
  334. var sMonth = model.getValue("/root/main/cond/month");
  335. var sDay = "";
  336. var objCap;
  337. objSelectCap = document.controls(event.target);
  338. sDay = objSelectCap.attribute("text");
  339. if(sDay == ""){
  340. return;
  341. }
  342. for(var iRow = 1; iRow < 7; iRow++){
  343. for(var iCol = 1; iCol < 8; iCol++){
  344. objCap = document.controls("caption" + iRow + iCol);
  345. objCap.attribute("background-color") = "#ffffff";
  346. }
  347. }
  348. objSelectCap.attribute("background-color") = "#ece1ec";
  349. if(sDay.length == 1){
  350. sDay = "0".concat(sDay);
  351. }
  352. sDate = sYear + sMonth + sDay + "▩";
  353. sRTN_PARAM = sDate;
  354. fAddGrdChoiDD(sRTN_PARAM);
  355. }
  356. /**
  357. * @desc : 이전날짜가 설정된 경우, 무결성 검사를 한다.
  358. * @
  359. * @param :
  360. * @return :
  361. * @author : 오지훈
  362. * @---------------------------------------------------
  363. */
  364. function fChkInvaild(){
  365. var sDate = "";
  366. var sYear = model.getValue("/root/main/cond/year");
  367. var sMonth = model.getValue("/root/main/cond/month");
  368. objSelectCap = document.controls(event.target);
  369. sDay = objSelectCap.attribute("text");
  370. if(sDay.length == 1){
  371. sDay = "0".concat(sDay);
  372. }
  373. sDate = sYear + sMonth + sDay;
  374. if(sDate < sDEFAULT_DAY){
  375. return false;
  376. }else if(sDate > sLIMIT_DAY){
  377. return false;
  378. }else if(sDate < sLIMIT_FROM_DAY){
  379. return false;
  380. }else{
  381. return true;
  382. }
  383. }
  384. /**
  385. * @desc : 확인버튼 클릭시, rtnParam을 opener에 설정함.
  386. * @
  387. * @param :
  388. * @return :
  389. * @author : 오지훈
  390. * @---------------------------------------------------
  391. */
  392. function fClkCnfm(){
  393. sRTN_PARAM = sRTN_PARAM.substr(0, sRTN_PARAM.length-1);
  394. if(checkOpener()){
  395. opener.javascript.setParameter("rtn" , sRTN_PARAM);
  396. }else{
  397. messageBox("메인 화면을 찾는데", "E009");
  398. }
  399. window.close();
  400. }
  401. /**
  402. * @desc : Request된 날짜 중에 최종일자를 default로 화면에 뿌려준다.
  403. * @
  404. * @param :
  405. * @return :
  406. * @author : 오지훈
  407. * @---------------------------------------------------
  408. */
  409. function fGetInitDay(){
  410. var sDays = sREQ_PARAM.split("▩");
  411. return sDays[0];
  412. }
  413. /**
  414. * @desc : 취소버튼 클릭시, rtnParam clean
  415. * @
  416. * @param :
  417. * @return :
  418. * @author : 오지훈
  419. * @---------------------------------------------------
  420. */
  421. function fClkCncl(){
  422. if(checkOpener()){
  423. opener.javascript.setParameter("rtn" , "");
  424. }else{
  425. messageBox("메인 화면을 찾는데", "E009");
  426. }
  427. window.close();
  428. }
  429. /**
  430. * @desc : 그리드에 선택일 출력
  431. * @
  432. * @param : sRTN_PARAM - 출력될 날짜 string
  433. * @return :
  434. * @author : 오지훈
  435. * @---------------------------------------------------
  436. */
  437. function fAddGrdChoiDD(param){
  438. model.removeNodeset("/root/main/choidd/choidd");
  439. model.refresh();
  440. if(param == "▩"){ //일자값이 없는 경우 return;
  441. return;
  442. }
  443. var sDD = param.split("▩");
  444. for(var i = 0; i < sDD.length-1; i++){
  445. if(sDD[i] != ""){
  446. grd_choilist.addRow(false);
  447. model.setValue("/root/main/choidd/choidd[" + grd_choilist.row + "]/dd", sDD[i]);
  448. }
  449. }
  450. grd_choilist.sort(1, 0, grd_choilist.rows - 1, 0) = "asc";
  451. grd_choilist.refresh();
  452. }
  453. /**
  454. * @desc : 간격, 일자로 데이터를 생성한다.
  455. * @
  456. * @param :
  457. * @return :
  458. * @author : 오지훈
  459. * @---------------------------------------------------
  460. */
  461. function fCalcIntervalDay(){
  462. model.removeNodeset("/root/main/choidd/choidd");
  463. model.refresh();
  464. var holiflag = model.getValue("/root/main/day/holiflag"); //휴일구분
  465. var rtnday = "";
  466. var startdd = model.getValue("/root/init/today");
  467. var daycnt = model.getValue("/root/main/day/daycnt");
  468. var interval= model.getValue("/root/main/day/interval");
  469. var inc = 0;
  470. inc = eval(interval);
  471. if(holiflag == "Y"){ //휴일포함 한 경우
  472. rtnday = startdd + "▩";
  473. for(var i = 1; i < daycnt; i++){
  474. var dd = (startdd.toDate()).getAddDate(inc).getDateFormat();
  475. rtnday += dd + "▩";
  476. inc += eval(interval);
  477. }
  478. }else if(holiflag == "N"){ //휴일포함 하지 않는 경우
  479. rtnday = startdd + "▩";
  480. var bfmonth = (startdd.toDate()).getMonth();
  481. var dd = startdd;
  482. for(var i = 1; i < daycnt; i++){
  483. dd = (dd.toDate()).getAddDate(inc).getDateFormat();
  484. curmonth = (dd.toDate()).getMonth();
  485. if(curmonth != bfmonth){ //달이 변경된 경우
  486. btn_afmonth.dispatch("DOMActivate"); //달이 증가되어 해가 변경되는 경우도 처리한다.
  487. bfmonth = curmonth;
  488. }
  489. var holidd = model.getValue("/root/main/calendar/calendar[dutflag='8' and basedd='" + dd + "']/basedd");
  490. //var holidd = model.getValue("/root/main/calendar/calendar[basedd='" + dd + "']/basedd");
  491. if(holidd.length > 0){
  492. //함수로 처리하면, 다음 휴일이 아닌 일자를 찾는 중 달이나 해가 변경된 경우에는 문제발생
  493. //휴일인 경우, 휴일이 아닌 다음일자를 찾는다.
  494. while(true){
  495. dd = (dd.toDate()).getAddDate(1).getDateFormat();
  496. curmonth = (dd.toDate()).getMonth();
  497. if(curmonth != bfmonth){
  498. btn_afmonth.dispatch("DOMActivate"); //달이 증가되어 해가 변경되는 경우도 처리한다.
  499. bfmonth = curmonth
  500. }
  501. var selctdd = model.getValue("/root/main/calendar/calendar[dutflag!='8' and basedd='" + dd + "']/basedd");
  502. if(selctdd.length != 0){
  503. break;
  504. }
  505. }
  506. dd = selctdd;
  507. //dd = fFndNextDay(curmonth, dd); //휴일인 다음일자를 찾는다.
  508. }
  509. rtnday += dd + "▩";
  510. }
  511. }
  512. fAddGrdChoiDD(rtnday);
  513. sRTN_PARAM = rtnday;
  514. fSetSelectedDay();
  515. }
  516. /**
  517. * 해당일자가 휴일인 경우, 휴일이 아닌 다음일자를 찾아 return함.
  518. *
  519. * param : curmonth 현재월
  520. * : curdd 현재일
  521. * return: selctdd 선택일
  522. */
  523. function fFndNextDay(curmonth, curdd){
  524. while(true){
  525. curdd = (curdd.toDate()).getAddDate(1).getDateFormat();
  526. month = (curdd.toDate()).getMonth();
  527. //alert(curmonth + "," + month + "," + curdd);
  528. if(curmonth != month){
  529. btn_afmonth.dispatch("DOMActivate"); //달이 증가되어 해가 변경되는 경우도 처리한다.
  530. curmonth = month;
  531. }
  532. var selctdd = model.getValue("/root/main/calendar/calendar[dutflag!='8' and basedd='" + curdd + "']/basedd");
  533. if(selctdd.length != 0){
  534. break;
  535. }
  536. }
  537. //alert(selctdd);
  538. return selctdd;
  539. }