ป๊อปอัปราคาขาย · ต้นทุนรายบรรทัด · อนุมัติวงเงินเครดิต
สี่ป๊อปอัปที่เปิดจากแถวสินค้าหรือจังหวะบันทึกของจอ transaction ทุกตัวเป็นกล่องซ้อน (fixed inset-0 z-50) ป๊อปอัปราคา อ่านอย่างเดียวและคำนวณฝั่ง Go ส่วนตัวที่เขียนค่ากลับมีสองตัว (สูตรราคา → ใส่ราคาแถว, ล็อกต้นทุน → ใส่ต้นทุนแถว) ผู้เรียกคือ จอบันทึกเอกสารธุรกรรม มุมมองผู้ใช้ (UniversalTransScreen) และ ตารางรายการสินค้า/จำนวนเงินในเอกสาร (TransItemGrid) (กลไกตารางดู ตารางรายการและหน้าต่างค้นหา (SmlDataList, SmlLookupModal, SmlLookupInput)) ป๊อปอัปซีเรียล/ล็อต/ยอดคงเหลือดู ป๊อปอัปซีเรียล ล็อต ยอดคงเหลือ ประวัติ สินค้าทดแทน (SerialNumberModal / LotModal / StockBalanceModal / ItemHistoryModal / ItemReplacementModal); ป๊อปอัปเอกสาร/หมายเหตุดู ป๊อปอัปเอกสารและรายการสินค้า (ChequePickerModal / DocumentFlowModal / ItemNameModal / ItemRemarkModal / ItemGridContextMenu)
| ป๊อปอัป | เปิดจาก | ใช้ในจอ |
|---|---|---|
PriceFormulaModal |
ปุ่ม "฿" ข้างช่องราคา และปุ่ม "฿ สูตรราคาขาย" ที่แถบใต้ตาราง | UniversalTransScreen (:4201), StockBeginningBalanceScreen (:3956) |
PriceInfoModal |
ปุ่ม "ราคาขาย" ในคอลัมน์จัดการ | UniversalTransScreen (:4225) เฉพาะเอกสาร flag 30, 34, 36, 44, 46 (:268) |
CostLockModal |
ไอคอนกุญแจในคอลัมน์จัดการ | TransItemGrid (:1178) |
CreditApproveModal |
อัตโนมัติเมื่อ backend ตอบ CREDIT_PASSWORD: ตอนบันทึก |
UniversalTransScreen (:4234) |
ตารางสูตรราคาขาย (PriceFormulaModal)
- Props:
isOpen, onClose, itemCode, itemName, custCode, isEditing, onSelectPrice(price)(:28-40)custCodeคือลูกค้าหัวเอกสาร ใช้ให้ backend เลือกระดับราคาของลูกค้า (ar_customer.price_level) - ข้อมูล: เรียก
POST /api/process/transgrid/formula(transGridFormula) ได้แถวต่อหน่วยนับ แต่ละแถวมีระดับราคา 0-9 พร้อม "สูตร" และ "ราคาที่คำนวณแล้ว" (query-client.ts:453-469, หน้าจอ:61) สูตรอ้างราคาระดับ 0, ทศนิยมและการปัดเศษคำนวณฝั่ง Go ตามคอมเมนต์ (อ้างอิง C#_calcFormulaPrice) บวกราคาตามบาร์โค้ดจากic_inventory_barcodeของสินค้านั้น (:83) - สามแท็บ:
- "ตารางสูตรราคา 0 - 9 (Price Matrix)" คอลัมน์หน่วยนับ + ราคา 0..9 ช่องที่ราคาคำนวณได้ > 0 คลิกได้ (ขณะแก้ไข) ช่องที่ยังไม่มีราคาแสดงตัวสูตรดิบหรือ "-" (
:173, :216-262) - "ราคาขายมาตรฐาน (1 - 4)" การ์ดสี่ใบ: ราคาขาย 1 (ทั่วไป) · 2 (สมาชิก) · 3 (ตัวแทน) · 4 (ส่งพิเศษ) — ค่ามาจากระดับ 1-4 ของ แถวหน่วยนับแรก เท่านั้น (
:62-70, :269-272) - "ราคาตามบาร์โค้ด (N)" คอลัมน์ บาร์โค้ด · หน่วยนับ · ราคาปกติ · ราคาสมาชิก · เลือก (
:305-332) ปุ่ม "เลือก" ใช้ ราคาปกติ (price) ไม่ใช่ราคาสมาชิก
- "ตารางสูตรราคา 0 - 9 (Price Matrix)" คอลัมน์หน่วยนับ + ราคา 0..9 ช่องที่ราคาคำนวณได้ > 0 คลิกได้ (ขณะแก้ไข) ช่องที่ยังไม่มีราคาแสดงตัวสูตรดิบหรือ "-" (
- การนำราคาไปใช้: คลิกตัวเลข/การ์ด/ปุ่ม "เลือก" (เฉพาะ
isEditingและราคา > 0) →onSelectPriceแล้วปิด (:110-116) ในจอ transaction ทั่วไปจะอัปเดตช่องpriceของแถวเดิมแล้วคิดยอดบรรทัดใหม่ผ่าน backend (UniversalTransScreen.tsx:4201-4222) ส่วนในจอยกยอดสินค้าใส่ช่องpriceของแถวผ่านhandleDetailChange(StockBeginningBalanceScreen.tsx:3962-3966) - หัวป๊อปอัปบอก "(Ctrl+3 / Ctrl+4)" — คีย์ลัดนี้มีเฉพาะจอยกยอดสินค้าคงเหลือ (สินค้า/วัตถุดิบคงเหลือยกมา (StockBeginningBalanceScreen)) จอ transaction ทั่วไปไม่ผูกคีย์นี้ เปิดได้ด้วยปุ่มเท่านั้น
ดูราคาขาย 3 ตาราง (PriceInfoModal)
- Props:
isOpen, onClose, itemCode, itemName, custCode, roworder(:14-23)roworderคือic_inventory_price.roworderของราคาที่แถวใช้อยู่ ใช้ไฮไลต์ - ข้อมูลจาก
POST /api/process/transgrid/priceinfo(transGridPriceInfo) ได้ 3 ชุดข้อมูล:normal,group,standardและกลุ่มลูกค้าของเอกสารcustGroup(query-client.ts:487-520) ผลที่ตอบไม่ตรงคำขอปัจจุบันจะถูกถือว่ายังโหลดอยู่ (ป้องกันผลช้าเขียนทับ:126-142) - ตาราง: "ราคาขายทั่วไป", "ราคาขายตามกลุ่มลูกค้า (กลุ่ม …)" (แสดงเมื่อมีแถว), "ราคาขายมาตรฐาน" คอลัมน์: (กลุ่มลูกค้าหลัก/ชื่อ/ย่อย/ชื่อ เฉพาะตารางกลุ่ม) · ราคาขาย 1 · ราคาขาย 2 · หน่วยนับ · ชื่อหน่วย · จากจำนวน · ถึงจำนวน · จากวันที่ · ถึงวันที่ · ประเภทการขาย (ทั้งหมด / เงินสด / เงินเชื่อ) · สถานะ (ใช้งาน / ไม่ใช้งาน สีแดงเมื่อ
status = 1) (:25, :54-113) - แถวที่ตรงกับ
roworderของแถวบิล = ตัวหนาสีแดง (:87-90) ว่างเปล่าแสดง "ไม่มีข้อมูลราคา" ท้ายป๊อปอัป "โหมดดูข้อมูลอย่างเดียว — แก้ราคาที่ทะเบียน…" (:201) ไม่มีปุ่มนำราคาไปใช้ ใช้PriceFormulaModalแทน - ปุ่มนี้แสดงเฉพาะเอกสารกลุ่มขาย (flag 30, 34, 36, 44, 46) ตามคอมเมนต์ "จอขายที่ C# เปิดดูราคาขาย" (
UniversalTransScreen.tsx:266-268, 3759)
ล็อกต้นทุนรายบรรทัด (CostLockModal)
- Props:
itemCode, itemName, locked, sumOfCostFix, isEditing, onClose, onApply(isLockCost: 0|1, sumOfCostFix)(:5-18) - ช่องเดียว "ต้นทุนรวมของรายการนี้ (บาท)" — เป็น ต้นทุนรวมทั้งบรรทัด ไม่ใช่ต่อหน่วย (
NumberBoxชนิดamountไม่รับค่าติดลบ) พร้อมข้อความสถานะ: "ล็อกต้นทุนอยู่ — ประมวลผลสต็อกจะใช้ต้นทุนนี้แทนต้นทุนเฉลี่ย" หรือ "ยังไม่ล็อก — ใช้ต้นทุนเฉลี่ยตามปกติ" (:45-49) - ปุ่ม ล็อกต้นทุน (ส่ง 1 + ค่าที่กรอก), ปลดล็อกต้นทุน (ส่ง 0, เห็นเมื่อกำลังล็อกอยู่ขณะแก้ไข), ยกเลิก/ปิด; การกดตกลงเก็บ
is_lock_costและsum_of_cost_fixในแถว (TransItemGrid.tsx:1178-1190) แล้วไปกับการบันทึกเอกสาร ฝั่ง Go ใช้ค่าเหล่านี้ตอน rebuild สต็อก/ต้นทุน (process/service.go:308, 1157) และเขียนลงic_trans_detail.is_lock_cost / sum_of_cost_fix(trans.go:704) - ไอคอนกุญแจในตารางโผล่เมื่อแถวมีรหัสสินค้า ไม่ใช่โหมดจำนวนเงิน/เช็ค และ (กำลังแก้ไข หรือแถวนั้นล็อกอยู่) (
TransItemGrid.tsx:1020-1030) รายละเอียดเงื่อนไขดู ตารางรายการสินค้า/จำนวนเงินในเอกสาร (TransItemGrid) คอมเมนต์ต้นทางอ้าง C# Ctrl+F9 / Shift+F9 แต่ในเว็บเปิดได้ด้วยปุ่มเท่านั้น (ไม่พบการผูกคีย์ในTransItemGrid.tsx) - ต้นทุนซ่อน/ต้นทุนมาตรฐานของสินค้าดู ประมวลผลเฉลี่ยต้นทุนแฝง และต้นทุนนำเข้าสินค้าจากต่างประเทศ (HiddenCostScreen)
ขออนุมัติวงเงินเครดิต (CreditApproveModal)
- เปิดเมื่อไร: ตอนกดบันทึก ถ้า Go ตอบ 409 ข้อความขึ้นต้น
CREDIT_PASSWORD:จอตัดข้อความหลังโคลอนมาแสดงเป็นกล่องแดง แล้วรอให้ผู้ใช้กรอกผู้อนุมัติ (UniversalTransScreen.tsx:2796-2812) ส่งซ้ำพร้อมcreditApproveUser/creditApprovePassword(กดยกเลิก = ไม่บันทึก) - หน้าตา: หัว "ขออนุมัติวงเงินเครดิต", ข้อความจาก backend, ช่อง "รหัสผู้อนุมัติ" (สูงสุด 100 ตัว, โฟกัสอัตโนมัติ), ช่อง "รหัสผ่าน", ปุ่ม อนุมัติ (ปิดไว้จนกว่าจะกรอกรหัสผู้อนุมัติ) และ ยกเลิก (
CreditApproveModal.tsx:18-65) Enter ส่งฟอร์ม - เงื่อนไขฝั่ง Go (
checkTransCredittrans_credit.go:33-46,checkCreditLimittrans_save_rules.go:522+,creditApprovertrans_credit.go:50-70,approveCredit:77-82): ลูกค้าที่credit_status <> 0= บล็อกเลย ไม่มีป๊อปอัป ("ลูกค้า … ถูกปิดสถานะเครดิต":547; สถานะ 2 มีข้อความ "ยังไม่อนุมัติเปิดสถานะเครดิต":545); เกินวงเงินเมื่อerp_optionเปิดlock_credit_moneyและpassword_ar_credit= ขอรหัสผู้อนุมัติ (:564); ผู้อนุมัติต้องอยู่ในerp_userและมีapprove_ar_credit = 1ข้อความเมื่อผิดทุกกรณีเหมือนกัน "รหัสผู้อนุมัติหรือรหัสผ่านไม่ถูกต้อง" ชื่อผู้อนุมัติถูกเขียนลงic_trans.user_approve(trans_credit.go:42-45) เอกสารสั่งจอง/สั่งขาย flag 34/36 ใช้เส้นทางตรวจแยก (checkOrderCredit:178, ทำงานเมื่อเปิดตัวเลือกตรวจเครดิตใบสั่งo.orderCredit) ข้อมูลเครดิตลูกค้าดู รายละเอียดลูกหนี้ สินเชื่อ ผู้ติดต่อ รูปภาพ (CustomerDetailScreen) - รหัสผ่านไม่ถูกเก็บลง log หรือส่งกลับ (คอมเมนต์
trans.go:204: never echoed or logged)
ข้อควรระวัง
- ราคาที่นำไปใส่ผ่านสูตรราคาเป็นสตริงทศนิยมจาก backend ไม่ผ่านการคำนวณฝั่งเบราว์เซอร์ (ตัวเลข เงิน ภาษี และปี พ.ศ. ฝั่ง frontend (numeric.ts)) แต่จอยกยอดสินค้าเก็บเป็น number
- ถ้า backend ตอบข้อผิดพลาดอื่นที่ไม่ใช่
CONFIRM:/CREDIT_PASSWORD:ตอนบันทึก จอแจ้งข้อผิดพลาดตามปกติ ไม่มีป๊อปอัปนี้ PriceInfoModalแสดงเฉพาะ 5 flag ขาย ปุ่ม "ราคาขาย" จึงไม่มีในจอซื้อ/สต็อก ส่วนปุ่ม "฿" สูตรราคาขายไม่ถูกจำกัดตาม flag ในที่เรียก (UniversalTransScreen.tsx:3745-3758) แต่ซ่อนเมื่อแถวไม่มีรหัสสินค้า- ป๊อปอัปราคาไม่แก้ทะเบียนราคา การตั้งสูตร/ราคาทำที่จอข้อมูลสินค้า (ข้อมูลสินค้า (ItemScreen), ปรับราคาสินค้า นำเข้าไฟล์ราคาทั้งชุด (ModifyPriceScreen))
ที่มาในโค้ด
frontend/account/transaction/PriceFormulaModal.tsx:28-40props;:54-108โหลด;:110-116นำไปใช้;:164-200แท็บ;:216-262เมทริกซ์;:269-296มาตรฐาน;:305-335บาร์โค้ดfrontend/account/transaction/PriceInfoModal.tsx:14-25props/ป้ายประเภทการขาย;:34-123ตาราง;:125-205ตัวป๊อปอัปfrontend/account/transaction/CostLockModal.tsx:5-70frontend/account/transaction/CreditApproveModal.tsx:5-65frontend/account/transaction/TransItemGrid.tsx:916-923, 990-996, 1020-1030, 1116-1120, 1178-1190frontend/account/transaction/UniversalTransScreen.tsx:266-268, 2796-2812, 3745-3768, 4201-4236frontend/src/lib/query-client.ts:453-520(transGridFormula,transGridPriceInfo)backend/internal/adapter/inbound/http/process/transgrid_handler.go:36, 54;backend/internal/adapter/inbound/http/process/permission.go:29;backend/internal/application/process/trans_credit.go:24-90;trans_save_rules.go:513-570;trans.go:204, 704;backend/internal/application/process/service.go:308, 1157- ดูเพิ่ม: จอเอกสารธุรกรรมแบบเดียวกันทุกจอ (UniversalTransScreen) · ประเภทภาษี แยกนอก/รวมใน และภาษีซื้อ-ขาย (VAT type / vat_type / gl_journal_vat_buy / gl_journal_vat_sale) · สารบัญหน้าจอทั้งหมดของ SML Ai Account (ต้นไม้เมนู → หน้าจอ → โน้ต)