K館簽到

index.html

<!DOCTYPE html>

<html>

  <head>

    <base target="_top">

    <style>

      h1 {

        color: #ff5500;

        font-size: 72px;

      }

      h2 {

        color: #0000ff;

        font-size: 60px;

      }

      input {

        color: #0000ff;

        font-size: 60px;

      }

      label {

        color: #0000ff;

        font-size: 60px;

      }

    </style>

    <script>

      //Global variable

      var loadDate; //網頁載入日期


      window.onload = function(){

        var dt = new Date();

        var year = dt.getFullYear();

        var month = dt.getMonth()+1;

        var day = dt.getDate();

        loadDate = year+"/"+month+"/"+day;

        var inputElement = document.getElementById("studentId");

        if (inputElement) {

          inputElement.focus(); //游標移至input

        }

      }


      function checkCode(){

        document.getElementById("result").textContent = "";

        var code = document.getElementById("studentId").value;

        if (code.length === 10){

          document.getElementById("result").style.color = "Silver";

          document.getElementById("result").textContent = "卡號配對中...";

          var dt = new Date();

          var year = dt.getFullYear();

          var month = dt.getMonth()+1;

          var day = dt.getDate();

          var ymd = year+"/"+month+"/"+day;

          if (ymd !== loadDate ){

            document.getElementById("result").style.color = "Brown";

          }

          google.script.run.withSuccessHandler(function(result){

            if (result.indexOf('簽到')>0){

              document.getElementById("result").style.color = "Green";

            } else {

              if(result.indexOf('無配對')>0){

                document.getElementById("result").style.color = "#ff5500";

              }else{

                document.getElementById("result").style.color = "Red";

              }

            }

            document.getElementById("result").textContent = result;

            document.getElementById("studentId").value = "";

          }).searchStudent(code);

        }

      }

    </script>

  </head>

  <body>

    <div align="center">

      <h1>岡山高中圖書館K書中心👀簽到、退系統</h1>

      <!-- <h2 id="date"></h2> 已被移除或註解掉 -->

      <label for="id">請感應:</label>

      <input type="text" id="studentId" maxlength="10" oninput="checkCode()" placeholder="卡號"><br>

      <br><br><br> <!-- 新增一個空白行 -->

      <label id="result"></label><br>

      Power By Google Apps Script. <u>Allen Chang</u>

    </div>

  </body>

</html>


GAS

var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

var sheetId = spreadsheet.getId();

var studentSheet = "Student"; //學生基本資料表

var signInOut = "簽到退"; //簽到退紀錄工作表

var yyyymmdd = "";


function doGet() {

  return HtmlService.createHtmlOutputFromFile("index");  

}


//搜尋學號

function searchStudent(studentid){

  studentid = String(studentid).padStart(10, '0');

  if (isNaN(studentid)){

    studentid = "'"+studentid;

  }

  var sheet = SpreadsheetApp.openById(sheetId).getSheetByName("Card");

  var values = sheet.getDataRange().getValues();

  //尋找卡號 frmo Card

  for (var i=1;i<values.length;i++){

    var rowData = values[i];

    if ( studentid === rowData[1] ){ //找到卡號

      //組合學生Email,發通知信

      var stuID = String(rowData[0]).padStart(6, '0');

      var studentEmail = "stu" + stuID + "@kssh.khc.edu.tw";

      //var myTest = "allenctc168@gmail.com";

      //計算簽到日期、時間

      var dt = new Date();

      var year = dt.getFullYear();

      var month = dt.getMonth()+1;

      var day = dt.getDate();

      var hh = dt.getHours();

      var mm = dt.getMinutes();

      var ss = dt.getSeconds();

      yyyymmdd = year+"/"+month+"/"+day+" "+hh+":"+mm+":"+ss;

      //讀取、紀錄簽到記錄 from Student

      var sheet1 = SpreadsheetApp.openById(sheetId).getSheetByName("Student");

      var values1 = sheet1.getDataRange().getValues();

      for (var i=1;i<values.length;i++){

        rwdata = values1[i];

        if( stuID === rwdata[4] ){

          var count = sheet1.getRange(i+1,7).getValue(); //Student欄7

          sheet1.getRange(i+1,7).setValue(count+1); //紀錄簽到退一次

          var obj = {

            id: stuID,

            name: rowData[3],

            email: studentEmail,

            status: '',

            datetime: yyyymmdd

          }

          //

          if( count%2===0 ){

            obj.status = "<Font Color='Blue' Size='12px'>簽到</Font>";

            writeSignIn(stuID);

            return rwdata[3]+" 簽到成功。"+yyyymmdd;

          } else {

            obj.status = "<Font Color='Red' Size='12px'>簽退</Font>";

            writeSignOut(stuID);

            return  rwdata[3]+" 簽退完成。"+yyyymmdd;

          }

        }

      }

      return studentid+" 無配對學號!!";

    }

  }


  return studentid+" 無配對學號!!";

}


function writeSignIn(id){

  id = "'"+id;

  var sheet = SpreadsheetApp.openById(sheetId).getSheetByName(signInOut);

  var date = new Date();

  var searchKey = "'" + date.getFullYear() + (date.getMonth()+1) + date.getDate();

  sheet.appendRow([yyyymmdd,id,"簽到",searchKey]);

}


function writeSignOut(id){

  id = "'"+id;

  var sheet = SpreadsheetApp.openById(sheetId).getSheetByName(signInOut);

  var date = new Date();

  var searchKey = "'" + date.getFullYear() + (date.getMonth()+1) + date.getDate();

  sheet.appendRow([yyyymmdd,id,"簽退",searchKey]);

}


function sendEmail(obj){

  var recipientEmail = obj.email;

  var name = obj.name;

  var content = name + ',你已於 '+obj.datetime+obj.status+"<br><br>";

  content = content + "國立岡山高級中學 圖書館<br>(這是系統自動寄發,請勿回覆)";

  try {

    MailApp.sendEmail({

      to: recipientEmail,

      subject: '岡山高中K書中心簽到退通知',

      htmlBody: content,

    });


    return 1;

  }

  catch (error) {

    return '郵件寄送失敗:' + error.message;

  }

 

}