consentInpatient.js 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882
  1. /**
  2. * consent/inpatient
  3. */
  4. var mcare_mobile_consentInpatient = function(){
  5. //상속
  6. mplus_mobile_consent.call(this);
  7. //변수
  8. var div = $("<div></div>");
  9. var tr = $("<tr></tr>");
  10. var th = $("<th></th>");
  11. var td = $("<td></td>");
  12. var table = $("<table></table>");
  13. var li = $("<li></li>");
  14. var a = $("<a></a>");
  15. var span = $("<span></span>");
  16. var button = $("<button></button>");
  17. $crudServiceBaseUrl = contextPath + "/mobile";
  18. var $btnSearchPatient = $('#btnSearchPatient');
  19. var $btnTotalSearchConsent = $('#btnTotalSearchConsent');
  20. var $btnSearchConsent = $('#btnSearchConsent');
  21. var $sltHospital = $('#sltHospital');
  22. var $sltTreament = $('#sltTreament');
  23. var $dtpSrchdd = $('#dtpSrchdd');
  24. var $sltDoctor = $('#sltDoctor');
  25. var $txtSearchPatient = $('#txtSearchPatient');
  26. var $ulPatientList = $('#ulPatientList');
  27. var $ulAgreementCheck = $("#ulAgreementCheck");
  28. var $ulAgreementList = $("#ulAgreementList");
  29. var $ulConsentList = $("#ulConsentList");
  30. var $ulSetList = $('#ulSetList');
  31. var $dtpConsentStartDt = $('#dtpConsentStartDt');
  32. var $dtpConsentEndDt = $('#dtpConsentEndDt');
  33. var $sltCategory = $('#sltCategory');
  34. var $sltCategoryLower = $('#sltCategoryLower');
  35. var $txtConsentSrch = $('#txtConsentSrch');
  36. var $tabSet = $('#tabSet');
  37. var todayDateStr = '';
  38. var $menuType = 'I';
  39. var self = this;
  40. patientList = [];
  41. var patientInfo;
  42. var unfinishedConsentList = [];
  43. var agreementList = [];
  44. var setList = [];
  45. var totalConsentList = [];
  46. /**
  47. * 초기화
  48. */
  49. this.init = function(){
  50. formDataInit();
  51. addEvent();
  52. initDropDownList();
  53. initSetList();
  54. if(indexPage=='I'&&(jobKindCd=='1140'||jobKindCd=='1113')){
  55. $sltHospital.selectpicker('val', deptCd);
  56. if($sltHospital.val()==null){
  57. $sltHospital.selectpicker('val', '');
  58. }else{
  59. searchPatientList('Y');
  60. }
  61. };
  62. if(jobKindCd=='0330'||jobKindCd=='0640'){
  63. $sltTreament.selectpicker('val', deptCd);
  64. $('input:radio[name=searchRadio]:input[value=""]').attr("checked", true);
  65. if($sltTreament.val()==null){
  66. $sltTreament.selectpicker('val', '');
  67. }else{
  68. showDoctorList(deptCd);
  69. searchPatientList('Y');
  70. }
  71. }else{
  72. $('input:radio[name=searchRadio]:input[value="C"]').attr("checked", true);
  73. };
  74. };
  75. var formDataInit = function(){
  76. //datepicker 초기화
  77. $('.datepicker').datepicker({'format': 'yyyy/mm/dd'});
  78. var today = new Date();
  79. var prevDay = new Date(Date.parse(new Date()) - 7 * 1000 * 60 * 60 * 24); //일주일전!!
  80. todayDateStr = moment(today).format('YYYY/MM/DD');
  81. var prevDayStr = moment(prevDay).format('YYYY/MM/DD');
  82. $("#divDtpSrchdd").datepicker('update', todayDateStr);
  83. $("#divDtpConsentStartDt").datepicker('update', prevDayStr);
  84. $("#divDtpConsentEndDt").datepicker('update', todayDateStr);
  85. };
  86. /**
  87. * 이벤트 등록
  88. */
  89. var addEvent = function(){
  90. $btnSearchPatient.on("click", function(e){
  91. $('span[name^="sort_"]').attr('sortType', '');
  92. searchPatientList('N');
  93. });
  94. $btnTotalSearchConsent.on("click", function(e){
  95. searchTotalConsentList('Y');
  96. });
  97. $btnSearchConsent.on("click", function(e){
  98. searchConsentList();
  99. });
  100. $tabSet.on("click", function(e){
  101. initSetList();
  102. });
  103. $('span[name^="sort_"]').on("click", function(e){
  104. self.loading("show");
  105. setTimeout(function(){
  106. var sortData = e.currentTarget.attributes.name.value.split('_');
  107. var sortKey = sortData[1];
  108. var sortType = sortData[2];
  109. var sortClassName = sortData[3];
  110. var sortOrder = $('span.'+sortClassName+'[name^="sort_"]')[0].attributes.sortType.value;
  111. $('span[name^="sort_"]').attr('sortType', '');
  112. if(sortOrder==undefined || sortOrder=='up'){
  113. sortPatientList(sortKey, sortType, 'down');
  114. $('span.'+sortClassName+'[name^="sort_"]').attr('sortType', 'down');
  115. }else{
  116. sortPatientList(sortKey, sortType, 'up');
  117. $('span.'+sortClassName+'[name^="sort_"]').attr('sortType', 'up');
  118. };
  119. self.loading("hide");
  120. }, 300);
  121. });
  122. };
  123. var initDropDownList = function(){
  124. //병동리스트
  125. var wardResult = self.hospital.getWardList();
  126. $sltHospital.empty();
  127. for(var i=0; i<wardResult.length; i++){
  128. var option = $('<option value='+wardResult[i].deptcd+'>'+wardResult[i].deptnm+'</option>');
  129. $sltHospital.append(option);
  130. };
  131. $sltHospital.children(":first").attr("selected", true);
  132. $sltHospital.selectpicker('refresh');
  133. //부서리스트
  134. var deptParam = {ordtype: 'I'};
  135. var deptResult = self.hospital.getDeptList(deptParam);
  136. $sltTreament.empty();
  137. for(var i=0; i<deptResult.length; i++){
  138. var option = $('<option value='+deptResult[i].deptcd+'>'+deptResult[i].deptnm+'</option>');
  139. $sltTreament.append(option);
  140. };
  141. $sltTreament.children(":first").attr("selected", true);
  142. $sltTreament.selectpicker('refresh');
  143. //진료과에 따른 의사조회 이벤트 연결
  144. $sltTreament.change(function() {
  145. showDoctorList(this.value);
  146. });
  147. //카테고리조회
  148. var categoryParam = {
  149. categoryId: '1'
  150. };
  151. var categoryResult = self.consent.getCategoryForDropdown(categoryParam);
  152. $sltCategory.empty();
  153. for(var i=0; i<categoryResult.length; i++){
  154. var option = $('<option value='+categoryResult[i].categoryId+'>'+categoryResult[i].categoryName+'</option>');
  155. $sltCategory.append(option);
  156. };
  157. $sltCategory.children(":first").attr("selected", true);
  158. $sltCategory.selectpicker('refresh');
  159. showCategoryLowerList(categoryResult[0].categoryId);
  160. //진료과에따른 하위 카테고리조회
  161. $sltCategory.change(function() {
  162. showCategoryLowerList(this.value);
  163. });
  164. };
  165. var showCategoryLowerList = function(categoryId){
  166. var param = {
  167. categoryId: categoryId
  168. };
  169. var result = self.consent.getCategoryForDropdown(param);
  170. $sltCategoryLower.empty();
  171. for(var i=0; i<result.length; i++){
  172. var option = $('<option value='+result[i].categoryId+'>'+result[i].categoryName+'</option>');
  173. $sltCategoryLower.append(option);
  174. };
  175. $sltCategoryLower.children(":first").attr("selected", true);
  176. $sltCategoryLower.selectpicker('refresh');
  177. };
  178. //진료과에 따른 의사조회
  179. var showDoctorList = function(doctorid){
  180. var param = {srchdd: $dtpSrchdd[0].value.replace(/\//g,''), orddeptcd: doctorid};
  181. var result = self.hospital.getDoctorList(param);
  182. $sltDoctor.empty();
  183. for(var i=0; i<result.length; i++){
  184. var option = $('<option value='+result[i].doctorid+'>'+result[i].doctornm+'</option>');
  185. $sltDoctor.append(option);
  186. };
  187. $sltDoctor.children(":first").attr("selected", true);
  188. $sltDoctor.selectpicker('refresh');
  189. };
  190. //환자리스트 조회
  191. var searchPatientList = function(firstYn){
  192. initPatientInfo();
  193. var param = {srchdd: $dtpSrchdd[0].value.replace(/\//g,''),
  194. orddeptcd: $sltTreament.val(),
  195. doctorid: $sltDoctor.val(),
  196. pid: $txtSearchPatient.val(),
  197. wardcd: $sltHospital.val(),
  198. patstat: $(':radio[name="searchRadio"]:checked').val(),
  199. jobkindcd: jobKindCd};
  200. self.patient.getPatientList($menuType, param, firstYn);
  201. };
  202. //환자리스트 정렬
  203. var sortPatientList = function(sortKey, sortType, order){
  204. self.patient.setPatientList($menuType, patientList, sortKey, sortType, order);
  205. };
  206. //환자정보 초기화
  207. var initPatientInfo = function(){
  208. $ulAgreementList.empty();
  209. patientInfo = {};
  210. $("#tbPatientInfo").empty();
  211. unfinishedConsentList = [];
  212. $ulAgreementCheck.empty();
  213. $("#consentTap1 .sub-title").empty();
  214. };
  215. //환자정보 조회
  216. getPatientInfo = function(seq){
  217. initPatientInfo();
  218. var data = patientList[seq];
  219. var patientParam = { pid: data.pid,
  220. orddd: data.indd.replace(/\//g,''),
  221. ordtype: data.ordtype,
  222. orddeptcd: data.orddeptcd
  223. };
  224. var patientResult = self.hospital.getPatientInfo(patientParam);
  225. // target 환자 정보를 보관해 둔다
  226. patientInfo = patientResult[0];
  227. if( patientInfo == undefined ) {return;};
  228. $("#divDtpConsentStartDt").datepicker('update', moment(patientInfo.ioaddate).format('YYYY/MM/DD'));
  229. for(var i=0; i<patientResult.length; i++){
  230. //환자정보 바인딩
  231. var trData = tr.clone().html(th.clone().text("입원일")).append(td.clone().text(moment(patientResult[i].ioaddate).format('YYYY/MM/DD')));
  232. var trData2 = tr.clone().html(th.clone().text("주치의")).append(td.clone().text(patientResult[i].iomaindrNm));
  233. var trData3 = tr.clone().html(th.clone().text("진단명")).append(td.clone().text(patientResult[i].iodxNm));
  234. var tdData4 = td.clone();
  235. for(var j=0; j<1; j++){
  236. tdData5= tdData4.append("").append("</br>"); //alert Data
  237. };
  238. var trData6 = tr.clone().addClass("infoalert").html(th.clone().text("Alert")).append(tdData5);
  239. var tableData = table.clone().addClass("patientData").html(trData).append(trData2).append(trData3).append(trData6);
  240. $("#consentTap1 .sub-title").text(patientResult[i].ioptID+" " + patientResult[i].ioptName+" "+ editAgeToIdNum(patientResult[i].iosexAgeYM) + "/"+patientResult[i].iojuminNo.split('-')[0]);
  241. $("#tbPatientInfo").append(tableData);
  242. };
  243. getUnfinishedConsentInfo(data);
  244. };
  245. //미작성동의서 조회
  246. var getUnfinishedConsentInfo = function(data){
  247. var consentParam = {
  248. patientCode: data.pid,
  249. startDt: patientInfo.ioaddate,
  250. endDt: moment(todayDateStr).format('YYYYMMDD'),
  251. consentState: "'UNFINISHED', 'TEMP'",
  252. jobKindCd: indexPage=='O'&&(jobKindCd=='1140'||jobKindCd=='1113')? 'ALL': jobKindCd
  253. };
  254. var consentResult = self.consent.getConsentList(consentParam);
  255. unfinishedConsentList = consentResult;
  256. //미작성동의서 리스트 바인딩
  257. var divCheckbox = div.clone().addClass("checkbox3 checkbox-check checkbox-light");
  258. $ulAgreementCheck.empty();
  259. for(var i=0; i<consentResult.length; i++){
  260. $ulAgreementCheck.append(
  261. li.clone().html(
  262. divCheckbox.clone().html($("<input type='checkbox' id='chkConsentUnfinished_"+(i+1)+"'></input>"))
  263. .append($("<label for='chkConsentUnfinished_"+(i+1)+"'></label>"))
  264. .append(span.clone().addClass("detail").text(consentResult[i].consentName))
  265. .append(span.clone().addClass("label "+
  266. (consentResult[i].consentState=='TEMP'? "label-temp":
  267. consentResult[i].consentState=='UNFINISHED'? "label-unfinished":
  268. consentResult[i].consentState=='ELECTR_CMP'? "label-electrCmp":
  269. consentResult[i].consentState=='CERTIFY_CMP'? "label-certifyCmp":
  270. consentResult[i].consentState=='PAPER_OUT'? "label-paperOut":
  271. consentResult[i].consentState=='VERBAL'? "label-verbal":"label-default")
  272. ).text(consentResult[i].consentStateDisp))
  273. .append(button.clone().addClass("text-right btn btn-default")
  274. .text("삭제").attr("seq", i))
  275. )
  276. )
  277. };
  278. $('#ulAgreementCheck li').on("click", function(e){
  279. if(e.toElement.localName == "label") { //체크박스 클릭
  280. var input = $(this).children().children("input");
  281. $(input).prop("checked", !$(input).prop("checked"));
  282. if($(input).prop("checked")) $(this).addClass('checked')
  283. else $(this).removeClass('checked')
  284. }else if(e.toElement.localName == "button"){ //삭제버튼 클릭
  285. }else{ //동의서내용 클릭
  286. if(!$(this).hasClass("checked")){
  287. var input = $(this).children().children("input");
  288. $(input).prop("checked", true);
  289. $(this).addClass('checked');
  290. };
  291. //선택한 동의서만 가지고오기
  292. var selectedItems = $('#ulAgreementCheck li[class="checked"] input');
  293. var selectedConsentList = [];
  294. var printOnlyList = [];
  295. for( var i = 0; i < selectedItems.length; i++ ){
  296. // sequence 추출
  297. var seq = selectedItems[i].id.split('_')[1];
  298. seq = seq - 1;
  299. // 동의서 상태 체크
  300. var param = {consentmstrid: unfinishedConsentList[seq].consentMstRid,
  301. consentState: unfinishedConsentList[seq].consentState};
  302. var state = self.consent.checkConsentState(param);
  303. if( state == undefined ) { printOnlyList.push("["+unfinishedConsentList[seq].consentName+"] - 상태 조회 실패"); }
  304. else if (state.text == '-1') { printOnlyList.push("["+unfinishedConsentList[seq].consentName+"] - 상태 조회 실패"); }
  305. else if (state.text == '1') { printOnlyList.push("["+unfinishedConsentList[seq].consentName+"] - 이미 작성된 동의서"); }
  306. else if (state.text == '0'){
  307. selectedConsentList.push(unfinishedConsentList[seq]);
  308. }
  309. }
  310. var printOnlyAlertMsg = '';
  311. for(var j=0; j<printOnlyList.length; j++){
  312. printOnlyAlertMsg = printOnlyAlertMsg + printOnlyList[j];
  313. if(j!=printOnlyList.length-1) printOnlyAlertMsg = printOnlyAlertMsg +"\n";
  314. };
  315. if(printOnlyAlertMsg.length>0) {
  316. self.confirm("작성이 불가능한 동의서입니다.\n\n" + printOnlyAlertMsg, function(confirm){
  317. if(confirm){
  318. var global = self.consent.makeGlobalParam(patientInfo, loginUserId);
  319. var consent = self.consent.makeConsentParam(patientInfo, selectedConsentList, loginUserName);
  320. var jsonssg = {
  321. "type" : "command",
  322. "functionType" : "consent",
  323. "value" : {
  324. "callbackFn" : "window.activeObj.consentCallback"
  325. },
  326. "userId": loginUserId,
  327. "globalParam" : global,
  328. "consentParam" : consent
  329. };
  330. self.toNative(jsonssg);
  331. }
  332. });
  333. }else{
  334. if(selectedConsentList.length > 0){
  335. var global = self.consent.makeGlobalParam(patientInfo, loginUserId);
  336. var consent = self.consent.makeConsentParam(patientInfo, selectedConsentList, loginUserName);
  337. var jsonssg = {
  338. "type" : "command",
  339. "functionType" : "consent",
  340. "value" : {
  341. "callbackFn" : "window.activeObj.consentCallback"
  342. },
  343. "userId" : loginUserId,
  344. "globalParam" : global,
  345. "consentParam" : consent
  346. };
  347. self.toNative(jsonssg);
  348. };
  349. };
  350. };
  351. e.stopPropagation();
  352. e.preventDefault();
  353. });
  354. $('#ulAgreementCheck li button').on("click", function(e){
  355. self.confirm("삭제하시겠습니까?", function(confirm){
  356. if(confirm){
  357. $('#txtSeq').val(e.currentTarget.attributes.seq.value);
  358. $('#mplusConsentDeleteForm').modal('show');
  359. $('#btnConsentDelete').unbind();
  360. $('#btnConsentDelete').on('click', function(){
  361. var checkVal = $('#mplusConsentDeleteForm input[name=consentDeleteRadio]:checked').val();
  362. var deleteReasonText = $('#consentDeleteTextarea').val();
  363. deleteConsent($('#txtSeq').val(),
  364. checkVal=="slt4"? deleteReasonText: $('#mplusConsentDeleteForm input[name=consentDeleteRadio]:checked')[0].attributes.dataReason.value);
  365. });
  366. }
  367. });
  368. });
  369. };
  370. // 동의서이력
  371. var searchTotalConsentList = function(alertYn){
  372. $ulAgreementList.empty();
  373. var divCheckbox = div.clone().addClass("checkbox3 checkbox-check checkbox-light");
  374. if($('#ulPatientList .list-group-item.active').parent()[0]==undefined){
  375. self.alert('조회할 환자를 선택해주세요.');
  376. return;
  377. };
  378. if( patientInfo == undefined ){
  379. self.alert('환자 정보가 정상 조회되지 않았습니다.');
  380. return;
  381. };
  382. var temIndex = $('#ulPatientList .list-group-item.active').parent()[0].id.split('_')[1];
  383. var data = patientList[temIndex];
  384. var temConsentState = self.consent.makeConsentStateParam();
  385. if(temConsentState==undefined) return;
  386. $('#agreeListHeader .consentHeader').css('display', 'none');
  387. var param = {
  388. patientCode: data.pid,
  389. startDt: $dtpConsentStartDt[0].value.replace(/\//g,''),
  390. endDt: $dtpConsentEndDt[0].value.replace(/\//g,''),
  391. consentState: temConsentState,
  392. jobKindCd: indexPage=='O'&&(jobKindCd=='1140'||jobKindCd=='1113')? 'ALL': jobKindCd
  393. };
  394. var result = self.consent.getConsentList(param);
  395. // 오른쪽 동의서 리스트 보관
  396. agreementList = result;
  397. if(alertYn=='Y'&&(result==undefined||result.length==0)) {
  398. self.alert('조회된 데이터가 없습니다.');
  399. return;
  400. }else if(alertYn=='N'&&(result==undefined||result.length==0)) {return;};
  401. for(var i=0; i<result.length; i++){
  402. $ulAgreementList.addClass("agreementCheck").append(
  403. li.clone().html(
  404. divCheckbox.clone().html($("<input type='checkbox' id='chkConsentPatient_"+(i+1)+"'></input>"))
  405. .append($("<label for='chkConsentPatient_"+(i+1)+"'></label>"))
  406. .append(span.clone().addClass("document").text(result[i].consentName)
  407. .append(span.clone().addClass("label "+
  408. (result[i].consentState=='TEMP'? "label-temp":
  409. result[i].consentState=='UNFINISHED'? "label-unfinished":
  410. result[i].consentState=='ELECTR_CMP'? "label-electrCmp":
  411. result[i].consentState=='CERTIFY_CMP'? "label-certifyCmp":
  412. result[i].consentState=='PAPER_OUT'? "label-paperOut":
  413. result[i].consentState=='VERBAL'? "label-verbal":"label-default")
  414. //result[i].consentState.replace(/_/gi, "").toLowerCase() 가능! but, default? 병원에서 값을 예상치도 못한 값을줬을때?
  415. ).text(result[i].consentStateDisp))
  416. )
  417. ));
  418. };
  419. $('#ulAgreementList li').on("click", function(e){
  420. // 체크박스 클릭했을 때
  421. if(e.toElement.localName == "label") {
  422. var input = $(this).children().children("input");
  423. $(input).prop("checked", !$(input).prop("checked"));
  424. if($(input).prop("checked")) $(this).addClass('checked')
  425. else $(this).removeClass('checked')
  426. } else {
  427. // 동의서 내용을 클릭했을 때
  428. if(!$(this).hasClass("checked")){
  429. var input = $(this).children().children("input");
  430. $(input).prop("checked", true);
  431. $(this).addClass('checked');
  432. };
  433. var selectedSeq = $(this).children().children("input").attr('id').split('_')[1];
  434. var lastSelectedItem = agreementList[selectedSeq - 1];
  435. // 클릭한 동의서의 상태 체크
  436. // 환자서명이거나 전자인증의 경우 모두 체크해제 하고, 해당 동의서의 이미지를 띄움
  437. if( lastSelectedItem.consentState == 'ELECTR_CMP' || lastSelectedItem.consentState == 'CERTIFY_CMP' ) {
  438. // 체크해제
  439. $('#ulAgreementList li[class="checked"] input').prop("checked", false);
  440. $('#ulAgreementList li[class="checked"]').removeClass("checked");
  441. var param = {consentMstRid : lastSelectedItem.consentMstRid};
  442. var consentImageList = self.consent.getConsentImage(param);
  443. if(consentImageList == undefined || consentImageList.length==0) {self.alert("동의서 이미지 조회 실패"); return;};
  444. var imagePathList = [];
  445. $('#consentImgBox').empty();
  446. for( var i = 0; i < consentImageList.length; i++ ) {
  447. $('#consentImgBox').append(
  448. div.clone().append(
  449. "<img data-u='image' src='"+consentImageList[i].imagePath+"' width='100%'>"
  450. )
  451. )
  452. }
  453. $('.modal-backdrop').removeClass('in');
  454. $('.modal').modal('hide');
  455. $('#mplusConsentImageForm').modal("show");
  456. }
  457. //선택한 동의서만 가지고오기
  458. var selectedItems = $('#ulAgreementList li[class="checked"] input');
  459. var selectedConsentList = [];
  460. var printOnlyList = [];
  461. for( var i = 0; i < selectedItems.length; i++ ){
  462. // sequence 추출
  463. var seq = selectedItems[i].id.split('_')[1];
  464. seq = seq - 1;
  465. // data add
  466. if(agreementList[seq].consentState=="PAPER_OUT" || agreementList[seq].consentState=="FNU_PRINT"){
  467. //동의서 상태가 출력/FNU출력인 경우 걸러내기
  468. printOnlyList.push("["+agreementList[seq].consentName+"] - "+agreementList[seq].consentStateDisp);
  469. } else{
  470. // 동의서 상태 체크
  471. var param = {consentmstrid: agreementList[seq].consentMstRid,
  472. consentState: agreementList[seq].consentState};
  473. var state = self.consent.checkConsentState(param);
  474. if( state == undefined ) { printOnlyList.push("["+agreementList[seq].consentName+"] - 상태 조회 실패"); }
  475. else if (state.text == '-1') { printOnlyList.push("["+agreementList[seq].consentName+"] - 상태 조회 실패"); }
  476. else if (state.text == '1') { printOnlyList.push("["+agreementList[seq].consentName+"] - 이미 작성된 동의서"); }
  477. else if (state.text == '0'){
  478. selectedConsentList.push(agreementList[seq]);
  479. }
  480. };
  481. };
  482. var printOnlyAlertMsg = '';
  483. for(var j=0; j<printOnlyList.length; j++){
  484. printOnlyAlertMsg = printOnlyAlertMsg +printOnlyList[j];
  485. if(j!=printOnlyList.length-1) printOnlyAlertMsg = printOnlyAlertMsg +"\n";
  486. };
  487. if(printOnlyAlertMsg.length>0) {
  488. self.confirm("출력전용 및 작성이 불가능한 동의서입니다.\n\n" + printOnlyAlertMsg, function(confirm){
  489. if(confirm){
  490. if(selectedConsentList.length > 0){
  491. var global = self.consent.makeGlobalParam(patientInfo, loginUserId);
  492. var consent = self.consent.makeConsentParam(patientInfo, selectedConsentList, loginUserName);
  493. var jsonssg = {
  494. "type" : "command",
  495. "functionType" : "consent",
  496. "value" : {
  497. "callbackFn" : "window.activeObj.consentCallback"
  498. },
  499. "userId": loginUserId,
  500. "globalParam" : global,
  501. "consentParam" : consent
  502. };
  503. self.toNative(jsonssg);
  504. };
  505. }
  506. });
  507. }else{
  508. if(selectedConsentList.length > 0){
  509. var global = self.consent.makeGlobalParam(patientInfo, loginUserId);
  510. var consent = self.consent.makeConsentParam(patientInfo, selectedConsentList, loginUserName);
  511. var jsonssg = {
  512. "type" : "command",
  513. "functionType" : "consent",
  514. "value" : {
  515. "callbackFn" : "window.activeObj.consentCallback"
  516. },
  517. "userId" : loginUserId,
  518. "globalParam" : global,
  519. "consentParam" : consent
  520. };
  521. self.toNative(jsonssg);
  522. };
  523. };
  524. }
  525. e.stopPropagation();
  526. e.preventDefault();
  527. });
  528. };
  529. //set리스트 조회
  530. var initSetList = function(){
  531. $ulSetList.empty();
  532. var param = {};
  533. var result = self.consent.getConsentSetList(param);
  534. setList = result;
  535. var divCheckbox = div.clone().addClass("checkbox3 checkbox-check checkbox-light");
  536. for(var i=0; i<result.length; i++){
  537. $ulSetList.addClass("agreementCheck").append(
  538. li.clone().html(
  539. divCheckbox.clone().html($("<input type='checkbox' id='chkSetList_"+(i+1)+"'></input>"))
  540. .append($("<label for='chkSetList_"+(i+1)+"'></label>"))
  541. .append(span.clone().addClass("document").text(result[i].formName))
  542. .append(button.clone().addClass("text-right btn btn-default")
  543. .text("삭제").attr("formCd", result[i].formCd))
  544. ));
  545. };
  546. $('#ulSetList li').on("click", function(e){
  547. if(e.toElement.localName == "label") { //체크박스클릭
  548. var input = $(this).children().children("input");
  549. $(input).prop("checked", !$(input).prop("checked"));
  550. if($(input).prop("checked")) {
  551. $(this).addClass('checked')
  552. } else {
  553. $(this).removeClass('checked')
  554. };
  555. }else if(e.toElement.localName == "button"){//삭제버튼클릭
  556. }else{//동의서 내용 클릭
  557. if(!$(this).hasClass("checked")){
  558. var input = $(this).children().children("input");
  559. $(input).prop("checked", true);
  560. $(this).addClass('checked');
  561. };
  562. if($('#ulPatientList .list-group-item.active').parent()[0]==undefined){
  563. self.alert('환자를 선택해주세요.');
  564. return;
  565. };
  566. //선택한 동의서만 가지고오기
  567. var selectedItems = $('#ulSetList li[class="checked"] input');
  568. var selectedConsentList = [];
  569. var printOnlyList = [];
  570. for( var i = 0; i < selectedItems.length; i++ ){
  571. // sequence 추출
  572. var seq = selectedItems[i].id.split('_')[1];
  573. seq = seq - 1;
  574. if(setList[seq].printOnly=="Y"){
  575. printOnlyList.push(setList[seq].formName);
  576. }else{
  577. //data add
  578. selectedConsentList.push(setList[seq]);
  579. };
  580. };
  581. var printOnlyAlertMsg = '';
  582. for(var j=0; j<printOnlyList.length; j++){
  583. printOnlyAlertMsg = printOnlyAlertMsg +"["+printOnlyList[j]+"]";
  584. if(j!=printOnlyList.length-1) printOnlyAlertMsg = printOnlyAlertMsg +"\n";
  585. };
  586. if(printOnlyAlertMsg.length>0) {
  587. self.confirm(printOnlyAlertMsg+"\n출력전용 동의서 입니다. \nPC에서 출력하세요.", function(confirm){
  588. if(confirm){
  589. if(selectedConsentList.length > 0){
  590. var global = self.consent.makeGlobalParam(patientInfo, loginUserId);
  591. var consent = self.consent.makeNewConsentParam(patientInfo, selectedConsentList, loginUserName);
  592. // 유효성 검사 추가할 것
  593. var jsonssg = {
  594. "type" : "command",
  595. "functionType" : "consent",
  596. "value" : {
  597. "callbackFn" : "window.activeObj.consentCallback"
  598. },
  599. "userId": loginUserId,
  600. "globalParam" : global,
  601. "consentParam" : consent
  602. };
  603. self.toNative(jsonssg);
  604. };
  605. }
  606. });
  607. }else{
  608. if(selectedConsentList.length > 0){
  609. var global = self.consent.makeGlobalParam(patientInfo, loginUserId);
  610. var consent = self.consent.makeNewConsentParam(patientInfo, selectedConsentList, loginUserName);
  611. // 유효성 검사 추가할 것
  612. var jsonssg = {
  613. "type" : "command",
  614. "functionType" : "consent",
  615. "value" : {
  616. "callbackFn" : "window.activeObj.consentCallback"
  617. },
  618. "userId": loginUserId,
  619. "globalParam" : global,
  620. "consentParam" : consent
  621. };
  622. self.toNative(jsonssg);
  623. };
  624. };
  625. };
  626. e.stopPropagation();
  627. e.preventDefault();
  628. });
  629. $('#ulSetList li button').on("click", function(e){
  630. delUserFormSetList(e);
  631. });
  632. };
  633. //동의서 리스트 조회
  634. var searchConsentList = function(){
  635. var param = {
  636. categoryId: $sltCategoryLower.val(),
  637. keyWord: $txtConsentSrch.val()
  638. };
  639. var result = self.consent.getConsentBySearch(param);
  640. // 오른쪽 동의서 리스트 보관
  641. totalConsentList = result;
  642. $ulConsentList.empty();
  643. if(result==undefined||result.length==0) {
  644. self.alert('조회된 데이터가 없습니다.');
  645. return;
  646. };
  647. //동의서 조회 리스트 바인딩
  648. var divCheckbox = div.clone().addClass("checkbox3 checkbox-check checkbox-light");
  649. for(var i=0; i<result.length; i++){
  650. $ulConsentList.addClass("agreementCheck").append(
  651. li.clone().html(
  652. divCheckbox.clone().html($("<input type='checkbox' id='chkConsentSearch_"+(i+1)+"'></input>"))
  653. .append($("<label for='chkConsentSearch_"+(i+1)+"'></label>"))
  654. .append(span.clone().addClass("document").text(result[i].formName)
  655. )
  656. .append(button.clone().addClass("text-right btn btn-default")
  657. .text("추가").attr("formCd", result[i].formCd))
  658. ));
  659. };
  660. $('#ulConsentList li').on("click", function(e){
  661. if(e.toElement.localName == "label") { //체크박스클릭
  662. var input = $(this).children().children("input");
  663. $(input).prop("checked", !$(input).prop("checked"));
  664. if($(input).prop("checked")) $(this).addClass('checked')
  665. else $(this).removeClass('checked')
  666. }else if(e.toElement.localName == "button"){//즐겨찾기추가 클릭
  667. }else{//동의서 내용 클릭
  668. if(!$(this).hasClass("checked")){
  669. var input = $(this).children().children("input");
  670. $(input).prop("checked", true);
  671. $(this).addClass('checked');
  672. };
  673. if($('#ulPatientList .list-group-item.active').parent()[0]==undefined){
  674. self.alert('환자를 선택해주세요.');
  675. return;
  676. };
  677. //선택한 동의서만 가지고오기
  678. var selectedItems = $('#ulConsentList li[class="checked"] input');
  679. var selectedConsentList = [];
  680. var printOnlyList = [];
  681. for( var i = 0; i < selectedItems.length; i++ ){
  682. // sequence 추출
  683. var seq = selectedItems[i].id.split('_')[1];
  684. seq = seq - 1;
  685. if(totalConsentList[seq].prntOnly=="Y"){
  686. printOnlyList.push(totalConsentList[seq].formName);
  687. }else{
  688. //data add
  689. selectedConsentList.push(totalConsentList[seq]);
  690. };
  691. };
  692. var printOnlyAlertMsg = '';
  693. for(var j=0; j<printOnlyList.length; j++){
  694. printOnlyAlertMsg = printOnlyAlertMsg +"["+printOnlyList[j]+"]";
  695. if(j!=printOnlyList.length-1) printOnlyAlertMsg = printOnlyAlertMsg +"\n";
  696. };
  697. if(printOnlyAlertMsg.length>0) {
  698. self.confirm(printOnlyAlertMsg+"\n출력전용 동의서 입니다. \nPC에서 출력하세요.", function(confirm){
  699. if(confirm){
  700. if(selectedConsentList.length > 0){
  701. var global = self.consent.makeGlobalParam(patientInfo, loginUserId);
  702. var consent = self.consent.makeNewConsentParam(patientInfo, selectedConsentList, loginUserName);
  703. // 유효성 검사 추가할 것
  704. var jsonssg = {
  705. "type" : "command",
  706. "functionType" : "consent",
  707. "value" : {
  708. "callbackFn" : "window.activeObj.consentCallback"
  709. },
  710. "userId": loginUserId,
  711. "globalParam" : global,
  712. "consentParam" : consent
  713. };
  714. self.toNative(jsonssg);
  715. };
  716. }
  717. });
  718. }else{
  719. if(selectedConsentList.length > 0){
  720. var global = self.consent.makeGlobalParam(patientInfo, loginUserId);
  721. var consent = self.consent.makeNewConsentParam(patientInfo, selectedConsentList, loginUserName);
  722. // 유효성 검사 추가할 것
  723. var jsonssg = {
  724. "type" : "command",
  725. "functionType" : "consent",
  726. "value" : {
  727. "callbackFn" : "window.activeObj.consentCallback"
  728. },
  729. "userId": loginUserId,
  730. "globalParam" : global,
  731. "consentParam" : consent
  732. };
  733. self.toNative(jsonssg);
  734. };
  735. };
  736. };
  737. e.stopPropagation();
  738. e.preventDefault();
  739. });
  740. $('#ulConsentList li button').on("click", function(e){
  741. setUserFormSetList(e);
  742. });
  743. }
  744. //즐겨찾기 삭제
  745. var delUserFormSetList = function(e){
  746. self.confirm("삭제하시겠습니까?", function(confirm){
  747. if(confirm){
  748. var result = self.consent.delUserFormSetList({"formcd": e.currentTarget.attributes.formCd.value});
  749. if(result.formcd!=null){
  750. initSetList();
  751. /*self.alert("삭제되었습니다.");*///16.11.12 고객사요청으로 제거
  752. }else{
  753. self.alert("실패했습니다.");
  754. }
  755. };
  756. })
  757. }
  758. //즐겨찾기 추가
  759. var setUserFormSetList = function(e){
  760. self.confirm("즐겨찾기로 추가하시겠습니까?", function(confirm){
  761. if(confirm){
  762. var result = self.consent.setUserFormSetList({"formcd": e.currentTarget.attributes.formCd.value});
  763. if(result.formcd!=null){
  764. /*self.alert("추가되었습니다.");*/ //16.11.12 고객사요청으로 제거
  765. }else{
  766. self.alert("실패했습니다.");
  767. }
  768. };
  769. })
  770. }
  771. //동의서 삭제
  772. var deleteConsent = function(seq, reason){
  773. $("#mplusConsentDeleteForm").modal("hide");
  774. var delConsentInfo = unfinishedConsentList[seq];
  775. var delConsentParam = {"consentMstRid": delConsentInfo.consentMstRid,
  776. "patientCode": delConsentInfo.patientCode,
  777. "clnDeptCode": delConsentInfo.clnDeptCd,
  778. "ward": delConsentInfo.ward==null? "": delConsentInfo.ward,
  779. "roomcd": delConsentInfo.roomCd==null? "": delConsentInfo.roomCd,
  780. "formRid": delConsentInfo.formRid==null? "":delConsentInfo.formRid,
  781. "consentState": delConsentInfo.consentState==null? "":delConsentInfo.consentState,
  782. "reasonForUseN": reason
  783. }
  784. var result = self.consent.delConsent(delConsentParam);
  785. if(result.text==delConsentInfo.consentMstRid){
  786. /*self.alert("삭제되었습니다.");*///16.11.12 고객사요청으로 제거
  787. getUnfinishedConsentInfo(patientList[$('#ulPatientList li a.active')[0].attributes.seq.value]);
  788. }else{
  789. self.alert("실패했습니다.");
  790. }
  791. }
  792. // 단말기에서 호출할 콜백
  793. this.consentCallback = function(data) {
  794. //self.alert(data);
  795. // 미작성 동의서 리프레쉬
  796. getUnfinishedConsentInfo(patientList[$('#ulPatientList li a.active')[0].attributes.seq.value]);
  797. // 오른쪽 동의서 리스트 리프레쉬
  798. // 동의서 리스트가 오픈되어있을 떄만 해야하나?
  799. searchTotalConsentList('N');
  800. }
  801. };