from django.shortcuts import render, get_object_or_404 from django.db.models import Q from hub.services.models import ( ServiceOffering, CloudProvider, Category, ) def offering_list(request): offerings = ( ServiceOffering.objects.all() .select_related("service", "cloud_provider") .prefetch_related( "service__categories", "plans", "plans__prices", "plans__prices__currency", "plans__prices__term", ) ) cloud_providers = CloudProvider.objects.all() categories = Category.objects.filter(parent=None).prefetch_related("children") # Handle cloud provider filter if request.GET.get("cloud_provider"): provider_id = request.GET.get("cloud_provider") offerings = offerings.filter(cloud_provider_id=provider_id) # Handle category filter if request.GET.get("category"): category_id = request.GET.get("category") category = get_object_or_404(Category, id=category_id) subcategories = Category.objects.filter(parent=category) offerings = offerings.filter( Q(service__categories=category) | Q(service__categories__in=subcategories) ).distinct() # Handle search if request.GET.get("search"): query = request.GET.get("search") offerings = offerings.filter( Q(service__name__icontains=query) | Q(description__icontains=query) | Q(cloud_provider__name__icontains=query) ).distinct() context = { "offerings": offerings, "cloud_providers": cloud_providers, "categories": categories, } return render(request, "services/offering_list.html", context) def offering_detail(request, slug): offering = get_object_or_404( ServiceOffering.objects.select_related( "service", "cloud_provider" ).prefetch_related( "plans", "plans__prices", "plans__prices__currency", "plans__prices__term" ), slug=slug, ) context = { "offering": offering, } return render(request, "services/offering_detail.html", context)