MMRBind.xjs 73 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <Script type="xscript4.0"><![CDATA[/***************************************************************************************
  3. * System Name : DBS
  4. * Job Name :
  5. * File Name : MMRBind.xjs
  6. * Creator :
  7. * Make Date : 2015.02.02
  8. *
  9. * Description :
  10. *---------------------------------------------------------------------------------------
  11. * Modify Date Modifier Modify Description
  12. *---------------------------------------------------------------------------------------
  13. *
  14. *
  15. *---------------------------------------------------------------------------------------
  16. */
  17. var strConcat = new String("");
  18. /**********************************************************************************
  19. * Method Name : lf_calculateInit
  20. * Description : 서식로드시 산술식, Readonly 기능 초기화
  21. * argument :
  22. * return Type :
  23. * Creator :
  24. **********************************************************************************/
  25. function lf_calculateInit()
  26. {
  27. utlf_addLog("***** lf_calculateInit() *****");
  28. if(isValidObject("ds_bind") && ds_bind.getRowCount() > 0)
  29. {
  30. var vRow;
  31. var vCompID;
  32. var vReadonly;
  33. var vCalculate;
  34. var vResult;
  35. var vSSUs;
  36. var vSSUdiv;
  37. var vDs = this.objects["ds_data_itemvalue"];
  38. dsf_createDs("ds_tempItemValue");
  39. ds_tempItemValue.copyData(ds_data_itemvalue);
  40. //산술식 계산 전(ds_bind에 선언된 componentid 중 RDO가 들어가는 것에 대해서만 처리) RDO초기값 세팅
  41. //lf_initRdoVal("ds_bind");
  42. if(fGetFormRec("status") == "C")
  43. {
  44. //Step 0. 산술식 계산 준비
  45. for(i=0; i<ds_bind.getRowCount(); i++)
  46. {
  47. if(!utlf_isNull(ds_bind.getColumn(i, "calculate")))
  48. {
  49. var vResultTemp = "";
  50. vCompID = ds_bind.getColumn(i, "componentid");
  51. var vCalculateDs = ds_bind.getColumn(i, "calculate");
  52. if(vCalculateDs.indexOf("concat") > -1 && vCalculateDs.indexOf("strConcat.concat") == -1)
  53. {
  54. vCalculateDs = vCalculateDs.replace("concat", "strConcat.concat");
  55. ds_bind.setColumn(i, "calculate", vCalculateDs);
  56. }
  57. // ceiling 처리
  58. if(vCalculateDs.indexOf("ceiling") > -1 && vCalculateDs.indexOf("Math.ceil") == -1)
  59. {
  60. vCalculateDs = vCalculateDs.replace("ceiling", "Math.ceil");
  61. ds_bind.setColumn(i, "calculate", vCalculateDs);
  62. }
  63. // floor 처리
  64. if(vCalculateDs.indexOf("floor") > -1 && vCalculateDs.indexOf("Math.floor") == -1)
  65. {
  66. vCalculateDs = vCalculateDs.replace("floor", "Math.floor");
  67. ds_bind.setColumn(i, "calculate", vCalculateDs);
  68. }
  69. // round 처리
  70. if(vCalculateDs.indexOf("round") > -1 && vCalculateDs.indexOf("Math.round") == -1)
  71. {
  72. vCalculateDs = vCalculateDs.replace("round", "Math.round");
  73. ds_bind.setColumn(i, "calculate", vCalculateDs);
  74. }
  75. // power 처리
  76. if(vCalculateDs.indexOf("power") > -1 && vCalculateDs.indexOf("Math.pow") == -1)
  77. {
  78. vCalculateDs = vCalculateDs.replace("power", "Math.pow");
  79. ds_bind.setColumn(i, "calculate", vCalculateDs);
  80. }
  81. var vChangeEquls = lf_getChangeEquls(i);
  82. try
  83. {
  84. //Step 1. 산술식 계산
  85. vCalculate = fn_nvl(vChangeEquls);
  86. vResult = eval(vCalculate);
  87. //Step 2. 계산값 적용함수
  88. //sysf_trace(vCompID + " : 1. vCompID -> " + vResult);
  89. vResultTemp = lf_setCalResult(vCompID, vResult, vCalculateDs);
  90. //sysf_trace(vCompID + " : 1. vCompID ******************************* lf_setCalResult-> " + vResultTemp);
  91. var vFcompIDcompare = ds_bind.getColumn(i, "calculate");
  92. if(vFcompIDcompare.indexOf("CAL_") > -1)
  93. {
  94. var calCheck = lf_calCal(vFcompIDcompare);
  95. if(!utlf_isNull(calCheck) && calCheck != "noCal")
  96. {
  97. vResultTemp = calCheck;
  98. }
  99. else if(!utlf_isNull(calCheck) && calCheck == "noCal")
  100. {
  101. }
  102. else
  103. {
  104. vResultTemp = null;
  105. }
  106. }
  107. if(vResultTemp == 0 && !(vCalculateDs.indexOf("-") >-1) && !(vCalculateDs.indexOf("+") >-1) && !(vCalculateDs.indexOf("/") >-1) && !(vCalculateDs.indexOf("*") > -1))
  108. {
  109. //vResultTemp = "";
  110. }
  111. if((vResultTemp.toString().indexOf("nonevalue") > -1 || vResultTemp.toString().indexOf("undefined") > -1) &&
  112. vFcompIDcompare.indexOf("concat") > -1)
  113. {
  114. vResultTemp = vResultTemp.replace("nonevalue" ,"");
  115. vResultTemp = vResultTemp.replace("undefined" ,"");
  116. }
  117. //삼항연산자 ''에 대한 처리
  118. if(vCompID.indexOf("RDO_") > -1 && vCalculateDs.indexOf("?") == -1 && vResult == 0)
  119. {
  120. vResultTemp="";
  121. this.components[vCompID].ufn_initComp();
  122. }
  123. else
  124. {
  125. //삼항연산자 && RDO가 아닌경우
  126. }
  127. ds_tempItemValue.setColumn(0,vCompID,vResultTemp);
  128. strConcat = "";
  129. }
  130. catch(e)
  131. {
  132. sysf_trace("산술식 오류 : " + e + ", vCompID : " + vCompID);
  133. sysf_catchTrace(e);
  134. }
  135. }
  136. }
  137. //ds_tempItemValue 세팅 끝
  138. //value 값 세팅
  139. for(var j=0; j < ds_tempItemValue.getColCount(); j++)
  140. {
  141. var vColNm = ds_tempItemValue.getColID(j);
  142. var vDsVal = ds_tempItemValue.getColumn(0, vColNm);
  143. //bol, rdo(composite), stx만 고려
  144. if(vColNm.indexOf("BOL") !=-1 && vColNm.indexOf("EXTN") == -1)
  145. {
  146. this.components[vColNm].value = vDsVal;
  147. }
  148. else if(vColNm.indexOf("RDO") !=-1 && !utlf_isNull(vDsVal) && vColNm.indexOf("EXTN") == -1)
  149. {
  150. this.components[vColNm].setData(vDsVal);
  151. }
  152. }
  153. //임시 데이터셋 복사
  154. ds_data_itemvalue.assign(ds_tempItemValue);
  155. ds_data_itemvalue.enableevent = false;
  156. for(h = 0; h < ds_data_itemvalue.colcount; h++)
  157. {
  158. var ColId = ds_data_itemvalue.getColID(h);
  159. if(!utlf_isNull(ColId))
  160. {
  161. lf_setRecDS(ColId); // MMRCommon
  162. if(ColId.indexOf("RDO_") != -1)
  163. {
  164. try
  165. {
  166. var grupcd = eval(ColId).grupcd;
  167. if(!utlf_isNull(grupcd))
  168. {
  169. var dsNm = "ds_data_V_"+ grupcd;
  170. var ColNo = ColId.replace("RDO_", "");
  171. var sVal = ds_data_itemvalue.getColumn(0, ColId);
  172. var sLabel = eval(dsNm).lookup("termbasecd", sVal, "valitemnm");
  173. var nRow = ds_data_recitem.findRowExpr("degnitemno == '"+ ColNo +"' && degnitemkind == 'RDO'");
  174. ds_data_recitem.setColumn(nRow, "rectermnm", sLabel);
  175. }
  176. }
  177. catch(e)
  178. {
  179. sysf_trace("산술식 오류 : " + e + ", ColId : " + ColId);
  180. sysf_catchTrace(e);
  181. }
  182. }
  183. }
  184. }
  185. ds_data_itemvalue.enableevent = true;
  186. }
  187. /*****************************************************************************************************/
  188. /* 산술식 연산 끝
  189. /* Readonly는 ds_data_itemvalue value를 통해 작동하기 때문에 산술식을 통해 ds_data_itemvalue값을 채우고
  190. /* 그후 Readonly기능에 대한 반복실행하여 구현
  191. /*****************************************************************************************************/
  192. for(k=0; k<ds_bind.getRowCount(); k++)
  193. {
  194. if(!utlf_isNull(ds_bind.getColumn(k, "readonly")))
  195. {
  196. vCompID = ds_bind.getColumn(k, "componentid");
  197. vChangeEquls = ds_bind.getColumn(k, "readonly");
  198. //var vChangeEquls = ds_bind.getColumn(i, "calculate");
  199. vSSUs = "";
  200. vSSUdiv ="";
  201. if(vChangeEquls.indexOf("')='") > 0)
  202. {
  203. vChangeEquls = vChangeEquls.replace("')='", "')=='");
  204. }
  205. vReadonly = fn_nvl(vChangeEquls);
  206. try
  207. {
  208. //Step 0. Readonly 연산
  209. vResult = eval(vReadonly);
  210. //sysf_trace("Readonly 초기화 결과 : " + vCompID + " / " + vResult);
  211. //Step 1. 연산결과 값 적용준비
  212. if(vCompID.indexOf("SL") > -1)
  213. {//SSL, MSL류
  214. vSSUs = ds_bind.getColumn(k, "supitem");
  215. vSSUdiv = vSSUs.split(",");
  216. }
  217. //composite는 readonly기능이 없으므로, enable을 사용하여 처리한다.
  218. var vChkComp = new String(this.components[vCompID])
  219. //Step 2. 연산 결과 적용
  220. lf_applyReadOnly(vCompID, vChangeEquls, vResult, vChkComp, vSSUdiv);
  221. //Step 3. 확장 컨트롤 처리
  222. if(!utlf_isNull(this.components[vCompID]))
  223. {
  224. lf_changeEnable(this.components[vCompID]);
  225. }
  226. }
  227. catch(e)
  228. {
  229. sysf_trace("산술식 오류 : " + e + ", vCompID : " + vCompID);
  230. sysf_catchTrace(e);
  231. }
  232. }
  233. }
  234. }
  235. }
  236. /**********************************************************************************
  237. * Method Name : lf_sslEnable
  238. * Description : SSL의 SSU에 대한 enable true, false value를 부여
  239. * argument : vSSUdiv - SSU들의 집합(array), value - true or false
  240. * return Type :
  241. * Creator :
  242. **********************************************************************************/
  243. function lf_sslEnable(vSSUdiv, value)
  244. {
  245. utlf_addLog("***** lf_sslEnable("+vSSUdiv+", "+value+") *****");
  246. for(var i=0; i<vSSUdiv.length; i++)
  247. {
  248. //산술식내의 해당 components가 없는 경우가 존재함
  249. if(!utlf_isNull(this.components[vSSUdiv[i]]))
  250. {
  251. this.components[vSSUdiv[i]]["enable"] = value;
  252. if(value == false)
  253. {
  254. this.components[vSSUdiv[i]].value = "";
  255. }
  256. }
  257. else
  258. {
  259. }
  260. }
  261. }
  262. /**********************************************************************************
  263. * Method Name : lf_extnEnable
  264. * Description : extn 처리 함수, SSL만 대상
  265. * argument : vCol, vDs
  266. * return Type :
  267. * Creator :
  268. **********************************************************************************/
  269. function lf_extnEnable(vCol, vDs)
  270. {
  271. utlf_addLog("***** lf_extnEnable("+vCol+", "+vDs+") *****");
  272. //"SL"이 들어가는 component에 대한 extn 활성화 여부함수
  273. var vSup;
  274. var vOrgCol = vCol;
  275. var vValue = "";
  276. var vSupTemp = "";
  277. var vCompID = "";
  278. if(vCol.indexOf("SL") > -1)
  279. {
  280. //vCol가 SSL, MSL인 경우
  281. vValue = vDs.getColumn(0, vCol);
  282. vCompID = vCol;
  283. }
  284. else
  285. {
  286. for(var i=0; i < vDs.getRowCount(); i++)
  287. {
  288. vCompID = vDs.getColID(i);
  289. if(vCompID == vCol)
  290. {
  291. vCompID = vCol;
  292. break;
  293. }
  294. else
  295. {
  296. vCompID = "";
  297. }
  298. }
  299. }
  300. if(utlf_isNull(vCompID))
  301. {
  302. vValue = lf_getSLValue(vCompID, vCol, vDs);
  303. }
  304. if(!utlf_isNull(vValue))
  305. {
  306. lf_setExtnEnable(vCol, vValue);
  307. }
  308. }
  309. /**********************************************************************************
  310. * Method Name : lf_getSLValue
  311. * Description : SSL의 value를 구하는 함수(lf_extnEnable의 서브함수)
  312. * argument : vCompID, vCol, vDs
  313. * return Type : vValue(string)
  314. * Creator :
  315. **********************************************************************************/
  316. function lf_getSLValue(vCompID, vCol, vDs)
  317. {
  318. utlf_addLog("***** lf_getSLValue("+vCompID+", "+vCol+", "+vDs+") *****");
  319. var vChekName="";
  320. var vSupTempset="";
  321. vSupTemp = this.components[vCol]["supdegnitemno"];
  322. vChekName = new String(this.components[vCol]);
  323. if(vChekName.indexOf("Radio") > -1)
  324. {
  325. vSupTempset = "SSL_" + vSupTemp;
  326. }
  327. else
  328. {
  329. vSupTempset = "MSL";
  330. }
  331. if(vSupTempset.indexOf("undefined")== -1 && !utlf_isNull(vSupTempset))
  332. {
  333. if(vSupTempset == "MSL")
  334. {//MSL일 경우 사용안하는 것으로 적용
  335. vValue = "";
  336. }
  337. else
  338. {
  339. vValue = vDs.getColumn(0, vSupTempset);
  340. }
  341. }
  342. else
  343. {
  344. vValue = "";
  345. }
  346. return vValue;
  347. }
  348. /**********************************************************************************
  349. * Method Name : lf_setExtnEnable
  350. * Description : SSL 확장컨트롤에 대한 enable처리를 하는 함수(lf_extnEnable의 서브함수)
  351. * argument : vCol, vValue
  352. * return Type : N/A
  353. * Creator :
  354. **********************************************************************************/
  355. function lf_setExtnEnable(vCol, vValue)
  356. {
  357. utlf_addLog("***** lf_setExtnEnable("+vCol+", "+vValue+") *****");
  358. var vDsValue;
  359. var vExtnStx;
  360. var vNo;
  361. var vBool =false;
  362. var extnEnable;
  363. var vSup = this.components[vCol]["supdegnitemno"];
  364. for(var j=0; j < this.components.length; j++)
  365. {
  366. if(!utlf_isNull(vSup) && !utlf_isNull(this.components[j]["supdegnitemno"]) && this.components[j]["supdegnitemno"] == vSup)
  367. {
  368. var vSSU =this.components[j].name;
  369. vNo = vSSU.split("_"); //vNo[1];
  370. //ssu dataset
  371. var vDsSSU = new String("ds_"+vSSU);
  372. if(!utlf_isNull(this.objects[vDsSSU]))
  373. {
  374. vDsValue = this.objects[vDsSSU].getColumn(0, "termbasecd");
  375. }
  376. //extn stx
  377. var vSTX = new String("STX_"+vNo[1]);
  378. if(!utlf_isNull(this.components[vSTX]) && !utlf_isNull(this.components[vSTX]["ctrltype"])
  379. && this.components[vSTX]["ctrltype"] == "extn")
  380. {
  381. vExtnStx = this.components[vSTX];
  382. }
  383. if(!utlf_isNull(vDsValue) && !utlf_isNull(vExtnStx))
  384. {
  385. if(vDsValue == vValue)
  386. {
  387. extnEnable = vExtnStx;
  388. vBool = true;
  389. }
  390. else
  391. {
  392. vExtnStx["enable"] = false;
  393. vExtnStx.value ="";
  394. }
  395. }
  396. }
  397. }
  398. if(vBool == true)
  399. {
  400. extnEnable["enable"] = true;
  401. }
  402. extnEnable = "";
  403. vBool = false;
  404. }
  405. /**********************************************************************************
  406. * Method Name : fReCalculate
  407. * Description : 산술식 연산 함수
  408. * argument : fCompID
  409. * return Type : N/A
  410. * Creator :
  411. **********************************************************************************/
  412. function fReCalculate(fCompID)
  413. {
  414. utlf_addLog("***** fReCalculate("+fCompID+") *****");
  415. var vRow;
  416. var fRef;
  417. var vCompID;
  418. var vRef;
  419. var vReadonly;
  420. var vCalculate;
  421. var vArr;
  422. var vDs;
  423. var vCol;
  424. var vResult;
  425. var vType;
  426. var vFcompID = new String(fCompID);
  427. var vDegnitempnts = new String(fCompID["degnitempnts"]);
  428. var vSupdegnitemno = new String(fCompID["supdegnitemno"]);
  429. var vFcompIDName = new String(fCompID.name);
  430. if(ds_bind.getRowCount() > 0)
  431. {
  432. //Step 0. 초기화
  433. if("init" == fCompID)
  434. {
  435. }
  436. else
  437. {
  438. vRow = ds_bind.findRow("componentid",fCompID.name);
  439. // findRow를 통해 상수로 값을 변환 없을 경우는 -1 반환, 첫번째 row일경우 1반환
  440. if(vRow == -1)
  441. {
  442. //ds_bind에 해당 값이 없음.
  443. }
  444. else
  445. {
  446. //vRow -= 1;
  447. fRef = ds_bind.getColumn(vRow,"ref");
  448. }
  449. }
  450. //Step 1. 산술식 계산
  451. for(i=0; i<ds_bind.getRowCount(); i++)
  452. {
  453. vResult ="";
  454. vCompID = ds_bind.getColumn(i, "componentid");
  455. vRef = ds_bind.getColumn(i, "ref");
  456. var vFcompIDcompare = new String(ds_bind.getColumn(i, "calculate"));
  457. vFcompIDName = lf_getCalid(fCompID, vFcompID, vSupdegnitemno);
  458. var vCheckInSide = "fn_getInt('ds_data_itemvalue."+vFcompIDName+"')";
  459. var vCheck = false;
  460. if(ds_bind.getColumn(i, "componentid") == vFcompIDName)
  461. {
  462. vCheck = true;
  463. }
  464. //&& vCompID != vFcompIDName
  465. //if(vCheck == true && !utlf_isNull(ds_bind.getColumn(i, "calculate")) && (vCompID != vFcompIDName
  466. //&& vFcompIDcompare.indexOf(vCheckInSide) > -1 || (!utlf_isNull(ds_bind.getColumn(i, "calculate")) && vFcompIDName.indexOf("STX") > -1 )))
  467. //if문 주석처리
  468. //
  469. if(((vCompID.indexOf("STX") > -1 && vCheck == false) || (vCheck == false && vFcompIDcompare.indexOf(vCheckInSide) > -1 ))&& !utlf_isNull(ds_bind.getColumn(i, "calculate")))
  470. //if(!utlf_isNull(ds_bind.getColumn(i, "calculate")))
  471. {
  472. var vChangeEquls = ds_bind.getColumn(i, "calculate");
  473. // = 기호 처리
  474. if(vChangeEquls.indexOf("')='") > 0)
  475. {
  476. vChangeEquls = vChangeEquls.replace("')='", "')=='");
  477. }
  478. //Bol값에 대한 판단일때 cal경우 체크된 상태를 0, readonly에서는 1로 판단하므로
  479. //cal일때도 1로 판단하도록 산술식변경
  480. if(vChangeEquls.indexOf("fn_getInt('ds_data_itemvalue.BOL_") >0 && vChangeEquls.indexOf("='0'") > 0 )
  481. {
  482. vChangeEquls = vChangeEquls.replace("='0'", "='1'");
  483. }
  484. // concat 처리
  485. if(vChangeEquls.indexOf("concat") > -1 && vChangeEquls.indexOf("strConcat.concat") == -1)
  486. {
  487. vChangeEquls = vChangeEquls.replace("concat", "strConcat.concat");
  488. ds_bind.setColumn(i, "calculate", vChangeEquls);
  489. }
  490. // ceiling 처리
  491. if(vChangeEquls.indexOf("ceiling") > -1 && vChangeEquls.indexOf("Math.ceil") == -1)
  492. {
  493. vChangeEquls = vChangeEquls.replace("ceiling", "Math.ceil");
  494. ds_bind.setColumn(i, "calculate", vChangeEquls);
  495. }
  496. // floor 처리
  497. if(vChangeEquls.indexOf("floor") > -1 && vChangeEquls.indexOf("Math.floor") == -1)
  498. {
  499. vChangeEquls = vChangeEquls.replace("floor", "Math.floor");
  500. ds_bind.setColumn(i, "calculate", vChangeEquls);
  501. }
  502. // round 처리
  503. if(vChangeEquls.indexOf("round") > -1 && vChangeEquls.indexOf("Math.round") == -1)
  504. {
  505. vChangeEquls = vChangeEquls.replace("round", "Math.round");
  506. ds_bind.setColumn(i, "calculate", vChangeEquls);
  507. }
  508. // power 처리
  509. if(vChangeEquls.indexOf("power") > -1 && vChangeEquls.indexOf("Math.pow") == -1)
  510. {
  511. vChangeEquls = vChangeEquls.replace("power", "Math.pow");
  512. ds_bind.setColumn(i, "calculate", vChangeEquls);
  513. }
  514. vArr = vRef.split(".");
  515. vDs = this.all[vArr[0]]; //ds_data_itemvalue
  516. vCol = vArr[1]; // component를 의미
  517. vCalculate = fn_nvl(vChangeEquls);
  518. try
  519. {
  520. vResult = eval(vCalculate);
  521. //sysf_trace(vResult + " / " + vCompID);
  522. if(vCompID.indexOf("BOL") !=-1 || vCompID.indexOf("CHK") !=-1 )
  523. {
  524. var vResultBol = "";
  525. if(!utlf_isNull(vResult) && vResult !="nonevalue")
  526. {
  527. //vResultBol = this.components[vCol].truevalue;
  528. if(vResult ==0 && utlf_isNull(this.components[vCompID]["degnitempnts"]))
  529. {
  530. //vResultBol = this.components[vCompID].falsevalue;
  531. vResultBol = this.components[vCompID].truevalue;
  532. }
  533. else if(vResult !=0 && !utlf_isNull(this.components[vCompID]["degnitempnts"]))
  534. {
  535. vResultBol = this.components[vCompID].truevalue;
  536. }
  537. else
  538. {
  539. vResultBol = this.components[vCompID].falsevalue;
  540. //vResultBol = this.components[vCompID].truevalue;
  541. }
  542. }
  543. else
  544. {
  545. vResultBol = this.components[vCol].falsevalue;
  546. }
  547. vDs.setColumn(0,vCol,vResultBol);
  548. }
  549. //Radio Composite 일때
  550. else if(vCompID.indexOf("RDO") !=-1 && !utlf_isNull(this.components[vCompID]["grupcd"]))
  551. {
  552. var vResultTemp = "";
  553. var vValitemnm = "";
  554. var vDegnNo = vCompID.replace("RDO_", "");
  555. var vCheckDataSetName = new String(this.components[vCompID]["grupcd"]);
  556. var vRow = ds_data_recitem.findRowExpr("degnitemno == '"+ vDegnNo +"' && degnitemkind == 'RDO'");
  557. vCheckDataSetName = "ds_data_V_"+vCheckDataSetName;
  558. var vCheckDataSet = this.objects[vCheckDataSetName];
  559. for(var h=0; h <vCheckDataSet.getRowCount(); h++ )
  560. {
  561. if(vCheckDataSet.getColumn(h, "valitempnt") == vResult)
  562. {
  563. vResultTemp = vCheckDataSet.getColumn(h, "termbasecd");
  564. vValitemnm = vCheckDataSet.getColumn(h, "valitemnm");
  565. }
  566. else
  567. {
  568. }
  569. }
  570. if(!utlf_isNull(vResultTemp))
  571. {
  572. vDs.setColumn(0,vCol,vResultTemp);
  573. this.components[vCompID].setData(vResultTemp);
  574. ds_data_recitem.setColumn(vRow, "rectermnm", vValitemnm);
  575. }
  576. else
  577. {
  578. vDs.setColumn(0,vCol,"");
  579. this.components[vCompID].ufn_initComp();
  580. ds_data_recitem.setColumn(vRow, "rectermnm", "");
  581. }
  582. }
  583. else
  584. {
  585. //vResult = lf_stxCheckNotNull(vCol, vResult, vFcompIDcompare);
  586. //vChangeEquls
  587. var vResultTemp = vResult;
  588. //STX의 경우 사칙연산이 없는 경우 0이 나오면 ""로
  589. if(vResultTemp == 0 && !(vChangeEquls.indexOf("-") > -1 || vChangeEquls.indexOf("+") > -1 || vChangeEquls.indexOf("/") > -1 || vChangeEquls.indexOf("*") > -1 ))
  590. {
  591. /*
  592. var No = vCompID.replace("STX_", "");
  593. if(!utlf_isNull(ds_data_syncdata) && !utlf_isNull(No))
  594. {
  595. var nRowNo = ds_data_syncdata.findRowExpr("item_kind == 'STX' && degnitemno =='"+No+"'");
  596. if(!utlf_isNull(nRowNo) && nRowNo > -1)
  597. {
  598. var value = ds_data_syncdata.getColumn(nRowNo, "item_value");
  599. if(value == 0)
  600. {
  601. vResultTemp = 0;
  602. }
  603. else
  604. {
  605. //계산값에 문제가 있을 수도 있는 case
  606. //처리보류
  607. }
  608. }
  609. else
  610. {
  611. vResultTemp = "";
  612. }
  613. }
  614. else
  615. {
  616. //값변경없음
  617. }
  618. */
  619. }
  620. // 달력연산 추가
  621. if(vFcompIDcompare.indexOf("CAL_") > -1)
  622. {
  623. var calCheck = lf_calCal(vFcompIDcompare);
  624. if(!utlf_isNull(calCheck) && calCheck != "noCal")
  625. {
  626. vResultTemp = calCheck;
  627. }
  628. else if(!utlf_isNull(calCheck) && calCheck == "noCal")
  629. {
  630. }
  631. else
  632. {
  633. vResultTemp = null;
  634. }
  635. }
  636. var roundposition="";
  637. if(isNaN(vResultTemp) == false && !utlf_isNull(vResultTemp))
  638. {
  639. try
  640. {
  641. if(!utlf_isNull(this.components[vCompID].roundposition))
  642. {
  643. roundposition = this.components[vCompID].roundposition
  644. }
  645. if(roundposition.indexOf("-") > -1)
  646. {
  647. roundposition = roundposition.replace("-", "" );
  648. }
  649. else if(roundposition.indexOf("+") > -1)
  650. {
  651. roundposition = roundposition.replace("+", "" );
  652. }
  653. else
  654. {
  655. roundposition = 5;
  656. }
  657. //vResultTemp = Math.round(vResultTemp,roundposition);
  658. }
  659. catch(e)
  660. {
  661. roundposition = 2;
  662. //vResultTemp = Math.round(vResultTemp,roundposition);
  663. }
  664. finally
  665. {
  666. vResultTemp = Math.round(vResultTemp,roundposition);
  667. }
  668. }
  669. var vCheckResultNaNOrInfinity = new String(vResultTemp);
  670. if(("x" + vCheckResultNaNOrInfinity) == "xNaN")
  671. {
  672. vResultTemp = "";
  673. }
  674. else if(("x" + vCheckResultNaNOrInfinity) == "xInfinity")
  675. {
  676. vResultTemp = "";
  677. }
  678. if(vResultTemp == 0 && !(vChangeEquls.indexOf("-") >-1) && !(vChangeEquls.indexOf("+") >-1) && !(vChangeEquls.indexOf("/") >-1) && !(vChangeEquls.indexOf("*") > -1))
  679. {
  680. //vResultTemp = "";
  681. }
  682. // concat 처리
  683. if((vResultTemp.toString().indexOf("nonevalue") > -1 || vResultTemp.toString().indexOf("undefined") > -1) &&
  684. vChangeEquls.indexOf("concat") > -1)
  685. {
  686. vResultTemp = vResultTemp.replace("nonevalue" ,"");
  687. vResultTemp = vResultTemp.replace("undefined" ,"");
  688. }
  689. //sysf_trace("vResultTemp : " + vResultTemp);
  690. vDs.setColumn(0,vCol,vResultTemp);
  691. strConcat = "";
  692. //vDs.setColumn(0,vCol,vResult);
  693. //sysf_trace(vResult + " : lf_stxCheckNotNull" );
  694. // if(("x" + vResult) == "xNaN" || ("x" + vResult) == "xInfinity")
  695. // {
  696. // vResult ="";
  697. // vDs.setColumn(0,vCol,"");
  698. // }
  699. // if(!utlf_isNull(vResult) && isNaN(vResult) == false)
  700. // {
  701. // vResult = Math.round(vResult, 2);
  702. // vDs.setColumn(0,vCol,vResult);
  703. // }
  704. // if(vFcompIDcompare.indexOf("+") >-1 || vFcompIDcompare.indexOf("-") >-1
  705. // || vFcompIDcompare.indexOf("/") >-1 || vFcompIDcompare.indexOf("*") >-1
  706. // || vFcompIDcompare.indexOf("%") >-1)
  707. // {
  708. // //사칙연산이 있는 경우
  709. // }
  710. // else
  711. // {
  712. // if(vResult == 0)
  713. // {
  714. // vDs.setColumn(0,vCol,"");
  715. // }
  716. // else
  717. // {
  718. // vDs.setColumn(0,vCol,vResult);
  719. // }
  720. // }
  721. // readonly일 경우 값 세팅 X
  722. //|| this.components[vCol]["enable"] == false
  723. try
  724. {
  725. if(this.components[vCol].readonly == true )
  726. {
  727. vDs.setColumn(0,vCol,"");
  728. }
  729. }
  730. catch(e)
  731. {
  732. }
  733. }
  734. }
  735. catch(e)
  736. {
  737. sysf_trace("산술식 오류 : " + e + ", vCompID : " + vCompID);
  738. sysf_catchTrace(e);
  739. }
  740. }
  741. else
  742. {
  743. //sysf_trace("산술식 적용대상 아님");
  744. }
  745. }
  746. /*****************************************************************************************************/
  747. /* 산술식 연산 끝
  748. /* Readonly는 ds_data_itemvalue value를 통해 작동하기 때문에 산술식을 통해 ds_data_itemvalue값을 채우고
  749. /* 그후 Readonly기능에 대한 반복실행하여 구현
  750. /*****************************************************************************************************/
  751. for(k=0; k<ds_bind.getRowCount(); k++)
  752. {
  753. if(!utlf_isNull(ds_bind.getColumn(k, "readonly")))
  754. {
  755. vCompID = ds_bind.getColumn(k, "componentid");
  756. var vChangeEquls = ds_bind.getColumn(k, "readonly");
  757. //var vChangeEquls = ds_bind.getColumn(i, "calculate");
  758. vSSUs = "";
  759. vSSUdiv ="";
  760. if(vChangeEquls.indexOf("')='") > 0)
  761. {
  762. vChangeEquls = vChangeEquls.replace("')='", "')=='");
  763. }
  764. vReadonly = fn_nvl(vChangeEquls);
  765. vArr = vRef.split(".");
  766. vDs = this.all[vArr[0]]; //ds_data_itemvalue
  767. vCol = vArr[1]; // component를 의미
  768. try
  769. {
  770. vResult = eval(vReadonly);
  771. if(vFcompIDName.indexOf("STX") == -1)
  772. {
  773. if(vCompID.indexOf("SL") > -1)
  774. {//SSL, MSL류
  775. vSSUs = ds_bind.getColumn(k, "supitem");
  776. vSSUdiv = vSSUs.split(",");
  777. }
  778. var vChkComp = new String(this.components[vCompID]);
  779. if(vChangeEquls.indexOf("!") > -1)
  780. {
  781. if(vResult == true)
  782. {
  783. if(vSSUdiv.length>0)
  784. {
  785. lf_sslEnable(vSSUdiv, false);
  786. }
  787. else if(!utlf_isNull(this.components[vCompID]))
  788. {
  789. if(this.components[vCompID] == "cp_recradioList" || this.components[vCompID] == "cp_reccheckList")
  790. {
  791. this.components[vCompID].ufn_initComp();
  792. vDs.setColumn(0,vCompID,"");
  793. this.components[vCompID]["enable"] = false;
  794. }
  795. else
  796. {
  797. this.components[vCompID].readonly = true;
  798. this.components[vCompID].value = "";
  799. }
  800. }
  801. }
  802. else
  803. {
  804. if(vSSUdiv.length>0)
  805. {
  806. lf_sslEnable(vSSUdiv, true);
  807. }
  808. else if(!utlf_isNull(this.components[vCompID]))
  809. {
  810. if(this.components[vCompID] == "cp_recradioList" || this.components[vCompID] == "cp_reccheckList")
  811. {
  812. this.components[vCompID]["enable"] = true;
  813. }
  814. else
  815. {
  816. this.components[vCompID].readonly = false;
  817. // 2016.10.14 this.components[vCompID].enable False 상태일 경우 활성화 처리[임시]
  818. // if(this.components[vCompID].enable == false){
  819. // this.components[vCompID].enable = true;
  820. // }
  821. }
  822. }
  823. }
  824. }
  825. else
  826. {
  827. if(vResult == true)
  828. {
  829. if(vSSUdiv.length>0)
  830. {
  831. lf_sslEnable(vSSUdiv, false);
  832. }
  833. else if(!utlf_isNull(this.components[vCompID]))
  834. {
  835. if(this.components[vCompID] == "cp_recradioList" || this.components[vCompID] == "cp_reccheckList")
  836. {
  837. this.components[vCompID].ufn_initComp();
  838. vDs.setColumn(0,vCompID,"");
  839. this.components[vCompID]["enable"] = false;
  840. }
  841. else
  842. {
  843. this.components[vCompID].value = "";
  844. this.components[vCompID].readonly = true;
  845. }
  846. }
  847. }
  848. else
  849. {
  850. if(vSSUdiv.length>0)
  851. {
  852. lf_sslEnable(vSSUdiv, true);
  853. }
  854. else if(!utlf_isNull(this.components[vCompID]))
  855. {
  856. if(this.components[vCompID] == "cp_recradioList" || this.components[vCompID] == "cp_reccheckList")
  857. {
  858. this.components[vCompID]["enable"] = true;
  859. }
  860. else
  861. {
  862. this.components[vCompID].readonly = false;
  863. }
  864. }
  865. }
  866. }
  867. }
  868. else
  869. {
  870. //STX일때
  871. if(vFcompIDName == vCompID)
  872. {
  873. if(vChangeEquls.indexOf("!") > -1)
  874. {
  875. if(vResult == true)
  876. {
  877. this.components[vCompID].readonly = true;
  878. this.components[vCompID].value = "";
  879. }
  880. else
  881. {
  882. this.components[vCompID].readonly = false;
  883. }
  884. }
  885. else
  886. {
  887. if(vResult == true)
  888. {
  889. this.components[vCompID].value = "";
  890. this.components[vCompID].readonly = true;
  891. }
  892. else
  893. {
  894. this.components[vCompID].readonly = false;
  895. }
  896. }
  897. }
  898. }
  899. //1121
  900. if(!utlf_isNull(this.components[vCompID]))
  901. {
  902. lf_changeEnable(this.components[vCompID]);
  903. }
  904. }
  905. catch(e)
  906. {
  907. sysf_trace("산술식 오류 : " + e + ", vCompID : " + vCompID);
  908. }
  909. }
  910. else
  911. {
  912. //readonly 적용대상아님
  913. }
  914. }
  915. }
  916. vFcompIDName = new String(fCompID.name);
  917. //&& vFcompIDName.indexOf("SL") == -1 , utlf_isNull(vDs) &&utlf_isNull(vDs) && (vFcompIDName.indexOf("STX") == -1 &&
  918. if(vFcompIDName.indexOf("ds") == -1 && vFcompIDName.indexOf("SSL") == -1)
  919. {
  920. //산술식 및 readonly기능에 관한 것이 아닌 단순 extn 활성화일때 적용
  921. lf_extnEnable(vFcompIDName, ds_data_itemvalue);
  922. }
  923. }
  924. /**********************************************************************************
  925. * Method Name : fn_getInt
  926. * Description : Dataset에 해당 값을 구해 숫자형으로 변경 전달.
  927. * argument : DATASETName.ColumnID, currentRownum
  928. * return Type : int
  929. * Creator :
  930. **********************************************************************************/
  931. function fn_getInt(vStr,vRow){
  932. utlf_addLog("***** fn_getInt("+vStr+","+vRow+") *****");
  933. var objArr;
  934. if(utlf_isNull(vRow)) vRow = 0;
  935. objArr = vStr.split("."); // ref 값을 받아 Data 추출 ref형식 : ds.col
  936. var vDs = this.objects[objArr[0]]; //dataset
  937. var vCol = objArr[1]; //component id
  938. var v1="";
  939. //sysf_trace(vCol);
  940. if(vCol.indexOf("SL_") > -1)
  941. {
  942. //var vDsValue = vDs.getCoulmn(0, vCol);
  943. //함수
  944. //lf_extnEnable(vCol, vDs);
  945. }
  946. else
  947. {
  948. }
  949. utlf_addLog("vCol : " + vCol);
  950. //rdo, bol, chk의 값이 있을 경우 처리 - value값과 point값이 다르기 때문에
  951. if(vCol.indexOf("RDO") != -1 || vCol.indexOf("BOL") != -1 || vCol.indexOf("CHK") != -1 || vCol.indexOf("SSL") != -1
  952. || vCol.indexOf("CMB") != -1 || vCol.indexOf("MSL") != -1 || vCol.indexOf("IMG") != -1)
  953. {
  954. // Composite check에 대한 처리 추가
  955. if(vCol.indexOf("BOL") != -1 || (vCol.indexOf("CHK") != -1 && this.components[vCol] != "cp_reccheckList" ))
  956. {
  957. var vCompValue = vDs.getColumn(0,vCol);
  958. //선택하지 않았을 때
  959. if(vCompValue == "nonevalue" || utlf_isNull(vCompValue))
  960. {
  961. v1 = "";
  962. // 만약에 연산으로 계산이 되는거면 0 값을 부여
  963. }
  964. else
  965. {
  966. if(!utlf_isNull(this.components[vCol]["degnitempnts"]))//degnitempnts
  967. {
  968. v1 = parseInt(this.components[vCol]["degnitempnts"]);
  969. if( isNaN(v1) == true )
  970. v1 = this.components[vCol]["degnitempnts"];
  971. }
  972. else
  973. {
  974. //BOL에 대한 degnitempnts를 설정하지 않으면 0로 판단
  975. v1 = 0;
  976. }
  977. }
  978. }
  979. else if(vCol.indexOf("CHK") != -1 && this.components[vCol] == "cp_reccheckList" )
  980. {
  981. //0. dataset 찾기 - component grupcd로 조합
  982. var sGrupcd = this.components[vCol].grupcd;
  983. if(utlf_isNull(sGrupcd))
  984. {
  985. sysf_trace("no bindind dataset");
  986. return;
  987. }
  988. var dsNm = "ds_data_V_" + sGrupcd;
  989. //this.objects[dsNm] -> dataset
  990. //1. 해당 component의 value찾기
  991. //getData() -> ds_data_itemvalue를 이용함
  992. //dataset 구조
  993. //<Col id="valitemnm">
  994. //<Col id="termbasecd">
  995. //<Col id="valitempnt">
  996. var sVal = this.objects["ds_data_itemvalue"].getColumn(0, vCol);
  997. //2. value값을 통해 다중 체크 여부 판단
  998. var sVals = sVal.split(" "); //체크여부를 공백으로 자른다.
  999. var sValsCount = sVals.length;
  1000. var nSumPoint =0; //Point 합산
  1001. var nFullyZero = 0;
  1002. for(var i=0; i <sValsCount; i++ )
  1003. {
  1004. if(utlf_isNull(sVals[i]))
  1005. {
  1006. //v1 +=0;
  1007. }
  1008. else
  1009. {
  1010. var nValRow = this.objects[dsNm].findRow("termbasecd", sVals[i]);
  1011. if(nValRow !=-1)
  1012. {
  1013. nFullyZero +=1;
  1014. nSumPoint += toNumber(this.objects[dsNm].getColumn(nValRow, "valitempnt"));
  1015. }
  1016. }
  1017. }
  1018. if((!utlf_isNull(nSumPoint) && nSumPoint !=0) || (nFullyZero > 0 && nSumPoint == 0))
  1019. {
  1020. v1 = nSumPoint;
  1021. }
  1022. }
  1023. else if(vCol.indexOf("RDO") != -1 )
  1024. {
  1025. var sVal = this.objects["ds_data_itemvalue"].getColumn(0, vCol);
  1026. var vCheckDataSetName = new String(this.components[vCol]["grupcd"]);
  1027. vCheckDataSetName = "ds_data_V_"+vCheckDataSetName;
  1028. var vCheckDataSet = this.objects[vCheckDataSetName];
  1029. for(var j=0; j <vCheckDataSet.getRowCount(); j++)
  1030. {
  1031. if( (vCheckDataSet.getColumn(j, "termbasecd") == sVal) && !utlf_isNull(sVal) )
  1032. {
  1033. v1 = vCheckDataSet.getColumn(j, "valitempnt");
  1034. break;
  1035. }
  1036. }
  1037. //sysf_trace("v1 : " + v1);
  1038. }
  1039. else if(vCol.indexOf("SSL") != -1)
  1040. {
  1041. var vSupitemNo;
  1042. vSupitemNo = vCol.split("_"); // vSupitemNo[1] -> supdegnitemno
  1043. for(var k=0; k < this.components.length; k++)
  1044. {
  1045. if(!utlf_isNull(this.components[k]["supdegnitemno"]) && this.components[k]["supdegnitemno"] == vSupitemNo[1])
  1046. {
  1047. var vSupdegnitemnoValue = this.components[k].value;
  1048. var vInnerDataset = new String("ds_" + this.components[k].name);
  1049. var vInnerDatasetValue = this.objects[vInnerDataset].getColumn(0, "termbasecd");
  1050. if(vSupdegnitemnoValue == vDs.getColumn(0, vCol) && !utlf_isNull(vSupdegnitemnoValue) && vInnerDatasetValue == vDs.getColumn(0, vCol))
  1051. {
  1052. v1 = this.components[k]["degnitempnts"];
  1053. }
  1054. else
  1055. {
  1056. }
  1057. }
  1058. }
  1059. //sysf_trace("vCol.indexOf(SSL) -> " +v1);
  1060. }
  1061. else if(vCol.indexOf("CMB") != -1)
  1062. {
  1063. var vCompValue = vDs.getColumn(0,vCol);
  1064. if(!utlf_isNull(vCompValue) && !utlf_isNull(this.components[vCol]["innerdataset"]))
  1065. {
  1066. var vInnerDs = this.components[vCol]["innerdataset"];
  1067. // var vInnerDsNm = vInnerDs.name;
  1068. //sysf_trace(vCompValue);
  1069. var vMatchRow = vInnerDs.findRow("termbasecd",vCompValue);
  1070. //일치하는 Row값
  1071. if(vMatchRow > -1)
  1072. {// 일치하는 것이 있는 경우
  1073. v1 = vInnerDs.getColumn(vMatchRow, "valitempnt");
  1074. }
  1075. else
  1076. {// 일치하는 것이 없는 경우
  1077. //v1 = "";
  1078. v1 =0;
  1079. }
  1080. }
  1081. else
  1082. {//콤보박스 값이 없는 경우 v1 = ""로 설정
  1083. //v1 = "";
  1084. v1 = 0;
  1085. }
  1086. }
  1087. //추가
  1088. else if(vCol.indexOf("MSL") != -1 || vCol.indexOf("IMG") != -1)
  1089. {
  1090. var vPno = vCol.split("_");
  1091. //vPno[0] - MSL, vPno[1] - no
  1092. var vTotalPoint = 0;
  1093. //세부 SSU의 찾기
  1094. for(var a=0; a < this.components.length; a++)
  1095. {//degnitempnts
  1096. if(!utlf_isNull(this.components[a]["supdegnitemno"]) && this.components[a]["supdegnitemno"] == vPno[1] && !utlf_isNull(this.components[a]["degnitempnts"]))
  1097. {
  1098. if(!utlf_isNull(this.components[a].value) && this.components[a].value != "nonevalue" )
  1099. {
  1100. vTotalPoint += toNumber(this.components[a]["degnitempnts"]);
  1101. }
  1102. }
  1103. }
  1104. v1 = vTotalPoint;
  1105. //sysf_trace(vTotalPoint + " : vTotalPoint");
  1106. if(utlf_isNull(vTotalPoint))
  1107. {
  1108. v1 = "";
  1109. }
  1110. }
  1111. else
  1112. {
  1113. }
  1114. if(utlf_isNull(v1) || v1== "nonevalue")
  1115. {
  1116. var vRowCount = new String(vCol+"'");
  1117. this.objects["ds_bind"].filter("String(calculate).indexOf("+"\""+vRowCount+"\""+") >= 0");
  1118. if(this.objects["ds_bind"].getRowCount() > 0)
  1119. {
  1120. var vArithmetics = new String(this.objects["ds_bind"].getColumn(0, "calculate"));
  1121. if(vArithmetics.indexOf("+") > -1 || vArithmetics.indexOf("-") > -1 || vArithmetics.indexOf("*") > -1
  1122. || vArithmetics.indexOf("/") > -1 || (( vArithmetics.indexOf("MSL") > -1 //vArithmetics.indexOf("SSL") > -1 ||
  1123. || vArithmetics.indexOf("RDO") > -1 || vArithmetics.indexOf("CHK") > -1) && (vArithmetics.indexOf("=") == -1)))
  1124. {
  1125. v1= 0;
  1126. }
  1127. else if( vArithmetics.indexOf("SSL") > -1 && vArithmetics.indexOf("=") == -1 )
  1128. {
  1129. }
  1130. else
  1131. {
  1132. v1= "nonevalue";
  1133. }
  1134. }
  1135. this.objects["ds_bind"].filter("");
  1136. }
  1137. }
  1138. else
  1139. { //STX일 경우
  1140. v1 = vDs.getColumn(vRow,vCol);
  1141. var vRowCount = new String(vCol+"'");
  1142. this.objects["ds_bind"].filter("String(calculate).indexOf("+"\""+vRowCount+"\""+") >= 0");
  1143. /*STX 중 연산으로 사용되는 것과 일반 text구분 calculate컬럼에 사칙연산이 있으면 연산으로 없으면 text로 구분한다.
  1144. - 두가지를 동시에 갖는 것은 없다고 가정 -> 그러므로 첫번째 row의 calculate 값으로 사칙연산 판단가능
  1145. */
  1146. if(this.objects["ds_bind"].getRowCount() > 0)
  1147. {
  1148. var vArithmetics = new String(this.objects["ds_bind"].getColumn(0, "calculate"));
  1149. utlf_addLog("vArithmetics : " + vArithmetics);
  1150. //사칙연산 판단
  1151. // if(vArithmetics.indexOf("+") > -1 || vArithmetics.indexOf("-") > -1 || vArithmetics.indexOf("*") > -1
  1152. // || vArithmetics.indexOf("/") > -1 || vArithmetics.indexOf("SSL") > -1 || vArithmetics.indexOf("MSL") > -1)
  1153. if(vArithmetics.indexOf("+") > -1 || vArithmetics.indexOf("-") > -1 || vArithmetics.indexOf("*") > -1
  1154. || vArithmetics.indexOf("/") > -1 ||((vArithmetics.indexOf("SSL") > -1 || vArithmetics.indexOf("MSL") > -1
  1155. || vArithmetics.indexOf("RDO") > -1 || vArithmetics.indexOf("CHK") > -1
  1156. || vArithmetics.indexOf("sqrt") > -1 || vArithmetics.indexOf("ln") > -1
  1157. ) && (vArithmetics.indexOf("=") == -1)))
  1158. {
  1159. if(utlf_isNull(v1))
  1160. {
  1161. v1= 0;
  1162. }
  1163. else
  1164. {
  1165. //소수점 계산 처리를 위해 주석처리 20150210
  1166. //v1 = parseInt(v1)
  1167. }
  1168. //v1 = Math.round(v1, 1);
  1169. v1 = parseFloat(v1);
  1170. }
  1171. else
  1172. {
  1173. //v1 = v1.toString();
  1174. }
  1175. }
  1176. else
  1177. {
  1178. //일반 TEXT인 경우
  1179. if(utlf_isNull(v1))
  1180. {
  1181. //v1="";
  1182. }
  1183. }
  1184. this.objects["ds_bind"].filter("");
  1185. }
  1186. // 2017.09.22 isFinite 체크 추가
  1187. if(isNaN(v1) == false && (isNumeric(v1) == true || (!utlf_isNull(v1) && isFinite(v1) == true)))
  1188. {
  1189. //v1 = Math.round(v1, 3);
  1190. v1 = parseFloat(v1);
  1191. //v1 = v1;
  1192. }
  1193. //값이 없어도 0으로 판단하여 계산
  1194. if(utlf_isNull(v1))
  1195. {
  1196. //v1 = 0;
  1197. }
  1198. return v1;
  1199. }
  1200. /**********************************************************************************
  1201. * Method Name : fn_sum
  1202. * Description : Dataset에 해당 컬럼에 합계를 구함.
  1203. * argument : DATASETName.ColumnID
  1204. * return Type : int
  1205. * etc : 계산식에 ds1.getSum("col1")을 사용하면 "ds1.col1"로 연관 bind 찾을때 누락된다.
  1206. 그래서 fn_sum('ds1.col1')을 적용하여 검색가능하게 변경
  1207. * Creator :
  1208. **********************************************************************************/
  1209. function fn_sum(vStr){
  1210. utlf_addLog("***** fn_sum("+vStr+") *****");
  1211. var objArr;
  1212. objArr = vStr.split("."); // ref 값을 받아 Data 추출 ref형식 : ds.col
  1213. var vDs = this.all[objArr[0]];
  1214. var vCol = objArr[1];
  1215. return vDs.getSum(vCol);
  1216. }
  1217. /**********************************************************************************
  1218. * Method Name : fn_nvl
  1219. * Description : null 처리
  1220. * argument : Object
  1221. * return Type : String
  1222. * Creator :
  1223. **********************************************************************************/
  1224. function fn_nvl(vStr){
  1225. if(null == vStr) vStr = "";
  1226. return vStr;
  1227. }
  1228. /**********************************************************************************
  1229. * Method Name : lf_chkExtn
  1230. * Description : extn 컨트롤 처리 이벤트
  1231. * argument : obj, e
  1232. * return Type :
  1233. * Creator :
  1234. **********************************************************************************/
  1235. function lf_chkExtn(obj, e)
  1236. {
  1237. utlf_addLog("***** lf_chkExtn("+obj+", "+e+") *****");
  1238. lf_changeEnable(obj);
  1239. }
  1240. /**********************************************************************************
  1241. * Method Name : lf_changeEnable
  1242. * Description : 산술식내에서 연산되는 extn처리
  1243. * argument : obj
  1244. * return Type :
  1245. * Creator :
  1246. **********************************************************************************/
  1247. //라디오일때와 체크박스일때를 구분하여 구현 필수
  1248. //현재는 체크박스에 대한 extn ctrl의 enable 기능만 작동
  1249. function lf_changeEnable(obj)
  1250. {
  1251. utlf_addLog("***** lf_changeEnable("+obj+") *****");
  1252. //obj.updateToDataset();
  1253. var vID = obj.name;
  1254. var vObj = new String(obj);
  1255. var vExtn;
  1256. vExtn = vID.split("_"); // vExtn[1]
  1257. var vExtnID = new String("STX_" + vExtn[1]);
  1258. if(!utlf_isNull(this.components[vExtnID]) && !utlf_isNull(this.components[vExtnID]["ctrltype"]) && this.components[vExtnID]["ctrltype"] == "extn")
  1259. {
  1260. if(this.components[vID]["enable"] == false || this.components[vID].readonly ==true || (vObj.indexOf("CheckBox") > -1 && this.components[vID].value =="nonevalue") )
  1261. {
  1262. this.components[vExtnID]["enable"] = false;
  1263. this.components[vExtnID].value = "";
  1264. }
  1265. else
  1266. {
  1267. this.components[vExtnID]["enable"] = true;
  1268. }
  1269. }
  1270. else
  1271. {
  1272. }
  1273. }
  1274. /**********************************************************************************
  1275. * Method Name : lf_deselectCMP
  1276. * Description : composite(라디오) 초기화 함수 (onclick)
  1277. * argument : obj, e
  1278. * return Type :
  1279. * Creator :
  1280. **********************************************************************************/
  1281. function lf_deselectCMP(obj, e)
  1282. {
  1283. utlf_addLog("***** lf_deselectCMP(obj, e) *****");
  1284. obj.ufn_initComp();
  1285. }
  1286. /**********************************************************************************
  1287. * Method Name : lf_changeGrid
  1288. * Description : 특수 그리드 처리함수 (누적그리드)
  1289. 최초 로드시점에 사용
  1290. * argument : dataset
  1291. * return Type : ds
  1292. * Creator :
  1293. **********************************************************************************/
  1294. function lf_changeGrid(ds)
  1295. {
  1296. utlf_addLog("***** lf_changeGrid(ds) *****");
  1297. ds.updatecontrol = false;
  1298. var vDsNm = ds.name;
  1299. var vGridNo = vDsNm.replace("ds_data_grd_", "");
  1300. //GRD로 시작하는 것만 고려
  1301. vGridNo = "GRD_" + vGridNo;
  1302. var vCount = ds.getColCount();
  1303. for(var i=1; i <vCount; i++ )
  1304. {
  1305. if(!utlf_isNull(this.components[vGridNo].getCellText(-1, i)))
  1306. {
  1307. var vName = this.components[vGridNo].getCellText(-1, i);
  1308. ds.addRow();
  1309. ds.setColumn(i-1,0,vName);
  1310. this.components[vGridNo].setCellProperty( "Head", i, "text", "");
  1311. //this.objects[vChangeGrid].updateColID(i, vName);
  1312. }
  1313. }
  1314. //데이터 정리 시작
  1315. var vRowCount = ds.getRowCount();
  1316. vRowCount = toNumber(vRowCount);
  1317. //row삭제
  1318. for(var d=vRowCount; -1<d; d--)
  1319. {
  1320. if(utlf_isNull(ds.getColumn(d,0)))
  1321. {
  1322. ds.deleteRow(d);
  1323. }
  1324. }
  1325. //col삭제
  1326. for(var j=vCount-1; 0<j ; j--)
  1327. {
  1328. if(utlf_isNull(ds.getColumn(1,j)) && ds.getColCount()!=2)
  1329. {
  1330. this.components[vGridNo].deleteContentsCol(j);
  1331. //ds.updatecontrol = false;
  1332. ds.deleteColumn(j);
  1333. }
  1334. }
  1335. ds.updatecontrol = true;
  1336. }
  1337. /**********************************************************************************
  1338. * Method Name : lf_dsOncolumnchanged
  1339. * Description : 특수 그리드 데이터 변환 함수 (누적 그리드)
  1340. * argument : dataset
  1341. * return Type :
  1342. * Creator :
  1343. **********************************************************************************/
  1344. function lf_dsOncolumnchanged(obj, e)
  1345. {
  1346. utlf_addLog("***** lf_dsOncolumnchanged(obj, e) *****");
  1347. // sysf_trace("dataset 이벤트");
  1348. //
  1349. //
  1350. // var vChangeGrid = obj.name;
  1351. // var vChangeGridNm;
  1352. //
  1353. // vChangeGrid = vChangeGrid.split("_temp");
  1354. // vChangeGridNm = vChangeGrid[0];
  1355. //
  1356. // this.objects[vChangeGridNm].updatecontrol = false;
  1357. //
  1358. // //column 수 체크
  1359. // if(obj.getColCount() > (this.objects[vChangeGridNm].getRowCount()+1))
  1360. // {
  1361. //
  1362. // var add = obj.getColCount() - (this.objects[vChangeGridNm].getRowCount()+1);
  1363. // for(var i=0; i <add; i++)
  1364. // {
  1365. // this.objects[vChangeGridNm].addRow();
  1366. // }
  1367. //
  1368. // }
  1369. // else if(obj.getColCount() < this.objects[vChangeGridNm].getRowCount())
  1370. // {
  1371. // var del = this.objects[vChangeGridNm].getRowCount() - obj.getColCount();
  1372. // for(var i=del; -1 <i; i--)
  1373. // {
  1374. // this.objects[vChangeGridNm].deleteRow(i);
  1375. //
  1376. // }
  1377. // }
  1378. //
  1379. // if(obj.getRowType(e.row) == 2)
  1380. // {
  1381. // this.objects[vChangeGridNm].addRow();
  1382. // }
  1383. // else if(obj.getRowType(e.row) == 8)
  1384. // {
  1385. // this.objects[vChangeGridNm].deleteRow();
  1386. // }
  1387. // else if(obj.getRowType(e.row) == 4 || obj.getRowType(e.row) == 1 )
  1388. // {
  1389. // var vVal = obj.getColumn(e.row, e.col);
  1390. //
  1391. // if(e.col-1 !=-1)
  1392. // {
  1393. // this.objects[vChangeGridNm].setColumn(e.col-1, e.row, vVal);
  1394. // }
  1395. //
  1396. // }
  1397. }
  1398. /**********************************************************************************
  1399. * Method Name : lf_getCalid
  1400. * Description : 산술식 내부함수, 산술식을 실행할 components id 반환
  1401. * argument : fCompID(Components), vFcompID(Components id), vSupdegnitemno(Cmponents Supdegnitemno)
  1402. * return Type : String(vFcompIDName)
  1403. * Creator :
  1404. **********************************************************************************/
  1405. function lf_getCalid(fCompID, vFcompID, vSupdegnitemno)
  1406. {
  1407. utlf_addLog("***** lf_getCalid("+fCompID+", "+vFcompID+", "+vSupdegnitemno+") *****");
  1408. var vFcompIDName= "";
  1409. if(vFcompID.indexOf("Radio") >-1 && vSupdegnitemno.indexOf("undefined") ==-1)
  1410. {
  1411. vFcompIDName = "SSL_"+vSupdegnitemno;
  1412. }
  1413. else if(vFcompID.indexOf("Check" ) >-1 &&vSupdegnitemno.indexOf("undefined") ==-1)
  1414. {
  1415. vFcompIDName = "MSL_"+vSupdegnitemno;
  1416. }
  1417. else
  1418. {
  1419. vFcompIDName = new String(fCompID.name);
  1420. }
  1421. return vFcompIDName;
  1422. }
  1423. /**********************************************************************************
  1424. * Method Name : lf_getChangeEquls
  1425. * Description : 변환되어나온 산술식 문법상의 오류를 처리하는 함수(괄호오류처리)
  1426. * argument : i
  1427. * return Type : String(vChangeEquls )
  1428. * Creator :
  1429. **********************************************************************************/
  1430. function lf_getChangeEquls(i)
  1431. {
  1432. utlf_addLog("***** lf_getChangeEquls("+i+") *****");
  1433. var vChangeEquls = this.objects["ds_bind"].getColumn(i, "calculate");
  1434. // = 기호 처리
  1435. if(vChangeEquls.indexOf("')='") > 0)
  1436. {
  1437. vChangeEquls = vChangeEquls.replace("')='", "')=='");
  1438. }
  1439. //Bol값에 대한 판단일때 cal경우 체크된 상태를 0, readonly에서는 1로 판단하므로
  1440. //cal일때도 1로 판단하도록 산술식변경
  1441. if(vChangeEquls.indexOf("fn_getInt('ds_data_itemvalue.BOL_") >0 && vChangeEquls.indexOf("='0'") > 0 )
  1442. {
  1443. //vChangeEquls = vChangeEquls.replace("='0'", "='1'");
  1444. }
  1445. return vChangeEquls;
  1446. }
  1447. /**********************************************************************************
  1448. * Method Name : lf_setResult
  1449. * Description : 산술식 결과 적용함수
  1450. * argument : vCompID
  1451. * return Type : String(vResultTemp )
  1452. * Creator :
  1453. **********************************************************************************/
  1454. function lf_setCalResult(vCompID, vResult, vCalculateDs)
  1455. {
  1456. utlf_addLog("***** lf_setCalResult("+vCompID+", "+vResult+", "+vCalculateDs+") *****");
  1457. var vResultTemp = vResult;
  1458. var vCalculateDs = new String(vCalculateDs);
  1459. //MSL, SSL은 고려하지 않음.
  1460. if(vCompID.indexOf("SSL") !=-1 || vCompID.indexOf("MSL") !=-1)
  1461. {
  1462. sysf_trace("SSL, MSL은 고려하지 않음 - lf_setCalResult함수");
  1463. return vResultTemp;
  1464. }
  1465. if(vCompID.indexOf("BOL") !=-1 || vCompID.indexOf("CHK") !=-1)
  1466. {
  1467. if(!utlf_isNull(vResult) && vResultTemp !="nonevalue")
  1468. {
  1469. //degnitempnts를 선언하지 않은 경우에 대한 처리
  1470. if(vResultTemp ==0 && utlf_isNull(this.components[vCompID]["degnitempnts"]))
  1471. {
  1472. //vResultTemp = this.components[vCompID].falsevalue;
  1473. vResultTemp = this.components[vCompID].truevalue;
  1474. }
  1475. else
  1476. {
  1477. //vResultTemp = this.components[vCompID].truevalue;
  1478. vResultTemp = this.components[vCompID].falsevalue;
  1479. }
  1480. }
  1481. else
  1482. {
  1483. vResultTemp = this.components[vCompID].falsevalue;
  1484. }
  1485. }
  1486. else if(vCompID.indexOf("RDO") !=-1 && !utlf_isNull(this.components[vCompID]["grupcd"]))
  1487. {
  1488. var vCheckDataSetName = new String(this.components[vCompID]["grupcd"]);
  1489. vCheckDataSetName = "ds_data_V_"+vCheckDataSetName;
  1490. var vCheckDataSet = this.objects[vCheckDataSetName];
  1491. for(var h=0; h <vCheckDataSet.getRowCount(); h++ )
  1492. {
  1493. if(vCheckDataSet.getColumn(h, "valitempnt") == vResult)
  1494. {
  1495. vResultTemp = vCheckDataSet.getColumn(h, "termbasecd");
  1496. //break;
  1497. }
  1498. }
  1499. if(utlf_isNull(vResultTemp) || vResultTemp =="nonevalue")
  1500. {
  1501. // vResultTemp = vCheckDataSet.getColumn(0, "termbasecd"); //초기값의 경우 0번째 row의 값으로 임의 설정
  1502. }
  1503. }
  1504. else
  1505. {
  1506. //vResultTemp = lf_stxCheckNull(vCompID, vResult, vCalculateDs);
  1507. var roundposition="";
  1508. if(isNaN(vResultTemp) == false && !utlf_isNull(vResultTemp))
  1509. {
  1510. try
  1511. {
  1512. if(!utlf_isNull(this.components[vCompID].roundposition))
  1513. {
  1514. roundposition = this.components[vCompID].roundposition
  1515. }
  1516. if(roundposition.indexOf("-") > -1)
  1517. {
  1518. roundposition = roundposition.replace("-", "" );
  1519. }
  1520. else if(roundposition.indexOf("+") > -1)
  1521. {
  1522. roundposition = roundposition.replace("+", "" );
  1523. }
  1524. else
  1525. {
  1526. roundposition = 5;
  1527. }
  1528. //vResultTemp = Math.round(vResultTemp,roundposition);
  1529. }
  1530. catch(e)
  1531. {
  1532. roundposition = 2;
  1533. //vResultTemp = Math.round(vResultTemp,roundposition);
  1534. }
  1535. finally
  1536. {
  1537. vResultTemp = Math.round(vResultTemp,roundposition);
  1538. }
  1539. }
  1540. }
  1541. var vCheckResultNaNOrInfinity = new String(vResultTemp);
  1542. utlf_addLog("vCheckResultNaNOrInfinity : " + vCheckResultNaNOrInfinity);
  1543. if(("x" + vCheckResultNaNOrInfinity) == "xNaN")
  1544. {
  1545. vResultTemp = "";
  1546. }
  1547. else if(("x" + vCheckResultNaNOrInfinity) == "xInfinity")
  1548. {
  1549. vResultTemp = "";
  1550. }
  1551. //sysf_trace("2. vResultTemp : "+ vCompID+" , "+ vResultTemp + ", " + vResult);
  1552. return vResultTemp;
  1553. }
  1554. /**********************************************************************************
  1555. * Method Name : IsDate
  1556. * Description : 날짜 형식이 맞는지 확인
  1557. * argument : sDate
  1558. * return Type : - 날짜형식이 맞는 경우 = true
  1559. - 날짜형식이 맞지 않는 경우 = false
  1560. - sDate가 입력되지 않은 경우 = false
  1561. * Creator :
  1562. **********************************************************************************/
  1563. function IsDate(sDate)
  1564. {
  1565. utlf_addLog("***** IsDate("+sDate+") *****");
  1566. if( IsNull(sDate) ) return false;
  1567. var sDate = sDate.toString();
  1568. if( sDate.length != 8 )
  1569. return false;
  1570. if( IsNum(sDate) != true )
  1571. return false;
  1572. var nMonth = parseInt(sDate.substring(4,6), 10);
  1573. var nDate = parseInt(sDate.substring(6,8), 10);
  1574. var nYear = parseInt(sDate.substring(0,4), 10);
  1575. if( nMonth < 1 || nMonth > 12 )
  1576. return false;
  1577. if( nDate < 1 || nDate > LastDateNum(sDate) )
  1578. return false;
  1579. return true;
  1580. }
  1581. /**********************************************************************************
  1582. * Method Name : IsNum
  1583. * Description : 문자열이 숫자형식에 맞는지 여부 체크
  1584. * argument : sNum
  1585. * return Type : - 숫자형식에 맞는경우 = true
  1586. - 숫자형식에 맞지않는 경우 = false
  1587. * Creator :
  1588. **********************************************************************************/
  1589. function IsNum(sNum)
  1590. {
  1591. utlf_addLog("***** IsNum("+sNum+") *****");
  1592. var c;
  1593. var point_cnt=0;
  1594. var ret=true;
  1595. if( IsNull(sNum) ) return false;
  1596. for( i = 0 ; i < sNum.length ; i++ )
  1597. {
  1598. c = sNum.charAt(i);
  1599. if( i == 0 && ( c == "+" || c == "-" ) );
  1600. else if( c >= "0" && c <= "9" );
  1601. else if( c == "." )
  1602. {
  1603. point_cnt++;
  1604. if( point_cnt > 1 )
  1605. {
  1606. ret = false;
  1607. break;
  1608. }
  1609. }
  1610. else
  1611. {
  1612. ret = false;
  1613. break;
  1614. }
  1615. }
  1616. return ret;
  1617. }
  1618. /**********************************************************************************
  1619. * Method Name : IsLeapYear
  1620. * Description : 윤년여부 확인
  1621. * argument : sDate(yyyyMMdd형태의 날짜)
  1622. * return Type : - sDate가 윤년인 경우 = true
  1623. - sDate가 윤년이 아닌 경우 = false
  1624. - sDate가 입력되지 않은 경우 = false
  1625. * Creator :
  1626. **********************************************************************************/
  1627. function IsLeapYear(sDate)
  1628. {
  1629. utlf_addLog("***** IsLeapYear("+sDate+") *****");
  1630. var ret;
  1631. var nY;
  1632. if( IsNull(sDate) ) return false;
  1633. nY = parseInt(sDate.substring(0,4), 10);
  1634. if ((nY % 4) == 0)
  1635. {
  1636. if ((nY % 100) != 0 || (nY % 400) == 0)
  1637. ret = true;
  1638. else
  1639. ret = false;
  1640. }
  1641. else
  1642. ret = false;
  1643. return ret;
  1644. }
  1645. /**********************************************************************************
  1646. * Method Name : LastDateNum
  1647. * Description : 해당월의 마지막 날짜를 숫자로 구하기
  1648. * argument : sDate(yyyyMMdd형태의 날짜)
  1649. * return Type : - 성공 = 마지막 날짜 숫자값 ( 예 : 30 )
  1650. - 실패 = -1
  1651. * Creator :
  1652. **********************************************************************************/
  1653. function LastDateNum(sDate)
  1654. {
  1655. utlf_addLog("***** LastDateNum("+sDate+") *****");
  1656. var nMonth, nLastDate;
  1657. if( IsNull(sDate) ) return -1;
  1658. nMonth = parseInt(sDate.substr(4,2), 10);
  1659. if( nMonth == 1 || nMonth == 3 || nMonth == 5 || nMonth == 7 || nMonth == 8 || nMonth == 10 || nMonth == 12 )
  1660. nLastDate = 31;
  1661. else if( nMonth == 2 )
  1662. {
  1663. if( IsLeapYear(sDate) == true )
  1664. nLastDate = 29;
  1665. else
  1666. nLastDate = 28;
  1667. }
  1668. else
  1669. nLastDate = 30;
  1670. return nLastDate;
  1671. }
  1672. /**********************************************************************************
  1673. * Method Name : IsNull
  1674. * Description : 입력값이 null에 해당하는 경우 모두를 한번에 체크한다.
  1675. * argument : sValue (체크할 문자열)
  1676. * return Type : - sValue가 undefined, null, NaN, "", Array.length = 0인 경우 = true
  1677. - 이외의 경우 = false
  1678. * Creator :
  1679. **********************************************************************************/
  1680. function IsNull(sValue)
  1681. {
  1682. utlf_addLog("***** IsNull("+sValue+") *****");
  1683. if( new String(sValue).valueOf() == "undefined")
  1684. return true;
  1685. if( sValue == null )
  1686. return true;
  1687. if( ("x"+sValue == "xNaN") && ( new String(sValue.length).valueOf() == "undefined" ) )
  1688. return true;
  1689. if( sValue.length == 0 )
  1690. return true;
  1691. return false;
  1692. }
  1693. /**********************************************************************************
  1694. * Method Name : lf_changeMask
  1695. * Description : (서식로드 시)주로 영문서식의 MaskEdit의 value값을 변경하는 기능을 한다.
  1696. * argument :
  1697. * return Type :
  1698. * Creator :
  1699. **********************************************************************************/
  1700. function lf_changeMask()
  1701. {
  1702. utlf_addLog("***** lf_changeMask() *****");
  1703. for(var i=0; i < this.components.length; i++)
  1704. {
  1705. var vComp = this.components[i];
  1706. if(vComp == "[object MaskEdit]" && !utlf_isNull(vComp.value) )
  1707. {
  1708. var vMask = new String(vComp.mask);
  1709. var vMaskVal = new String(vComp.value);
  1710. var nMonth;
  1711. var nDate;
  1712. var nYear;
  1713. if(vMask.indexOf("##/##/####") > -1 && !utlf_isNull(vMaskVal))
  1714. {
  1715. var vSubyyyymmdd = vMaskVal.substring(0,8);
  1716. var vExtraVal = vMaskVal.split(vSubyyyymmdd);
  1717. //vExtraVal[1]
  1718. var vReVal = new String();
  1719. //날짜타입인지 판단
  1720. var rtn = IsDate(vSubyyyymmdd.value);
  1721. if(rtn = false)
  1722. {
  1723. }
  1724. else
  1725. {
  1726. nMonth = vSubyyyymmdd.substring(4,6);
  1727. nDate = vSubyyyymmdd.substring(6,8);
  1728. nYear = vSubyyyymmdd.substring(0,4);
  1729. if(!utlf_isNull(vExtraVal[1]))
  1730. {
  1731. vReVal = nMonth + nDate + nYear + vExtraVal[1];
  1732. }
  1733. else
  1734. {
  1735. vReVal = nMonth + nDate + nYear;
  1736. }
  1737. vComp.value = vReVal;
  1738. }
  1739. }
  1740. }
  1741. }
  1742. }
  1743. /**********************************************************************************
  1744. * Method Name : lf_saveMask
  1745. * Description : (서식저장 시)주로 영문서식의 MaskEdit의 value값을 변경하는 기능을 한다. -> SMMMR02900화면 이동
  1746. * argument :
  1747. * return Type :
  1748. * Creator :
  1749. **********************************************************************************/
  1750. function lf_saveMask()
  1751. {
  1752. utlf_addLog("***** lf_saveMask() *****");
  1753. for(var i=0; i < this.components.length; i++)
  1754. {
  1755. var vComp = this.components[i];
  1756. if(vComp == "[object MaskEdit]" && !utlf_isNull(vComp.value) )
  1757. {
  1758. var vMask = new String(vComp.mask);
  1759. var vMaskVal = new String(vComp.value);
  1760. var nMonth;
  1761. var nDate;
  1762. var nYear;
  1763. if(vMask.indexOf("##/##/####") > -1 && !utlf_isNull(vMaskVal))
  1764. {
  1765. var vSubyyyymmdd = vMaskVal.substring(0,8);
  1766. var vExtraVal = vMaskVal.split(vSubyyyymmdd);
  1767. //vExtraVal[1]
  1768. var vReVal = new String();
  1769. nDate = vSubyyyymmdd.substring(2,4);
  1770. nYear = vSubyyyymmdd.substring(4,8);
  1771. nMonth = vSubyyyymmdd.substring(0,2);
  1772. if(!utlf_isNull(vExtraVal[1]))
  1773. {
  1774. vReVal = nYear + nMonth + nDate + vExtraVal[1];
  1775. }
  1776. else
  1777. {
  1778. vReVal = nYear + nMonth + nDate;
  1779. }
  1780. vComp.value = vReVal;
  1781. }
  1782. }
  1783. }
  1784. }
  1785. /**********************************************************************************
  1786. * Method Name : lf_applyReadOnly
  1787. * Description : readonly 산술결과 적용함수
  1788. * argument : vCompID(compnent id), vChangeEquls(readonly 산술식), vResult(연산 결과), vChkComp, vSSUdiv(SSU집합)
  1789. * return Type : none
  1790. * Creator :
  1791. **********************************************************************************/
  1792. function lf_applyReadOnly(vCompID, vChangeEquls, vResult, vChkComp, vSSUdiv)
  1793. {
  1794. utlf_addLog("***** lf_applyReadOnly("+vCompID+", "+vChangeEquls+", "+vResult+", "+vChkComp+", "+vSSUdiv+") *****");
  1795. if(vChangeEquls.indexOf("!") > -1 && !utlf_isNull(this.components[vCompID]))
  1796. {
  1797. if(vResult == true)
  1798. {
  1799. if(vSSUdiv.length>0)
  1800. {
  1801. lf_sslEnable(vSSUdiv, false);
  1802. }
  1803. else
  1804. {
  1805. if(vChkComp.indexOf("cp_rec") > -1)
  1806. {
  1807. this.components[vCompID]["enable"] = false;
  1808. this.components[vCompID].ufn_initComp();
  1809. }
  1810. else
  1811. {
  1812. this.components[vCompID].readonly = true;
  1813. this.components[vCompID].value = "";
  1814. }
  1815. }
  1816. }
  1817. else
  1818. {
  1819. if(vSSUdiv.length>0)
  1820. {
  1821. lf_sslEnable(vSSUdiv, true);
  1822. }
  1823. else if(!utlf_isNull(this.components[vCompID]))
  1824. {
  1825. if(vChkComp.indexOf("cp_rec") > -1)
  1826. {
  1827. this.components[vCompID]["enable"] = true;
  1828. }
  1829. else
  1830. {
  1831. this.components[vCompID].readonly = false;
  1832. }
  1833. }
  1834. }
  1835. }
  1836. else if(!utlf_isNull(this.components[vCompID]))
  1837. {
  1838. if(vResult == true)
  1839. {
  1840. if(vSSUdiv.length>0)
  1841. {
  1842. lf_sslEnable(vSSUdiv, false);
  1843. }
  1844. else if(!utlf_isNull(this.components[vCompID]))
  1845. {
  1846. if(vChkComp.indexOf("cp_rec") > -1)
  1847. {
  1848. this.components[vCompID]["enable"] = false;
  1849. this.components[vCompID].ufn_initComp();
  1850. }
  1851. else
  1852. {
  1853. this.components[vCompID].readonly = true;
  1854. this.components[vCompID].value = "";
  1855. }
  1856. }
  1857. }
  1858. else
  1859. {
  1860. if(vSSUdiv.length>0)
  1861. {
  1862. lf_sslEnable(vSSUdiv, true);
  1863. }
  1864. else if(!utlf_isNull(this.components[vCompID]))
  1865. {
  1866. if(vChkComp.indexOf("cp_rec") > -1)
  1867. {
  1868. this.components[vCompID]["enable"] = true;
  1869. }
  1870. else
  1871. {
  1872. this.components[vCompID].readonly = false;
  1873. }
  1874. }
  1875. }
  1876. }
  1877. else
  1878. {
  1879. }
  1880. }
  1881. /**********************************************************************************
  1882. * Method Name : lf_initRdoVal
  1883. * Description : 산술식 계산 전 RDO component 초기값 세팅(산술식 해당 component만 대상)
  1884. * argument : oDsBind(dataset)
  1885. * return Type : N/A
  1886. * Creator :
  1887. **********************************************************************************/
  1888. function lf_initRdoVal(oDsBind)
  1889. {
  1890. utlf_addLog("***** lf_initRdoVal("+oDsBind+") *****");
  1891. //sysf_trace("초기값 연산함수");
  1892. var vDsBind = this.objects[oDsBind];
  1893. if(utlf_isNull(vDsBind))
  1894. {
  1895. sysf_trace("선언되지 않은 DataSet입니다.");
  1896. return;
  1897. }
  1898. //component id가 RDO인것만 처리, 추후 다른 component id 처리가 필요한 경우 수정필요
  1899. var filterStr = "componentid.toString().indexOf('"+"RDO_"+"') >=0";
  1900. vDsBind.filter(filterStr);
  1901. for(var i=0; i <vDsBind.getRowCount(); i++)
  1902. {
  1903. var vDsComp = vDsBind.getColumn(i, "componentid");
  1904. var vCalculate = vDsBind.getColumn(i, "calculate");
  1905. //var vGetData = this.components[vDsComp].getData();
  1906. var vGetData = this.objects["ds_tempItemValue"].getColumn(0, vDsComp);
  1907. var vValueComps;
  1908. var vVal;
  1909. // if(utlf_isNull(vDsComp))
  1910. // {
  1911. // sysf_trace("선언되지 않은 Component입니다. /" + vDsComp);
  1912. // break;
  1913. // }
  1914. if(vDsComp.indexOf("RDO_") > -1 && utlf_isNull(vGetData) &&!utlf_isNull(vCalculate))
  1915. {
  1916. //초기값 세팅
  1917. var vCheckDataSetName = new String(this.components[vDsComp]["grupcd"]);
  1918. vCheckDataSetName = "ds_data_V_"+vCheckDataSetName;
  1919. var vCheckDataSet = this.objects[vCheckDataSetName];
  1920. if(!utlf_isNull(vCheckDataSet))
  1921. {
  1922. //초기값 세팅
  1923. this.components[vDsComp].setData(vCheckDataSet.getColumn(0, "termbasecd"));
  1924. ds_tempItemValue.setColumn(0, vDsComp, vCheckDataSet.getColumn(0, "termbasecd"));
  1925. }
  1926. else
  1927. {
  1928. //dataset없음
  1929. }
  1930. }
  1931. else if(!utlf_isNull(this.objects["ds_tempItemValue"].getColumn(0, vDsComp)))
  1932. { //value가 세팅이 실패했을때을 대비하여 선언
  1933. //sysf_trace(vDsComp);
  1934. this.components[vDsComp].setData(this.objects["ds_tempItemValue"].getColumn(0, vDsComp));
  1935. }
  1936. }
  1937. vDsBind.filter("");
  1938. //////////////////
  1939. filterStr = "calculate.toString().indexOf('"+"RDO_"+"') >=0";
  1940. vDsBind.filter(filterStr);
  1941. for(var j=0; j <vDsBind.getRowCount(); j++)
  1942. {
  1943. var vCalculate = new String(vDsBind.getColumn(i, "calculate"));
  1944. vValueComps = vCalculate.split("fn_getInt('ds_data_itemvalue.");
  1945. vValueComps[0] ="";
  1946. for(var h=1; h < vValueComps.length; h++)
  1947. {
  1948. var vSplit;
  1949. vSplit = vValueComps[i].split("'");
  1950. if(!utlf_isNull(vSplit[0]))
  1951. {
  1952. vValueComps[h] = vSplit[0];
  1953. //sysf_trace("vValueComps[h] : " + vValueComps[h] + " , " + h);
  1954. var vCompNm = vValueComps[h];
  1955. var vVal="";
  1956. if(vCompNm.indexOf("RDO") > -1)
  1957. {
  1958. if(utlf_isNull(this.objects["ds_tempItemValue"].getColumn(0, vCompNm)))
  1959. {
  1960. var vCheckDataSetName = new String(this.components[vCompNm]["grupcd"]);
  1961. vCheckDataSetName = "ds_data_V_"+vCheckDataSetName;
  1962. var vCheckDataSet = this.objects[vCheckDataSetName];
  1963. }
  1964. else if(!utlf_isNull(this.objects["ds_tempItemValue"].getColumn(0, vCompNm)))
  1965. {
  1966. this.components[vCompNm].setData(this.objects["ds_tempItemValue"].getColumn(0, vCompNm));
  1967. }
  1968. }
  1969. }
  1970. }
  1971. }
  1972. vDsBind.filter("");
  1973. }
  1974. /**********************************************************************************
  1975. * Method Name : lf_stxCheckNull
  1976. * Description : 산술식의 연산 결과를 반환하는 함수
  1977. * argument : component id : vCompID, 산술식 연산 결과 :vResult, 실제 산술식 : vCalculateDs
  1978. * return Type : vResultTemp(string)
  1979. * Creator :
  1980. **********************************************************************************/
  1981. function lf_stxCheckNull(vCompID, vResult, vCalculateDs)
  1982. {
  1983. utlf_addLog("***** lf_stxCheckNull("+vCompID+", "+vResult+", "+vCalculateDs+") *****");
  1984. var vCalculateDs = new String(vCalculateDs);
  1985. var vResultTemp = vResult;
  1986. //해당 산술식에 사칙연산이 있는 경우 SSL과 MSL은 사칙연산으로 판단
  1987. if(vCalculateDs.indexOf("+") > -1 || vCalculateDs.indexOf("-") > -1 || vCalculateDs.indexOf("*") > -1 || vCalculateDs.indexOf("/") > -1
  1988. || vCalculateDs.indexOf("SSL_") > -1 || vCalculateDs.indexOf("MSL_") > -1)
  1989. {
  1990. var vNull;
  1991. var vValueComps;
  1992. vValueComps = vCalculateDs.split("fn_getInt('ds_data_itemvalue.");
  1993. var vCheckNull = true;
  1994. for(var i=1; i < vValueComps.length; i++)
  1995. {
  1996. var vSplit;
  1997. vSplit = vValueComps[i].split("'");
  1998. if(!utlf_isNull(vSplit[0]))
  1999. {
  2000. vValueComps[i] = vSplit[0];
  2001. //sysf_trace(vValueComps[i]);
  2002. }
  2003. else
  2004. {
  2005. sysf_trace("오류 : lf_stxCheckNull 함수 0번 오류 발생");
  2006. break;
  2007. }
  2008. var vCompNm = vValueComps[i];
  2009. var vVal="";
  2010. if(vCompNm.indexOf("RDO") > -1)
  2011. {
  2012. vVal = this.components[vValueComps[i]].getData();
  2013. }
  2014. else if(vCompNm.indexOf("BOL") > -1 || vCompNm.indexOf("CHK") > -1)
  2015. {
  2016. vVal = this.components[vValueComps[i]].value;
  2017. if(vVal == "nonevalue")
  2018. {
  2019. vVal = "";
  2020. }
  2021. }
  2022. else if(vCompNm.indexOf("MSL") > -1 || vCompNm.indexOf("SSL") > -1 )
  2023. {
  2024. if(vCompNm.indexOf("SSL") > -1)
  2025. {
  2026. vVal = this.objects["ds_data_itemvalue"].getColumn(0, vCompNm);
  2027. }
  2028. else
  2029. {
  2030. var vPno = vCompNm.split("_");
  2031. //vPno[0] - MSL, vPno[1] - no
  2032. //세부 SSU의 찾기
  2033. for(var a=0; a < this.components.length; a++)
  2034. {//degnitempnts
  2035. if(!utlf_isNull(this.components[a]["supdegnitemno"]) && this.components[a]["supdegnitemno"] == vPno[1] && !utlf_isNull(this.components[a]["degnitempnts"]))
  2036. {
  2037. if(utlf_isNull(this.components[a].value))
  2038. {
  2039. //vVal = "";
  2040. }
  2041. else
  2042. {
  2043. vVal = "!Null";
  2044. break;
  2045. }
  2046. }
  2047. }
  2048. }
  2049. }
  2050. else
  2051. {
  2052. vVal = this.components[vValueComps[i]].value;
  2053. }
  2054. if(utlf_isNull(vVal))
  2055. {
  2056. vCheckNull = false;
  2057. break;
  2058. }
  2059. }
  2060. if(vCheckNull == false)
  2061. {
  2062. vResultTemp = "";
  2063. }
  2064. if(!utlf_isNull(vResultTemp))
  2065. {
  2066. if(vResultTemp == 0)
  2067. {
  2068. //vResultTemp = "";
  2069. }
  2070. }
  2071. else
  2072. {
  2073. //vResultTemp = "";
  2074. }
  2075. }
  2076. else if(vResultTemp == 0)
  2077. {
  2078. vResultTemp ="";
  2079. }
  2080. var vCheckResultNaNOrInfinity = new String(vResultTemp);
  2081. if(("x" + vCheckResultNaNOrInfinity) == "xNaN")
  2082. {
  2083. vResultTemp = "";
  2084. }
  2085. else if(("x" + vCheckResultNaNOrInfinity) == "xInfinity")
  2086. {
  2087. vResultTemp = "";
  2088. }
  2089. var roundposition="";
  2090. if(isNaN(vResultTemp) == false && !utlf_isNull(vResultTemp))
  2091. {
  2092. try
  2093. {
  2094. if(!utlf_isNull(this.components[vCompID].roundposition))
  2095. {
  2096. roundposition = this.components[vCompID].roundposition
  2097. }
  2098. if(roundposition.indexOf("-") > -1)
  2099. {
  2100. roundposition = roundposition.replace("-", "" );
  2101. }
  2102. else if(roundposition.indexOf("+") > -1)
  2103. {
  2104. roundposition = roundposition.replace("+", "" );
  2105. }
  2106. else
  2107. {
  2108. roundposition = 5;
  2109. }
  2110. //vResultTemp = Math.round(vResultTemp,roundposition);
  2111. }
  2112. catch(e)
  2113. {
  2114. roundposition = 2;
  2115. //vResultTemp = Math.round(vResultTemp,roundposition);
  2116. }
  2117. finally
  2118. {
  2119. vResultTemp = Math.round(vResultTemp,roundposition);
  2120. }
  2121. }
  2122. return vResultTemp;
  2123. }
  2124. /**********************************************************************************
  2125. * Method Name : lf_stxCheckNotNull
  2126. * Description : 추후 lf_stxCheckNull와 통합
  2127. * argument : component id : vCompID, 산술식 연산 결과 :vResult, 실제 산술식 : vCalculateDs
  2128. * return Type : vResultTemp(string)
  2129. * Creator :
  2130. **********************************************************************************/
  2131. function lf_stxCheckNotNull(vCompID, vResult, vCalculateDs)
  2132. {
  2133. utlf_addLog("***** lf_stxCheckNotNull("+vCompID+", "+vResult+", "+vCalculateDs+") *****");
  2134. var vCalculateDs = new String(vCalculateDs);
  2135. var vResultTemp = vResult;
  2136. //sysf_trace("vCalculateDs : " + vCalculateDs);
  2137. var vCheckNull = true;
  2138. if(vCalculateDs.indexOf("+") > -1 || vCalculateDs.indexOf("-") > -1 || vCalculateDs.indexOf("*") > -1 || vCalculateDs.indexOf("/") > -1
  2139. //|| vCalculateDs.indexOf("SSL_") > -1 || vCalculateDs.indexOf("MSL_") > -1)
  2140. ||((vCalculateDs.indexOf("SSL") > -1 || vCalculateDs.indexOf("MSL") > -1 || vCalculateDs.indexOf("RDO") > -1 || vCalculateDs.indexOf("CHK") > -1 || vCalculateDs.indexOf("CMB") > -1)
  2141. && (vCalculateDs.indexOf("=") == -1)))
  2142. {
  2143. var vNull;
  2144. var vValueComps;
  2145. vValueComps = vCalculateDs.split("fn_getInt('ds_data_itemvalue.");
  2146. vValueComps[0] ="";
  2147. for(var i=1; i < vValueComps.length; i++)
  2148. {
  2149. var vSplit;
  2150. vSplit = vValueComps[i].split("'");
  2151. if(!utlf_isNull(vSplit[0]))
  2152. {
  2153. vValueComps[i] = vSplit[0];
  2154. //sysf_trace(vValueComps[i]);
  2155. }
  2156. else
  2157. {
  2158. sysf_trace("오류 : lf_stxCheckNull 함수 0번 오류 발생");
  2159. break;
  2160. }
  2161. var vCompNm = vValueComps[i];
  2162. var vVal="";
  2163. if(vCompNm.indexOf("RDO") > -1)
  2164. {
  2165. vVal = this.components[vValueComps[i]].getData();
  2166. }
  2167. else if(vCompNm.indexOf("CMB") > -1)
  2168. {
  2169. vVal = vValueComps[i].value;
  2170. if(!utlf_isNull(vVal))
  2171. {
  2172. vVal = 0;
  2173. }
  2174. }
  2175. else if(vCompNm.indexOf("BOL") > -1 || vCompNm.indexOf("CHK") > -1)
  2176. {
  2177. vVal = this.components[vValueComps[i]].value;
  2178. if(vVal == "nonevalue")
  2179. {
  2180. vVal = "";
  2181. }
  2182. }
  2183. else if(vCompNm.indexOf("MSL") > -1 || vCompNm.indexOf("SSL") > -1 )
  2184. {
  2185. if(vCompNm.indexOf("SSL") > -1)
  2186. {
  2187. vVal = this.objects["ds_data_itemvalue"].getColumn(0, vCompNm);
  2188. }
  2189. else
  2190. {
  2191. var vPno = vCompNm.split("_");
  2192. //vPno[0] - MSL, vPno[1] - no
  2193. //세부 SSU의 찾기
  2194. for(var a=0; a < this.components.length; a++)
  2195. {//degnitempnts
  2196. if(!utlf_isNull(this.components[a]["supdegnitemno"]) && this.components[a]["supdegnitemno"] == vPno[1] && !utlf_isNull(this.components[a]["degnitempnts"]))
  2197. {
  2198. if(utlf_isNull(this.components[a].value) || this.components[a].value == "nonevalue" )
  2199. {
  2200. //vVal = "";
  2201. }
  2202. else
  2203. {
  2204. vVal = "!Null";
  2205. break;
  2206. }
  2207. }
  2208. }
  2209. }
  2210. }
  2211. else
  2212. {
  2213. vVal = this.components[vValueComps[i]].value;
  2214. if(utlf_isNull(vVal))
  2215. {
  2216. vCheckNull = false;
  2217. break;
  2218. }
  2219. }
  2220. if(utlf_isNull(vVal))
  2221. {
  2222. vVal="";
  2223. }
  2224. vValueComps[i] = vVal;
  2225. }
  2226. var vCk ="";
  2227. for(var b=0; b < vValueComps.length; b++ )
  2228. {
  2229. vCk += vValueComps[b];
  2230. }
  2231. //sysf_trace("vCk :" + vCk);
  2232. if(utlf_isNull(vCk))
  2233. {
  2234. vResultTemp ="";
  2235. return vResultTemp;
  2236. }
  2237. }
  2238. else if(vResultTemp == 0)
  2239. {
  2240. vResultTemp ="";
  2241. }
  2242. if(vCheckNull == false)
  2243. {
  2244. vResultTemp = "";
  2245. }
  2246. var vCheckResultNaNOrInfinity = new String(vResultTemp);
  2247. if(("x" + vCheckResultNaNOrInfinity) == "xNaN")
  2248. {
  2249. vResultTemp = "";
  2250. }
  2251. else if(("x" + vCheckResultNaNOrInfinity) == "xInfinity")
  2252. {
  2253. vResultTemp = "";
  2254. }
  2255. var roundposition="";
  2256. if(isNaN(vResultTemp) == false && !utlf_isNull(vResultTemp))
  2257. {
  2258. try
  2259. {
  2260. if(!utlf_isNull(this.components[vCompID].roundposition))
  2261. {
  2262. roundposition = this.components[vCompID].roundposition;
  2263. }
  2264. if(roundposition.indexOf("-") > -1)
  2265. {
  2266. roundposition = roundposition.replace("-", "" );
  2267. }
  2268. else if(roundposition.indexOf("+") > -1)
  2269. {
  2270. roundposition = roundposition.replace("+", "" );
  2271. }
  2272. else
  2273. {
  2274. roundposition = 5;
  2275. }
  2276. //vResultTemp = Math.round(vResultTemp,roundposition);
  2277. }
  2278. catch(e)
  2279. {
  2280. roundposition = 2;
  2281. //vResultTemp = Math.round(vResultTemp,roundposition);
  2282. }
  2283. finally
  2284. {
  2285. vResultTemp = Math.round(vResultTemp,roundposition);
  2286. }
  2287. }
  2288. return vResultTemp;
  2289. }
  2290. /**********************************************************************************
  2291. * Method Name : lf_tabKey
  2292. * Description : STX(Edit)로 포커스가 이동하였을때, 발생하는 이벤트
  2293. * argument :
  2294. * return Type :
  2295. * Creator :
  2296. **********************************************************************************/
  2297. function lf_tabKey(obj, e:SetFocusEventInfo)
  2298. {
  2299. if(!utlf_isNull(obj.value))
  2300. {
  2301. var sVal = obj.value;
  2302. var length = sVal.length;
  2303. obj.setSelect(0,length);
  2304. }
  2305. }
  2306. /**********************************************************************************
  2307. * Method Name : lf_calCal
  2308. * Description : 달력일자 계산
  2309. * argument : vFcompIDcompare
  2310. * return Type :
  2311. * Creator :
  2312. **********************************************************************************/
  2313. function lf_calCal(vFcompIDcompare)
  2314. {
  2315. if(utlf_isNull(vFcompIDcompare))
  2316. {
  2317. return;
  2318. }
  2319. var split;
  2320. split = vFcompIDcompare.split("fn_getInt('ds_data_itemvalue.");
  2321. var Count = split.length;
  2322. if(Count > 4)
  2323. {
  2324. return;
  2325. }
  2326. if(Count == 2){
  2327. return "noCal";
  2328. }
  2329. for(var i=1; i<Count; i++)
  2330. {
  2331. if(split[i].indexOf("CAL") > -1)
  2332. {
  2333. //var sFirstDesignNo = sCalculateSplit[0].replace(new RegExp("^[0-9]*$"),sCalculateSplit[0]);
  2334. //var DesignNo = split[i].replace(new RegExp("^[0-9]*$"), split[i]);
  2335. var DesignNo = split[i].split("'");
  2336. split[i] = DesignNo[0];
  2337. }
  2338. else
  2339. {
  2340. return;
  2341. }
  2342. }
  2343. var sEndDate = ds_data_itemvalue.getColumn(0, split[1]);
  2344. var sStartDate = ds_data_itemvalue.getColumn(0, split[2]);
  2345. if(!utlf_isNull(sEndDate) && !utlf_isNull(sStartDate))
  2346. {
  2347. var returnvalue = utlf_diffDate(sStartDate, sEndDate);
  2348. if(!utlf_isNull(returnvalue))
  2349. {
  2350. return returnvalue;
  2351. }
  2352. else
  2353. {
  2354. return null;
  2355. }
  2356. }
  2357. else
  2358. {
  2359. return null;
  2360. }
  2361. }
  2362. //제곱근 계산
  2363. function sqrt(value){
  2364. if(utlf_isNull(value))
  2365. return NaN;
  2366. return Math.sqrt(value);
  2367. }
  2368. //자연로그 계산
  2369. function ln(value){
  2370. if(utlf_isNull(value))
  2371. return NaN;
  2372. return Math.log(value);
  2373. }]]></Script>