query('q')); $results = mb_strlen($q) >= 2 ? $this->results($q) : []; if ($request->expectsJson() || $request->ajax() || $request->wantsJson()) { return response()->json(['results' => $results]); } return view('search.index', [ 'query' => $q, 'results' => $results, ]); } /** @return list */ private function results(string $q): array { $account = ladill_account(); $like = '%'.$q.'%'; $qrIds = $account->qrCodes() ->where('type', QrCode::TYPE_SHOP) ->pluck('id'); if ($qrIds->isEmpty()) { return []; } return QrSaleOrder::query() ->whereIn('qr_code_id', $qrIds) ->with('qrCode') ->where(function ($query) use ($like) { $query->where('payer_name', 'like', $like) ->orWhere('payer_email', 'like', $like) ->orWhere('collection_type', 'like', $like) ->orWhere('reference', 'like', $like) ->orWhere('payment_reference', 'like', $like) ->orWhereHas('qrCode', fn ($qr) => $qr->where('label', 'like', $like)); }) ->latest('created_at') ->limit(15) ->get() ->map(function (QrSaleOrder $order): array { $amount = number_format( ($order->status === QrSaleOrder::STATUS_PAID ? $order->merchant_amount_minor : $order->amount_minor) / 100, 2, ); return [ 'type' => 'order', 'title' => $order->payer_name ?: 'Anonymous donor', 'subtitle' => 'GHS '.$amount.' · '.($order->collection_type ?: 'Order').' · '.ucfirst($order->status), 'url' => route('merchant.orders.index', ['q' => $order->reference]), ]; }) ->all(); } }