Skip to content

Instantly share code, notes, and snippets.

@kir-sf
Created November 20, 2016 06:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kir-sf/42ab69387835336140438617ae543ecb to your computer and use it in GitHub Desktop.
Save kir-sf/42ab69387835336140438617ae543ecb to your computer and use it in GitHub Desktop.
Календарь с Формой
var MYORDERS='ID таблицы записей'; // таблица записей
var ORDERCAL="ID календаря"; // календарь записей
var TEXT_EMAIL='<font size=4 face="fantasy"> Добрый день!</font><br> Мы записали Вас ##DATE##, время: ##TIME##! <br> С нетерпением ждем Вас!';
var CANCEL_EMAIL='<font size=4 face="fantasy"> Добрый день! </font><br> Время, которое Вы выбрали занято, выберите другое, пожалуйста!';
var HOLIDAY_EMAIL='<font size=4 face="fantasy"> Добрый день! </font><br> Вы выбрали для записи праздничный день, выберите другой день, пожалуйста!';
var WEEKEND_EMAIL='<font size=4 face="fantasy"> Добрый день! </font><br> Вы выбрали для записи выходной день, выберите другой день, пожалуйста!';
function onSubmitForm(e) {
// открываем Календарь и Таблицу
var cal=CalendarApp.getCalendarById(ORDERCAL);
var ss=SpreadsheetApp.openById(MYORDERS).getSheetByName('List');
// получаем ответы Формы
var response=e.response;
var itemResponses=response.getItemResponses();
// загружаем ответы в переменную res
var res=[];
var today=new Date();
res.push(today);
for (var i=0; i<itemResponses.length; i++)
res.push(itemResponses[i].getResponse());
// формируем сообщение клиенту
var email={
htmlBody: TEXT_EMAIL, // текст сообщения
name: 'Reception', // от кого письмо
to: itemResponses[2].getResponse(), // адрес получателя
subject: 'Запись на прием' // тема письма
};
// парсим дата и время записи
var day=itemResponses[0].getResponse().substring(8);
var month=Number(itemResponses[0].getResponse().substring(5, 7))-1;
var year=itemResponses[0].getResponse().substring(0, 4);
var hours=Number(itemResponses[1].getResponse().substring(0, 2))-1;
// проверяем наличие событий в календаре
var startTime=new Date(year, month, day, hours);
var endTime=new Date(year, month, day, hours+1);
var events=cal.getEvents(startTime, endTime);
var holiday=isDateHoliday(startTime); // рабочий или праздничный
// формируем сообщение пользователю в зависимости от результатов проверки календаря
if (events.length==0) {
if (holiday=='working day') {
var busy=false;
res.push("Бронируем");
var emailStr=TEXT_EMAIL.replace("##DATE##", res[1]);
email.htmlBody=emailStr.replace('##TIME##', res[2]);
}
if (holiday=='holiday') {
var busy=true;
res.push("Попытка записи на праздничный день!");
email.htmlBody=HOLIDAY_EMAIL;
}
if (holiday=='weekend') {
var busy=true;
res.push("Попытка записи на выходной!");
email.htmlBody=WEEKEND_EMAIL;
}
} else {
var busy=true;
res.push("Отказываем. Время занято");
email.htmlBody=CANCEL_EMAIL;
}
// пытаемся отправить сообщение, если не получается - пишем в таблицу заказов сообщение об ошибке
try {
MailApp.sendEmail(email);
res.push("Отправлено");
if (!busy) cal.createEvent('Запись', startTime, endTime);
} catch (err) {
res.push("Ошибка "+err);
}
// записываем результат в Таблицу
ss.appendRow(res);
}
function isDateHoliday(date) {
if (({}).toString.call(date)!='[object Date]') return false;
if (date.getDay()==6||date.getDay()==0) return 'weekend';
var cal=CalendarApp.getCalendarById('ru.russian#holiday@group.v.calendar.google.com');
var events=cal.getEventsForDay(date);
if (events.length>0) return 'holiday';
return 'working day';
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment