diff --git a/app/Http/Controllers/Api/Admin/Service/ServiceController.php b/app/Http/Controllers/Api/Admin/Service/ServiceController.php index f6ccaa2..9d92f29 100644 --- a/app/Http/Controllers/Api/Admin/Service/ServiceController.php +++ b/app/Http/Controllers/Api/Admin/Service/ServiceController.php @@ -29,6 +29,7 @@ class ServiceController extends Controller public function index(Request $request): JsonResponse { $perPage = min((int) ($request->per_page ?? 15), 100); + $expiringDays = in_array((int) $request->expiring_days, [1, 3, 10, 20, 30], true) ? (int) $request->expiring_days : null; $query = Service::with(['customer:id,uuid,fullname,email', 'product:id,uuid,name,product_type', 'invoice:id,invoice_number', 'vmware:id,name,module_ip_address', 'orderItem:id,order_id', 'orderItem.order:id,order_num', 'tags']) ->withExists(['cancellationRequests as pending_cancellation' => fn ($q) => $q->pending()]) @@ -40,9 +41,10 @@ class ServiceController extends Controller ->where('type', $v) ->orWhere(fn($legacy) => $legacy->whereNull('type')->whereHas('product', fn($product) => $product->where('product_type', $v))))) ->when($request->customer_id, fn($q, $v) => $q->where('customer_id', $v)) - ->when($request->boolean('unassigned'), fn($q) => $q->whereNull('customer_id')); + ->when($request->boolean('unassigned'), fn($q) => $q->whereNull('customer_id')) + ->when($expiringDays, fn($q, $days) => $q->whereBetween('expires_at', [now(), now()->addDays($days)])); - $paginator = $query->latest()->paginate($perPage); + $paginator = ($expiringDays ? $query->orderBy('expires_at') : $query->latest())->paginate($perPage); $invoices = $this->linkedInvoices($paginator->getCollection()); $paginator->getCollection()->each(fn (Service $service) => $service->setAttribute( 'linked_invoices',