SMMNW040.js 167 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526
  1. /*
  2. (SMMNW04000_중증도.xrw - JScript )
  3. - Version :
  4. 1) : Ver.1.00.01
  5. */
  6. var xRecInfo = '/root/main/recgrup/recinfo';
  7. var xRecMasterPath = "/root/main/recgrup/recgruplist"; //중증도기록마스터
  8. var xRecDetailPath = "/root/main/recdetailgrup/recdetailgruplist"; //중증도상세내역
  9. var xRecPntPath = "/root/main/recpntgrup/recpntlist"; //중증도상세점수
  10. var xRecDetailBKPath = "/root/temp/histgrup/histgruplist"; //중증도상세내역 hidden
  11. var recMCurRow = 0; //기록마스터에 현재 선택된 row index
  12. var instUseYN = "N";//JCI적용여부 20100430 김홍점
  13. var instUseYNcdnm = "";//JCI적용여부 20100430 김홍점
  14. var patRow = "";
  15. var recRow = "";
  16. var sAllSignSave = false;
  17. /*
  18. var icuArr = new Array(4);//중환자실리스트 하드코딩
  19. icuArr[0] = '3060100000';//내과중환자실
  20. icuArr[1] = '3060200000';//외과중환자실
  21. icuArr[2] = '3060300000';//신경외과중환자실
  22. icuArr[3] = '3060400000';//순환기계중환자실
  23. icuArr[4] = '3060600000';//2층중환자실
  24. */
  25. //응급의료센터 관련 변수_경북대 (2011.03.14 Ahn)
  26. var eERDEPTCD = "";
  27. var eERFLAG = "";
  28. // 환자정보 그리드 관련 색 (2011.03.30)
  29. var red = "#ff0000";
  30. var yellow = "#ffff00";
  31. var indigo = "#333399";
  32. var white = "#ffffff";
  33. /**
  34. * 20080820
  35. * 분류가 선택될때마다 hidden으로 분류군정보를 로드함(인증저장시 필요함)
  36. */
  37. function fLoadBsPnt(totpnt){
  38. var clsflag = model.getValue('/root/cond/clsflag'); //분류구분
  39. var execdt = model.getValue('/root/cond/execdd'); //기록일자
  40. var maddchk01 = model.getValue('/root/cond/maddchk01');
  41. var maddchk02 = model.getValue('/root/cond/maddchk02');
  42. var maddchk03 = model.getValue('/root/cond/maddchk03');
  43. var maddchk04 = model.getValue('/root/cond/maddchk04');
  44. var haddchk = model.getValue('/root/cond/haddchk');
  45. var haddchk01 = model.getValue('/root/cond/haddchk01');
  46. var dinfo = maddchk01+maddchk02+maddchk03+maddchk04+haddchk+haddchk01;
  47. if ( model.getValue("/root/cond/agechk") == "Y" ){
  48. bspntnm = instUseYNcdnm
  49. return bspntnm;
  50. }else {
  51. model.removenode('/root/send');
  52. model.makeValue('/root/send/bspnt/clsflag', clsflag);
  53. model.makeValue('/root/send/bspntgrup/execdt', execdt);
  54. model.makeValue('/root/send/bspntgrup/totpnt', totpnt);
  55. model.makeValue('/root/send/bspntgrup/dinfo', dinfo);
  56. if(submit('TRMNW04014')){
  57. var bspntnm = model.getValue('/root/hidden/bspnt/bspntinfo/bspntnm');
  58. return bspntnm;
  59. }else{
  60. messageBox('중증군조회를', 'E009');
  61. return;
  62. }
  63. }
  64. }
  65. /**
  66. * @group :
  67. * @ver : 2007.12.04
  68. * @by : 신혁춘
  69. * @---------------------------------------------------
  70. * @type : function
  71. * @access : public
  72. * @desc : 중증도 시작시 병동, 병실, 환자정보 조회
  73. * @param :
  74. * @return :
  75. * @---------------------------------------------------
  76. */
  77. function fInit(){
  78. //debugger;
  79. //환자정보 조회
  80. //var sPamInfo = getGlobalVariable("paminfo");
  81. //if(sPamInfo == ""){
  82. // messageBox("환자를 먼저","C002");
  83. // window.close();
  84. // return;
  85. //}
  86. //사용자 직급구분에 따른 화면 제어 플래그 설정
  87. sJobKindCD = getUserInfo("jobkindcd"); // 직급코드
  88. //---------(20101204) 경북대
  89. //추가
  90. var ssflag = "";
  91. if(getUserInfo("dutplceinstcd") != '032' && getUserInfo("dutplceinstcd") != '031') {
  92. //경북대가 아니면
  93. if( sJobKindCD == "0330" || sJobKindCD == "0310"){
  94. ssflag = "Y";
  95. } else {
  96. ssflag = "N";
  97. }
  98. } else if(getUserInfo("dutplceinstcd") == '032' || getUserInfo("dutplceinstcd") == '031') {
  99. //경북대이면 03%로 체크한다.
  100. if( sJobKindCD.substring(0, 2) == "03"){
  101. ssflag = "Y";
  102. } else {
  103. ssflag = "N";
  104. }
  105. }
  106. //----------------------------
  107. //응급의료센터 부서코드 추출_ 경북대 (2011.03.14 Ahn)
  108. model.makeValue("/root/send/cdgrupid", "'002'");
  109. model.makeValue("/root/send/srchdd" , getCurrentDate()); // 조회기준일자
  110. if(submit("TRMNW00001", false)){
  111. eERDEPTCD = model.getvalue("/root/code/codeinfo/codelist[cdgrupid='002']/cdid");
  112. }
  113. //원본:의사의 경우만
  114. //if(sJobKindCD == "0330" || sJobKindCD == "0310" ){
  115. if(ssflag=="Y") {
  116. //---------(20101204) 경북대
  117. button4.visible = false;
  118. }else{
  119. button4.visible = true;
  120. }
  121. var pCode = "'199','055','W02','052','T49','T98'"; // 중증도위험사정에서 낙상 나이별 고위험군 지정 적용여부 FOR JCI
  122. fGetNursHardCdInfo(pCode, getCurrentDate());
  123. instUseYN = model.getValue("/root/code/codeinfo/codelist[cdgrupid ='199' and cdnm = 'Y']/cdnm");//cdid 가 1: 낙상소아 2:낙상성인 (Morse Scale)
  124. var pid = "";
  125. var wardcd = "";
  126. var roomcd ="";
  127. // 응급실-구역정보 (2011.03.14 Ahn)
  128. var sectioncd ="";
  129. // 추가 (2011.03.29 Ahn)
  130. var sexage = "";
  131. var patnm = "";
  132. var age = "";
  133. //중증도 기록에서 사용하는 부서코드 조회_20090414_SMY추가
  134. submit("TRMNW04001");
  135. //라디오버튼 디폴트 선택
  136. wardcd = getUserInfo("dutplcecd");
  137. fChangeWardByRadio(wardcd);
  138. ipt_indate.value = getCurrentDate();// 수행일에 현재날짜(디폴트);
  139. ipt_time.value = getCurrentDateTime().substring(9,13);//수행시간
  140. // 상단정보 세팅
  141. var sPamInfo = getGlobalVariable("paminfo");
  142. if ( !isNull(sPamInfo) ){
  143. setCSVToNode("/root/main/paminfo",sPamInfo,"pamlist");
  144. pid = model.getValue("/root/main/paminfo/pamlist/pid");
  145. wardcd = model.getValue("/root/main/paminfo/pamlist/wardcd");
  146. roomcd = model.getValue("/root/main/paminfo/pamlist/roomcd");
  147. // 응급실 - 구역컬럼 추가 (2011.03.14 Ahn)
  148. sectioncd = model.getValue("/root/main/paminfo/pamlist/sectioncd");
  149. // 추가 (2011.03.29 Ahn)
  150. sexage = model.getValue("/root/main/paminfo/pamlist/sex") + "/" + model.getValue("/root/main/paminfo/pamlist/age");
  151. patnm = model.getValue("/root/main/paminfo/pamlist/hngnm2");
  152. age = model.getValue("/root/main/paminfo/pamlist/age");
  153. }
  154. // 응급실일 경우 (2011.03.14 Ahn)
  155. fGetWardChngInfo("Y", wardcd, sectioncd);
  156. //상단정보있을때 병동, 병실, 환자명, pid 세팅
  157. if( !isNull(pid)){
  158. opt_pid.value = pid;
  159. // 추가 (2011.03.29 Ahn)
  160. opt_sexage.value = sexage;
  161. opt_patnm.value = patnm;
  162. opt_age.value = age;
  163. //상단환자가 퇴원환자일경우
  164. if(model.getValue("/root/main/paminfo/pamlist/dschdd") != "99991231"){
  165. fGetICUList(); //중환자실리스트 조회
  166. fSetICUInOutFlag(pid, wardcd); //중환자실당일입퇴실여부
  167. model.setValue("/root/cond/patnm",patnm );
  168. model.setValue("/root/cond/sexage",sexage );
  169. model.setValue("/root/cond/age",age );
  170. //수행일시 초기화값 세팅
  171. model.setValue('/root/cond/execdd', getCurrentDate());
  172. model.setValue('/root/cond/exectm', getCurrentTime().substring(0, 4));
  173. model.setValue('/root/cond/execnm', getUserInfo("usernm"));
  174. model.removenode(xRecMasterPath); //기록마스터리셋
  175. model.removenode('/root/main/recpntgrup/recpntlist'); //상세점수리셋
  176. model.removenode('/root/main/recdetailgrup/recdetailgruplist'); //상세내역리셋
  177. fSearchPatList();//pid가 입력된 경우에는 중증도내역, 상세점수, 상세내역 모두조회
  178. return;
  179. } else {
  180. //20080827 dhkim 추가
  181. fGetICUList(); //중환자실리스트 조회
  182. fSetICUInOutFlag(pid, wardcd); //중환자실당일입퇴실여부
  183. }
  184. }
  185. //if(eERFLAG == "Y"){
  186. fGetWard(); //병동 조회
  187. cmb_ward.value = wardcd;
  188. fGetRoom(); //병실 검색
  189. fmisetting(); //내환자 세팅 조회
  190. //if(!isNull(roomcd)){
  191. // cmb_room.value = roomcd;
  192. //}
  193. if(eERFLAG == "Y"){ // 응급실 환자 조회 (2011.03.15 Ahn)
  194. fGetCareComPatList(cmb_ward.value, cmb_room.value, cmb_zone.value);
  195. } else {
  196. fGetPatient(); //환자검색
  197. }
  198. //}else{
  199. //}
  200. //수행일시 초기화값 세팅
  201. model.setValue('/root/cond/execdd', getCurrentDate());
  202. model.setValue('/root/cond/exectm', getCurrentTime().substring(0, 4));
  203. model.setValue('/root/cond/execnm', getUserInfo("usernm"));
  204. model.removenode(xRecMasterPath); //기록마스터리셋
  205. model.removenode('/root/main/recpntgrup/recpntlist'); //상세점수리셋
  206. model.removenode('/root/main/recdetailgrup/recdetailgruplist'); //상세내역리셋
  207. fSearchPatList(); //pid가 입력된 경우에는 중증도내역, 상세점수, 상세내역 모두조회
  208. model.refresh();
  209. }
  210. /**
  211. * @author : dhkim
  212. * @create : 20080829
  213. * @desc :해당환자가 중환자실당일입실환자인지,
  214. 당일퇴실환자인지 여부에 따라 조회조건의 중증도 구분을 변경
  215. 1.중환자실환자인지 체크
  216. 2.중환자실 당일퇴실환자인지 체크(퇴원예고포함)
  217. 해당환자면 조회조건의 중증도구분을 중환자실퇴실로 선택상태변경
  218. 3.중환자실 당일입실환자인지 체크
  219. 해당환자면 조회조건의 중증도구분을 중환자실입실로 선택상태변경
  220. */
  221. function fSetICUInOutFlag(pid, wardcd){
  222. var icuYn = 'N';
  223. /*
  224. //중환자실 환자인지 여부를 조회
  225. for(var i = 0; i < icuArr.length; i++){
  226. if(wardcd == icuArr[i]){
  227. icuYn = 'Y';
  228. break;
  229. }
  230. }
  231. */
  232. //중증도 기록에서 사용하는 부서코드 조회_20090414_SMY추가
  233. for(i = 1; i <= getNodesetCount("/root/init/icucdgrup/icucdgruplist"); i++){
  234. if(wardcd == model.getValue("/root/init/icucdgrup/icucdgruplist[" + i + "]/wardcd")
  235. && model.getValue("/root/init/icucdgrup/icucdgruplist[" + i + "]/clsflag") == '4'){
  236. icuYn = 'Y';
  237. break;
  238. }
  239. }
  240. //중환자실 환자일경우만 입퇴실여부체크
  241. if(icuYn == 'Y'){
  242. //입실, 퇴실여부
  243. model.removenode('/root/send');
  244. model.makeValue('/root/send/pid', pid);
  245. model.makeValue('/root/send/wardcd', wardcd);
  246. if(submit('TRMNW04015')){
  247. /*
  248. var icuOutYn = model.getValue('/root/hidden/icuinout/icuinoutinfo/outyn');
  249. var icuInYn = model.getValue('/root/hidden/icuinout/icuinoutinfo/inyn');
  250. if(icuOutYn == 'Y'){
  251. model.setValue('/root/cond/clsflag', '7');//중환자실퇴실
  252. }else if(icuInYn == 'Y'){
  253. model.setValue('/root/cond/clsflag', '6');//중환자실입실
  254. }else{
  255. model.setValue('/root/cond/clsflag', '4');//중환자실
  256. }
  257. */
  258. model.setValue('/root/cond/clsflag', '4');//중환자실
  259. model.refresh();
  260. }
  261. }
  262. }
  263. /**
  264. * @author : dhkim
  265. * @create : 20080827
  266. * @desc : 병동리스트중 중환자실리스트만 조회해 hidden시킴.
  267. * 중환자실 구분 없음.. 하드코딩 .. → '3060100000','3060200000','3060300000','3060400000','3060600000'
  268. */
  269. function fGetICUList(){
  270. var wardCnt = getNodesetCount("/root/hidden/wardcdgrup/wardcdgruplist");//ward list 노드 갯수
  271. var wardcd, wardnm ;
  272. model.removenode('/root/temp/signdata/recpntgrup/recpntlist');
  273. model.makeNode('/root/temp/signdata/recpntgrup/recpntlist');
  274. var nodeCnt = 0;
  275. /*
  276. for(var j = 0; j < icuArr.length; j++){
  277. for(var i = 1; i <= wardCnt; i++){
  278. wardcd = model.getValue('/root/hidden/wardcdgrup/wardcdgruplist[' + i + ']/wardcd');
  279. wardnm = model.getValue('/root/hidden/wardcdgrup/wardcdgruplist[' + i + ']/wardnm');
  280. if(wardcd == icuArr[j]){
  281. nodeCnt += 1;
  282. model.makeValue('/root/hidden/icucdgrup/icucdgruplist[' + nodeCnt + ']/cd', wardcd);
  283. model.makeValue('/root/hidden/icucdgrup/icucdgruplist[' + nodeCnt + ']/nm', wardnm);
  284. }
  285. }
  286. }
  287. */
  288. //중증도 기록에서 사용하는 부서코드 조회_20090414_SMY추가
  289. for(j = 1; j <= getNodesetCount("/root/init/icucdgrup/icucdgruplist"); j++){
  290. for(var i = 1; i <= wardCnt; i++){
  291. wardcd = model.getValue('/root/hidden/wardcdgrup/wardcdgruplist[' + i + ']/wardcd');
  292. wardnm = model.getValue('/root/hidden/wardcdgrup/wardcdgruplist[' + i + ']/wardnm');
  293. if(wardcd == model.getValue("/root/init/icucdgrup/icucdgruplist[" + j + "]/wardcd")
  294. && model.getValue("/root/init/icucdgrup/icucdgruplist[" + j + "]/clsflag") == '4'){
  295. nodeCnt += 1;
  296. model.makeValue('/root/hidden/icucdgrup/icucdgruplist[' + nodeCnt + ']/cd', wardcd);
  297. model.makeValue('/root/hidden/icucdgrup/icucdgruplist[' + nodeCnt + ']/nm', wardnm);
  298. }
  299. }
  300. }
  301. }
  302. /**
  303. * @author : dhkim
  304. * @create : 20080827
  305. * @desc : 해당환자가 중환자실 환자인가?
  306. * @return : boolean (true/false)
  307. */
  308. function fIsICUPatient(wardcd){
  309. var ret = false;//icu 환자인지 여부 디폴트
  310. /*
  311. for(var i = 0; i < icuArr.length ; i++){
  312. if(wardcd == icuArr[i]){
  313. ret = true;
  314. return true;
  315. }
  316. }
  317. */
  318. //중증도 기록에서 사용하는 부서코드 조회_20090414_SMY추가
  319. for(i = 1; i <= getNodesetCount("/root/init/icucdgrup/icucdgruplist"); i++){
  320. if(wardcd == model.getValue("/root/init/icucdgrup/icucdgruplist[" + i + "]/wardcd")
  321. && model.getValue("/root/init/icucdgrup/icucdgruplist[" + i + "]/clsflag") == '4'){
  322. ret = true;
  323. return true;
  324. }
  325. }
  326. return ret;
  327. }
  328. /**
  329. * @author : dhkim
  330. * @desc : 병동값 value changed 됐을때 병동별 분류구분 라디오버튼 변경(default)
  331. */
  332. function fChangeWardByRadio(wardcd){
  333. /*
  334. var clsflag = '1';
  335. switch (wardcd){
  336. case "3050122000" : clsflag = "5" ; break; //10층동병동(정신과병동)
  337. case "2110201000" : clsflag = "2" ; break; //신생아중환자실(신생아ICU)
  338. case "3060000000" : clsflag = "4" ; break; //중환자실
  339. case "3060600000" : clsflag = "4" ; break; //2층중환자실
  340. case "3060400000" : clsflag = "4" ; break; //순환기계중환자실
  341. case "3060300000" : clsflag = "4" ; break; //신경외과중환자실
  342. case "3060200000" : clsflag = "4" ; break; //외과중환자실
  343. case "3060100000" : clsflag = "4" ; break; //내과중환자실
  344. default : clsflag = "1" //default는 일반병동임.
  345. }
  346. */
  347. //중증도 기록에서 사용하는 부서코드 조회_20090414_SMY추가
  348. var clsflag = "1";
  349. for(i = 1; i <= getNodesetCount("/root/init/icucdgrup/icucdgruplist"); i++){
  350. if(wardcd == model.getValue("/root/init/icucdgrup/icucdgruplist[" + i + "]/wardcd")){ // 중환자실이면
  351. if(wardcd == model.getvalue("/root/code/codeinfo/codelist[cdgrupid='052']/cdid")){ // 신생아중환자실이면
  352. clsflag = '2';
  353. } else {
  354. clsflag = model.getValue("/root/init/icucdgrup/icucdgruplist[" + i + "]/clsflag");
  355. }
  356. }
  357. }
  358. if (clsflag == '1') {
  359. if(wardcd == model.getvalue("/root/code/codeinfo/codelist[cdgrupid='W02']/cdid")){ // 302병동이면
  360. clsflag = '5'
  361. } else if(wardcd == model.getvalue("/root/code/codeinfo/codelist[cdgrupid='055']/cdid")){ // 인공신장실이면
  362. clsflag = '3'
  363. } else {
  364. clsflag = '1';
  365. }
  366. }
  367. //인공신장실에서 메뉴 띄울 경우 혈액투석 셋팅_20090211_SMY추가
  368. //인공신장실 혈액투석간호기록에서 화면 연동시 parma추가-kys-20100412
  369. if(getScreenMenuParameter() == "SMMND" || opener.javascript.getParameter("SMMND00700_param_dial") == "dialrec"){
  370. clsflag = "3";
  371. }
  372. model.setValue('/root/cond/recflag', '1');
  373. model.setValue('/root/cond/clsflag', clsflag);
  374. }
  375. /**
  376. * @group :
  377. * @ver : 2007.12.04
  378. * @by : 신혁춘
  379. * @---------------------------------------------------
  380. * @type : function
  381. * @access : public
  382. * @desc : 중증도 병동 검색
  383. * @param :
  384. * @return :
  385. * @---------------------------------------------------
  386. */
  387. function fGetWard(){
  388. model.removeNodeset("/root/send");
  389. submit("TRMNW04003"); //병동 조회
  390. }
  391. /**
  392. * @group :
  393. * @ver : 2007.12.04
  394. * @by : 신혁춘
  395. * @---------------------------------------------------
  396. * @type : function
  397. * @access : public
  398. * @desc : 중증도 병실 검색
  399. * @param :
  400. * @return :
  401. * @---------------------------------------------------
  402. */
  403. function fGetRoom(flag){
  404. model.removeNodeset("/root/send");
  405. model.makeValue("/root/send/wardcd",model.getValue("/root/cond/wardcd"));
  406. var setchk = model.getValue("/root/main/cond/settingrnid");
  407. submit("TRMNW04008"); //병실 조회
  408. addComboItem("cmb_room", "전체", "", "above");
  409. }
  410. /**
  411. * @group :
  412. * @ver : 2007.12.04
  413. * @by : 신혁춘
  414. * @---------------------------------------------------
  415. * @type : function
  416. * @access : public
  417. * @desc : 중증도 환자 검색
  418. * @param :
  419. * @return :
  420. * @---------------------------------------------------
  421. */
  422. function fGetPatient(){
  423. model.removeNodeset("/root/send");
  424. model.makeValue("/root/send/wardcd",model.getValue("/root/cond/wardcd"));
  425. model.makeValue("/root/send/roomcd",model.getValue("/root/cond/roomcd"));
  426. model.makeValue("/root/send/pid",model.getValue("/root/cond/pid"));
  427. submit("TRMNW04009"); //환자 조회
  428. }
  429. /**
  430. * @ver : 2008.06.20
  431. * @author : dhkim
  432. * @---------------------------------------------------
  433. * @type : function
  434. * @access : public
  435. * @param :
  436. * @return :
  437. * @desc : 그리드 환자정보 리스트 조회
  438. * @---------------------------------------------------
  439. */
  440. function fSearchPatList(flag){
  441. var wardcd = model.getValue(cmb_ward.attribute('ref'));
  442. var roomcd = model.getValue(cmb_room.attribute('ref'));
  443. var pid = "";
  444. if(flag != "Srch"){
  445. if(eERFLAG=="Y"){ // 응급실 (2011.03.15 Ahn)
  446. pid = cmb_erpat.value;
  447. }else{
  448. pid = model.getValue(cmb_pid.attribute('ref'));
  449. }
  450. }
  451. var onlyPatSrch = "N";
  452. if (flag == "Srch"){
  453. // 구분 값 동기화 조회구분 -> 라디오구분(2011.04.01 Ahn)
  454. var recsrchflag = model.getValue('/root/cond/recsrchflag');
  455. var selRecFlag = fGetMinSrchFlag(recsrchflag); // 분류구분 중 우선순위 값 가져오기
  456. if(selRecFlag == 1){
  457. model.setValue("/root/cond/clsflag", 1);
  458. model.setValue("/root/cond/recflag", 1);
  459. }
  460. else if(selRecFlag == 2){
  461. model.setValue("/root/cond/clsflag", 9);
  462. model.setValue("/root/cond/recflag", 2);
  463. }
  464. else if(selRecFlag == 3){
  465. model.setValue("/root/cond/clsflag", 10);
  466. model.setValue("/root/cond/recflag", 3);
  467. }
  468. else if(selRecFlag == 4) {
  469. model.setValue("/root/cond/clsflag", 11);
  470. model.setValue("/root/cond/recflag", 4);
  471. }
  472. else{
  473. //messageBox('최소 한개 선택은 필수', 'I009');
  474. model.setValue("/root/cond/clsflag", "");
  475. onlyPatSrch = "Y";
  476. //event.defaultAction = "cancel";
  477. //return;
  478. }
  479. }else if (flag == "Sel"){
  480. // 구분 값 동기화 라디오 구분 -> 조회구분
  481. var selClsFlag = model.getValue('/root/cond/clsflag');
  482. //var selRecFlag = fGetMinSrchFlag(recsrchflag); // 분류구분 중 우선순위 값 가져오기
  483. if(parseInt(selClsFlag) < 8){
  484. model.setValue('/root/cond/recsrchflag', 1);
  485. model.setValue('/root/cond/recflag', 1);
  486. //recflag = "1";//중증도
  487. }else if(parseInt(selClsFlag) >= 8 && parseInt(selClsFlag) < 10){
  488. model.setValue('/root/cond/recsrchflag', 2);
  489. model.setValue('/root/cond/recflag', 2);
  490. //recflag = "2";//낙상
  491. }else if(parseInt(selClsFlag) == 10){
  492. model.setValue('/root/cond/recsrchflag', 3);
  493. model.setValue('/root/cond/recflag', 3);
  494. //recflag = "3";//욕창
  495. }else if(parseInt(selClsFlag) == 11){
  496. model.setValue('/root/cond/recsrchflag', 4);
  497. model.setValue('/root/cond/recflag', 4);
  498. //alert("통증기록 관련 개발중입니다!!");
  499. //messageBox('관련 화면 준비중', 'I009');
  500. //modal("SMMNW04800",1, event.screenX-200, event.screenY+50); //통증관리기록 화면 호출
  501. //messageBox('통증위험 사정구분을 선택하십시오', 'I');
  502. //modal("SMMNW04800",1); //통증관리기록 화면 호출
  503. //model.refresh();
  504. //return;
  505. //recflag = "1";//default
  506. }
  507. }
  508. var clsflag = model.getValue('/root/cond/clsflag');
  509. var recflag = model.getValue('/root/cond/recflag');
  510. var settingrnid = model.getValue('/root/cond/settingrnid');//내환자
  511. //20080820 주석처리
  512. //var bloodioflag = model.getValue('/root/cond/bloodioflag');//혈액투석외래입원구분 2008.08.07 dhkim 추가
  513. //default 세팅
  514. if(wardcd == null || wardcd == ''){
  515. //wardcd = '-'; //20090319_SMY_주석처리함
  516. }
  517. if(recflag == null || recflag == ''){
  518. recflag = '1';
  519. }
  520. if(clsflag == null || clsflag == ''){
  521. clsflag = '1';
  522. }
  523. //캡션을 라디오 구분에 따라 변경
  524. fChangeCaption(clsflag);
  525. //환자정보 그리드의 컬럼을 라디오구분에 따라 변경
  526. fChangeGridColumn(clsflag);
  527. //혈액투석선택일 경우 조회조건clear
  528. if(clsflag == '3'){
  529. wardcd = '';
  530. roomcd = '';
  531. //pid = '';
  532. /* 20080820 주석처리
  533. if(bloodioflag == ''){
  534. bloodioflag = 'I';//default
  535. model.setValue('/root/cond/bloodioflag', bloodioflag);
  536. }
  537. */
  538. }
  539. //선택된 분류구분 라디오버튼 코드에 따라 실제 입력할 clsflag, recflag 값을 설정해준다.
  540. if(Number(clsflag) < 8){
  541. recflag = '1';//중증도
  542. }else if(Number(clsflag) >= 8 && Number(clsflag) < 10){
  543. recflag = '2';//낙상
  544. if ( model.getValue("/root/cond/agechk") == "Y" ){
  545. model.setValue("/root/cond/agechk", "N" );
  546. //bool_agechk.dispatch("xforms-value-changed");
  547. }
  548. }else if(Number(clsflag) == 10){
  549. recflag = '3';//욕창
  550. }else if(Number(clsflag) == 11){ // 통증 추가 (2011.03.31 Ahn)
  551. recflag = '4';//통증
  552. }else{
  553. recflag = '1';//default
  554. }
  555. //조회조건의 recflag, clsflag값을 재설정한다.
  556. model.setValue('/root/cond/wardcd', wardcd);
  557. model.setValue('/root/cond/roomcd', roomcd);
  558. //model.setValue('/root/cond/pid', pid);
  559. //model.setValue('/root/cond/recflag', recflag);
  560. //model.setValue('/root/cond/clsflag', clsflag);
  561. //alert('recflag : ' + recflag + ', clsflag : ' + clsflag);
  562. //조회전 instance 설정
  563. model.removenode('/root/send');
  564. model.makeNode('/root/send');
  565. model.copyNode('/root/send', '/root/cond');
  566. var cretno = "";
  567. var dschdd ="";
  568. if ( !isNull(pid) && pid == model.getValue("/root/main/paminfo/pamlist/pid") ){
  569. cretno= model.getValue("/root/main/paminfo/pamlist/cretno");
  570. dschdd = model.getValue("/root/main/paminfo/pamlist/dschdd")
  571. }else if (!isNull(pid) && !isNull(model.getValue("/root/hidden/patientgrup/patientgruplist[pid='"+ pid +"']/dschdd") ) ){
  572. cretno= model.getValue("/root/hidden/patientgrup/patientgruplist[pid='"+ pid +"']/cretno")
  573. dschdd = model.getValue("/root/hidden/patientgrup/patientgruplist[pid='"+ pid +"']/dschdd");
  574. }else {
  575. dschdd = "99991231";
  576. }
  577. model.makeValue('/root/send/cretno', cretno);
  578. model.makeValue('/root/send/dschdd', dschdd);
  579. model.removenode('/root/main/patinfo');
  580. model.makeNode('/root/main/patinfo');
  581. //중증마스터, 상세점수, 상세내역, 상세설명의 현재instance를 remove한다.
  582. model.removenode('/root/main/recgrup');
  583. model.removenode('/root/main/recpntgrup');
  584. model.removenode('/root/main/recdetailgrup');
  585. model.removenode('/root/main/tar_desccnts');
  586. model.refresh();
  587. // 응급실 환자정보 flag 삽입 (2011.03.15 ahn)
  588. model.makeValue('/root/send/erflag', eERFLAG);
  589. // 응급실 환자 구역정보 삽입 (2011.03.15 ahn)
  590. model.makeValue('/root/send/zonecd', cmb_zone.value);
  591. //환자정보 그리드 리스트 조회
  592. if(!submit('TRMNW04004')){
  593. messageBox('환자정보 조회를', 'E009');//실패하였습니다.
  594. return;
  595. }else{
  596. //기록마스터리셋
  597. model.removenode(xRecMasterPath);
  598. //상세점수리셋
  599. model.removenode('/root/main/recpntgrup/recpntlist');
  600. //상세내역리셋
  601. model.removenode('/root/main/recdetailgrup/recdetailgruplist');
  602. //2008.08.05 dhkim 추가
  603. //pid가 입력된 경우에는 환자정보에 해당 pid의 환자에 포커스 이동과 동시에 중증도 내역 자동조회
  604. if(pid != ''){
  605. for(var i = 1; i < grd_patinfo.rows; i++){
  606. if(model.getValue('/root/main/patinfo/patlist[' + i + ']/pid') == pid ){
  607. grd_patinfo.row = i+1;
  608. break;
  609. }
  610. }
  611. // 조회구분이 아무것도 선택되지 않은 경우
  612. if(onlyPatSrch != "Y"){
  613. //중증도/낙상/욕창 내역 조회(grd_recmaster)
  614. fSearchRecMaster(grd_patinfo.row, recflag);
  615. }
  616. }
  617. }
  618. // 그리드 재구성 (2011.03.30 Ahn)
  619. fSetPatGrid(grd_patinfo, "Pat");
  620. if( !isNull(pid)){
  621. if( dschdd != "99991231"){
  622. //otp_dsch.visible = true;
  623. cmb_pid.visible =false;
  624. cmb_ward.disabled = true;
  625. cmb_room.disabled = true;
  626. cmb_erpat.visible = false;
  627. //ipt_pid.disabled = true;
  628. model.refresh();
  629. }
  630. }
  631. /*
  632. // 환자가 한명일 경우 row 선택 해제 (색깔 관련)
  633. if(grd_patinfo.row == 2){
  634. grd_patinfo.row = 0;
  635. }
  636. */
  637. }
  638. /**
  639. * @group :
  640. * @ver : 2007.12.05 신혁춘
  641. * 2008.06.09 dhkim 수정
  642. * @by : dhkim
  643. * @---------------------------------------------------
  644. * @type : function
  645. * @access : public
  646. * @param : curRow - 현재 선택된 그리드의 행 인덱스, pFlag : save 저장후 재조회할경우 상단 수행일자는 첫번째행의 날짜로 세팅한다.
  647. * @return :
  648. * @desc : 환자정보 그리드 더블클릭 이벤트 발생시 호출됨
  649. * 중증도 구분에 따른 중증도/낙상/욕창 내역 조회
  650. * [임의 코드 부여 clsflag]
  651. * (1) 중증도 구분
  652. * 1: 일반병동
  653. * 2: 신생아 ICU
  654. * 3: 혈액투석
  655. * 4: 중환자실
  656. * 5: 정신과병동
  657. * 10: 중환자실입실(실제 flag는 4(중환자실)로 넘기나 당일 중환자실 입실환자만 조회
  658. * 11: 중환자실퇴실(실제 flag는 4(중환자실)로 넘기나 당일 중환자실 퇴실환자만 조회
  659. * (2) 낙상위험사정구분
  660. * 7: 소아
  661. * 8: 성인 -> Morse Scale
  662. * (3) 욕창위험사정구분 (욕창 -> Braden Scale)
  663. * 9: 욕창(욕창위험사정구분)
  664. *
  665. * *2008.08.05 dhkim 추가
  666. * 해당환자의 입원일자 이전으로 수행일자를 기록하려고 할때에는 blocking처리
  667. * @---------------------------------------------------
  668. */
  669. function fSearchRecMaster(curRow,pFlag){
  670. //혈액투석의 경우 입원환자 더블클릭 할때에 조회조건에 기본 조회값을 세팅해야함.
  671. //혈액투석의 경우 외래환자 더블클릭은 조회조건 비활성화
  672. var clsflag = model.getValue('/root/cond/clsflag');//분류구분
  673. var recflag = model.getValue('/root/cond/recflag');//기록구분
  674. // var ioflag = model.getValue('/root/main/paminfo/pamlist/ioflag'); //외래/입원구분
  675. // var pid = model.getValue('/root/main/paminfo/pamlist/pid'); //등록번호
  676. // var indd = model.getValue('/root/main/paminfo/pamlist/indd'); //입원일자
  677. // var histstat = model.getValue('/root/main/paminfo/pamlist/histstat'); //이력상태
  678. // var cretno = model.getValue('/root/main/paminfo/pamlist/cretno'); //생성번호
  679. // var seqno = model.getValue('/root/main/paminfo/pamlist/seqno'); //이력번호
  680. // var hngnm = model.getValue('/root/main/paminfo/pamlist/hngnm'); //환자명
  681. var ioflag = model.getValue("/root/main/patinfo/patlist[" + (curRow-1) + "]/ioflag"); //외래/입원구분
  682. var pid = model.getValue("/root/main/patinfo/patlist[" + (curRow-1) + "]/pid"); //등록번호
  683. var indd = model.getValue("/root/main/patinfo/patlist[" + (curRow-1) + "]/indd"); //입원일자
  684. var histstat = model.getValue("/root/main/patinfo/patlist[" + (curRow-1) + "]/histstat"); //이력상태
  685. var cretno = model.getValue("/root/main/patinfo/patlist[" + (curRow-1) + "]/cretno"); //생성번호
  686. var seqno = model.getValue("/root/main/patinfo/patlist[" + (curRow-1) + "]/seqno"); //이력번호
  687. var hngnm = model.getValue("/root/main/patinfo/patlist[" + (curRow-1) + "]/hngnm"); //환자명
  688. var execdd = model.getValue('/root/cond/execdd'); //수행일자
  689. var exectm = model.getValue('/root/cond/exectm'); //수행시간
  690. if(execdd == null || execdd == ''){
  691. execdd = getCurrentDate();
  692. }
  693. if(exectm == null || exectm == ''){
  694. exectm = getCurrentTime().substring(0, 4);
  695. }
  696. /********************************************************
  697. //화면 오픈시 상단에 환자 셋팅하지 않은 경우 저장 후에도 환자정보가 전체리스트로 조회되어야 함_중증도 조회조건에 셋팅하지 않음_20090211_SMY
  698. if(pid != '' && model.getValue('/root/cond/pid') == ''){
  699. model.setValue('/root/cond/pid', pid);//환자선택됐을때 조회조건에 등록번호 세팅
  700. }
  701. **********************************************************/
  702. //2008.08.05 dhkim
  703. //해당환자의 입원일자 이전으로 수행일자를 기록하려고 할때에는 blocking처리
  704. //20080820 외래환자의 경우 메세지 변경
  705. /*
  706. if(execdd < indd){
  707. var msgStr = '기록하시려는 일자(';
  708. msgStr += execdd.substring(0,4) + '-' + execdd.substring(4, 6) + '-' + execdd.substring(6);
  709. if(ioflag == 'O'){
  710. msgStr += ')는 환자의 예약일자(';
  711. }else{
  712. msgStr += ')는 환자의 입원일자(';
  713. }
  714. msgStr += indd.substring(0,4) + '-' + indd.substring(4, 6) + '-' + indd.substring(6);
  715. msgStr += ') 이전일자가 될 수';
  716. messageBox(msgStr, 'I004');
  717. return;
  718. }
  719. */
  720. //20081014 i/o조건값 cond 노드에 setting
  721. model.removenode('/root/cond/ioflag');
  722. model.makeValue('/root/cond/ioflag', ioflag);
  723. model.refresh();
  724. //혈액투석외래환자의 경우 조회조건을 비활성화 처리
  725. fDisabledSearchArea(clsflag, ioflag);
  726. /********************************************************
  727. //화면 오픈시 상단에 환자 셋팅하지 않은 경우 저장 후에도 환자정보가 전체리스트로 조회되어야 함_중증도 조회조건에 셋팅하지 않음_20090211_SMY
  728. if(clsflag == '3'){
  729. //혈액투석외래환자의 경우 조회조건에 pid만 세팅, 입원환자의 경우 wardcd, roomcd, pid 세팅
  730. fSetSearchCondition(clsflag, ioflag);//조회조건 세팅
  731. }
  732. **********************************************************/
  733. //중증도 마스터내역을 조회한다.
  734. model.removenode('/root/send');
  735. model.makeValue('/root/send/clsflag', clsflag);
  736. model.makeValue('/root/send/recflag', recflag);
  737. model.makeValue('/root/send/execdd', execdd);
  738. model.makeValue('/root/send/exectm', exectm);
  739. model.makeValue('/root/send/pid', pid);
  740. model.makeValue('/root/send/indd', indd);
  741. model.makeValue('/root/send/histstat', histstat);
  742. model.makeValue('/root/send/cretno', cretno);
  743. model.makeValue('/root/send/seqno', seqno);
  744. model.makeValue('/root/send/hngnm', hngnm);
  745. model.makeValue('/root/send/ioflag', ioflag);
  746. // 조회구분 추가 (2011.03.31 Ahn)
  747. var recsrchflag = model.getValue('/root/cond/recsrchflag');
  748. model.makeValue('/root/send/recsrchflag', recsrchflag);
  749. // 분류구분 중 우선순위 값 가져오기 (2011.03.31 ahn)
  750. var selRecFlag = fGetMinSrchFlag(recsrchflag);
  751. model.makeValue('/root/send/selrecflag', selRecFlag);
  752. //model.setValue('/root/cond/recflag', selRecFlag); // 상단 라디오체크 분류 set
  753. //model.makeValue('/root/send/recflag', selRecFlag);
  754. //model.makeValue('/root/send/clsflag', selRecFlag ? '2' : '2' model.getValue('/root/cond/clsflag'));
  755. model.removenode('/root/main/recgrup');
  756. model.makeNode('/root/main/recgrup');
  757. //상세점수, 상세내역, 상세설명의 현재instance를 remove한다.
  758. model.removenode('/root/main/recpntgrup');
  759. model.removenode('/root/main/recdetailgrup');
  760. model.removenode('/root/main/tar_desccnts');
  761. model.refresh();
  762. //중증도내역 마스터 조회 후 기록정보 조회
  763. if(!submit('TRMNW04011')){
  764. messageBox('중증도내역의 조회를', 'E009');
  765. return;
  766. }else{
  767. //조회갯수 0일때 조회 후 수행일자, 수행시간, 최근 저장일을 세팅
  768. //var execdd = model.getValue('/root/cond/execdd');
  769. var execdd = model.getValue('/root/cond/copyexecdd');
  770. var exectm = model.getValue('/root/cond/exectm');
  771. //model.getValue(xRecMasterPath + '[' + curRow + ']/stat')
  772. /*
  773. var maxRecFlag = 0;
  774. var maxClsFlag = 0;
  775. for(i=1; i <= getNodesetCount(xRecMasterPath); i++){
  776. if(selRecFlag == model.getValue(xRecMasterPath + '[' + i + ']/recflag')){
  777. maxRecFlag = model.getValue(xRecMasterPath + '[' + i + ']/recflag');
  778. maxClsFlag = model.getValue(xRecMasterPath + '[' + i + ']/clsflag');
  779. break;
  780. }
  781. }
  782. */
  783. if(pFlag != "4"){
  784. //중증도 마스터를 조회후 수행일자에 해당하는 내역이 없으면 행추가, 있으면 해당 row select
  785. fSetRecMaster(exectm, execdd, pFlag);
  786. //환자정보에 선택한 로우정보 set
  787. //grd_patinfo.row = curRow;
  788. //grd_patinfo.topRow = curRow;
  789. //중증도 상세점수조회
  790. fSearchRecPnt();
  791. }
  792. }
  793. }
  794. /**
  795. * 중증도 마스터를 조회후 가장 우선수행일자, 기록순번에 해당하는 내역이 없으면 행추가, 있으면 해당 row select
  796. */
  797. function fSetRecMaster(exectm, execdd, pFlag){
  798. //model.getValue(xRecMasterPath + '[' + curRow + ']/stat')
  799. var indx = 0;
  800. for(i=1; i <= getNodesetCount(xRecMasterPath); i++){
  801. if((model.getValue(xRecInfo + "/recflag") == model.getValue(xRecMasterPath + '[' + i + ']/recflag')) &&
  802. (model.getValue(xRecInfo + "/clsflag") == model.getValue(xRecMasterPath + '[' + i + ']/clsflag'))){
  803. indx = i;
  804. break;
  805. }
  806. }
  807. //if(grd_recmaster.rows > 1){
  808. if (indx > 0){ // 기록 내역이 존재할 경우 (2011.03.31 Ahn)
  809. /*
  810. var _recseq, _execdd;
  811. var selRow = 0;
  812. for(var i = 1; i < grd_recmaster.rows; i++){
  813. //_exectm = model.getValue(xRecMasterPath + '[' + i + ']/exectm');
  814. _execdd = model.getValue(xRecMasterPath + '[' + i + ']/execdd');
  815. //2008.08.07 dhkim 수정. 날짜로만 체크
  816. //if(exectm == _exectm && execdd == _execdd){
  817. if(execdd == _execdd){ // 수행일자와 같으면서 해당 recflag일 경우
  818. selRow = i;
  819. break;
  820. }
  821. }
  822. if(selRow > 0){
  823. grd_recmaster.row = selRow; //수행일자에 해당하는 row를 선택
  824. }else{
  825. //수행일자에 해당하는 기록이 없으면 상세내역이 update될때 메세지 뿌림.
  826. //2008.08.07 dhkim 수정
  827. //수행일자에 해당하는 기록이 있으면 무조건 가장 최근 행에 포커스 이동.
  828. //grd_recmaster.insertRow("1", "above");
  829. //fSetNewRowRecMaster();
  830. }
  831. */
  832. //수행일자에 해당하는 기록 상관없이 해당 분류구분 중의 가장 첫번째행 포커스로 이동. (2011.04.19 Ahn)
  833. grd_recmaster.row = indx;
  834. if ( pFlag =="save" )
  835. {
  836. if(model.getValue("/root/cond/nextyn") == 'Y'){
  837. model.setValue("/root/cond/execdd", getCurrentDate());
  838. }else{
  839. model.setValue("/root/cond/execdd", grd_recmaster.valueMatrix(grd_recmaster.row,grd_recmaster.colRef("execdd")));
  840. }
  841. }
  842. }else{
  843. //기록된 내역이 한건도 없을때 신규행을 추가
  844. grd_recmaster.addRow();
  845. fSetNewRowRecMaster();
  846. }
  847. if ( instUseYN == "Y" && grp_agechk.visible == true ){
  848. model.setValue("/root/cond/agechk", model.getValue(xRecMasterPath + '[' + grd_recmaster.row + ']/agechk'));
  849. }else {
  850. model.setValue("/root/cond/agechk", "N");
  851. }
  852. }
  853. /**
  854. * @group :
  855. * @ver : 2008.06.23
  856. * @by : dhkim
  857. * @---------------------------------------------------
  858. * @type : function
  859. * @access : public
  860. * @desc : 기록마스터에 행추가후 값 세팅
  861. * @param :
  862. * @return :
  863. * @---------------------------------------------------
  864. */
  865. function fSetNewRowRecMaster(){
  866. var curRow = grd_recmaster.row;
  867. model.setValue(xRecMasterPath + '[' + curRow + ']/execdd', model.getValue('/root/cond/execdd'));//수행일자
  868. model.setValue(xRecMasterPath + '[' + curRow + ']/exectm', model.getValue('/root/cond/exectm'));//수행시간
  869. if (model.getValue(xRecInfo + '/recflag') == '1') var recflagnm = "중증도";
  870. else if (model.getValue(xRecInfo + '/recflag') == '2') var recflagnm = "낙상";
  871. else if (model.getValue(xRecInfo + '/recflag') == '3') var recflagnm = "욕창";
  872. else if (model.getValue(xRecInfo + '/recflag') == '4') var recflagnm = "통증";
  873. model.setValue(xRecMasterPath + '[' + curRow + ']/recflagnm', recflagnm);//기록 분류구분명 추가 (2011.04.01 Ahn)
  874. model.setValue(xRecMasterPath + '[' + curRow + ']/totpnt', 0); //총점
  875. model.setValue(xRecMasterPath + '[' + curRow + ']/execnm', getUserName());//수행자명
  876. model.setValue(xRecMasterPath + '[' + curRow + ']/pid', model.getValue(xRecInfo + '/pid'));//등록번호
  877. model.setValue(xRecMasterPath + '[' + curRow + ']/hngnm', model.getValue(xRecInfo + '/hngnm'));//환자명
  878. model.setValue(xRecMasterPath + '[' + curRow + ']/recflag', model.getValue(xRecInfo + '/recflag'));//기록구분
  879. model.setValue(xRecMasterPath + '[' + curRow + ']/clsflag', model.getValue(xRecInfo + '/clsflag'));//분류구분
  880. model.setValue(xRecMasterPath + '[' + curRow + ']/execkind', 0);//분류구분
  881. model.setValue(xRecMasterPath + '[' + curRow + ']/execid', getUserId());//수행자ID
  882. model.setValue(xRecMasterPath + '[' + curRow + ']/indd', model.getValue(xRecInfo + '/indd'));//입원일자
  883. model.setValue(xRecMasterPath + '[' + curRow + ']/histstat', model.getValue(xRecInfo + '/histstat'));//이력상태
  884. model.setValue(xRecMasterPath + '[' + curRow + ']/cretno', model.getValue(xRecInfo + '/cretno'));//생성번호
  885. model.setValue(xRecMasterPath + '[' + curRow + ']/seqno', model.getValue(xRecInfo + '/seqno'));//이력일련번호
  886. model.setValue(xRecMasterPath + '[' + curRow + ']/stat', 'i');//그리드상태
  887. model.setValue(xRecMasterPath + '[' + curRow + ']/agechk', 'N');//그리드상태
  888. model.refresh();
  889. }
  890. /**
  891. * @group :
  892. * @ver : 2007.12.06
  893. * @by : 신혁춘
  894. * @---------------------------------------------------
  895. * @type : function
  896. * @access : public
  897. * @desc : 상세점수조회 셋팅
  898. * @param :
  899. * @return :
  900. * @---------------------------------------------------
  901. */
  902. function fSearchRecPnt(selflag){
  903. model.setValue("/root/cond/maddchk01",'');
  904. model.setValue("/root/cond/maddchk02",'');
  905. model.setValue("/root/cond/maddchk03",'');
  906. model.setValue("/root/cond/maddchk04",'');
  907. model.setValue("/root/cond/haddchk",'');
  908. model.setValue("/root/cond/maddchk99",'');
  909. model.setValue("/root/cond/haddchk01",'');
  910. group2.refresh();
  911. group4.refresh();
  912. var curRow = grd_recmaster.row;
  913. var clsflag = "";
  914. var recflag = "";
  915. if(selflag == "Sel"){
  916. clsflag = model.getValue(xRecMasterPath + '[' + curRow + ']/clsflag');
  917. recflag = model.getValue(xRecMasterPath + '[' + curRow + ']/recflag');
  918. if(recflag == '1'){
  919. model.setValue("/root/cond/clsflag", clsflag); // 중증도구분 중 선택
  920. }else if((recflag == '2') && (clsflag == '2')){
  921. model.setValue("/root/cond/clsflag", 9); // 낙상 - Morse Scale 선택
  922. }else if((recflag == '2') && (clsflag == '1')){
  923. model.setValue("/root/cond/clsflag", 8); // 낙상 - Humpty Dumpty 선택
  924. }else if((recflag == '3') && (clsflag == '1')){
  925. model.setValue("/root/cond/clsflag", 10); // 욕창 선택
  926. }else if(recflag == '4'){
  927. //model.setValue("/root/cond/clsflag", 11); // 통증 선택
  928. //alert("통증관련 개발중입니다.");
  929. //messageBox('관련 화면 준비중', 'I009');
  930. messageBox('통증관리기록 메뉴를 사용하십시오', 'I');
  931. //modal("SMMNW04800",1); //통증관리기록 화면 호출
  932. return;
  933. }
  934. fChangeCaption(model.getValue("/root/cond/clsflag")); // 선택된 구분으로 캡션 변경 (2011.04.19 ahn)
  935. }else{
  936. clsflag = model.getValue(xRecInfo + '/clsflag');
  937. recflag = model.getValue(xRecInfo + '/recflag');
  938. }
  939. // 상단 라디오 선택
  940. //마스터가 암것도 없을때나 행추가 상태일때는 조회안하고 바로 리턴한다.
  941. if(grd_recmaster.rows < 2 || model.getValue(xRecMasterPath + '[' + curRow + ']/stat') == 'i'){
  942. model.removeNodeset("/root/main/recpntgrup/recpntlist");// 중증도 상세점수 클리어
  943. model.refresh();
  944. }
  945. var maddchk01 = model.getValue(xRecMasterPath + '[' + curRow + ']/maddchk01');
  946. var maddchk02 = model.getValue(xRecMasterPath + '[' + curRow + ']/maddchk02');
  947. var maddchk03 = model.getValue(xRecMasterPath + '[' + curRow + ']/maddchk03');
  948. var maddchk04 = model.getValue(xRecMasterPath + '[' + curRow + ']/maddchk04');
  949. var haddchk = model.getValue(xRecMasterPath + '[' + curRow + ']/haddchk');
  950. var haddchk01 = model.getValue(xRecMasterPath + '[' + curRow + ']/haddchk01');
  951. var dinfo = maddchk01+maddchk02+maddchk03+maddchk04+haddchk+haddchk01;
  952. //중증도내역 선택했던 로우정보(수행일자)를 저장한다.
  953. model.removeNodeset("/root/send");
  954. model.makeValue("/root/send/pid", model.getValue(xRecMasterPath+"["+curRow+"]/pid"));
  955. model.makeValue("/root/send/indd", model.getValue(xRecMasterPath+"["+curRow+"]/indd"));
  956. model.makeValue("/root/send/cretno", model.getValue(xRecMasterPath+"["+curRow+"]/cretno"));
  957. model.makeValue("/root/send/execdd", model.getValue(xRecMasterPath+"["+curRow+"]/execdd"));
  958. //model.makeValue("/root/send/execdd", model.getValue('/root/cond/copyexecdd'));
  959. model.makeValue("/root/send/recseq", model.getValue(xRecMasterPath+"["+curRow+"]/recseq"));
  960. model.makeValue("/root/send/clsflag", clsflag);
  961. model.makeValue("/root/send/recflag", recflag);
  962. model.makeValue('/root/send/bspntgrup/dinfo', dinfo);
  963. //상세내역, 상세설명의 현재instance를 remove한다.
  964. model.removenode('/root/main/recdetailgrup');
  965. model.removenode('/root/main/tar_desccnts');
  966. model.refresh();
  967. //상세점수그리드조회
  968. if(!submit("TRMNW04007")){//상세점수조회
  969. messageBox('상세점수조회를', 'E009');
  970. return;
  971. }else{
  972. //상세점수그리드의 컬럼을 조회한 내역의 갯수만큼 화면에 보여준다.
  973. fColLqidtys();
  974. }
  975. //중증기록 detail 상세내역 그리드리스트를 조회한다.
  976. fSearchRecDetail();
  977. addchk();
  978. }
  979. /**
  980. * @group :
  981. * @ver : 2007.12.06
  982. * 2008.06.23 dhkim 수정
  983. * @by : 신혁춘
  984. * @---------------------------------------------------
  985. * @type : function
  986. * @access : public
  987. * @desc : 상세점수그리드의 컬럼을 조회한 내역의 갯수만큼 화면에 보여준다.
  988. * @param :
  989. * @return :
  990. * @---------------------------------------------------
  991. */
  992. function fColLqidtys() {
  993. var cnt = model.getValue("/root/main/recpntgrup/recpntlist/cnt");
  994. if(Number(cnt) > 0 ){
  995. var fdx = 0;
  996. var hngnm;
  997. var idx = 0;
  998. fdx = Number(grd_recpnt.colRef("hngnm"));
  999. for(var i = 1 ; i <= cnt ; i++) {
  1000. hngnm = model.getValue("/root/main/recpntgrup/pnttitlgruplist["+ i +"]/hngnm");
  1001. idx = Number(fdx) + Number(i);
  1002. grd_recpnt.colhidden(idx) = false; //조회된 컬럼 갯수만큼 그리드의 필드를 보여줌
  1003. //grd_recpnt.colwidth(idx) = hngnm.length * 10; //조회된 컬럼 갯수만큼 그리드의 필드를 100으로 길이 세팅
  1004. grd_recpnt.colwidth(idx) = 50; // 컬럼사이즈 fix
  1005. //그리드의 타이틀필드값에 상세내역의 타이틀을 세팅
  1006. grd_recpnt.valuematrix(0, idx) = hngnm;
  1007. grd_recpnt.valuematrix(1, idx) = hngnm;
  1008. }
  1009. grd_recpnt.colhidden(grd_recpnt.colRef("totpnt")) = false;
  1010. grd_recpnt.colhidden(grd_recpnt.colRef("resultcd")) = false;
  1011. // grd_recpnt.colhidden(43) = false;//중증도분류코드
  1012. // grd_recpnt.colhidden(44) = false;//column 갯수
  1013. grd_recpnt.colwidth(grd_recpnt.colRef("totpnt")) = 50;
  1014. grd_recpnt.colwidth(grd_recpnt.colRef("resultcd")) = 50;
  1015. //상세점수 그리드 1,2번째 컬럼에 등록번호, 환자명 세팅
  1016. grd_recpnt.valuematrix(2,1) = model.getValue(xRecMasterPath+"["+grd_recmaster.row+"]/pid");
  1017. grd_recpnt.valuematrix(2,2) = model.getValue(xRecMasterPath+"["+grd_recmaster.row+"]/hngnm");
  1018. grd_recpnt.refresh();
  1019. }
  1020. }
  1021. /**
  1022. * @group :
  1023. * @ver : 2007.12.05
  1024. * @by : 신혁춘
  1025. * @---------------------------------------------------
  1026. * @type : function
  1027. * @access : public
  1028. * @desc : 선택된 중증도 내역에 따른 중증도 상세내역을 조회한다.
  1029. * @param :
  1030. * @return :
  1031. * @---------------------------------------------------
  1032. */
  1033. function fSearchRecDetail(){
  1034. var curRow = grd_recmaster.row;
  1035. model.removenode('/root/main/recdetailgrup');
  1036. model.makeNode('/root/main/recdetailgrup');
  1037. model.removeNodeset("/root/send");
  1038. model.makeValue("/root/send/pid", model.getValue(xRecMasterPath+"["+curRow+"]/pid"));
  1039. model.makeValue("/root/send/cretno", model.getValue(xRecMasterPath+"["+curRow+"]/cretno"));
  1040. model.makeValue("/root/send/indd", model.getValue(xRecMasterPath+"["+curRow+"]/indd"));
  1041. model.makeValue("/root/send/seqno", model.getValue(xRecMasterPath+"["+curRow+"]/seqno"));
  1042. model.makeValue("/root/send/recseq", model.getValue(xRecMasterPath+"["+curRow+"]/recseq"));
  1043. model.makeValue("/root/send/clsflag", model.getValue(xRecMasterPath+"["+curRow+"]/clsflag"));
  1044. model.makeValue("/root/send/recflag", model.getValue(xRecMasterPath+"["+curRow+"]/recflag"));
  1045. model.makeValue("/root/send/execdd", model.getValue(xRecMasterPath+"["+curRow+"]/execdd"));
  1046. model.makeValue("/root/send/newexecdd", model.getValue("/root/cond/execdd"));
  1047. //상세설명의 현재instance를 remove한다.
  1048. model.removenode('/root/main/tar_desccnts');
  1049. model.refresh();
  1050. //중증도 상세내역 조회
  1051. if(submit("TRMNW04006")){
  1052. model.copyNode("/root/temp","/root/main");
  1053. fShowTreeRecDetailGrup();
  1054. }
  1055. }
  1056. /**
  1057. * @group :
  1058. * @ver : 2007.12.06
  1059. * @by : 신혁춘
  1060. * @---------------------------------------------------
  1061. * @type : function
  1062. * @access : public
  1063. * @desc : 중증도 상세내역 트리구조로 변환
  1064. * @param :
  1065. * @return :
  1066. * @---------------------------------------------------
  1067. */
  1068. function fShowTreeRecDetailGrup(){
  1069. //그리드를 depth에 맞게 level을 조정한다.
  1070. var dpth = 0;
  1071. for(var i=1; i< grd_recdetail.rows; i++){
  1072. //grd_recdetail.IsSubtotal(i) = true;
  1073. dpth = Number(model.getValue(xRecDetailPath+"[" + (i) + "]/depth"));
  1074. if(dpth == 1){
  1075. grd_recdetail.outlinelevel(i) = 1;
  1076. }else if(dpth == 2){
  1077. grd_recdetail.outlinelevel(i) = 2;
  1078. }
  1079. grd_recdetail.colDisabled(11) = true ;
  1080. }
  1081. //트리스타일 설정
  1082. grd_recdetail.OutlineCol = 3;
  1083. grd_recdetail.OutlineBar = 4;
  1084. grd_recdetail.allstyle( "all", "background-color" ) = "#FFFFFF" ;
  1085. var iRow = grd_recdetail.rows;
  1086. var timsval, flag;
  1087. for(var i = 1 ; i < grd_recdetail.rows; i++ ){
  1088. timsval = model.getValue(xRecDetailPath+"["+ i +"]/timsval");
  1089. flag = model.getValue(xRecDetailPath+"["+ i +"]/flag");
  1090. //입력필드가 아닐때 점수를 회색으로 보여준다.
  1091. if(model.getValue(xRecDetailPath+"["+ i +"]/timsval") == "") {
  1092. grd_recdetail.cellstyle("background-color", i,5 ,i,5) = "#C0C0C0";//회색
  1093. }
  1094. //20080827 구분에 체크되어있고 입력필드일 때 횟수값이 0이면 배경을 노랑색으로 보여준다.
  1095. else if(flag == 'Y' && timsval != '' && (timsval == '0' || timsval == 0)){
  1096. grd_recdetail.cellstyle("background-color", i,5 ,i,5) = "#FCFF00";//노랑
  1097. }
  1098. if(model.getValue(xRecDetailPath+"["+ i +"]/supcd") == "00000000") {//level이 상위레벨일때
  1099. //색깔(연두색)을 입혀서 보여준다.
  1100. grd_recdetail.rowstyle(i, "data", "background-color") = "#c0ff80";
  1101. //그리드 체크박스 readonly true로 변경
  1102. grd_recdetail.isReadonly(i, 1, i, 1) = true;//체크박스
  1103. }else{
  1104. //그리드 체크박스 readonly false로 변경
  1105. if ( model.getValue("/root/cond/agechk") =="Y" ){
  1106. grd_recdetail.isReadonly(i, 1, i, 1) = true;//체크박스
  1107. } else {
  1108. grd_recdetail.isReadonly(i, 1, i, 1) = false;//체크박스
  1109. }
  1110. }
  1111. var timsinptyn = model.getValue(xRecDetailPath + '[' + i + ']/timsinptyn');//횟수입력여부
  1112. if(timsinptyn == 'Y'){
  1113. //그리드 체크박스 readonly false로 변경
  1114. if ( model.getValue("/root/cond/agechk") =="Y" ){
  1115. grd_recdetail.isReadonly(i, 5, i, 5) = true;//체크박스
  1116. } else {
  1117. grd_recdetail.isReadonly(i, 5, i, 5) = false;//횟수입력필드 readonly true로 변경
  1118. }
  1119. }else if(timsinptyn == 'N'){
  1120. grd_recdetail.isReadonly(i, 5, i, 5) = true;//횟수입력필드 readonly false로 변경
  1121. }
  1122. }
  1123. model.refresh();
  1124. }
  1125. /**
  1126. * @group :
  1127. * @ver : 2008.06.25
  1128. * @by : dhkim
  1129. * @---------------------------------------------------
  1130. * @type : function
  1131. * @access : public
  1132. * @param : selRow 현재 선택한 그리드 row idx
  1133. * selCol 현재 선택한 그리드 col idx
  1134. * _supcd 현재 선택한 그리드 row의 상위코드값
  1135. * @desc : 횟수입력시 입력여부가 N이면 값을 원래 값으로 리턴
  1136. * col = 1 (구분체크박스), col=5 (횟수)
  1137. * @return :
  1138. * @---------------------------------------------------
  1139. */
  1140. function fChangeTimsValValue(selRow, selCol, _supcd){
  1141. if(_supcd == '00000000'){
  1142. return;
  1143. }
  1144. if(selCol == 5){//횟수변경 (횟수입력여부가 Y인것만 입력 가능함)
  1145. var flag = model.getValue(xRecDetailPath + '[' + selRow + ']/flag');
  1146. var timsinptyn = model.getValue(xRecDetailPath + '[' + selRow + ']/timsinptyn');//횟수입력가능여부
  1147. if(timsinptyn == 'N'){
  1148. return;
  1149. }else if(timsinptyn == 'Y'){//횟수 입력가능상태
  1150. if(flag == 'N'){
  1151. //체크상태가 아닌 데이터에 횟수 입력시 원래상태로 back
  1152. model.setValue(xRecDetailPath + '[' + selRow + ']/timsval', model.getValue(xRecDetailPath + '[' + selRow + ']/bktimsval'));
  1153. }
  1154. }
  1155. }
  1156. }
  1157. /**
  1158. * @group :
  1159. * @ver : 2008.06.25
  1160. * @by : dhkim
  1161. * @---------------------------------------------------
  1162. * @type : function
  1163. * @access : public
  1164. * @param : selRow 현재 선택한 그리드 row idx
  1165. * selCol 현재 선택한 그리드 col idx
  1166. * _supcd 현재 선택한 그리드 row의 상위코드값
  1167. * @desc : 체크박스 변경에 따른 선택된 같은 그룹내의 체크박스 값 변경
  1168. * col = 1 (구분체크박스)
  1169. * @return :
  1170. * @---------------------------------------------------
  1171. */
  1172. function fChangeCheckboxValue(selRow, selCol, _supcd){
  1173. var curFlag = model.getValue(xRecDetailPath + '[' + selRow + ']/flag');//현재선택한 체크값
  1174. var clsflag = model.getValue('/root/cond/clsflag');
  1175. if(_supcd == '00000000'){
  1176. return;
  1177. }
  1178. if(selCol == 1){//체크값 변경
  1179. //2008.08.07 dhkim 추가
  1180. //중증도중환자실(중환자실입실, 중환자실퇴실 포함), 신생아ICU는 multi 체크이므로 기존에 체크된 데이터를 해제하지 않는다.
  1181. //일반병동, 정신과병동, 혈액투석, 낙상성인(Morse Scale), 욕창은 single 체크임
  1182. var isMulti = false;
  1183. if(clsflag == '4' || clsflag == '6' ||clsflag == '7' || clsflag == '2'){
  1184. isMulti = true;
  1185. }
  1186. var supcd, flag;
  1187. for(var i = 1; i < grd_recdetail.rows; i++){
  1188. supcd = model.getValue(xRecDetailPath + '[' + i + ']/supcd');
  1189. flag = model.getValue(xRecDetailPath + '[' + i + ']/flag');
  1190. if(!isMulti){
  1191. //같은 그룹내에서 비교
  1192. if(supcd != '00000000' && supcd == _supcd && flag == 'Y'){//기존 체크데이터를 해제
  1193. //원래 체크되어있던 값을 해제, 상태 삭제로
  1194. model.setValue(xRecDetailPath + '[' + i + ']/flag', 'N');
  1195. }
  1196. }
  1197. }
  1198. //현재 체크한 값을 선택, 상태 신규로
  1199. if(curFlag == 'Y'){
  1200. model.setValue(xRecDetailPath + '[' + selRow + ']/flag', 'Y');
  1201. //20080827
  1202. //횟수값이 입력가능 항목이면 항목에 체크되었을때 횟수필드를 노랑으로 변경
  1203. if(model.getValue(xRecDetailPath+"["+ selRow +"]/timsval") != ''){
  1204. grd_recdetail.cellstyle("background-color", selRow,5 ,selRow,5) = "#FCFF00";//노랑
  1205. }
  1206. }else if(curFlag == 'N'){
  1207. model.setValue(xRecDetailPath + '[' + selRow + ']/flag', 'N');
  1208. //20080827
  1209. //횟수값이 입력가능 항목이면 항목에 체크해제되었을때 횟수필드를 하냥으로 변경
  1210. if(model.getValue(xRecDetailPath+"["+ selRow +"]/timsval") != ''){
  1211. grd_recdetail.cellstyle("background-color", selRow,5 ,selRow,5) = "#FFFFFF";//하양
  1212. }
  1213. }
  1214. model.refresh();
  1215. }
  1216. }
  1217. /**
  1218. * @group :
  1219. * @ver : 2008.06.25
  1220. * @by : dhkim
  1221. * @-------------------------------------------------------------------------------------------------------
  1222. * @type : function
  1223. * @access : public
  1224. * @param :
  1225. * @return :
  1226. * @desc : 저장하기전 전체그리드의 변경된 내역에 따른 그리드 상태값을 변경한다.
  1227. * (1) 체크박스 선택여부에 따른 상태값 변경
  1228. * 1. 원래값이 Y, 현재Y이면 stat은 '-'
  1229. * 2. 원래값이 Y, 현재N이면 stat은 'd'
  1230. * 3. 원래값이 N, 현재N이면 stat은 '-'
  1231. * 4. 원래값이 N, 현재Y이면 stat은 'i'
  1232. * (2) 횟수 입력에 따른 상태값 변경
  1233. * 1. 현재 chkbox가 Y이고 timsinptyn(횟수입력여부)이 Y일때만 입력가능함.
  1234. * 2. 원래 chkbox가 Y, 현재Y, 현재timsval과 원래 bktimsval값이 다르면 상태값은 'u'로
  1235. * 3. 현재 chkbox가 N인 것에 timsval값이 입력되면 timsval값을 원래상태(원래상태값:bkimsval)로 복구
  1236. * @-------------------------------------------------------------------------------------------------------
  1237. */
  1238. function fChangeGridStat(){
  1239. var bkflag, bktimsval; //원래 체크박스값, 원래횟수값
  1240. var flag, timsval; //변경한체크박스값, 변경한횟수값
  1241. var timsinptyn; //횟수입력여부
  1242. var stat='-'; //변경할 그리드 상태값
  1243. var pntstat = '-'; //상세점수의 stat
  1244. var recmasterrow = 0;
  1245. for( var idx = 1 ; idx < grd_recmaster.rows ; idx++ ){
  1246. if ( model.getValue(xRecDetailPath + '[1]/pid') == model.getValue(xRecMasterPath + '['+ idx +']/pid')
  1247. && model.getValue(xRecDetailPath + '[1]/execdd') == model.getValue(xRecMasterPath + '['+ idx +']/execdd')
  1248. && model.getValue(xRecDetailPath + '[1]/recseq') == model.getValue(xRecMasterPath + '['+ idx +']/recseq')
  1249. ){
  1250. recmasterrow = idx;
  1251. grd_recmaster.row = recmasterrow;
  1252. break;
  1253. }
  1254. }
  1255. if ( recmasterrow == 0 ){
  1256. messageBox( capt_master.attribute("text") + " 선택" ,"I008");
  1257. return;
  1258. }
  1259. for(var i = 1; i < grd_recdetail.rows; i++){
  1260. flag = model.getValue(xRecDetailPath + '[' + i + ']/flag'); //현재체크박스값
  1261. timsval = model.getValue(xRecDetailPath + '[' + i + ']/timsval'); //현재횟수값
  1262. bkflag = model.getValue(xRecDetailPath + '[' + i + ']/bkflag'); //원래체크박스값
  1263. bktimsval = model.getValue(xRecDetailPath + '[' + i + ']/bktimsval'); //원래횟수값
  1264. timsinptyn= model.getValue(xRecDetailPath + '[' + i + ']/timsinptyn'); //횟수입력여부
  1265. if(bkflag == 'Y' && flag == 'Y'){
  1266. if(timsinptyn == 'Y' && (timsval != bktimsval)){
  1267. stat = 'u';
  1268. pntstat = 'u';
  1269. }else{
  1270. stat = '-';
  1271. }
  1272. }else if(bkflag == 'Y' && flag == 'N'){
  1273. stat = 'd';
  1274. pntstat = 'u';
  1275. }else if(bkflag == 'N' && flag == 'N'){
  1276. stat = '-';
  1277. }else if(bkflag == 'N' && flag == 'Y'){
  1278. stat = 'i';
  1279. pntstat = 'u';
  1280. }
  1281. //alert(i + stat);
  1282. model.setValue(xRecDetailPath + '[' + i + ']/stat', stat);
  1283. //alert(i + stat + ' , ' + );
  1284. }
  1285. //상세내역이 변경되면 상세점수와 중증도마스터의 stat을 변경상태로 설정한다.
  1286. if(pntstat == 'u'){
  1287. //중증도점수그리드
  1288. grd_recpnt.addStatus(2, 'update');
  1289. //중증도 마스터그리드
  1290. if(grd_recmaster.rowStatus(recmasterrow) != 1){//상태가 신규상태가 아니면 u로 변경
  1291. grd_recmaster.addStatus(recmasterrow, 'update');
  1292. model.setValue(xRecMasterPath + '[' + recmasterrow + ']/stat', 'u');
  1293. }
  1294. }else{
  1295. //중증도점수그리드
  1296. grd_recpnt.removeStatus(2, 'update');
  1297. //중증도 마스터그리드
  1298. if(grd_recmaster.rowStatus(recmasterrow) != 1){//상태가 신규상태가 아니면 u로 변경
  1299. grd_recmaster.removeStatus(recmasterrow, 'update');
  1300. model.setValue(xRecMasterPath + '[' + recmasterrow + ']/stat', '-');
  1301. }
  1302. }
  1303. model.refresh();
  1304. }
  1305. /**
  1306. * @group :
  1307. * @ver : 2008.06.27
  1308. * @by : dhkim
  1309. * @---------------------------------------------------
  1310. * @type : function
  1311. * @access : public
  1312. * @desc : 중증도 내역 삭제를 한다
  1313. * @param :
  1314. * @return :
  1315. * @---------------------------------------------------
  1316. */
  1317. function fDelete(){
  1318. var curRow = grd_recmaster.row;
  1319. if(model.getValue(xRecMasterPath + '[' + curRow + ']/stat') == 'i'){
  1320. grd_recmaster.deleteRow(curRow);
  1321. return;
  1322. }else{
  1323. //20080926 기록자만이 삭제를 할 수 있다.
  1324. var recid = model.getValue(xRecMasterPath + '[' + curRow + ']/execid');
  1325. var recnm = model.getValue(xRecMasterPath + '[' + curRow + ']/execnm');
  1326. if(recid != getUserId()){
  1327. messageBox('기록을 입력한 등록자( ' + recnm + ' )만 해당 기록내역을 삭제하실 수 있습니다.' , 'E');
  1328. return ;
  1329. }else{
  1330. var msg = messageBox('삭제를 진행하시면 입력하신 상세내역도 전부 삭제됩니다. 선택하신 중증도 내역을', 'Q001');
  1331. if(msg == 6){
  1332. model.removenode('/root/send');
  1333. model.setValue(xRecMasterPath + '[' + curRow + ']/stat', 'd');
  1334. model.makeValue('/root/send/recmaster', grd_recmaster.getUpdateDataAll('d'));
  1335. var pid = model.getValue(xRecMasterPath + "/pid");
  1336. var orddd = model.getValue('/root/main/patinfo/patlist[' + (grd_patinfo.row-1) + ']/indd');//입원일/진료일
  1337. var cretno = model.getValue('/root/main/patinfo/patlist[' + (grd_patinfo.row-1) + ']/cretno');//생성번호
  1338. var orddeptcd = model.getValue('/root/main/patinfo/patlist[' + (grd_patinfo.row-1) + ']/orddeptcd');//진료과
  1339. var orddrid = model.getValue('/root/main/patinfo/patlist[' + (grd_patinfo.row-1) + ']/medispclid');//진료의
  1340. var ioflag = model.getValue('/root/main/patinfo/patlist[' + (grd_patinfo.row-1) + ']/ioflag'); //외래/입원구분
  1341. var signno = model.getValue(xRecMasterPath + '[' + curRow + ']/signno');//인증번호
  1342. /* [각 구분별 기록서식코드]
  1343. * 중증도_일반병동 : 0000002439
  1344. * 중증도_신생아 ICU : 0000002440
  1345. * 중증도_혈액투석 : 0000002441
  1346. * 중증도_중환자실 : 0000002442
  1347. * 중증도_정신과병동 : 0000002444
  1348. * 낙상사정_아동 : 0000002447
  1349. * 낙상사정_성인(Morse Scale) : 0000002449
  1350. * 욕창사정 (Braden Scale) : 0000002450
  1351. */
  1352. var recflag = model.getValue('/root/cond/recflag');
  1353. var clsflag = model.getValue('/root/cond/clsflag');
  1354. var formcd;//기록서식코드
  1355. var formnm;//서식명
  1356. if(clsflag == '1'){
  1357. formcd = '0000002439'; //중증도_일반병동
  1358. formnm = '중증도사정(일반병동)';
  1359. recflag = '1';
  1360. clsflag = '1';
  1361. }else if(clsflag == '2'){
  1362. formcd = '0000002440'; //중증도_신생아 ICU
  1363. formnm = '중증도사정(신생아 ICU)';
  1364. recflag = '1';
  1365. clsflag = '2';
  1366. }else if(clsflag == '5'){
  1367. formcd = '0000002444'; //중증도_정신과병동
  1368. formnm = '중증도사정(정신과병동)';
  1369. recflag = '1';
  1370. clsflag = '5';
  1371. }else if(clsflag == '4' || clsflag == '6' || clsflag == '7'){
  1372. formcd = '0000002442'; //중증도_중환자실
  1373. formnm = '중증도사정(중환자실)';
  1374. recflag = '1';
  1375. clsflag = '4';
  1376. }else if(clsflag == '3'){
  1377. formcd = '0000002441'; //중증도_혈액투석
  1378. formnm = '중증도사정(혈액투석)';
  1379. recflag = '1';
  1380. clsflag = '3';
  1381. }else if(clsflag == '8'){
  1382. formcd = '0000002447'; //낙상사정_아동
  1383. formnm = '낙상위험사정(Humpty Dumpty Scale)';
  1384. recflag = '2';
  1385. clsflag = '1';
  1386. }else if(clsflag == '9'){
  1387. formcd = '0000002449'; //낙상사정_성인(Morse Scale)
  1388. formnm = '낙상위험사정(Morse Scale)'; // 성인 -> Morse Scale (2011.03.17 ahn)
  1389. recflag = '2';
  1390. clsflag = '2';
  1391. }else if(clsflag == '10'){
  1392. formcd = '0000002450'; //욕창
  1393. formnm = '욕창위험사정(Braden Scale)'; // 욕창 -> Braden Scale (2011.04.13 ahn)
  1394. recflag = '3';
  1395. clsflag = '1';
  1396. }
  1397. Sign.certreload = true ; // 전자서명 호출시 인증저장 버튼을 누늘때마다 인증서가 뜨도록 처리
  1398. // 인증 로직 호출
  1399. if(Sign.signprocess() == true){ // ▶ 전자인증 관련 환자 인적 정보를 보내줌.
  1400. var wSigninfo = "pid" +"▦" // 01 등록번호
  1401. + "orddd" +"▦" // 02 입원일자(입원,응급)/진료일자(외래)
  1402. + "cretno" +"▦" // 03 생성번호
  1403. + "signno" +"▦" // 04 서명번호(인증번호)
  1404. + "recdd" +"▦" // 05 실제 기록이 이루어진 기록일자
  1405. + "rectm" +"▦" // 06 실제 기록이 이루어진 기록시간
  1406. + "recsaveflag" +"▦" // 07 전자서명 인적정보 변경여부(기록일시 변경되는 경우 : Y, 그외 : N)
  1407. + "signflag" +"▦" // 08 서명자료구분(01 : 진료, 02 : 간호, 03 : LIS, 04 : 진료지원)
  1408. + "signgenrflag" +"▦" // 09 외래/입원구분(코드정의서 M0010 참조)
  1409. + "formcd" +"▦" // 10 각 기록지별 서식코드 0000002473 N57 간호 수술간호기록
  1410. + "orddeptcd" +"▦" // 11 진료부서코드
  1411. + "orddrid" +"▦" // 12 진료의사ID (집도의)
  1412. + "signbfcnts" +"▦" // 13 ▶ 인증할 데이터 정보(미기록 노드 제거된 정보)
  1413. + "signaftcnts" +"▦" // 14 ▶ 공인인증 처리후 데이터
  1414. + "screenid" +"▦" // 15 ▶ 화면아이디
  1415. + "certflag" +"▩" // 16 ▶ 인증여부( T : 임시저장, C : 인증저장)
  1416. + pid +"▦" // 01 등록번호
  1417. + orddd +"▦" // 02 입원일자(입원,응급)/진료일자(외래)
  1418. + cretno +"▦" // 03 생성번호
  1419. + signno +"▦" // 04 서명번호(인증번호)
  1420. + getCurrentDate() +"▦" // 05 실제 기록이 이루어진 기록일자
  1421. + getCurrentTime() +"▦" // 06 실제 기록이 이루어진 기록시간
  1422. + "Y" +"▦" // 07 전자서명 인적정보 변경여부(기록일시 변경되는 경우 : Y, 그외 : N)
  1423. + "02" +"▦" // 08 서명자료구분(01 : 진료, 02 : 간호, 03 : LIS, 04 : 진료지원)
  1424. + ioflag +"▦" // 09 외래/입원구분(코드정의서 M0010 참조)
  1425. + formcd +"▦" // 10 각 기록지별 서식코드 (emr.mrfmform)
  1426. + orddeptcd +"▦" // 11 진료부서코드
  1427. + orddrid +"▦" // 12 진료의사ID
  1428. + Sign.signedInfos[1] +"▦" // 13 ▶ 인증할 데이터 정보(미기록 노드 제거된 정보)
  1429. + Sign.signedInfos[2] +"▦" // 14 ▶ 공인인증 처리후 데이터
  1430. + getScreenID() +"▦" // 15 ▶ 화면아이디
  1431. + "C" +"▩"; // 16 ▶ 인증여부( T : 임시저장, C : 인증저장)
  1432. model.makeValue("/root/send/signinfo" , wSigninfo);
  1433. } else {
  1434. return ;
  1435. }
  1436. if(!submit('TXMNW04001')){
  1437. messageBox('중증도 내역의 삭제를', 'E009');
  1438. return;
  1439. }else{
  1440. //중증도조회
  1441. fSearchRecMaster(grd_patinfo.row);
  1442. }
  1443. }else if(msg == 7){
  1444. return;
  1445. }
  1446. }
  1447. }
  1448. }
  1449. // ※ 인증데이터 생성함수 만들기
  1450. function fMake_SignData(){
  1451. // ▶ 기록 관련 인스턴스 전체를 copy, 인증에 저장할 모든 Instance AddNode한다.
  1452. if(sAllSignSave == true){
  1453. Sign.addnode("/root/cond");
  1454. Sign.addnode("/root/main/patinfo/patlist[" + (patRow) + "]");
  1455. Sign.addnode("/root/main/recgrup/recgruplist[" + (recRow) + "]");
  1456. Sign.addnode("/root/main/recpntgrup" );
  1457. Sign.addnode("/root/main/recdetailgrup");
  1458. Sign.addnode("/root/temp/signdata/recpntgrup");
  1459. Sign.addnode('/root/temp/signdata/detailinfo');
  1460. } else{
  1461. Sign.addnode("/root/cond");
  1462. Sign.addnode("/root/main/patinfo/patlist[" + (grd_patinfo.row-1) + "]");
  1463. Sign.addnode("/root/main/recgrup/recgruplist[" + (grd_recmaster.row) + "]");
  1464. Sign.addnode("/root/main/recpntgrup" );
  1465. Sign.addnode("/root/main/recdetailgrup");
  1466. Sign.addnode("/root/temp/signdata/recpntgrup");
  1467. Sign.addnode('/root/temp/signdata/detailinfo');
  1468. }
  1469. /***************************************/
  1470. //1.상세점수 노드 만들기
  1471. //2.중증도구분 한글명으로 보내기
  1472. /****************************************/
  1473. /*/ --------------------------
  1474. var condPath = Sign.XPATH_SIGNINFO + "/cond";
  1475. //중증도 구분
  1476. var clsflag = model.getValue(condpath + "/clsflag");
  1477. if(clsflag == '1'){
  1478. model.makeValue(condpath + "/recflagnm", '중증도');
  1479. model.makeValue(condpath + "/clsflagnm", '일반병동');
  1480. }*/
  1481. }
  1482. //input수행일자에 해당하는 기록일이 있는지 조회
  1483. //신규데이터가 아닌것중..(stat != 'i')
  1484. //@param : iptExecdd 입력하고자 하는 수행일자(input 컴포넌트)
  1485. //@return : arr[0] - 기록여부 (true/false)
  1486. // arr[1] - signno (기록여부가 true일때 해당기록의 signno를 할당)
  1487. // 20080820 - array로 변경
  1488. function fIsRecorded(iptExecdd){
  1489. var retArr = new Array(1);
  1490. var recorded = false;
  1491. var signno = '';
  1492. var execdd;
  1493. var stat;
  1494. for(var i = 1; i < grd_recmaster.rows; i++){
  1495. execdd = model.getValue(xRecMasterPath + '[' + i + ']/execdd');
  1496. stat = model.getValue(xRecMasterPath + '[' + i + ']/stat');
  1497. if(execdd != '' && iptExecdd == execdd && stat != 'i'){
  1498. signno = model.getValue(xRecMasterPath + '[' + i + ']/signno');
  1499. recorded = true;
  1500. retArr[0] = recorded;
  1501. retArr[1] = signno;
  1502. return retArr;
  1503. }
  1504. }
  1505. retArr[0] = recorded;
  1506. retArr[1] = signno;
  1507. return retArr;
  1508. }
  1509. /**
  1510. * @group :
  1511. * @ver : 2008.06.25
  1512. * @by : dhkim
  1513. * @-------------------------------------------------------------------------------------------------------
  1514. * @type : function
  1515. * @access : public
  1516. * @param :
  1517. * @return :
  1518. * @desc : [인증저장]
  1519. * 중증도 마스터와 상세내역을 인증저장한다.
  1520. * - 저장전 중증도 상세내역 점수의 유효성을 체크한다.
  1521. * - 상세내역의 체크된 내역 점수를 합산하여 기록마스터의 totpnt에 set한다.
  1522. * - 이미 기록이 입력되어 있는 경우에 -> grd_recmaster에 상태값이 'u'임.
  1523. * 기록된 날짜가 조회조건의 수행일자와 같으면 db에 update처리하고
  1524. * 기록된 날짜와 조회조건의 수행일자가 다르면 신규로 insert처리한다.(메세지로 알려줄것)
  1525. * @-------------------------------------------------------------------------------------------------------
  1526. */
  1527. function fSignSave(){
  1528. //debugger;
  1529. sAllSignSave = false;
  1530. var dschdd = model.getValue("/root/main/paminfo/pamlist/dschdd"); //퇴원일자
  1531. var indd = model.getValue("/root/main/paminfo/pamlist/indd"); //입원일자
  1532. var execdd = model.getValue("/root/cond/execdd"); //수행일자
  1533. if(indd != '' || indd ==null) {
  1534. if((execdd < indd) || (execdd > dschdd)) { //입원,퇴원일자 사이의 수행일자만 입력하도록 블러킹
  1535. messageBox("수행하려는 일자는 입원일자(" +indd.substring(0,4) + "-" + indd.substring(4, 6) + "-" + indd.substring(6) + ")이전 또는 퇴원일자("+dschdd.substring(0,4) + "-" + dschdd.substring(4, 6) + "-" + dschdd.substring(6)+")이후의 일자가 될 수","I004");
  1536. return;
  1537. }
  1538. }
  1539. var recmasterrow = 0;
  1540. for( var idx = 1 ; idx < grd_recmaster.rows ; idx++ ){
  1541. if ( model.getValue(xRecDetailPath + '[1]/pid') == model.getValue(xRecMasterPath + '['+ idx +']/pid')
  1542. && model.getValue(xRecDetailPath + '[1]/execdd') == model.getValue(xRecMasterPath + '['+ idx +']/execdd')
  1543. && model.getValue(xRecDetailPath + '[1]/recseq') == model.getValue(xRecMasterPath + '['+ idx +']/recseq')
  1544. ){
  1545. recmasterrow = idx;
  1546. grd_recmaster.row = recmasterrow;
  1547. break;
  1548. }
  1549. }
  1550. if ( recmasterrow == 0 ){
  1551. messageBox( capt_master.attribute("text") + " 선택" ,"I008");
  1552. return;
  1553. }
  1554. var recMasterStat = model.getValue(xRecMasterPath + '[' + grd_recmaster.row + ']/stat');//기록마스터의 상태값
  1555. /*
  1556. //1. 신규등록
  1557. // 1) 저장된 기록이 하나도 없을때 최초등록의 경우 insert
  1558. // 2) input에 수행일자가 해당 기록에 없는 경우... 이미 기록된 내역을 해당 수행일자로 insert
  1559. // 2008.08.27 수정요청사항
  1560. // 3) input에 수행일자가 해당 기록에 있는 경우... 수정된 내역을 수행일시는 현재일자+현재시간 으로 insert
  1561. //recMasterStat이 '-'이라도 저장할 수행일자가 기록내역에 없으면 신규 insert
  1562. //--------------------------------------------------------------------------------------------
  1563. //2008.08.27 수정요청사항 (기록수정은 진행하지 않는다.)
  1564. //2. 수정등록 (사용안함)
  1565. // 1) 해당기록의 항목을 선택하여 수정하는 경우 수정한 항목을 update
  1566. // 2) input에 수행일자가 해당 기록에 있는 경우... 수정된 내역을 해당수행일자로 update
  1567. // (저장할 수행일자가 기록내역에 있으면 이미 저장된 기록내역이 있습니다 메세지 뿌려줄것)
  1568. */
  1569. //2008.08.27 사용안함-->input수행일자에 해당되는 기록이 이미 입력되어 있는 경우에 db에 update처리
  1570. //2008.08.27 변경됨-->input수행일자에 해당되는 기록이 이미 입력되어 있는 경우에 db에 insert처리, 단, 수행일시는 무조건 현재일시로 저장
  1571. //input수행일자에 해당되는 기록이 저장되어있지 않은경우 db에 insert처리
  1572. var execdd = model.getValue('/root/cond/execdd');//조회조건의 수행일자
  1573. var exectm = model.getValue('/root/cond/exectm');//조회조건의 수행시간
  1574. //수행일시 필수입력 체크_20090122_SMY추가
  1575. if(execdd == ""){
  1576. messageBox("수행일자를 입력하세요","I");
  1577. model.setFocus("ipt_indate");
  1578. return;
  1579. }
  1580. if(exectm == ""){
  1581. messageBox("수행시간을 입력하세요","I");
  1582. model.setFocus("ipt_time");
  1583. return;
  1584. }
  1585. /*
  1586. var dschdd = model.getValue("/root/main/patinfo/patlist[" + (grd_patinfo.row-1) + "]/dschdd"); //퇴원일자
  1587. if(dschdd != '99991231') {
  1588. if(execdd > dschdd){
  1589. var msgStr = '기록하시려는 일자(';
  1590. msgStr += execdd.substring(0,4) + '-' + execdd.substring(4, 6) + '-' + execdd.substring(6);
  1591. if(ioflag == 'O'){
  1592. msgStr += ')는 환자의 예약일자(';
  1593. }else{
  1594. msgStr += ')는 환자의 퇴원일자(';
  1595. }
  1596. msgStr += dschdd.substring(0,4) + '-' + dschdd.substring(4, 6) + '-' + dschdd.substring(6);
  1597. msgStr += ') 이후일자가 될 수';
  1598. messageBox(msgStr, 'I004');
  1599. return;
  1600. }
  1601. }
  1602. */
  1603. var recdd = model.getValue(xRecMasterPath + '[' + grd_recmaster.row + ']/execdd');//기록된 일자
  1604. var isRecordedArr = fIsRecorded(execdd);//input수행일자에 해당되는 기록이 있는지 여부
  1605. //20080820 array로 변경
  1606. //arr[0]은 기록여부 true/false
  1607. //arr[1]은 기록여부 true일때의 signno
  1608. var signno = '';//인증번호
  1609. var siflag = 'N';//default 는 N. 기존의 데이터를 그대로 신규로 insert하는경우flag값
  1610. // Y인경우 : 1.다른일자의 기록내역은 있으나 input의 수행일자에 해당되는 기록이 없을때..
  1611. // 2. input의 수행일자에 해당되는 기록이 있을때..
  1612. //저장전 유효성을 체크한다.
  1613. if(fIsValid()){
  1614. //상세내역의 체크점수를 합산하여 마스터와 상세점수의 totpnt에 set한다.
  1615. var totPnt = fSumPnt();
  1616. model.setValue(xRecMasterPath + '[' + grd_recmaster.row + ']/totpnt', totPnt);//마스터의 총점
  1617. model.setValue('/root/main/recpntgrup/recpntlist/totpnt', totPnt);//상세점수의 총점
  1618. //총점에 해당하는 분류군을 조회한후 마스터와 상세점수의 분류군에 set한다.
  1619. var bspntnm = fLoadBsPnt(totPnt);
  1620. model.setValue(xRecMasterPath + '[' + grd_recmaster.row + ']/resultnm', bspntnm);//마스터의 분류군
  1621. model.setValue('/root/main/recpntgrup/recpntlist/resultcd', bspntnm);//상세점수의 총점
  1622. var maddchk01 = model.getValue("/root/cond/maddchk01");
  1623. var maddchk02 = model.getValue("/root/cond/maddchk02");
  1624. var maddchk03 = model.getValue("/root/cond/maddchk03");
  1625. var maddchk04 = model.getValue("/root/cond/maddchk04");
  1626. var haddchk = model.getValue("/root/cond/haddchk");
  1627. var maddchk99 = model.getValue("/root/cond/maddchk99");
  1628. var haddchk01 = model.getValue("/root/cond/haddchk01");
  1629. model.setValue(xRecMasterPath + '[' + grd_recmaster.row + ']/maddchk01', maddchk01);
  1630. model.setValue(xRecMasterPath + '[' + grd_recmaster.row + ']/maddchk02', maddchk02);
  1631. model.setValue(xRecMasterPath + '[' + grd_recmaster.row + ']/maddchk03', maddchk03);
  1632. model.setValue(xRecMasterPath + '[' + grd_recmaster.row + ']/maddchk04', maddchk04);
  1633. model.setValue(xRecMasterPath + '[' + grd_recmaster.row + ']/haddchk', haddchk);
  1634. model.setValue(xRecMasterPath + '[' + grd_recmaster.row + ']/maddchk99', maddchk99);
  1635. model.setValue(xRecMasterPath + '[' + grd_recmaster.row + ']/haddchk01', haddchk01);
  1636. if(model.getValue("/root/cond/clsflag") == "9"){
  1637. if(maddchk01 == "" && maddchk02 == "" && maddchk03 == "" && maddchk04 == "" && maddchk99 == "" ){
  1638. messageBox("기타 항목은 반드시 하나 이상 체크 하셔야 합니다.","I");
  1639. return;
  1640. }
  1641. }
  1642. //상세내역 체크한 점수를 항목별로 합산하여 상세점수 노드에 set한다.
  1643. fSetRecDetailPnt();
  1644. var msgStr;
  1645. if(isRecordedArr[0]){
  1646. var execStr = execdd.substring(0, 4) + '-' + execdd.substring(4, 6) + '-' + execdd.substring(6, 8);
  1647. msgStr = '이미 저장된 기록 내역(' + execStr + ')이 있습니다. 다시'; //db insert (수행일시를 현재일시로)
  1648. //20080827 주석처리 signno = isRecordedArr[1];//해당기록의 signno를 할당해 db에 update한다.(사용안함)
  1649. signno = '';//신규이기때문에 signno를 새로딴다.
  1650. }else{//신규등록및 이미기록되었으나 기록일자와 수행일자가 같을때..
  1651. //msgStr = '중증도 및 위험사정의 기록내역을';
  1652. msgStr = ""; // 메시지는 '저장하시겠습니까?' 로 통일 (2011.04.18 Ahn)
  1653. }
  1654. //recMasterStat이 '-'경우 'u'로 넘김.
  1655. //중증도점수그리드
  1656. grd_recpnt.addStatus(2, 'update');
  1657. //중증도 마스터그리드
  1658. //20080827 상태가 신규가 아니면 u 상태로 db에 복사해 insert로 변경됨...
  1659. if(grd_recmaster.rowStatus(grd_recmaster.row) != 1){//상태가 신규상태가 아니면 u로 변경
  1660. grd_recmaster.addStatus(grd_recmaster.row, 'update');
  1661. model.setValue(xRecMasterPath + '[' + grd_recmaster.row + ']/stat', 'u');
  1662. siflag = 'Y';//기존데이터를 복사해 insert하는 경우 Y아니면 N
  1663. }
  1664. var msg = messageBox(msgStr, 'Q002');//저장하시겠습니까?
  1665. if(Number(msg) == 6){//예
  1666. model.removenode('/root/send');
  1667. model.makeValue('/root/send/sch_execdd', execdd);//조회조건에 있는 수행일자
  1668. model.makeValue('/root/send/sch_exectm', exectm);//조회조건에 있는 수행시간
  1669. model.makeValue('/root/send/siflag', siflag);//기존데이터를 복사해 insert하는 경우 Y아니면 N
  1670. model.makeValue('/root/send/ioflag', model.getValue('/root/cond/ioflag'));//외래입원구분
  1671. var pid = model.getValue(xRecMasterPath + "/pid");
  1672. var orddd = model.getValue('/root/main/patinfo/patlist[' + (grd_patinfo.row-1) + ']/indd');//입원일/진료일
  1673. var cretno = model.getValue('/root/main/patinfo/patlist[' + (grd_patinfo.row-1) + ']/cretno');//생성번호
  1674. var orddeptcd = model.getValue('/root/main/patinfo/patlist[' + (grd_patinfo.row-1) + ']/orddeptcd');//진료과
  1675. var orddrid = model.getValue('/root/main/patinfo/patlist[' + (grd_patinfo.row-1) + ']/medispclid');//진료의
  1676. var ioflag = model.getValue('/root/main/patinfo/patlist[' + (grd_patinfo.row-1) + ']/ioflag'); //외래/입원구분
  1677. //신규(insert)일때는 signno를 초기화한다.
  1678. /*
  1679. if((recMasterStat == 'i') || (recMasterStat == 'u' && execdd != recdd)){
  1680. signno = '';
  1681. }else{
  1682. signno = model.getValue(xRecMasterPath + "[" + grd_recmaster.row + "]/signno");
  1683. }
  1684. */
  1685. //alert(grd_recmaster.row + '의 signno : ' + signno);
  1686. /* [각 구분별 기록서식코드]
  1687. * 중증도_일반병동 : 0000002439
  1688. * 중증도_신생아 ICU : 0000002440
  1689. * 중증도_혈액투석 : 0000002441
  1690. * 중증도_중환자실 : 0000002442
  1691. * 중증도_정신과병동 : 0000002444
  1692. * 낙상사정_아동 : 0000002447
  1693. * 낙상사정_성인(Morse Scale) : 0000002449
  1694. * 욕창사정(Braden Scale) : 0000002450
  1695. */
  1696. var recflag = model.getValue('/root/cond/recflag');
  1697. var clsflag = model.getValue('/root/cond/clsflag');
  1698. var formcd;//기록서식코드
  1699. var formnm;//서식명
  1700. if(clsflag == '1'){
  1701. formcd = '0000002439'; //중증도_일반병동
  1702. formnm = '중증도사정(일반병동)';
  1703. recflag = '1';
  1704. clsflag = '1';
  1705. }else if(clsflag == '2'){
  1706. formcd = '0000002440'; //중증도_신생아 ICU
  1707. formnm = '중증도사정(신생아 ICU)';
  1708. recflag = '1';
  1709. clsflag = '2';
  1710. }else if(clsflag == '5'){
  1711. formcd = '0000002444'; //중증도_정신과병동
  1712. formnm = '중증도사정(정신과병동)';
  1713. recflag = '1';
  1714. clsflag = '5';
  1715. }else if(clsflag == '4' || clsflag == '6' || clsflag == '7'){
  1716. formcd = '0000002442'; //중증도_중환자실
  1717. formnm = '중증도사정(중환자실)';
  1718. recflag = '1';
  1719. clsflag = '4';
  1720. }else if(clsflag == '3'){
  1721. formcd = '0000002441'; //중증도_혈액투석
  1722. formnm = '중증도사정(혈액투석)';
  1723. recflag = '1';
  1724. clsflag = '3';
  1725. }else if(clsflag == '8'){
  1726. formcd = '0000002447'; //낙상사정_아동
  1727. formnm = '낙상위험사정(Humpty Dumpty Scale)';
  1728. recflag = '2';
  1729. clsflag = '1';
  1730. }else if(clsflag == '9'){
  1731. formcd = '0000002449'; //낙상사정_성인 (Morse Scale)
  1732. formnm = '낙상위험사정(Morse Scale)'; // 성인 -> Morse Scale 변경 (2011.03.17 ahn)
  1733. recflag = '2';
  1734. clsflag = '2';
  1735. }else if(clsflag == '10'){
  1736. formcd = '0000002450'; //욕창
  1737. formnm = '욕창위험사정(Braden Scale)'; // 욕창 -> Braden Scale 변경 (2011.04.13 ahn)
  1738. recflag = '3';
  1739. clsflag = '1';
  1740. }
  1741. //alert(formcd);
  1742. //상세점수내역 노드를 만들어서 보낸다.
  1743. //temp/signdata/recpntgrup/recpntlist/timsval
  1744. //temp/signdata/recpntgrup/recpntlist/hngnm
  1745. model.removenode('/root/temp/signdata');
  1746. model.makeNode('/root/temp/signdata/recpntgrup/recpntlist');
  1747. //중증기록구분을 한글명으로 노드를 만들어서 내보낸다.
  1748. var xDetailPath = '/root/temp/signdata/detailinfo';
  1749. model.makeNode(xDetailPath);
  1750. model.makeValue(xDetailPath + '/formnm', formnm);
  1751. model.makeValue(xDetailPath + '/recflag', recflag);
  1752. model.makeValue(xDetailPath + '/clsflag', clsflag);
  1753. var recpntCnt = getNodesetCount("/root/main/recpntgrup/pnttitlgruplist");
  1754. var timsval, hngnm;
  1755. var colno;
  1756. for(var i = 1; i <= recpntCnt; i++){
  1757. if(i < 10){
  1758. colno = '0' + i;
  1759. }else{
  1760. colno = i;
  1761. }
  1762. timsval = model.getValue(xRecPntPath + '/timsval' + colno);
  1763. hngnm = model.getValue('/root/main/recpntgrup/pnttitlgruplist[' + i + ']/hngnm');
  1764. //alert(colno + ', ' + timsval + ', ' + hngnm + ', ' + i);
  1765. model.makeValue('/root/temp/signdata/recpntgrup/recpntlist[' + i + ']/timsval', timsval);
  1766. model.makeValue('/root/temp/signdata/recpntgrup/recpntlist[' + i + ']/hngnm', hngnm);
  1767. }
  1768. // Sign.certreload = true ; // 전자서명 호출시 인증저장 버튼을 누늘때마다 인증서가 뜨도록 처리
  1769. // 인증 로직 호출
  1770. if(Sign.signprocess() == true){ // ▶ 전자인증 관련 환자 인적 정보를 보내줌.
  1771. //alert(Sign.signedInfos[1]);
  1772. var wSigninfo = "pid" +"▦" // 01 등록번호
  1773. + "orddd" +"▦" // 02 입원일자(입원,응급)/진료일자(외래)
  1774. + "cretno" +"▦" // 03 생성번호
  1775. + "signno" +"▦" // 04 서명번호(인증번호)
  1776. + "recdd" +"▦" // 05 실제 기록이 이루어진 기록일자
  1777. + "rectm" +"▦" // 06 실제 기록이 이루어진 기록시간
  1778. + "recsaveflag" +"▦" // 07 전자서명 인적정보 변경여부(기록일시 변경되는 경우 : Y, 그외 : N)
  1779. + "signflag" +"▦" // 08 서명자료구분(01 : 진료, 02 : 간호, 03 : LIS, 04 : 진료지원)
  1780. + "signgenrflag" +"▦" // 09 외래/입원구분(코드정의서 M0010 참조)
  1781. + "formcd" +"▦" // 10 각 기록지별 서식코드 0000002473 N57 간호 수술간호기록
  1782. + "orddeptcd" +"▦" // 11 진료부서코드
  1783. + "orddrid" +"▦" // 12 진료의사ID (집도의)
  1784. + "signbfcnts" +"▦" // 13 ▶ 인증할 데이터 정보(미기록 노드 제거된 정보)
  1785. + "signaftcnts" +"▦" // 14 ▶ 공인인증 처리후 데이터
  1786. + "screenid" +"▦" // 15 ▶ 화면아이디
  1787. + "certflag" +"▩" // 16 ▶ 인증여부( T : 임시저장, C : 인증저장)
  1788. + pid +"▦" // 01 등록번호
  1789. + orddd +"▦" // 02 입원일자(입원,응급)/진료일자(외래)
  1790. + cretno +"▦" // 03 생성번호
  1791. + signno +"▦" // 04 서명번호(인증번호)
  1792. + getCurrentDate() +"▦" // 05 실제 기록이 이루어진 기록일자
  1793. + getCurrentTime() +"▦" // 06 실제 기록이 이루어진 기록시간
  1794. + "Y" +"▦" // 07 전자서명 인적정보 변경여부(기록일시 변경되는 경우 : Y, 그외 : N)
  1795. + "02" +"▦" // 08 서명자료구분(01 : 진료, 02 : 간호, 03 : LIS, 04 : 진료지원)
  1796. + ioflag +"▦" // 09 외래/입원구분(코드정의서 M0010 참조)
  1797. + formcd +"▦" // 10 각 기록지별 서식코드 (emr.mrfmform)
  1798. + orddeptcd +"▦" // 11 진료부서코드
  1799. + orddrid +"▦" // 12 진료의사ID
  1800. + Sign.signedInfos[1] +"▦" // 13 ▶ 인증할 데이터 정보(미기록 노드 제거된 정보)
  1801. + Sign.signedInfos[2] +"▦" // 14 ▶ 공인인증 처리후 데이터
  1802. + getScreenID() +"▦" // 15 ▶ 화면아이디
  1803. + "C" +"▩"; // 16 ▶ 인증여부( T : 임시저장, C : 인증저장)
  1804. model.makeValue("/root/send/signinfo" , wSigninfo);
  1805. } else {
  1806. return ;
  1807. }
  1808. var test_1 = grd_recmaster.getUpdateDataAll('i'); // 150114 - AYS
  1809. model.makeValue('/root/send/recmaster', grd_recmaster.getUpdateDataAll('i'));
  1810. //model.makeValue('/root/send/recmaster', (sRecHeader + sRecData));
  1811. for( var idx = 1 ; idx <= getNodesetCount(xRecDetailPath) ; idx++){
  1812. if ( Number(model.getValue(xRecDetailPath + '[' + idx + ']/basepnt_multi')) > 0 ){
  1813. model.setValue( xRecDetailPath + '[' + idx + ']/basepnt',model.getValue(xRecDetailPath + '[' + idx + ']/basepnt_multi'));
  1814. }
  1815. }
  1816. var test_2 = grd_recdetail.getUpdateDataAll('i'); // 150114 - AYS
  1817. model.makeValue('/root/send/recdetail', grd_recdetail.getUpdateDataAll('i'));
  1818. //model.makeValue('/root/send/recdetail', (sDetailHeader + sDetailData));
  1819. fLoadFallPnt(recflag, clsflag, bspntnm);
  1820. if(!submit('TXMNW04001')){
  1821. messageBox('저장을', 'E009');
  1822. return;
  1823. }else{
  1824. model.removenode("/root/cond/copyexecdd");
  1825. //환자리스트조회
  1826. //fSearchPatList();
  1827. //중증도조회
  1828. //fSearchRecMaster(grd_patinfo.row);
  1829. //중증도상세점수조회
  1830. //fSearchRecPnt();
  1831. var condparam = '';
  1832. var i = grd_patinfo.row -1;
  1833. if(model.getValue("/root/cond/nextyn")=='Y'){
  1834. if((grd_patinfo.rows-2) > i){
  1835. i = i+1 ;
  1836. }else if((grd_patinfo.rows-2) == i){
  1837. messageBox('다음 환자가 없습니다.', 'E');
  1838. }
  1839. }
  1840. if(model.getValue("/root/main/paminfo/pamlist/dschdd") == "99991231"){ //퇴원환자가 아닌경우
  1841. if( model.getValue('/root/main/patinfo/patlist[' + i + ']/ioflag') =="O" ) {
  1842. //외래환자 상단정보 등록
  1843. condparam = "O"+"▦" + model.getValue("/root/main/patinfo/patlist[" + i + "]/pid")
  1844. + "▦" + model.getValue("/root/main/patinfo/patlist[" + i + "]/indd")
  1845. + "▦" + model.getValue("/root/main/patinfo/patlist[" + i + "]/cretno")
  1846. + "▦" + getUserInfo("dutplceinstcd")
  1847. + getCurrentDate();
  1848. }
  1849. // 응급실 추가 2011.03.15 (Ahn)
  1850. else if(model.getValue('/root/main/patinfo/patlist[' + i + ']/ioflag') =="E" ) {
  1851. //응급환자 상단정보 등록
  1852. condparam = "E"+"▦" + model.getValue("/root/main/patinfo/patlist[" + i + "]/pid")
  1853. + "▦" + model.getValue("/root/main/patinfo/patlist[" + i + "]/indd")
  1854. + "▦" + model.getValue("/root/main/patinfo/patlist[" + i + "]/cretno")
  1855. + "▦" + getUserInfo("dutplceinstcd")
  1856. + getCurrentDate();
  1857. }else{
  1858. //재원환자 상단정보 등록
  1859. condparam = "I"+"▦" + model.getValue("/root/main/patinfo/patlist[" + i + "]/pid")
  1860. + "▦" + model.getValue("/root/main/patinfo/patlist[" + i + "]/indd")
  1861. + "▦" + model.getValue("/root/main/patinfo/patlist[" + i + "]/cretno")
  1862. + "▦" + getUserInfo("dutplceinstcd")
  1863. + getCurrentDate();
  1864. }
  1865. }else { //퇴원환자인 경우
  1866. if( model.getValue('/root/main/patinfo/patlist[' + i + ']/ioflag') =="O" ) {
  1867. //외래환자 상단정보 등록
  1868. condparam = "O"+"▦" + model.getValue("/root/main/patinfo/patlist[" + i + "]/pid")
  1869. + "▦" + model.getValue("/root/main/patinfo/patlist[" + i + "]/indd")
  1870. + "▦" + model.getValue("/root/main/patinfo/patlist[" + i + "]/cretno")
  1871. + "▦" + getUserInfo("dutplceinstcd")
  1872. + "▦" + model.getValue("/root/main/paminfo/pamlist/dschdd");
  1873. }// 응급실 추가 2011.03.15 (Ahn)
  1874. else if(model.getValue('/root/main/patinfo/patlist[' + i + ']/ioflag') =="E" ) {
  1875. //응급환자 상단정보 등록
  1876. condparam = "E"+"▦" + model.getValue("/root/main/patinfo/patlist[" + i + "]/pid")
  1877. + "▦" + model.getValue("/root/main/patinfo/patlist[" + i + "]/indd")
  1878. + "▦" + model.getValue("/root/main/patinfo/patlist[" + i + "]/cretno")
  1879. + "▦" + getUserInfo("dutplceinstcd")
  1880. + "▦" + model.getValue("/root/main/paminfo/pamlist/dschdd");
  1881. }else{
  1882. //재원환자 상단정보 등록
  1883. condparam = "I"+"▦" + model.getValue("/root/main/patinfo/patlist[" + i + "]/pid")
  1884. + "▦" + model.getValue("/root/main/patinfo/patlist[" + i + "]/indd")
  1885. + "▦" + model.getValue("/root/main/patinfo/patlist[" + i + "]/cretno")
  1886. + "▦" + getUserInfo("dutplceinstcd")
  1887. + "▦" + model.getValue("/root/main/paminfo/pamlist/dschdd");
  1888. }
  1889. }
  1890. setParameter("condparam", condparam);
  1891. modal("SPMMO08900", 1, "", "", "", "", "", "left:0; right:0; width:0; height:0; sysmenu:hidden; caption:hidden; min:hidden, max:hidden;");
  1892. //조회조건 clear
  1893. model.setValue('/root/cond/pid', '');
  1894. //환자정보 표시 clear (2011.03.29 Ahn)
  1895. model.setValue('root/cond/patnm', '');
  1896. model.setValue('root/cond/sexage', '');
  1897. model.setValue('root/cond/age', '');
  1898. // 해당 환자 pid 임시 저장
  1899. var patPid = model.getValue("/root/main/patinfo/patlist[" + i + "]/pid");
  1900. var patIdx = "";
  1901. //환자정보 조회
  1902. fSearchPatList(); // 환자정보 재조회 (2011.03.30 Ahn)
  1903. // 해당 환자정보 재 표시
  1904. model.setValue('/root/cond/pid', model.getValue("/root/main/patinfo/patlist[pid = '" + patPid + "']/pid"));
  1905. model.setValue('/root/cond/patnm', model.getValue("/root/main/patinfo/patlist[pid = '" + patPid + "']/hngnm"));
  1906. model.setValue('/root/cond/sexage', model.getValue("/root/main/patinfo/patlist[pid = '" + patPid + "']/sexage"));
  1907. model.setValue('/root/cond/age', model.getValue("/root/main/patinfo/patlist[pid = '" + patPid + "']/age"));
  1908. // 해당 환자 인덱스 선택 재 지정
  1909. for(i=2; i<=grd_patinfo.rows; i++){
  1910. if(patPid == grd_patinfo.valueMatrix(i,grd_patinfo.colRef("pid"))){
  1911. model.setFocus("grd_patinfo");
  1912. patIdx = i;
  1913. break;
  1914. }
  1915. }
  1916. grd_patinfo.row = patIdx;
  1917. //중증도/낙상/욕창 내역 조회(grd_recmaster)
  1918. fSearchRecMaster(patIdx,"save");
  1919. }
  1920. }else if(Number(msg) == 7){//아니오
  1921. return;
  1922. }
  1923. }
  1924. }
  1925. /**
  1926. * @group :
  1927. * @ver : 2008.08.20
  1928. * @by : dhkim
  1929. * @-------------------------------------------------------------------------------------------------------
  1930. * @type : function
  1931. * @access : public
  1932. * @param :
  1933. * @return :
  1934. * @desc : 상세내역 체크한 점수를 항목별로 합산하여 상세점수 노드에 set한다.
  1935. * 0. 항목의 index값을 임시저장
  1936. * 1. 항목에 해당하는 명칭 get (pnttitlgruplist)
  1937. * 2. 1의 명칭에 해당하는 clstlcd get (recdetailgruplist)
  1938. * 3. supcd가 2인 그룹의 첫번째 index를 찾는다.
  1939. * 4. 3부터 detail값을 반복하여 supcd가 2인 그룹의 점수를 합산 (recdetailgruplist)
  1940. * 5. 상세점수에 0번째 timsval+0 노드에 3값을 세팅 (recpntlist)
  1941. */
  1942. function fSetRecDetailPnt(){
  1943. var recpntTitlCnt = getNodesetCount("/root/main/recpntgrup/pnttitlgruplist");
  1944. var titlhngnm;
  1945. var clstlcd;
  1946. var detlFidx;
  1947. var basepnt = 0;
  1948. var totpnt = 0;
  1949. var flag;
  1950. if ( model.getValue("/root/cond/agechk") == "Y" ){
  1951. return;
  1952. }
  1953. for(var i = 1; i <= recpntTitlCnt; i++){
  1954. //1. 항목에 해당하는 명칭 get (pnttitlgruplist)
  1955. titlhngnm = model.getValue('/root/main/recpntgrup/pnttitlgruplist[' + i + ']/hngnm');
  1956. //2. 1의 명칭에 해당하는 clstlcd get (recdetailgruplist)
  1957. clstlcd = model.getValue("/root/main/recdetailgrup/recdetailgruplist[hngnm='" + titlhngnm + "']/clstlcd");
  1958. //3. supcd가 2인 그룹의 첫번째 index를 찾는다.
  1959. detlFidx = grd_recdetail.findRow(clstlcd, 1, grd_recdetail.colRef("supcd"));
  1960. //alert('detlFidx : ' + detlFidx + ', clstlcd : ' + clstlcd );
  1961. //4. 3부터 detail값을 반복하여 supcd가 2인 그룹의 점수를 합산 (recdetailgruplist)
  1962. for(var j = detlFidx; j <= grd_recdetail.rows; j++){
  1963. supcd = model.getValue(xRecDetailPath + '[' + j + ']/supcd');
  1964. flag = model.getValue(xRecDetailPath + '[' + j + ']/flag');
  1965. //basepnt = model.getValue(xRecDetailPath + '[' + j + ']/basepnt');
  1966. //alert('supcd : ' + supcd + ', flag : ' + flag + ', basepnt : ' + basepnt);
  1967. if(supcd == clstlcd){
  1968. if(flag == 'Y'){//체크된 데이터만 합산한다.
  1969. if( model.getValue(xRecDetailPath + '[' + j + ']/timsinptyn') == "Y" ){//횟수입력여부
  1970. basepnt = Number(model.getValue(xRecDetailPath + '[' + j + ']/basepnt')) * Number(model.getValue(xRecDetailPath + '[' + j + ']/timsval'));
  1971. } else {
  1972. basepnt = Number(model.getValue(xRecDetailPath + '[' + j + ']/basepnt'));
  1973. }
  1974. model.makeValue(xRecDetailPath + '[' + j + ']/basepnt_multi',basepnt);
  1975. totpnt += Number(basepnt);
  1976. }
  1977. }else{
  1978. j = grd_recdetail.rows;//for루프를 멈춘다.
  1979. }
  1980. }
  1981. //5. 상세점수에 i번째 timsval+i 노드에 3값을 세팅 (recpntlist)
  1982. if(i < 10){
  1983. colno = '0' + i;
  1984. }else{
  1985. colno = i;
  1986. }
  1987. model.setValue(xRecPntPath + '/timsval' + colno, totpnt);
  1988. totpnt = 0; //초기화
  1989. basepnt=0;
  1990. }
  1991. }
  1992. /**
  1993. * @group :
  1994. * @ver : 2008.06.25
  1995. * @by : dhkim not used
  1996. * @-------------------------------------------------------------------------------------------------------
  1997. * @type : function
  1998. * @access : public
  1999. * @param :
  2000. * @return :
  2001. * @desc : 중증도 마스터와 상세내역을 저장한다.
  2002. * - 저장전 중증도 상세내역 점수의 유효성을 체크한다.
  2003. * - 상세내역의 체크된 내역 점수를 합산하여 기록마스터의 totpnt에 set한다.
  2004. * - 이미 기록이 입력되어 있는 경우에 -> grd_recmaster에 상태값이 'u'임.
  2005. * 기록된 날짜가 조회조건의 수행일자와 같으면 db에 update처리하고
  2006. * 기록된 날짜와 조회조건의 수행일자가 다르면 신규로 insert처리한다.(메세지로 알려줄것)
  2007. * @-------------------------------------------------------------------------------------------------------
  2008. */
  2009. function fSave(){
  2010. var recMasterStat = model.getValue(xRecMasterPath + '[' + grd_recmaster.row + ']/stat');//기록마스터의 상태값
  2011. if(recMasterStat == '-'){//저장내역 없으면 바로리턴
  2012. return false;
  2013. }
  2014. //저장전 유효성을 체크한다.
  2015. if(fIsValid()){
  2016. //상세내역의 체크점수를 합산하여 마스터의 totpnt에 set한다.
  2017. var totPnt = fSumPnt();
  2018. model.setValue(xRecMasterPath + '[' + grd_recmaster.row + ']/totpnt', totPnt);
  2019. var execdd = model.getValue('/root/cond/execdd');//조회조건의 수행일자
  2020. var exectm = model.getValue('/root/cond/exectm');//조회조건의 수행시간
  2021. var recdd = model.getValue(xRecMasterPath + '[' + grd_recmaster.row + ']/execdd');//기록된 일자
  2022. var msgStr = '중증도 및 위험사정의 기록내역을';
  2023. //이미 기록이 입력되어 있는 경우에 기록된 날짜가 조회조건의 수행일자와 같으면 db에 update처리
  2024. if(recMasterStat == 'u' && execdd != recdd){
  2025. msgStr = '이미 저장된 기록 내역이 있습니다. 다시';
  2026. }else{//신규등록및 이미기록되었으나 기록일자와 수행일자가 같을때..
  2027. msgStr = '중증도 및 위험사정의 기록내역을';
  2028. }
  2029. var msg = messageBox(msgStr, 'Q002');//저장하시겠습니까?
  2030. if(Number(msg) == 6){//예
  2031. model.removenode('/root/send');
  2032. model.makeValue('/root/send/recmaster', grd_recmaster.getUpdateDataAll('i'));
  2033. model.makeValue('/root/send/recdetail', grd_recdetail.getUpdateDataAll('i'));
  2034. model.makeValue('/root/send/sch_execdd', execdd);//조회조건에 있는 수행일자
  2035. model.makeValue('/root/send/sch_exectm', exectm);//조회조건에 있는 수행시간
  2036. if(!submit('TXMNW04001')){
  2037. messageBox('중증도및 위험사정의 저장을', 'E009');
  2038. return;
  2039. }else{
  2040. //중증도조회
  2041. fSearchRecMaster(grd_patinfo.row);
  2042. }
  2043. }else if(Number(msg) == 7){//아니오
  2044. return;
  2045. }
  2046. }
  2047. }
  2048. /**
  2049. * @group :
  2050. * @ver : 2008.06.25
  2051. * @by : dhkim
  2052. * @-------------------------------------------------------------------------------------------------------
  2053. * @type : function
  2054. * @access : public
  2055. * @param :
  2056. * @return : totpnt 총점
  2057. * @desc : 상세내역 체크된 내역의 점수를 합산한다.
  2058. * @-------------------------------------------------------------------------------------------------------
  2059. */
  2060. function fSumPnt(){
  2061. var flag, timsval;
  2062. var totPnt = 0;
  2063. if ( model.getValue("/root/cond/agechk") == "Y" ){
  2064. return "";
  2065. }
  2066. for(var i = 1; i < grd_recdetail.rows; i++){
  2067. flag = model.getValue(xRecDetailPath + '[' + i + ']/flag');
  2068. if(flag == 'Y'){
  2069. if( model.getValue(xRecDetailPath + '[' + i + ']/timsinptyn') == "Y" ){//횟수입력여부
  2070. timsval = Number(model.getValue(xRecDetailPath + '[' + i + ']/basepnt')) * Number(model.getValue(xRecDetailPath + '[' + i + ']/timsval'));
  2071. } else {
  2072. timsval = Number(model.getValue(xRecDetailPath + '[' + i + ']/basepnt'));
  2073. }
  2074. totPnt += Number(timsval);
  2075. }
  2076. }
  2077. return totPnt;
  2078. }
  2079. /**
  2080. * @group :
  2081. * @ver : 2008.06.25
  2082. * @by : dhkim
  2083. * @-------------------------------------------------------------------------------------------------------
  2084. * @type : function
  2085. * @access : public
  2086. * @param :
  2087. * @return :
  2088. * @desc : 중증도 마스터와 상세내역을 저장하기 전 데이터의 유효성을 체크한다.
  2089. * - 상세내역에 미체크 내역이 있는지 확인한다.
  2090. * - 2008.08.06 dhkim 요구사항 추가
  2091. * [모든항목 필수체크하는경우]
  2092. * 1) 중증도 : 일반병동, 정신과병동(DT, ECT항목은 필수아님), 혈액투석
  2093. * 2) 욕창
  2094. * clsflag = 1, 3, 5, 10(화면내부)
  2095. *
  2096. * [모든항목 필수체크아닌경우]
  2097. * 1) 중증도 : 중환자실, 신생아ICU
  2098. * 2) 낙상 : 성인, 소아
  2099. * clsflag = 2, 4, 8, 9(화면내부)
  2100. * - 2008.08.20 dhkim 요구사항 추가
  2101. * 낙상의 경우 나이를 체크할것.
  2102. * 낙상 소아 : 만 12세 미만 clsflag = 8
  2103. * 낙상 성인 : 만 13세 이상 clsflag = 9
  2104. * - 2008.08.27 dhkim 요구사항 추가
  2105. * 체크된 항목에 대해 횟수 입력필드가 0이면 횟수입력하라는 메세지 띄울것
  2106. * @-------------------------------------------------------------------------------------------------------
  2107. */
  2108. function fIsValid(){
  2109. var supcd;
  2110. var _supcd, _flag, _hngnm, _timsval;
  2111. var isChecked = false;
  2112. var clsflag = model.getValue('/root/cond/clsflag');
  2113. var age = model.getValue("/root/main/patinfo/patlist[" + (grd_patinfo.row-1) + "]/sexage").split('/')[1];
  2114. //환자가 선택되지 않은경우 기록을 입력할수 없다.
  2115. var pid = grd_recpnt.valueMatrix(2, 1);//20080917 수정
  2116. if(pid == ''){
  2117. messageBox('기록하려는 환자정보가 존재하지 않습니다. 환자를 먼저 선택하신 후 기록을 작성하세요.', 'E');
  2118. return false;
  2119. }
  2120. //20080827
  2121. //체크된 항목에 대해 횟수 입력필드가 0이면 횟수입력하라는 메세지 띄울것
  2122. for(var j = 1; j < grd_recdetail.rows; j++){
  2123. _flag = model.getValue(xRecDetailPath + '[' + j + ']/flag');
  2124. _timsval = model.getValue(xRecDetailPath + '[' + j + ']/timsval');
  2125. _hngnm = model.getValue(xRecDetailPath + '[' + j + ']/hngnm');
  2126. //20080827
  2127. //체크된 항목에 대해 횟수 입력필드가 0이면 횟수입력하라는 메세지 띄울것
  2128. if(_flag == 'Y' && _timsval != '' && (_timsval == '0' || _timsval == 0)){
  2129. messageBox('[' + _hngnm + ']의 횟수가 입력되지 않았습니다. 횟수를', 'C001');
  2130. grd_recdetail.topRow = j;
  2131. return false;
  2132. }
  2133. }
  2134. //20080923 dhkim 2차리허설 요구사항 (소아청소년과의 경우 13세 이상이라도 입원할 경우가 있기때문에 나이제한을 두지 말아야 한다.)
  2135. /*
  2136. //낙상성인, 낙상소아의 경우 환자 나이를 체크함
  2137. if(clsflag == '8'){//낙상소아
  2138. if(age > 13){
  2139. messageBox('해당 환자의 나이가 ' + age + '세이므로 아동 낙상위험사정 기록을', 'E001');
  2140. return false;
  2141. }
  2142. }else if(clsflag == '9'){//낙상성인
  2143. if(age < 13){
  2144. messageBox('해당 환자의 나이가 ' + age + '세이므로 성인 낙상위험사정 기록을', 'E001');
  2145. return false;
  2146. }
  2147. }
  2148. */
  2149. //낙상성인 (Morse Scale), 낙상소아, 중증도 중환자실, 신생아ICU 은 필수체크 안함
  2150. if(clsflag == '2' || clsflag == '4' || clsflag == '6' || clsflag == '7' || clsflag == '8' || clsflag == '9'){
  2151. return true;
  2152. }
  2153. var testhngnm = '';
  2154. //상세내역의 미체크 내역이 있는지 확인한다.
  2155. //정신과병동 선택했을때 항목중 DT(<clstlcd>00000440</clstlcd>), ECT(<clstlcd>00000447</clstlcd>)는 필수아님
  2156. for(var i = 1; i <= grd_recdetail.rows; i++){
  2157. supcd = model.getValue(xRecDetailPath + '[' + i + ']/supcd');
  2158. if(i == (grd_recdetail.rows)){
  2159. if(isChecked == false){//마지막 row의 그룹은 비교할 데이터가 없으므로 체크값이false이면 blocking건다.(20080825)
  2160. //2008.08.07 dhkim 추가
  2161. //정신과병동 선택했을때 항목중 DT, ECT는 필수아님
  2162. if((clsflag == '5' && hngnm == 'DT')||(clsflag == '5' && hngnm == 'ECT')){
  2163. //skip
  2164. }else{
  2165. messageBox(hngnm + '(이)가 선택되지 않았습니다.' + hngnm + '(를)을', 'C001');//선택하십시오.
  2166. grd_recdetail.topRow = i-1;
  2167. return false;
  2168. }
  2169. }
  2170. }
  2171. if(supcd == '00000000'){
  2172. hngnm = model.getValue(xRecDetailPath + '[' + i + ']/hngnm');
  2173. for(var j = (i + 1); j < grd_recdetail.rows; j++){
  2174. _supcd = model.getValue(xRecDetailPath + '[' + j + ']/supcd');
  2175. //alert('상위 : ' + hngnm + ', 하위 : ' + model.getValue(xRecDetailPath + '[' + j + ']/hngnm') );
  2176. if(supcd == _supcd){
  2177. if(isChecked == false){//다른그룹으로 변경됐을때 isChecked가 false이면 리턴하면서 해당 row를 젤 위로 가도록 보여줌-_-;
  2178. //2008.08.07 dhkim 추가
  2179. //정신과병동 선택했을때 항목중 DT, ECT는 필수아님
  2180. if((clsflag == '5' && hngnm == 'DT')||(clsflag == '5' && hngnm == 'ECT')){
  2181. //skip
  2182. }else{
  2183. messageBox(hngnm + '(이)가 선택되지 않았습니다.' + hngnm + '(를)을', 'C001');//선택하십시오.
  2184. grd_recdetail.topRow = i;
  2185. return false;
  2186. }
  2187. }
  2188. isChecked = false;
  2189. j = grd_recdetail.rows;
  2190. //break;
  2191. }else{
  2192. _flag = model.getValue(xRecDetailPath + '[' + j + ']/flag');
  2193. if(_flag == 'Y'){
  2194. isChecked = true;
  2195. }
  2196. }
  2197. }
  2198. }
  2199. }
  2200. return true;
  2201. }
  2202. /**
  2203. * @group :
  2204. * @ver : 2007.12.06
  2205. * @by : 신혁춘
  2206. * @---------------------------------------------------
  2207. * @type : function
  2208. * @access : public
  2209. * @desc : 내환자 정보를 조회한다.
  2210. * @param :
  2211. * @return :
  2212. * @---------------------------------------------------
  2213. */
  2214. function fmisetting(){
  2215. var setid = getUserId();
  2216. var setdeptcd = getUserInfo("dutplcecd");
  2217. model.removeNodeset("/root/send");
  2218. model.removeNodeset("/root/hidden/setting/settingrn");
  2219. //인공신장실 혈액투석간호기록에서 화면 연동시 parma추가-kys-20100412
  2220. if(getScreenMenuParameter() == "SMMND" || opener.javascript.getParameter("SMMND00700_param_dial") == "dialrec"){
  2221. model.makeValue("/root/send/wardcd", setdeptcd);
  2222. } else {
  2223. model.makeValue("/root/send/wardcd", model.getValue("/root/cond/wardcd"));
  2224. }
  2225. //내환자세팅한 간호사 조회
  2226. if(submit("TRMNW04012")){
  2227. //병동 변경시 내환자 정보 셋팅됨_2009-02-09_SMY수정
  2228. model.setValue("/root/cond/settingrnid", "");
  2229. for(i = 1; i <= getNodesetCount("/root/hidden/setting/settingrn"); i++ ) {
  2230. if (model.getValue("/root/hidden/setting/settingrn[" + i + "]/settingrnid") == setid) {
  2231. model.setValue("/root/cond/settingrnid", setid);
  2232. }
  2233. }
  2234. /*
  2235. var pid = model.getValue("/root/main/paminfo/pamlist/pid");//상단정보
  2236. var setid = getUserId();
  2237. var setCnt = getNodesetCount('/root/hidden/setting/settingrn');
  2238. var setRow = 0;
  2239. for(var i = 1; i < setCnt; i++){
  2240. if(model.getValue('/root/hidden/setting/settingrn[" + i + "]/settingrnid') == setid){
  2241. setRow = i-1;
  2242. break;
  2243. }
  2244. }
  2245. if(setRow > 0 && pid == ''){//상단정보 설정안되어 있을때
  2246. model.setValue('/root/cond/settingrnid', setid);//세션의 간호사로 아이디세팅
  2247. } else {
  2248. model.setValue('/root/cond/settingrnid', '-');//없으면 default
  2249. }
  2250. */
  2251. }
  2252. model.refresh();
  2253. return;
  2254. }
  2255. /**
  2256. * @group :
  2257. * @ver : 2007.12.06
  2258. * @by : 신혁춘
  2259. * @---------------------------------------------------
  2260. * @type : function
  2261. * @access : public
  2262. * @desc : 중증도 상세내역의 설명을 조회한다.
  2263. * @param :
  2264. * @return :
  2265. * @---------------------------------------------------
  2266. */
  2267. function fHistDescs(){
  2268. model.removeNodeset("/root/main/tar_desccnts");
  2269. var iRow = grd_recdetail.row;
  2270. model.makeValue("/root/main/tar_desccnts",model.getValue(xRecDetailPath+"["+iRow+"]/desccnts"));
  2271. tar_desccnts.refresh();
  2272. }
  2273. /**
  2274. * @ver : 2008.06.09
  2275. * @author : dhkim
  2276. * @------------------------------------------------------------------------------
  2277. * @access : public
  2278. * @type : function
  2279. * @param :
  2280. * @desc : 선택된 병동에 따라 중증도/낙상/욕창 구분을 default선택한다.
  2281. * @--------------------------------------------------------------------------------
  2282. */
  2283. function fSelectDefaultRdoCond(clsseting){
  2284. /*
  2285. switch (clsseting){
  2286. case "3050122000" : rdo_clsflaga.value = "5" ; break; //10층동병동(정신과병동)
  2287. case "2110201000" : rdo_clsflaga.value = "2" ; break; //신생아중환자실(신생아ICU)
  2288. case "3060000000" : rdo_clsflaga.value = "4" ; break; //중환자실
  2289. case "3060600000" : rdo_clsflaga.value = "4" ; break; //2층중환자실
  2290. case "3060400000" : rdo_clsflaga.value = "4" ; break; //순환기계중환자실
  2291. case "3060300000" : rdo_clsflaga.value = "4" ; break; //신경외과중환자실
  2292. case "3060200000" : rdo_clsflaga.value = "4" ; break; //외과중환자실
  2293. case "3060100000" : rdo_clsflaga.value = "4" ; break; //내과중환자실
  2294. default : rdo_clsflaga.value = "1" //default는 일반병동임.
  2295. }
  2296. */
  2297. var setflag = "1";
  2298. //중증도 기록에서 사용하는 부서코드 조회_20090414_SMY추가
  2299. for(i = 1; i <= getNodesetCount("/root/init/icucdgrup/icucdgruplist"); i++){
  2300. if(clsseting == model.getValue("/root/init/icucdgrup/icucdgruplist[" + i + "]/wardcd")){ // 중환자실이면
  2301. if(clsseting == model.getvalue("/root/code/codeinfo/codelist[cdgrupid='052']/cdid")){ // 신생아중환자실이면
  2302. setflag = '2';
  2303. } else {
  2304. setflag = model.getValue("/root/init/icucdgrup/icucdgruplist[" + i + "]/clsflag");
  2305. }
  2306. }
  2307. }
  2308. if (setflag == '1') {
  2309. if(clsseting == model.getvalue("/root/code/codeinfo/codelist[cdgrupid='W02']/cdid")){ // 302병동이면
  2310. setflag = '5'
  2311. } else if(clsseting == model.getvalue("/root/code/codeinfo/codelist[cdgrupid='055']/cdid")){ // 인공신장실이면
  2312. setflag = '3'
  2313. } else {
  2314. setflag = '1';
  2315. }
  2316. }
  2317. rdo_clsflaga.value = setflag;
  2318. }
  2319. /**
  2320. * @ver : 2008.06.09
  2321. * @author : dhkim
  2322. * @------------------------------------------------------------------------------
  2323. * @access : public
  2324. * @type : function
  2325. * @param : clsflag 중증도/낙상/욕창 구분(라디오버튼)
  2326. * ioflag 외래/입원구분
  2327. * @desc : 환자정보 더블클릭할때
  2328. * 혈액투석의 경우
  2329. * 입원환자는 조회조건에 기본 조회값(병동, 병실, 환자명, 등록번호)을 세팅해야한다.
  2330. * @--------------------------------------------------------------------------------
  2331. */
  2332. function fSetSearchCondition(clsflag, ioflag){
  2333. if(clsflag == '3' && ioflag == 'O'){
  2334. var pid = model.getValue('/root/main/patinfo/patlist[' + (grd_patinfo.row-1) + ']/pid');
  2335. var patnm = model.getValue('/root/main/patinfo/patlist[' + (grd_patinfo.row-1) + ']/hngnm');
  2336. var sexage = model.getValue('/root/main/patinfo/patlist[' + (grd_patinfo.row-1) + ']/sexage');
  2337. var age = model.getValue('/root/main/patinfo/patlist[' + (grd_patinfo.row-1) + ']/age');
  2338. //환자명, 등록번호 세팅
  2339. model.setValue("/root/cond/pid", pid);
  2340. model.refresh();
  2341. }else if(clsflag == '3' && ioflag == 'I'){
  2342. var pid = model.getValue('/root/main/patinfo/patlist[' + (grd_patinfo.row-1) + ']/pid');
  2343. var roomcd = model.getValue('/root/main/patinfo/patlist[' + (grd_patinfo.row-1) + ']/roomcd');
  2344. var wardcd = model.getValue('/root/main/patinfo/patlist[' + (grd_patinfo.row-1) + ']/wardcd');
  2345. var patnm = model.getValue('/root/main/patinfo/patlist[' + (grd_patinfo.row-1) + ']/hngnm');
  2346. var sexage = model.getValue('/root/main/patinfo/patlist[' + (grd_patinfo.row-1) + ']/sexage');
  2347. var age = model.getValue('/root/main/patinfo/patlist[' + (grd_patinfo.row-1) + ']/age');
  2348. //병동선택
  2349. cmb_ward.value = wardcd;
  2350. //병동에 해당되는 병실검색
  2351. fGetRoom();
  2352. //병실선택
  2353. cmb_room.value = roomcd;
  2354. //병실별 환자검색
  2355. fGetPatient();
  2356. //환자명, 등록번호 세팅
  2357. cmb_pid.value = pid;
  2358. opt_pid.value = pid;
  2359. opt_patnm.value = patnm; // 추가 (2011.03.29 Ahn)
  2360. opt_sexage.value = sexage;
  2361. opt_age.value = age;
  2362. }
  2363. }
  2364. /**
  2365. * 중증도/낙상/욕창 (recflag) 선택여부에 따라 캡션을 변경
  2366. */
  2367. function fChangeCaption(clsflag){
  2368. model.setValue("/root/cond/agechk", "N" );
  2369. //중증도/낙상/욕창 선택여부에 따라 텍스트를 변경
  2370. if(clsflag == "1" ){
  2371. //capt_master.attribute("text") = "일반병동 중증도내역"; // '환자별 중증도 및 위험사정' 으로 고정 (2011.03.29 Ahn)
  2372. capt_pnt.attribute("text") = "일반병동 중증도상세점수";
  2373. capt_detail.attribute("text") = "일반병동 중증도상세내역";
  2374. capt_bedsore.visible=false;
  2375. grp_agechk.visible = false;
  2376. group2.visible = false;
  2377. group4.visible = false;
  2378. grd_recdetail.attribute("height") = "525px";
  2379. }else if(clsflag == "2" ){
  2380. //capt_master.attribute("text") = "신생아 ICU 중증도내역";
  2381. capt_pnt.attribute("text") = "신생아 ICU 중증도상세점수";
  2382. capt_detail.attribute("text") = "신생아 ICU 중증도상세내역";
  2383. capt_bedsore.visible=false;
  2384. grp_agechk.visible = false;
  2385. group2.visible = false;
  2386. group4.visible = false;
  2387. grd_recdetail.attribute("height") = "525px";
  2388. }else if(clsflag == "3" ){
  2389. //capt_master.attribute("text") = "혈액투석 중증도내역";
  2390. capt_pnt.attribute("text") = "혈액투석 중증도상세점수";
  2391. capt_detail.attribute("text") = "혈액투석 중증도상세내역";
  2392. capt_bedsore.visible=false;
  2393. grp_agechk.visible = false;
  2394. group2.visible = false;
  2395. group4.visible = false;
  2396. grd_recdetail.attribute("height") = "525px";
  2397. }else if(clsflag == "4" || clsflag == "6" || clsflag == "7"){
  2398. //capt_master.attribute("text") = "중환자실 중증도내역";
  2399. capt_pnt.attribute("text") = "중환자실 중증도상세점수";
  2400. capt_detail.attribute("text") = "중환자실 중증도상세내역";
  2401. capt_bedsore.visible=false;
  2402. grp_agechk.visible = false;
  2403. group2.visible = false;
  2404. group4.visible = false;
  2405. grd_recdetail.attribute("height") = "525px";
  2406. }else if(clsflag == "5"){
  2407. //capt_master.attribute("text") = "정신과병동 중증도내역";
  2408. capt_pnt.attribute("text") = "정신과병동 중증도상세점수";
  2409. capt_detail.attribute("text") = "정신과병동 중증도상세내역";
  2410. capt_bedsore.visible=false;
  2411. grp_agechk.visible = false;
  2412. group2.visible = false;
  2413. group4.visible = false;
  2414. grd_recdetail.attribute("height") = "525px";
  2415. }else if(clsflag == "8"){
  2416. //capt_master.attribute("text") = "낙상위험사정구분(아동)내역";
  2417. capt_pnt.attribute("text") = "낙상위험사정구분(Humpty Dumpty Scale)상세점수";
  2418. capt_detail.attribute("text") = "낙상위험사정구분(Humpty Dumpty Scale)상세내역";
  2419. capt_bedsore.visible=false;
  2420. group2.visible = false;
  2421. group4.visible = true;
  2422. grd_recdetail.attribute("height") = "420px";
  2423. /*
  2424. if ( instUseYN == "Y" ){
  2425. grp_agechk.visible = true;
  2426. cap_agemsg.attribute("text") = "낙상사정 제외 고위험군입니다";
  2427. }else {
  2428. grp_agechk.visible = false;
  2429. }
  2430. */
  2431. }else if(clsflag == "9"){
  2432. //capt_master.attribute("text") = "낙상위험사정구분(Morse Scale)내역";
  2433. capt_pnt.attribute("text") = "낙상위험사정구분(Morse Scale)상세점수";
  2434. capt_detail.attribute("text") = "낙상위험사정구분(Morse Scale)상세내역";
  2435. capt_bedsore.visible=false;
  2436. group2.visible = true;
  2437. group4.visible = false;
  2438. grd_recdetail.attribute("height") = "420px";
  2439. /*
  2440. if ( instUseYN == "Y" ){
  2441. grp_agechk.visible = true;
  2442. cap_agemsg.attribute("text") = "낙상사정 제외 고위험군입니다";//20100514 khj 소경화itc 요청에의한 메시지 수정
  2443. }else {
  2444. grp_agechk.visible = false;
  2445. }
  2446. */
  2447. }else if(clsflag == "10"){
  2448. // capt_master.attribute("text") = "욕창위험사정구분(욕창)내역";
  2449. capt_pnt.attribute("text") = "욕창위험사정구분(Braden Scale)상세점수";
  2450. capt_detail.attribute("text") = "욕창위험사정구분(Braden Scale)상세내역";
  2451. capt_bedsore.visible=true;
  2452. grp_agechk.visible = false;
  2453. group2.visible = false;
  2454. group4.visible = false;
  2455. grd_recdetail.attribute("height") = "525px";
  2456. }
  2457. }
  2458. /**
  2459. * @ver : 2008.06.09
  2460. * @author : dhkim
  2461. * @------------------------------------------------------------------------------
  2462. * @access : public
  2463. * @type : function
  2464. * @param :
  2465. * @desc : 혈액투석의 경우 환자정보 그리드의 구조를 변경
  2466. * @--------------------------------------------------------------------------------
  2467. */
  2468. function fChangeGridColumn(clsflag){
  2469. if(clsflag == '3'){
  2470. grd_patinfo.colWidth(grd_patinfo.colRef("ioflagnm")) = 33; //구분
  2471. grd_patinfo.colWidth(grd_patinfo.colRef("pid")) = 80; //등록번호
  2472. grd_patinfo.colWidth(grd_patinfo.colRef("roomcd")) = 0; //병실
  2473. grd_patinfo.colWidth(grd_patinfo.colRef("indd")) = 0; //입원일
  2474. grd_patinfo.colWidth(grd_patinfo.colRef("maintepatrgstdd")) = 68; //유지환자등록일자
  2475. //20080820 주석처리 rdo_bloodioflag.attribute("visibility") = "visible";//외래입원구분
  2476. }else{
  2477. grd_patinfo.colWidth(grd_patinfo.colRef("ioflagnm")) = 0; //구분
  2478. grd_patinfo.colWidth(grd_patinfo.colRef("pid")) = 0; //등록번호
  2479. grd_patinfo.colWidth(grd_patinfo.colRef("roomcd")) = 53; //병실
  2480. grd_patinfo.colWidth(grd_patinfo.colRef("indd")) = 69; //입원일
  2481. grd_patinfo.colWidth(grd_patinfo.colRef("maintepatrgstdd")) = 0; //유지환자등록일자
  2482. //20080820 주석처리 rdo_bloodioflag.attribute("visibility") = "hidden";//외래입원구분
  2483. //20080820 주석처리 rdo_bloodioflag.value = '';
  2484. }
  2485. }
  2486. /**
  2487. * @ver : 2008.06.09
  2488. * @author : dhkim
  2489. * @------------------------------------------------------------------------------
  2490. * @access : public
  2491. * @type : function
  2492. * @param : clsflag 중증도/낙상/욕창 구분(라디오버튼)
  2493. * ioflag 외래/입원구분
  2494. * @desc : 환자정보 더블클릭할때
  2495. * 혈액투석의 경우 외래환자는 조회조건을 clear하고 비활성화처리한다.
  2496. * @--------------------------------------------------------------------------------
  2497. */
  2498. function fDisabledSearchArea(clsflag, ioflag){
  2499. //구분이 혈액투석, 외래환자일때 조회조건 clear, 비활성화처리
  2500. if(clsflag == '3' && ioflag == 'O'){
  2501. caption35.attribute('visibility') = 'visible';
  2502. cmb_ward.attribute('visibility') = 'visible';
  2503. // 응급실이 아닐 경우만 보임 (2011.03.15 Ahn)
  2504. if(eERFLAG != "Y"){
  2505. cmb_room.attribute('visibility') = 'visible';
  2506. //cmb_pid.attribute('visibility') = 'visible'; // 환자리스트 콤보 숨기기 (2011.03.29 Ahn)
  2507. }
  2508. cmb_ward.disabled = true;
  2509. cmb_room.disabled = true;
  2510. cmb_pid.disabled = true;
  2511. cmb_ward.value = '';
  2512. cmb_room.value = '';
  2513. }else{
  2514. caption35.attribute('visibility') = 'visible'; // Room 캡션 활성화
  2515. cmb_ward.attribute('visibility') = 'visible'; // 병동선택 라디오 버튼 활성화
  2516. if(eERFLAG != "Y"){
  2517. cmb_room.attribute('visibility') = 'visible'; // 병실선택 활성화
  2518. //cmb_pid.attribute('visibility') = 'visible'; // 환자리스트 콤보 숨기기 (2011.03.29 Ahn)
  2519. }
  2520. if(model.getValue("/root/main/paminfo/pamlist/dschdd") == "99991231"){
  2521. caption35.disabled = false;
  2522. cmb_ward.disabled = false;
  2523. cmb_room.disabled = false;
  2524. cmb_pid.disabled = false;
  2525. }
  2526. }
  2527. }
  2528. /**********************************************************************************************************************************************/
  2529. /***********************************************************스크립트정리중입니다******************************************************************/
  2530. /**********************************************************************************************************************************************/
  2531. /**
  2532. * @group :
  2533. * @ver : 2007.12.14
  2534. * @by : 신혁춘
  2535. * @---------------------------------------------------
  2536. * @type : function
  2537. * @access : public
  2538. * @desc : Sign 정보의 인스턴스를 만든다.
  2539. * @param :
  2540. * @return :
  2541. * @---------------------------------------------------
  2542. */
  2543. function fsingnode(){
  2544. var clsrecchk = model.getValue("/root/main/topattribute/clsflag")
  2545. var a = rdo_clsflaga.label;
  2546. var b = rdo_clsflagb.label;
  2547. var c = rdo_clsflagc.label;
  2548. var iRow = grd_recmaster.row
  2549. var xrecgruplistPath = "/root/main/recgrup/recgruplist"
  2550. if(a != ""){
  2551. model.makeValue("/root/main/sing/redord/clsflag",a);
  2552. }
  2553. if(b != ""){
  2554. model.makeValue("/root/main/sing/redord/clsflag",b);
  2555. }
  2556. if(c != ""){
  2557. model.makeValue("/root/main/sing/redord/clsflag",c);
  2558. }
  2559. model.makeValue("/root/main/sing/redord/usernm",model.getValue(xrecgruplistPath+"["+ iRow +"]/usernm"));
  2560. model.makeValue("/root/main/sing/redord/execdt",model.getValue(xrecgruplistPath+"["+ iRow +"]/execdt"));
  2561. model.makeValue("/root/main/sing/redord/exectm",model.getValue(xrecgruplistPath+"["+ iRow +"]/exectm"));
  2562. var hRow = grd_recdetail.rows
  2563. var k = 1
  2564. var o = 1
  2565. var xhistgruplistPath = "/root/main/histgrup/histgruplist"
  2566. var xsinghistgrupPath = "/root/main/sing/histgrup"
  2567. var total = 0
  2568. var only = 0
  2569. var supcd2 = "00000000"
  2570. for(i=0; i <= hRow; i++){
  2571. var flagchk = model.getValue(xhistgruplistPath+"["+i+"]/flag")
  2572. var supcdk = model.getValue(xhistgruplistPath+"["+i+"]/supcd")
  2573. if(supcdk == "00000000"){
  2574. model.makeNode("/root/main/sing/histgrup["+k+"]");
  2575. model.copyNode("/root/main/sing/histgrup["+k+"]", xhistgruplistPath+"["+i+"]");
  2576. k = k + 1
  2577. }
  2578. if(flagchk == "Y"){
  2579. model.makeNode("/root/main/sing/histgrup["+k+"]");
  2580. model.copyNode("/root/main/sing/histgrup["+k+"]", xhistgruplistPath+"["+i+"]");
  2581. k = k + 1
  2582. }
  2583. }
  2584. for(i=0; i <= hRow; i++){
  2585. var flagchk = model.getValue(xhistgruplistPath+"["+i+"]/flag")
  2586. var supcdk = model.getValue(xhistgruplistPath+"["+i+"]/supcd")
  2587. if(supcdk == "00000000"){
  2588. var l = 0
  2589. var grupcd1 = model.getValue(xhistgruplistPath+"["+i+"]/grupcd")
  2590. }
  2591. var supcd1 = model.getValue(xhistgruplistPath+"["+i+"]/supcd")
  2592. var sum1 = model.getValue(xhistgruplistPath+"["+i+"]/sumk")
  2593. var sumk = 0
  2594. if(l==0 && flagchk == "Y" && sum1!="Y"){
  2595. for(k=0; k<=hRow; k++){
  2596. supcd2 = model.getValue(xhistgruplistPath+"["+k+"]/supcd")
  2597. var flagchk1 = model.getValue(xhistgruplistPath+"["+k+"]/flag")
  2598. if(supcd1==supcd2 && supcd1==grupcd1 && flagchk1 == "Y"){
  2599. sumk = sumk + (model.getValue(xhistgruplistPath+"["+k+"]/basepnt") * model.getValue(xhistgruplistPath+"["+k+"]/timsinptyn"));
  2600. total = total + (model.getValue(xhistgruplistPath+"["+k+"]/basepnt") * model.getValue(xhistgruplistPath+"["+k+"]/timsinptyn"));
  2601. model.makeValue(xhistgruplistPath+"["+k+"]/sumk", "Y");
  2602. }
  2603. }
  2604. model.makeNode("/root/main/sing/topsum["+o+"]");
  2605. model.makeValue("/root/main/sing/topsum["+o+"]/sum", sumk);
  2606. if(l==0){
  2607. sumk = 0;
  2608. o = o +1
  2609. }
  2610. }
  2611. }
  2612. model.makeNode("/root/main/sing/topsum["+o+"]");
  2613. model.makeValue("/root/main/sing/topsum["+o+"]/sum", total);
  2614. if(clsrecchk != 7 || clsrecchk != 8 || clsrecchk != 9){
  2615. clsflag = model.getValue("/root/main/topattribute/clsflag") ;
  2616. recflag = "1";
  2617. }
  2618. if (clsrecchk == 8 || clsrecchk == 7){
  2619. clsflag = model.getValue("/root/main/topattribute/clsflag") ;
  2620. recflag = "2";
  2621. }
  2622. if (clsrecchk == 9 ){
  2623. clsflag = model.getValue("/root/main/topattribute/clsflag") ;
  2624. recflag = "3";
  2625. }
  2626. var kRow = grd_recmaster.row
  2627. var xrecgruplistPath = "/root/main/recgrup/recgruplist"
  2628. var maddchk01 = model.getValue('/root/cond/maddchk01');
  2629. var maddchk02 = model.getValue('/root/cond/maddchk02');
  2630. var maddchk03 = model.getValue('/root/cond/maddchk03');
  2631. var maddchk04 = model.getValue('/root/cond/maddchk04');
  2632. var haddchk = model.getValue('/root/cond/haddchk');
  2633. var haddchk01 = model.getValue('/root/cond/haddchk');
  2634. var dinfo = maddchk01+maddchk02+maddchk03+maddchk04+haddchk+haddchk01;
  2635. model.makeValue("/root/send/execdt", model.getValue(xrecgruplistPath+"["+kRow+"]/execdt"))
  2636. model.makeValue("/root/send/clsflag", model.getValue("/root/main/topattribute/clsflag") );
  2637. model.makeValue("/root/send/recflag", recflag);
  2638. model.makeValue("/root/send/totpnt", total);
  2639. model.makeValue('/root/send/bspntgrup/dinfo', dinfo);
  2640. if(submit("TRMNW04014")){
  2641. o = o+1
  2642. model.makeNode("/root/main/sing/topsum["+o+"]");
  2643. model.makeValue("/root/main/sing/topsum["+o+"]/sum", model.getValue("/root/main/sfbp/sfbpinfo/clsgrupkind"));
  2644. }
  2645. }
  2646. /**
  2647. * @group :
  2648. * @ver : 2010.05.03
  2649. * @by : khj
  2650. * @---------------------------------------------------
  2651. * @type : function
  2652. * @access : public
  2653. * @desc : JCI용 : 낙상은 7세 미만 혹은 65세 이상인 경우 고위험군체크되면 상세내역 선택할수 없고 디폴트로 고위험군임.
  2654. * @param : pFlag = Y : check, N : uncheck
  2655. * @return :
  2656. * @---------------------------------------------------
  2657. */
  2658. function fJCISettingAgeChk(pFlag){
  2659. var clsflag = model.getValue('/root/cond/clsflag');
  2660. if ( clsflag != "8" && clsflag != "9" ) return;
  2661. var clsflag_modify = (clsflag == "8" ? "1" : "2");
  2662. instUseYNcdnm = model.getValue("/root/code/codeinfo/codelist[cdgrupid ='199' and cdnm = 'Y' and cdid ='"+ clsflag_modify +"' ]/grupdetldesc");
  2663. if ( pFlag =="Y" ){
  2664. grd_recpnt.addStatus(2, 'update');
  2665. grd_recpnt.valueMatrix(grd_recpnt.fixedRows,grd_recpnt.colRef("resultcd") ) = instUseYNcdnm;
  2666. for( var jdx = grd_recpnt.colRef("timsval01") ; jdx <= grd_recpnt.colRef("totpnt") ; jdx++ ){
  2667. grd_recpnt.valueMatrix(grd_recpnt.fixedRows, jdx ) = "";
  2668. }
  2669. if(grd_recmaster.rowStatus(grd_recmaster.row) != 1){//상태가 신규상태가 아니면 u로 변경
  2670. grd_recmaster.addStatus(grd_recmaster.row, 'update');
  2671. model.setValue(xRecMasterPath + '[' + grd_recmaster.row + ']/stat', 'u');
  2672. }
  2673. grd_recmaster.valueMatrix(grd_recmaster.row,grd_recmaster.colRef("resultnm") ) = instUseYNcdnm;
  2674. grd_recmaster.valueMatrix(grd_recmaster.row,grd_recmaster.colRef("totpnt") ) = "";
  2675. model.setValue(xRecMasterPath + '[' + grd_recmaster.row + ']/agechk', "Y" );
  2676. for( var idx = 1 ; idx <= getNodesetCount(xRecDetailPath); idx++ ){
  2677. model.setValue(xRecDetailPath +"["+ idx +"]/flag", "N");
  2678. model.setValue(xRecDetailPath +"["+ idx +"]/timsval", "");
  2679. grd_recdetail.isReadonly(idx, grd_recdetail.colRef("flag"), idx, grd_recdetail.colRef("timsval")) = true;
  2680. }
  2681. }else {
  2682. //중증도 마스터그리드
  2683. if(grd_recmaster.rowStatus(grd_recmaster.row) != 1){//상태가 신규상태가 아니면 u로 변경
  2684. grd_recmaster.removeStatus(grd_recmaster.row, 'update');
  2685. model.setValue(xRecMasterPath + '[' + grd_recmaster.row + ']/stat', '-');
  2686. }
  2687. model.setValue(xRecMasterPath + '[' + grd_recmaster.row + ']/agechk', "N" );
  2688. fSearchRecPnt();
  2689. grd_recmaster.valueMatrix(grd_recmaster.row,grd_recmaster.colRef("resultnm") ) = grd_recpnt.valueMatrix(grd_recpnt.fixedRows,grd_recpnt.colRef("resultcd") );
  2690. grd_recmaster.valueMatrix(grd_recmaster.row,grd_recmaster.colRef("totpnt") ) = grd_recpnt.valueMatrix(grd_recpnt.fixedRows, grd_recpnt.colRef("totpnt") );
  2691. }
  2692. grd_recdetail.refresh();
  2693. }
  2694. /**
  2695. * @group :
  2696. * @ver : 2011.03.14
  2697. * @by : 안도영
  2698. * @---------------------------------------------------
  2699. * @type : function
  2700. * @access : public
  2701. * @desc : 구역정보 조회 및 내환자정보 숨기기 (응급실인 경우)
  2702. * @param :
  2703. * @param :
  2704. * @return :
  2705. * @---------------------------------------------------
  2706. */
  2707. function fGetWardChngInfo(initFlag, wardCd, sectionCd){
  2708. if(initFlag=="Y") {
  2709. var sWardCD = wardCd;
  2710. }
  2711. else{
  2712. var sWardCD = model.getValue("/root/cond/wardcd");
  2713. }
  2714. if ( sWardCD == eERDEPTCD) {
  2715. eERFLAG = "Y";
  2716. }else{
  2717. eERFLAG = "";
  2718. }
  2719. //응급실인 경우 구역정보 추가조회
  2720. if(eERFLAG == "Y"){ // 응급실
  2721. fGetZoneList();
  2722. copyNodeset("/root/temp2/zoneinfo", "/root/temp/zoneinfo");
  2723. //cap_wardcd.attribute("text") = "구역:";
  2724. cmb_room.visible = "false";
  2725. //cmb_settingrn.disabled = "true";
  2726. //cmb_erpat.visible = "true";
  2727. //cmb_pid.visible = "false";
  2728. cmb_zone.visible = "true";
  2729. if(initFlag=="Y"){ // 처음 상단 정보로 화면 열릴 때
  2730. model.setValue("/root/cond/zonecd", (sectionCd == "") ? "-" : sectionCd);
  2731. }else{
  2732. model.setValue("/root/cond/zonecd", "-"); // 'All'로 default
  2733. }
  2734. }else{
  2735. //cap_wardcd.attribute("text") = "병실:"
  2736. cmb_room.visible = "true";
  2737. //cmb_settingrn.disabled = "false";
  2738. //cmb_erpat.visible = "false";
  2739. //cmb_pid.visible = "true"
  2740. cmb_zone.visible = "false";
  2741. //grd_patinfo.colAttribute(grd_patinfo.colRef("roomcd"), "visibility") = "visible";
  2742. //grd_patinfo.colAttribute(grd_patinfo.colRef("bedposcnts"), "visibility") = "hidden";
  2743. model.setValue("/root/cond/zonecd", "");
  2744. }
  2745. cmb_zone.refresh();
  2746. cmb_room.refresh();
  2747. cmb_erpat.refresh();
  2748. //cmb_settingrn.refresh();
  2749. grd_patinfo.refresh();
  2750. }
  2751. /**
  2752. * @group :
  2753. * @ver : 2011.03.30
  2754. * @by : 안도영
  2755. * @---------------------------------------------------
  2756. * @type : function
  2757. * @access : public
  2758. * @desc : 그리드 조회 시 분류구분에 따른 재구성
  2759. * @param :
  2760. * @param :
  2761. * @return :
  2762. * @---------------------------------------------------
  2763. */
  2764. function fSetPatGrid(grid, flag){
  2765. switch (flag){
  2766. case "Pat" :
  2767. var arrColIdx = new Array();
  2768. arrColIdx[0] = grid.colRef("resultnm1"); // 각 위험군 콜 인덱스
  2769. arrColIdx[1] = grid.colRef("resultnm2");
  2770. arrColIdx[2] = grid.colRef("resultnm3");
  2771. arrColIdx[3] = grid.colRef("resultnm4");
  2772. // 값이 있는 위험군 셀 색 넣기
  2773. for(i=2; i< grid.rows; i++){ // 행
  2774. for(var j=0; j<arrColIdx.length; j++){
  2775. if("" != grid.valueMatrix(i, arrColIdx[j])){
  2776. if(2 == (j+1)) { // 낙상
  2777. if("Y" == grid.valueMatrix(i, grid.colRef("coloryn2"))){ // '고위험군' 만 색 표시 (2011.04.13 ahn)
  2778. grid.cellstyle("background-color", i, arrColIdx[j]) = yellow;
  2779. grid.cellstyle("color", i, arrColIdx[j]) = red;
  2780. }
  2781. }else if(3 == (j+1)) { // 욕창
  2782. if("Y" == grid.valueMatrix(i, grid.colRef("coloryn3"))){ // '정상' 제외한 군 색 표시 (2011.04.19 ahn)
  2783. grid.cellstyle("background-color", i, arrColIdx[j]) = red;
  2784. //grd_patinfo.cellstyle("font-color", i, arrColIdx[j]) = red;
  2785. }
  2786. }else if(4 == (j+1)) { // 통증
  2787. if(4 <= parseInt(grid.valueMatrix(i, arrColIdx[j]))){ // 통증 점수가 4점 이상인 경우만 색 표시 (2011.04.13 ahn)
  2788. grid.cellstyle("background-color", i, arrColIdx[j]) = indigo;
  2789. grid.cellstyle("color", i, arrColIdx[j]) = white;
  2790. }
  2791. }
  2792. }
  2793. }
  2794. }
  2795. // 조회 구분대로 환자정보 그리드 구성
  2796. var tmp = model.getValue("/root/cond/recsrchflag");
  2797. var recSrchFlag = tmp.setReplaceWord("^", "");
  2798. for(i=1; i<5; i++){ // 분류 수
  2799. var resultnm = "resultnm" + i;
  2800. var execnm = "execnm" + i;
  2801. var execdd = "execdd" + i;
  2802. grid.colHidden(grid.colRef(resultnm)) = true;
  2803. grid.colHidden(grid.colRef(execnm)) = true;
  2804. grid.colHidden(grid.colRef(execdd)) = true;
  2805. for(var j=0; j < recSrchFlag.length; j++){
  2806. if(i == recSrchFlag.charAt(j)){
  2807. var resultnm = "resultnm" + recSrchFlag.charAt(j);
  2808. var execnm = "execnm" + recSrchFlag.charAt(j);
  2809. var execdd = "execdd" + recSrchFlag.charAt(j);
  2810. grid.colHidden(grid.colRef(resultnm)) = false;
  2811. grid.colHidden(grid.colRef(execnm)) = false;
  2812. grid.colHidden(grid.colRef(execdd)) = false;
  2813. break;
  2814. }
  2815. }
  2816. }
  2817. grid.refresh();
  2818. break;
  2819. /*
  2820. case "Exec" :
  2821. // 조회 구분대로 환자정보 그리드 구성
  2822. var tmp = model.getValue("/root/cond/recsrchflag");
  2823. var recSrchFlag = tmp.setReplaceWord("^", "");
  2824. var totpnt = "";
  2825. var resultnm = "";
  2826. var execnm = "";
  2827. for(i=1; i<5; i++){ // 분류 수
  2828. totpnt = "totpnt" + i;
  2829. resultnm = "resultnm" + i;
  2830. execnm = "execnm" + i;
  2831. grid.colHidden(grid.colRef(totpnt)) = true;
  2832. grid.colHidden(grid.colRef(resultnm)) = true;
  2833. grid.colHidden(grid.colRef(execnm)) = true;
  2834. for(var j=0; j < recSrchFlag.length; j++){
  2835. if(i == recSrchFlag.charAt(j)){
  2836. totpnt = "totpnt" + recSrchFlag.charAt(j);
  2837. resultnm = "resultnm" + recSrchFlag.charAt(j);
  2838. execnm = "execnm" + recSrchFlag.charAt(j);
  2839. if(i<4) grid.colHidden(grid.colRef(totpnt)) = false;
  2840. grid.colHidden(grid.colRef(resultnm)) = false;
  2841. grid.colHidden(grid.colRef(execnm)) = false;
  2842. break;
  2843. }
  2844. }
  2845. }
  2846. grid.refresh();
  2847. break;
  2848. */
  2849. default :
  2850. break;
  2851. }
  2852. }
  2853. /**
  2854. * @group :
  2855. * @ver : 2011.03.31
  2856. * @by : 안도영
  2857. * @---------------------------------------------------
  2858. * @type : function
  2859. * @access : public
  2860. * @desc : 조회 분류별 정렬 (가장 작은 값 찾기)
  2861. * @param :
  2862. * @param :
  2863. * @return :
  2864. * @---------------------------------------------------
  2865. */
  2866. function fGetMinSrchFlag(srchflag){
  2867. var arrRecSrFlag = new Array();
  2868. var recsrchflag = srchflag.setReplaceWord("^", "");
  2869. for(i=0; i< recsrchflag.length; i++){
  2870. arrRecSrFlag[i] = recsrchflag.charAt(i);
  2871. }
  2872. for(var j = 0; j < arrRecSrFlag.length; j++){
  2873. for(i = j+ 1; i < arrRecSrFlag.length; i++){
  2874. if(arrRecSrFlag[i] < arrRecSrFlag[j])
  2875. {
  2876. var tmp = arrRecSrFlag[j];
  2877. arrRecSrFlag[j] = arrRecSrFlag[i];
  2878. arrRecSrFlag[i] = tmp;
  2879. }
  2880. }
  2881. }
  2882. return arrRecSrFlag[0]; // 가장 작은 값 return
  2883. }
  2884. /**
  2885. * @group :
  2886. * @ver : 2011.04.13
  2887. * @by : 안도영
  2888. * @---------------------------------------------------
  2889. * @type : function
  2890. * @access : public
  2891. * @desc : 환자리스트 그리드 확대 / 축소
  2892. * @param :
  2893. * @param :
  2894. * @return :
  2895. * @---------------------------------------------------
  2896. */
  2897. function fPatlist_Extend(grid){
  2898. //switch (workflag) {
  2899. //case "pat":
  2900. /* if ( btn_sizectr.text == "축소") {
  2901. btn_sizectr.text = "확대"; //축소되었으므로 확대시켜야한다.
  2902. swtpatList.visible = true ;
  2903. linpatListRight.visible = true ;
  2904. linDruglistTop.attribute("x1") = "220"
  2905. grd_druglist.attribute("left") = "220"
  2906. grd_druglist.attribute("width") = "970"
  2907. bolall.attribute("left") = "222"; //--(20081216)
  2908. }
  2909. */
  2910. // break;
  2911. //case "drug":
  2912. if ( btn_sizectr.text == "축소") {
  2913. btn_sizectr.text = "확대"; //축소되었으므로 확대시켜야한다.
  2914. //swtpatList.visible = true ;
  2915. //linpatListRight.visible = true ;
  2916. //linDruglistTop.attribute("x1") = "220"
  2917. //grd_druglist.attribute("left") = "220"
  2918. grid.attribute("width") = "335"
  2919. //bolall.attribute("left") = "222"; //--(20081216)
  2920. } else {
  2921. btn_sizectr.text = "축소"; //확대되었으므로 축소시켜야한다.
  2922. //swtpatList.visible = false ;
  2923. //linpatListRight.visible = false ;
  2924. //linDruglistTop.attribute("x1") = "0"
  2925. //grd_druglist.attribute("left") = "0"
  2926. grid.attribute("width") = "690"
  2927. //bolall.attribute("left") = "2"; //--(20081216)
  2928. }
  2929. grid.refresh();
  2930. // break;
  2931. //}
  2932. }
  2933. ///-----------------(20081210)
  2934. /**
  2935. * @group :
  2936. * @ver : 2011.04.19
  2937. * @by : 안도영
  2938. * @---------------------------------------------------
  2939. * @type : function
  2940. * @access : public
  2941. * @desc : 라디오 선택 시 재조회
  2942. * @param :
  2943. * @param :
  2944. * @return :
  2945. * @---------------------------------------------------
  2946. */
  2947. function patReSrch(flag){
  2948. // 해당 환자 pid 임시 저장
  2949. var patPid = model.getValue('/root/cond/pid');
  2950. var patIdx = "";
  2951. //조회조건 clear
  2952. model.setValue('/root/cond/pid', '');
  2953. //환자정보 표시 clear (2011.03.29 Ahn)
  2954. model.setValue('root/cond/patnm', '');
  2955. model.setValue('root/cond/sexage', '');
  2956. model.setValue('root/cond/age', '');
  2957. //환자정보 조회
  2958. fSearchPatList(flag);
  2959. if("" != patPid){
  2960. // 해당 환자정보 재 표시
  2961. model.setValue('/root/cond/pid', model.getValue("/root/main/patinfo/patlist[pid = '" + patPid + "']/pid"));
  2962. model.setValue('/root/cond/patnm', model.getValue("/root/main/patinfo/patlist[pid = '" + patPid + "']/hngnm"));
  2963. model.setValue('/root/cond/sexage', model.getValue("/root/main/patinfo/patlist[pid = '" + patPid + "']/sexage"));
  2964. model.setValue('/root/cond/age', model.getValue("/root/main/patinfo/patlist[pid = '" + patPid + "']/age"));
  2965. // 해당 환자 인덱스 선택 재 지정
  2966. for(i=2; i<=grd_patinfo.rows; i++){
  2967. if(patPid == grd_patinfo.valueMatrix(i,grd_patinfo.colRef("pid"))){
  2968. patIdx = i;
  2969. break;
  2970. }
  2971. }
  2972. grd_patinfo.row = patIdx;
  2973. //중증도/낙상/욕창 내역 조회(grd_recmaster)
  2974. fSearchRecMaster(patIdx);
  2975. }
  2976. }
  2977. function addchk(){
  2978. var wardcd = model.getValue("/root/cond/wardcd");
  2979. var age = model.getValue("/root/cond/age");
  2980. if(model.getValue("/root/cond/clsflag") == "8"){
  2981. for(i = 1; i <= getNodesetCount("/root/init/icucdgrup/icucdgruplist"); i++){
  2982. if(wardcd == model.getValue("/root/init/icucdgrup/icucdgruplist[" + i + "]/wardcd")){ // 중환자실이면
  2983. chk_haddchk01.value = 'Y';
  2984. }
  2985. }
  2986. if(age < 3){
  2987. chk_haddchk.value = 'Y';
  2988. }
  2989. }else if(model.getValue("/root/cond/clsflag") == "9"){
  2990. for(i = 1; i <= getNodesetCount("/root/init/icucdgrup/icucdgruplist"); i++){
  2991. if(wardcd == model.getValue("/root/init/icucdgrup/icucdgruplist[" + i + "]/wardcd")){ // 중환자실이면
  2992. chk_maddchk01.value = 'Y';
  2993. }
  2994. }
  2995. if(age >= 70){
  2996. chk_maddchk02.value = 'Y';
  2997. }
  2998. }
  2999. group2.refresh();
  3000. group4.refresh();
  3001. }
  3002. // 중증도 일괄저장
  3003. function fAllSignSave(){
  3004. //debugger;
  3005. var chk = "Y";
  3006. var totcnt = 0;
  3007. var succnt = 0;
  3008. var failcnt = 0;
  3009. cap_succnt.value = 0;
  3010. cap_failcnt.value = 0;
  3011. cap_totcnt.value = 0;
  3012. var cnt = getNodesetCount("/root/main/patinfo/patlist[chk = '" + chk + "']");
  3013. if(cnt < 1){
  3014. messageBox('일괄저장 할 환자를', 'C002');
  3015. return;
  3016. }
  3017. var msg = messageBox(cnt+'명의 중증도 항목을 일괄 인증저장 하시겠습니까?', 'Q');
  3018. if(Number(msg) != 6){
  3019. return;
  3020. }
  3021. //cap_all.text = cnt;
  3022. sAllSignSave = true;
  3023. var chk = "N";
  3024. var totcnt = getNodesetCount("/root/main/patinfo/patlist");
  3025. for (patRow = 1; patRow <= totcnt; patRow++) {
  3026. chk = model.getValue("/root/main/patinfo/patlist[" + patRow + "]/chk");
  3027. if (chk != "Y"){
  3028. continue;
  3029. }
  3030. cap_totcnt.text = cnt;
  3031. var dschdd = model.getValue("/root/main/patinfo/patlist[" + patRow + "]/dschdd"); //퇴원일자
  3032. var indd = model.getValue("/root/main/patinfo/patlist[" + patRow + "]/indd"); //입원일자
  3033. var hngnm = model.getValue("/root/main/patinfo/patlist[" + patRow + "]/hngnm"); //환자이름
  3034. var execdd = model.getValue("/root/cond/execdd"); //수행일자
  3035. model.setValue("/root/cond/pid", model.getValue("/root/main/patinfo/patlist[" + patRow + "]/pid"));
  3036. model.setValue("/root/cond/patnm", model.getValue("/root/main/patinfo/patlist[" + patRow + "]/hngnm"));
  3037. model.setValue("/root/cond/sexage", model.getValue("/root/main/patinfo/patlist[" + patRow + "]/sexage"));
  3038. model.setValue("/root/cond/age", model.getValue("/root/main/patinfo/patlist[" + patRow + "]/age"));
  3039. if(indd != '' || indd ==null) {
  3040. if((execdd < indd) || (execdd > dschdd)) { //입원,퇴원일자 사이의 수행일자만 입력하도록 블러킹
  3041. messageBox("수행하려는 일자는 입원일자(" +indd.substring(0,4) + "-" + indd.substring(4, 6) + "-" + indd.substring(6) + ")이전 또는 퇴원일자("+dschdd.substring(0,4) + "-" + dschdd.substring(4, 6) + "-" + dschdd.substring(6)+")이후의 일자가 될 수","I004");
  3042. return;
  3043. }
  3044. }
  3045. fSearchRecMasterAll(patRow);
  3046. var recmasterrow = 0;
  3047. for( var idx = 1 ; idx <= getNodesetCount(xRecMasterPath) ; idx++ ){
  3048. if ( model.getValue(xRecDetailPath + '[1]/pid') == model.getValue(xRecMasterPath + '['+ idx +']/pid')
  3049. && model.getValue(xRecDetailPath + '[1]/execdd') == model.getValue(xRecMasterPath + '['+ idx +']/execdd')
  3050. && model.getValue(xRecDetailPath + '[1]/recseq') == model.getValue(xRecMasterPath + '['+ idx +']/recseq')
  3051. ){
  3052. recmasterrow = idx;
  3053. recRow = idx;
  3054. break;
  3055. }
  3056. }
  3057. if ( recmasterrow == 0 ){
  3058. //var hngnm = model.getValue("/root/main/patinfo/patlist[" + (patRow) + "]/hngnm");
  3059. messageBox(hngnm + ' 환자는 저장 이력이 없습니다. 개별 인증저장 하십시오.', "I008");
  3060. //messageBox( capt_master.attribute("text") + " 선택" ,"I008");
  3061. failcnt++;
  3062. cap_failcnt.text = failcnt;
  3063. continue;
  3064. }
  3065. if(!addallchk()){
  3066. //messageBox(hngnm + '낙상 구분을 재 선택하여 개별 인증저장 하십시오.', "I008");
  3067. failcnt++;
  3068. cap_failcnt.text = failcnt;
  3069. continue;
  3070. }
  3071. var recMasterStat = model.getValue(xRecMasterPath + '[' + recmasterrow + ']/stat');//기록마스터의 상태값
  3072. var execdd = model.getValue('/root/cond/execdd');//조회조건의 수행일자
  3073. var exectm = model.getValue('/root/cond/exectm');//조회조건의 수행시간
  3074. //수행일시 필수입력 체크_20090122_SMY추가
  3075. if(execdd == ""){
  3076. messageBox("수행일자를 입력하세요","I");
  3077. model.setFocus("ipt_indate");
  3078. return;
  3079. }
  3080. if(exectm == ""){
  3081. messageBox("수행시간을 입력하세요","I");
  3082. model.setFocus("ipt_time");
  3083. return;
  3084. }
  3085. var recdd = model.getValue(xRecMasterPath + '[' + recmasterrow + ']/execdd');//기록된 일자
  3086. var isRecordedArr = fIsRecordedAll(execdd);//input수행일자에 해당되는 기록이 있는지 여부
  3087. //20080820 array로 변경
  3088. //arr[0]은 기록여부 true/false
  3089. //arr[1]은 기록여부 true일때의 signno
  3090. var signno = '';//인증번호
  3091. var siflag = 'N';//default 는 N. 기존의 데이터를 그대로 신규로 insert하는경우flag값
  3092. // Y인경우 : 1.다른일자의 기록내역은 있으나 input의 수행일자에 해당되는 기록이 없을때..
  3093. // 2. input의 수행일자에 해당되는 기록이 있을때..
  3094. //상세내역의 체크점수를 합산하여 마스터와 상세점수의 totpnt에 set한다.
  3095. //var totPnt = fSumPnt_1();
  3096. //model.setValue(xRecMasterPath + '[' + recRow + ']/totpnt', totPnt);//마스터의 총점
  3097. //model.setValue('/root/main/recpntgrup/recpntlist/totpnt', totPnt);//상세점수의 총점
  3098. //총점에 해당하는 분류군을 조회한후 마스터와 상세점수의 분류군에 set한다.
  3099. //var bspntnm = fLoadBsPnt_1(totPnt);
  3100. //model.setValue(xRecMasterPath + '[' + recRow + ']/resultnm', bspntnm);//마스터의 분류군
  3101. //model.setValue('/root/main/recpntgrup/recpntlist/resultcd', bspntnm);//상세점수의 총점
  3102. //var maddchk01 = model.getValue(xRecMasterPath + '[' + recRow + ']/maddchk01');
  3103. //var maddchk02 = model.getValue(xRecMasterPath + '[' + recRow + ']/maddchk02');
  3104. //var maddchk03 = model.getValue(xRecMasterPath + '[' + recRow + ']/maddchk03');
  3105. //var maddchk04 = model.getValue(xRecMasterPath + '[' + recRow + ']/maddchk04');
  3106. //var haddchk = model.getValue(xRecMasterPath + '[' + recRow + ']/haddchk');
  3107. //var maddchk99 = model.getValue(xRecMasterPath + '[' + recRow + ']/maddchk99');
  3108. //if(model.getValue("/root/cond/clsflag") == "9"){
  3109. // if(maddchk01 == "" && maddchk02 == "" && maddchk03 == "" && maddchk04 == "" && maddchk99 == "" ){
  3110. // model.setValue(xRecMasterPath + '[' + recRow + ']/maddchk99', 'Y');
  3111. // //messageBox("기타 항목은 반드시 하나 이상 체크 하셔야 합니다.","I");
  3112. // //return;
  3113. // }
  3114. //}
  3115. //model.setValue(xRecMasterPath + '[' + recRow + ']/maddchk01', maddchk01);
  3116. //model.setValue(xRecMasterPath + '[' + recRow + ']/maddchk02', maddchk02);
  3117. //model.setValue(xRecMasterPath + '[' + recRow + ']/maddchk03', maddchk03);
  3118. //model.setValue(xRecMasterPath + '[' + recRow + ']/maddchk04', maddchk04);
  3119. //model.setValue(xRecMasterPath + '[' + recRow + ']/haddchk' , haddchk);
  3120. //model.setValue(xRecMasterPath + '[' + recRow + ']/maddchk99', maddchk99);
  3121. //상세내역 체크한 점수를 항목별로 합산하여 상세점수 노드에 set한다.
  3122. //fSetRecDetailPnt_1();
  3123. var msgStr;
  3124. if(isRecordedArr[0]){
  3125. var execStr = execdd.substring(0, 4) + '-' + execdd.substring(4, 6) + '-' + execdd.substring(6, 8);
  3126. var hngnm = model.getValue("/root/main/patinfo/patlist[" + (patRow) + "]/hngnm");
  3127. msgStr = hngnm + '환자는 이미 저장된 기록 내역(' + execStr + ')이 있습니다. 다시'; //db insert (수행일시를 현재일시로)
  3128. var msg = messageBox(msgStr, 'Q002');//저장하시겠습니까?
  3129. if(Number(msg) != 6){//예
  3130. failcnt++;
  3131. cap_failcnt.text = failcnt;
  3132. continue;
  3133. }
  3134. //20080827 주석처리 signno = isRecordedArr[1];//해당기록의 signno를 할당해 db에 update한다.(사용안함)
  3135. signno = '';//신규이기때문에 signno를 새로딴다.
  3136. }else{//신규등록및 이미기록되었으나 기록일자와 수행일자가 같을때..
  3137. //msgStr = '중증도 및 위험사정의 기록내역을';
  3138. msgStr = ""; // 메시지는 '저장하시겠습니까?' 로 통일 (2011.04.18 Ahn)
  3139. }
  3140. //recMasterStat이 '-'경우 'u'로 넘김.
  3141. //중증도점수그리드
  3142. //grd_recpnt.addStatus(2, 'update');
  3143. //중증도 마스터그리드
  3144. //20080827 상태가 신규가 아니면 u 상태로 db에 복사해 insert로 변경됨...
  3145. //if(grd_recmaster.rowStatus(grd_recmaster.row) != 1){//상태가 신규상태가 아니면 u로 변경
  3146. // grd_recmaster.addStatus(grd_recmaster.row, 'update');
  3147. var mstat = model.getValue(xRecMasterPath + '[' + recRow + ']/stat');
  3148. if(mstat != 'i' || mstat != 'I'){
  3149. model.setValue(xRecMasterPath + '[' + recRow + ']/stat', 'u');
  3150. siflag = 'Y'; //기존데이터를 복사해 insert하는 경우 Y아니면 N
  3151. }
  3152. //}
  3153. //var msg = messageBox(msgStr, 'Q002');//저장하시겠습니까?
  3154. //if(Number(msg) == 6){//예
  3155. //if(true){
  3156. model.removenode('/root/send');
  3157. model.makeValue('/root/send/sch_execdd', execdd);//조회조건에 있는 수행일자
  3158. model.makeValue('/root/send/sch_exectm', exectm);//조회조건에 있는 수행시간
  3159. model.makeValue('/root/send/siflag', siflag);//기존데이터를 복사해 insert하는 경우 Y아니면 N
  3160. model.makeValue('/root/send/ioflag', model.getValue('/root/cond/ioflag'));//외래입원구분
  3161. var pid = model.getValue(xRecMasterPath + "/pid");
  3162. var orddd = model.getValue('/root/main/patinfo/patlist[' + patRow + ']/indd');//입원일/진료일
  3163. var cretno = model.getValue('/root/main/patinfo/patlist[' + patRow + ']/cretno');//생성번호
  3164. var orddeptcd = model.getValue('/root/main/patinfo/patlist[' + patRow + ']/orddeptcd');//진료과
  3165. var orddrid = model.getValue('/root/main/patinfo/patlist[' + patRow + ']/medispclid');//진료의
  3166. var ioflag = model.getValue('/root/main/patinfo/patlist[' + patRow + ']/ioflag'); //외래/입원구분
  3167. //신규(insert)일때는 signno를 초기화한다.
  3168. /*
  3169. if((recMasterStat == 'i') || (recMasterStat == 'u' && execdd != recdd)){
  3170. signno = '';
  3171. }else{
  3172. signno = model.getValue(xRecMasterPath + "[" + grd_recmaster.row + "]/signno");
  3173. }
  3174. */
  3175. //alert(grd_recmaster.row + '의 signno : ' + signno);
  3176. /* [각 구분별 기록서식코드]
  3177. * 중증도_일반병동 : 0000002439
  3178. * 중증도_신생아 ICU : 0000002440
  3179. * 중증도_혈액투석 : 0000002441
  3180. * 중증도_중환자실 : 0000002442
  3181. * 중증도_정신과병동 : 0000002444
  3182. * 낙상사정_아동 : 0000002447
  3183. * 낙상사정_성인(Morse Scale) : 0000002449
  3184. * 욕창사정(Braden Scale) : 0000002450
  3185. */
  3186. var recflag = model.getValue('/root/cond/recflag');
  3187. var clsflag = model.getValue('/root/cond/clsflag');
  3188. var formcd;//기록서식코드
  3189. var formnm;//서식명
  3190. if(clsflag == '1'){
  3191. formcd = '0000002439'; //중증도_일반병동
  3192. formnm = '중증도사정(일반병동)';
  3193. recflag = '1';
  3194. clsflag = '1';
  3195. }else if(clsflag == '2'){
  3196. formcd = '0000002440'; //중증도_신생아 ICU
  3197. formnm = '중증도사정(신생아 ICU)';
  3198. recflag = '1';
  3199. clsflag = '2';
  3200. }else if(clsflag == '5'){
  3201. formcd = '0000002444'; //중증도_정신과병동
  3202. formnm = '중증도사정(정신과병동)';
  3203. recflag = '1';
  3204. clsflag = '5';
  3205. }else if(clsflag == '4' || clsflag == '6' || clsflag == '7'){
  3206. formcd = '0000002442'; //중증도_중환자실
  3207. formnm = '중증도사정(중환자실)';
  3208. recflag = '1';
  3209. clsflag = '4';
  3210. }else if(clsflag == '3'){
  3211. formcd = '0000002441'; //중증도_혈액투석
  3212. formnm = '중증도사정(혈액투석)';
  3213. recflag = '1';
  3214. clsflag = '3';
  3215. }else if(clsflag == '8'){
  3216. formcd = '0000002447'; //낙상사정_아동
  3217. formnm = '낙상위험사정(Humpty Dumpty Scale)';
  3218. recflag = '2';
  3219. clsflag = '1';
  3220. }else if(clsflag == '9'){
  3221. formcd = '0000002449'; //낙상사정_성인 (Morse Scale)
  3222. formnm = '낙상위험사정(Morse Scale)'; // 성인 -> Morse Scale 변경 (2011.03.17 ahn)
  3223. recflag = '2';
  3224. clsflag = '2';
  3225. }else if(clsflag == '10'){
  3226. formcd = '0000002450'; //욕창
  3227. formnm = '욕창위험사정(Braden Scale)'; // 욕창 -> Braden Scale 변경 (2011.04.13 ahn)
  3228. recflag = '3';
  3229. clsflag = '1';
  3230. }
  3231. //alert(formcd);
  3232. //상세점수내역 노드를 만들어서 보낸다.
  3233. //temp/signdata/recpntgrup/recpntlist/timsval
  3234. //temp/signdata/recpntgrup/recpntlist/hngnm
  3235. model.removenode('/root/temp/signdata');
  3236. model.makeNode('/root/temp/signdata/recpntgrup/recpntlist');
  3237. //중증기록구분을 한글명으로 노드를 만들어서 내보낸다.
  3238. var xDetailPath = '/root/temp/signdata/detailinfo';
  3239. model.makeNode(xDetailPath);
  3240. model.makeValue(xDetailPath + '/formnm', formnm);
  3241. model.makeValue(xDetailPath + '/recflag', recflag);
  3242. model.makeValue(xDetailPath + '/clsflag', clsflag);
  3243. var recpntCnt = getNodesetCount("/root/main/recpntgrup/pnttitlgruplist");
  3244. var timsval, hngnm;
  3245. var colno;
  3246. for(var i = 1; i <= recpntCnt; i++){
  3247. if(i < 10){
  3248. colno = '0' + i;
  3249. }else{
  3250. colno = i;
  3251. }
  3252. timsval = model.getValue(xRecPntPath + '/timsval' + colno);
  3253. hngnm = model.getValue('/root/main/recpntgrup/pnttitlgruplist[' + i + ']/hngnm');
  3254. //alert(colno + ', ' + timsval + ', ' + hngnm + ', ' + i);
  3255. model.makeValue('/root/temp/signdata/recpntgrup/recpntlist[' + i + ']/timsval', timsval);
  3256. model.makeValue('/root/temp/signdata/recpntgrup/recpntlist[' + i + ']/hngnm', hngnm);
  3257. }
  3258. Sign.certreload = false ; // 전자서명 호출시 인증저장 버튼을 누늘때마다 인증서가 뜨도록 처리
  3259. // 인증 로직 호출
  3260. if(Sign.signprocess() == true){ // ▶ 전자인증 관련 환자 인적 정보를 보내줌.
  3261. //alert(Sign.signedInfos[1]);
  3262. var wSigninfo = ""
  3263. wSigninfo = "pid" +"▦" // 01 등록번호
  3264. + "orddd" +"▦" // 02 입원일자(입원,응급)/진료일자(외래)
  3265. + "cretno" +"▦" // 03 생성번호
  3266. + "signno" +"▦" // 04 서명번호(인증번호)
  3267. + "recdd" +"▦" // 05 실제 기록이 이루어진 기록일자
  3268. + "rectm" +"▦" // 06 실제 기록이 이루어진 기록시간
  3269. + "recsaveflag" +"▦" // 07 전자서명 인적정보 변경여부(기록일시 변경되는 경우 : Y, 그외 : N)
  3270. + "signflag" +"▦" // 08 서명자료구분(01 : 진료, 02 : 간호, 03 : LIS, 04 : 진료지원)
  3271. + "signgenrflag" +"▦" // 09 외래/입원구분(코드정의서 M0010 참조)
  3272. + "formcd" +"▦" // 10 각 기록지별 서식코드 0000002473 N57 간호 수술간호기록
  3273. + "orddeptcd" +"▦" // 11 진료부서코드
  3274. + "orddrid" +"▦" // 12 진료의사ID (집도의)
  3275. + "signbfcnts" +"▦" // 13 ▶ 인증할 데이터 정보(미기록 노드 제거된 정보)
  3276. + "signaftcnts" +"▦" // 14 ▶ 공인인증 처리후 데이터
  3277. + "screenid" +"▦" // 15 ▶ 화면아이디
  3278. + "certflag" +"▩" // 16 ▶ 인증여부( T : 임시저장, C : 인증저장)
  3279. + pid +"▦" // 01 등록번호
  3280. + orddd +"▦" // 02 입원일자(입원,응급)/진료일자(외래)
  3281. + cretno +"▦" // 03 생성번호
  3282. + signno +"▦" // 04 서명번호(인증번호)
  3283. + getCurrentDate() +"▦" // 05 실제 기록이 이루어진 기록일자
  3284. + getCurrentTime() +"▦" // 06 실제 기록이 이루어진 기록시간
  3285. + "Y" +"▦" // 07 전자서명 인적정보 변경여부(기록일시 변경되는 경우 : Y, 그외 : N)
  3286. + "02" +"▦" // 08 서명자료구분(01 : 진료, 02 : 간호, 03 : LIS, 04 : 진료지원)
  3287. + ioflag +"▦" // 09 외래/입원구분(코드정의서 M0010 참조)
  3288. + formcd +"▦" // 10 각 기록지별 서식코드 (emr.mrfmform)
  3289. + orddeptcd +"▦" // 11 진료부서코드
  3290. + orddrid +"▦" // 12 진료의사ID
  3291. + Sign.signedInfos[1] +"▦" // 13 ▶ 인증할 데이터 정보(미기록 노드 제거된 정보)
  3292. + Sign.signedInfos[2] +"▦" // 14 ▶ 공인인증 처리후 데이터
  3293. + getScreenID() +"▦" // 15 ▶ 화면아이디
  3294. + "C" +"▩"; // 16 ▶ 인증여부( T : 임시저장, C : 인증저장)
  3295. model.makeValue("/root/send/signinfo" , wSigninfo);
  3296. } else {
  3297. return ;
  3298. }
  3299. var sRecData = "";
  3300. for (i=1; i<=getNodesetCount(xRecMasterPath); i++){
  3301. var sRecHeader = "m▦rownum▦execdd▦exectm▦recflagnm▦totpnt▦resultnm▦execnm▦pid▦hngnm▦recseq▦recflag▦clsflag▦execkind▦execid▦indd▦histstat▦cretno▦seqno▦resultcd▦signno▦stat▦agechk▦maddchk01▦maddchk02▦maddchk03▦maddchk04▦maddchk99▦haddchk▩";
  3302. var sRecData = sRecData
  3303. + "i" +"▦"
  3304. + i +"▦"
  3305. + model.getValue(xRecMasterPath+ "["+i+"]/execdd" )+"▦"
  3306. + model.getValue(xRecMasterPath+ "["+i+"]/exectm" )+"▦"
  3307. + model.getValue(xRecMasterPath+ "["+i+"]/recflagnm" )+"▦"
  3308. + model.getValue(xRecMasterPath+ "["+i+"]/totpnt" )+"▦"
  3309. + model.getValue(xRecMasterPath+ "["+i+"]/resultnm" )+"▦"
  3310. + model.getValue(xRecMasterPath+ "["+i+"]/execnm" )+"▦"
  3311. + model.getValue(xRecMasterPath+ "["+i+"]/pid" )+"▦"
  3312. + model.getValue(xRecMasterPath+ "["+i+"]/hngnm" )+"▦"
  3313. + model.getValue(xRecMasterPath+ "["+i+"]/recseq" )+"▦"
  3314. + model.getValue(xRecMasterPath+ "["+i+"]/recflag" )+"▦"
  3315. + model.getValue(xRecMasterPath+ "["+i+"]/clsflag" )+"▦"
  3316. + model.getValue(xRecMasterPath+ "["+i+"]/execkind" )+"▦"
  3317. + model.getValue(xRecMasterPath+ "["+i+"]/execid" )+"▦"
  3318. + model.getValue(xRecMasterPath+ "["+i+"]/indd" )+"▦"
  3319. + model.getValue(xRecMasterPath+ "["+i+"]/histstat" )+"▦"
  3320. + model.getValue(xRecMasterPath+ "["+i+"]/cretno" )+"▦"
  3321. + model.getValue(xRecMasterPath+ "["+i+"]/seqno" )+"▦"
  3322. + model.getValue(xRecMasterPath+ "["+i+"]/resultcd" )+"▦"
  3323. + model.getValue(xRecMasterPath+ "["+i+"]/signno" )+"▦"
  3324. + model.getValue(xRecMasterPath+ "["+i+"]/stat" )+"▦"
  3325. + model.getValue(xRecMasterPath+ "["+i+"]/agechk" )+"▦"
  3326. + model.getValue(xRecMasterPath+ "["+i+"]/maddchk01" )+"▦"
  3327. + model.getValue(xRecMasterPath+ "["+i+"]/maddchk02" )+"▦"
  3328. + model.getValue(xRecMasterPath+ "["+i+"]/maddchk03" )+"▦"
  3329. + model.getValue(xRecMasterPath+ "["+i+"]/maddchk04" )+"▦"
  3330. + model.getValue(xRecMasterPath+ "["+i+"]/maddchk99" )+"▦"
  3331. + model.getValue(xRecMasterPath+ "["+i+"]/haddchk" )+"▩"
  3332. }
  3333. var test_11 = sRecHeader + sRecData;
  3334. //var test_1 = grd_recmaster.getUpdateDataAll('i'); // 150114 - AYS
  3335. //model.makeValue('/root/send/recmaster', grd_recmaster.getUpdateDataAll('i'));
  3336. model.makeValue('/root/send/recmaster', (sRecHeader + sRecData));
  3337. for( var idx = 1 ; idx <= getNodesetCount(xRecDetailPath) ; idx++){
  3338. if ( Number(model.getValue(xRecDetailPath + '[' + idx + ']/basepnt_multi')) > 0 ){
  3339. model.setValue( xRecDetailPath + '[' + idx + ']/basepnt',model.getValue(xRecDetailPath + '[' + idx + ']/basepnt_multi'));
  3340. }
  3341. }
  3342. var sDetailData = "";
  3343. for (i=1; i<=getNodesetCount(xRecDetailPath); i++){
  3344. var sDetailHeader = "m▦rownum▦stat▦flag▦clstlcd▦hngnm▦basepnt▦timsval▦cnfmyn▦cmtinptyn▦grupmulti▦engnm▦refseq▦deptcd▦supcd▦todd▦depth▦grupflag▦clsflag▦recflag▦sortseq▦bktimsval▦desccnts▦pid▦execdd▦recseq▦wardcd▦roomcd▩";
  3345. var sDetailData = sDetailData
  3346. + "i" +"▦"
  3347. + i +"▦"
  3348. + model.getValue(xRecDetailPath+ "["+i+"]/stat" )+"▦"
  3349. + model.getValue(xRecDetailPath+ "["+i+"]/flag" )+"▦"
  3350. + model.getValue(xRecDetailPath+ "["+i+"]/clstlcd" )+"▦"
  3351. + model.getValue(xRecDetailPath+ "["+i+"]/hngnm" )+"▦"
  3352. + model.getValue(xRecDetailPath+ "["+i+"]/basepnt" )+"▦"
  3353. + model.getValue(xRecDetailPath+ "["+i+"]/timsval" )+"▦"
  3354. + model.getValue(xRecDetailPath+ "["+i+"]/cnfmyn" )+"▦"
  3355. + model.getValue(xRecDetailPath+ "["+i+"]/cmtinptyn" )+"▦"
  3356. + model.getValue(xRecDetailPath+ "["+i+"]/grupmulti" )+"▦"
  3357. + model.getValue(xRecDetailPath+ "["+i+"]/engnm" )+"▦"
  3358. + model.getValue(xRecDetailPath+ "["+i+"]/refseq" )+"▦"
  3359. + model.getValue(xRecDetailPath+ "["+i+"]/deptcd" )+"▦"
  3360. + model.getValue(xRecDetailPath+ "["+i+"]/supcd" )+"▦"
  3361. + model.getValue(xRecDetailPath+ "["+i+"]/todd" )+"▦"
  3362. + model.getValue(xRecDetailPath+ "["+i+"]/depth" )+"▦"
  3363. + model.getValue(xRecDetailPath+ "["+i+"]/grupflag" )+"▦"
  3364. + model.getValue(xRecDetailPath+ "["+i+"]/clsflag" )+"▦"
  3365. + model.getValue(xRecDetailPath+ "["+i+"]/recflag" )+"▦"
  3366. + model.getValue(xRecDetailPath+ "["+i+"]/sortseq" )+"▦"
  3367. + model.getValue(xRecDetailPath+ "["+i+"]/bktimsval" )+"▦"
  3368. + model.getValue(xRecDetailPath+ "["+i+"]/desccnts" )+"▦"
  3369. + model.getValue(xRecDetailPath+ "["+i+"]/pid" )+"▦"
  3370. + model.getValue(xRecDetailPath+ "["+i+"]/execdd" )+"▦"
  3371. + model.getValue(xRecDetailPath+ "["+i+"]/recseq" )+"▦"
  3372. + model.getValue(xRecDetailPath+ "["+i+"]/wardcd" )+"▦"
  3373. + model.getValue(xRecDetailPath+ "["+i+"]/roomcd" )+"▩"
  3374. }
  3375. var test_12 = sDetailHeader + sDetailData;
  3376. //var test_2 = grd_recdetail.getUpdateDataAll('i'); // 150114 - AYS
  3377. //model.makeValue('/root/send/recdetail', grd_recdetail.getUpdateDataAll('i'));
  3378. model.makeValue('/root/send/recdetail', (sDetailHeader + sDetailData));
  3379. if(!submit('TXMNW04001', false)){
  3380. //messageBox('저장을', 'E009');
  3381. return;
  3382. }else{
  3383. model.removenode("/root/cond/copyexecdd");
  3384. //조회조건 clear
  3385. model.setValue('/root/cond/pid', '');
  3386. //환자정보 표시 clear (2011.03.29 Ahn)
  3387. model.setValue('root/cond/patnm', '');
  3388. model.setValue('root/cond/sexage', '');
  3389. model.setValue('root/cond/age', '');
  3390. //model.removeNodeset(xRecMasterPath);
  3391. //model.removeNodeset(xRecDetailPath);
  3392. //model.removeNodeset('/root/send/');
  3393. //model.removenode('/root/send/recmaster');
  3394. //model.removenode('/root/send/recdetail');
  3395. model.removenode('/root/send/');
  3396. model.removenode('/root/main/recgrup');
  3397. model.removenode('/root/main/recpntgrup');
  3398. model.removenode('/root/main/recdetailgrup');
  3399. model.removenode('/root/main/tar_desccnts');
  3400. succnt++;
  3401. cap_succnt.text = succnt;
  3402. }
  3403. //}else if(Number(msg) == 7){//아니오
  3404. //
  3405. // continue;
  3406. //}
  3407. }
  3408. //sAllSignSave = false;
  3409. //model.removeNodeset(xRecInfo);
  3410. //model.removeNodeset(xRecMasterPath);
  3411. //model.removeNodeset(xRecDetailPath);
  3412. //model.removeNodeset('/root/send/');
  3413. model.setValue('/root/cond/pid', '');
  3414. model.setValue('root/cond/patnm', '');
  3415. model.setValue('root/cond/sexage', '');
  3416. model.setValue('root/cond/age', '');
  3417. model.removenode('/root/send/');
  3418. model.removenode('/root/main/recgrup');
  3419. model.removenode('/root/main/recpntgrup');
  3420. model.removenode('/root/main/recdetailgrup');
  3421. model.removenode('/root/main/tar_desccnts');
  3422. //model.removenode('/root/main/patinfo');
  3423. fSearchPatList();
  3424. messageBox( succnt + " 명의 환자 일괄저장이", "I001");
  3425. }
  3426. function fSearchRecMasterAll(patRow,pFlag){
  3427. //혈액투석의 경우 입원환자 더블클릭 할때에 조회조건에 기본 조회값을 세팅해야함.
  3428. //혈액투석의 경우 외래환자 더블클릭은 조회조건 비활성화
  3429. var clsflag = model.getValue('/root/cond/clsflag');//분류구분
  3430. var recflag = model.getValue('/root/cond/recflag');//기록구분
  3431. var ioflag = model.getValue("/root/main/patinfo/patlist[" + (patRow) + "]/ioflag"); //외래/입원구분
  3432. var pid = model.getValue("/root/main/patinfo/patlist[" + (patRow) + "]/pid"); //등록번호
  3433. var indd = model.getValue("/root/main/patinfo/patlist[" + (patRow) + "]/indd"); //입원일자
  3434. var histstat = model.getValue("/root/main/patinfo/patlist[" + (patRow) + "]/histstat"); //이력상태
  3435. var cretno = model.getValue("/root/main/patinfo/patlist[" + (patRow) + "]/cretno"); //생성번호
  3436. var seqno = model.getValue("/root/main/patinfo/patlist[" + (patRow) + "]/seqno"); //이력번호
  3437. var hngnm = model.getValue("/root/main/patinfo/patlist[" + (patRow) + "]/hngnm"); //환자명
  3438. var execdd = model.getValue('/root/cond/execdd'); //수행일자
  3439. var exectm = model.getValue('/root/cond/exectm'); //수행시간
  3440. if(execdd == null || execdd == ''){
  3441. execdd = getCurrentDate();
  3442. }
  3443. if(exectm == null || exectm == ''){
  3444. exectm = getCurrentTime().substring(0, 4);
  3445. }
  3446. //20081014 i/o조건값 cond 노드에 setting
  3447. model.removenode('/root/cond/ioflag');
  3448. model.makeValue('/root/cond/ioflag', ioflag);
  3449. //혈액투석외래환자의 경우 조회조건을 비활성화 처리
  3450. //fDisabledSearchArea(clsflag, ioflag); // 추가여부는 추후 판단
  3451. /********************************************************
  3452. //화면 오픈시 상단에 환자 셋팅하지 않은 경우 저장 후에도 환자정보가 전체리스트로 조회되어야 함_중증도 조회조건에 셋팅하지 않음_20090211_SMY
  3453. if(clsflag == '3'){
  3454. //혈액투석외래환자의 경우 조회조건에 pid만 세팅, 입원환자의 경우 wardcd, roomcd, pid 세팅
  3455. fSetSearchCondition(clsflag, ioflag);//조회조건 세팅
  3456. }
  3457. **********************************************************/
  3458. //중증도 마스터내역을 조회한다.
  3459. model.removenode('/root/send');
  3460. model.makeValue('/root/send/clsflag', clsflag);
  3461. model.makeValue('/root/send/recflag', recflag);
  3462. model.makeValue('/root/send/execdd', execdd);
  3463. model.makeValue('/root/send/exectm', exectm);
  3464. model.makeValue('/root/send/pid', pid);
  3465. model.makeValue('/root/send/indd', indd);
  3466. model.makeValue('/root/send/histstat', histstat);
  3467. model.makeValue('/root/send/cretno', cretno);
  3468. model.makeValue('/root/send/seqno', seqno);
  3469. model.makeValue('/root/send/hngnm', hngnm);
  3470. model.makeValue('/root/send/ioflag', ioflag);
  3471. // 조회구분 추가 (2011.03.31 Ahn)
  3472. var recsrchflag = model.getValue('/root/cond/recsrchflag');
  3473. //var recsrchflag = '1'; // 중증도 이력만 호출하기 위해 값 설정
  3474. model.makeValue('/root/send/recsrchflag', recsrchflag);
  3475. // 분류구분 중 우선순위 값 가져오기 (2011.03.31 ahn)
  3476. var selRecFlag = fGetMinSrchFlag(recsrchflag);
  3477. //model.makeValue('/root/send/selrecflag', recsrchflag);
  3478. model.setValue('/root/cond/recflag', selRecFlag); // 상단 라디오체크 분류 set
  3479. model.removenode('/root/main/recgrup');
  3480. model.makeNode('/root/main/recgrup');
  3481. //상세점수, 상세내역, 상세설명의 현재instance를 remove한다.
  3482. model.removenode('/root/main/recpntgrup');
  3483. model.removenode('/root/main/recdetailgrup');
  3484. model.removenode('/root/main/tar_desccnts');
  3485. //model.refresh();
  3486. //중증도내역 마스터 조회 후 기록정보 조회
  3487. if(!submit('TRMNW04011',false)){
  3488. messageBox('중증도내역의 조회를', 'E009');
  3489. return;
  3490. }else{
  3491. //조회갯수 0일때 조회 후 수행일자, 수행시간, 최근 저장일을 세팅
  3492. //var execdd = model.getValue('/root/cond/execdd');
  3493. var execdd = model.getValue('/root/cond/copyexecdd');
  3494. var exectm = model.getValue('/root/cond/exectm');
  3495. if(pFlag != "4"){
  3496. //중증도 마스터를 조회후 수행일자에 해당하는 내역이 없으면 행추가, 있으면 해당 row select
  3497. if(!fSetRecMasterAll(exectm, execdd, pFlag)){
  3498. return;
  3499. } else{
  3500. //환자정보에 선택한 로우정보 set
  3501. //grd_patinfo.row = curRow;
  3502. //grd_patinfo.topRow = curRow;
  3503. //중증도 상세점수조회
  3504. fSearchRecPntAll();
  3505. }
  3506. }
  3507. }
  3508. }
  3509. function fSetRecMasterAll(exectm, execdd, pFlag){
  3510. var indx = 0;
  3511. for(i=1; i <= getNodesetCount(xRecMasterPath); i++){
  3512. if((model.getValue(xRecInfo + "/recflag") == model.getValue(xRecMasterPath + '[' + i + ']/recflag')) &&
  3513. (model.getValue(xRecInfo + "/clsflag") == model.getValue(xRecMasterPath + '[' + i + ']/clsflag'))){
  3514. indx = i;
  3515. break;
  3516. }
  3517. }
  3518. if (indx > 0){ // 기록 내역이 존재할 경우 (2011.03.31 Ahn)
  3519. recRow = indx;
  3520. } else{
  3521. //기록된 내역이 한건도 없을때
  3522. //var hngnm = model.getValue("/root/main/patinfo/patlist[" + (patRow) + "]/hngnm");
  3523. //var msgStr = '(' + hngnm + ') 환자는 중증도 저장 이력이 없습니다. 개별 인증저장 하십시오.';
  3524. //messageBox(msgStr,"I");
  3525. return false;
  3526. }
  3527. if ( instUseYN == "Y" && grp_agechk.visible == true ){
  3528. model.setValue("/root/cond/agechk", model.getValue(xRecMasterPath + '[' + recRow + ']/agechk'));
  3529. }else {
  3530. model.setValue("/root/cond/agechk", "N");
  3531. }
  3532. return true;
  3533. }
  3534. function fSearchRecPntAll(selflag){
  3535. model.setValue("/root/cond/maddchk01",''); // 집중치료실 환자 체크(Morse)
  3536. model.setValue("/root/cond/maddchk02",''); // 만70세 이상 환자 체크(Morse)
  3537. model.setValue("/root/cond/maddchk03",''); // 진정 및 이완 약물투여 환자 체크(Morse)
  3538. model.setValue("/root/cond/maddchk04",''); // 음주 환자 체크(Morse)
  3539. model.setValue("/root/cond/maddchk99",''); // 해당사항 없음 체크(Morse)
  3540. model.setValue("/root/cond/haddchk",''); // 3세 미만 소아 체크(Humpty Dumpty)
  3541. model.setValue("/root/cond/haddchk01",''); // 집충치료실 환자 체크(Humpty Dumpty)
  3542. //group2.refresh();
  3543. //group4.refresh();
  3544. //var curRow = grd_recmaster.row; // 이 부분 GridRow Var로 수정 - AYS
  3545. var clsflag = "";
  3546. var recflag = "";
  3547. if(selflag == "Sel"){
  3548. clsflag = model.getValue(xRecMasterPath + '[' + recRow + ']/clsflag');
  3549. recflag = model.getValue(xRecMasterPath + '[' + recRow + ']/recflag');
  3550. if(recflag == '1'){
  3551. model.setValue("/root/cond/clsflag", clsflag); // 중증도구분 중 선택
  3552. }else if((recflag == '2') && (clsflag == '2')){
  3553. model.setValue("/root/cond/clsflag", 9); // 낙상 - Morse Scale 선택
  3554. }else if((recflag == '2') && (clsflag == '1')){
  3555. model.setValue("/root/cond/clsflag", 8); // 낙상 - Humpty Dumpty 선택
  3556. }else if((recflag == '3') && (clsflag == '1')){
  3557. model.setValue("/root/cond/clsflag", 10); // 욕창 선택
  3558. }else if(recflag == '4'){
  3559. //model.setValue("/root/cond/clsflag", 11); // 통증 선택
  3560. //alert("통증관련 개발중입니다.");
  3561. //messageBox('관련 화면 준비중', 'I009');
  3562. messageBox('통증관리기록 메뉴를 사용하십시오', 'I');
  3563. //modal("SMMNW04800",1); //통증관리기록 화면 호출
  3564. return;
  3565. }
  3566. fChangeCaption(model.getValue("/root/cond/clsflag")); // 선택된 구분으로 캡션 변경 (2011.04.19 ahn)
  3567. }else{
  3568. clsflag = model.getValue(xRecInfo + '/clsflag');
  3569. recflag = model.getValue(xRecInfo + '/recflag');
  3570. }
  3571. // 상단 라디오 선택
  3572. //마스터가 암것도 없을때나 행추가 상태일때는 조회안하고 바로 리턴한다.
  3573. //if(grd_recmaster.rows < 2 || model.getValue(xRecMasterPath + '[' + recRow + ']/stat') == 'i'){ // 이 부분 GridRow Var로 수정 - AYS
  3574. //if(getNodesetCount(xRecMasterPath) < 2 || model.getValue(xRecMasterPath + '[' + recRow + ']/stat') == 'i'){ // 이 부분 GridRow Var로 수정 - AYS
  3575. // model.removeNodeset("/root/main/recpntgrup/recpntlist");// 중증도 상세점수 클리어
  3576. // model.refresh();
  3577. // }
  3578. var maddchk01 = model.getValue(xRecMasterPath + '[' + recRow + ']/maddchk01');
  3579. var maddchk02 = model.getValue(xRecMasterPath + '[' + recRow + ']/maddchk02');
  3580. var maddchk03 = model.getValue(xRecMasterPath + '[' + recRow + ']/maddchk03');
  3581. var maddchk04 = model.getValue(xRecMasterPath + '[' + recRow + ']/maddchk04');
  3582. var haddchk = model.getValue(xRecMasterPath + '[' + recRow + ']/haddchk');
  3583. //var haddchk01 = model.getValue(xRecMasterPath + '[' + recRow + ']/haddchk01');
  3584. var dinfo = maddchk01+maddchk02+maddchk03+maddchk04+haddchk;
  3585. //중증도내역 선택했던 로우정보(수행일자)를 저장한다.
  3586. model.removeNodeset("/root/send");
  3587. model.makeValue("/root/send/pid", model.getValue(xRecMasterPath+"["+recRow+"]/pid"));
  3588. model.makeValue("/root/send/indd", model.getValue(xRecMasterPath+"["+recRow+"]/indd"));
  3589. model.makeValue("/root/send/cretno", model.getValue(xRecMasterPath+"["+recRow+"]/cretno"));
  3590. model.makeValue("/root/send/execdd", model.getValue(xRecMasterPath+"["+recRow+"]/execdd"));
  3591. //model.makeValue("/root/send/execdd", model.getValue('/root/cond/copyexecdd'));
  3592. model.makeValue("/root/send/recseq", model.getValue(xRecMasterPath+"["+recRow+"]/recseq"));
  3593. model.makeValue("/root/send/clsflag", clsflag);
  3594. model.makeValue("/root/send/recflag", recflag);
  3595. model.makeValue('/root/send/bspntgrup/dinfo', dinfo);
  3596. //상세내역, 상세설명의 현재instance를 remove한다.
  3597. model.removenode('/root/main/recdetailgrup');
  3598. model.removenode('/root/main/tar_desccnts');
  3599. //model.refresh();
  3600. //상세점수그리드조회
  3601. if(!submit("TRMNW04007",false)) {//상세점수조회
  3602. messageBox('상세점수조회를', 'E009');
  3603. return;
  3604. }else{
  3605. //상세점수그리드의 컬럼을 조회한 내역의 갯수만큼 화면에 보여준다.
  3606. //fColLqidtys(); // 삭제해도 무방하지 않을까? 그리드 참조부분 - AYS
  3607. }
  3608. //중증기록 detail 상세내역 그리드리스트를 조회한다.
  3609. fSearchRecDetailAll();
  3610. //addchk();
  3611. }
  3612. function fSearchRecDetailAll(){
  3613. model.removenode('/root/main/recdetailgrup');
  3614. model.makeNode('/root/main/recdetailgrup');
  3615. model.removeNodeset("/root/send");
  3616. model.makeValue("/root/send/pid", model.getValue(xRecMasterPath+"["+recRow+"]/pid"));
  3617. model.makeValue("/root/send/cretno", model.getValue(xRecMasterPath+"["+recRow+"]/cretno"));
  3618. model.makeValue("/root/send/indd", model.getValue(xRecMasterPath+"["+recRow+"]/indd"));
  3619. model.makeValue("/root/send/seqno", model.getValue(xRecMasterPath+"["+recRow+"]/seqno"));
  3620. model.makeValue("/root/send/recseq", model.getValue(xRecMasterPath+"["+recRow+"]/recseq"));
  3621. model.makeValue("/root/send/clsflag", model.getValue(xRecMasterPath+"["+recRow+"]/clsflag"));
  3622. model.makeValue("/root/send/recflag", model.getValue(xRecMasterPath+"["+recRow+"]/recflag"));
  3623. model.makeValue("/root/send/execdd", model.getValue(xRecMasterPath+"["+recRow+"]/execdd"));
  3624. model.makeValue("/root/send/newexecdd", model.getValue("/root/cond/execdd"));
  3625. //상세설명의 현재instance를 remove한다.
  3626. model.removenode('/root/main/tar_desccnts');
  3627. //model.refresh();
  3628. //중증도 상세내역 조회
  3629. if(submit("TRMNW04006",false)){
  3630. //model.copyNode("/root/temp","/root/main");
  3631. //fShowTreeRecDetailGrup(); // Grid 색상 추가 부분 제거 필요
  3632. }
  3633. }
  3634. function fIsRecordedAll(iptExecdd){
  3635. var retArr = new Array(1);
  3636. var recorded = false;
  3637. var signno = '';
  3638. var execdd;
  3639. var stat;
  3640. for(var i = 1; i < getNodesetCount(xRecMasterPath); i++){
  3641. execdd = model.getValue(xRecMasterPath + '[' + i + ']/execdd');
  3642. stat = model.getValue(xRecMasterPath + '[' + i + ']/stat');
  3643. if(execdd != '' && iptExecdd == execdd && stat != 'i'){
  3644. signno = model.getValue(xRecMasterPath + '[' + i + ']/signno');
  3645. recorded = true;
  3646. retArr[0] = recorded;
  3647. retArr[1] = signno;
  3648. return retArr;
  3649. }
  3650. }
  3651. retArr[0] = recorded;
  3652. retArr[1] = signno;
  3653. return retArr;
  3654. }
  3655. function addallchk(){
  3656. var wardcd = model.getValue("/root/cond/wardcd");
  3657. var patnm = model.getValue("/root/main/patinfo/patlist[" + patRow + "]/hngnm");
  3658. var age = model.getValue("/root/main/patinfo/patlist[" + patRow + "]/age");
  3659. var maddchk01 = model.getValue(xRecMasterPath + '[' + recRow + ']/maddchk01');
  3660. var maddchk02 = model.getValue(xRecMasterPath + '[' + recRow + ']/maddchk02');
  3661. var maddchk03 = model.getValue(xRecMasterPath + '[' + recRow + ']/maddchk03');
  3662. var maddchk04 = model.getValue(xRecMasterPath + '[' + recRow + ']/maddchk04');
  3663. var maddchk99 = model.getValue(xRecMasterPath + '[' + recRow + ']/maddchk99');
  3664. var haddchk = model.getValue(xRecMasterPath + '[' + recRow + ']/haddchk');
  3665. var haddchk01 = model.getValue(xRecMasterPath + '[' + recRow + ']/haddchk01');
  3666. if(model.getValue("/root/cond/clsflag") == "8"){
  3667. if(parseInt(age) >= 15){
  3668. messageBox(patnm + " 환자는 15세 이상입니다. Morse scale을 사용해야 합니다.","E");
  3669. //messageBox("낙상 위험 사정은 15세 이상 - Morse scale을 사용해야 합니다.","E");
  3670. return false;
  3671. }else{
  3672. for(i = 1; i <= getNodesetCount("/root/init/icucdgrup/icucdgruplist"); i++){
  3673. if(wardcd == model.getValue("/root/init/icucdgrup/icucdgruplist[" + i + "]/wardcd")){ // 중환자실이면
  3674. //chk_haddchk01.value = 'Y';
  3675. haddchk01 = 'Y';
  3676. model.setValue(xRecMasterPath + '[' + recRow + ']/haddchk01', haddchk01);
  3677. }
  3678. }
  3679. if(parseInt(age) < 3){
  3680. //chk_haddchk.value = 'Y';
  3681. haddchk = 'Y';
  3682. model.setValue(xRecMasterPath + '[' + recRow + ']/haddchk', haddchk);
  3683. }
  3684. }
  3685. }else if(model.getValue("/root/cond/clsflag") == "9"){
  3686. if(parseInt(age) < 15){
  3687. //messageBox("낙상 위험 사정은 15세 미만 - Humpty Dumpty scale을 사용해야 합니다.","E");
  3688. messageBox(patnm + " 환자는 15세 미만입니다. Humpty Dumpty scale을 사용해야 합니다.","E");
  3689. return false;
  3690. }else{
  3691. for(i = 1; i <= getNodesetCount("/root/init/icucdgrup/icucdgruplist"); i++){
  3692. if(wardcd == model.getValue("/root/init/icucdgrup/icucdgruplist[" + i + "]/wardcd")){ // 중환자실이면
  3693. //chk_maddchk01.value = 'Y';
  3694. maddchk01 = 'Y';
  3695. model.setValue(xRecMasterPath + '[' + recRow + ']/maddchk01', maddchk01);
  3696. }
  3697. }
  3698. }
  3699. if(parseInt(age) >= 70){
  3700. //chk_maddchk02.value = 'Y';
  3701. maddchk02 = 'Y';
  3702. model.setValue(xRecMasterPath + '[' + recRow + ']/maddchk02', maddchk02);
  3703. }
  3704. if(maddchk01 == "" && maddchk02 == "" && maddchk03 == "" && maddchk04 == "" && maddchk99 == "" ){
  3705. maddchk99 = 'Y';
  3706. model.setValue(xRecMasterPath + '[' + recRow + ']/maddchk99', maddchk99);
  3707. }
  3708. }
  3709. model.setValue("/root/cond/maddchk01" , maddchk01);
  3710. model.setValue("/root/cond/maddchk02" , maddchk02);
  3711. model.setValue("/root/cond/maddchk03" , maddchk03);
  3712. model.setValue("/root/cond/maddchk04" , maddchk04);
  3713. model.setValue("/root/cond/maddchk99" , maddchk99);
  3714. model.setValue("/root/cond/haddchk" , haddchk);
  3715. model.setValue("/root/cond/haddchk01" , haddchk01);
  3716. return true;
  3717. }
  3718. function fLoadFallPnt(recflag, clsflag, bspntnm){
  3719. //debugger;
  3720. var spid = model.getValue(xRecMasterPath + "/pid");
  3721. var sorddd = model.getValue('/root/main/patinfo/patlist[' + (grd_patinfo.row-1) + ']/indd');
  3722. var sioflag = model.getValue('/root/main/patinfo/patlist[' + (grd_patinfo.row-1) + ']/ioflag');
  3723. var scretno = model.getValue('/root/main/patinfo/patlist[' + (grd_patinfo.row-1) + ']/cretno');
  3724. var sexecdd = model.getValue('/root/cond/execdd');
  3725. var sfromcd = "";
  3726. var sprntyn = "";
  3727. var left = event.screenX;
  3728. var top = event.screenY;
  3729. var snowdate = getCurrentDate();
  3730. if(recflag == '2' && clsflag == '1'){ //Humpty Dumpty(소아)
  3731. sfromcd = '1600017757';
  3732. sprntyn = 'Y';
  3733. } else if(recflag == '2' && clsflag == '2'){ // Morse Scale(성인)
  3734. sfromcd = '1600017756';
  3735. sprntyn = 'Y';
  3736. } else{
  3737. sfromcd = '';
  3738. sprntyn = 'N';
  3739. }
  3740. model.removenode('/root/send2');
  3741. model.makeValue("/root/send2/req/pid", spid);
  3742. model.makeValue("/root/send2/req/indd", sorddd);
  3743. model.makeValue("/root/send2/req/cretno", scretno);
  3744. model.makeValue("/root/send2/req/formcd", sfromcd);
  3745. if(getUserInfo("dutplceinstcd") == '032' && sprntyn == 'Y' && bspntnm == '고위험군' && snowdate == sexecdd && getUserInfo("dutplcecd") != '3062300000' && getUserInfo("dutplcecd") != '2110201000' && getUserInfo("dutplcecd") != '2364601000') {
  3746. if (submit("TRMNW15101") == true){
  3747. if(getNodesetCount("/root/duplocrprnt/msginfo/list") > 0 ) { // 출력했던 건인 경우
  3748. if(model.getValue("/root/duplocrprnt/msginfo/list/scanyn") == "N"){ // 스캔된건이 없는경우
  3749. if(model.getValue("/root/duplocrprnt/msginfo/list/statcd") == "D" || model.getValue("/root/duplocrprnt/msginfo/list/statcd") == "CP"){ // 삭제/출력취소 된 건인 경우
  3750. //신규출력
  3751. fOCRPrint(spid, sorddd, scretno, sioflag, sfromcd);
  3752. //fOCRPrint(left, top, spid, sorddd, scretno, sioflag, sfromcd);
  3753. }
  3754. }
  3755. }else{
  3756. // 신규출력
  3757. fOCRPrint(spid, sorddd, scretno, sioflag, sfromcd);
  3758. //fOCRPrint(left, top, spid, sorddd, scretno, sioflag, sfromcd);
  3759. }
  3760. }
  3761. }
  3762. }
  3763. function fOCRPrint(spid, sorddd, scretno, sioflag, sformcd){
  3764. //ivwiewer 를 nonvisible 로 올려두고 진행
  3765. var formcd = sformcd
  3766. var pid = spid
  3767. var orddd = sorddd
  3768. var cretno = scretno
  3769. var ordtype = sioflag
  3770. var formtypecls = "3";
  3771. var ocrtagprntyn = "Y";
  3772. ivw_ocrprnt.attribute("src") = "../../../emr/formmngtweb/xrw/SSMRF03800_OCR뷰어.xrw";
  3773. ivw_ocrprnt.window.javascript.fGetOCRInfo(formcd, pid, orddd, cretno, ordtype, formtypecls, ocrtagprntyn);
  3774. ivw_ocrprnt.window.javascript.fPrint();
  3775. }