SMADT00600.js 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862
  1. /**
  2. * 파 일 명 : SMADT00600.js
  3. * 설 명 : 반환약관리 Javascriot
  4. * 설 계 자 : 공두경
  5. * 작 성 자 : 공두경
  6. * 수정이력 : 2007.07.26 / 최초작성 / 공두경
  7. */
  8. /**
  9. * 초기화
  10. */
  11. function fInit() {
  12. var ioflag = "";
  13. ioflag = getScreenMenuParameter();
  14. if ( ioflag =="") {ioflag ="I";}
  15. model.setValue("/root/temp/srchinfo/ioflag", ioflag);
  16. // 날짜 초기화
  17. model.setValue("/root/temp/srchinfo/prcpdd", getCurrentDate());
  18. model.setValue("/root/temp/srchinfo/prcptodd", getCurrentDate());
  19. /* var sRtn_Menu_Param = getScreenMenuParameter(); // M : 일반조제실 S : 특수조제실
  20. if(sRtn_Menu_Param == ""){
  21. model.setValue("/root/temp/srchinfo/ioflag", "I");
  22. model.setValue("/root/temp/srchinfo/spclflag", "M");
  23. } else if(sRtn_Menu_Param == "S") {
  24. model.setValue("/root/temp/srchinfo/ioflag", "I");
  25. model.setValue("/root/temp/srchinfo/spclflag", "S");
  26. } else {
  27. if(sRtn_Menu_Param == "M,O") {
  28. model.setValue("/root/temp/srchinfo/ioflag", "O");
  29. model.setValue("/root/temp/srchinfo/spclflag", "M");
  30. } else if(sRtn_Menu_Param == "M,I") {
  31. model.setValue("/root/temp/srchinfo/ioflag", "I");
  32. model.setValue("/root/temp/srchinfo/spclflag", "M");
  33. }
  34. }*/
  35. //model.setValue("/root/temp/srchinfo/ioflag", "I");
  36. model.setValue("/root/temp/srchinfo/spclflag", "M");
  37. model.setValue("/root/temp/srchinfo/chk_spclflag", "");
  38. model.refresh();
  39. fChgIOFlag();
  40. // 내외용약,주사 전체 체크
  41. checkbox7.value = "A";
  42. fChgDrugkindFlagAll();
  43. //병동 조회
  44. //fGetDeptCombo();
  45. //astfAddCombo("/root/temp/deptlist", "ward", "wardcd,wardnm", ",");
  46. //로그인 사용자 셋팅
  47. var userid = getUserId();
  48. model.setValue("/root/temp/srchinfo/userid", userid);
  49. fGetUserInfo();
  50. // ========================== 수행부서 Combo 조회===========================
  51. //병동 Combo 조회
  52. model.makeValue("/root/send/srchcond/deptflag", "W");
  53. submit("TRADT30401");
  54. astfAddCombo("/root/temp/srchcond", "dept", "deptcd,deptnm", ",");
  55. // 반환 출고부서 2009.11.17 pymi
  56. var dutplceinstcd = getUserInfo("dutplceinstcd");
  57. submit("TRADT01106");
  58. var setNum = 0;
  59. if(getScreenMenuParameter() == "O") {
  60. model.setValue("/root/temp/srchinfo/eflag", "Y"); // 2009.12.03 외래일때 default
  61. if(getScreenMenuParameter() == "") setNum = 0;
  62. else {
  63. // 20101021_laboru_경북대병원_실출고부서 셋팅
  64. var dutplceinstcd = getUserInfo("dutplceinstcd");
  65. if(dutplceinstcd == "031") {
  66. setNum = 1;
  67. } else if(dutplceinstcd == "032") {
  68. setNum = 0;
  69. } else {
  70. setNum = 1;
  71. }
  72. //if(dutplceinstcd == "017" || dutplceinstcd == "012" || dutplceinstcd == "011") setNum = 1;
  73. //else setNum = 0
  74. }
  75. } else if(getScreenMenuParameter() == "I") {
  76. caption12.visible = true;
  77. // 20101021_laboru_경북대병원_실출고부서 셋팅
  78. setNum = 0;
  79. //if((dutplceinstcd == "013") || (dutplceinstcd == "014") || (dutplceinstcd == "017") || (dutplceinstcd == "011")) setNum = 0;
  80. //else if(dutplceinstcd == "012") setNum = 2;
  81. //else setNum = 1;
  82. } else { // 20111207_특수조제실 일때
  83. setNum = 2;
  84. caption12.visible = true;
  85. model.setValue("/root/temp/srchinfo/chk_spclflag", "Y");
  86. model.setValue("/root/temp/srchinfo/spclflag", "S");
  87. }
  88. combo3.select(setNum);
  89. // (e)
  90. model.refresh();
  91. //1일기준인지 1회기준인지 체크하여 컬럼을 hidden
  92. var colHidnValue = grdBaseColHidn("D");
  93. //1회 기준
  94. if( colHidnValue == "C") {
  95. grd_rtnlist.colHidden(grd_rtnlist.colRef("dayprcpqty")) = true;
  96. grd_rtnlist.colHidden(grd_rtnlist.colRef("dayrtnqty")) = true;
  97. //grd_prcplist.colHidden(grd_prcplist.colRef("prcpqty")) = true;
  98. } else {
  99. grd_rtnlist.colHidden(grd_rtnlist.colRef("prcpqty2")) = true;
  100. grd_rtnlist.colHidden(grd_rtnlist.colRef("rtnqty2")) = true;
  101. grd_prcplist.colHidden(grd_prcplist.colRef("prcpqty2")) = true;
  102. }
  103. }
  104. /**
  105. * 진료과 조회
  106. */
  107. function fGetDeptCombo() {
  108. model.setValue("/root/send/deptinfo/deptflag", "W");
  109. submit("TRADT00601");
  110. }
  111. /**
  112. * 약사정보 조회
  113. */
  114. function fGetUserInfo() {
  115. var userid = model.getValue("/root/temp/srchinfo/userid");
  116. //20100819_laboru_경북대병원_User ID 길이 체크 막음
  117. /*
  118. if(userid == "" || userid.length != 8){
  119. messageBox("약사ID 형식과", "E004");
  120. model.setValue("/root/temp/srchinfo/userid", "");
  121. model.setFocus("input6");
  122. model.refresh();
  123. return;
  124. }*/
  125. model.setValue("/root/send/userinfo/userid", userid);
  126. // model.setValue("/root/send/userinfo/currentdd", getCurrentDate());
  127. submit("TRADT00604");
  128. }
  129. /**
  130. * 반납약 조회
  131. */
  132. function fRtnData() {
  133. model.removeNodeset("/root/main/prcplist");
  134. model.copyNode("/root/send/srchinfo","/root/temp/srchinfo");
  135. submit("TRADT00602");
  136. // 2009.12.03 pymi
  137. if(model.getValue("/root/temp/srchinfo/eflag") == "Y") {
  138. for(var i = grd_rtnlist.fixedRows; i < grd_rtnlist.rows; i++) {
  139. model.setValue("/root/main/rtnlist/rtnlist["+ i +"]/sel", "Y");
  140. grd_rtnlist.rowStatus(i)="2";
  141. }
  142. }
  143. model.refresh();
  144. // (e)
  145. //해당row에 색깔 처리
  146. grd_rtnlist.rebuildStyle();
  147. setRowStyle("grd_rtnlist" , "2" , "2" , "rtnflag", "equal" );
  148. setRowStyle("grd_rtnlist" , "4" , "3" , "rtnflag", "equal" );
  149. }
  150. /**
  151. * 반납약 원처방 조회
  152. */
  153. function fGetRtnPrcpData() {
  154. if(grd_rtnlist.iscell(event.target) && model.getValue("/root/main/rtnlist/rtnlist["+grd_rtnlist.row+"]/pid") != "" ){
  155. model.copyNode("/root/send/prcpinfo","/root/main/rtnlist/rtnlist["+grd_rtnlist.row+"]");
  156. submit("TRADT00603");
  157. grd_prcplist.rebuildStyle();
  158. setRowStyle("grd_prcplist" , "4" , "C" , "prcphistcd", "equal" );
  159. setRowStyle("grd_prcplist" , "4" , "L" , "prcphistcd", "equal" );
  160. setRowStyle("grd_prcplist" , "3" , "D" , "prcphistcd", "equal" );
  161. setRowStyle("grd_prcplist" , "2" , "E" , "prcphistcd", "equal" );
  162. }
  163. }
  164. /**
  165. * 반납약 저장
  166. */
  167. function fSaveRtnList() {
  168. if(model.getValue("/root/temp/userinfo/userinfo/userid") == ""){
  169. messageBox("약사ID는", "I003");
  170. return;
  171. }
  172. model.removeNodeset("/root/send/rtninfo/rtnlist");
  173. var cp_cnt = 0;
  174. for(var i=grd_rtnlist.fixedRows; i < grd_rtnlist.rows; i++){
  175. if(model.getValue("/root/main/rtnlist/rtnlist["+i+"]/sel") == "Y"
  176. //&& grd_rtnlist.rowStatus(i) == 2
  177. && model.getValue("/root/main/rtnlist/rtnlist["+i+"]/rtnflag") == "1"){
  178. // 20120920_폐기처리여부 set
  179. if(model.getValue("/root/temp/disflag") == "Y") {
  180. model.makeValue("/root/main/rtnlist/rtnlist["+i+"]/disflag", "DIS"); // 2009.11.19 pymi
  181. }
  182. //fIptRtnCnts(i); //20090924 이선경
  183. model.makeValue("/root/main/rtnlist/rtnlist["+i+"]/rtnstocdeptcd", model.getValue("/root/temp/srchinfo/rtnstocdeptcd")); // 2009.11.19 pymi
  184. model.setValue("/root/main/rtnlist/rtnlist["+i+"]/rtncnts", parseInt(model.getValue("/root/main/rtnlist/rtnlist["+i+"]/rtnstocqty"))); //20100208 이선경
  185. astfCopyNodeSet("/root/send/rtninfo/rtnlist", "/root/main/rtnlist/rtnlist["+i+"]");
  186. cp_cnt++;
  187. }
  188. }
  189. if(cp_cnt == 0){
  190. messageBox("저장할 데이터가", "I004");
  191. return;
  192. }
  193. model.makeValue("/root/send/rtninfo/userinfo/userid", model.getValue("/root/temp/userinfo/userinfo/userid"));
  194. model.makeValue("/root/send/rtninfo/userinfo/userdeptcd", model.getValue("/root/temp/userinfo/userinfo/userdeptcd"));
  195. model.copyNode("/root/send/rtninfo/srchinfo","/root/temp/srchinfo");
  196. model.makeValue("/root/send/rtninfo/srchinfo/chg_prcpdd", model.getValue("/root/send/rtninfo/srchinfo/prcpdd") );
  197. model.makeValue("/root/send/rtninfo/srchinfo/chg_ioflag", model.getValue("/root/send/rtninfo/srchinfo/ioflag") );
  198. model.makeValue("/root/send/rtninfo/srchinfo/chg_drugflag", model.getValue("/root/send/rtninfo/srchinfo/drugflag") );
  199. model.removeNode("/root/send/rtninfo/srchinfo/prcpdd");
  200. model.removeNode("/root/send/rtninfo/srchinfo/ioflag");
  201. submit("TXADT00601");
  202. // var chk = getGridUpdateData(grd_rtnlist);
  203. // if( chk != ""){
  204. // model.removeNodeset("/root/send/rtninfo");
  205. // setCSVToNode("/root/send/rtninfo", chk, "rtnlist");
  206. // model.setValue("/root/send/rtninfo/userinfo/userid", model.getValue("/root/temp/userinfo/userinfo/userid"));
  207. // model.setValue("/root/send/rtninfo/userinfo/userdeptcd", model.getValue("/root/temp/userinfo/userinfo/userdeptcd"));
  208. //submit("TXADT00601");
  209. // } else {
  210. // messageBox("저장할 데이터가", "I004");
  211. // }
  212. //model.removeNodeset("/root/send/rtninfo/rtnlist");
  213. model.refresh();
  214. }
  215. /**
  216. * 반납약 취소
  217. */
  218. function fSaveRtnCancel() {
  219. if(model.getValue("/root/temp/userinfo/userinfo/userid") == ""){
  220. messageBox("약사ID는", "I003");
  221. return;
  222. }
  223. model.removeNodeset("/root/send/rtninfo/rtnlist");
  224. var cp_cnt = 0;
  225. for(var i=grd_rtnlist.fixedRows; i < grd_rtnlist.rows; i++){
  226. if(model.getValue("/root/main/rtnlist/rtnlist["+i+"]/sel") == "Y"
  227. //&& grd_rtnlist.rowStatus(i) == 2
  228. && model.getValue("/root/main/rtnlist/rtnlist["+i+"]/rtnflag") == "2"){
  229. model.makeValue("/root/main/rtnlist/rtnlist["+i+"]/cancelflag", "Y" ); // 20111115_laboru_반환취소 여부
  230. astfCopyNodeSet("/root/send/rtninfo/rtnlist", "/root/main/rtnlist/rtnlist["+i+"]");
  231. cp_cnt++;
  232. }
  233. }
  234. if(cp_cnt == 0){
  235. messageBox("저장할 데이터가", "I004");
  236. return;
  237. }
  238. model.makeValue("/root/send/rtninfo/userinfo/userid", model.getValue("/root/temp/userinfo/userinfo/userid"));
  239. model.makeValue("/root/send/rtninfo/userinfo/userdeptcd", model.getValue("/root/temp/userinfo/userinfo/userdeptcd"));
  240. model.copyNode("/root/send/rtninfo/srchinfo","/root/temp/srchinfo");
  241. model.makeValue("/root/send/rtninfo/srchinfo/chg_prcpdd", model.getValue("/root/send/rtninfo/srchinfo/prcpdd") );
  242. model.makeValue("/root/send/rtninfo/srchinfo/chg_ioflag", model.getValue("/root/send/rtninfo/srchinfo/ioflag") );
  243. model.makeValue("/root/send/rtninfo/srchinfo/chg_drugflag", model.getValue("/root/send/rtninfo/srchinfo/drugflag") );
  244. model.removeNode("/root/send/rtninfo/srchinfo/prcpdd");
  245. model.removeNode("/root/send/rtninfo/srchinfo/ioflag");
  246. submit("TXADT00602");
  247. // var chk = getGridUpdateData(grd_rtnlist);
  248. // if( chk != ""){
  249. // model.removeNodeset("/root/send/rtninfo");
  250. // setCSVToNode("/root/send/rtninfo", chk, "rtnlist");
  251. // model.setValue("/root/send/rtninfo/userinfo/userid", model.getValue("/root/temp/userinfo/userinfo/userid"));
  252. // model.setValue("/root/send/rtninfo/userinfo/userdeptcd", model.getValue("/root/temp/userinfo/userinfo/userdeptcd"));
  253. //submit("TXADT00601");
  254. // } else {
  255. // messageBox("저장할 데이터가", "I004");
  256. // }
  257. //model.removeNodeset("/root/send/rtninfo/rtnlist");
  258. model.refresh();
  259. }
  260. /**
  261. * 반납량(반납횟수) 입력시
  262. * -. 외래처방 : 약국에서 처리 -> 외래 및 입원에서 전환된 외용약처방 - 수량반납
  263. * 그외 외래처방 - 일수반납
  264. * 입원에서 전환된 퇴원 및 외출외박약 처방 - 일수반납
  265. * 입원에서 전환된 그외 처방 - 횟수반납
  266. * -. 입원처방 : 병동간호에서 처리 -> 입원 및 외래에서 전환된 외용약처방 - 수량반납
  267. * 입원 퇴원 및 외출외박약 - 일수 반납
  268. * 그외 입원처방 - 횟수반납
  269. * 외래에서 전환된 처방 (외용약 제외) - 일수반납
  270. * 정리 노트 : 외용약 - 수량반납, 외래 및 퇴원/외출/외박약 - 일수반납, 입원약 - 횟수반납,
  271. * 각부분별로 주사제는 소수점내림 처리함(엠플단위이기때문에).
  272. */
  273. function fIptRtnCnts(rowid) {
  274. //20090924 이선경
  275. if(rowid == "") {
  276. rowid = grd_rtnlist.row;
  277. }
  278. var RtnCnts = model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtncnts");
  279. var RtnStocQty = model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtnstocqty");
  280. var RtnFlag = model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtnflag");
  281. if(model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/sel") == "N"){
  282. if(RtnFlag == "1"){
  283. model.setValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtncnts", "");
  284. model.setValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtnstocqty", "");
  285. return;
  286. }
  287. }
  288. //반납의뢰인 약품만 반납처리함
  289. /*if(RtnFlag == "2"){
  290. messageBox("반납완료된 약품","E008");
  291. return;
  292. } else if(RtnFlag == "3"){
  293. messageBox("반납의뢰된 약품","E008");
  294. return;
  295. }
  296. */
  297. //반납량을 입력하지 않았을 경우
  298. if(RtnCnts == "" ){ //|| RtnCnts == "0"
  299. /*messageBox("반납량을","C001");
  300. model.setValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtncnts", "");
  301. model.setValue("/root/main/rtnlist/rtnlist["+rowid+"]/sel", "");
  302. return;*/
  303. //최대 반환량 자동 입력
  304. fMaxRtnCnts(rowid);
  305. RtnCnts = model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtncnts");
  306. }
  307. if(isNaN(RtnCnts)){
  308. messageBox("반납량은 숫자로","C001");
  309. model.setValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtncnts", "");
  310. return;
  311. }
  312. //반납로직을 위한 변수 선언
  313. var IOFlag = model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/ioflag");
  314. var PrcpClscd = model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/prcpclscd");
  315. var PrcpGenrflag = model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/prcpgenrflag");
  316. var PrcpKindcd = model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/prcpkindcd");
  317. if(IOFlag == "O"){
  318. //수가계산방식에 따른 변화량
  319. var sCalcmthdcd = model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/calcmthdcd");
  320. //반납재고량 계산을 위한 변수 선언
  321. var DeliveCrite = model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/delivecrite");
  322. var iRtnCnts = parseInt(RtnCnts, 10);
  323. var iLimitCnts = 0;
  324. var PrcpQty = parseFloat(model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/prcpqty"));
  325. var DayPrcpQty = parseFloat(model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/dayprcpqty"));
  326. var PrcpTims = parseInt(model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/prcptims"), 10);
  327. var PrcpDayno = parseInt(model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/prcpdayno"), 10);
  328. var RtnStocQty = 0;
  329. if(PrcpClscd == "A4" || sCalcmthdcd == 4){
  330. //외래 외용제 (수량반납)
  331. if(sCalcmthdcd == 4){
  332. iLimitCnts = DayPrcpQty;
  333. } else if(sCalcmthdcd == 5){
  334. iLimitCnts = DayPrcpQty*PrcpDayno;
  335. } else {
  336. iLimitCnts = DayPrcpQty*PrcpDayno;
  337. }
  338. //if(iRtnCnts > iLimitCnts){
  339. if(iRtnCnts > iLimitCnts){
  340. messageBox("반납 가능한 양을","E003");
  341. model.setValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtncnts", "");
  342. return;
  343. }
  344. RtnStocQty = fCalStocQty("Q", DeliveCrite, iRtnCnts, null, null, rowid);
  345. //투약내역에 들어간 반납결과 수치 계산
  346. model.setValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtndrugtims", model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/prcptims"));
  347. model.setValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtndrugdayno", model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/prcpdayno"));
  348. } else if((PrcpGenrflag == "O" || PrcpGenrflag == "S" ) || // 'S' 추가 pymi 2009.10.28
  349. ((PrcpGenrflag == "I" || PrcpGenrflag == "E" || PrcpGenrflag == "D") && (PrcpKindcd == "50" || PrcpKindcd == "60" || PrcpKindcd == "70")) ){
  350. //외래 약주사 또는 입원에서 전환된 퇴원/외출/외박약 (일수반납)
  351. iLimitCnts = PrcpDayno;
  352. if(iRtnCnts > iLimitCnts){
  353. messageBox("반납 가능한 양을","E003");
  354. model.setValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtncnts", "");
  355. return;
  356. }
  357. /*if(PrcpClscd == "A6"){
  358. //주사제 처리 반납량 따로 계산
  359. RtnStocQty = fCalStocQty("I", DeliveCrite, iRtnCnts, PrcpQty, PrcpTims);
  360. } else {
  361. RtnStocQty = fCalStocQty("D", DeliveCrite, iRtnCnts, PrcpQty, PrcpTims);
  362. }*/
  363. RtnStocQty = fCalStocQty("D", DeliveCrite, iRtnCnts, PrcpQty, PrcpTims, rowid);
  364. //투약내역에 들어간 반납결과 수치 계산
  365. model.setValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtndrugtims", model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/prcptims"));
  366. model.setValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtndrugdayno", iRtnCnts);
  367. } else if(PrcpGenrflag == "I" || PrcpGenrflag == "E" || PrcpGenrflag == "D"){
  368. //입원에서 전환된 그외 처방 (횟수반납)
  369. iLimitCnts = PrcpTims*PrcpDayno;
  370. if(iRtnCnts > iLimitCnts){
  371. messageBox("반납 가능한 양을","E003");
  372. model.setValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtncnts", "");
  373. return;
  374. }
  375. /*if(PrcpClscd == "A6"){
  376. //주사제 처리 반납량 따로 계산
  377. RtnStocQty = fCalStocQty("I", DeliveCrite, iRtnCnts, PrcpQty);
  378. } else {
  379. RtnStocQty = fCalStocQty("T", DeliveCrite, iRtnCnts, PrcpQty);
  380. }*/
  381. RtnStocQty = fCalStocQty("T", DeliveCrite, iRtnCnts, PrcpQty, null , rowid);
  382. //투약내역에 들어간 반납결과 수치 계산
  383. var temp = iRtnCnts%PrcpDayno;
  384. var RtnDrugDayno = 0;
  385. var RtnDrugTims = 0;
  386. RtnDrugTims = iRtnCnts;
  387. RtnDrugDayno = 1;
  388. model.setValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtndrugtims", RtnDrugTims);
  389. model.setValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtndrugdayno", RtnDrugDayno);
  390. }
  391. } else if(IOFlag == "I"){
  392. //반납재고량 계산을 위한 변수 선언
  393. var DeliveCrite = model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/delivecrite");
  394. var iRtnCnts = parseInt(RtnCnts, 10);
  395. var iLimitCnts = 0;
  396. var PrcpQty = parseFloat(model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/prcpqty"));
  397. var DayPrcpQty = parseFloat(model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/dayprcpqty"));
  398. var PrcpTims = parseInt(model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/prcptims"), 10);
  399. var PrcpDayno = parseInt(model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/prcpdayno"), 10);
  400. var RtnStocQty = 0;
  401. if(PrcpClscd == "A4"){
  402. //외래 외용제 (수량반납)
  403. if(sCalcmthdcd == 4){
  404. iLimitCnts = DayPrcpQty;
  405. } else if(sCalcmthdcd == 5){
  406. iLimitCnts = DayPrcpQty*PrcpDayno;
  407. } else {
  408. iLimitCnts = DayPrcpQty*PrcpDayno;
  409. }
  410. if(iRtnCnts > iLimitCnts){
  411. messageBox("반납 가능한 양을","E003");
  412. model.setValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtncnts", "");
  413. return;
  414. }
  415. RtnStocQty = fCalStocQty("Q", DeliveCrite, iRtnCnts, null, null, rowid);
  416. //투약내역에 들어간 반납결과 수치 계산
  417. model.setValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtndrugtims", model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/prcptims"));
  418. model.setValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtndrugdayno", model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/prcpdayno"));
  419. } else if(PrcpGenrflag == "O" ||
  420. ((PrcpGenrflag == "I" || PrcpGenrflag == "E" || PrcpGenrflag == "D") && (PrcpKindcd == "50" || PrcpKindcd == "60" || PrcpKindcd == "70")) ){
  421. //외래 약주사 또는 입원에서 전환된 퇴원/외출/외박약 (일수반납)
  422. iLimitCnts = PrcpDayno;
  423. if(iRtnCnts > iLimitCnts){
  424. messageBox("반납 가능한 양을","E003");
  425. model.setValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtncnts", "");
  426. return;
  427. }
  428. /*if(PrcpClscd == "A6"){
  429. //주사제 처리 반납량 따로 계산
  430. RtnStocQty = fCalStocQty("I", DeliveCrite, iRtnCnts, PrcpQty, PrcpTims);
  431. } else {
  432. RtnStocQty = fCalStocQty("D", DeliveCrite, iRtnCnts, PrcpQty, PrcpTims);
  433. }*/
  434. RtnStocQty = fCalStocQty("D", DeliveCrite, iRtnCnts, PrcpQty, PrcpTims, rowid);
  435. //투약내역에 들어간 반납결과 수치 계산
  436. model.setValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtndrugtims", model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/prcptims"));
  437. model.setValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtndrugdayno", iRtnCnts);
  438. } else if(PrcpGenrflag == "I" || PrcpGenrflag == "E" || PrcpGenrflag == "D"){
  439. //입원에서 전환된 그외 처방 (횟수반납)
  440. iLimitCnts = PrcpTims*PrcpDayno;
  441. if(iRtnCnts > iLimitCnts){
  442. messageBox("반납 가능한 양을","E003");
  443. model.setValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtncnts", "");
  444. return;
  445. }
  446. /*if(PrcpClscd == "A6"){
  447. //주사제 처리 반납량 따로 계산
  448. RtnStocQty = fCalStocQty("I", DeliveCrite, iRtnCnts, PrcpQty);
  449. } else {
  450. RtnStocQty = fCalStocQty("T", DeliveCrite, iRtnCnts, PrcpQty);
  451. }*/
  452. //alert(DeliveCrite);
  453. //alert(iRtnCnts);
  454. //alert(PrcpQty);
  455. //alert(model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/prcptims"));
  456. RtnStocQty = fCalStocQty("T", DeliveCrite, iRtnCnts, PrcpQty, null, rowid);
  457. //투약내역에 들어간 반납결과 수치 계산
  458. var temp = iRtnCnts%PrcpDayno;
  459. var RtnDrugDayno = 0;
  460. var RtnDrugTims = 0;
  461. RtnDrugTims = iRtnCnts;
  462. RtnDrugDayno = 1;
  463. model.setValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtndrugtims", RtnDrugTims);
  464. model.setValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtndrugdayno", RtnDrugDayno);
  465. }
  466. }
  467. model.setValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtnstocqty", fChkFloat(RtnStocQty));
  468. model.setValue("/root/main/rtnlist/rtnlist["+rowid+"]/sel", "Y");
  469. //rowid++;
  470. //grd_rtnlist.isSelected(rowid) = true;
  471. model.refresh();
  472. }
  473. /**
  474. * 불출계산에 따른 반납재고량 계산
  475. * 계산 방식
  476. * 원처방 불출량(totdrugqty) - 살아있는처방 불출량 계산 = 반환된 불출량
  477. */
  478. function fCalStocQty(RtnType, DeliveCrite, RtnCnts, Qty, Tims, rowid) {
  479. var dResult = 0;
  480. var PackVol = parseFloat(model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/packvol"));
  481. var NearIntNum = 0;
  482. var RoundNum = 0;
  483. //alert("Start : " + DeliveCrite + ", " + pQty + ", " + pRtnTims);
  484. //수가계산방식에 따른 변화량
  485. var sCalcmthdcd = model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/calcmthdcd");
  486. if ( Tims == null ) { Tims =1; }
  487. if(RtnType == "Q"){
  488. //수량반납
  489. //외용약만 수량반납하므로 무조건 올림처리
  490. dResult = Math.ceil(RtnCnts);
  491. } else if(RtnType == "T"){
  492. //횟수반납
  493. // 횟수반납시에는 RtnCnts가 횟수이므로 Tims는 제외
  494. //살아있는 처방 불출량 계산을 위한 횟수 변환
  495. var iPrcptims = model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/prcptims");
  496. var itotdrugqty = model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/totdrugqty");
  497. if(iPrcptims == RtnCnts){
  498. //살아있는 처방이 없으므로 불출량은 원처방 불출량(totdrugqty)임
  499. return itotdrugqty;
  500. } else {
  501. //살아있는 처방이 있으면 살아있는 처방의 횟수를 계산
  502. RtnCnts = iPrcptims - RtnCnts;
  503. }
  504. // 1 : 단가*수량*횟수*일수
  505. // 4 : 단가*수량
  506. // 5 : 단가*수량*일수
  507. if(sCalcmthdcd == "1"){
  508. //초기화 없이 다 계산처리함
  509. } else if(sCalcmthdcd == "4" || sCalcmthdcd == "5"){
  510. //횟수, 일수 1로 초기화
  511. RtnCnts = "1";
  512. }
  513. if (DeliveCrite == "1") {
  514. // 처방대로
  515. dResult = Math.round(Qty*RtnCnts*1000)/1000;
  516. } else if (DeliveCrite == "2") {
  517. // 1/4 1회 올림 --> 1/2 1회 올림 수정 pymi
  518. /*NearIntNum = Math.floor(Qty);
  519. RoundNum = Qty - NearIntNum;
  520. if(RoundNum >= 0.5){
  521. dResult = Math.round((NearIntNum+0.5)*RtnCnts*1000)/1000;
  522. } else {
  523. dResult = Math.round((NearIntNum+1)*RtnCnts*1000)/1000;
  524. } */
  525. dResult = Math.round(Math.ceil(Qty)*RtnCnts*1000)/1000;
  526. } else if (DeliveCrite == "3") {
  527. // 1/2 1회 올림
  528. dResult = Math.round(Math.ceil(Qty)*RtnCnts*1000)/1000;
  529. } else if (DeliveCrite == "4") {
  530. // 1/4 1일 올림
  531. NearIntNum = Math.floor(Qty*Tims);
  532. RoundNum = (Qty*Tims) - NearIntNum;
  533. if(RoundNum >= 0.5){
  534. dResult = Math.round((NearIntNum+0.5)*(RtnCnts/Tims)*1000)/1000;
  535. } else {
  536. dResult = Math.round((NearIntNum+1)*(RtnCnts/Tims)*1000)/1000;
  537. }
  538. } else if (DeliveCrite == "5") {
  539. // 1/2 1일 올림
  540. //alert(Tims);
  541. dResult = Math.round(Math.ceil(Qty*Tims)*(RtnCnts/Tims)*1000)/1000;
  542. } else if (DeliveCrite == "6") {
  543. // 계산후 올림
  544. dResult = Math.ceil(Qty*RtnCnts);
  545. }
  546. // 원처방 불출량(totdrugqty) - 살아있는처방 불출량 계산 = 반환된 불출량
  547. dResult = itotdrugqty - dResult;
  548. } else if(RtnType == "D"){
  549. //일수반납
  550. //살아있는 처방 불출량 계산을 위한 횟수 변환
  551. var iPrcpDayno = model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/prcpdayno");
  552. var itotdrugqty = model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/totdrugqty");
  553. if(iPrcpDayno == RtnCnts){
  554. //살아있는 처방이 없으므로 불출량은 원처방 불출량(totdrugqty)임
  555. return itotdrugqty;
  556. } else {
  557. //살아있는 처방이 있으면 살아있는 처방의 횟수를 계산
  558. RtnCnts = iPrcpDayno - RtnCnts;
  559. }
  560. // 1 : 단가*수량*횟수*일수
  561. // 4 : 단가*수량
  562. // 5 : 단가*수량*일수
  563. if(sCalcmthdcd == "1"){
  564. //초기화 없이 다 계산처리함
  565. } else if(sCalcmthdcd == "4"){
  566. //횟수, 일수 1로 초기화
  567. Tims = "1";
  568. RtnCnts = "1";
  569. } else if(sCalcmthdcd == "5"){
  570. //횟수 1로 초기화
  571. Tims = "1";
  572. }
  573. if (DeliveCrite == "1") {
  574. // 처방대로
  575. dResult = Math.round(Qty*Tims*RtnCnts*1000)/1000;
  576. } else if (DeliveCrite == "2") {
  577. // 1/4 1회 올림 --> 1/2 1회 올림 수정 pymi
  578. /*NearIntNum = Math.floor(Qty);
  579. RoundNum = Qty - NearIntNum;
  580. if(RoundNum >= 0.5){
  581. dResult = Math.round((NearIntNum+0.5)*Tims*RtnCnts*1000)/1000;
  582. } else {
  583. dResult = Math.round((NearIntNum+1)*Tims*RtnCnts*1000)/1000;
  584. } */
  585. dResult = Math.round(Math.ceil(Qty)*Tims*RtnCnts*1000)/1000;
  586. } else if (DeliveCrite == "3") {
  587. // 1/2 1회 올림
  588. dResult = Math.round(Math.ceil(Qty)*Tims*RtnCnts*1000)/1000;
  589. } else if (DeliveCrite == "4") {
  590. // 1/4 1일 올림
  591. NearIntNum = Math.floor(Qty*Tims);
  592. RoundNum = (Qty*Tims) - NearIntNum;
  593. if(RoundNum >= 0.5){
  594. dResult = Math.round((NearIntNum+0.5)*RtnCnts*1000)/1000;
  595. } else {
  596. dResult = Math.round((NearIntNum+1)*RtnCnts*1000)/1000;
  597. }
  598. } else if (DeliveCrite == "5") {
  599. // 1/2 1일 올림
  600. dResult = Math.round(Math.ceil(Qty*Tims)*RtnCnts*1000)/1000;
  601. } else if (DeliveCrite == "6") {
  602. // 계산후 올림
  603. dResult = Math.ceil(Qty*Tims*RtnCnts);
  604. }
  605. // 원처방 불출량(totdrugqty) - 살아있는처방 불출량 계산 = 반환된 불출량
  606. dResult = itotdrugqty - dResult;
  607. }
  608. //model.alert("End : " + dResult);
  609. return dResult;
  610. }
  611. /**
  612. * 최대 반환량 자동입력
  613. */
  614. function fMaxRtnCnts(rowid) {
  615. //반납로직을 위한 변수 선언
  616. var IOFlag = model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/ioflag");
  617. var PrcpClscd = model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/prcpclscd");
  618. var PrcpGenrflag = model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/prcpgenrflag");
  619. var PrcpKindcd = model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/prcpkindcd");
  620. if(IOFlag == "O"){
  621. //반납재고량 계산을 위한 변수 선언
  622. var iLimitCnts = 0;
  623. var DayPrcpQty = parseFloat(model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/dayprcpqty"));
  624. var PrcpQty = parseFloat(model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/prcpqty"));
  625. var PrcpTims = parseInt(model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/prcptims"), 10);
  626. var PrcpDayno = parseInt(model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/prcpdayno"), 10);
  627. var CalcMthdCd = model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/calcmthdcd");
  628. if(PrcpClscd == "A4"){
  629. //외래 외용제 (수량반납)
  630. if ( CalcMthdCd == "1" || CalcMthdCd == "5" ){
  631. iLimitCnts = parseInt(DayPrcpQty* PrcpDayno);
  632. model.setValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtncnts", iLimitCnts);
  633. } else {
  634. iLimitCnts =parseInt( DayPrcpQty );
  635. model.setValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtncnts", iLimitCnts);
  636. }
  637. } else if((PrcpGenrflag == "O" || PrcpGenrflag == "S" ) || // 'S' 추가 pymi 2009.10.28 ||
  638. ((PrcpGenrflag == "I" || PrcpGenrflag == "E" || PrcpGenrflag == "D") && (PrcpKindcd == "50" || PrcpKindcd == "60" || PrcpKindcd == "70")) ){
  639. //외래 약주사 또는 입원에서 전환된 퇴원/외출/외박약 (일수반납)
  640. if ( CalcMthdCd == "4" ){
  641. iLimitCnts = parseInt(DayPrcpQty);
  642. model.setValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtncnts", iLimitCnts);
  643. } else {
  644. iLimitCnts = parseInt(PrcpDayno);
  645. model.setValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtncnts", iLimitCnts);
  646. }
  647. } else if(PrcpGenrflag == "I" || PrcpGenrflag == "E" || PrcpGenrflag == "D"){
  648. //입원에서 전환된 그외 처방 (횟수반납)
  649. iLimitCnts = PrcpTims*PrcpDayno;
  650. model.setValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtncnts", iLimitCnts);
  651. }
  652. } else if(IOFlag == "I"){
  653. //반납재고량 계산을 위한 변수 선언
  654. var iLimitCnts = 0;
  655. var PrcpQty = parseFloat(model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/prcpqty"));
  656. var PrcpTims = parseInt(model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/prcptims"), 10);
  657. var PrcpDayno = parseInt(model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/prcpdayno"), 10);
  658. var CalcMthdCd = model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/calcmthdcd");
  659. if(PrcpClscd == "A4"){
  660. //외래 외용제 (수량반납)
  661. //입원에서 전환된 그외 처방 (횟수반납)
  662. if ( CalcMthdCd == "1" || CalcMthdCd == "5" ){
  663. iLimitCnts =parseInt( DayPrcpQty* PrcpDayno);
  664. model.setValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtncnts", iLimitCnts);
  665. } else {
  666. iLimitCnts = parseInt(DayPrcpQty);
  667. model.setValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtncnts", iLimitCnts);
  668. }
  669. //if(model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/dayrtnqty") != ""){
  670. // PrcpQty = model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/dayrtntims");
  671. //}
  672. //iLimitCnts = PrcpQty;
  673. //model.setValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtncnts", iLimitCnts);
  674. } else if(PrcpGenrflag == "O" ||
  675. ((PrcpGenrflag == "I" || PrcpGenrflag == "E" || PrcpGenrflag == "D") && (PrcpKindcd == "50" || PrcpKindcd == "60" || PrcpKindcd == "70")) ){
  676. //외래 약주사 또는 입원에서 전환된 퇴원/외출/외박약 (일수반납)
  677. if ( CalcMthdCd == "4" ){
  678. iLimitCnts =parseInt( DayPrcpQty);
  679. model.setValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtncnts", iLimitCnts);
  680. } else {
  681. iLimitCnts = PrcpDayno;
  682. model.setValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtncnts", iLimitCnts);
  683. }
  684. } else if(PrcpGenrflag == "I" || PrcpGenrflag == "E" || PrcpGenrflag == "D"){
  685. //입원에서 전환된 그외 처방 (횟수반납)
  686. if(model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtntims") != ""){
  687. PrcpTims = model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtntims");
  688. PrcpDayno = model.getValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtndayno");
  689. }
  690. iLimitCnts = PrcpTims*PrcpDayno;
  691. model.setValue("/root/main/rtnlist/rtnlist["+rowid+"]/rtncnts", fChkFloat(iLimitCnts));
  692. }
  693. }
  694. model.refresh();
  695. }
  696. /**
  697. *
  698. */
  699. function fChkFloat(qty) {
  700. var fQty = parseFloat(qty);
  701. var fRst = "";
  702. if(fQty%1 == 0){
  703. fRst = parseInt(qty);
  704. } else {
  705. fRst = qty;
  706. }
  707. return fRst;
  708. }
  709. /**
  710. * 반납구분 전체 체크시
  711. */
  712. function fChgRtnFlagAll() {
  713. if(model.getValue("/root/temp/srchinfo/rtnflag_all") == "A"){
  714. model.setValue("/root/temp/srchinfo/rtnflag", "1|2|3");
  715. } else {
  716. model.setValue("/root/temp/srchinfo/rtnflag", "");
  717. }
  718. model.refresh();
  719. }
  720. /**
  721. * 반납구분 변경시
  722. */
  723. function fChgRtnFlag() {
  724. var sChk = model.getValue("/root/temp/srchinfo/rtnflag");
  725. if(sChk.length == 5){
  726. model.setValue("/root/temp/srchinfo/rtnflag_all", "A");
  727. } else {
  728. model.setValue("/root/temp/srchinfo/rtnflag_all", "");
  729. }
  730. model.refresh();
  731. }
  732. /**
  733. * 입원외래구분 변경시
  734. */
  735. function fChgIOFlag() {
  736. if(model.getValue("/root/temp/srchinfo/ioflag") == "I"){
  737. rdo_drugflag.visible = true;
  738. model.setValue("/root/temp/srchinfo/drugflag", "I");
  739. } else if(model.getValue("/root/temp/srchinfo/ioflag") == "S"){
  740. rdo_drugflag.visible = true;
  741. model.setValue("/root/temp/srchinfo/drugflag", "S");
  742. } else {
  743. rdo_drugflag.visible = false;
  744. model.setValue("/root/temp/srchinfo/drugflag", "");
  745. }
  746. model.refresh();
  747. }
  748. /**
  749. * 내외용약 구분 전체 체크시
  750. */
  751. function fChgDrugkindFlagAll() {
  752. if(model.getValue("/root/temp/srchinfo/drugkindflag_all") == "A"){
  753. model.setValue("/root/temp/srchinfo/drugkindflag", "1|2");
  754. } else {
  755. model.setValue("/root/temp/srchinfo/drugkindflag", "");
  756. }
  757. model.refresh();
  758. }
  759. /**
  760. * 내외용약 구분 변경시
  761. */
  762. function fChgDrugkindFlag() {
  763. var sChk = model.getValue("/root/temp/srchinfo/drugkindflag");
  764. if(sChk.length == 3){
  765. model.setValue("/root/temp/srchinfo/drugkindflag_all", "A");
  766. } else {
  767. model.setValue("/root/temp/srchinfo/drugkindflag_all", "");
  768. }
  769. model.refresh();
  770. }