File manager - Edit - /home/webapp69.cm.in.th/u69319090039/Shop39/app/Controllers/Admin/AdminPayoutController.php
Back
<?php class AdminPayoutController extends Controller { /** * Display all seller payout requests * GET /admin/payouts */ public function index(): void { $db = Database::getInstance(); // Ensure table exists $db->exec(" CREATE TABLE IF NOT EXISTS seller_payouts ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, seller_id INT UNSIGNED NOT NULL, amount DECIMAL(10,2) NOT NULL, payment_method VARCHAR(50) NOT NULL DEFAULT 'bank_transfer', bank_name VARCHAR(100) NULL, bank_account VARCHAR(100) NULL, promptpay_number VARCHAR(50) NULL, qr_code VARCHAR(255) NULL, status ENUM('pending', 'processing', 'completed', 'rejected') NOT NULL DEFAULT 'pending', transaction_reference VARCHAR(150) NULL, admin_note TEXT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (seller_id) REFERENCES seller_profiles (id) ON DELETE CASCADE, INDEX idx_payouts_seller (seller_id, status) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; "); $statusFilter = trim(Security::sanitizeString($_GET['status'] ?? 'all')); $where = ["1=1"]; $params = []; if (!empty($statusFilter) && in_array($statusFilter, ['pending', 'processing', 'completed', 'rejected'])) { $where[] = "p.status = :status"; $params['status'] = $statusFilter; } $whereSql = implode(' AND ', $where); $sql = " SELECT p.*, sp.shop_name, sp.slug as shop_slug, sp.phone as shop_phone, u.full_name as owner_name, u.email as owner_email FROM seller_payouts p JOIN seller_profiles sp ON p.seller_id = sp.id JOIN users u ON sp.user_id = u.id WHERE {$whereSql} ORDER BY p.id DESC "; $stmt = $db->prepare($sql); $stmt->execute($params); $payouts = $stmt->fetchAll(); // Summary metrics $sumStmt = $db->query(" SELECT SUM(CASE WHEN status = 'pending' THEN amount ELSE 0 END) as pending_amount, SUM(CASE WHEN status = 'pending' THEN 1 ELSE 0 END) as pending_count, SUM(CASE WHEN status = 'completed' THEN amount ELSE 0 END) as completed_amount, SUM(CASE WHEN status = 'completed' THEN 1 ELSE 0 END) as completed_count FROM seller_payouts "); $summary = $sumStmt->fetch() ?: ['pending_amount' => 0, 'pending_count' => 0, 'completed_amount' => 0, 'completed_count' => 0]; $this->render('admin/payouts/index', [ 'title' => 'จัดการการจ่ายเงินร้านค้า (Admin Seller Payouts)', 'payouts' => $payouts, 'summary' => $summary, 'statusFilter' => $statusFilter ], 'admin'); } /** * Update Payout Status (Approve / Reject / Process) * POST /admin/payouts/update-status/{id} */ public function updateStatus(string $id): void { $this->validateCsrf(); $db = Database::getInstance(); $payoutId = (int)$id; $status = trim(Security::sanitizeString($_POST['status'] ?? '')); $transactionRef = trim(Security::sanitizeString($_POST['transaction_reference'] ?? '')); $adminNote = trim(Security::sanitizeString($_POST['admin_note'] ?? '')); if (!in_array($status, ['pending', 'processing', 'completed', 'rejected'])) { Session::setFlash('danger', 'สถานะไม่ถูกต้อง'); $this->redirect('admin/payouts'); return; } $stmt = $db->prepare("SELECT * FROM seller_payouts WHERE id = :id LIMIT 1"); $stmt->execute(['id' => $payoutId]); $payout = $stmt->fetch(); if (!$payout) { Session::setFlash('danger', 'ไม่พบรายการคำขอถอนเงิน'); $this->redirect('admin/payouts'); return; } $upStmt = $db->prepare(" UPDATE seller_payouts SET status = :status, transaction_reference = :tref, admin_note = :note, updated_at = NOW() WHERE id = :id "); $upStmt->execute([ 'status' => $status, 'tref' => $transactionRef ?: $payout['transaction_reference'], 'note' => $adminNote ?: $payout['admin_note'], 'id' => $payoutId ]); Session::setFlash('success', 'อัปเดตสถานะการจ่ายเงินเรียบร้อยแล้ว'); $this->redirect('admin/payouts'); } }
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0.24 |
proxy
|
phpinfo
|
Settings