diff --git a/src/servala/api/views.py b/src/servala/api/views.py index 7d8ebfa..5fdb91a 100644 --- a/src/servala/api/views.py +++ b/src/servala/api/views.py @@ -233,9 +233,12 @@ The Servala Team""" try: service = Service.objects.get(osb_service_id=service_id) - service_offering = ServiceOffering.objects.get( - osb_plan_id=plan_id, service=service - ) + # Special handling: when plan_id is "suspend", don't lookup service_offering + service_offering = None + if plan_id != "suspend": + service_offering = ServiceOffering.objects.get( + osb_plan_id=plan_id, service=service + ) except Service.DoesNotExist: return self._error(f"Unknown service_id: {service_id}") except ServiceOffering.DoesNotExist: @@ -258,7 +261,7 @@ The Servala Team""" return self.request.build_absolute_uri(admin_path) def _create_action_helpdesk_ticket( - self, request, action, instance_id, service, service_offering, users=None + self, request, action, instance_id, service, service_offering=None, users=None ): """ Create an Odoo helpdesk ticket for offboarding or suspension actions. @@ -269,11 +272,12 @@ The Servala Team""" organization = None try: # Look for instances with this name in the service offering's context + filter_kwargs = {"name": instance_id} + if service_offering: + filter_kwargs["context__service_offering"] = service_offering + service_instance = ( - ServiceInstance.objects.filter( - name=instance_id, - context__service_offering=service_offering, - ) + ServiceInstance.objects.filter(**filter_kwargs) .select_related("organization") .first() ) @@ -302,13 +306,14 @@ The Servala Team""" else: description_parts.append(f"Instance: {instance_id}") - offering_url = self._get_admin_url( - "core_serviceoffering_change", service_offering.pk - ) - description_parts.append(f"Service Offering: {offering_url}") + if service_offering: + offering_url = self._get_admin_url( + "core_serviceoffering_change", service_offering.pk + ) + description_parts.append(f"Service Offering: {offering_url}") if users: - description_parts.append("\nUsers:") + description_parts.append("
Users:") for user_data in users: email = user_data.get("email", "N/A") full_name = user_data.get("full_name", "N/A") @@ -324,7 +329,7 @@ The Servala Team""" description_parts.append(f" - {full_name} ({user_link}) - {role}") - description = "\n".join(description_parts) + description = "
".join(description_parts) create_helpdesk_ticket( title=f"Exoscale OSB {action} - {service.name} - {instance_id}",