{{-- Partial สำหรับ 1 ชุด (Quotation + Invoice) ในหน้า my_document_quick_add รับตัวแปร: $index : ลำดับชุด (0,1,2,...) หรือ '__INDEX__' สำหรับ template ที่ใช้ clone ด้วย JS $bulkSet : array ['quotation_draft_id'=>, 'invoice_draft_id'=>, 'quotation'=>[...], 'invoice'=>[...]] หรือ null $banks : รายชื่อธนาคารสำหรับ dropdown โครงสร้าง: Quotation (เต็มความกว้าง) -> ปุ่มคัดลอกข้อมูล -> Invoice (เต็มความกว้าง) ใช้ Layout เดียวกับหน้า quotation_getedit.blade.php / invoice_getedit.blade.php (col-md-4 สำหรับวันที่, col-md-8/2/3 สำหรับ Description/Qty/Amount, col-md-6/2/3/1 สำหรับ Sub-service) เพียงแต่เปลี่ยนชื่อ id เป็น class ที่สโคปด้วย prefix js-q- / js-inv- เพื่อให้ใช้ซ้ำได้หลายชุดในหน้าเดียว ⚠️ หมายเหตุ (แก้บั๊กจากรอบก่อน): เดิมใช้ col-md-6 สองฝั่งวางเคียงกันในแถวเดียว แล้วแทรกปุ่ม col-12 คั่นกลาง ทำให้ Bootstrap grid ล้น (6+12 > 12) และตัดฝั่ง Invoice หลุดไปแสดงว่างๆ รอบนี้เปลี่ยนเป็นวางเต็มความกว้างสลับกัน (Quotation -> ปุ่ม -> Invoice) ไม่มีปัญหาการล้นแถวอีกต่อไป --}} @php $q = $bulkSet['quotation'] ?? []; $iv = $bulkSet['invoice'] ?? []; $qSubServices = $q['sub_services'] ?? []; $ivSubServices = $iv['sub_services'] ?? []; $qSubAmounts = $q['sub_amounts'] ?? []; $ivSubAmounts = $iv['sub_amounts'] ?? []; $qSubQtys = $q['sub_qtys'] ?? []; $ivSubQtys = $iv['sub_qtys'] ?? []; $qUseQty = $q['use_qty'] ?? 0; $ivUseQty = $iv['use_qty'] ?? 0; $qMainQty = $q['main_qty'] ?? 1; $ivMainQty = $iv['main_qty'] ?? 1; // --------------------------------------------------------------------- // Auto-match ข้อมูลธนาคารที่สแกนได้จากใต้ตาราง Invoice (หัวข้อ "Payment to") // กับรายการ Bank Account ที่มีอยู่ในระบบ เทียบด้วย "เลขที่บัญชี" เป็นหลัก // (ตัดอักขระที่ไม่ใช่ตัวเลขออกก่อนเทียบ กันกรณีรูปแบบขีด/ช่องว่างไม่ตรงกัน เช่น 091-0-18108-0 vs 0910181080) // // ถ้าไม่พบเลขบัญชีที่ตรงกันเลย แต่ AI สรุปมาว่าใต้ตารางเป็นข้อความสั้นๆ ไม่มีรายละเอียดธนาคาร // (เช่น "Pay to: SIIT Consulting Center") ให้สลับฟอร์มไปโหมด Remark แล้วเติมข้อความนั้นให้อัตโนมัติแทน // ผู้ใช้ยังตรวจสอบ/แก้ไขเองได้เสมอก่อนบันทึกจริง // --------------------------------------------------------------------- $ivBankSelectedId = null; $ivUseRemarkMode = false; $ivRemarkPrefill = ''; if (!empty($iv)) { $scannedAccountNo = preg_replace('/[^0-9]/', '', $iv['payment_account_no'] ?? ''); if ($scannedAccountNo !== '') { foreach ($banks as $bank) { $bankAccountDigits = preg_replace('/[^0-9]/', '', $bank->bank_account_no); if ($bankAccountDigits !== '' && $bankAccountDigits === $scannedAccountNo) { $ivBankSelectedId = $bank->bank_id; break; } } } if (!$ivBankSelectedId) { $remarkText = trim((string) ($iv['payment_remark'] ?? '')); if ($remarkText !== '') { $ivUseRemarkMode = true; $ivRemarkPrefill = $remarkText; } } } @endphp