Skip to content

Instantly share code, notes, and snippets.

@kiuchikeisuke
Created August 17, 2017 03:27
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 kiuchikeisuke/422e23b57948a4fed3c6b579b4201cf1 to your computer and use it in GitHub Desktop.
Save kiuchikeisuke/422e23b57948a4fed3c6b579b4201cf1 to your computer and use it in GitHub Desktop.
たんまつ管理さんGAS実装
Const = {
spreadSheetId: "XXXXXXXXXX",
sheetName: "list",
userNameColumnIndex: 1,
mailAddressColumnIndex: 2,
deviceNameColumnIndex: 3,
deviceIdColumnIndex: 4,
returnDateColumnIndex: 5,
statusColumnIndex: 6
}
function doGet() {
var json = getList();
return createGetResponse(json);
}
function createGetResponse(json) {
return ContentService.createTextOutput(JSON.stringify(json)).setMimeType(ContentService.MimeType.JSON)
}
function doPost(e) {
var request = parseMessage(e);
var msg;
switch(true) {
case /^using/.test(request.status):
msg = doRentaled(request);
break;
case /^free/.test(request.status):
msg = doReturned(request);
break;
default:
msg = "パラメータがおかしいです"
}
return createPostResponse(msg);
}
function createPostResponse(msg) {
var res = {
"message": msg
}
return ContentService.createTextOutput(JSON.stringify(res)).setMimeType(ContentService.MimeType.JSON);
}
function parseMessage(e) {
var jsonString = e.postData.getDataAsString();
return JSON.parse(jsonString);
}
function doRentaled(req) {
var sheet = getSheet();
var dataAll = getData();
var columnIndex = sheet.getLastRow() + 1;
for(var i = 0; i < dataAll.length; i++) {
if (data[i][Const.deviceIdColumnIndex -1] == req.deviceId) {
columnIndex = i + 1;
break;
}
}
sheet.getRange(columnIndex, Const.userNameColumnIndex).setValue(req.userName);
sheet.getRange(columnIndex, Const.mailAddressColumnIndex).setValue(req.mailAddress);
sheet.getRange(columnIndex, Const.deviceNameColumnIndex).setValue(req.deviceName);
sheet.getRange(columnIndex, Const.deviceIdColumnIndex).setValue(req.deviceId);
sheet.getRange(columnIndex, Const.returnDateColumnIndex).setValue(req.returnDate.year + "/" + req.returnDate.month + "/" + req.returnDate.day);
sheet.getRange(columnIndex, Const.statusColumnIndex).setValue(req.status);
return "端末「" + req.deviceName + "」を" + req.returnDate.year + "/" + req.returnDate.month + "/"+ req.returnDate.day + "まで貸し出し状態にしました";
}
function doReturned(req) {
var sheet = getSheet();
var dataAll = getData();
var columnIndex = sheet.getLastRow() + 1;
for (var i = 0; i < dataAll.length; i++) {
if (data[i][Const.deviceIdColumnIndex - 1] == req.deviceId) {
columnIndex = i + 1;
break;
}
}
sheet.getRange(columnIndex, Const.userNameColumnIndex).setValue("");
sheet.getRange(columnIndex, Const.mailAddressColumnIndex).setValue("");
sheet.getRange(columnIndex, Const.deviceNameColumnIndex).setValue(req.deviceName);
sheet.getRange(columnIndex, Const.deviceIdColumnIndex).setValue(req.deviceId);
sheet.getRange(columnIndex, Const.returnDateColumnIndex).setValue("");
sheet.getRange(columnIndex, Const.statusColumnIndex).setValue(req.status);
return "端末「" + req.deviceName + "」を返却状態にしました";
}
function getList() {
var dataAll = getData();
var jsonArray = [];
for (var i = 1; i < dataAll.length; i++) {
data = dataAll[i];
var date = data[Const.returnDateColumnIndex - 1];
jsonItem = new Object();
dateObj = new Object();
jsonItem["userName"] = data[Const.userNameColumnIndex - 1];
jsonItem["mailAddress"] = data[Const.mailAddressColumnIndex - 1];
jsonItem["deviceName"] = data[Const.deviceNameColumnIndex - 1];
jsonItem["deviceId"] = data[Const.deviceIdColumnIndex - 1];
if (date == "" || null) {
jsonItem["returnDate"] = null;
} else {
dateObj["year"] = date.getYear();
dateObj["month"] = date.getMonth() + 1;
dateObj["day"] = date.getDate();
jsonItem["returnDate"] = dateObj;
}
jsonItem["status"] = data[Const.statusColumnIndex - 1];
jsonArray.push(jsonItem);
}
return jsonArray;
}
function timer() {
checkReturnDate();
}
function checkReturnDate() {
var now = new Date();
var dataAll = getData();
for( var i = 1; i < dataAll.length; i++) {
var data = dataAll[i]
if (data[Const.statusColumnIndex - 1] == "using" && now.getTime() > data[Const.returnDateColumnIndex - 1].getTime()) {
sendNotify(data);
}
}
}
function sendNotify(data) {
//通知を行う(mail)
var address = data[Const.mailAddressColumnIndex - 1];
var subject = "端末「" + data[Const.deviceNameColumnIndex - 1] + "」の返却期限が過ぎています!!";
var body = "端末管理BOTからの連絡です\n\n" + data[Const.userNameColumnIndex - 1]
+ "さんの借りている以下の端末は返却期限を過ぎています。可及的速やかに返却処理を行ってください\n【端末】\n"
+ data[Const.deviceNameColumnIndex - 1] + "\n\n\n※なお、この通知は返却しない限り1時間おきに実行されます";
MailApp.sendEmail(address, subject, body)
}
function getData() {
return data = getSheet().getDataRange().getValues();
}
/* シートを取得する */
function getSheet() {
if (getSheet.instance) { return getSheet.instance; }
var sheet = SpreadsheetApp.openById(Const.spreadSheetId).getSheetByName(Const.sheetName);
return sheet;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment