import { Controller } from 'stimulus'; import Cookies from 'js-cookie'; const loader = require("./../components/loader.js"); const helper = require("./../components/helper.js"); const misSession = require("./../components/misSession.js"); /* * This is an example Stimulus controller! * * Any element with a data-controller="caseHistory" attribute will cause * this controller to be executed. The name "caseHistory" comes from the filename: * caseHistory_controller.js -> "caseHistory" * * Delete this file or adapt it for your use! */ export default class extends Controller { async cashBack(evn) { loader.btnLoader(evn.target, true) var popup = document.getElementById('popup'); popup.querySelector('.modal-title').innerHTML = 'Возврат средств'; popup.querySelector('.modal-dialog').classList = 'modal-dialog modal-md'; try { const response = await fetch('/refund?filial=' + evn.target.dataset.filial); if (response.ok) { const text = await response.text(); popup.querySelector('.modal-body').innerHTML = text; loader.btnLoader(evn.target, false); $(popup).modal('show'); popup.querySelector('#refund_address').value = window.webSDK.data.user.address; popup.querySelector('#refund_phone').value = window.webSDK.data.user.phone; popup.querySelector('#refund_email').value = window.webSDK.data.user.email; popup.querySelector('#refund_schedident').value = evn.target.dataset.schedident; popup.querySelector('#refund_time').value = evn.target.dataset.time; popup.querySelector('#refund_doc_name').value = evn.target.dataset.docName; document.getElementById('refund-form').querySelector('button').addEventListener('click', function() { if ($('#refund-form')[0].checkValidity()) { $(popup).modal('hide'); } }) } } catch (error) { console.error('Error:', error); loader.btnLoader(evn.target, false); } } connect() { loader.loadSDK('caseHistory').then(function(webSDK) { webSDK.on('init', function() { if (this.data.user.authenticated) { runWebSDK(webSDK); } else { window.location.pathname = '/logout' } }); }) var securityRecord = this.element; var popup = document.getElementById('popup'); let runWebSDK = function (webSDK) { scheduleRecordList(webSDK, securityRecord); } var securityTabs = document.getElementById('security-tabs'); var tabsDecktop = securityTabs.querySelectorAll('a'); var alertInfo = document.getElementById('alert-case-history-info'); if (tabsDecktop.length > 0) { tabsDecktop.forEach(function (el) { el.addEventListener('click', function (evn) { evn.target.classList = 'tab-item tab-item--active'; if (evn.target.dataset.alert === 'true') alertInfo.classList.remove('d-none'); securityTabs.querySelectorAll('a').forEach(function (a) { if (evn.target.dataset.allowRemove != a.dataset.allowRemove) { a.classList.remove('tab-item--active'); } }); var history = (evn.target.dataset.allowRemove == 'true'); filter(history, securityRecord); }); }); } else { securityTabs.addEventListener('change', function(evn) { if (evn.target.alert === 'true') alertInfo.classList.remove('d-none'); var history = (evn.target.value == 'true'); filter(history, securityRecord); }); } function filter(history, securityRecord) { var items = securityRecord.querySelectorAll('.item-record'); if (items) { var count = 0; items.forEach(function (item) { if (history == true) { item.classList.add('d-none'); if (item.dataset.workDate >= window.dateFormat(new Date())) { item.classList.remove('d-none'); count++; } } else { item.classList.add('d-none'); if (item.dataset.workDate < window.dateFormat(new Date())) { if (item.dataset.onlinemode == '1') { item.querySelector('.btn-conference').classList.remove('d-inline'); item.querySelector('.btn-conference').classList.add('d-none'); item.querySelector('.online-warning').classList.remove('d-none'); console.log(item.querySelector('.online-warning')); var refundBtn = item.querySelector('.btn-cash-back') refundBtn.classList.add('d-inline'); refundBtn.dataset.schedident = item.dataset.schedident refundBtn.dataset.filial = item.dataset.filial refundBtn.dataset.time = item.dataset.time refundBtn.dataset.docName = item.dataset.docName } item.classList.remove('d-none'); count++; } } notItems(count); }); } } function notItems(count) { var load = securityRecord.querySelector('.load'); load.classList.add('d-none'); if (count == 0) { load.innerHTML = 'Записей не найдено'; load.classList.remove('d-none'); } } var renderItems = function(items, securityWrap) { var count = 0; items.forEach(function(data, i) { var blockItem = securityRecord.querySelector('.item-record').cloneNode(true); blockItem.dataset.workDate = data.workDate; blockItem.dataset.onlinemode = data.onlineType ?? 0; blockItem.dataset.docName = data.docName; blockItem.dataset.time = data.startTime+ ' '+ data.endTime; blockItem.dataset.schedident = data.schedident; blockItem.dataset.filial = data.filial; blockItem.dataset.dcode = data.dcode; if (blockItem.dataset.dcode) { helper.sendRequest({ 'sid': blockItem.dataset.dcode, 'onlineMode': blockItem.dataset.onlineType ?? 0 }, "/api/doctor", "GET").then(function (response) { if (response.data) { blockItem.querySelector('.img-vr').style.background = 'url(' + response.data.img + ') center -5px / cover'; blockItem.querySelector('.position').innerHTML = response.data.speciality; if (response.data.kinder != null) { var kinder = blockItem.querySelector('.kinder'); kinder.classList.remove('d-none'); kinder.querySelector('.val').innerHTML = response.data.kinder; } if (response.data.expirience != null) { var kinder = blockItem.querySelector('.expirience'); kinder.classList.remove('d-none'); kinder.querySelector('.val').innerHTML = response.data.expirience; } blockItem.querySelectorAll('.link-specialist').forEach(function (el) { el.href = '/specialist/' + response.data.alias; }); } else { blockItem.querySelector('.img-vr').style.background = 'url(/images/no_img.png) center -5px / cover'; blockItem.querySelector('.position').innerHTML = ''; } }); } var date = window.newDate(data.workDate); if (Cookies.get('region') == 91) { var timeZona = '
время саратовское'; } else { var timeZona = '
время московское'; } blockItem.querySelector('.month').innerHTML = getWeekDay(date); blockItem.querySelector('.date').innerHTML = window.dateFormat(date, 'd-m-Y') + ' ' + data.startTime + timeZona; blockItem.querySelector('.address').innerHTML = (data.filialName == 'Онлайн клиника') ? 'Онлайн-консультация' : data.filialName; blockItem.querySelector('.section-favorite').dataset.sid = data.dcode; blockItem.querySelector('.specialist').innerHTML = data.docName; var btnClose = blockItem.querySelector('.btn-close'); btnClose.classList.add('d-none'); if (data.allowRemove) { btnClose.classList.remove('d-none'); btnClose.dataset.id = data.id; btnClose.dataset.filial = data.filial; btnClose.addEventListener('click', function () { if (confirm("Подтвердите удаление")) { webSDK.scheduleRecRemove({ 'reserveId': btnClose.dataset.id, 'filialId': btnClose.dataset.filial }).then(function (resolve) { document.location.reload(); }).catch(function (error) { helper.sendRequest({ data: {'error': error, method: 'scheduleRecRemove'} }, helper.getHostname() + '/api/log', "POST", "json", true, "application/json"); }) } }); } var btnConfirence = blockItem.querySelector('.btn-conference'); var accept = blockItem.querySelector('.accept'); var licenseLink = helper.getLicenseLink(Cookies.get('region')); var license = document.createElement('p'); if (data.onlineType && data?.payment?.status?.id != 0) { license.innerHTML = `Пожалуйста, не забудете за 5 минут до начала консультации войти в личный кабинет и потом нажать кнопку «Онлайн прием» для начала консультации.`; accept.append(license); var warning = document.createElement('p'); warning.innerHTML=`Внимание! В начале онлайн-консультации вам будет необходимо подтвердить своё согласие с информированным добровольным согласием на медицинское вмешательство (ИДС).`; accept.append(warning); btnConfirence.classList.remove('d-none') btnConfirence.classList.add('d-inline') btnConfirence.setAttribute('data-id' , data.id) btnConfirence.setAttribute('data-filial' , data.filial) btnConfirence.addEventListener('click', function () { popup.querySelector('#popup-body').innerHTML = ''; misSession.ensureAuthenticated(webSDK).then(function() { return webSDK.openConference({ schedid: btnConfirence.dataset.id }); }).then(function () { if (!misSession.mountConferenceInPopup(popup)) { throw { data: { message: 'Не удалось открыть окно онлайн-консультации.' } }; } }).catch(function (e) { if (misSession.handleMisSessionFailure(popup, e)) { helper.sendRequest({ data: {'error': e, method: 'openConference', reason: 'mis_session_expired'} }, helper.getHostname() + '/api/log', "POST", "json", true, "application/json"); return; } if (typeof e.data?.message !== 'undefined') { var msg = e.data.message.replace('UTC+3', 'UTC+3 (московское время)'); popup.querySelector('#popup-body').innerHTML = msg; popup.querySelector('.modal-dialog').classList = 'modal-dialog'; popup.querySelector('.modal-content').classList = 'modal-content'; popup.querySelector('.modal-title').innerHTML = 'Уведомление'; $(popup).modal('show'); } helper.sendRequest({ data: {'error': e, method: 'openConference'} }, helper.getHostname() + '/api/log', "POST", "json", true, "application/json"); }); }); } else { btnConfirence.classList.add('d-none') } var btnPayment = blockItem.querySelector('.btn-pay'); if (data.payment && data.payment.status.id == 0 && data.allowRemove) { license.innerHTML = `Для получения возможности провести оплату консультации - подтвердите согласие на присоединение к договору оферты:`; accept.append(license); blockItem.querySelector('.online-warning').classList.remove('d-none'); console.log(blockItem.querySelector('.online-warning')); var politics = document.createElement('div'); politics.classList = "form-check"; var politicsInput = document.createElement('input'); politicsInput.type="checkbox"; politicsInput.classList="form-check-input"; politicsInput.id="accept-btn"; politics.append(politicsInput); var politicsLabel = document.createElement('label'); politicsLabel.classList = "form-check-label"; politicsLabel.htmlFor="accept-btn"; politics.append(politicsLabel); politicsLabel.innerHTML = `Согласен с политикой в отношении обработки персональных данных`; politics.addEventListener('click', function () { console.log('politics', politicsInput.checked, personalInput.checked, ofertaInput.checked); btnPayment.classList.add('disabled'); btnPayment.disabled = true; if (politicsInput.checked && personalInput.checked && ofertaInput.checked) { btnPayment.classList.remove('disabled'); btnPayment.disabled = false; } }); accept.append(politics); var personal = document.createElement('div'); personal.classList = "form-check"; var personalInput = document.createElement('input'); personalInput.type="checkbox"; personalInput.classList="form-check-input"; personalInput.id="accept-personal"; personal.append(personalInput); var personalLabel = document.createElement('label'); personalLabel.classList = "form-check-label"; personalLabel.htmlFor="accept-personal"; personal.append(personalLabel); personalLabel.innerHTML = `Согласен с обработкой персональных данных.`; personal.addEventListener('click', function () { btnPayment.classList.add('disabled'); btnPayment.disabled = true; if (politicsInput.checked && personalInput.checked && ofertaInput.checked) { btnPayment.classList.remove('disabled'); btnPayment.disabled = false; } }); accept.append(personal); var oferta = document.createElement('div'); oferta.classList = "form-check"; var ofertaInput = document.createElement('input'); ofertaInput.type="checkbox"; ofertaInput.classList="form-check-input"; ofertaInput.id="accept-oferta"; oferta.append(ofertaInput); var ofertaLabel = document.createElement('label'); ofertaLabel.classList = "form-check-label"; ofertaLabel.htmlFor="accept-oferta"; oferta.append(ofertaLabel); ofertaLabel.innerHTML = `Присоединяюсь к договору оферты`; oferta.addEventListener('click', function () { btnPayment.classList.add('disabled'); btnPayment.disabled = true; if (politicsInput.checked && personalInput.checked && ofertaInput.checked) { btnPayment.classList.remove('disabled'); btnPayment.disabled = false; } }); accept.append(oferta); btnPayment.classList.remove('d-none'); btnPayment.classList.add('d-inline'); btnPayment.querySelector('.amt').innerHTML = data.payment.amt; btnPayment.setAttribute('data-id' , data.payment.id); btnPayment.setAttribute('data-filial' , data.filial); btnPayment.setAttribute('data-amt' , data.payment.amt); btnPayment.setAttribute('data-payprofileid' , data.payment.magazineId); btnPayment.addEventListener('click', function () { var params = { 'orderid': Number(btnPayment.dataset.id) , 'payprofileid': btnPayment.dataset.payprofileid, 'payamount': btnPayment.dataset.amt, 'paymethod': 'AC', 'filial': Number(btnPayment.dataset.filial), 'pcode': webSDK.data.user.id, 'successurl': document.location.origin + '/case-history#pay-success', 'errorurl': document.location.origin + '/case-history#error', 'containerId': 'popup-body', }; misSession.ensureAuthenticated(webSDK).then(function() { webSDK.loadPaymentView(params); popup.querySelector('#popup-body').innerHTML = ''; popup.querySelector('.modal-title').innerHTML = 'Оплата'; $(popup).modal('show'); }).catch(function(e) { if (misSession.handleMisSessionFailure(popup, e)) { helper.sendRequest({ data: {'error': e, method: 'loadPaymentView', reason: 'mis_session_expired'} }, helper.getHostname() + '/api/log', "POST", "json", true, "application/json"); return; } helper.sendRequest({ data: {'error': e, method: 'loadPaymentView'} }, helper.getHostname() + '/api/log', "POST", "json", true, "application/json"); }); }); } else { btnPayment.classList.add('d-none'); } if (data.workDate >= window.dateFormat(new Date())) { blockItem.classList.remove('d-none'); count++; } securityWrap.append(blockItem); }); notItems(count); } function scheduleRecordList(webSDK, securityRecord) { // Если страница загружена после создания записи, добавляем небольшую задержку // чтобы дать серверу время обработать новую запись var delay = (location.hash === '#doctor-success' || location.hash === '#online') ? 500 : 0; setTimeout(function() { webSDK.loadScheduleRecList({ st: 20170101, en: window.dateFormat(new Date((new Date()).getFullYear(), (new Date()).getMonth() + 6, 0)), start: 0, length: 500 }).then(function (resolve) { renderItems(resolve.data, securityRecord.querySelector('.section-wrap')); }).catch(function(e) { helper.sendRequest({ data: {'error': e, method: 'loadScheduleRecList'} }, helper.getHostname() + '/api/log', "POST", "json", true, "application/json"); securityRecord.querySelector('.load').innerHTML = 'Записей не найдено'; }); }, delay); } } }