style partner detail
This commit is contained in:
parent
fc06226f5a
commit
869ec8bb8e
4 changed files with 87 additions and 59 deletions
|
@ -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 %}
|
|
@ -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">
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue