File manager - Edit - /home/webapp69.cm.in.th/u69319090028/Shop/views/admin/finance/settlements.php
Back
<?php $st = $stats ?? []; $statusOpts = [ 'all' => 'ทุกสถานะ', 'pending' => 'รอโอน (Pending)', 'processing' => 'กำลังดำเนินการ (Processing)', 'completed' => 'โอนสำเร็จแล้ว (Completed)', 'failed' => 'การโอนล้มเหลว (Failed)', ]; function settlementStatusBadge(string $s): string { switch ($s) { case 'pending': return '<span class="badge bg-warning text-dark"><i class="bi bi-clock me-1"></i>รอโอน</span>'; case 'processing': return '<span class="badge bg-primary"><i class="bi bi-arrow-repeat me-1"></i>กำลังโอน</span>'; case 'completed': return '<span class="badge bg-success"><i class="bi bi-check-circle me-1"></i>โอนสำเร็จ</span>'; case 'failed': return '<span class="badge bg-danger"><i class="bi bi-x-circle me-1"></i>ล้มเหลว</span>'; case 'cancelled': return '<span class="badge bg-secondary">ยกเลิก</span>'; default: return '<span class="badge bg-light text-dark border">' . e($s) . '</span>'; } } ?> <div class="d-flex flex-column flex-md-row justify-content-between align-items-md-center gap-2 mb-4"> <div> <h4 class="fw-bold mb-1 text-dark">รอบการโอนเงินให้ร้านค้า (Vendor Settlements & Payouts)</h4> <p class="text-muted small mb-0">ตรวจสอบรอบตัดบัญชี คำนวณยอดโอนสุทธิ บันทึกเลขอ้างอิงการโอนเงิน และประวัติการจ่ายเงิน</p> </div> <div class="d-flex gap-2"> <a href="<?= url('/admin/finance') ?>" class="btn btn-outline-secondary btn-sm py-1 px-3"> <i class="bi bi-arrow-left me-1"></i>ภาพรวมการเงิน </a> </div> </div> <!-- ── KPI Summary Cards ──────────────────────────────── --> <div class="row g-3 mb-4"> <div class="col-6 col-lg-3"> <div class="admin-metric-card h-100"> <div class="d-flex align-items-center justify-content-between mb-2"> <span class="small text-muted fw-semibold">ยอดรอโอน (Pending)</span> <div class="admin-metric-icon-box bg-warning bg-opacity-10 text-warning"> <i class="bi bi-clock-history"></i> </div> </div> <div class="admin-metric-value text-warning">฿<?= number_format((float)($st['pending_amount'] ?? 0), 2) ?></div> <div class="admin-metric-sub"><?= (int)($st['pending_count'] ?? 0) ?> รายการรอโอน</div> </div> </div> <div class="col-6 col-lg-3"> <div class="admin-metric-card h-100"> <div class="d-flex align-items-center justify-content-between mb-2"> <span class="small text-muted fw-semibold">โอนสำเร็จแล้ว (Paid)</span> <div class="admin-metric-icon-box bg-success bg-opacity-10 text-success"> <i class="bi bi-check2-circle"></i> </div> </div> <div class="admin-metric-value text-success">฿<?= number_format((float)($st['completed_amount'] ?? 0), 2) ?></div> <div class="admin-metric-sub"><?= (int)($st['completed_count'] ?? 0) ?> รอบโอนเสร็จสิ้น</div> </div> </div> <div class="col-6 col-lg-3"> <div class="admin-metric-card h-100"> <div class="d-flex align-items-center justify-content-between mb-2"> <span class="small text-muted fw-semibold">ยอดขายรวมในรอบโอน</span> <div class="admin-metric-icon-box bg-primary bg-opacity-10 text-primary"> <i class="bi bi-receipt"></i> </div> </div> <div class="admin-metric-value text-primary">฿<?= number_format((float)($st['total_sales'] ?? 0), 2) ?></div> <div class="admin-metric-sub">Gross Sales Settled</div> </div> </div> <div class="col-6 col-lg-3"> <div class="admin-metric-card h-100"> <div class="d-flex align-items-center justify-content-between mb-2"> <span class="small text-muted fw-semibold">ค่าคอมมิชชันที่หัก</span> <div class="admin-metric-icon-box bg-info bg-opacity-10 text-info"> <i class="bi bi-percent"></i> </div> </div> <div class="admin-metric-value text-info">฿<?= number_format((float)($st['total_commission'] ?? 0), 2) ?></div> <div class="admin-metric-sub">Commission Deducted</div> </div> </div> </div> <!-- ── Filter Bar ──────────────────────────────────────── --> <div class="card border-0 shadow-sm mb-4"> <div class="card-body py-2 px-3"> <form method="GET" action="<?= url('/admin/finance/settlements') ?>" class="d-flex flex-wrap gap-2 align-items-end"> <div> <label class="form-label small fw-bold mb-1 text-muted">สถานะการโอน</label> <select name="status" class="form-select form-select-sm" style="min-width:150px;"> <?php foreach ($statusOpts as $val => $lbl): ?> <option value="<?= $val ?>" <?= ($filters['status'] ?? 'all') === $val ? 'selected' : '' ?>><?= $lbl ?></option> <?php endforeach; ?> </select> </div> <div style="min-width: 170px;"> <label class="form-label small fw-bold mb-1 text-muted">ร้านค้า</label> <select name="store_id" class="form-select form-select-sm"> <option value="">ทุกร้านค้า</option> <?php if (!empty($allStores)): foreach ($allStores as $sItem): ?> <option value="<?= (int)$sItem['id'] ?>" <?= ($filters['store_id'] ?? '') == $sItem['id'] ? 'selected' : '' ?>><?= e($sItem['store_name']) ?></option> <?php endforeach; endif; ?> </select> </div> <div class="flex-grow-1"> <label class="form-label small fw-bold mb-1 text-muted">ค้นหา</label> <input type="text" name="q" class="form-control form-control-sm" placeholder="ชื่อร้าน, ผู้ใช้, Ref โอนเงิน..." value="<?= e($filters['q'] ?? '') ?>"> </div> <button class="btn btn-primary btn-sm px-3"> <i class="bi bi-search me-1"></i>ค้นหา </button> <?php if (!empty(array_filter($filters, fn($v) => $v !== 'all' && $v !== ''))): ?> <a href="<?= url('/admin/finance/settlements') ?>" class="btn btn-outline-secondary btn-sm">ล้าง</a> <?php endif; ?> </form> </div> </div> <!-- ── Settlements Table ───────────────────────────────── --> <div class="admin-table-container mb-4"> <div class="admin-table-header"> <div class="d-flex align-items-center gap-2"> <i class="bi bi-bank2 text-primary"></i> <span class="fw-bold text-dark" style="font-size: 0.9rem;">ประวัติรอบการโอนเงิน</span> <span class="badge bg-light text-muted border ms-1"><?= count($settlements ?? []) ?> รายการ</span> </div> </div> <div class="table-responsive"> <table class="admin-table"> <thead> <tr> <th width="70">ID</th> <th>ร้านค้า / ผู้รับเงิน</th> <th>รอบบัญชี</th> <th class="text-end">ยอดขาย</th> <th class="text-end">ค่าคอม</th> <th class="text-end">ยอดโอนสุทธิ</th> <th>บัญชีธนาคาร</th> <th>สถานะ</th> <th>เลขอ้างอิง / วันที่โอน</th> <th class="text-end">ดำเนินการ</th> </tr> </thead> <tbody> <?php if (empty($settlements)): ?> <tr> <td colspan="10" class="text-center text-muted py-4">ไม่พบรายการรอบการโอนเงิน</td> </tr> <?php else: foreach ($settlements as $se): ?> <tr> <td class="font-monospace small text-muted">#<?= (int)$se['id'] ?></td> <td> <div class="fw-semibold text-dark"><?= e($se['store_name']) ?></div> <div class="text-muted small">@<?= e($se['owner_username']) ?></div> </td> <td class="small text-muted font-monospace"><?= e($se['revenue_period'] ?? date('M Y', strtotime($se['created_at']))) ?></td> <td class="text-end font-monospace small">฿<?= number_format((float)$se['total_sales'], 2) ?></td> <td class="text-end font-monospace small text-warning">฿<?= number_format((float)$se['commission_deduction'], 2) ?></td> <td class="text-end font-monospace fw-bold text-success fs-6">฿<?= number_format((float)$se['seller_receives'], 2) ?></td> <td class="small"> <?php if (!empty($se['bank_name'])): ?> <div class="fw-medium text-dark"><?= e($se['bank_name']) ?></div> <div class="text-muted font-monospace" style="font-size:0.75rem;"><?= e($se['bank_account_no'] ?? '') ?></div> <?php else: ?> <span class="text-muted">—</span> <?php endif; ?> </td> <td><?= settlementStatusBadge($se['payment_status']) ?></td> <td class="small"> <?php if (!empty($se['payment_reference'])): ?> <div class="font-monospace text-primary fw-medium"><?= e($se['payment_reference']) ?></div> <?php endif; ?> <div class="text-muted" style="font-size:0.75rem;"> <?= !empty($se['transfer_date']) ? date('d/m/Y H:i', strtotime($se['transfer_date'])) : '—' ?> </div> </td> <td class="text-end"> <?php if (AdminMiddleware::can('finance.settle')): ?> <button type="button" class="btn btn-outline-primary btn-sm py-1 px-2" data-bs-toggle="modal" data-bs-target="#processSettlementModal<?= (int)$se['id'] ?>"> <i class="bi bi-pencil-square me-1"></i>บันทึกโอน </button> <?php endif; ?> </td> </tr> <!-- Process Settlement Modal --> <?php if (AdminMiddleware::can('finance.settle')): ?> <div class="modal fade" id="processSettlementModal<?= (int)$se['id'] ?>" tabindex="-1" aria-hidden="true"> <div class="modal-dialog modal-dialog-centered"> <div class="modal-content"> <form action="<?= url('/admin/finance/settlements/' . (int)$se['id'] . '/process') ?>" method="POST"> <?= Security::csrfField() ?> <div class="modal-header bg-primary text-white py-3"> <h6 class="modal-title fw-bold"> <i class="bi bi-bank2 me-2"></i>บันทึกการโอนเงิน #<?= (int)$se['id'] ?> </h6> <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"></button> </div> <div class="modal-body p-4 small"> <div class="mb-3 p-3 bg-light rounded border"> <div class="d-flex justify-content-between mb-1"> <span class="text-muted">ร้านค้า:</span> <strong><?= e($se['store_name']) ?></strong> </div> <div class="d-flex justify-content-between mb-1"> <span class="text-muted">ยอดที่ต้องโอนสุทธิ:</span> <strong class="text-success fs-5 font-monospace">฿<?= number_format((float)$se['seller_receives'], 2) ?></strong> </div> <div class="d-flex justify-content-between"> <span class="text-muted">บัญชีผู้รับ:</span> <span><?= e($se['bank_name'] ?? 'พร้อมเพย์') ?> (<?= e($se['bank_account_no'] ?? '—') ?>)</span> </div> </div> <div class="mb-3"> <label class="form-label fw-bold text-dark mb-1">สถานะการโอน <span class="text-danger">*</span></label> <select name="status" class="form-select form-select-sm" required> <option value="completed" <?= $se['payment_status'] === 'completed' ? 'selected' : '' ?>>โอนสำเร็จแล้ว (Completed)</option> <option value="processing" <?= $se['payment_status'] === 'processing' ? 'selected' : '' ?>>กำลังดำเนินการ (Processing)</option> <option value="pending" <?= $se['payment_status'] === 'pending' ? 'selected' : '' ?>>รอโอน (Pending)</option> <option value="failed" <?= $se['payment_status'] === 'failed' ? 'selected' : '' ?>>การโอนล้มเหลว (Failed)</option> </select> </div> <div class="mb-3"> <label class="form-label fw-bold text-dark mb-1">เลขอ้างอิงการโอน / Transaction Ref</label> <input type="text" name="payment_reference" class="form-control form-control-sm font-monospace" placeholder="เช่น TXN-20260822-001 หรือ หมายเลขอ้างอิงธนาคาร" value="<?= e($se['payment_reference'] ?? '') ?>"> </div> <div class="mb-0"> <label class="form-label fw-bold text-dark mb-1">หมายเหตุบันทึก</label> <textarea name="note" class="form-control form-control-sm" rows="2" placeholder="รายละเอียดเพิ่มเติม..."><?= e($se['note'] ?? '') ?></textarea> </div> </div> <div class="modal-footer py-2 bg-light"> <button type="button" class="btn btn-sm btn-secondary" data-bs-dismiss="modal">ยกเลิก</button> <button type="submit" class="btn btn-sm btn-success px-3"> <i class="bi bi-check2-circle me-1"></i>บันทึกผลการโอน </button> </div> </form> </div> </div> </div> <?php endif; ?> <?php endforeach; endif; ?> </tbody> </table> </div> </div> <!-- ── Unsettled Store Balances Table ─────────────────── --> <div class="admin-table-container"> <div class="admin-table-header"> <div class="d-flex align-items-center gap-2"> <i class="bi bi-clock text-primary"></i> <span class="fw-bold text-dark" style="font-size: 0.9rem;">ยอดขายสำเร็จรอสรุปรอบโอน (Completed Orders Pending Settlement)</span> </div> </div> <div class="table-responsive"> <table class="admin-table"> <thead> <tr> <th>ร้านค้า</th> <th>เจ้าของร้าน</th> <th class="text-center">ออเดอร์สำเร็จ</th> <th class="text-end">ยอดขายรวม</th> <th class="text-end">ค่าคอมมิชชัน</th> <th class="text-end">ยอดสุทธิที่ต้องโอน</th> </tr> </thead> <tbody> <?php if (empty($unsettled)): ?> <tr> <td colspan="6" class="text-center text-muted py-4">ยังไม่มียอดขายสำเร็จรอตัดรอบโอน</td> </tr> <?php else: foreach ($unsettled as $un): ?> <tr> <td> <div class="fw-semibold text-dark"><?= e($un['store_name']) ?></div> <div class="text-muted small font-monospace">/shop/<?= e($un['store_slug']) ?></div> </td> <td> <div class="small fw-medium text-dark"><?= e($un['owner_name']) ?></div> <div class="text-muted small">@<?= e($un['owner_username']) ?></div> </td> <td class="text-center font-monospace"><?= number_format((int)$un['completed_orders']) ?></td> <td class="text-end font-monospace fw-semibold text-dark">฿<?= number_format((float)$un['gross_sales'], 2) ?></td> <td class="text-end font-monospace fw-bold text-warning">฿<?= number_format((float)$un['total_commission'], 2) ?></td> <td class="text-end font-monospace fw-bold text-success fs-6">฿<?= number_format((float)$un['net_receivable'], 2) ?></td> </tr> <?php endforeach; endif; ?> </tbody> </table> </div> </div>
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0.23 |
proxy
|
phpinfo
|
Settings