prepare("SELECT * FROM requests WHERE id = ?"); $stmt->bind_param("i", $request_id); $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows === 0) { die("Request not found."); } $request = $result->fetch_assoc(); // Handle Payment Submission if ($_SERVER['REQUEST_METHOD'] === 'POST') { $payment_method = trim($_POST['payment_method'] ?? ''); $payment_provider = trim($_POST['payment_provider'] ?? ''); $transaction_ref = trim($_POST['transaction_ref'] ?? ''); $phone_number = trim($_POST['phone_number'] ?? ''); $account_number = trim($_POST['account_number'] ?? ''); // Validation if (empty($payment_method) || empty($transaction_ref)) { $_SESSION['flash_message'] = ["type" => "warning", "text" => "Please fill in all required fields."]; } elseif ($payment_method === "Mobile Money" && empty($phone_number)) { $_SESSION['flash_message'] = ["type" => "warning", "text" => "Phone number is required for Mobile Money payments."]; } elseif ($payment_method === "Bank Transfer" && empty($account_number)) { $_SESSION['flash_message'] = ["type" => "warning", "text" => "Account number is required for Bank Transfer payments."]; } elseif ($request['status'] !== 'approve_for_payment') { // ✅ Updated check $_SESSION['flash_message'] = ["type" => "danger", "text" => "This request is not ready for payment. Payment cannot be processed."]; } else { $provider_text = $payment_provider ? " - Provider: $payment_provider" : ""; $phone_text = $phone_number ? " - Phone: $phone_number" : ""; $account_text = $account_number ? " - Account: $account_number" : ""; $accountant_comment = "Paid via $payment_method$provider_text$phone_text$account_text. Ref: $transaction_ref"; $stmt_update = $conn->prepare(" UPDATE requests SET status = 'paid', payment_method = ?, payment_provider = ?, phone_number = ?, account_number = ?, accountant_comment = ?, paid_at = NOW() WHERE id = ? "); $stmt_update->bind_param( "sssssi", $payment_method, $payment_provider, $phone_number, $account_number, $accountant_comment, $request_id ); if ($stmt_update->execute()) { // Audit & notify include_once '../includes/audit.php'; include_once '../includes/notifications.php'; audit_log($conn, $_SESSION['email'], 'payment_processed', $request_id, ['method'=>$payment_method, 'ref'=>$transaction_ref]); // Notify requester send_mail_notification($request['requester_email'], 'Payment Processed', "Your request #$request_id has been paid. Reference: $transaction_ref"); $_SESSION['last_payment'] = [ "amount" => $request['amount'], "method" => $payment_method, "provider" => $payment_provider, "phone" => $phone_number, "account" => $account_number, "reference" => $transaction_ref, "request_id" => $request_id ]; header("Location: payment_success.php"); exit(); } else { $_SESSION['flash_message'] = ["type" => "danger", "text" => "Failed to record payment: " . $stmt_update->error]; } } } function safe($v) { return htmlspecialchars($v ?? '', ENT_QUOTES, 'UTF-8'); } ?>