1) สร้าง Google Sheet
- สร้าง Google Sheet ใหม่ 1 ไฟล์ — ใช้เป็นฐานข้อมูลกลางของ Fleet Monitoring
- ไม่ต้องสร้างแท็บ/หัวคอลัมน์เอง — ขั้นตอนที่ 3 จะสร้างให้อัตโนมัติ
2) วางโค้ด Apps Script
- เมนู Extensions (ส่วนขยาย) → Apps Script
- ลบโค้ดเดิมทั้งหมด แล้ววางโค้ดด้านล่างนี้แทน
3) สร้างชีต + หัวคอลัมน์อัตโนมัติ
- ในหน้า Apps Script เลือกฟังก์ชัน
setupSheets จาก dropdown ด้านบน แล้วกด Run ▶
- อนุญาตสิทธิ์ที่ขอ (Authorize access) — ระบบจะสร้างแท็บ
Orders, Plans, Allocations, Trips, Vehicles, Carriers, Customers พร้อมหัวคอลัมน์ให้ทันที
4) (ไม่บังคับ) ตั้งรหัสผ่าน API กันคนอื่นเขียนข้อมูลเข้ามา
- ไอคอนเฟือง Project Settings → Script Properties → Add script property
- Property =
API_TOKEN, Value = รหัสผ่านที่ต้องการ
5) Deploy เป็น Web App
- Deploy → New deployment → เลือกประเภท Web app
- Execute as: Me · Who has access: Anyone
- กด Deploy แล้วคัดลอก Web app URL ที่ได้
- นำ URL (และ Token ถ้าตั้งไว้) ไปใส่ในปุ่ม ⚙ ตั้งค่าการเชื่อมต่อ ของหน้านี้
6) โครงสร้างคอลัมน์แต่ละชีต (Order → Plan → Allocation → Trip)
แยกตามลำดับชั้นข้อมูลของ Master Plan: Order (ความต้องการของลูกค้า) → Plan (แผนดำเนินงาน มีเวอร์ชันได้) → Allocation (ส่วนงานที่จัดให้ผู้ขนส่งแต่ละราย — 1 Plan แบ่งให้หลาย Allocation/ผู้ขนส่งได้) → Trip (รถจริง 1 คัน/1 เที่ยว ที่มีทะเบียนแล้ว)
Orders — ความต้องการของลูกค้า
Plans — แผนดำเนินงาน (ต่อ Order)
Allocations — จัดสรรงานให้ผู้ขนส่งแต่ละราย + จำนวนที่ "ยืนยัน" (ConfirmedTrips)
Trips — ทะเบียนรถที่ยืนยันแล้วจริง + ตำแหน่งติดตาม
Vehicles — ทะเบียนรถกลาง (เติมอัตโนมัติทุกครั้งที่ยืนยันรถ)
Carriers / Customers — ข้อมูลเสริม (ไม่บังคับ)
⚠ "คอนเฟิร์ม" กับ "ทะเบียนพร้อม" คือคนละตัวเลข
- ConfirmedTrips (บนชีต Allocations) = จำนวนเที่ยวที่ผู้ขนส่ง "รับปาก" ไว้ — กดยืนยันจำนวนได้จากปุ่ม "✅ ยืนยันจำนวนเที่ยว" ในหน้า Order โดยไม่ต้องรู้ทะเบียนก็ยืนยันจำนวนได้ก่อน
- Plate Ready = นับจากจำนวนแถวจริงในชีต Trips ที่มีทะเบียนกรอกแล้ว (ปุ่ม "🚛 เพิ่มทะเบียนรถ")
- ตัวอย่าง: แผน 8 / คอนเฟิร์ม 6 / ทะเบียนพร้อม 4 → ทั้งสามค่านี้แสดงแยกกันเสมอ ไม่ถูกปัดให้เท่ากัน และถ้าลดจำนวนคอนเฟิร์มลงต่ำกว่าทะเบียนที่กรอกไปแล้ว ระบบจะไม่ลบทะเบียนที่กรอกไว้ให้เอง (ต้องไปจัดการในชีต Trips เอง)
🛰 เรื่องตำแหน่งรถบนแผนที่ (tracking)
- แผนที่ในหน้านี้อ่านตำแหน่งจากคอลัมน์
Lat/Lng ในชีต Trips ทุกครั้งที่ sync
- ถ้ามีระบบ GPS/Telematics ของรถอยู่แล้ว ให้ตั้งให้ระบบนั้นเขียนพิกัดล่าสุดกลับเข้าคอลัมน์นี้เป็นระยะ (เช่นทุก 1-2 นาที) — หมุดจะขยับตามจริงทันทีที่หน้านี้ sync รอบถัดไป
- ถ้ายังไม่มีระบบ GPS ให้ทีมงานอัปเดตสถานะเองได้จากป๊อปอัปบนแผนที่ หรือในหน้ารายละเอียด Order
📋 เทียบกับ PROFIT HAUL Master Plan — ทำอะไรไปแล้ว / ยังไม่ทำ
- ทำแล้ว (เทียบเท่า Phase 0 บางส่วน): Business Reference คงที่ (ORD-/PLAN-/ALLOC-/TRIP-), แยกชั้น Order→Plan→Allocation→Trip, แยก ConfirmedTrips ออกจาก Plate Ready จริง, ใช้ Ref เป็น key ค้นหาแถวเสมอ (ไม่พึ่ง row number)
- ยังไม่ทำ (รอ Phase ถัดไปหรือรอข้อมูลจาก vendor): LINE dispatch bot + webhook (Phase 1) — หน้านี้ใช้ฟอร์มเว็บยืนยันตรงแทน; Plan Versioning/Audit เต็มรูปแบบ, Master data validation matrix (Phase 0); PostgreSQL backend + REST API (Phase 2); GPS Provider Adapter, Vehicle Matching, Geofence, Trip Status Engine (Phase 3) — คอลัมน์ Lat/Lng เตรียมไว้ให้ระบบ GPS ของผู้ขนส่งเขียนกลับเข้ามาได้ทันทีที่มี API จาก vendor แต่ตอนนี้ยังต้องอัปเดตสถานะ/ตำแหน่งด้วยมือผ่านหน้าเว็บนี้; Role-based permission, Dashboard KPI Dictionary/reconciliation เต็มรูปแบบ (Phase 4-5); AI/Optimization (Phase 6)
- เมื่อคุยกับผู้ขนส่งแต่ละรายได้ข้อมูล API ของ GPS platform แล้ว ค่อยต่อยอดเป็น GPS Adapter (Phase 3) แล้วให้ค่า Lat/Lng ในชีต Trips ถูกเขียนโดยอัตโนมัติแทนการกรอกมือ — โครงสร้างข้อมูลตอนนี้รองรับการเปลี่ยนผ่านนี้ได้โดยไม่ต้องแก้ schema