From 1daa288cdd6fef0f43a3ca3961e02dc08853e2eb Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Fri, 14 Mar 2025 14:57:34 +0100 Subject: [PATCH 1/5] allow manual ordering of consulting partner --- hub/services/admin.py | 12 ++++++++-- ...lter_consultingpartner_options_and_more.py | 22 +++++++++++++++++++ hub/services/models.py | 4 ++++ hub/services/views/partners.py | 6 ++--- 4 files changed, 39 insertions(+), 5 deletions(-) create mode 100644 hub/services/migrations/0021_alter_consultingpartner_options_and_more.py diff --git a/hub/services/admin.py b/hub/services/admin.py index 3ba72d8..314f479 100644 --- a/hub/services/admin.py +++ b/hub/services/admin.py @@ -137,11 +137,19 @@ class ServiceOfferingAdmin(admin.ModelAdmin): @admin.register(ConsultingPartner) -class ConsultingPartnerAdmin(admin.ModelAdmin): - list_display = ("name", "website", "logo_preview", "disable_listing", "is_featured") +class ConsultingPartnerAdmin(SortableAdminMixin, admin.ModelAdmin): + list_display = ( + "name", + "website", + "logo_preview", + "disable_listing", + "is_featured", + "order", + ) search_fields = ("name", "description") prepopulated_fields = {"slug": ("name",)} filter_horizontal = ("services", "cloud_providers") + ordering = ("order",) def logo_preview(self, obj): if obj.logo: diff --git a/hub/services/migrations/0021_alter_consultingpartner_options_and_more.py b/hub/services/migrations/0021_alter_consultingpartner_options_and_more.py new file mode 100644 index 0000000..339e4c7 --- /dev/null +++ b/hub/services/migrations/0021_alter_consultingpartner_options_and_more.py @@ -0,0 +1,22 @@ +# Generated by Django 5.1.5 on 2025-03-14 13:56 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("services", "0020_alter_cloudprovider_options_cloudprovider_order"), + ] + + operations = [ + migrations.AlterModelOptions( + name="consultingpartner", + options={"ordering": ["order"]}, + ), + migrations.AddField( + model_name="consultingpartner", + name="order", + field=models.IntegerField(default=0), + ), + ] diff --git a/hub/services/models.py b/hub/services/models.py index b547d71..6e5568c 100644 --- a/hub/services/models.py +++ b/hub/services/models.py @@ -183,12 +183,16 @@ class ConsultingPartner(models.Model): CloudProvider, related_name="consulting_partners", blank=True ) + order = models.IntegerField(default=0) is_featured = models.BooleanField(default=False) disable_listing = models.BooleanField(default=False) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) + class Meta: + ordering = ["order"] + def __str__(self): return self.name diff --git a/hub/services/views/partners.py b/hub/services/views/partners.py index becad07..4645c69 100644 --- a/hub/services/views/partners.py +++ b/hub/services/views/partners.py @@ -10,7 +10,7 @@ def partner_list(request): cloud_provider_id = request.GET.get("cloud_provider", "") # Start with all active partners - partners = ConsultingPartner.objects.filter(disable_listing=False).order_by("name") + partners = ConsultingPartner.objects.filter(disable_listing=False).order_by("order") # Apply filters based on request parameters if search_query: @@ -36,7 +36,7 @@ def partner_list(request): ).distinct() available_cloud_providers = CloudProvider.objects.filter( id__in=available_cloud_provider_ids, disable_listing=False - ).order_by("name") + ).order_by("order") # For the current selection, we need to make sure we include the selected items # even if they don't match other filters @@ -64,7 +64,7 @@ def partner_list(request): "partners": partners.prefetch_related("services", "cloud_providers"), "services": Service.objects.filter(disable_listing=False).order_by("name"), "cloud_providers": CloudProvider.objects.filter(disable_listing=False).order_by( - "name" + "order" ), "available_services": available_services, "available_cloud_providers": available_cloud_providers, From 15293dfa11ddab51bc45f3c4a455b7b0181200ca Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Fri, 14 Mar 2025 15:13:25 +0100 Subject: [PATCH 2/5] update about page text --- hub/services/templates/pages/about.html | 35 ++++++++++++------------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/hub/services/templates/pages/about.html b/hub/services/templates/pages/about.html index 4034d10..7cea5d7 100644 --- a/hub/services/templates/pages/about.html +++ b/hub/services/templates/pages/about.html @@ -26,9 +26,9 @@

Overview

-

Servala connects businesses, developers, and cloud service providers on one unique hub with secure, scalable, and easy-to-use cloud-native services.

+

Servala connects businesses, developers, and cloud providers on one unified hub, offering secure, scalable, and easy-to-use cloud-native services and applications.

With Servala, businesses can seamlessly access and deploy a vast range of software, databases, applications, and DevOps tools such as PostgreSQL, Red Hat OpenShift, Keycloak, GitLab or Forgejo across multiple cloud providers and regions. This ensures businesses can seamlessly access and deploy services, applications, and DevOps tools across different cloud environments without being tied to a single provider.

-

With Servala, businesses can stay agile, avoid vendor lock-in, optimize cloud costs, and ensure security and compliance. For Independent Software Vendors (ISVs), Servala opens up additional channels to offer their software products. At the same time, Cloud Service Providers (CSPs) can add value on top of their existing core offerings (compute, storage, network).

+

Servala helps businesses stay agile and independent, reduce cloud costs, and ensure security and compliance. For Software Vendors, Servala opens up additional channels to offer their software products. At the same time, Cloud Providers can add value on top of their existing core offerings through Servala.

@@ -46,30 +46,31 @@

Who benefits from using Servala?

-

Servala is designed for CSPs, ISVs, and Enterprises and their users, enabling them to offer, integrate, and consume cloud-native services and applications and DevOps tools with ease. It bridges the gap between CSPs seeking value-added services, ISVs looking to distribute and monetize their applications and services, and Enterprises needing scalable, secure, and cost-efficient cloud solutions and their users who need to access those services easily - all within an open, cloud-agnostic ecosystem.

+

Servala is designed for Software Vendors, Cloud Providers and Enterprises and their users, enabling them to offer, integrate, and consume cloud-native services and applications and DevOps tools with ease.

+

For Software Vendors, Servala provides a powerful channel to distribute, monetize, and operate their software as managed services. Cloud Providers can extend their core infrastructure offerings with value-added services. Enterprise Private Clouds gain seamless access to trusted services and applications while maintaining full control over security and compliance - all within an open and agnostic ecosystem.

-

Independent Software Vendors (ISVs)

+

Software Vendors

    -
  • Transform applications into SaaS offerings.
  • -
  • Leverage the Servala Hub to distribute, monetize, and efficiently operate your software.
  • -
  • Extend your reach to new markets and ecosystems.
  • +
  • Transform software into SaaS offerings.
  • +
  • Reach new markets and ecosystems through our existing partner network.
  • +
  • Streamline operations and monetization.
-

Cloud Service Providers (CSPs)

+

Cloud Providers

    -
  • Offer value-added services and applications to end users.
  • -
  • Respond effectively to fast-paced market changes.
  • -
  • Gain tools to enhance operational efficiency and market relevance.
  • +
  • Offer value-added services and applications to customers.
  • +
  • Enhance operational efficiency and market reach.
  • +
  • Keep pace with fast-changing industry demands.
-

Enterprises and Their Users

+

Enterprise Private Clouds

  • Access scalable, secure, and cost-efficient services.
  • Enable self-service installation of trusted applications without managing infrastructure.
  • -
  • Benefit from built-in compliance, developer productivity boosts, and operational simplicity.
  • +
  • Ensure compliance, boost developer productivity, and simplify operations.
@@ -84,8 +85,7 @@

Agility & Faster Time-to-Market

-

Access a vast catalog of services and applications for rapid deployment and - innovation.

+

Access a vast catalog of services and applications for rapid deployment and innovation.

@@ -94,10 +94,9 @@
-

Cloud-Agnostic & Vendor-Independent

+

Sovereign & Open

-

Deploy services on any cloud or on-premises, ensuring maximum - flexibility.

+

Deploy services on any cloud or on-premises, ensuring maximum flexibility.

From 31844f1b1393443e961c843392cd82d80d364568 Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Fri, 14 Mar 2025 15:21:14 +0100 Subject: [PATCH 3/5] move base template to better folder --- hub/services/templates/400.html | 2 +- hub/services/templates/404.html | 2 +- hub/services/templates/500.html | 2 +- hub/services/templates/{services => }/base.html | 0 hub/services/templates/pages/about.html | 2 +- hub/services/templates/pages/homepage.html | 2 +- hub/services/templates/services/contact_form.html | 2 +- hub/services/templates/services/lead_form.html | 2 +- hub/services/templates/services/offering_detail.html | 2 +- hub/services/templates/services/offering_list.html | 2 +- hub/services/templates/services/partner_detail.html | 2 +- hub/services/templates/services/partner_list.html | 2 +- hub/services/templates/services/provider_detail.html | 2 +- hub/services/templates/services/provider_list.html | 2 +- hub/services/templates/services/service_detail.html | 2 +- hub/services/templates/services/service_list.html | 2 +- hub/services/templates/services/thank_you.html | 2 +- 17 files changed, 16 insertions(+), 16 deletions(-) rename hub/services/templates/{services => }/base.html (100%) diff --git a/hub/services/templates/400.html b/hub/services/templates/400.html index 1de10f9..23a23ac 100644 --- a/hub/services/templates/400.html +++ b/hub/services/templates/400.html @@ -1,4 +1,4 @@ -{% extends 'services/base.html' %} +{% extends 'base.html' %} {% load static %} {% block title %}Bad Request (400){% endblock %} diff --git a/hub/services/templates/404.html b/hub/services/templates/404.html index 023e65d..e4828e2 100644 --- a/hub/services/templates/404.html +++ b/hub/services/templates/404.html @@ -1,4 +1,4 @@ -{% extends 'services/base.html' %} +{% extends 'base.html' %} {% load static %} {% block title %}Page Not Found (404){% endblock %} diff --git a/hub/services/templates/500.html b/hub/services/templates/500.html index c515220..7267e77 100644 --- a/hub/services/templates/500.html +++ b/hub/services/templates/500.html @@ -1,4 +1,4 @@ -{% extends 'services/base.html' %} +{% extends 'base.html' %} {% load static %} {% block title %}Server Error (500){% endblock %} diff --git a/hub/services/templates/services/base.html b/hub/services/templates/base.html similarity index 100% rename from hub/services/templates/services/base.html rename to hub/services/templates/base.html diff --git a/hub/services/templates/pages/about.html b/hub/services/templates/pages/about.html index 7cea5d7..9d91c7d 100644 --- a/hub/services/templates/pages/about.html +++ b/hub/services/templates/pages/about.html @@ -1,4 +1,4 @@ -{% extends 'services/base.html' %} +{% extends 'base.html' %} {% load static %} {% load contact_tags %} diff --git a/hub/services/templates/pages/homepage.html b/hub/services/templates/pages/homepage.html index 8d68f96..cb83ae6 100644 --- a/hub/services/templates/pages/homepage.html +++ b/hub/services/templates/pages/homepage.html @@ -1,4 +1,4 @@ -{% extends 'services/base.html' %} +{% extends 'base.html' %} {% load static %} {% block title %}Open Cloud Native Services Hub{% endblock %} diff --git a/hub/services/templates/services/contact_form.html b/hub/services/templates/services/contact_form.html index afd89f9..172de2c 100644 --- a/hub/services/templates/services/contact_form.html +++ b/hub/services/templates/services/contact_form.html @@ -1,4 +1,4 @@ -{% extends 'services/base.html' %} +{% extends 'base.html' %} {% load contact_tags %} {% block title %}Contact Us{% endblock %} diff --git a/hub/services/templates/services/lead_form.html b/hub/services/templates/services/lead_form.html index 5739d06..dd41150 100644 --- a/hub/services/templates/services/lead_form.html +++ b/hub/services/templates/services/lead_form.html @@ -1,4 +1,4 @@ -{% extends 'services/base.html' %} +{% extends 'base.html' %} {% load form_tags %} {% block title %}Contact Us{% endblock %} diff --git a/hub/services/templates/services/offering_detail.html b/hub/services/templates/services/offering_detail.html index 391c99d..563fec3 100644 --- a/hub/services/templates/services/offering_detail.html +++ b/hub/services/templates/services/offering_detail.html @@ -1,4 +1,4 @@ -{% extends 'services/base.html' %} +{% extends 'base.html' %} {% load static %} {% block title %}{{ offering.service.name }} on {{ offering.cloud_provider.name }}{% endblock %} diff --git a/hub/services/templates/services/offering_list.html b/hub/services/templates/services/offering_list.html index 9192e9d..16a11fa 100644 --- a/hub/services/templates/services/offering_list.html +++ b/hub/services/templates/services/offering_list.html @@ -1,4 +1,4 @@ -{% extends 'services/base.html' %} +{% extends 'base.html' %} {% block title %}Service Offerings{% endblock %} diff --git a/hub/services/templates/services/partner_detail.html b/hub/services/templates/services/partner_detail.html index c673b12..9c80c23 100644 --- a/hub/services/templates/services/partner_detail.html +++ b/hub/services/templates/services/partner_detail.html @@ -1,4 +1,4 @@ -{% extends 'services/base.html' %} +{% extends 'base.html' %} {% load contact_tags %} {% block title %}Consulting Partner {{ partner.name }}{% endblock %} diff --git a/hub/services/templates/services/partner_list.html b/hub/services/templates/services/partner_list.html index ac6a1a4..662d6ec 100644 --- a/hub/services/templates/services/partner_list.html +++ b/hub/services/templates/services/partner_list.html @@ -1,4 +1,4 @@ -{% extends 'services/base.html' %} +{% extends 'base.html' %} {% load static %} {% load contact_tags %} diff --git a/hub/services/templates/services/provider_detail.html b/hub/services/templates/services/provider_detail.html index 7292c4d..ae61b0b 100644 --- a/hub/services/templates/services/provider_detail.html +++ b/hub/services/templates/services/provider_detail.html @@ -1,4 +1,4 @@ -{% extends 'services/base.html' %} +{% extends 'base.html' %} {% load contact_tags %} {% block title %}Service Provider {{ provider.name }}{% endblock %} diff --git a/hub/services/templates/services/provider_list.html b/hub/services/templates/services/provider_list.html index e788dd0..3ba290e 100644 --- a/hub/services/templates/services/provider_list.html +++ b/hub/services/templates/services/provider_list.html @@ -1,4 +1,4 @@ -{% extends 'services/base.html' %} +{% extends 'base.html' %} {% load static %} {% load contact_tags %} diff --git a/hub/services/templates/services/service_detail.html b/hub/services/templates/services/service_detail.html index 45607d3..88c039d 100644 --- a/hub/services/templates/services/service_detail.html +++ b/hub/services/templates/services/service_detail.html @@ -1,4 +1,4 @@ -{% extends 'services/base.html' %} +{% extends 'base.html' %} {% block title %}Service {{ service.name }}{% endblock %} diff --git a/hub/services/templates/services/service_list.html b/hub/services/templates/services/service_list.html index 4b11cc6..39fa7e9 100644 --- a/hub/services/templates/services/service_list.html +++ b/hub/services/templates/services/service_list.html @@ -1,4 +1,4 @@ -{% extends 'services/base.html' %} +{% extends 'base.html' %} {% load static %} {% load contact_tags %} diff --git a/hub/services/templates/services/thank_you.html b/hub/services/templates/services/thank_you.html index 7ab96d4..b993332 100644 --- a/hub/services/templates/services/thank_you.html +++ b/hub/services/templates/services/thank_you.html @@ -1,4 +1,4 @@ -{% extends 'services/base.html' %} +{% extends 'base.html' %} {% block title %}Thanks{% endblock %} From 1105fc7605ad77fbaf5758481b338c667386d083 Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Fri, 14 Mar 2025 15:25:52 +0100 Subject: [PATCH 4/5] add static announcement banner --- hub/services/templates/base.html | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/hub/services/templates/base.html b/hub/services/templates/base.html index 851b93f..f12ed0e 100644 --- a/hub/services/templates/base.html +++ b/hub/services/templates/base.html @@ -24,6 +24,16 @@
+ + +
+

+ {{ partner.name }} +

diff --git a/hub/services/templates/services/provider_list.html b/hub/services/templates/services/provider_list.html index 3ba290e..aa9fd11 100644 --- a/hub/services/templates/services/provider_list.html +++ b/hub/services/templates/services/provider_list.html @@ -103,6 +103,9 @@
+

+ {{ provider.name }} +