ข้ามไปยังเนื้อหาหลัก

ใบจัดส่งสินค้าหน้าร้าน

เมนูนี้ใช้จัดการใบแจ้งหนี้ที่ต้องเตรียมสินค้าและส่งมอบที่สาขา/หน้าร้าน ไม่ใช่หน้าขาย POS และไม่ใช่ใบจัดสินค้าสายส่ง หน่วยงานที่ผู้ใช้เห็นบนหน้าจอเปลี่ยนเป็น ใบสั่งขาย (orderNo) ส่วนการรับงาน บันทึก Lot/Batch สร้าง delivery และตัดสต๊อก B1 ยังคงเรียก API แยกทีละ Invoice

จุดเข้าใช้งาน

แอปหน้าจอ
MobileStorefrontListScreen -> StorefrontDetailScreen
POS TerminalshippingStorefront -> StorefrontDetailForm ใน HomeScreen

เมนูนี้แสดงข้อมูลอะไร

รายการมาจากใบแจ้งหนี้ที่มี shippingType = 2 ระบบตัดรายการที่ invoiceStatus = CANCELED ออกทั้งหมดก่อน Group จากนั้น dedupe และ Group รายการที่เหลือด้วย orderNo หากไม่มีเลขใบสั่งขายจึง fallback เป็น key ระดับ Invoice

แต่ละการ์ดแสดงชื่อลูกค้า เลขใบสั่งขาย เลขใบเบิกทุกใบแยกคนละบรรทัด พนักงานขาย และพนักงานคลัง ส่วนแท็บ NEW จะประเมินจากทั้ง Group โดย Group จะยังเป็น NEW จนกว่า Invoice ทุกใบจะเป็น CONFIRMED

สีพื้นหลังของการ์ด Group

ระบบประเมินสีหลังตัด Invoice ที่ยกเลิกออกแล้ว ตามลำดับดังนี้:

เงื่อนไขของ Groupสีพื้นหลัง
Invoice ทุกใบเป็น CONFIRMEDเขียว #76ffa3
มี Invoice ใดเป็น NEW และ hasDelivery != nullม่วง #d382ff
มี Invoice ใดมีคำขอยกเลิกค้างอยู่ (canceledNote != null และ rejectCanceledAt == null)ม่วงอ่อน #e7bce7
Group ผสม/ยังไม่ยืนยันกรณีอื่นเขียวอมเหลือง #cffd67

เมื่อกดการ์ด ระบบส่ง Invoice ID ทุกใบพร้อม orderNo เข้าหน้ารายละเอียด แล้วโหลดทุก Invoice ด้วย includeLot=true มารวมในหน้าเดียว รายการสินค้าแต่ละบรรทัดยังเก็บ sourceInvoiceId, sourceInvoiceNo, sourceInvoiceStatus และผู้รับงานของ Invoice ต้นทาง เพื่อให้ validation และ API ยังคงแยกตาม Invoice ได้

Flow หลัก

เงื่อนไขการรับงาน

เงื่อนไขพฤติกรรม
สาขาหลักผู้ใช้ในแผนกที่รับงานได้จะถูกถามให้รับงานเมื่อ acceptedBy ยังว่าง
สาขาย่อยเปิด accept flow เช่นกัน แต่การแก้ไข Lot/Batch ใช้สิทธิ์เดียวกับสาขาหลักและไม่ขึ้นกับ isMain
ทุก Invoice รับงานไปแล้วไม่ถามซ้ำ
มีทั้งใบที่รับและยังไม่รับงานแสดง Modal ครั้งเดียว เมื่อยืนยันจะเรียก Accept API ทีละใบ เฉพาะ Invoice ที่ acceptedBy ยังว่าง ใบที่รับงานแล้วจะไม่ยิงซ้ำ
ผู้ใช้ที่รับงานแก้และบันทึกงานต่อได้
ผู้ใช้ overrideuser code 999997 ถือเป็นผู้มีสิทธิ์ action

สิทธิ์รับงานใช้แผนก 8, 12, 22, 28

เงื่อนไขการตรวจสินค้าและ Lot/Batch

กฎสำคัญของรายการสินค้า:

กฎพฤติกรรม
สถานะที่แก้ได้แก้การตรวจสินค้าได้เฉพาะเมื่อ Invoice ต้นทางเป็น NEW; สินค้าของ Invoice ที่ CONFIRMED ยังแสดงแต่เปิดตัวเลือก Lot/Batch ไม่ได้
Lot เดิมจาก invoiceหาก items[].lots[] จาก GET /invoices/{id}?includeLot=true มีข้อมูลที่ใช้ได้ ระบบแสดงเป็นค่าเริ่มต้น และผู้ใช้ยังแก้จำนวน ลบ หรือเลือก Lot/Batch ใหม่ได้ เมื่อเอกสารเป็น NEW และมีสิทธิ์แก้ไข
การเลือก lotเมื่อกดรายการที่มี Lot เดิม ระบบเปิดตัวแก้ไขพร้อมค่าปัจจุบันเพื่อแก้ไข/ลบแล้วเพิ่ม Lot ใหม่ได้ ส่วนรายการที่ยังไม่มี Lot จะโหลดจาก stock ปัจจุบัน ถ้ามี lot เดียวที่ available เพียงพอ ระบบเติมให้เอง
isMainไม่ใช้เป็นเงื่อนไขล็อกหรือจำกัดการเลือก Lot/Batch การแก้ไขใช้กติกาเดียวกันทั้งสาขาหลักและสาขาย่อย
ยอดคงเหลือตัวเลือกและ validation ใช้ available หลังหัก booking ไม่ใช้ quantity ดิบ และไม่แสดง lot ที่ available ไม่มีเหลือ
ไม่พบ lotในตัวแก้ไขจะแสดงข้อความสีแดงว่าไม่พบข้อมูล Lot/Batch พร้อมปุ่มโหลดใหม่ และระหว่างโหลดจะแสดง loading icon
ข้อมูลสินค้าที่ต้องมีต้องมี itemCode, whsCode, company ก่อนโหลด lot
lot ซ้ำสินค้าหนึ่งบรรทัดเลือก Lot/Batch เดิมซ้ำไม่ได้
จำนวนคงเหลือ lotจำนวนที่กรอกต้องไม่เกินยอดคงเหลือของ lot นั้น
จำนวนตาม invoice lineจำนวนที่กรอกต้องไม่เกินจำนวนค้างตรวจของบรรทัดนั้น
การตรวจครบต้องตรวจครบทุกบรรทัดก่อนบันทึก

เงื่อนไขการบันทึก Delivery / B1

ปุ่มบันทึกจะแสดงเมื่อใน Group มีอย่างน้อยหนึ่ง Invoice ที่ไม่ใช่ CONFIRMED/CANCELED และผู้ใช้มีสิทธิ์ action สำหรับใบนั้น ส่วน Invoice ที่ CONFIRMED แล้วจะแสดงแบบอ่านอย่างเดียวและไม่ถูกส่งซ้ำ

ก่อนบันทึก ระบบจะบล็อกกรณีต่อไปนี้:

Guardกรณีที่บล็อก
สิทธิ์ผู้ใช้ไม่มีสิทธิ์บันทึกข้อมูลหน้าร้าน
SAP referenceไม่มี refKey แปลว่า invoice ยังไม่มีข้อมูล SAP/B1
มีคำขอยกเลิกมี canceledAt และยังไม่มี rejectCanceledAt
ตรวจสินค้าไม่ครบจำนวนตรวจของบางรายการยังน้อยกว่าจำนวนตาม invoice

ระบบ Validate Invoice ที่ยังไม่ยืนยันทีละใบ โดยตรวจเฉพาะรายการสินค้าของ Invoice นั้น เมื่อทุกใบผ่านแล้ว Mobile และ POS Terminal จะวนทำงานตามลำดับทีละ Invoice:

  1. ข้าม Invoice ที่เป็น CONFIRMED
  2. เพิ่ม Invoice ปัจจุบันเข้า delivery 0 หากยังไม่มี deliveryId
  3. สร้าง payload invoices[].items[].lots[] จากรายการสินค้าของ Invoice ปัจจุบันเท่านั้น
  4. บันทึก delivery lots ของ Invoice ปัจจุบัน
  5. สร้าง delivery/ส่งตัดสต๊อกของ Invoice ปัจจุบัน
  6. ทำ Invoice ถัดไป แล้วจึงโหลดรายละเอียด Group และรายการใหม่เมื่อครบทุกใบ

Metadata ในรายละเอียดแบบ Group

ข้อมูลการแสดงผล
ลูกค้าชื่อลูกค้าร่วมของใบสั่งขาย
ใบสั่งขายorderNo
ใบเบิกแสดง invoiceNo ทุกใบต่อกันด้วย ,
รายการสินค้ารวมสินค้าจากทุก Invoice ใน Group
สินค้าของใบที่ยืนยันแล้วแสดงเป็นรายการที่เสร็จ/อ่านอย่างเดียว และปิดการเลือก Lot/Batch

เงื่อนไขการแจ้งยกเลิก

การยกเลิกเป็นการส่งคำขอพร้อมเหตุผล ไม่ใช่การลบประวัติ Invoice ในรายละเอียดแบบ Group ระบบตรวจ guard จากทั้ง Group และส่งคำขอยกเลิกทีละใบเฉพาะ Invoice ที่ยังไม่ CONFIRMED ส่วนการพิมพ์ใบแจ้งหนี้จะพิมพ์ Invoice ทุกใบใน Group ทีละใบ

สิทธิ์และ Guard

หัวข้อพฤติกรรม
Terminal menu keyshippingStorefront
deptCode ที่เห็นเมนู-2, 1, 2, 3, 4, 7, 29, 21, 8, 9, 12, 20, 22, 23, 27, 28
แผนกรับงาน8, 12, 22, 28
แผนกบันทึก/action2, 8, 22 หรือผู้ใช้ที่รับงาน หรือ override user 999997
สถานะ Invoice ที่แก้ได้Invoice ต้นทางเป็น NEW เท่านั้น
สถานะที่ซ่อนปุ่มบันทึกCONFIRMED, CANCELED, หรือไม่มีสิทธิ์ action

Mobile vs POS Terminal

หัวข้อMobilePOS Terminal
การนำทางstorefront stack แบบเต็มหน้าจอHomeScreen split-pane
รับงานprompt ในหน้ารายละเอียดprompt ใน detail form
เลือก Lot/Batchbottom sheet และ modalmodal/picker ใน split-pane
การบันทึกบันทึก delivery lots + create deliveryใช้ service flow เดียวกัน
ยกเลิกmodal กรอกเหตุผลmodal กรอกเหตุผล

Developer Handoff Map

ส่วนโค้ด
Mobile list/detailapps/mobile/src/screens/storefrontStack/storefrontListScreen, storefrontDetailScreen
Mobile helpersapps/mobile/src/screens/storefrontStack/storefrontDetailScreen/helpers.ts
Terminal split dataapps/pos-terminal/src/services/splitMenuData.ts -> shippingStorefront
Terminal detailapps/pos-terminal/src/screens/HomeScreen/StorefrontDetailForm.tsx
Terminal rulesapps/pos-terminal/src/screens/HomeScreen/StorefrontDetailHelpers.ts
Storefront serviceapps/*/src/services/storefront.ts
Delivery/lot serviceapps/*/src/services/shipping.ts

เอกสารที่เกี่ยวข้อง