Update bs5.schedules.js
parent
954609108e
commit
c766c4f864
|
@ -6,6 +6,45 @@ $(document).ready(function(){
|
||||||
var schedulerForm = schedulerWindow.find('form')
|
var schedulerForm = schedulerWindow.find('form')
|
||||||
var selectedStates = schedulerWindow.find('[name="monitorStates"]')
|
var selectedStates = schedulerWindow.find('[name="monitorStates"]')
|
||||||
var selectedDays = schedulerWindow.find('[name="days"]')
|
var selectedDays = schedulerWindow.find('[name="days"]')
|
||||||
|
var startTimeField = schedulerWindow.find('[name="start"]')
|
||||||
|
var endTimeField = schedulerWindow.find('[name="end"]')
|
||||||
|
function checkForScheduleConflict(aSchedule, bSchedule) {
|
||||||
|
const conflictedDays = [];
|
||||||
|
function timeToMinutes(time) {
|
||||||
|
const [hours, minutes] = time.split(':').map(Number);
|
||||||
|
return hours * 60 + minutes;
|
||||||
|
}
|
||||||
|
aSchedule.details.days.forEach(day => {
|
||||||
|
if (bSchedule.details.days.includes(day)) {
|
||||||
|
const aStart = timeToMinutes(aSchedule.start);
|
||||||
|
const aEnd = timeToMinutes(aSchedule.end);
|
||||||
|
const bStart = timeToMinutes(bSchedule.start);
|
||||||
|
const bEnd = timeToMinutes(bSchedule.end);
|
||||||
|
if ((aStart < bEnd && aEnd > bStart) || (bStart < aEnd && bEnd > aStart)) {
|
||||||
|
conflictedDays.push({
|
||||||
|
day: day,
|
||||||
|
aScheduleTime: `${aSchedule.start} - ${aSchedule.end}`,
|
||||||
|
bScheduleTime: `${bSchedule.start} - ${bSchedule.end}`
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return conflictedDays;
|
||||||
|
}
|
||||||
|
function findScheduleConflict(aSchedule){
|
||||||
|
const conflictedWith = []
|
||||||
|
for(name in loadedSchedules){
|
||||||
|
var bSchedule = loadedSchedules[name];
|
||||||
|
if(aSchedule.name !== bSchedule.name){
|
||||||
|
var conflicts = checkForScheduleConflict(aSchedule, bSchedule)
|
||||||
|
if(conflicts.length > 0)conflictedWith.push({ name, conflicts })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
ok: conflictedWith.length === 0,
|
||||||
|
conflicts: conflictedWith
|
||||||
|
}
|
||||||
|
}
|
||||||
var loadSchedules = function(callback){
|
var loadSchedules = function(callback){
|
||||||
$.getJSON(getApiPrefix() + '/schedule/' + $user.ke,function(d){
|
$.getJSON(getApiPrefix() + '/schedule/' + $user.ke,function(d){
|
||||||
var html = ''
|
var html = ''
|
||||||
|
@ -33,6 +72,37 @@ $(document).ready(function(){
|
||||||
selectedStates.html(html)
|
selectedStates.html(html)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
function getScheduleForm(){
|
||||||
|
var form = schedulerForm.serializeObject()
|
||||||
|
var monitors = []
|
||||||
|
var failedToParseAJson = false
|
||||||
|
if(form.name === ''){
|
||||||
|
return new PNotify({title:lang['Invalid Data'],text:lang['Name cannot be empty.'],type:'error'})
|
||||||
|
}
|
||||||
|
if(form.start === ''){
|
||||||
|
return new PNotify({title:lang['Invalid Data'],text:lang['Start Time cannot be empty.'],type:'error'})
|
||||||
|
}
|
||||||
|
if(form.monitorStates instanceof Array === false){
|
||||||
|
form.monitorStates = [form.monitorStates]
|
||||||
|
}
|
||||||
|
if(!form.days || form.days === ''){
|
||||||
|
form.days = null
|
||||||
|
}else if(form.days instanceof Array === false){
|
||||||
|
form.days = [form.days]
|
||||||
|
}
|
||||||
|
const data = {
|
||||||
|
name: form.name,
|
||||||
|
start: form.start,
|
||||||
|
end: form.end,
|
||||||
|
enabled: form.enabled,
|
||||||
|
details: {
|
||||||
|
monitorStates: form.monitorStates,
|
||||||
|
days: form.days,
|
||||||
|
timezone: form.timezone,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return data
|
||||||
|
}
|
||||||
addOnTabOpen('schedules',function(loadedTab){
|
addOnTabOpen('schedules',function(loadedTab){
|
||||||
loadMonitorStates()
|
loadMonitorStates()
|
||||||
loadSchedules()
|
loadSchedules()
|
||||||
|
@ -52,8 +122,9 @@ $(document).ready(function(){
|
||||||
clickCallback: function(){
|
clickCallback: function(){
|
||||||
var form = schedulerForm.serializeObject()
|
var form = schedulerForm.serializeObject()
|
||||||
$.post(getApiPrefix() + '/schedule/' + $user.ke + '/' + form.name + '/delete',function(d){
|
$.post(getApiPrefix() + '/schedule/' + $user.ke + '/' + form.name + '/delete',function(d){
|
||||||
debugLog(d)
|
console.log(d)
|
||||||
if(d.ok === true){
|
if(d.ok === true){
|
||||||
|
delete(loadedSchedules[form.name])
|
||||||
loadSchedules()
|
loadSchedules()
|
||||||
new PNotify({title:lang.Success,text:d.msg,type:'success'})
|
new PNotify({title:lang.Success,text:d.msg,type:'success'})
|
||||||
}
|
}
|
||||||
|
@ -96,42 +167,37 @@ $(document).ready(function(){
|
||||||
schedulerForm.submit(function(e){
|
schedulerForm.submit(function(e){
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
var el = $(this)
|
var el = $(this)
|
||||||
var form = el.serializeObject()
|
var data = getScheduleForm()
|
||||||
var monitors = []
|
const { ok: isNotConflicted, conflicts } = findScheduleConflict(data);
|
||||||
var failedToParseAJson = false
|
if(isNotConflicted){
|
||||||
if(form.name === ''){
|
$.post(getApiPrefix() + '/schedule/' + $user.ke + '/' + data.name + '/insert',{data:data},function(d){
|
||||||
return new PNotify({title:lang['Invalid Data'],text:lang['Name cannot be empty.'],type:'error'})
|
debugLog(d)
|
||||||
|
if(d.ok === true){
|
||||||
|
loadSchedules(function(){
|
||||||
|
scheduleSelector.val(data.name)//.change();
|
||||||
|
})
|
||||||
|
new PNotify({title:lang.Success,text:d.msg,type:'success'})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}else{
|
||||||
|
new PNotify({
|
||||||
|
title: lang['Conflicting Schedules'],
|
||||||
|
text: `${lang.conflictingSchedulesText} <br><br> ${lang.conflictingSchedulesTextExample}`,
|
||||||
|
type: 'danger'
|
||||||
|
});
|
||||||
}
|
}
|
||||||
if(form.start === ''){
|
|
||||||
return new PNotify({title:lang['Invalid Data'],text:lang['Start Time cannot be empty.'],type:'error'})
|
|
||||||
}
|
|
||||||
if(form.monitorStates instanceof Array === false){
|
|
||||||
form.monitorStates = [form.monitorStates]
|
|
||||||
}
|
|
||||||
if(!form.days || form.days === ''){
|
|
||||||
form.days = null
|
|
||||||
}else if(form.days instanceof Array === false){
|
|
||||||
form.days = [form.days]
|
|
||||||
}
|
|
||||||
var data = {
|
|
||||||
start: form.start,
|
|
||||||
end: form.end,
|
|
||||||
enabled: form.enabled,
|
|
||||||
details: {
|
|
||||||
monitorStates: form.monitorStates,
|
|
||||||
days: form.days,
|
|
||||||
timezone: form.timezone,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$.post(getApiPrefix() + '/schedule/' + $user.ke + '/' + form.name + '/insert',{data:data},function(d){
|
|
||||||
debugLog(d)
|
|
||||||
if(d.ok === true){
|
|
||||||
loadSchedules(function(){
|
|
||||||
scheduleSelector.val(form.name)
|
|
||||||
})
|
|
||||||
new PNotify({title:lang.Success,text:d.msg,type:'success'})
|
|
||||||
}
|
|
||||||
})
|
|
||||||
return false;
|
return false;
|
||||||
})
|
})
|
||||||
|
startTimeField.change(function(){
|
||||||
|
var data = getScheduleForm()
|
||||||
|
const { ok: isNotConflicted, conflicts } = findScheduleConflict(data);
|
||||||
|
if(!isNotConflicted){
|
||||||
|
new PNotify({
|
||||||
|
title: lang['Conflicting Schedules'],
|
||||||
|
text: `${lang.conflictingSchedulesText} <br><br> ${lang.conflictingSchedulesTextExample} <br><br> ${lang['Conflicted With']}`,
|
||||||
|
type: 'danger',
|
||||||
|
sticky: true,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue