การจัดการ Trip Record

ภาพ: หน้ารายการ Trip Record
เมนู Trip Record คือหน้าวางแผนเที่ยวรถของฝั่งสำนักงาน โดยจัดข้อมูลในระดับ
ลูกค้า -> สัญญา -> สายรถ -> รอบวิ่ง -> วันที่
ข้อมูลที่สร้างจากหน้านี้จะไหลต่อไปยัง:
- หน้า Trip History สำหรับตรวจสอบและอนุมัติ
- หน้า Driver Income สำหรับคำนวณรายได้พนักงานขับรถ
- หน้า Customer Invoice / Partner Invoice สำหรับทำเอกสารการเงิน
หน้านี้มีไว้ทำอะไร
- เลือกสายรถที่ต้องการจัดการในแต่ละวัน
- ดูภาพรวมเที่ยวรถทั้งเดือนในรูปแบบตาราง
- เพิ่มรายการเที่ยวรถแบบ manual
- import รายการจำนวนมากจาก Excel
- export template ที่ผูกกับสายรถปัจจุบัน
โครงสร้างหน้าจอจากโค้ดจริง
1. แถบค้นหาด้านซ้าย
ระบบแบ่งเป็น 2 กลุ่มข้อมูล
ข้อมูลหลักลูกค้าเป็นข้อมูลบังคับสัญญาเป็นข้อมูลบังคับ และจะเลือกได้ก็ต่อเมื่อเลือกลูกค้าแล้วสายรถเป็นข้อมูลบังคับ และจะเลือกได้ก็ต่อเมื่อเลือกสัญญาแล้ว
ข้อมูลเพิ่มเติมรหัสรถเป็น optionalพนักงานขับรถเป็น optional
เมื่อกดปุ่ม ตกลง หน้า index จะ query ข้อมูลด้วย contractRouteId, vehicleId, และ driverId
ไปยัง GET /route-rounds
2. ตาราง Trip Record ด้านขวา
ตารางฝั่งขวาไม่ได้ดึงข้อมูลเป็นรายวันโดยตรง แต่ใช้ข้อมูล routeRounds เป็นคอลัมน์
แล้วสร้างแถววันที่ของเดือนใน frontend
- คอลัมน์บนสุด = รอบวิ่งของสายรถ
- แถวแนวตั้ง = ทุกวันของเดือนที่เลือก
- ค่าใน cell = ข้อมูลจาก
tripRecordVehiclesที่ตรงกับวันนั้น - ถ้าคลิก cell ระบบจะเปิด modal ของวันและรอบนั้น
ตัวเลือกเดือนด้านบนใช้เปลี่ยนช่วงวันที่ที่แสดงบนหน้าจอ
โดยฝั่ง frontend จะเอา tripRecordVehicles.date มาเทียบกับวันที่ในเดือนที่เลือกอีกชั้นหนึ่ง
3. ปุ่มหลักของหน้า
เพิ่ม Trip Record- ใช้เปิดหน้า
/trip-record/add - ระบบจะส่งค่าที่เลือกไว้ เช่น customer, contract, contract route, driver, vehicle ผ่าน query string
- ใช้เปิดหน้า
Import Excel- ใช้เปิด modal นำเข้าข้อมูล
Export Template- ใช้ดาวน์โหลด template ที่ผูกกับ
contractRouteIdปัจจุบัน
- ใช้ดาวน์โหลด template ที่ผูกกับ
ทั้ง 3 ปุ่มจะถูก disabled ถ้ายังไม่มีข้อมูลในตาราง
วิธีใช้งานที่แนะนำ
- เลือก
ลูกค้า - เลือก
สัญญา - เลือก
สายรถ - ถ้าต้องการดูเฉพาะรถหรือคนขับ ให้เลือก
รหัสรถหรือพนักงานขับรถเพิ่ม - กด ตกลง
- ตรวจสอบตารางของเดือนที่ต้องการ
- เลือกวิธีทำงานต่อ
- เพิ่มรายการแบบ manual
- import จาก Excel
- export template ไปกรอกภายนอก
สิ่งที่ระบบจำค่าไว้ให้
หน้า Trip Record มีการเก็บ state ลง sessionStorage ด้วย key trip-record:index-cache
เพื่อให้เมื่อกลับจากหน้าเพิ่มข้อมูลหรือกลับเข้าหน้าเดิม ระบบสามารถ restore filter ที่ใช้ล่าสุดได้
ผลที่ผู้ใช้งานจะเห็นคือ:
- ไม่ต้องเลือก customer / contract / route ใหม่ทุกครั้ง
- ถ้ากลับมาจากหน้าเพิ่มรายการ ระบบยังจำ context เดิมไว้
การสร้างรายการแบบ manual
เมื่อกด เพิ่ม Trip Record ระบบจะพาไปหน้า /trip-record/add
ข้อมูลที่บังคับใน flow นี้จาก schema จริงคือ:
startDateendDate- อย่างน้อย 1 ชุด
tripRecords - ในแต่ละชุดต้องมีอย่างน้อย 1
tripRoundId - ในแต่ละแถวของ
tripRecordVehiclesต้องมีทั้งdriverและvehicle
พฤติกรรมสำคัญที่ควรรู้:
- ถ้าเลือก
รหัสรถระบบจะพยายามเติมพนักงานขับรถที่ผูกกับรถคันนั้นให้อัตโนมัติ - ถ้าเลือก
พนักงานขับรถระบบจะพยายามเติมรหัสรถที่ผูกกับคนขับคนนั้นให้อัตโนมัติ - การค้นหารถและคนขับในหน้าเพิ่มรายการจะผูกกับ
workAreaIdของสัญญา
การนำเข้าข้อมูลผ่าน Excel
ถ้าต้องการ import จำนวนมาก ให้ใช้ปุ่ม Import Excel
สิ่งที่หน้า modal ตรวจจากโค้ดจริงมีดังนี้
- รองรับเฉพาะ
.xlsและ.xlsx - ขนาดไฟล์ต้องไม่เกิน
5 MB - ระบบอ่านเฉพาะ sheet แรกของไฟล์
- ระบบตรวจ header แบบตรงตัวทุกคอลัมน์
- ถ้า header ไม่ตรง ระบบจะบอกให้ใช้ template ที่ระบบเตรียมไว้
ถ้าต้องการอ่าน flow import แบบละเอียดแยกตามภาพหน้าจอ ดู Trip Record
การ Export Template
ปุ่ม Export Template จะเรียก GET /trip-records/export-template
โดยส่ง contractRouteId ของสายรถที่ผู้ใช้เลือกอยู่
ผลคือ template ที่ได้จะผูกกับสายรถปัจจุบัน เหมาะกับการกรอกข้อมูลแล้ว import กลับเข้าระบบอีกครั้ง
จุดที่ต้องระวัง
- ถ้ายังไม่เลือก
ลูกค้า,สัญญา, และสายรถระบบจะยังไม่ query ตาราง - ถ้าไม่มีข้อมูล
routeRoundsปุ่มเพิ่ม Trip Record,Import Excel, และExport Templateจะกดไม่ได้ - ตัวเลือกเดือนบนตารางเป็น logic ฝั่งหน้าจอ ไม่ใช่ query parameter ของหน้า index
- Trip Record ที่สร้างจากหน้านี้ยังต้องผ่านการตรวจสอบและอนุมัติในหน้า
Trip Historyก่อนนำไปใช้คำนวณต่อ
หน้านี้เชื่อมกับอะไรบ้าง
อ้างอิงโค้ด
atp30-tos-frontend/src/views/pages/trip-record/index.tsxatp30-tos-frontend/src/views/pages/trip-record/TableSession.tsxatp30-tos-frontend/src/views/pages/trip-record/TripTable.tsxatp30-tos-frontend/src/views/pages/trip-record/CreateTripRecord.tsxatp30-tos-frontend/src/views/pages/trip-record/ImportTripRecordModal.tsxatp30-tos-frontend/src/api/trip-record.tsatp30-tos-frontend/src/types/tripRound.ts