Files
cabinet/assets/controllers/caseHistory_controller.js
T
2026-05-28 12:09:28 +03:00

452 lines
23 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 = '<br>время саратовское';
} else {
var timeZona = '<br>время московское';
}
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=`<b>Внимание!</b> В начале онлайн-консультации вам будет необходимо подтвердить своё согласие с информированным добровольным согласием на медицинское вмешательство (ИДС).`;
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 = `Согласен с <a href="${licenseLink}" target="_blank">политикой в отношении обработки персональных данных</a>`;
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 = `Согласен с <a href="${licenseLink}" target="_blank">обработкой персональных данных</a>.`;
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 = `Присоединяюсь к договору <a href="/docs/oferta.pdf" target="_blank">оферты</a>`;
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);
}
}
}