import { Controller } from 'stimulus';
import Cookies from 'js-cookie';
import { renderFormAnonym, sendReserve, renderFormBitrix } from "./../components/record";
const helper = require("./../components/helper.js");
const record = require("./../components/record.js");
/*
* This is an example Stimulus controller!
*
* Any element with a data-controller="specialistView" attribute will cause
* this controller to be executed. The name "specialistView" comes from the filename:
* detailDoctor_controller.js -> "specialistView"
*
* Delete this file or adapt it for your use!
*/
export default class extends Controller {
connect() {
let currentDate = this.element.dataset.st;
let bodyModal = document.getElementById('detail-specialist');
var btnNext = bodyModal.querySelector('.btn-next');
var btnPrev = bodyModal.querySelector('.btn-prev');
btnNext.addEventListener('click', function(evn) {
if (this.dataset.currentdate) {
var date = this.dataset.currentdate;
} else {
var date = currentDate;
}
btnPrev.dataset.currentdate = new Date(date);
btnPrev.classList.remove('d-none');
bodyModal.querySelector('.popup-btns').classList.remove('justify-content-end');
bodyModal.querySelector('.popup-btns').classList.add('justify-content-between');
date = getNextWeek(date);
this.dataset.currentdate = new Date(date);
var departmentId = bodyModal.dataset.departmentid;
var specialistId = bodyModal.dataset.specialistid;
var filialId = bodyModal.dataset.filialid;
var onlineMode = bodyModal.dataset.onlinemode;
pullInterval(specialistId, departmentId, filialId, date, onlineMode);
});
btnPrev.addEventListener('click', function(evn) {
if (this.dataset.currentdate) {
var date = this.dataset.currentdate;
} else {
var date = currentDate;
}
var nDate = new Date(currentDate).toLocaleString('ru', {year: 'numeric',month: 'numeric',day: 'numeric'});
var cDate = new Date(date).toLocaleString('ru', {year: 'numeric',month: 'numeric',day: 'numeric'});
if (nDate == cDate) {
this.classList.add('d-none');
bodyModal.querySelector('.popup-btns').classList.add('justify-content-end');
bodyModal.querySelector('.popup-btns').classList.remove('justify-content-between');
}
btnNext.dataset.currentdate = new Date(date);
var departmentId = bodyModal.dataset.departmentid;
var specialistId = bodyModal.dataset.specialistid;
var filialId = bodyModal.dataset.filialid;
var onlineMode = bodyModal.dataset.onlinemode;
pullInterval(specialistId, departmentId, filialId, date, onlineMode);
this.dataset.currentdate = new Date(getPrevWeek(date));
});
this.element.querySelectorAll('.show-specialist-detail').forEach(function(btn) {
btn.addEventListener('click', function(evn) {
btnPrev.classList.add('d-none');
bodyModal.querySelector('.popup-btns').classList.remove('justify-content-between');
bodyModal.querySelector('.popup-btns').classList.add('justify-content-end');
var departmentId = bodyModal.dataset.departmentid = btn.dataset.departmentid;
var specialistId = bodyModal.dataset.specialistid = btn.dataset.specialistid;
bodyModal.dataset.company = btn.dataset.company;
var filialId = bodyModal.dataset.filialid = btn.dataset.filialid;
var onlineMode = bodyModal.dataset.onlinemode = btn.dataset.onlinemode;
pullInterval(specialistId, departmentId, filialId, currentDate, onlineMode);
pullDoctor(specialistId);
});
});
function pullDoctor(doctor) {
var modal = bodyModal.querySelector('.popup__content');
$.ajax({
dataType: "json",
method: "GET",
crossDomain: true,
url: "/api/doctor",
data: {
'sid': doctor,
},
beforeSend() {
modal.querySelector('.loading').classList.remove('d-none');
var aboutSpecialist = modal.querySelector('.about-specialist')
aboutSpecialist.classList.add('d-none');
aboutSpecialist.querySelector('.popup-staff__img').remove();
},
success(data) {
modal.querySelector('.loading').classList.add('d-none');
modal.querySelector('.about-specialist').classList.remove('d-none');
var content = modal.querySelector('.about-specialist');
var img = document.createElement('div');
img.src = data.data.img;
img.classList = 'img-vr popup-staff__img';
img.style.background = 'url(' + data.data.img + ') no-repeat';
img.style.backgroundSize = 'cover';
img.style.backgroundPosition = 'center -5px';
content.prepend(img);
content.querySelector('.popup-staff__name').innerHTML = data.data.name;
content.querySelector('.popup-staff__position').innerHTML = '';
if (data.data.speciality) {
content.querySelector('.popup-staff__position').innerHTML = data.data.speciality;
}
content.querySelector('.popup-staff__exp').innerHTML = '';
if (data.data.experience) {
content.querySelector('.popup-staff__exp').innerHTML = 'Стаж:' + data.data.experience;
}
}
});
}
function pullInterval(doctor, department, filial, date, onlineMode) {
let wrap = bodyModal.querySelector('.calendar-wrap');
let calendarBody = bodyModal.querySelector('.calendar-body');
$.ajax({
dataType: "json",
method: "GET",
crossDomain: true,
url: "/api/interval",
data: {
'update' : true,
'doctor': doctor,
'department': department,
'filial': filial,
'startInterval': getMonday(date),
'endInterval': getSunday(date),
'onlineMode': onlineMode
},
beforeSend() {
bodyModal.querySelector('.current-dates').innerHTML = getMonday(date) + ' - ' + getSunday(date);
wrap.innerHTML = "Идет загрузка...";
},
success(response) {
var isNotFree = true;
wrap.innerHTML = "";
response.data.intervalsData.forEach(function(el) {
if (el.isFree == true) {
var date = new Date(el.workDate).toLocaleString('ru', {
weekday: 'long',
month: 'long',
day: 'numeric'
});
var calBody = document.createElement('div');
calBody.classList = 'calendar-body popup-inteval__item';
var timeDiv = document.createElement('div');
timeDiv.classList = 'popup-inteval__date';
timeDiv.innerHTML = date + ' ' + el.startInterval + '—'+ el.endInterval + '';
calBody.append(timeDiv);
var intervalTimeDiv = document.createElement('div');
intervalTimeDiv.classList = 'time-intervals';
var intervalDiv = document.createElement('div');
intervalDiv.classList = 'interval intervals-wrap';
intervalTimeDiv.append(intervalDiv);
for (let [key, item] of Object.entries(el.intervals)) {
if (item.isFree == true) {
isNotFree = false;
var spanInterval = document.createElement('span');
spanInterval.classList = 'time available';
spanInterval.innerText = item.startTime;
spanInterval.dataset.workDate = item.workDate;
spanInterval.dataset.schedident = item.schedident;
spanInterval.dataset.time = item.time;
spanInterval.dataset.onlinemode = item.onlineMode;
spanInterval.dataset.rnum = item.rNum;
spanInterval.dataset.specialistid = doctor;
spanInterval.dataset.filialid = filial;
spanInterval.dataset.department = department;
spanInterval.addEventListener('click', function (evn) {
var popupWrap = document.getElementById('popup');
evn.target.dataset.onlinemode = item.onlineMode;
if (record.renderFormRecord(response.data.userInfo, evn.target.dataset)) {
if (response.data.userInfo) {
evn.target.innerHTML = '
';
record.sendReserve(popupWrap)
} else {
$(popupWrap).modal('show');
}
}
})
intervalDiv.append(spanInterval);
}
}
if (!isNotFree) {
calBody.append(intervalDiv);
wrap.append(calBody);
}
}
});
if (isNotFree) {
wrap.innerHTML = "Всё занято. Выберите другую неделю.";
}
}
});
}
function getMonday(date) {
date = new Date(date);
return new Date(date.setDate(date.getDate() - date.getDay() + 1))
.toLocaleString('ru', {
year: 'numeric',
month: 'numeric',
day: 'numeric',
});
}
function getSunday(date) {
date = new Date(date);
return new Date(date.setDate(date.getDate() - date.getDay() + 7))
.toLocaleString('ru', {
year: 'numeric',
month: 'numeric',
day: 'numeric',
});
}
function getNextWeek(date) {
date = new Date(date);
return new Date(date.getFullYear(), date.getMonth(), date.getDate() + 7);
}
function getPrevWeek(date) {
date = new Date(date);
return new Date(date.getFullYear(), date.getMonth(), date.getDate() - 7);
}
}
}