diff --git a/deployment/deployment.yaml b/deployment/deployment.yaml index 5c173d3..3afa58e 100644 --- a/deployment/deployment.yaml +++ b/deployment/deployment.yaml @@ -16,6 +16,8 @@ spec: labels: app: servala spec: + nodeSelector: + appuio.io/node-class: nokto imagePullSecrets: - name: gitlab-pull-secret containers: diff --git a/hub/services/admin.py b/hub/services/admin.py index 314f479..d2db897 100644 --- a/hub/services/admin.py +++ b/hub/services/admin.py @@ -101,7 +101,14 @@ class ExternalLinkInline(admin.TabularInline): @admin.register(Service) class ServiceAdmin(admin.ModelAdmin): - list_display = ("name", "logo_preview", "category_list", "partner_list") + list_display = ( + "name", + "logo_preview", + "category_list", + "is_featured", + "is_coming_soon", + "disable_listing", + ) list_filter = ("categories",) search_fields = ("name", "description", "slug") prepopulated_fields = {"slug": ("name",)} diff --git a/hub/services/templates/services/provider_detail.html b/hub/services/templates/services/provider_detail.html index ae61b0b..2d64770 100644 --- a/hub/services/templates/services/provider_detail.html +++ b/hub/services/templates/services/provider_detail.html @@ -145,7 +145,7 @@

Available Services

- {% for offering in provider.offerings.all %} + {% for offering in ordered_offerings %}
{% if offering.service.logo or offering.service.is_featured %} diff --git a/hub/services/views/providers.py b/hub/services/views/providers.py index 92eba64..ed35652 100644 --- a/hub/services/views/providers.py +++ b/hub/services/views/providers.py @@ -2,6 +2,7 @@ from django.shortcuts import render, get_object_or_404 from django.db.models import Q from hub.services.models import ( Service, + ServiceOffering, CloudProvider, ) @@ -39,13 +40,30 @@ def provider_detail(request, slug): # Get all services offered by this provider through offerings services = ( - Service.objects.filter(offerings__cloud_provider=provider) + Service.objects.filter( + offerings__cloud_provider=provider, disable_listing=False + ) .distinct() .prefetch_related("categories") ) + # Get the provider's offerings and sort them by service attributes + # Exclude offerings with disabled services + ordered_offerings = ( + ServiceOffering.objects.filter( + cloud_provider=provider, service__disable_listing=False + ) + .select_related("service") + .order_by( + "-service__is_featured", # Featured first (True before False) + "service__is_coming_soon", # Coming soon last (False before True) + "service__name", # Alphabetically within each group + ) + ) + context = { "provider": provider, "services": services, + "ordered_offerings": ordered_offerings, } return render(request, "services/provider_detail.html", context)