diff --git a/src/servala/api/views.py b/src/servala/api/views.py index 48845d0..8462f66 100644 --- a/src/servala/api/views.py +++ b/src/servala/api/views.py @@ -109,6 +109,7 @@ class OSBServiceInstanceView(OSBBasicAuthPermission, View): self._send_service_welcome_email( request, organization, user, service, service_offering ) + organization.limit_osb_services.add(service) return JsonResponse({"message": "Service already enabled"}, status=200) odoo_data = { diff --git a/src/servala/core/models/organization.py b/src/servala/core/models/organization.py index f96aa67..32dc12e 100644 --- a/src/servala/core/models/organization.py +++ b/src/servala/core/models/organization.py @@ -50,11 +50,13 @@ class Organization(ServalaModelMixin, models.Model): to="CloudProvider", related_name="+", verbose_name=_("Limit to these Cloud providers"), + blank=True, ) limit_osb_services = models.ManyToManyField( to="Service", related_name="+", verbose_name=_("Services activated from OSB"), + blank=True, ) odoo_sale_order_id = models.IntegerField( @@ -141,6 +143,17 @@ class Organization(ServalaModelMixin, models.Model): return instance + def get_visible_services(self): + from servala.core.models import Service + + queryset = Service.objects.select_related("category") + if self.limit_cloudproviders.exists(): + allowed_providers = self.limit_cloudproviders.all() + queryset = queryset.filter( + offerings__provider__in=allowed_providers + ).distinct() + return queryset.prefetch_related("offerings", "offerings__provider") + class Meta: verbose_name = _("Organization") verbose_name_plural = _("Organizations") diff --git a/src/servala/frontend/templates/frontend/organizations/service_detail.html b/src/servala/frontend/templates/frontend/organizations/service_detail.html index 55cf31e..c72fbef 100644 --- a/src/servala/frontend/templates/frontend/organizations/service_detail.html +++ b/src/servala/frontend/templates/frontend/organizations/service_detail.html @@ -47,7 +47,7 @@
- {% for offering in service.offerings.all %} + {% for offering in visible_offerings %}