Я сталкиваюсь с проблемой при попытке запустить следующий код для установки событий на основе Календаря Google в Календарь, почти то, чего я пытаюсь достичь:
Если пользователь вводит Высокий : календарь должен найти следующий доступный временной интервал и установить событие там
Если пользователь вводит Mid : Найдите первую треть времени между следующим предстоящим событием и уже установленным, ie: одно событие уже в 9:00, а другое в 12:00, поэтому, если я пытаюсь установить новое событие с приоритетом Mid , он должен установить его в 10:00
Если пользователь вводит Низкий : найдите вторую треть времени между следующим предстоящим событием и уже установленным, ie: одно событие уже в 9:00, а другое в 12:00, поэтому, если я пытаюсь установить новое событие с приоритетом Mid, оно должно быть установлено в 11:00
Если нет доступных Временные интервалы между дают alert.
Пока что сценарий устанавливает время под любой записью для следующего предстоящего события
Кроме того, я застрял в установке событий между 6:00 и 23:00 для календарь по умолчанию.
Большой кусок кода здесь, так что любые идеи будут по достоинству оценены
//schedule event
function schedEvent() {
var spreadsheet = SpreadsheetApp.getActive();
var ss = spreadsheet.getSheetByName('Scheduler');
var lrow = ss.getLastRow();
if(lrow<2)
return;
var edata = ss.getRange(lrow, 1, 1, 9).getValues()[0];
if(edata[5]=='Scheduled')
return;
var calendar = CalendarApp.getDefaultCalendar();
// var calendar = CalendarApp.getCalendarById('ecmoranavila@gmail.com');
var d = new Date();
var dl = new Date(edata[2].getTime() + 1000*3600*24);
var events = calendar.getEvents(d, dl);
var eId = '';
Logger.log(d);
var to_dl = (dl-d);
var et = edata[3];
var st;
var d1;
var d2 = dl;
if(edata[4]=='High') {
d1 = new Date(Math.max(d, new Date(new Date().setHours(23,0,0,0))))
d2 = new Date(Math.min(d2, new Date(new Date().setHours(6,0,0,0))))
if(events.length==0) {
st = d1;
} else {
st = checkInterval(et, events, d1, d2);
}
} else if(edata[4]=='Mid') {
//check 2nd third
d1 = new Date(Math.max(new Date(d.getTime() + to_dl/0.33), new Date(new Date(d.getTime() + 1/3*to_dl).setHours(6,0,0,0))));
d2 = new Date(Math.min(new Date(d.getTime() + to_dl/0.33), new Date(new Date(d.getTime() + 2/3*to_dl).setHours(11,0,0,0))));
if(events.length==0) {
st = d1;
} else {
st = checkInterval(et, events, d1, d2);
}
//check 1st third
if(st=='No available time slots') {
d1 = new Date(Math.max(d, new Date(new Date().setHours(23,0,0,0))))
d2 = new Date(Math.min(new Date(d.getTime() + to_dl/0.33), new Date(new Date(d.getTime() + 1/3*to_dl).setHours(11,0,0,0))));
if(events.length==0) {
st = d1;
} else {
st = checkInterval(et, events, d1, d2);
}
}
//check 3rd third
if(st=='No available time slots') {
d1 = new Date(Math.max(new Date(d.getTime() + 2/3/to_dl), new Date(new Date(d.getTime() + 2/3*to_dl).setHours(23,0,0,0))));
d2 = new Date(Math.min(dl, new Date(new Date(dl).setHours(6,0,0,0))));
if(events.length==0) {
st = d1;
} else {
st = checkInterval(et, events, d1, d2);
}
}
} else if(edata[4]=='Low') {
//check 3rd third
d1 = new Date(Math.max(new Date(d.getTime() + 2/3*to_dl), new Date(new Date(d.getTime() + 2/3*to_dl).setHours(23,0,0,0))));
d2 = new Date(Math.min(dl, new Date(new Date(dl).setHours(6,0,0,0))));
if(events.length==0) {
st = d1;
} else {
st = checkInterval(et, events, d1, d2);
}
//check 2nd third
if(st=='No available time slots') {
d1 = new Date(Math.max(new Date(d.getTime() + 1/3*to_dl), new Date(new Date(d.getTime() + 1/3*to_dl).setHours(23,0,0,0))));
d2 = new Date(Math.min(new Date(d.getTime() + 2/3*to_dl), new Date(new Date(d.getTime() + 2/3*to_dl).setHours(6,0,0,0))));
if(events.length==0) {
st = d1;
} else {
st = checkInterval(et, events, d1, d2);
}
}
//check 1st third
if(st=='No available time slots') {
d1 = new Date(Math.max(d, new Date(new Date().setHours(23,0,0,0))))
d2 = new Date(Math.min(new Date(d.getTime() + 1/3*to_dl), new Date(new Date(d.getTime() + 1/3*to_dl).setHours(6,0,0,0))));
if(events.length==0) {
st = d1;
} else {
st = checkInterval(et, events, d1, d2);
}
}
}
Logger.log(st);
if(st=='No available time slots') {
edata[5] = st;
edata[6] = '';
edata[7] = '';
ss.getRange(lrow, 1, 1, 9).setValues([edata]);
} else {
st = new Date(st);
edata[5] = 'Scheduled';
edata[6] = st
edata[7] = Utilities.formatDate(st, 'CST', 'hh:mm:ss a');
edata[8] = Utilities.formatDate(new Date(st.getTime() + et*3600000), 'CST', 'hh:mm:ss a');
Logger.log(st);
Logger.log(new Date(st.getTime() + et*3600000));
var event = calendar.createEvent(edata[1], new Date(st), new Date(st.getTime() + et*3600000));
eId = event.getId();
ss.getRange(lrow, 1, 1, 9).setValues([edata]);
}
}
//find other time for the event
function reschEvent(ss_prty, calendar, edata) {
var d = new Date();
edata[7] = new Date(edata[7]);
edata[8] = new Date(edata[8]);
var events = calendar.getEvents(d, edata[7]);
var eId = '';
Logger.log(d);
var to_dl = (edata[7]-d);
var et = (edata[8]-edata[7])/3600000;
var st;
var d1;
var d2 = edata[7];
if(edata[5]=='High') {
if(events.length==0) {
st = d;
} else {
st = checkInterval(et, events, d, d2);
}
} else if(edata[5]=='Mid') {
//check 2nd third
d1 = new Date(d.getTime() + 1/3*to_dl);
d2 = new Date(d.getTime() + 2/3*to_dl);
if(events.length==0) {
st = d1;
} else {
st = checkInterval(et, events, d1, d2);
}
//check 1st third
if(st=='No available time slots') {
d1 = d;
d2 = new Date(d.getTime() + 1/3*to_dl);
if(events.length==0) {
st = d1;
} else {
st = checkInterval(et, events, d1, d2);
}
}
//check 3rd third
if(st=='No available time slots') {
d1 = new Date(d.getTime() + 2/3*to_dl);
d2 = edata[7];
if(events.length==0) {
st = d1;
} else {
st = checkInterval(et, events, d1, d2);
}
}
} else if(edata[5]=='Low') {
//check 3rd third
d1 = new Date(d.getTime() + 2/3*to_dl);
d2 = edata[7];
if(events.length==0) {
st = d1;
} else {
st = checkInterval(et, events, d1, d2);
}
//check 2nd third
if(st=='No available time slots') {
d1 = new Date(d.getTime() + 1/3*to_dl);
d2 = new Date(d.getTime() + 2/3*to_dl);
if(events.length==0) {
st = d1;
} else {
st = checkInterval(et, events, d1, d2);
}
}
//check 1st third
if(st=='No available time slots') {
d1 = d;
d2 = new Date(d.getTime() + 1/3*to_dl);
if(events.length==0) {
st = d1;
} else {
st = checkInterval(et, events, d1, d2);
}
}
}
if(st=='No available time slots') {
edata[6] = st;
edata[7] = '';
edata[8] = '';
edata[9] = '';
ss_prty.getRange(ss_prty.getLastRow()+1, 1, 1, 10).setValues([edata]);
} else {
edata[6] = 'Rescheduled';
edata[7] = st.getDate();
edata[8] = Utilities.formatDate(st, 'CST', 'hh:mm:ss a');
edata[9] = Utilities.formatDate(new Date(st.getTime() + et*3600000), 'CST', 'hh:mm:ss a');
Logger.log(st);
Logger.log(new Date(st.getTime() + et*3600000));
var event = calendar.createEvent(edata[1], st, new Date(st.getTime() + et*3600000));
eId = event.getId();
ss_prty.getRange(ss_prty.getLastRow()+1, 1, 1, 10).setValues([edata]);
}
return eId;
}
function checkInterval(et, events, d, dl) {
var dt;
var st;
Logger.log(events.length);
for(var i=0; i<=events.length; i++) {
if(i==0) {
dt = (events[i].getStartTime()-d)/3600000;
} else if (i==events.length) {
dt = (dl-events[i-1].getEndTime())/3600000;
} else {
dt = (events[i].getStartTime() - events[i-1].getEndTime())/3600000;
}
Logger.log(dt);
if(dt>et) {
if(i==0) {
Logger.log(d);
st = d;
} else {
Logger.log(events[i-1].getEndTime());
st = events[i-1].getEndTime();
}
return st;
}
}
if(!st)
return 'No available time slots';
}