style partner detail

This commit is contained in:
Tobias Brunner 2025-02-25 13:43:28 +01:00
parent fc06226f5a
commit 869ec8bb8e
No known key found for this signature in database
4 changed files with 87 additions and 59 deletions

View file

@ -1,71 +1,77 @@
{% extends 'services/base.html' %} {% extends 'services/base.html' %}
{% block content %} {% block content %}
<div class="card"> <section class="section bg-primary-subtle">
<div class="card-body"> <div class="container mx-auto px-20 px-lg-0 pt-40 pb-60">
<div class="d-flex align-items-start mb-4"> <div class="row align-items-center">
{% if partner.logo %} <div class="col-12 col-lg-5 mb-47 mb-lg-0">
<img src="{{ partner.logo.url }}" alt="{{ partner.name }} logo" class="me-4" <header class="section-primary__header">
style="max-height: 120px; max-width: 240px; object-fit: contain;"> <h2 class="section-h1 fs-40 fs-lg-64 mb-14">{{ partner.name }}</h2>
{% endif %} <div class="text-gray-300 mb-14">
<div> <div class="rich-text-content">
<h2 class="card-title mb-3">{{ partner.name }}</h2> {{ partner.description|safe }}
{% if partner.website %} </div>
<a href="{{ partner.website }}" class="btn btn-outline-primary mb-3" target="_blank"> </div>
Visit Website {% if partner.website %}
</a> <div>
{% endif %} <a class="btn btn-primary btn-lg" href="{{ partner.website }}" target="_blank" role="button">Visit Website</a>
<div class="rich-text-content"> </div>
{{ partner.description|safe }} {% endif %}
</header>
</div>
<div class="col-12 col-lg-7">
<div>
{% if partner.logo %}
<img class="img-fluid d-block ml-lg-auto" src="{{ partner.logo.url }}" alt="{{ partner.name }} logo">
{% endif %}
</div> </div>
</div> </div>
</div> </div>
</div>
</section>
<h3 class="mb-4">Available Services</h3> <div class="container mx-auto px-20 px-lg-0 py-60">
<div class="row row-cols-1 row-cols-md-2 g-4"> <h3 class="section-h2 fs-32 fs-lg-48 mb-40 mt-5">Available Services</h3>
{% for service in services %} <p>{{ partner.name }} provides consulting services for the following services</p>
<div class="col"> <div class="row row-cols-1 row-cols-md-2 g-4">
<div class="card h-100"> {% for service in services %}
<div class="card-body"> <div class="col">
<div class="d-flex align-items-center mb-3"> <div class="card h-100">
{% if service.logo %} <div class="card-body">
<div class="d-flex align-items-center mb-3">
{% if service.logo %}
<a href="{{ service.get_absolute_url }}">
<img src="{{ service.logo.url }}" alt="{{ service.name }} logo" <img src="{{ service.logo.url }}" alt="{{ service.name }} logo"
class="me-3" style="max-height: 50px; max-width: 100px; object-fit: contain;"> class="me-3" style="max-height: 50px; max-width: 100px; object-fit: contain;">
{% endif %} </a>
<div> {% endif %}
<h5 class="card-title mb-0">{{ service.name }}</h5> <div>
<div class="d-flex align-items-center mt-2"> <h5 class="card-title mb-0"><a href="{{ service.get_absolute_url }}" class="text-decoration-none">{{ service.name }}</a></h5>
{% if service.cloud_provider.logo %} <div class="d-flex align-items-center mt-2">
<img src="{{ service.cloud_provider.logo.url }}" alt="{{ service.cloud_provider.name }} logo" {% if service.cloud_provider.logo %}
class="me-2" style="max-height: 25px; max-width: 50px; object-fit: contain;"> <img src="{{ service.cloud_provider.logo.url }}" alt="{{ service.cloud_provider.name }} logo"
{% endif %} class="me-2" style="max-height: 25px; max-width: 50px; object-fit: contain;">
<h6 class="card-subtitle text-muted mb-0"> {% endif %}
<a href="{{ service.cloud_provider.get_absolute_url }}" <h6 class="card-subtitle text-muted mb-0">
class="text-decoration-none text-muted">{{ service.cloud_provider.name }}</a> <a href="{{ service.cloud_provider.get_absolute_url }}"
</h6> class="text-decoration-none text-muted">{{ service.cloud_provider.name }}</a>
</div> </h6>
</div> </div>
</div> </div>
<div class="card-text description-preview mb-3"> </div>
{{ service.description|safe|truncatewords_html:30 }} <div class="card-text description-preview mb-3">
</div> {{ service.description|safe|truncatewords_html:30 }}
<div class="mb-2">
{% for category in service.categories.all %}
<span class="badge bg-secondary me-1">{{ category.full_path }}</span>
{% endfor %}
</div>
<a href="{{ service.get_absolute_url }}" class="btn btn-primary">View Details</a>
</div> </div>
</div> </div>
</div> </div>
{% empty %} </div>
<div class="col-12"> {% empty %}
<div class="alert alert-info"> <div class="col-12">
No services available from this partner yet. <div class="alert alert-info">
</div> No services available from this partner yet.
</div> </div>
{% endfor %} </div>
</div> {% endfor %}
</div> </div>
</div> </div>
{% endblock %} {% endblock %}

View file

@ -72,6 +72,23 @@
</button> </button>
</div> </div>
<!-- Service Filter -->
<div class="pt-24 mb-24">
<div class="d-flex justify-content-between align-items-center h-33 mb-5px" role="button">
<h3 class="sidebar-title mb-0">Service</h3>
</div>
<div>
<select class="form-select" id="service" name="service" @change="submitForm()">
<option value="">All Services</option>
{% for service in services %}
<option value="{{ service.id }}" {% if request.GET.service == service.id|stringformat:'i' %}selected{% endif %}>
{{ service.name }}
</option>
{% endfor %}
</select>
</div>
</div>
<!-- Cloud Provider Filter --> <!-- Cloud Provider Filter -->
<div class="pt-24 mb-24"> <div class="pt-24 mb-24">
<div class="d-flex justify-content-between align-items-center h-33 mb-5px" role="button"> <div class="d-flex justify-content-between align-items-center h-33 mb-5px" role="button">

View file

@ -18,7 +18,7 @@ def offering_list(request):
cloud_providers = CloudProvider.objects.all() cloud_providers = CloudProvider.objects.all()
categories = Category.objects.filter(parent=None).prefetch_related("children") categories = Category.objects.filter(parent=None).prefetch_related("children")
services = Service.objects.all().order_by("name") # Add this line services = Service.objects.all().order_by("name")
# Handle cloud provider filter # Handle cloud provider filter
if request.GET.get("cloud_provider"): if request.GET.get("cloud_provider"):
@ -34,7 +34,7 @@ def offering_list(request):
Q(service__categories=category) | Q(service__categories__in=subcategories) Q(service__categories=category) | Q(service__categories__in=subcategories)
).distinct() ).distinct()
# Add service filter handling # Handle service filter
if request.GET.get("service"): if request.GET.get("service"):
service_id = request.GET.get("service") service_id = request.GET.get("service")
offerings = offerings.filter(service_id=service_id) offerings = offerings.filter(service_id=service_id)

View file

@ -1,9 +1,6 @@
from django.shortcuts import render, get_object_or_404 from django.shortcuts import render, get_object_or_404
from django.db.models import Q from django.db.models import Q
from hub.services.models import ( from hub.services.models import ConsultingPartner, CloudProvider, Service
ConsultingPartner,
CloudProvider,
)
def partner_list(request): def partner_list(request):
@ -11,11 +8,18 @@ def partner_list(request):
"services", "cloud_providers" "services", "cloud_providers"
) )
services = Service.objects.all().order_by("name")
# Handle cloud provider filter # Handle cloud provider filter
if request.GET.get("cloud_provider"): if request.GET.get("cloud_provider"):
provider_id = request.GET.get("cloud_provider") provider_id = request.GET.get("cloud_provider")
partners = partners.filter(cloud_providers__id=provider_id) partners = partners.filter(cloud_providers__id=provider_id)
# Handle service filter
if request.GET.get("service"):
service_id = request.GET.get("service")
partners = partners.filter(services__id=service_id)
# Handle search # Handle search
if request.GET.get("search"): if request.GET.get("search"):
query = request.GET.get("search") query = request.GET.get("search")
@ -25,6 +29,7 @@ def partner_list(request):
context = { context = {
"partners": partners, "partners": partners,
"services": services,
"cloud_providers": CloudProvider.objects.all(), "cloud_providers": CloudProvider.objects.all(),
} }
return render(request, "services/partner_list.html", context) return render(request, "services/partner_list.html", context)