Created
August 17, 2017 03:27
-
-
Save kiuchikeisuke/422e23b57948a4fed3c6b579b4201cf1 to your computer and use it in GitHub Desktop.
たんまつ管理さんGAS実装
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
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