🏌️ ระบบสแกนรถกอล์ฟ

บันทึกการเคลื่อนย้าย → Google Sheets

— หรือเลือกประเภทด้วยตนเอง —

รายการรถกอล์ฟ

Dashboard

📊 สรุปกิจกรรมตามประเภท

⏱ กิจกรรมรายชั่วโมง (วันนี้)

🚗 จำนวนครั้งการใช้งานแต่ละคัน

🟢 สถานะฝูงรถปัจจุบัน

ประวัติการบันทึก

ประเภท
ทะเบียน / หมายเหตุ
เวลา

QR Code สำหรับติดจุดรับ-ส่งรถ

ติด QR แต่ละแบบไว้ที่จุดที่เหมาะสม
พนักงานสแกนด้วยกล้องมือถือ → กรอกทะเบียน → กด บันทึก
ข้อมูลเข้า Google Sheets ทันที
📦 สร้าง QR Code ตามรถกอล์ฟ

เลือกรถที่ต้องการสร้าง QR

ยังไม่มีรถกอล์ฟในระบบ กรุณาเพิ่มรถในแท็บ รถกอล์ฟ ก่อน

QR Code รถกอล์ฟ

🔗 Google Apps Script Webhook URL

วาง URL ที่ได้จาก Deploy Web app ด้านล่าง แล้วกดทดสอบ

📊 โครงสร้างข้อมูลใน Google Sheets

A วันที่  |  B เวลา  |  C ประเภท  |  D ทะเบียนรถ  |  E หมายเหตุ

📋 โค้ด Google Apps Script

คัดลอกโค้ดนี้ไปวางใน Apps Script

// ======================================== // Google Apps Script — ระบบสแกนรถกอล์ฟ (v2) // ======================================== const SHEET_NAME = "บันทึก"; const CART_SHEET = "รถกอล์ฟ"; function doPost(e) { try { const data = JSON.parse(e.postData.contents); const ss = SpreadsheetApp.getActiveSpreadsheet(); // --- เพิ่มรถ --- if (data.type === 'addCart') { let s = ss.getSheetByName(CART_SHEET); if (!s) { s = ss.insertSheet(CART_SHEET); s.appendRow(["id","model","note"]); s.getRange(1,1,1,3).setFontWeight("bold").setBackground("#4a7c59").setFontColor("#ffffff"); s.setFrozenRows(1); } // ป้องกันซ้ำ const ids = s.getLastRow() > 1 ? s.getRange(2,1,s.getLastRow()-1,1).getValues().map(r=>r[0]) : []; if (!ids.includes(data.cartId)) s.appendRow([data.cartId, data.model||'', data.note||'']); return json({status:"ok"}); } // --- ลบรถ --- if (data.type === 'deleteCart') { const s = ss.getSheetByName(CART_SHEET); if (s && s.getLastRow() > 1) { const vals = s.getRange(2,1,s.getLastRow()-1,1).getValues(); for (let i = vals.length-1; i >= 0; i--) { if (vals[i][0] === data.cartId) s.deleteRow(i+2); } } return json({status:"ok"}); } // --- บันทึกกิจกรรม --- let sheet = ss.getSheetByName(SHEET_NAME); if (!sheet) { sheet = ss.insertSheet(SHEET_NAME); const headers = ["วันที่","เวลา","ประเภท","ทะเบียนรถ","หมายเหตุ"]; sheet.appendRow(headers); const hr = sheet.getRange(1,1,1,headers.length); hr.setFontWeight("bold").setBackground("#4a7c59").setFontColor("#ffffff").setHorizontalAlignment("center"); sheet.setFrozenRows(1); sheet.setColumnWidths(1,5,[110,80,90,120,200]); } sheet.appendRow([data.date, data.time, data.action, data.cartNo, data.note||""]); return json({status:"ok"}); } catch(err) { return json({status:"error", msg:err.toString()}); } } function doGet(e) { // --- ดึงรายการรถ --- if (e.parameter.action === 'getCarts') { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getSheetByName(CART_SHEET); if (!sheet || sheet.getLastRow() <= 1) return json([]); const rows = sheet.getRange(2, 1, sheet.getLastRow()-1, 3).getValues(); const carts = rows.filter(r => r[0]).map(r => ({ id: r[0], model: r[1]||'', note: r[2]||'', lastStatus: 'unknown' })); return json(carts); } return json({status:"ready"}); } function json(d) { return ContentService.createTextOutput(JSON.stringify(d)).setMimeType(ContentService.MimeType.JSON); }

📖 ขั้นตอนติดตั้ง

  • 1
    เปิด Google Drive → สร้าง Google Sheets ใหม่
  • 2
    Extensions → Apps Script → วางโค้ดด้านบน → กด Save
  • 3
    Deploy → New deployment → Type: Web app → Execute as: Me → Who has access: Anyone
  • 4
    กด Authorize access → Allow
  • 5
    Copy Web app URL มาวางในช่องด้านบน
⚠️ Google Workspace: ถ้าองค์กรล็อก Apps Script จากภายนอก ให้ขอ IT Admin เปิดสิทธิ์