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)