SPMNR06300_환자별 임상기록조회.xrw 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796
  1. <?xml version="1.0" encoding="EUC-KR"?>
  2. <?xml-stylesheet href="../../../com/commonweb/css/common.css" type="text/css" ?>
  3. <xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.w3.org/2002/01/xforms" xmlns:ev="http://www.w3.org/2001/xml-events">
  4. <xhtml:head>
  5. <xhtml:title>환자별 임상기록조회</xhtml:title>
  6. <model id="model1">
  7. <instance id="instance1">
  8. <root xmlns="">
  9. <main>
  10. <cond>
  11. <srchdd/>
  12. <pid/>
  13. <patnm/>
  14. <grdrage/>
  15. </cond>
  16. <patinfo>
  17. <patbaseinfo>
  18. <pid/>
  19. <patnm/>
  20. <grdrage/>
  21. </patbaseinfo>
  22. <patrechistinfo>
  23. <pid/>
  24. <indd/>
  25. <cretno/>
  26. <dschdd/>
  27. <rownum/>
  28. <histlist/>
  29. </patrechistinfo>
  30. <rsltflag>
  31. <rtnflag/>
  32. </rsltflag>
  33. </patinfo>
  34. <recinfo>
  35. <reclist/>
  36. </recinfo>
  37. </main>
  38. <init>
  39. </init>
  40. <temp>
  41. <recinfo/>
  42. </temp>
  43. <send/>
  44. <hidden/>
  45. </root>
  46. </instance>
  47. <script type="javascript" ev:event="xforms-ready">
  48. <![CDATA[
  49. //var sInitCaption = grd_reclist.caption;
  50. finit();
  51. ]]>
  52. </script>
  53. <submission id="TRMNR06311" mediatype="application/x-www-form-urlencoded" method="post" ref="/root/send" replace="instance" resultref="/root/main/patinfo"/>
  54. <submission id="TRMNR06312" mediatype="application/x-www-form-urlencoded" method="post" ref="/root/send" replace="instance" resultref="/root/temp/recinfo"/>
  55. </model>
  56. <script type="javascript" src="../../../com/commonweb/js/common.js"/>
  57. <script type="javascript" src="../../../com/commonweb/js/dateHelper.js"/>
  58. <script type="javascript" src="../../../com/commonweb/js/tfHelper.js"/>
  59. <script type="javascript" src="../../../emr/carecomweb/js/CareCom.js"/>
  60. <script type="javascript" src="../../../com/commonweb/js/stringHelper.js"/>
  61. <script type="javascript" src="../../../com/commonweb/js/numericHelper.js"/>
  62. <script type="javascript">
  63. <![CDATA[
  64. var sInitCaption = grd_reclist.caption;
  65. //초기 설정 메소드
  66. function finit(){
  67. var sParamInfo = opener.javascript.getParameter("SPMNR06300_Param");
  68. if(sParamInfo == ""){
  69. messageBox("환자 번호를 입력하십시요", "I");
  70. return;
  71. }else{
  72. model.setValue("/root/main/cond/pid" , getArrayData(sParamInfo, 1, 0));
  73. model.setValue("/root/main/cond/srchdd" , getArrayData(sParamInfo, 1, 1));
  74. ipt_pid.refresh();
  75. fSrchPatInfo();
  76. }
  77. }
  78. function fInitGrid(){
  79. model.removenode("/root/main/recinfo");
  80. model.removenode("/root/hidden/recinfo");
  81. for(var i = grd_reclist.colRef("itemnm")+1 ; i <= grd_reclist.cols ; i++){
  82. grd_reclist.deleteColumn(i);
  83. }
  84. grd_reclist.caption = sInitCaption;
  85. grd_reclist.rebuild();
  86. }
  87. //조회 데이터 그리드에 세팅
  88. function fSettingRecList(){
  89. fInitGrid();
  90. var sSettingFlag = "";
  91. var sTotalSum = new Array();
  92. var sIOTotalSum = new Array();
  93. var sItemTotalSum = new Array();
  94. var xTempClincObsRecList = "/root/temp/recinfo/reclist";
  95. var xHoursClincObsRecList = "/root/main/recinfo/reclist";
  96. var xClincObsRecListPath = "/root/hidden/recinfo/reclist";
  97. var sCurDT = getCurrentDate() + getCurrentTime();
  98. var sRecDT = ""; // 기록일시
  99. var sRecFromDT = ""; // 기록시작일시
  100. var sRecToDT = ""; // 기록종료일시
  101. var sAttrCD = ""; // 속성코드
  102. var sUserID = getUserId();
  103. var sRecRslt = "";
  104. var sAnptTmSpec = "";
  105. var sSupCD = "";
  106. var sRecFlag = ""; // 기록구분
  107. var sIntakeTmSum = new Array();
  108. var sOutputTmSum = new Array();
  109. var sIntakeSumLine = ""; // 추가
  110. var sOutputSumLine = ""; // 추가
  111. var sIntakeSumRow = 0;
  112. var sOutputSumRow = 0;
  113. var sTotalSumRow = 0;
  114. var sIntakeSum = 0;
  115. var sOutputSum = 0;
  116. var sAttrCD = "";
  117. var sAttrValue = "";
  118. var sChkSubTotal = "N";
  119. var sSubTotalNm = "";
  120. var sStartOutput = "N";
  121. var sRecAddRow = "";
  122. var sReChartFlag = "";
  123. var sFixRow = 0;
  124. var sItemColRef = "";
  125. var sRecType="";
  126. //배열 초기화
  127. sHeaderInfo = "";
  128. sHeaderArray = "";
  129. sDateArray = "";
  130. sDataArray = "";
  131. sExecynArray = "";
  132. sRecDateArray = "";
  133. if(getNodesetCount(xTempClincObsRecList) < 1){
  134. return;
  135. }
  136. if(model.getValue(xTempClincObsRecList+"[1]/depth") == "0"){
  137. //기록시간 세팅
  138. sRecDateArray = model.getValue(xTempClincObsRecList+"[1]/rectmlist").split("^");
  139. for(var i = 0 ; i < sRecDateArray.length ; i++ ){
  140. grd_reclist.addColumn("ref:recrslt"+(i+1), false);
  141. }
  142. //항목별 합계 로직
  143. grd_reclist.addColumn("ref:iototal", false);
  144. grd_reclist.rebuild();
  145. for(var i = 0 ; i < sRecDateArray.length ; i++ ){
  146. grd_reclist.colWidth(grd_reclist.colRef("recrslt"+(i+1))) = "50";
  147. }
  148. grd_reclist.colWidth(grd_reclist.colRef("itemtotal")) = "80";
  149. //데이터 그리드 헤더 정보 세팅
  150. sHeaderInfo = sInitCaption + "^" + model.getValue(xTempClincObsRecList+"[1]/rectmlist")+"^I/O 합계";
  151. grd_reclist.caption = sHeaderInfo;
  152. }else{
  153. return;
  154. }
  155. for(var i = 2 ; i <= getNodesetCount(xTempClincObsRecList); i++){
  156. mNode = i -1;
  157. model.makeValue(xClincObsRecListPath+"["+mNode+"]/itemnmview", model.getValue(xTempClincObsRecList+"["+i+"]/itemnm"));
  158. model.makeValue(xClincObsRecListPath+"["+mNode+"]/depth", model.getValue(xTempClincObsRecList+"["+i+"]/depth"));
  159. model.makeValue(xClincObsRecListPath+"["+mNode+"]/itemcd", model.getValue(xTempClincObsRecList+"["+i+"]/itemcd"));
  160. model.makeValue(xClincObsRecListPath+"["+mNode+"]/itemseqno", model.getValue(xTempClincObsRecList+"["+i+"]/itemseqno"));
  161. model.makeValue(xClincObsRecListPath+"["+mNode+"]/attrcd", model.getValue(xTempClincObsRecList+"["+i+"]/attrcd"));
  162. model.makeValue(xClincObsRecListPath+"["+mNode+"]/reccharflag", model.getValue(xTempClincObsRecList+"["+i+"]/reccharflag"));
  163. model.makeValue(xClincObsRecListPath+"["+mNode+"]/recflag", model.getValue(xTempClincObsRecList+"["+i+"]/recflag"));
  164. model.makeValue(xClincObsRecListPath+"["+mNode+"]/carerecseqno", model.getValue(xTempClincObsRecList+"["+i+"]/carerecseqno"));
  165. model.makeValue(xClincObsRecListPath+"["+mNode+"]/supcd", model.getValue(xTempClincObsRecList+"["+i+"]/supcd"));
  166. model.makeValue(xClincObsRecListPath+"["+mNode+"]/recfromdt", model.getValue(xTempClincObsRecList+"["+i+"]/recfromdt"));
  167. model.makeValue(xClincObsRecListPath+"["+mNode+"]/rectodt", model.getValue(xTempClincObsRecList+"["+i+"]/rectodt"));
  168. model.makeValue(xClincObsRecListPath+"["+mNode+"]/subtotalyn", model.getValue(xTempClincObsRecList+"["+i+"]/subtotalyn"));
  169. model.makeValue(xClincObsRecListPath+"["+mNode+"]/setnm", model.getValue(xTempClincObsRecList+"["+i+"]/setnm"));
  170. model.makeValue(xClincObsRecListPath+"["+mNode+"]/lnkbizcd", model.getValue(xTempClincObsRecList+"["+i+"]/lnkbizcd"));
  171. model.makeValue(xClincObsRecListPath+"["+mNode+"]/itemnm", model.getValue(xTempClincObsRecList+"["+i+"]/itemnm"));
  172. for(var j = 0 ; j < sRecDateArray.length ; j++){
  173. model.makeNode(xClincObsRecListPath+"["+mNode+"]/recrslt"+(j+1));
  174. model.makeNode(xClincObsRecListPath+"["+mNode+"]/rectype"+(j+1));
  175. var sSubRecTMList = model.getValue(xTempClincObsRecList+"["+i+"]/rectmlist").split("^");
  176. var sSubRecRsltList = (model.getValue(xTempClincObsRecList+"["+i+"]/recrsltlist").split("^"));
  177. for(var k = 0 ; k < sSubRecTMList.length ; k++){
  178. if(sRecDateArray[j] == sSubRecTMList[k]){
  179. model.setValue(xClincObsRecListPath+"["+mNode+"]/recrslt"+(j+1) , sSubRecRsltList[k].substring(1));
  180. model.setValue(xClincObsRecListPath+"["+mNode+"]/rectype"+(j+1) , sSubRecRsltList[k].substring(0,1));
  181. }
  182. }
  183. }
  184. model.makeValue(xClincObsRecListPath+"["+mNode+"]/iototal", "");
  185. }
  186. //임상기록 그리드 세팅 부분
  187. var sRecCnt = getNodesetCnt(model, xClincObsRecListPath);
  188. for(var iRow=1; iRow <= sRecCnt; iRow++){
  189. var addRow = eval(getNodesetCount(xHoursClincObsRecList)) + 1;
  190. sSetnm = model.getValue(xClincObsRecListPath+"["+iRow+"]/setnm");
  191. sSubTotal = model.getValue(xClincObsRecListPath+"["+iRow+"]/subtotalyn");
  192. sRecFlag = model.getValue(xClincObsRecListPath+"["+iRow+"]/recflag");
  193. //현재 행 다음의 기록구분을 조회
  194. if(iRow == sRecCnt){
  195. sNextRecFlag = "Last";
  196. }else{
  197. sNextRecFlag = model.getValue(xClincObsRecListPath+"["+(iRow+1)+"]/recflag");
  198. }
  199. if(sChkSubTotal == "N" && sSubTotal == "Y"){
  200. sChkSubTotal = sSubTotal;
  201. sSubTotalNm = sSetnm;
  202. }
  203. if(sChkSubTotal == "Y"){
  204. if((sRecFlag == "A" || sRecFlag == "B") && sRecFlag != sNextRecFlag){
  205. model.makeNode(xHoursClincObsRecList+"["+addRow+"]");
  206. model.copyNode(xHoursClincObsRecList+"["+addRow+"]", xClincObsRecListPath+"["+iRow+"]");
  207. iHoursRecRow = addRow;
  208. var addIntakeRow = eval(getNodesetCount(xHoursClincObsRecList)) + 1;
  209. model.makeNode(xHoursClincObsRecList+"["+addIntakeRow+"]");
  210. model.makeValue(xHoursClincObsRecList+"["+addIntakeRow+"]/itemnmview", sSubTotalNm);
  211. model.makeValue(xHoursClincObsRecList+"["+addIntakeRow+"]/depth", "2");
  212. model.makeValue(xHoursClincObsRecList+"["+addIntakeRow+"]/itemcd", "");
  213. model.makeValue(xHoursClincObsRecList+"["+addIntakeRow+"]/itemseqno", "");
  214. model.makeValue(xHoursClincObsRecList+"["+addIntakeRow+"]/attrcd", "");
  215. model.makeValue(xHoursClincObsRecList+"["+addIntakeRow+"]/reccharflag", "");
  216. model.makeValue(xHoursClincObsRecList+"["+addIntakeRow+"]/recflag", "T");
  217. model.makeValue(xHoursClincObsRecList+"["+addIntakeRow+"]/carerecseqno", "");
  218. model.makeValue(xHoursClincObsRecList+"["+addIntakeRow+"]/supcd", "");
  219. model.makeValue(xHoursClincObsRecList+"["+addIntakeRow+"]/recfromdt", "");
  220. model.makeValue(xHoursClincObsRecList+"["+addIntakeRow+"]/rectodt", "");
  221. model.makeValue(xHoursClincObsRecList+"["+addIntakeRow+"]/subtotalyn", "");
  222. model.makeValue(xHoursClincObsRecList+"["+addIntakeRow+"]/setnm", "");
  223. model.makeValue(xHoursClincObsRecList+"["+addIntakeRow+"]/lnkbizcd", "");
  224. model.makeValue(xHoursClincObsRecList+"["+addIntakeRow+"]/itemnm", sSubTotalNm);
  225. for(var j = 0 ; j < sRecDateArray.length ; j++){
  226. model.makeValue(xHoursClincObsRecList+"["+addIntakeRow+"]/recrslt"+(j+1), "");
  227. }
  228. model.makeValue(xHoursClincObsRecList+"["+addIntakeRow+"]/iototal", 0);
  229. sIntakeSumLine = eval(addIntakeRow)+1;
  230. }else if(sRecFlag == "C" && sStartOutput == "N"){
  231. sStartOutput = "Y";
  232. model.makeNode(xHoursClincObsRecList+"["+addRow+"]");
  233. model.makeValue(xHoursClincObsRecList+"["+addRow+"]/itemnmview", sSubTotalNm);
  234. model.makeValue(xHoursClincObsRecList+"["+addRow+"]/depth", "2");
  235. model.makeValue(xHoursClincObsRecList+"["+addRow+"]/itemcd", "");
  236. model.makeValue(xHoursClincObsRecList+"["+addRow+"]/itemseqno", "");
  237. model.makeValue(xHoursClincObsRecList+"["+addRow+"]/attrcd", "");
  238. model.makeValue(xHoursClincObsRecList+"["+addRow+"]/reccharflag", "");
  239. model.makeValue(xHoursClincObsRecList+"["+addRow+"]/recflag", "T");
  240. model.makeValue(xHoursClincObsRecList+"["+addRow+"]/carerecseqno", "");
  241. model.makeValue(xHoursClincObsRecList+"["+addRow+"]/supcd", "");
  242. model.makeValue(xHoursClincObsRecList+"["+addRow+"]/recfromdt", "");
  243. model.makeValue(xHoursClincObsRecList+"["+addRow+"]/rectodt", "");
  244. model.makeValue(xHoursClincObsRecList+"["+addRow+"]/subtotalyn", "");
  245. model.makeValue(xHoursClincObsRecList+"["+addRow+"]/setnm", "out");
  246. model.makeValue(xHoursClincObsRecList+"["+addRow+"]/lnkbizcd", "");
  247. model.makeValue(xHoursClincObsRecList+"["+addRow+"]/itemnm", sSubTotalNm);
  248. for(var j = 0 ; j < sRecDateArray.length ; j++){
  249. model.makeValue(xHoursClincObsRecList+"["+addRow+"]/recrslt"+(j+1), "");
  250. }
  251. model.makeValue(xHoursClincObsRecList+"["+addRow+"]/iototal", 0);
  252. sOutputSumLine = eval(addRow)+1;
  253. var addOutputRow = eval(getNodesetCount(xHoursClincObsRecList)) + 1;
  254. model.makeNode(xHoursClincObsRecList+"["+addOutputRow+"]");
  255. model.copyNode(xHoursClincObsRecList+"["+addOutputRow+"]", xClincObsRecListPath+"["+iRow+"]");
  256. iHoursRecRow = addOutputRow;
  257. }else{
  258. model.makeNode(xHoursClincObsRecList+"["+addRow+"]");
  259. model.copyNode(xHoursClincObsRecList+"["+addRow+"]", xClincObsRecListPath+"["+iRow+"]");
  260. }
  261. }else{
  262. model.makeNode(xHoursClincObsRecList+"["+addRow+"]");
  263. model.copyNode(xHoursClincObsRecList+"["+addRow+"]", xClincObsRecListPath+"["+iRow+"]");
  264. iHoursRecRow = addRow;
  265. }
  266. // Intake/OutTake 변경시 초기화
  267. if(sRecFlag != sNextRecFlag){
  268. sChkSubTotal = "N";
  269. sStartOutput = "N";
  270. sIntakeSumLine = "";
  271. sOutputSumLine = "";
  272. }
  273. }
  274. grd_reclist.refresh();
  275. for(var iRow = grd_reclist.fixedRows ; iRow <= grd_reclist.rows ; iRow++){
  276. sItemTotalSum[iRow] = "";
  277. sCareRecSeqno = grd_reclist.valueMatrix(iRow, grd_reclist.colRef("carerecseqno"));
  278. sRecFromDT = grd_reclist.valueMatrix(iRow, grd_reclist.colRef("recfromdt"));
  279. sRecToDT = grd_reclist.valueMatrix(iRow, grd_reclist.colRef("rectodt"));
  280. sDepth = grd_reclist.valueMatrix(iRow, grd_reclist.colRef("depth"));
  281. sAttrCD = grd_reclist.valueMatrix(iRow, grd_reclist.colRef("attrcd"));
  282. sReChartFlag = grd_reclist.valueMatrix(iRow, grd_reclist.colRef("reccharflag"));
  283. sLnkBizCd = grd_reclist.valueMatrix(iRow, grd_reclist.colRef("lnkbizcd"));
  284. sSubTotalYn = grd_reclist.valueMatrix(iRow, grd_reclist.colRef("subtotalyn"));
  285. sRecFlag = grd_reclist.valueMatrix(iRow, grd_reclist.colRef("recflag"));
  286. sSupCD = model.getValue(xHoursClincObsRecList+"["+iRow+"]/supcd" );
  287. //현재 행 다음의 기록구분을 조회
  288. if(iRow == grd_reclist.rows){
  289. sNextRecFlag = "Last";
  290. }else{
  291. sNextRecFlag = grd_reclist.valueMatrix((iRow+1), grd_reclist.colRef("recflag"));
  292. }
  293. // 분류의 경우
  294. if(eval(sDepth) == 1){
  295. grd_reclist.mergeByFree(iRow, grd_reclist.fixedCols, iRow, grd_reclist.cols-1);
  296. grd_reclist.rowStyle(iRow,"data","background-color") = "#d0e7ff";
  297. grd_reclist.rowStyle(iRow,"data","font-weight") = "bold";
  298. }else{ //분류가 아닐 경우
  299. // SubTotal 항목 표시
  300. // if(sSubTotalYn == "Y"){
  301. // grd_reclist.cellStyle("background-color", iRow, sItemColRef, iRow, sItemColRef) = "#ffff99";
  302. // }
  303. // SubTotal 항목 표시
  304. if(sSubTotalYn == "Y"){
  305. grd_reclist.cellStyle("background-color", iRow, sItemColRef, iRow, sItemColRef) = "#ffff99";
  306. } else if(sSubTotalYn == "H"){//20090209 khj hierarchies 자동세팅관련 임상관찰기록에서 작성대상이 아닌 상위아이템행은 읽기전용으로 세팅
  307. grd_reclist.mergeByFree(iRow, grd_reclist.fixedCols, iRow, grd_reclist.cols-1);
  308. grd_reclist.isReadOnly(iRow,grd_reclist.fixedCols, iRow, grd_reclist.cols-1) = true;
  309. }
  310. // Total Intake, Total Output 색 및 글꼴 변경
  311. if(sRecFlag == "T"){
  312. grd_reclist.rowStyle(iRow,"data","background-color") = "#dbb7ff";
  313. grd_reclist.cellStyle("font-weight", iRow, sItemColRef, iRow, sItemColRef) = "bold";
  314. sTotalSumRow = iRow;
  315. }else{
  316. //Total Intake, Total Output 제외 대상 색 및 글꼴 변경
  317. //연계업무항목 설정 추가
  318. if(sLnkBizCd != "-" && sLnkBizCd != "99" ){
  319. grd_reclist.cellStyle("background-color",iRow, sItemColRef+1, iRow, grd_reclist.cols-1)= "#eaeaea"; //추가
  320. grd_reclist.cellStyle("color",iRow, sItemColRef+1, iRow, grd_reclist.cols-1) = "#FF0000";
  321. }
  322. }
  323. for(var iCol=0 ; iCol < sRecDateArray.length; iCol++){
  324. sRecRsltCol = grd_reclist.colRef("recrslt"+ (iCol+1));
  325. sRecRslt = grd_reclist.valueMatrix(iRow, sRecRsltCol);
  326. sRecType = model.getValue(xHoursClincObsRecList+"["+iRow+"]/rectype"+(iCol+1) );//recrsltattrcd 첫번째에 기록출처구분을 조회해옴.
  327. //------khj CDIS입력 컬러 다르게 표시 -----------
  328. if( sRecType == "M" && sSupCD == "IT000001" ){
  329. grd_reclist.cellStyle("color",iRow,sRecRsltCol) = "#FF0000";
  330. }
  331. // Intake/output 합계 계산
  332. if(sSubTotalYn == "Y"){
  333. if( isNull(sTotalSum[sRecRsltCol]) || fIsNumber(sTotalSum[sRecRsltCol]) == false){
  334. sTotalSum[sRecRsltCol] = null;
  335. sIOTotalSum[sRecRsltCol] = 0;
  336. }
  337. sChkSubTotal = "Y";
  338. if(sRecRslt != ""){
  339. if(sRecFlag == "A"){
  340. if(sAttrCD == "" && fIsNumber(sRecRslt) == true){
  341. sTotalSum[sRecRsltCol] += eval(sRecRslt);
  342. if(sItemTotalSum[iRow] == ""){ sItemTotalSum[iRow] = 0; }
  343. sItemTotalSum[iRow] += eval(sRecRslt);
  344. }else{
  345. sAttrValue = sRecRslt.split(":");
  346. if(sAttrValue[0].getTrim().isNumber()){
  347. sTotalSum[sRecRsltCol] += eval(sAttrValue[0]);
  348. }
  349. }
  350. }else if (sRecFlag == "B" || sRecFlag == "C"){
  351. if(sAttrCD == "" && fIsNumber(sRecRslt) == true){
  352. sTotalSum[sRecRsltCol] += eval(sRecRslt);
  353. sIOTotalSum[sRecRsltCol] += eval(sRecRslt);
  354. if(sItemTotalSum[iRow] == ""){ sItemTotalSum[iRow] = 0; }
  355. sItemTotalSum[iRow] += eval(sRecRslt);
  356. }else{
  357. if(fIsNumber(sRecRslt) == true){
  358. sTotalSum[sRecRsltCol] += eval(sRecRslt);
  359. sIOTotalSum[sRecRsltCol] += eval(sRecRslt);
  360. }else{
  361. sAttrValue = sRecRslt.split(":");
  362. if(sAttrValue[0].getTrim().isNumber()){
  363. sTotalSum[sRecRsltCol] += eval(sAttrValue[0]);
  364. sIOTotalSum[sRecRsltCol] += eval(sAttrValue[0]);
  365. }
  366. }
  367. }
  368. }
  369. }
  370. }
  371. // 합계 계산목록 Intake/Output에 세팅
  372. if( (sRecFlag == "T" || sRecFlag != sNextRecFlag ) && sChkSubTotal == "Y" && sTotalSumRow != "" ){
  373. // if(sTotalSumRow != "" && (sTotalSum[sRecRsltCol] != null || sTotalSum[sRecRsltCol] != "")){
  374. if(sTotalSumRow != "" && sTotalSum[sRecRsltCol] != null ){
  375. grd_reclist.valueMatrix(sTotalSumRow, sRecRsltCol) = sTotalSum[sRecRsltCol];
  376. var sSumValue = "";
  377. if(sIOTotalSum[sRecRsltCol] != 0 && sIOTotalSum[sRecRsltCol] != "" && fIsNumber(sIOTotalSum[sRecRsltCol]) == true) sSumValue = sIOTotalSum[sRecRsltCol];
  378. //합계부분 처리
  379. if(grd_reclist.valueMatrix(sTotalSumRow, grd_reclist.colRef("iototal")) == "" || grd_reclist.valueMatrix(sTotalSumRow, grd_reclist.colRef("iototal")) == "0"){
  380. grd_reclist.valueMatrix(sTotalSumRow, grd_reclist.colRef("iototal")) = sSumValue;
  381. }else{
  382. grd_reclist.valueMatrix(sTotalSumRow, grd_reclist.colRef("iototal")) = eval(sSumValue) + eval(grd_reclist.valueMatrix(sTotalSumRow, grd_reclist.colRef("iototal")));
  383. }
  384. }
  385. if(iCol == sRecDateArray.length-1){
  386. sChkSubTotal = "C";
  387. }
  388. }
  389. }
  390. if(sChkSubTotal == "C"){
  391. for(var i = 0 ; i <sRecDateArray.length ; i ++){
  392. sInitRecRsltCol = grd_reclist.colRef("recrslt"+ (i+1));
  393. sTotalSum[sInitRecRsltCol] = null;
  394. }
  395. sTotalSumRow = "";
  396. sChkSubTotal = "N";
  397. }
  398. }
  399. if(sRecFlag != "T" ){
  400. var sSumValue = "";
  401. if(sItemTotalSum[iRow] != 0 && sItemTotalSum[iRow] != "") sSumValue = sItemTotalSum[iRow];
  402. grd_reclist.valueMatrix(iRow, grd_reclist.colRef("iototal")) = sSumValue;
  403. }
  404. }
  405. setTree(grd_reclist, grd_reclist.colRef("depth"), 0, false); //변경
  406. model.refresh();
  407. }
  408. //숫자형인지 체크
  409. function fIsNumber(str) {
  410. str += ''; // 문자열로 변환
  411. str = str.replace(/^\s*|\s*$/g, ''); // 좌우 공백 제거
  412. if (str == '' || isNaN(str)) return false;
  413. return true;
  414. }
  415. //일자 변경
  416. function fDateCalc(pFlag, pTerm){
  417. var sRecDT = model.getValue("/root/main/cond/srchdd");
  418. sRecDT = sRecDT.toDate("YYYYMMDDhhmmss");
  419. var sTime = 60 * pTerm;
  420. if(pFlag == "-"){
  421. sRecDT.setMinutes(sRecDT.getMinutes() - sTime);
  422. }else{
  423. sRecDT.getAddDate(sTime, "m");
  424. }
  425. model.setValue("/root/main/cond/srchdd" ,getDateTime(sRecDT,'기본').substr(0,8));
  426. ipt_recdd.refresh();
  427. }
  428. //조회 일자 변경
  429. function fChkSrchDate(){
  430. var sDschDD = model.getValue("/root/main/patinfo/patrechistinfo[ rownum = '"+cmb_rechistlist.value +"']/dschdd") ;
  431. var sInDD = model.getValue("/root/main/patinfo/patrechistinfo[ rownum = '"+cmb_rechistlist.value +"']/indd") ;
  432. if( ipt_recdd.value <= sDschDD && ipt_recdd.value >= sInDD){
  433. model.setFocus("btn_srch");
  434. btn_srch.dispatch("DOMActivate");
  435. return;
  436. }
  437. if(sDschDD < ipt_recdd.value ){
  438. fFindRecHist("E", ipt_recdd.value);
  439. return;
  440. }
  441. if(sInDD > ipt_recdd.value){
  442. fFindRecHist("S", ipt_recdd.value);
  443. return;
  444. }
  445. }
  446. //조회일자에 따른 수진 이력 조회
  447. function fFindRecHist(pFlag, pRecDD){
  448. var sCmbValue = ""; //이력에 대한 조회 정보 값
  449. var sCmbMaxValue = ""; //조회일자에 대한 최근 이력 정보 값
  450. if(pFlag == "S"){
  451. for(var i = 1 ; i <= getNodesetCount("/root/main/patinfo/patrechistinfo") ; i ++){
  452. var sDschDD = model.getValue("/root/main/patinfo/patrechistinfo["+i+"]/dschdd") ;
  453. var sInDD = model.getValue("/root/main/patinfo/patrechistinfo["+i+"]/indd") ;
  454. var sRowNum = model.getValue("/root/main/patinfo/patrechistinfo["+i+"]/rownum") ;
  455. if(sDschDD >= pRecDD && sInDD <= pRecDD){
  456. if(sCmbValue == ""){
  457. sCmbValue = sRowNum;
  458. }
  459. }
  460. if(sDschDD <= pRecDD){
  461. if(sCmbMaxValue == ""){
  462. sCmbMaxValue = sRowNum;
  463. }
  464. }
  465. }
  466. if(sCmbValue == ""){
  467. if(sCmbMaxValue == ""){
  468. messageBox("조회일자에 대한 수진 내역이 존재하지 않습니다. 최신 기록 내역 조회를 하겠습니다.", "I");
  469. cmb_rechistlist.select(0);
  470. if(model.getValue("/root/main/patinfo/patrechistinfo[ rownum ='" + cmb_rechistlist.value + "']/dschdd") == "99991231"){
  471. ipt_recdd.value = getCurrentDate();
  472. }else{
  473. ipt_recdd.value = model.getValue("/root/main/patinfo/patrechistinfo[ rownum ='" + cmb_rechistlist.value + "']/dschdd");
  474. }
  475. }else{
  476. cmb_rechistlist.value = sCmbMaxValue;
  477. ipt_recdd.value = model.getValue("/root/main/patinfo/patrechistinfo[ rownum ='" + cmb_rechistlist.value + "']/dschdd");
  478. }
  479. }else{
  480. cmb_rechistlist.value = sCmbValue;
  481. }
  482. }else{
  483. for(var i = 1; i <= getNodesetCount("/root/main/patinfo/patrechistinfo"); i ++ ){
  484. var sDschDD = model.getValue("/root/main/patinfo/patrechistinfo["+i+"]/dschdd") ;
  485. var sInDD = model.getValue("/root/main/patinfo/patrechistinfo["+i+"]/indd") ;
  486. var sRowNum = model.getValue("/root/main/patinfo/patrechistinfo["+i+"]/rownum") ;
  487. if(sDschDD >= pRecDD && sInDD <= pRecDD){
  488. if(sCmbValue == ""){
  489. sCmbValue = sRowNum;
  490. }
  491. }
  492. if(sInDD >= pRecDD){
  493. sCmbMaxValue = sRowNum;
  494. }
  495. }
  496. if(sCmbValue == ""){
  497. if(sCmbMaxValue == ""){
  498. messageBox("조회일자에 대한 수진 내역이 존재하지 않습니다. 최신 기록 내역 조회를 하겠습니다.", "I");
  499. cmb_rechistlist.select(0);
  500. if(model.getValue("/root/main/patinfo/patrechistinfo[ rownum ='" + cmb_rechistlist.value + "']/indd") == "99991231"){
  501. ipt_recdd.value = getCurrentDate();
  502. }else{
  503. ipt_recdd.value = model.getValue("/root/main/patinfo/patrechistinfo[ rownum ='" + cmb_rechistlist.value + "']/indd");
  504. }
  505. }else{
  506. cmb_rechistlist.value = sCmbMaxValue;
  507. ipt_recdd.value = model.getValue("/root/main/patinfo/patrechistinfo[ rownum ='" + cmb_rechistlist.value + "']/indd");
  508. }
  509. }else{
  510. cmb_rechistlist.value = sCmbValue;
  511. }
  512. }
  513. btn_srch.dispatch("DOMActivate");
  514. }
  515. //환자정보 조회
  516. function fSrchPatInfo(){
  517. model.removeNodeset("/root/main/patinfo/patbaseinfo");
  518. model.removeNodeset("/root/main/patinfo/patrechistinfo");
  519. model.removeNodeset("/root/main/recinfo");
  520. model.removeNodeset("/root/send");
  521. model.makeValue("/root/send/pid", model.getValue("/root/main/cond/pid"));
  522. if(submit("TRMNR06311", false) == true){
  523. fInitGrid();
  524. if(model.getValue("/root/main/patinfo/rsltflag/rtnflag") != "1"){
  525. ipt_pid.value = "";
  526. caption5.value = "";
  527. caption7.value = "";
  528. ipt_recdd.value = "";
  529. messageBox("환자 정보를 찾을 수 없습니다.","E");
  530. }else{
  531. model.setValue("/root/main/cond/patnm", model.getValue("/root/main/patinfo/patbaseinfo/patnm"));
  532. model.setValue("/root/main/cond/grdrage", model.getValue("/root/main/patinfo/patbaseinfo/grdrage"));
  533. var sSrchDD = model.getValue("/root/main/cond/srchdd");
  534. if(sSrchDD == ""){
  535. cmb_rechistlist.select(0);
  536. if(model.getValue("/root/main/patinfo/patrechistinfo[ rownum ='" + cmb_rechistlist.value + "']/dschdd") == "99991231"){
  537. ipt_recdd.value = getCurrentDate();
  538. }else{
  539. ipt_recdd.value = model.getValue("/root/main/patinfo/patrechistinfo[ rownum ='" + cmb_rechistlist.value + "']/dschdd");
  540. }
  541. if(ipt_recdd.value == ""){
  542. messageBox("환자에 대한 임상기록 내역이 존재하지 않습니다.", "I");
  543. }else{
  544. //btn_srch.dispatch("DOMActivate");
  545. //return;
  546. }
  547. }else{
  548. fFindRecHist("S", sSrchDD);
  549. }
  550. }
  551. }
  552. model.refresh();
  553. }
  554. ]]>
  555. </script>
  556. </xhtml:head>
  557. <xhtml:body style="margin-left:8; margin-top:0; margin-right:8; margin-bottom:0; ">
  558. <group id="grp_tle" style="left:0px; top:0px; width:1195px; height:13px; ">
  559. <caption id="caption6" class="tit_1" style="left:0px; top:0px; width:145px; height:14px; background-image:../../../com/commonweb/images/tit_bullet1.gif; ">환자별 임상기록조회</caption>
  560. </group>
  561. <group id="group3" visibility="hidden" style="left:0px; top:0px; width:0px; height:0px; ">
  562. <object id="obj_viewchart" clsid="{fab9b41c-87d6-474d-ab7e-f07d78f2422e}" style="left:0px; top:0px; width:1155px; height:253px; "/>
  563. <img id="img_tmp" style="left:0px; top:0px; width:0px; height:0px; background-stretch:stretch; "/>
  564. </group>
  565. <group id="grp_biz" scroll="l" style="left:0px; top:13px; width:1195px; height:744px; ">
  566. <group id="grp_sea" style="left:0px; top:10px; width:1194px; height:30px; vertical-align:top; ">
  567. <line id="line1" class="line_1" style="x1:0px; y1:0px; x2:960px; y2:0px; "/>
  568. <input id="ipt_pid" ref="/root/main/cond/pid" style="left:67px; top:5px; width:100px; height:19px; ">
  569. <script type="javascript" ev:event="onkeyup">
  570. <![CDATA[
  571. if(event.keyCode == "13") {
  572. setInputNodeCurText();
  573. fSrchPatInfo();
  574. }
  575. ]]>
  576. </script>
  577. </input>
  578. <caption id="caption14" class="cell_1" style="left:0px; top:4px; width:65px; height:23px; ">등록번호</caption>
  579. <line id="line7" class="line_3" style="x1:0px; y1:26px; x2:960px; y2:26px; "/>
  580. <caption id="caption1" class="cell_1" style="left:434px; top:4px; width:63px; height:22px; ">기록이력</caption>
  581. <select1 id="cmb_rechistlist" ref="/root/main/patinfo/patrechistinfo" appearance="minimal" style="left:499px; top:5px; width:210px; height:19px; ">
  582. <choices>
  583. <itemset nodeset="/root/main/patinfo/patrechistinfo">
  584. <label ref="histlist"/>
  585. <value ref="rownum"/>
  586. </itemset>
  587. </choices>
  588. <script type="javascript" ev:event="xforms-value-changed">
  589. <![CDATA[
  590. if(model.getValue("/root/main/patinfo/patrechistinfo[ rownum ='" + cmb_rechistlist.value + "']/dschdd") == "99991231"){
  591. ipt_recdd.value = getCurrentDate();
  592. }else{
  593. ipt_recdd.value = model.getValue("/root/main/patinfo/patrechistinfo[ rownum ='" + cmb_rechistlist.value + "']/dschdd");
  594. }
  595. //model.setFocus("btn_srch");
  596. btn_srch.dispatch("DOMActivate");
  597. ]]>
  598. </script>
  599. </select1>
  600. <caption id="caption2" class="cell_1" style="left:711px; top:4px; width:63px; height:22px; ">조회일자</caption>
  601. <input id="ipt_recdd" ref="/root/main/cond/srchdd" class="input_s_essential" inputtype="date" appearance="input" style="left:820px; top:5px; width:95px; height:19px; ">
  602. <script type="javascript" ev:event="xforms-value-changed">
  603. <![CDATA[
  604. fChkSrchDate();
  605. //model.setFocus("btn_srch");
  606. //btn_srch.dispatch("DOMActivate");
  607. ]]>
  608. </script>
  609. </input>
  610. <button id="btn_24hoursbefore" class="btn2_before" style="left:776px; top:5px; width:42px; height:19px; ">
  611. <caption>이전</caption>
  612. <script type="javascript" ev:event="DOMActivate">
  613. <![CDATA[
  614. if(ipt_recdd.value != ""){
  615. fDateCalc("-" ,24);
  616. fChkSrchDate();
  617. //model.setFocus("btn_srch");
  618. //btn_srch.dispatch("DOMActivate");
  619. }
  620. ]]>
  621. </script>
  622. </button>
  623. <button id="btn_24hoursafter" class="btn2_letter2" style="left:917px; top:5px; width:42px; height:19px; ">
  624. <caption>다음</caption>
  625. <script type="javascript" ev:event="DOMActivate">
  626. <![CDATA[
  627. if(ipt_recdd.value != ""){
  628. fDateCalc("+" ,24);
  629. fChkSrchDate();
  630. //model.setFocus("btn_srch");
  631. //btn_srch.dispatch("DOMActivate");
  632. }
  633. ]]>
  634. </script>
  635. </button>
  636. <caption id="caption4" class="cell_1" style="left:169px; top:4px; width:48px; height:22px; ">환자명</caption>
  637. <caption id="caption5" ref="/root/main/cond/patnm" style="left:218px; top:5px; width:95px; height:20px; ">Name</caption>
  638. <caption id="caption3" class="cell_1" style="left:315px; top:4px; width:38px; height:22px; ">S/A</caption>
  639. <caption id="caption7" ref="/root/main/cond/grdrage" style="left:355px; top:5px; width:76px; height:20px; ">S/A</caption>
  640. <button id="btn_srch" class="btn1_letter2" style="left:1131px; top:4px; width:56px; height:22px; background-image:../../../com/commonweb/images/btn1_letter2.gif; ">
  641. <caption>조회</caption>
  642. <script type="javascript" ev:event="DOMActivate">
  643. <![CDATA[
  644. if(ipt_pid.value == ""){
  645. messageBox("등록번호를 입력하십시요","E");
  646. model.setFocus("ipt_pid");
  647. return;
  648. }
  649. if(cmb_rechistlist.value == ""){
  650. messageBox("조회할 기록이력을 선택하십시요","E");
  651. model.setFocus("cmb_rechistlist");
  652. return;
  653. }
  654. if(ipt_recdd.value == ""){
  655. messageBox("조회할 일자를 입력하십시요","E");
  656. model.setFocus("ipt_recdd");
  657. return;
  658. }
  659. model.removeNodeset("/root/temp/recinfo/reclist");
  660. model.removeNodeset("/root/send");
  661. model.makeValue("/root/send/pid", model.getValue("/root/main/patinfo/patrechistinfo/pid"));
  662. model.makeValue("/root/send/orddd", model.getValue("/root/main/patinfo/patrechistinfo/indd"));
  663. model.makeValue("/root/send/cretno", model.getValue("/root/main/patinfo/patrechistinfo/cretno"));
  664. model.makeValue("/root/send/srchdd", ipt_recdd.value);
  665. submit("TRMNR06312");
  666. fSettingRecList();
  667. ]]>
  668. </script>
  669. </button>
  670. <button id="btn_excel" class="btn1_letter5" style="left:1035px; top:4px; width:92px; height:22px; background-image:../../../com/commonweb/images/btn1_letter2.gif; ">
  671. <caption>Excel저장</caption>
  672. <script type="javascript" ev:event="DOMActivate">
  673. <![CDATA[
  674. if(grd_reclist.rows < 1){
  675. messageBox("Excel 저장할 리스트가 없습니다.", "I");
  676. return;
  677. }
  678. var fileName = window.fileDialog("save", ",", false, "환자별 임상기록 조회("+ caption5.value + "_"+ ipt_recdd.value+")" , "xls", "All Files (*.*)|*.*|Excel Files(*.xls)|*.xls");
  679. if (fileName != "") {
  680. grd_reclist.saveExcel(fileName, "SheetName", true, true, "", "", false);
  681. }
  682. ]]>
  683. </script>
  684. </button>
  685. </group>
  686. <datagrid id="grd_reclist" nodeset="/root/main/recinfo/reclist" allowselection="true" backcoloralternate="#ffffff" caption="기록\시간^depth^itemcd^itemseqno^reccharflag^recflag^carerecseqno^recfromdt^rectodt^subtotalyn^setnm^lnkbizcd^itemnm" colsep="^" colwidth="140,0,0,0,0,0,0,0,0,0,0,0,0" ellipsis="true" focuscolor="#feedcc" frozencols="1" rowsep="|" selectionmode="free" tooltip="true" fixed.background-image="../../../com/commonweb/images/grid_bg.gif" style="left:0px; top:69px; width:1190px; height:673px; ">
  687. <col ref="itemnmview"/>
  688. <col ref="depth" visibility="hidden"/>
  689. <col ref="itemcd" visibility="hidden"/>
  690. <col ref="itemseqno" visibility="hidden"/>
  691. <col ref="reccharflag" visibility="hidden"/>
  692. <col ref="recflag" visibility="hidden"/>
  693. <col ref="carerecseqno" visibility="hidden"/>
  694. <col ref="recfromdt" visibility="hidden"/>
  695. <col ref="rectodt" visibility="hidden"/>
  696. <col ref="subtotalyn" visibility="hidden"/>
  697. <col ref="setnm" visibility="hidden"/>
  698. <col ref="lnkbizcd" visibility="hidden"/>
  699. <col ref="itemnm" visibility="hidden"/>
  700. </datagrid>
  701. <line id="line16" class="line_1" style="x1:0px; y1:65px; x2:1190px; y2:65px; "/>
  702. <caption id="caption26" class="tit_2" style="left:0px; top:49px; width:95px; height:14px; vertical-align:middle; background-image:../../../com/commonweb/images/tit_bullet2.gif; ">임상기록정보</caption>
  703. </group>
  704. </xhtml:body>
  705. </xhtml:html>