Skip to main content

Step 1: ข้อมูลสัญญา

Step 1 คือจุดเริ่มต้นของการสร้างสัญญา ระบบใช้ข้อมูลในหน้านี้เป็น “โครงหลัก” เพื่อส่งต่อไปยัง Step 2 และ Step 3 และใช้เป็นฐานข้อมูลให้หน้าดูรายละเอียดสัญญา รวมถึงการคำนวณงานอื่น ๆ ที่อ้างอิงสัญญานี้ภายหลัง

หน้าสร้างสัญญา Step 1

จำนวนสัญญาที่สร้างได้​

  • จากโค้ดที่ตรวจสอบพบว่า 1 customer สามารถสร้างสัญญาได้หลายรายการ
  • ไม่พบการกำหนดเพดานจำนวนสัญญาสูงสุดใน schema.prisma, contracts.service.ts, หรือหน้าสร้างสัญญาที่ตรวจสอบ
  • หน้ารายการสัญญาของลูกค้าจึงแสดงแบบแบ่งหน้าเพื่อรองรับหลายรายการ

ใช้ทำอะไร​

  • สร้างข้อมูลหลักของสัญญา เช่น ชื่อสัญญา ช่วงอายุสัญญา และวันตัดรอบบิล
  • ระบุกลุ่มเงื่อนไขของสัญญา เช่น A1, A2, A3, B1, B2, C, D, E, F
  • กำหนดว่า สัญญานี้เกี่ยวข้องกับ ใช้รถร่วม หรือ Standby หรือไม่
  • ตั้งค่ารายละเอียดสายรถและรอบเดินรถที่ใช้ในสัญญา
  • เตรียมข้อมูลให้ Step 2 ใช้เลือกสูตรวางบิลที่ถูกต้อง

โครงของหน้าจอ​

Step 1 แบ่งเป็น 3 ส่วนหลัก:

  1. ข้อมูลสัญญา
    • ชื่อสัญญา
    • วันที่เริ่มสัญญา
    • วันที่สิ้นสุดสัญญา
    • วันที่ตัดรอบบิล
    • กลุ่มเงื่อนไข
  2. กำหนดสายรถ
    • ใช้ระบุสายรถที่อยู่ในสัญญา
    • ใช้กำหนดระยะทางและรอบเดินรถของแต่ละสาย
  3. ปุ่มการทำงาน
    • ยกเลิก
    • บันทึกร่าง
    • ถัดไป

ข้อมูลที่บังคับต้องกรอก​

ฟิลด์จำเป็นใช้ทำอะไร
ชื่อสัญญาใช่ใช้เป็นชื่ออ้างอิงหลักของสัญญา
วันที่เริ่มสัญญาใช่กำหนดวันเริ่มมีผลของสัญญา
วันที่สิ้นสุดสัญญาใช่กำหนดวันสิ้นสุดการใช้งานของสัญญา
วันที่ตัดรอบบิลใช่ใช้กำหนดวันตัดรอบสำหรับการวางบิล
กลุ่มเงื่อนไขใช่กำหนดว่าจะใช้ Step 2 และ Step 3 แบบใด
ประเภทการกำหนด ของ B1/B2ใช่เฉพาะ B1/B2ต้องเลือก กำหนดตามประเภทรถ หรือ กำหนดตามราคาเหมา
สายรถใช่ ยกเว้น Dใช้กำหนดเส้นทางหลักของสัญญา
ชื่อสายรถใช่ต้องไม่ซ้ำกันในสัญญาเดียวกัน
ระยะทางใช่ใช้ประกอบการคำนวณงานที่อิงระยะทาง
รอบเดินรถใช่อย่างน้อย 1 รอบต่อสายรถ
เวลาเดินรถใช่ใช้ระบุเวลาเดินรถของแต่ละรอบ
In/Outใช่ระบุประเภทเที่ยวของรอบนั้น

อธิบายแต่ละช่อง​

1) ชื่อสัญญา​

  • เป็นชื่อสำหรับอ้างอิงสัญญา
  • แนะนำให้ตั้งชื่อที่อ่านแล้วรู้ว่าเป็นสัญญาของลูกค้ารายใด
  • ช่องนี้บังคับกรอก

2) ระยะเวลาสัญญา​

  • ต้องกรอกทั้ง วันที่เริ่มสัญญา และ วันที่สิ้นสุดสัญญา
  • ระบบใช้ข้อมูลนี้เป็นช่วงเวลาการมีผลของสัญญา
  • ถ้ากรอกช่วงวันที่ไม่ครบ ระบบจะไม่ให้ผ่านไป Step ถัดไป

3) วันที่ตัดรอบบิล​

  • ใช้กำหนดวันที่ระบบจะใช้คำนวณการตัดรอบบิล
  • เป็นข้อมูลบังคับ
  • ต้องเลือกจากรายการวันที่ที่ระบบเตรียมไว้

4) กลุ่มเงื่อนไข​

  • เป็นตัวกำหนดรูปแบบการคิดเงินและรายละเอียดที่ต้องกรอกใน Step 2
  • มีหลายกลุ่ม เช่น A1, A2, A3, B1, B2, C, D, E, F
  • ถ้าเลือก B1 หรือ B2 ระบบจะบังคับให้เลือกประเภทการกำหนดเพิ่ม

5) ประเภทการกำหนดของ B1/B2​

  • ใช้เฉพาะเมื่อกลุ่มเงื่อนไขเป็น B1 หรือ B2
  • มี 2 แบบ:
    • กำหนดตามประเภทรถ
    • กำหนดตามราคาเหมา
  • ถ้าเลือกกลุ่มอื่น ระบบจะล้างค่านี้ออกอัตโนมัติ

6) ใช้รถร่วม​

  • เป็น checkbox สำหรับระบุว่าสัญญานี้เกี่ยวข้องกับรถร่วม
  • ถ้าเปิดไว้ ระบบจะนำไปใช้ในการแสดงและคำนวณข้อมูลที่เกี่ยวข้องในขั้นตอนถัดไป

7) กำหนดสายรถ​

  • ใช้ระบุสายรถที่อยู่ในสัญญานี้
  • 1 สัญญาสามารถมีหลายสายรถได้
  • สายรถแต่ละเส้นจะมีรายละเอียดชื่อสายและระยะทาง

8) รอบเดินรถของแต่ละสาย​

  • 1 สายรถต้องมีรอบเดินรถอย่างน้อย 1 รอบ
  • ในแต่ละรอบต้องระบุ
    • เวลาเดินรถ
    • ประเภทเที่ยว In หรือ Out
    • ตัวเลือก Shift
    • ตัวเลือก Office
  • Shift และ Office เป็นตัวเลือกเสริม แต่ เวลาเดินรถ และ ประเภทเที่ยว เป็นข้อมูลบังคับ

ฟีเจอร์คัดลอกสายรถ​

ฟีเจอร์นี้ช่วยให้สร้างสายรถใหม่ได้เร็วขึ้นเมื่อโครงสร้างใกล้เคียงกับสายรถเดิม

ทำอะไรได้บ้าง​

  • คัดลอกข้อมูลสายรถเดิมไปสร้างเป็นสายรถใหม่
  • คัดลอกชื่อสายรถ, ระยะทาง และรอบเดินรถที่มีอยู่
  • ลดเวลาการกรอกซ้ำเมื่อมีหลายสายรถที่รูปแบบคล้ายกัน

วิธีใช้งาน​

  1. กดไอคอนคัดลอกที่อยู่บนการ์ดของสายรถ
  2. ระบบจะสร้างสายรถใหม่ถัดจากสายรถต้นฉบับ
  3. ชื่อสายรถใหม่จะถูกตั้งเป็นลำดับอัตโนมัติ เช่น สายรถที่ 2
  4. ผู้ใช้งานสามารถแก้ชื่อสายรถ ระยะทาง และรอบเดินรถต่อได้ตามต้องการ

เหตุผลที่ฟีเจอร์นี้สำคัญ​

  • ลดงานกรอกข้อมูลซ้ำ
  • ช่วยให้เพิ่มสายรถได้เร็วขึ้น
  • เหมาะกับกรณีที่สัญญาหนึ่งมีหลายสายรถที่มี pattern คล้ายกัน

ข้อบังคับสำคัญของ Step 1​

  • ถ้าเลือกกลุ่ม D ระบบจะไม่ใช้รายการสายรถใน Step 1
  • ถ้าไม่ใช่กลุ่ม D ระบบจะบังคับให้มีสายรถอย่างน้อย 1 รายการ
  • ชื่อสายรถห้ามซ้ำกัน
  • เวลาเดินรถภายในสายเดียวกันห้ามซ้ำกัน
  • แต่ละสายรถต้องมีรอบเดินรถอย่างน้อย 1 รอบ
  • B1 และ B2 ต้องเลือก groupOptionalLogic
  • ปุ่ม Next จะตรวจข้อมูลก่อนข้ามไป Step 2

ลำดับการกรอกที่แนะนำ​

  1. กรอก ชื่อสัญญา
  2. เลือก วันที่เริ่มสัญญา และ วันที่สิ้นสุดสัญญา
  3. เลือก วันที่ตัดรอบบิล
  4. เลือก กลุ่มเงื่อนไข
  5. ถ้าเป็น B1/B2 ให้เลือก ประเภทการกำหนด
  6. เปิด/ปิด ใช้รถร่วม ตามการใช้งานจริง
  7. เพิ่มสายรถ
  8. กรอกชื่อสายรถและระยะทาง
  9. เพิ่มรอบเดินรถของแต่ละสาย
  10. ตรวจสอบว่าข้อมูลครบ แล้วกด บันทึกร่าง หรือ ถัดไป

ปุ่มด้านล่างทำอะไร​

  • ยกเลิก - ออกจากหน้าสร้างสัญญา
  • บันทึกร่าง - เก็บข้อมูลไว้ก่อน ยังไม่สร้างสัญญาจริง
  • ถัดไป - ตรวจความครบถ้วน แล้วไป Step 2

การป้องกันข้อมูลหายระหว่างกรอก​

ถ้าผู้ใช้แก้ข้อมูลในฟอร์มแล้วพยายามออกจากหน้าโดยยังไม่ได้ บันทึกร่าง หรือ บันทึกสัญญา ระบบจะขึ้น dialog เตือนก่อนออกจากหน้า ทั้งกรณีกดเปลี่ยน route ในแอปและกรณีปิด/refresh browser

พฤติกรรมนี้มาจาก hook ฝั่ง frontend โดยตรง จึงช่วยลดความเสี่ยงที่ข้อมูลใน Step 1 จะหายระหว่างกรอกหลายส่วนพร้อมกัน

อ้างอิงโค้ดล่าสุด​

  • /Users/chanchaitasujai/Project-ATP30/atp30-tos-frontend/src/views/pages/contracts/steps/Step1ContractInfo.tsx
  • /Users/chanchaitasujai/Project-ATP30/atp30-tos-frontend/src/views/pages/contracts/steps/hooks/useContractRouteValidation.ts
  • /Users/chanchaitasujai/Project-ATP30/atp30-tos-frontend/src/views/pages/contracts/forms/hooks/useUnsavedContractNavigationGuard.ts

ผลของ Step 1 ต่อระบบ​

ข้อมูลใน Step 1 จะถูกใช้ต่อใน

  • การเลือกฟอร์มใน Step 2
  • การคำนวณรายได้และใบวางบิล
  • การแสดงข้อมูลในหน้าดูรายละเอียดสัญญา
  • การเชื่อมต่อกับข้อมูลเที่ยวรถและงานปฏิบัติการอื่น ๆ

สรุปสั้น ๆ​

Step 1 คือการสร้างโครงสัญญาให้พร้อมก่อนจะไปกำหนดสูตรวางบิลใน Step 2 และเงื่อนไขรายได้ใน Step 3 ถ้าข้อมูลใน Step 1 ไม่ครบ ระบบจะไม่อนุญาตให้ไปต่อ