easyappointments/assets/js/utils/calendar_table_view.min.js

1 line
40 KiB
JavaScript
Executable File

"use strict";function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var t,r=1;r<arguments.length;r++)t=null==arguments[r]?{}:arguments[r],r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))});return e}function _defineProperty(obj,key,value){return key=_toPropertyKey(key),key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}App.Utils.CalendarTableView=function(){function addEventListeners(){$calendar.on("click",".calendar-header .btn.previous",function(){var dayInterval=$selectFilterItem.val(),currentDate=App.Utils.UI.getDateTimePickerValue($selectDate),startDate=moment(currentDate).subtract(1,"days"),endDate=startDate.clone().add(dayInterval-1,"days");App.Utils.UI.setDateTimePickerValue($selectDate,startDate.toDate()),createView(startDate.toDate(),endDate.toDate())}),$calendar.on("click",".calendar-header .btn.next",function(){var dayInterval=$selectFilterItem.val(),currentDate=App.Utils.UI.getDateTimePickerValue($selectDate),startDate=moment(currentDate).add(1,"days"),endDate=startDate.clone().add(dayInterval-1,"days");App.Utils.UI.setDateTimePickerValue($selectDate,startDate.toDate()),createView(startDate.toDate(),endDate.toDate())}),$calendarToolbar.on("change","#select-filter-item",function(){var dayInterval=$selectFilterItem.val(),currentDate=App.Utils.UI.getDateTimePickerValue($selectDate),startDate=moment(currentDate),endDate=startDate.clone().add(dayInterval-1,"days");createView(startDate.toDate(),endDate.toDate())}),$calendarToolbar.on("click","#reload-appointments",function(){var dayInterval=$selectFilterItem.val(),currentDate=App.Utils.UI.getDateTimePickerValue($selectDate),startDateMoment=moment(currentDate),startDate=startDateMoment.toDate(),endDateMoment=startDateMoment.clone().add(dayInterval-1,"days"),endDate=endDateMoment.toDate();App.Http.Calendar.getCalendarAppointmentsForTableView(startDate,endDate).done(function(response){for(var currentDate=startDate;currentDate<=endDate;)$(".calendar-view .date-column").each(function(index,dateColumn){var $dateColumn=$(dateColumn),date=new Date($dateColumn.data("date"));return moment(currentDate).format("YYYY-MM-DD")!==moment(date).format("YYYY-MM-DD")||void($dateColumn.find(".date-column-title").text(App.Utils.Date.format(date,vars("date_format"),vars("time_format"))),$dateColumn.find(".provider-column").each(function(index,providerColumn){var $providerColumn=$(providerColumn),provider=$providerColumn.data("provider");$providerColumn.find(".calendar-wrapper").data("fullCalendar").getEventSources().forEach(function(eventSource){return eventSource.remove()}),createNonWorkingHours($providerColumn.find(".calendar-wrapper"),$providerColumn.data("provider")),createAppointments($providerColumn,response.appointments),createUnavailabilities($providerColumn,response.unavailabilities),createBlockedPeriods($providerColumn,response.blocked_periods);var workingPlan=JSON.parse(provider.settings.working_plan),day=moment(date).format("dddd").toLowerCase();if(workingPlan[day]){var breaks=workingPlan[day].breaks;createBreaks($providerColumn,breaks)}}))}),currentDate=moment(currentDate).add({days:1}).toDate()})}),$(window).on("resize",function(){setCalendarViewSize()}),$calendar.on("click",".close-popover",function(event){$popoverTarget&&$popoverTarget.popover("dispose")}),$calendar.on("click",".edit-popover",function(event){$popoverTarget&&$popoverTarget.popover("dispose");var startMoment,endMoment;if(lastFocusedEventData.extendedProps.data.workingPlanException){var originalDate=lastFocusedEventData.extendedProps.data.date,workingPlanException=lastFocusedEventData.extendedProps.data.workingPlanException,provider=lastFocusedEventData.extendedProps.data.provider;App.Components.WorkingPlanExceptionsModal.edit(originalDate,workingPlanException).done(function(date,workingPlanException){var successCallback=function successCallback(){App.Layouts.Backend.displayNotification(lang("working_plan_exception_saved"));var workingPlanExceptions=JSON.parse(provider.settings.working_plan_exceptions)||{};for(var index in workingPlanExceptions[date]=workingPlanException,date!==originalDate&&delete workingPlanExceptions[originalDate],vars("available_providers")){var availableProvider=vars("available_providers")[index];if(+availableProvider.id===+provider.id){availableProvider.settings.working_plan_exceptions=JSON.stringify(workingPlanExceptions);break}}$reloadAppointments.trigger("click")};App.Http.Calendar.saveWorkingPlanException(date,workingPlanException,provider.id,successCallback,null,originalDate)})}else if(!1===lastFocusedEventData.extendedProps.data.is_unavailability){var appointment=lastFocusedEventData.extendedProps.data;App.Components.AppointmentsModal.resetModal(),$appointmentsModal.find(".modal-header h3").text(lang("edit_appointment_title")),$appointmentsModal.find("#appointment-id").val(appointment.id),$appointmentsModal.find("#select-service").val(appointment.id_services).trigger("change"),$appointmentsModal.find("#select-provider").val(appointment.id_users_provider),startMoment=moment(appointment.start_datetime),App.Utils.UI.setDateTimePickerValue($appointmentsModal.find("#start-datetime"),startMoment.toDate()),endMoment=moment(appointment.end_datetime),App.Utils.UI.setDateTimePickerValue($appointmentsModal.find("#end-datetime"),endMoment.toDate());var customer=appointment.customer;$appointmentsModal.find("#customer-id").val(appointment.id_users_customer),$appointmentsModal.find("#first-name").val(customer.first_name),$appointmentsModal.find("#last-name").val(customer.last_name),$appointmentsModal.find("#email").val(customer.email),$appointmentsModal.find("#phone-number").val(customer.phone_number),$appointmentsModal.find("#address").val(customer.address),$appointmentsModal.find("#city").val(customer.city),$appointmentsModal.find("#zip-code").val(customer.zip_code),$appointmentsModal.find("#language").val(customer.language),$appointmentsModal.find("#timezone").val(customer.timezone),$appointmentsModal.find("#appointment-location").val(appointment.location),$appointmentsModal.find("#appointment-status").val(appointment.status),$appointmentsModal.find("#appointment-notes").val(appointment.notes),$appointmentsModal.find("#customer-notes").val(customer.notes),$appointmentsModal.find("#custom-field-1").val(customer.custom_field_1),$appointmentsModal.find("#custom-field-2").val(customer.custom_field_2),$appointmentsModal.find("#custom-field-3").val(customer.custom_field_3),$appointmentsModal.find("#custom-field-4").val(customer.custom_field_4),$appointmentsModal.find("#custom-field-5").val(customer.custom_field_5),App.Components.ColorSelection.setColor($appointmentsModal.find("#appointment-color"),appointment.color),$appointmentsModal.modal("show")}else{var unavailability=lastFocusedEventData.extendedProps.data;unavailability.start_datetime=moment(lastFocusedEventData.start).format("YYYY-MM-DD HH:mm:ss"),startMoment=moment(unavailability.start_datetime),unavailability.end_datetime=moment(lastFocusedEventData.end).format("YYYY-MM-DD HH:mm:ss"),endMoment=moment(unavailability.end_datetime),App.Components.UnavailabilitiesModal.resetModal(),$unavailabilitiesModal.find(".modal-header h3").text(lang("edit_unavailability_title")),App.Utils.UI.setDateTimePickerValue($("#unavailability-start"),startMoment.toDate()),App.Utils.UI.setDateTimePickerValue($("#unavailability-end"),endMoment.toDate()),$unavailabilitiesModal.find("#unavailability-id").val(unavailability.id),$unavailabilitiesModal.find("#unavailability-provider").val(unavailability.id_users_provider),$unavailabilitiesModal.find("#unavailability-notes").val(unavailability.notes),$unavailabilitiesModal.modal("show")}}),$calendar.on("click",".delete-popover",function(event){if($popoverTarget&&$popoverTarget.popover("dispose"),lastFocusedEventData.extendedProps.data.hasOwnProperty("id_roles")){var date=moment(lastFocusedEventData.start).format("YYYY-MM-DD"),providerId=lastFocusedEventData.extendedProps.data.id;App.Http.Calendar.deleteWorkingPlanException(date,providerId).done(function(){$("#message-box").dialog("close");var workingPlanExceptions=JSON.parse(lastFocusedEventData.extendedProps.data.settings.working_plan_exceptions);delete workingPlanExceptions[moment(lastFocusedEventData.start).format("YYYY-MM-DD")],lastFocusedEventData.extendedProps.data.settings.working_plan_exceptions=JSON.stringify(workingPlanExceptions),$reloadAppointments.trigger("click")})}else if(!lastFocusedEventData.extendedProps.data.is_unavailability){var buttons=[{text:lang("cancel"),click:function click(event,messageModal){messageModal.hide()}},{text:lang("delete"),click:function click(event,messageModal){var appointmentId=lastFocusedEventData.extendedProps.data.id,cancellationReason=$("#cancellation-reason").val();App.Http.Calendar.deleteAppointment(appointmentId,cancellationReason).done(function(){messageModal.hide(),$reloadAppointments.trigger("click")})}}];App.Utils.Message.show(lang("delete_appointment_title"),lang("write_appointment_removal_reason"),buttons),$("<textarea/>",{class:"form-control w-100",id:"cancellation-reason",rows:"3"}).appendTo("#message-modal .modal-body")}else{var unavailabilityId=lastFocusedEventData.extendedProps.data.id;App.Http.Calendar.deleteUnavailability(unavailabilityId).done(function(){$reloadAppointments.trigger("click")})}})}function createHeader(){$calendarFilter.find("select").empty().append(new Option("1 ".concat(lang("day")),"1")).append(new Option("3 ".concat(lang("days")),"3"));var $calendarHeader=$("<div/>",{class:"calendar-header"}).appendTo("#calendar");$("<button/>",{class:"btn btn-xs btn-outline-secondary previous me-2",html:[$("<span/>",{class:"fas fa-chevron-left"})]}).appendTo($calendarHeader),$selectDate=$("<input/>",{type:"text",class:"form-control d-inline-block select-date me-2",value:App.Utils.Date.format(new Date,vars("date_format"),vars("time_format"),!1)}).appendTo($calendarHeader),$("<button/>",{class:"btn btn-xs btn-outline-secondary next",html:[$("<span/>",{class:"fas fa-chevron-right"})]}).appendTo($calendarHeader),App.Utils.UI.initializeDatePicker($calendarHeader.find(".select-date"),{onChange:function onChange(selectedDates){var startDate=selectedDates[0],endDate=moment(startDate).add(parseInt($selectFilterItem.val())-1,"days").toDate();createView(startDate,endDate)}});var providers=vars("available_providers").filter(function(provider){return vars("role_slug")===App.Layouts.Backend.DB_SLUG_ADMIN||vars("role_slug")===App.Layouts.Backend.DB_SLUG_SECRETARY&&-1!==vars("secretary_providers").indexOf(+provider.id)||vars("role_slug")===App.Layouts.Backend.DB_SLUG_PROVIDER&&+provider.id===+vars("user_id")});$("<label/>",{text:lang("provider")}).appendTo($calendarHeader),$filterProvider=$("<select/>",{id:"filter-provider",multiple:"multiple",on:{change:function change(){var firstColumnDate=$(".calendar-view .date-column:first").data("date"),startDateMoment=moment(firstColumnDate),endDateMoment=moment(firstColumnDate).add(parseInt($selectFilterItem.val())-1,"day");createView(startDateMoment.toDate(),endDateMoment.toDate())}}}).appendTo($calendarHeader),vars("role_slug")===App.Layouts.Backend.DB_SLUG_PROVIDER?providers.forEach(function(provider){+provider.id===+vars("user_id")&&$filterProvider.append(new Option(provider.first_name+" "+provider.last_name,provider.id))}):providers.forEach(function(provider){$filterProvider.append(new Option(provider.first_name+" "+provider.last_name,provider.id))}),App.Utils.UI.initializeDropdown($filterProvider);var services=vars("available_services").filter(function(service){var provider=providers.find(function(provider){return-1!==provider.services.indexOf(service.id)});return vars("role_slug")===App.Layouts.Backend.DB_SLUG_ADMIN||provider});$("<label/>",{text:lang("service")}).appendTo($calendarHeader),$filterService=$("<select/>",{id:"filter-service",multiple:"multiple",on:{change:function change(){var firstColumnDate=$(".calendar-view .date-column:first").data("date"),startDateMoment=moment(firstColumnDate),endDateMoment=moment(firstColumnDate).add({days:parseInt($selectFilterItem.val())-1});createView(startDateMoment.toDate(),endDateMoment.toDate())}}}).appendTo($calendarHeader),services.forEach(function(service){$filterService.append(new Option(service.name,service.id))}),App.Utils.UI.initializeDropdown($filterService)}function createView(startDate,endDate){$("#calendar .calendar-header .btn").addClass("disabled").prop("disabled",!0);var providerView={};$(".provider-column").each(function(index,providerColumn){var $providerColumn=$(providerColumn),providerId=$providerColumn.data("provider").id;providerView[providerId]=$providerColumn.find(".calendar-wrapper").data("fullCalendar").view.type}),$("#calendar .calendar-view").remove();var $calendarView=$("<div/>",{class:"calendar-view"}).appendTo("#calendar");$calendarView.data({startDate:moment(startDate).format("YYYY-MM-DD"),endDate:moment(endDate).format("YYYY-MM-DD")});var $wrapper=$("<div/>").appendTo($calendarView);App.Http.Calendar.getCalendarAppointmentsForTableView(startDate,endDate).done(function(response){for(var currentDate=startDate;currentDate<=endDate;)createDateColumn($wrapper,currentDate,response),currentDate=moment(currentDate).add({days:1}).toDate();setCalendarViewSize(),$("#calendar .calendar-header .btn").removeClass("disabled").prop("disabled",!1),$(".provider-column").each(function(index,providerColumn){var $providerColumn=$(providerColumn),providerId=$providerColumn.data("provider").id;$providerColumn.find(".calendar-wrapper").data("fullCalendar").changeView(providerView[providerId]||"timeGridDay")})})}function createDateColumn($wrapper,date,events){var $dateColumn=$("<div/>",{class:"date-column"}).appendTo($wrapper);$dateColumn.data("date",date.getTime()),$("<h5/>",{class:"date-column-title",text:App.Utils.Date.format(date,vars("date_format"),vars("time_format"))}).appendTo($dateColumn);var filterProviderIds=$filterProvider.val().map(function(filterProviderId){return+filterProviderId}),filterServiceIds=$filterService.val().map(function(filterServiceId){return+filterServiceId}),providers=vars("available_providers").filter(function(provider){var servedServiceIds=provider.services.filter(function(serviceId){var matches=filterServiceIds.filter(function(filterServiceId){return+serviceId===+filterServiceId});return matches.length});return!filterProviderIds.length&&!filterServiceIds.length||filterProviderIds.length&&!filterServiceIds.length&&-1!==filterProviderIds.indexOf(provider.id)||!filterProviderIds.length&&filterServiceIds.length&&servedServiceIds.length||filterProviderIds.length&&filterServiceIds.length&&servedServiceIds.length&&-1!==filterProviderIds.indexOf(provider.id)});"provider"===vars("role_slug")&&vars("available_providers").forEach(function(provider){+provider.id===+vars("user_id")&&(providers=[provider])}),"secretary"===vars("role_slug")&&(providers=[],vars("available_providers").forEach(function(provider){-1<vars("secretary_providers").indexOf(provider.id)&&providers.push(provider)})),providers.forEach(function(provider){createProviderColumn($dateColumn,date,provider,events)})}function createProviderColumn($dateColumn,date,provider,events){if(0!==provider.services.length){var $providerColumn=$("<div/>",{class:"provider-column"}).appendTo($dateColumn);$providerColumn.data("provider",provider),createCalendar($providerColumn,date,provider),createNonWorkingHours($providerColumn.find(".calendar-wrapper"),provider),createAppointments($providerColumn,events.appointments),createUnavailabilities($providerColumn,events.unavailabilities),createBlockedPeriods($providerColumn,events.blocked_periods)}}function getCalendarHeight(){var result=window.innerHeight-$footer.outerHeight()-$header.outerHeight()-60;return 800<result?result:800}function createCalendar($providerColumn,goToDate,provider){var $wrapper=$("<div/>",{class:"calendar-wrapper"}).appendTo($providerColumn),columnFormat="";switch(vars("date_format")){case"DMY":columnFormat="ddd D/M";break;case"MDY":case"YMD":columnFormat="ddd M/D";break;default:throw new Error("Invalid date format setting provided!",vars("date_format"))}var timeFormat="",slotTimeFormat="";switch(vars("time_format")){case"military":timeFormat="HH:mm",slotTimeFormat="HH:mm";break;case"regular":timeFormat="h:mm a",slotTimeFormat="h a";break;default:throw new Error("Invalid time format setting provided!"+vars("time_format"))}var firstWeekday=vars("first_weekday"),firstWeekdayNumber=App.Utils.Date.getWeekdayId(firstWeekday),fullCalendar=new FullCalendar.Calendar($wrapper[0],{locale:vars("language_code"),initialView:"timeGridDay",nowIndicator:!0,height:getCalendarHeight(),editable:!0,firstDay:firstWeekdayNumber,slotDuration:"00:15:00",snapDuration:"00:15:00",scrollTime:"07:00:00",slotLabelInterval:"01:00",eventTimeFormat:timeFormat,eventTextColor:"#333",eventColor:"#7cbae8",slotLabelFormat:slotTimeFormat,allDayContent:lang("all_day"),dayHeaderFormat:columnFormat,selectable:!0,selectHelper:!0,themeSystem:"bootstrap5",headerToolbar:{left:"listDay,timeGridDay",center:"",right:""},buttonText:{today:lang("today"),day:lang("day"),week:lang("week"),month:lang("month"),timeGridDay:lang("calendar"),listDay:lang("list")},eventClick:onEventClick,eventResize:onEventResize,eventDrop:onEventDrop,select:function select(info){return onSelect(info,fullCalendar)}});fullCalendar.render(),$wrapper.data("fullCalendar",fullCalendar),fullCalendar.gotoDate(goToDate),$("<h6/>",{text:provider.first_name+" "+provider.last_name}).prependTo($providerColumn)}function createNonWorkingHours($calendar,provider){var workingPlan=JSON.parse(provider.settings.working_plan),workingPlanExceptions=JSON.parse(provider.settings.working_plan_exceptions)||{},view=$calendar.data("fullCalendar").view,start=moment(view.currentStart).clone(),end=moment(view.currentEnd).clone(),selDayName=start.format("dddd").toLowerCase(),selDayDate=start.format("YYYY-MM-DD"),calendarEventSource=[];if(workingPlanExceptions[selDayDate]){workingPlan[selDayName]=workingPlanExceptions[selDayDate];var workingPlanExceptionStart=selDayDate+" "+workingPlan[selDayName].start,workingPlanExceptionEnd=selDayDate+" "+workingPlan[selDayName].end,workingPlanExceptionEvent={title:lang("working_plan_exception"),start:moment(workingPlanExceptionStart,"YYYY-MM-DD HH:mm",!0),end:moment(workingPlanExceptionEnd,"YYYY-MM-DD HH:mm",!0).add(1,"day"),allDay:!0,color:"#879DB4",editable:!1,className:"fc-working-plan-exception fc-custom",data:{date:selDayDate,workingPlanException:workingPlanExceptions[selDayDate],provider:provider}};calendarEventSource.push(workingPlanExceptionEvent)}if(null===workingPlan[selDayName]){var nonWorkingDay={title:lang("not_working"),start:start,end:end,allDay:!1,color:"#BEBEBE",editable:!1,display:"background",className:"fc-unavailability"};return calendarEventSource.push(nonWorkingDay),void $calendar.data("fullCalendar").addEventSource(calendarEventSource)}var workDateStart=moment(start.format("YYYY-MM-DD")+" "+workingPlan[selDayName].start);if(start<workDateStart){var unavailabilityPeriod={title:lang("not_working"),start:start.toDate(),end:workDateStart.toDate(),allDay:!1,color:"#BEBEBE",editable:!1,display:"background",className:"fc-unavailability"};calendarEventSource.push(unavailabilityPeriod)}var workDateEnd=moment(start.format("YYYY-MM-DD")+" "+workingPlan[selDayName].end);if(end>workDateEnd){var _unavailabilityPeriod={title:lang("not_working"),start:workDateEnd.toDate(),end:end.toDate(),allDay:!1,color:"#BEBEBE",editable:!1,display:"background",className:"fc-unavailability"};calendarEventSource.push(_unavailabilityPeriod)}var breakStart,breakEnd;workingPlan[selDayName].breaks.forEach(function(currentBreak){breakStart=moment(start.format("YYYY-MM-DD")+" "+currentBreak.start),breakEnd=moment(start.format("YYYY-MM-DD")+" "+currentBreak.end);var unavailabilityPeriod={title:lang("break"),start:breakStart.toDate(),end:breakEnd.toDate(),allDay:!1,color:"#BEBEBE",editable:!1,display:"background",className:"fc-unavailability fc-break"};calendarEventSource.push(unavailabilityPeriod)}),$calendar.data("fullCalendar").addEventSource(calendarEventSource)}function createAppointments($providerColumn,appointments){if(0!==appointments.length){var filterServiceIds=$filterService.val().map(function(serviceId){return+serviceId});appointments=appointments.filter(function(appointment){return!filterServiceIds.length||filterServiceIds.includes(appointment.id_services)});var calendarEvents=[];for(var index in appointments){var appointment=appointments[index];if(+appointment.id_users_provider===+$providerColumn.data("provider").id){var title=[appointment.service.name],customerInfo=[];appointment.customer.first_name&&customerInfo.push(appointment.customer.first_name),appointment.customer.last_name&&customerInfo.push(appointment.customer.last_name),customerInfo.length&&title.push(customerInfo.join(" ")),calendarEvents.push({id:appointment.id,title:title.join(" - "),start:moment(appointment.start_datetime).toDate(),end:moment(appointment.end_datetime).toDate(),allDay:!1,color:appointment.color,data:appointment})}}$providerColumn.find(".calendar-wrapper").data("fullCalendar").addEventSource(calendarEvents)}}function createUnavailabilities($providerColumn,unavailabilities){if(0!==unavailabilities.length){var calendarEventSource=[];for(var index in unavailabilities){var unavailability=unavailabilities[index];if(+unavailability.id_users_provider===+$providerColumn.data("provider").id){var event={title:lang("unavailability"),start:moment(unavailability.start_datetime).toDate(),end:moment(unavailability.end_datetime).toDate(),allDay:!1,color:"#879DB4",editable:!0,className:"fc-unavailability fc-custom",data:unavailability};calendarEventSource.push(event)}}$providerColumn.find(".calendar-wrapper").data("fullCalendar").addEventSource(calendarEventSource)}}function createBlockedPeriods($providerColumn,blockedPeriods){if(0!==(null===blockedPeriods||void 0===blockedPeriods?void 0:blockedPeriods.length)){var calendarEventSource=[];for(var index in blockedPeriods){var blockedPeriod=blockedPeriods[index],event={title:blockedPeriod.name,start:moment(blockedPeriod.start_datetime).toDate(),end:moment(blockedPeriod.end_datetime).toDate(),allDay:!0,backgroundColor:"#d65069",borderColor:"#d65069",textColor:"#ffffff",editable:!1,className:"fc-blocked-period fc-unavailability",data:blockedPeriod};calendarEventSource.push(event)}$providerColumn.find(".calendar-wrapper").data("fullCalendar").addEventSource(calendarEventSource)}}function createBreaks($providerColumn,breaks){if(0!==breaks.length){var currentDate=new Date($providerColumn.parents(".date-column").data("date")),$tbody=$providerColumn.find("table tbody"),_loop=function _loop(){var entry=breaks[index],startHour=entry.start.split(":"),eventDate=new Date(currentDate.getFullYear(),currentDate.getMonth(),currentDate.getDate(),startHour[0],startHour[1]),endHour=entry.end.split(":"),endDate=new Date(currentDate.getFullYear(),currentDate.getMonth(),currentDate.getDate(),endHour[0],endHour[1]),eventDuration=Math.round((endDate-eventDate)/6e4),$event=$("<div/>",{class:"event unavailability break"});$event.html(lang("break")+" <span class=\"hour\">"+moment(eventDate).format("HH:mm")+"</span> ("+eventDuration+"')"),$event.data(entry),$tbody.find("tr").each(function(index,tr){var $td=$(tr).find("td:first"),cellDate=moment(currentDate).set({hour:parseInt($td.text().split(":")[0]),minute:parseInt($td.text().split(":")[1])}).toDate();if(eventDate<cellDate)return moment(eventDate).format("HH:mm")===$(tr).prev().find("td").eq(0).text()&&$event.find(".hour").remove(),$(tr).prev().find("td:gt(0)").each(function(index,td){$event.clone().appendTo($(td))}),!1})};for(var index in breaks)_loop()}}function getEventNotes(event){if(!event.extendedProps||!event.extendedProps.data||!event.extendedProps.data.notes)return"-";var notes=event.extendedProps.data.notes;return 100<notes.length?notes.substring(0,100)+"...":notes}function onEventClick(info){$popoverTarget&&$popoverTarget.popover("dispose");var $html,displayEdit,displayDelete,$target=$(info.el);if($target.hasClass("fc-unavailability")){displayEdit=$target.hasClass("fc-custom")&&!0===vars("privileges").appointments.edit?"":"d-none",displayDelete=$target.hasClass("fc-custom")&&!0===vars("privileges").appointments["delete"]?"":"d-none";var startDateTimeObject=info.event.start,endDateTimeObject=info.event.end||info.event.start;info.event.extendedProps.data&&(startDateTimeObject=new Date(info.event.extendedProps.data.start_datetime),endDateTimeObject=new Date(info.event.extendedProps.data.end_datetime)),$html=$("<div/>",{html:[$("<strong/>",{class:"d-inline-block me-2",text:lang("start")}),$("<span/>",{text:App.Utils.Date.format(moment(startDateTimeObject).format("YYYY-MM-DD HH:mm:ss"),vars("date_format"),vars("time_format"),!0)}),$("<br/>"),$("<strong/>",{class:"d-inline-block me-2",text:lang("end")}),$("<span/>",{text:App.Utils.Date.format(moment(endDateTimeObject).format("YYYY-MM-DD HH:mm:ss"),vars("date_format"),vars("time_format"),!0)}),$("<br/>"),$("<strong/>",{class:"d-inline-block me-2",text:lang("notes")}),$("<span/>",{text:getEventNotes(info.event)}),$("<br/>"),App.Utils.CalendarEventPopover.renderCustomContent(info),$("<hr/>"),$("<div/>",{class:"d-flex justify-content-center",html:[$("<button/>",{class:"close-popover btn btn-outline-secondary me-2",html:[$("<i/>",{class:"fas fa-ban me-2"}),$("<span/>",{text:lang("close")})]}),$("<button/>",{class:"delete-popover btn btn-outline-secondary me-2 "+displayDelete,html:[$("<i/>",{class:"fas fa-trash-alt me-2"}),$("<span/>",{text:lang("delete")})]}),$("<button/>",{class:"edit-popover btn btn-primary "+displayEdit,html:[$("<i/>",{class:"fas fa-edit me-2"}),$("<span/>",{text:lang("edit")})]})]})]})}else if($target.hasClass("fc-working-plan-exception"))displayEdit=$target.hasClass("fc-custom")&&!0===vars("privileges").appointments.edit?"":"d-none",displayDelete=$target.hasClass("fc-custom")&&!0===vars("privileges").appointments["delete"]?"":"d-none",$html=$("<div/>",{html:[$("<strong/>",{class:"d-inline-block me-2",text:lang("provider")}),$("<span/>",{text:info.event.extendedProps.data?info.event.extendedProps.data.provider.first_name+" "+info.event.extendedProps.data.provider.last_name:"-"}),$("<br/>"),$("<strong/>",{class:"d-inline-block me-2",text:lang("start")}),$("<span/>",{text:App.Utils.Date.format(info.event.extendedProps.data.date+" "+info.event.extendedProps.data.workingPlanException.start,vars("date_format"),vars("time_format"),!0)}),$("<br/>"),$("<strong/>",{class:"d-inline-block me-2",text:lang("end")}),$("<span/>",{text:App.Utils.Date.format(info.event.extendedProps.data.date+" "+info.event.extendedProps.data.workingPlanException.end,vars("date_format"),vars("time_format"),!0)}),$("<br/>"),$("<strong/>",{class:"d-inline-block me-2",text:lang("timezone")}),$("<span/>",{text:vars("timezones")[info.event.extendedProps.data.provider.timezone]}),$("<br/>"),App.Utils.CalendarEventPopover.renderCustomContent(info),$("<hr/>"),$("<div/>",{class:"d-flex justify-content-center",html:[$("<button/>",{class:"close-popover btn btn-outline-secondary me-2",html:[$("<i/>",{class:"fas fa-ban me-2"}),$("<span/>",{text:lang("close")})]}),$("<button/>",{class:"delete-popover btn btn-outline-secondary me-2 "+displayDelete,html:[$("<i/>",{class:"fas fa-trash-alt me-2"}),$("<span/>",{text:lang("delete")})]}),$("<button/>",{class:"edit-popover btn btn-primary "+displayEdit,html:[$("<i/>",{class:"fas fa-edit me-2"}),$("<span/>",{text:lang("edit")})]})]})]});else{displayEdit=!0===vars("privileges").appointments.edit?"":"d-none",displayDelete=!0===vars("privileges").appointments["delete"]?"":"d-none";var customerInfo=[];info.event.extendedProps.data.customer.first_name&&customerInfo.push(info.event.extendedProps.data.customer.first_name),info.event.extendedProps.data.customer.last_name&&customerInfo.push(info.event.extendedProps.data.customer.last_name),$html=$("<div/>",{html:[$("<strong/>",{class:"d-inline-block me-2",text:lang("start")}),$("<span/>",{text:App.Utils.Date.format(moment(info.event.start).format("YYYY-MM-DD HH:mm:ss"),vars("date_format"),vars("time_format"),!0)}),$("<br/>"),$("<strong/>",{class:"d-inline-block me-2",text:lang("end")}),$("<span/>",{text:App.Utils.Date.format(moment(info.event.end).format("YYYY-MM-DD HH:mm:ss"),vars("date_format"),vars("time_format"),!0)}),$("<br/>"),$("<strong/>",{class:"d-inline-block me-2",text:lang("timezone")}),$("<span/>",{text:vars("timezones")[info.event.extendedProps.data.provider.timezone]}),$("<br/>"),$("<strong/>",{class:"d-inline-block me-2",text:lang("status")}),$("<span/>",{text:info.event.extendedProps.data.status||"-"}),$("<br/>"),$("<strong/>",{class:"d-inline-block me-2",text:lang("service")}),$("<span/>",{text:info.event.extendedProps.data.service.name}),$("<br/>"),$("<strong/>",{class:"d-inline-block me-2",text:lang("provider")}),App.Utils.CalendarEventPopover.renderMapIcon(info.event.extendedProps.data.provider),$("<span/>",{text:info.event.extendedProps.data.provider.first_name+" "+info.event.extendedProps.data.provider.last_name}),$("<br/>"),$("<strong/>",{class:"d-inline-block me-2",text:lang("customer")}),App.Utils.CalendarEventPopover.renderMapIcon(info.event.extendedProps.data.customer),$("<span/>",{text:customerInfo.length?customerInfo.join(" "):"-"}),$("<br/>"),$("<strong/>",{class:"d-inline-block me-2",text:lang("email")}),App.Utils.CalendarEventPopover.renderMailIcon(info.event.extendedProps.data.customer.email),$("<span/>",{text:info.event.extendedProps.data.customer.email||"-"}),$("<br/>"),$("<strong/>",{class:"d-inline-block me-2",text:lang("phone")}),App.Utils.CalendarEventPopover.renderPhoneIcon(info.event.extendedProps.data.customer.phone_number),$("<span/>",{text:info.event.extendedProps.data.customer.phone_number||"-"}),$("<br/>"),$("<strong/>",{class:"d-inline-block me-2",text:lang("notes")}),$("<span/>",{text:getEventNotes(info.event)}),$("<br/>"),App.Utils.CalendarEventPopover.renderCustomContent(info),$("<hr/>"),$("<div/>",{class:"d-flex justify-content-center",html:[$("<button/>",{class:"close-popover btn btn-outline-secondary me-2",html:[$("<i/>",{class:"fas fa-ban me-2"}),$("<span/>",{text:lang("close")})]}),$("<button/>",{class:"delete-popover btn btn-outline-secondary me-2 "+displayDelete,html:[$("<i/>",{class:"fas fa-trash-alt me-2"}),$("<span/>",{text:lang("delete")})]}),$("<button/>",{class:"edit-popover btn btn-primary "+displayEdit,html:[$("<i/>",{class:"fas fa-edit me-2"}),$("<span/>",{text:lang("edit")})]})]})]})}$target.popover({placement:"top",title:App.Utils.String.escapeHtml(info.event.title),content:$html,html:!0,container:"#calendar",trigger:"manual"}),lastFocusedEventData=info.event,$target.popover("show"),$popoverTarget=$target;var $newPopover=$calendar.find(".popover");0<$newPopover.length&&200>$newPopover.position().top&&$newPopover.css("top","200px")}function onEventResize(info){if(!1===vars("privileges").appointments.edit)return info.revert(),void App.Layouts.Backend.displayNotification(lang("no_privileges_edit_appointments"));$notification.is(":visible")&&$notification.hide("bind");var successCallback;if(!1===info.event.extendedProps.data.is_unavailability){info.event.extendedProps.data.end_datetime=moment(info.event.extendedProps.data.end_datetime).add({days:info.endDelta.days,milliseconds:info.endDelta.milliseconds}).format("YYYY-MM-DD HH:mm:ss");var appointment=_objectSpread({},info.event.extendedProps.data);appointment.is_unavailability=0,delete appointment.customer,delete appointment.provider,delete appointment.service,successCallback=function successCallback(){var undoFunction=function undoFunction(){appointment.end_datetime=info.event.extendedProps.data.end_datetime=moment(appointment.end_datetime).add({days:-info.endDelta.days,milliseconds:-info.endDelta.milliseconds}).format("YYYY-MM-DD HH:mm:ss"),App.Http.Calendar.saveAppointment(appointment).done(function(){$notification.hide("blind")}),info.revert()};App.Layouts.Backend.displayNotification(lang("appointment_updated"),[{label:lang("undo"),function:undoFunction}]),$footer.css("position","static"),info.event.setProp("data",info.event.extendedProps.data)},App.Http.Calendar.saveAppointment(appointment,null,successCallback)}else{var unavailability={id:info.event.extendedProps.data.id,start_datetime:moment(info.event.start).format("YYYY-MM-DD HH:mm:ss"),end_datetime:moment(info.event.end).format("YYYY-MM-DD HH:mm:ss"),id_users_provider:info.event.extendedProps.data.id_users_provider};info.event.extendedProps.data.end_datetime=unavailability.end_datetime,successCallback=function successCallback(){var undoFunction=function undoFunction(){unavailability.end_datetime=info.event.extendedProps.data.end_datetime=moment(unavailability.end_datetime).add({days:-info.endDelta.days,milliseconds:-info.endDelta.milliseconds}).format("YYYY-MM-DD HH:mm:ss"),App.Http.Calendar.saveUnavailability(unavailability).done(function(){$notification.hide("blind")}),info.revert()};App.Layouts.Backend.displayNotification(lang("unavailability_updated"),[{label:lang("undo"),function:undoFunction}]),$footer.css("position","static"),info.event.setProp("data",info.event.extendedProps.data)},App.Http.Calendar.saveUnavailability(unavailability,successCallback)}}function onEventDrop(info){if(!1===vars("privileges").appointments.edit)return info.revert(),void App.Layouts.Backend.displayNotification(lang("no_privileges_edit_appointments"));$notification.is(":visible")&&$notification.hide("bind");var successCallback;if(!1===info.event.extendedProps.data.is_unavailability){var appointment=_objectSpread({},info.event.extendedProps.data);delete appointment.customer,delete appointment.provider,delete appointment.service,appointment.start_datetime=moment(appointment.start_datetime).add({days:info.delta.days,millisecond:info.delta.milliseconds}).format("YYYY-MM-DD HH:mm:ss"),appointment.end_datetime=moment(appointment.end_datetime).add({days:info.delta.days,millisecond:info.delta.milliseconds}).format("YYYY-MM-DD HH:mm:ss"),appointment.is_unavailability=0,info.event.extendedProps.data.start_datetime=appointment.start_datetime,info.event.extendedProps.data.end_datetime=appointment.end_datetime,successCallback=function successCallback(){var undoFunction=function undoFunction(){appointment.start_datetime=moment(appointment.start_datetime).add({days:-info.delta.days,milliseconds:-info.delta.milliseconds}).format("YYYY-MM-DD HH:mm:ss"),appointment.end_datetime=moment(appointment.end_datetime).add({days:-info.delta.days,milliseconds:-info.delta.milliseconds}).format("YYYY-MM-DD HH:mm:ss"),info.event.extendedProps.data.start_datetime=appointment.start_datetime,info.event.extendedProps.data.end_datetime=appointment.end_datetime,App.Http.Calendar.saveAppointment(appointment).done(function(){$notification.hide("blind")}),info.revert()};App.Layouts.Backend.displayNotification(lang("appointment_updated"),[{label:lang("undo"),function:undoFunction}]),$footer.css("position","static")},App.Http.Calendar.saveAppointment(appointment,null,successCallback)}else{var unavailability={id:info.event.extendedProps.data.id,start_datetime:moment(info.event.start).format("YYYY-MM-DD HH:mm:ss"),end_datetime:moment(info.event.end).format("YYYY-MM-DD HH:mm:ss"),id_users_provider:info.event.extendedProps.data.id_users_provider};successCallback=function successCallback(){var undoFunction=function undoFunction(){unavailability.start_datetime=moment(unavailability.start_datetime).add({days:-info.delta.days,milliseconds:-info.delta.milliseconds}).format("YYYY-MM-DD HH:mm:ss"),unavailability.end_datetime=moment(unavailability.end_datetime).add({days:-info.delta.days,milliseconds:-info.delta.milliseconds}).format("YYYY-MM-DD HH:mm:ss"),unavailability.is_unavailability=1,info.event.extendedProps.data.start_datetime=unavailability.start_datetime,info.event.extendedProps.data.end_datetime=unavailability.end_datetime,App.Http.Calendar.saveUnavailability(unavailability).done(function(){$notification.hide("blind")}),info.revert()};App.Layouts.Backend.displayNotification(lang("unavailability_updated"),[{label:lang("undo"),function:undoFunction}]),$footer.css("position","static")},App.Http.Calendar.saveUnavailability(unavailability,successCallback)}}function onSelect(info,fullCalendar){if(!info.allDay){var $providerColumn=$(info.jsEvent.target).parents(".provider-column"),providerId=$providerColumn.data("provider").id,buttons=[{text:lang("unavailability"),click:function click(event,messageModal){$("#insert-unavailability").trigger("click"),providerId?$("#unavailability-provider").val(providerId):$("#unavailability-provider option:first").prop("selected",!0),$("#unavailability-provider").trigger("change"),App.Utils.UI.setDateTimePickerValue($("#unavailability-start"),info.start),App.Utils.UI.setDateTimePickerValue($("#unavailability-end"),info.end),messageModal.hide()}},{text:lang("appointment"),click:function click(event,messageModal){$("#insert-appointment").trigger("click");var provider=vars("available_providers").find(function(provider){return+provider.id===+providerId}),service=vars("available_services").find(function(service){return-1!==provider.services.indexOf(service.id)});service&&$selectService.val(service.id),$selectService.val()||$selectService.find("option:first").prop("selected",!0),$selectService.trigger("change"),provider&&$selectProvider.val(provider.id),$selectProvider.val()||$("#select-provider option:first").prop("selected",!0),$selectProvider.trigger("change"),App.Utils.UI.setDateTimePickerValue($("#start-datetime"),info.start),App.Utils.UI.setDateTimePickerValue($("#end-datetime"),App.Pages.Calendar.getSelectionEndDate(info)),messageModal.hide()}}];return App.Utils.Message.show(lang("add_new_event"),lang("what_kind_of_event"),buttons),$("#message-modal .modal-footer").addClass("justify-content-between").find(".btn").css("width","calc(50% - 10px)"),fullCalendar.unselect(),!1}}function setCalendarViewSize(){var height=window.innerHeight-$header.outerHeight()-$footer.outerHeight()-$calendarToolbar.outerHeight()-$(".calendar-header").outerHeight()-50;500>height&&(height=500);var $dateColumn=$(".date-column"),$calendarViewDiv=$(".calendar-view > div");$calendarViewDiv.css("min-width","1000%");var width=0;$dateColumn.each(function(index,dateColumn){width+=$(dateColumn).outerWidth()}),$calendarViewDiv.css("min-width",width+200);var dateColumnHeight=$dateColumn.outerHeight();$(".calendar-view .not-working").outerHeight((dateColumnHeight>height?dateColumnHeight:height)-70)}var $filterProvider,$filterService,$selectDate,$popoverTarget,lastFocusedEventData,$calendar=$("#calendar"),$calendarToolbar=$("#calendar-toolbar"),$calendarFilter=$("#calendar-filter"),$notification=$("#notification"),$reloadAppointments=$("#reload-appointments"),$selectFilterItem=$("#select-filter-item"),$selectService=$("#select-service"),$selectProvider=$("#select-provider"),$appointmentsModal=$("#appointments-modal"),$unavailabilitiesModal=$("#unavailabilities-modal"),$header=$("#header"),$footer=$("#footer"),moment=window.moment;return{initialize:function initialize(){createHeader();var startDate=moment().toDate(),endDate=moment().add(+$selectFilterItem.val()-1,"days").toDate();createView(startDate,endDate),$("#insert-working-plan-exception").hide(),addEventListeners(),$("#enable-sync, #google-sync").hide()}}}();