Created
November 20, 2016 06:32
-
-
Save kir-sf/42ab69387835336140438617ae543ecb to your computer and use it in GitHub Desktop.
Календарь с Формой
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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