const loader = require("./loader.js"); const validator = require("./validator.js"); const helper = require("./helper.js"); const onlineModeUtil = require("./onlineMode.js"); const Cookies = require('js-cookie'); function renderFormRecord(userInfo, params) { popup.dataset.specialistid = params.specialistid; popup.dataset.filialid = params.filialid; popup.dataset.depnum = params.department; popup.dataset.schedident = params.schedident; popup.dataset.workDate = params.workDate; popup.dataset.time = params.time; popup.dataset.onlinemode = params.onlinemode; // data-docName в HTML даёт dataset.docName; поддерживаем оба варианта const docname = (params.docName ?? params.docname ?? '').toString(); const address = (params.address ?? '').toString(); const company = (params.company ?? '').toString(); const comment = (params.comment ?? '').toString(); popup.dataset.docname = docname; popup.dataset.address = address; popup.dataset.company = company; popup.dataset.comment = comment; popup.dataset.rnum = params.rnum; popup.querySelector('.modal-title').innerHTML = onlineModeUtil.isOnlineMode(params.onlinemode) ? 'Запись на онлайн-консультацию' : 'Записаться к врачу' ; popup.querySelector('.modal-dialog').classList.remove('modal-lg'); var popupBody = popup.querySelector('#popup-body'); popupBody.innerHTML = ''; var div = document.createElement('div'); div.classList = 'form-group'; var licenseLink = helper.getLicenseLink(Cookies.get('region')); if (!onlineModeUtil.isOnlineMode(params.onlinemode)) { var license = document.createElement('a'); license.classList = "staff-info__review license-link"; license.href = licenseLink; license.target = '_blank'; license.innerHTML = 'Отправляя данные, вы подтверждаете согласие на обработку персональных данных и принимаете условия политики их обработки'; div.append(license); popupBody.append(div); } else { var license = document.createElement('p'); license.classList = "px-2"; license.innerHTML = `Для записи необходимо ознакомиться с политикой в отношении обработки персональных данных, согласием на обработку персональных данных.`; div.append(license); popupBody.append(div); const formCheck = document.createElement('div'); formCheck.classList = "form-check"; popupBody.append(formCheck); const formCheckInput = document.createElement('input'); formCheckInput.type="checkbox"; formCheckInput.classList="form-check-input"; formCheckInput.id="accept-btn"; formCheck.append(formCheckInput); const formCheckLabel = document.createElement('label'); formCheckLabel.classList = "form-check-label"; formCheckLabel.htmlFor="accept-btn"; formCheckLabel.innerHTML = ` ознакомлен с политикой в отношении обработки персональных данных, согласием на обработку персональных данных и договором оферты, информированным добровольным согласием (ИДС). `; formCheck.addEventListener('click', function () { let authButton = document.getElementById('auth-button'); let scheduleButton = document.getElementById('schedule-button'); if (userInfo) { scheduleButton.disabled = true; scheduleButton.classList.add('disabled'); } else { authButton.disabled = true; authButton.classList.add('disabled'); } if (formCheckInput.checked) { if (userInfo) { scheduleButton.disabled = false; scheduleButton.classList.remove('disabled'); } else { authButton.disabled = false; authButton.classList.remove('disabled'); } } }); formCheck.append(formCheckLabel); } var footer = document.createElement('div'); footer.classList = 'col-12 popup-modal-footer mt-1'; footer.style.flexWrap = 'nowrap'; footer.style.justifyContent = 'space-between'; popupBody.append(footer); if (userInfo) { let scheduleButton = document.createElement('button'); scheduleButton.classList = "button mb-3 w-100 submit"; scheduleButton.id = "schedule-button"; scheduleButton.disabled = params.onlinemode === 'false'? false : true; scheduleButton.innerHTML = "Записать меня" scheduleButton.addEventListener('click', function () { sendReserve(popup); }); footer.append(scheduleButton); } else { let authButton = document.createElement('button'); authButton.classList = "button mb-3 w-100"; authButton.id = "auth-button"; authButton.disabled = params.onlinemode === 'false'? false : true; authButton.innerHTML = "Войти и записать меня"; authButton.dataset.controller = 'signin'; authButton.dataset.action = 'click->signin#login'; authButton.addEventListener('click', function () { // Сохраняем данные записи в sessionStorage перед входом // чтобы восстановить их после авторизации (на случай потери dataset) sessionStorage.setItem('reserveData', JSON.stringify({ specialistid: params.specialistid, filialid: params.filialid, depnum: params.department, schedident: params.schedident, workDate: params.workDate, time: params.time, onlinemode: params.onlinemode, comment: params.comment, docname: params.docname, address: params.address, company: params.company, rnum: params.rnum })); sessionStorage.setItem('reserveFlag', 'true'); popup.dataset.reserve = 'true'; }); footer.append(authButton); } if (popup.dataset.onlinemode === 'false') { var buttonAnon = document.createElement('button'); buttonAnon.classList = "button mb-3 w-100"; buttonAnon.innerHTML = "Записать без авторизации" buttonAnon.addEventListener('click', function () { renderFormAnonym(popup); }); var info = document.createElement('p'); info.style.color = 'red'; info.innerHTML = '* Внимание! При записи другого человека информация о записи в Вашем личном кабинете не отображается, отменить или перенести запись можно будет только позвонив в колл-центр.'; popupBody.append(info); footer.append(buttonAnon); } return true; } function renderFormBitrix(el, nameValue = '', phoneValue = '', dateValue = '', alert= false) { popup.querySelector('.modal-title').innerText = 'Записаться на прием'; popup.querySelector('.modal-dialog').classList.remove('modal-lg'); var popupBody = popup.querySelector('#popup-body'); popupBody.innerHTML = ""; var div = document.createElement('div'); div.classList = 'form-group'; var name = document.createElement('input'); name.classList = "form-control"; name.id = "name"; name.placeholder = 'Имя:'; name.type = "text"; if (nameValue !== '') { name.value = nameValue; } div.append(name); var validName = document.createElement('div'); validName.classList = 'msg-valid valid-name'; div.append(validName); popupBody.append(div); var div = document.createElement('div'); div.classList = 'form-group'; var phone = document.createElement('input'); phone.classList = "form-control"; phone.id = "phone"; phone.placeholder = 'Телефон:'; if (phoneValue !== '') { phone.value = phoneValue; } phone.dataset.controller = "inputMask"; phone.type = "text"; div.append(phone); var validPhone = document.createElement('div'); validPhone.classList = 'msg-valid valid-phone'; div.append(validPhone); popupBody.append(div); var div = document.createElement('div'); div.classList = 'form-group'; var date = document.createElement('input'); date.classList = "form-control"; date.id = "date"; date.placeholder = "Желаемая дата:"; date.range = "false"; if (dateValue !== '') { date.value = dateValue; } date.dataset.controller = "datePicker"; date.type = "text"; div.append(date); popupBody.append(div) var div = document.createElement('div'); div.classList = 'form-group'; var service = document.createElement('input'); service.classList = "form-control"; service.id = "service"; service.type = "text"; if (el.dataset.comment) { service.placeholder = 'Услуга:'; } else { service.placeholder = 'ФИО нужного врача:'; } if (el.dataset.comment) { service.disabled = "true"; service.value = el.dataset.comment; } div.append(service); var validService = document.createElement('div'); validService.classList = 'msg-valid valid-service'; div.append(validService); popupBody.append(div) var licenseLink = helper.getLicenseLink(Cookies.get('region')); var div = document.createElement('div'); div.classList = 'form-group'; if (typeof el.dataset.company == 'undefined') { el.dataset.company = ''; } /* политика */ var div = document.createElement('div'); div.classList = 'form-group'; var formCheck = document.createElement('div'); formCheck.classList = 'form-check'; div.append(formCheck); var accept = document.createElement('input'); accept.classList = "form-check-input"; accept.id = "accept"; accept.checked = false; accept.type = "checkbox"; formCheck.append(accept); var license = helper.getLicenseLink(Cookies.get('region')); var label = document.createElement('label'); label.setAttribute('for' , 'accept'); var companyText = (el.dataset.company ?? '').toString(); if (companyText === 'undefined') companyText = ''; label.innerHTML = `ознакомлен(а) с условиями политики в отношении обработки персональных данных ${companyText}`; formCheck.append(label); var validAccept = document.createElement('div'); validAccept.classList = 'msg-valid valid-accept'; div.append(validAccept); popupBody.append(div) /* согласие */ var formCheck = document.createElement('div'); formCheck.classList = 'form-check'; div.append(formCheck); var acceptPerson = document.createElement('input'); acceptPerson.classList = "form-check-input"; acceptPerson.id = "acceptPerson"; acceptPerson.checked = false; acceptPerson.type = "checkbox"; formCheck.append(acceptPerson); var licensePerson = helper.getLicensePersonLink(); var labelPerson = document.createElement('label'); labelPerson.setAttribute('for' , 'acceptPerson'); labelPerson.innerHTML = `даю согласие на обработку персональных данных`; formCheck.append(labelPerson); var validAcceptPerson = document.createElement('div'); validAcceptPerson.classList = 'msg-valid valid-acceptPerson'; div.append(validAcceptPerson); popupBody.append(div) if (alert) { var div = document.createElement('div'); div.classList = 'form-group'; var span = document.createElement('span'); span.classList = 'text-danger'; span.innerHTML = 'К сожалению, в настоящий момент фиксируем сбой при отправке смс. Пожалуйста проверьте корректность данных и нажмите кнопку отправить. Оператор свяжется с Вами и запишет Вас на это время.'; div.append(span); popupBody.append(div); } const btnSubmit = document.createElement('button'); btnSubmit.innerHTML = 'Отправить'; btnSubmit.classList = 'btn btn-outline-secondary' btnSubmit.addEventListener('click', function() { var invalid = false; if (validator.checkAccept(accept, validAccept)) { invalid = true; } if (validator.checkAccept(acceptPerson, validAcceptPerson)) { invalid = true; } if (validator.checkTextRu(name, validName)) { invalid = true; } if (validator.checkPhone(phone, validPhone)) { invalid = true; } if (validator.checkNotEmpty(service, validService)) { invalid = true; } if (invalid) { return false; } var params = { 'fields' : { 'TITLE': 'Запрос услуги через личный кабинет', 'NAME': name.value, 'PHONE': [{ 'VALUE': phone.value, 'VALUE_TYPE': 'WORK' }], 'ASSIGNED_BY_ID' : 506, 'UF_CRM_1533790214': date.value, 'UF_CRM_1533790164': service.value, 'UF_CRM_1539951158': helper.getCityCRM(Cookies.get('region')) } }; helper.sendRequest(params, 'https://sovamed.bitrix24.ru/rest/10998/3hrv38rzo3khchj3/crm.lead.add.json', 'POST', 'json', false).then(function() { let searchParams = new URLSearchParams(location.search); var data = { 'subject': 'Запись в КЦ', 'requestUrl': location.href, 'sessionId': helper.getSessionId(), 'phoneNumber': phone.value, 'fio': name.value, 'tag': 'кц_запись', 'comment' : { 'docName': el.dataset.docName ?? el.dataset.docname ?? '', 'address': el.dataset.address ?? '', 'comment': el.dataset.comment ?? '' }, 'customSources': { "source": searchParams.get('utm_source'), "medium": searchParams.get('utm_medium'), "campaign": searchParams.get('utm_campaign'), "content": searchParams.get('utm_content'), "term": searchParams.get('utm_term') } } if (window.bitrix === true) { data.regionId = helper.getRegionIdByHost() } helper.sendRequest(data, '/api/add-calltouch').then(function(calltouch) { var popup = document.getElementById('popup'); if (window.bitrix) { popup.querySelector('.modal-title').innerHTML = 'Запись на прием'; var message = '

Спасибо, Вы успешно записались на прием.
'; message += popup.dataset.comment + ', '; message += popup.dataset.workDate + ' ' + popup.dataset.time + '

'; popup.querySelector('#popup-body').innerHTML = message; } else { loader.btnLoader(btnSubmit, false); var successAlert = document.createElement('div'); successAlert.classList = 'alert alert-success alert-dismissible fade show'; successAlert.setAttribute('role', 'alert'); var divMsg = document.createElement('div'); divMsg.classList = 'alert-msg'; divMsg.innerHTML = '

Запись на прием подтверждена.

'; var docName = el.dataset.docName ?? el.dataset.docname ?? ''; if (docName && el.dataset.address) { divMsg.innerHTML += '

Врач - ' + docName +'

'; divMsg.innerHTML += '

Клиника - ' + el.dataset.address +'

'; } divMsg.innerHTML += '

Дата - ' + date.value + '

'; successAlert.append(divMsg); var buttonClose = document.createElement('button'); buttonClose.classList = 'close'; buttonClose.dataset.dismiss ='alert'; buttonClose.setAttribute('aria-label', 'Close'); buttonClose.innerHTML = ''; successAlert.append(buttonClose); document.getElementById('alert-system').prepend(successAlert); if (popup && typeof $(popup).modal !== 'undefined') { $(popup).modal('hide'); } $('html, body').animate({scrollTop:0}, '300'); } }); }); }); popupBody.append(btnSubmit) } async function renderCheckEvent(hash, id) { popup.querySelector('.modal-title').innerHTML = 'Вы записались на прием'; popup.querySelector('.modal-dialog').classList.add('modal-lg'); const popupBody = popup.querySelector('#popup-body'); popupBody.innerHTML = ''; try { const response = await fetch('/widget/check/' + hash + '/' + id); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const blob = await response.blob(); const url = window.URL.createObjectURL(blob); // Создаем iframe для отображения PDF const iframe = document.createElement('iframe'); iframe.src = url; iframe.style.width = '100%'; iframe.style.height = '80vh'; // 80% высоты viewport iframe.style.border = 'none'; iframe.style.borderRadius = '8px'; // Очищаем содержимое модального окна и добавляем iframe popupBody.appendChild(iframe); } catch (error) { console.error('Ошибка загрузки:', error); popupBody.innerHTML = `

Ошибка загрузки: ${error.message}

`; } } function renderFormAnonym(el) { popup.querySelector('.modal-title').innerText = 'Записать другого человека'; popup.querySelector('.modal-dialog').classList.remove('modal-lg'); var popupBody = popup.querySelector('#popup-body'); popupBody.innerHTML = ""; var div = document.createElement('div'); div.classList = 'form-group'; var name = document.createElement('input'); name.classList = "form-control"; name.id = "name"; name.placeholder = "Ф.И.О."; name.type = "text"; div.append(name); var validName = document.createElement('div'); validName.classList = 'msg-valid valid-name'; div.append(validName); popupBody.append(div) var div = document.createElement('div'); div.classList = 'form-group'; var phone = document.createElement('input'); phone.classList = "form-control"; phone.id = "phone"; phone.placeholder = "Телефон:"; phone.dataset.controller = "inputMask"; phone.type = "text"; div.append(phone); var validPhone = document.createElement('div'); validPhone.classList = 'msg-valid valid-phone'; div.append(validPhone); popupBody.append(div) var div = document.createElement('div'); div.classList = 'form-group'; var email = document.createElement('input'); email.classList = "form-control"; email.id = "email"; email.placeholder = 'Адрес электронной почты:'; email.range = "false"; email.type = "text"; div.append(email); var validEmail = document.createElement('div'); validEmail.classList = 'msg-valid valid-email'; div.append(validEmail); popupBody.append(div) /* политика */ var div = document.createElement('div'); div.classList = 'form-group'; var formCheck = document.createElement('div'); formCheck.classList = 'form-check'; div.append(formCheck); var accept = document.createElement('input'); accept.classList = "form-check-input"; accept.id = "accept"; accept.checked = false; accept.type = "checkbox"; formCheck.append(accept); var companyText = (el.dataset.company ?? '').toString(); if (companyText === 'undefined') companyText = ''; var license = helper.getLicenseLink(Cookies.get('region')); var label = document.createElement('label'); label.setAttribute('for' , 'accept'); label.innerHTML = `ознакомлен(а) с условиями политики в отношении обработки персональных данных ${companyText}`; formCheck.append(label); var validAccept = document.createElement('div'); validAccept.classList = 'msg-valid valid-accept'; div.append(validAccept); popupBody.append(div) /* согласие */ var formCheck = document.createElement('div'); formCheck.classList = 'form-check'; div.append(formCheck); var acceptPerson = document.createElement('input'); acceptPerson.classList = "form-check-input"; acceptPerson.id = "acceptPerson"; acceptPerson.checked = false; acceptPerson.type = "checkbox"; formCheck.append(acceptPerson); var licensePerson = helper.getLicensePersonLink(); var labelPerson = document.createElement('label'); labelPerson.setAttribute('for' , 'acceptPerson'); labelPerson.innerHTML = `даю согласие на обработку персональных данных`; formCheck.append(labelPerson); var validAcceptPerson = document.createElement('div'); validAcceptPerson.classList = 'msg-valid valid-acceptPerson'; div.append(validAcceptPerson); popupBody.append(div) /* капча */ var divCaptcha = document.createElement('div'); divCaptcha.id = 'smart-captcha'; divCaptcha.dataset.controller = 'smartCaptcha'; popupBody.append(divCaptcha); var validGrecaptcha = document.createElement('div'); validGrecaptcha.classList = 'msg-valid valid-captcha'; popupBody.append(validGrecaptcha); var btnSubmit = document.createElement('button'); btnSubmit.innerHTML = 'Отправить'; btnSubmit.classList = 'btn btn-outline-secondary rc mt-3' btnSubmit.addEventListener('click', function() { var invalid = false; if (atob(btnVeretify.dataset.code) == veretifyPhone.value && atob(btnVeretify.dataset.veretify) == phone.value) { invalid = false; } else { validVeretifyPhone.innerHTML = 'Введенное значение неверно'; invalid = true; } if (validator.checkTextRu(name, validName)) { invalid = true; } if (validator.checkPhone(phone, validPhone)) { invalid = true; } if (validator.checkEmail(email, validEmail)) { invalid = true; } if (validator.checkAccept(accept, validAccept)) { invalid = true; } if (validator.checkAccept(acceptPerson, validAcceptPerson)) { invalid = true; } if (validator.checkSmartCaptcha(window.smartCaptcha.getResponse(), validGrecaptcha)) { invalid = true; } if (invalid) { return false; } loader.btnLoader(btnSubmit, true); helper.sendRequest({'phone': phone.value}, "/api/count-record").then(function (response) { if (response.data.count >= 2) { alert('Для записи к двум и более врачам-пожалуйста, заполните следующую форму'); var workDate = new Date(el.dataset.workDate) .toLocaleString('ru', {year: 'numeric',month: 'numeric',day: 'numeric'}); renderFormBitrix(el, name.value, phone.value, workDate); } else { const data = { 'fio': name.value, 'phone': phone.value, 'email': email.value, 'captcha': window.smartCaptcha.getResponse(), 'specialist': parseInt(el.dataset.specialistid) ?? 0, 'filial': parseInt(el.dataset.filialid) ?? 0, 'schedident': parseInt(el.dataset.schedident) ?? 0, 'workDate': el.dataset.workDate.replace(/-/g, ''), 'rnum': el.dataset.rnum ?? 0, 'time': el.dataset.time }; helper.sendRequest(data, '/api/anonymous-reserve').then(function(reserve) { if (location.hostname == 'cabinet.sovamed.ru' || location.hostname == 'cabinet.wmtmed.ru') { var subject = 'Запись в без авторизации с ЛК'; var tag = 'анонимная_запись'; } else { var subject = 'Запись в без авторизации с сайта'; var tag = 'анонимная_запись_с_сайта'; } let searchParams = new URLSearchParams(location.search); var data = { 'subject': subject, 'requestUrl': location.href, 'sessionId': helper.getSessionId(), 'phoneNumber': phone.value, 'email': email.value, 'fio': name.value, 'tag': tag, 'comment' : { 'docName': el.dataset.docname, 'address': el.dataset.address, 'specialistId': el.dataset.specialistid, 'filialId': el.dataset.filialid, 'schedident': el.dataset.schedident, 'workDate': el.dataset.workDate, 'time': el.dataset.time }, 'customSources': { "source": searchParams.get('utm_source'), "medium": searchParams.get('utm_medium'), "campaign": searchParams.get('utm_campaign'), "content": searchParams.get('utm_content'), "term": searchParams.get('utm_term') } } if (window.bitrix === true) { data.regionId = helper.getRegionIdByHost() } helper.sendRequest(data, '/api/add-calltouch').then(function(calltouch) { loader.btnLoader(btnSubmit, false); if (typeof window.bitrix === 'undefined') { var date = new Date(el.dataset.workDate); var successAlert = document.createElement('div'); successAlert.classList = 'alert alert-success alert-dismissible fade show'; successAlert.setAttribute('role', 'alert'); var divMsg = document.createElement('div'); divMsg.classList = 'alert-msg'; divMsg.innerHTML = '

Запись на прием подтверждена.

Врач - ' + el.dataset.docname +'

Клиника - ' + el.dataset.address +'

Дата - ' + window.dateFormat(date, 'd.m.Y') + ' ' + el.dataset.time +'

' successAlert.append(divMsg); var buttonClose = document.createElement('button'); buttonClose.classList = 'close'; buttonClose.dataset.dismiss ='alert'; buttonClose.setAttribute('aria-label', 'Close'); buttonClose.innerHTML = ''; successAlert.append(buttonClose); document.getElementById('alert-system').prepend(successAlert); $('html, body').animate({scrollTop:0}, '300'); } renderCheckEvent(reserve.data.hash, reserve.data.recordId); }); }).catch(function(e) { loader.btnLoader(btnSubmit, false); console.log(e); }); } }) }); var inputGroup = document.createElement('div'); inputGroup.classList = 'input-group mt-3 veretify-code-block'; var veretifyPhone = document.createElement('input'); veretifyPhone.classList = "form-control"; veretifyPhone.id = "veretify-code"; veretifyPhone.name = "code"; veretifyPhone.type = "text"; veretifyPhone.placeholder = "Код из СМС" inputGroup.append(veretifyPhone); var appendDiv = document.createElement('div'); appendDiv.classList = 'input-group-append'; var btnVeretify = document.createElement('button'); btnVeretify.innerHTML = 'Получить код'; btnVeretify.dataset.step = 0; btnVeretify.dataset.status = 'false' btnVeretify.classList = 'btn btn-outline-secondary' btnVeretify.addEventListener('click', function(evn) { loader.btnLoader(btnVeretify, true); validVeretifyPhone.innerHTML = ''; var invalid = false; if (validator.checkPhone(phone, validPhone)) { invalid = true; } if (validator.checkSmartCaptcha(window.smartCaptcha.getResponse(), validGrecaptcha)) { invalid = true; } if (validator.checkAccept(accept, validAccept)) { invalid = true; } if (validator.checkAccept(acceptPerson, validAcceptPerson)) { invalid = true; } if (invalid) { loader.btnLoader(btnVeretify, false); return false; } if (btnVeretify.dataset.status == "false") { helper.sendRequest({'phone' : phone.value, 'pcode': popup.dataset.pcode}, "/api/veretify").then(function (response) { const myCounter = new helper.countDown({ seconds: 60, onUpdateStatus: function(sec) { veretifyPhone.placeholder = 'Введите код из СМС: ' + sec + ' сек'; }, onCounterEnd: function() { if (btnVeretify.dataset.step == '1') { notsms.classList.remove('d-none'); } if (btnVeretify.dataset.step == '0') { btnVeretify.dataset.status = "false"; btnVeretify.innerHTML = "Получить код" btnVeretify.dataset.code = 'false'; btnVeretify.dataset.veretify = 'false'; btnVeretify.dataset.step = '1'; } } }); myCounter.start(); if (response.status == 'ERROR') { loader.btnLoader(btnVeretify, false); validVeretifyPhone.innerHTML = response.status_text return false; } if (response.status == 'OK') { btnVeretify.dataset.status = "OK" btnVeretify.innerHTML = "OK" btnVeretify.dataset.code = response.code; btnVeretify.dataset.veretify = btoa(phone.value); } }) } else if (btnVeretify.dataset.status == "OK") { if (atob(btnVeretify.dataset.code) == veretifyPhone.value && atob(btnVeretify.dataset.veretify) == phone.value) { inputGroup.classList.remove('veretify-code-block'); inputGroup.classList.add('d-none'); popupBody.append(btnSubmit); } else { validVeretifyPhone.innerHTML = 'Введенное значение неверно'; } } loader.btnLoader(btnVeretify, false); }); appendDiv.append(btnVeretify); inputGroup.append(appendDiv); var validVeretifyPhone = document.createElement('div'); validVeretifyPhone.classList = 'msg-valid valid-veretify-phone w-100'; inputGroup.append(validVeretifyPhone); var notsms = document.createElement('a'); notsms.href="#"; notsms.classList = 'd-none w-100'; notsms.innerHTML = 'Не приходит код'; notsms.addEventListener('click', function () { var workDate = new Date(el.dataset.workDate) .toLocaleString('ru', {year: 'numeric',month: 'numeric',day: 'numeric'}); if (btnVeretify.dataset.step == '1') { renderFormBitrix(el, name.value, phone.value, workDate, true); } }); inputGroup.append(notsms); popupBody.append(inputGroup) } function validateData(data) { const requiredFields = ['st', 'date', 'dcode', 'depnum', 'filial', 'schedident']; for (let field of requiredFields) { if (data[field] == "undefined" || data[field] == "NaNaNaN") { return false; } } return true; } function sendReserve(el) { var onlineMode = onlineModeUtil.toOnlineType(el.dataset.onlinemode); var workDate = new Date(el.dataset.workDate); var time = el.dataset.time.split('-'); var button = el.querySelector('.submit'); loader.btnLoader(button, true); let dataSchedule = { st: time[0], en: time[1], date: window.dateFormat(workDate), dcode: el.dataset.specialistid, depnum: el.dataset.depnum, filial: el.dataset.filialid, onlineType: onlineMode, schedident: el.dataset.schedident }; const isValid = validateData(dataSchedule); if (isValid) { window.webSDK.scheduleRecReserve(dataSchedule).then(function (resolve) { helper.sendRequest({'sid': el.dataset.specialistid}, '/api/doctor?sid='+ el.dataset.specialistid, 'GET').then(function (doctor) { loader.btnLoader(button, false); if (location.hostname == 'cabinet.sovamed.ru' || location.hostname == 'cabinet.wmtmed.ru') { var subject = 'Прямая запись с ЛК'; var tag = 'прямая_запись'; } else { var subject = 'Запись с сайта'; var tag = 'сайт_запись'; } let searchParams = new URLSearchParams(location.search); var data = { 'subject': subject, 'requestUrl': location.href, 'sessionId': helper.getSessionId(), 'phoneNumber': window.webSDK.data.user.phone, 'email': window.webSDK.data.user.email, 'fio': window.webSDK.data.user.fullName, 'tag': tag, 'comment' : { 'docName': doctor.data.name, 'address': doctor.data.filial.address, 'specialistId': doctor.data.sid, 'filialId': el.dataset.filialid, 'schedident': el.dataset.schedident, 'workDate': el.dataset.workDate, 'time': el.dataset.time }, 'customSources': { "source": searchParams.get('utm_source'), "medium": searchParams.get('utm_medium'), "campaign": searchParams.get('utm_campaign'), "content": searchParams.get('utm_content'), "term": searchParams.get('utm_term') } } if (window.bitrix === true) { data.regionId = helper.getRegionIdByHost() } helper.sendRequest(data, '/api/add-calltouch').then(function() { if (window.bitrix === true) { var popup = document.getElementById('popup') popup.querySelector('.modal-title').innerHTML = 'Запись на прием'; var message = '

Спасибо, Вы успешно записались на прием.
'; message += popup.dataset.comment + ', '; message += popup.dataset.workDate + ' ' + popup.dataset.time + '

'; message += '

Вы всегда можете отменить или перенести запись в личном кабинете по ссылке: '; message += 'https://cabinet.sovamed.ru

'; popup.querySelector('#popup-body').innerHTML = message; } else { // Показываем уведомление о записи в попапе перед редиректом var popup = document.getElementById('popup'); if (popup) { popup.querySelector('.modal-title').innerHTML = 'Запись на прием'; var message = '

Спасибо, Вы успешно записались на прием.
'; if (popup.dataset.comment) { message += popup.dataset.comment + ', '; } message += popup.dataset.workDate + ' ' + popup.dataset.time + '

'; if (onlineMode) { message += '

При отсутствии оплаты в течение 5 мин. онлайн консультация будет автоматически отменена.

'; } message += '

Вы будете перенаправлены в раздел "Приемы"...

'; popup.querySelector('#popup-body').innerHTML = message; $(popup).modal('show'); } // Показываем уведомление в alert-system var alertSystem = document.getElementById('alert-system'); if (alertSystem) { var msg = onlineMode ? 'Спасибо, вы успешно записались на онлайн-консультацию. При отсутствии оплаты в течение 5 мин. онлайн консультация будет автоматически отменена.' : 'Спасибо, вы успешно записались на прием.'; helper.addAlert(msg, alertSystem, 'alert-record-success', 'alert-success'); } // Делаем редирект на /case-history#doctor-success после успешного создания записи setTimeout(function() { const to = onlineMode ? '/case-history#online' : '/case-history#doctor-success' ; window.location.replace(helper.getHostname() + to); }, 2000); } }); }); }).catch(function (error) { loader.btnLoader(button, false); var alert = document.createElement('div'); alert.setAttribute('role', 'alert'); var divMsg = document.createElement('div'); divMsg.classList = 'alert-msg'; if (error.data.message !== '') { divMsg.innerHTML = error.data.message ; } if (error.data.checkData.text !== '') { divMsg.innerHTML = error.data.checkData.text; } alert.append(divMsg); if (window.bitrix === true) { alert.classList = 'alert alert-danger'; document.getElementById('popup-body').prepend(alert); } else { alert.classList = 'alert alert-danger alert-dismissible fade show'; var buttonClose = document.createElement('button'); buttonClose.classList = 'close'; buttonClose.dataset.dismiss ='alert'; buttonClose.setAttribute('aria-label', 'Close'); buttonClose.innerHTML = ''; alert.append(buttonClose); document.getElementById('alert-system').prepend(alert); $(el).modal('hide'); $('html, body').animate({scrollTop:0}, '300'); } }); } } module.exports = { sendReserve: sendReserve, renderFormRecord: renderFormRecord, renderFormBitrix: renderFormBitrix, renderFormAnonym: renderFormAnonym };