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);
}
}
}