display storage plans

This commit is contained in:
Tobias Brunner 2025-05-30 13:43:02 +02:00
parent d987f62471
commit 7b93830df2
No known key found for this signature in database
2 changed files with 47 additions and 1 deletions

View file

@ -112,6 +112,41 @@
{% if representative_plan.compute_plan_group_node_label %} {% if representative_plan.compute_plan_group_node_label %}
<p class="text-muted mb-3"><strong>Node Label:</strong> <code>{{ representative_plan.compute_plan_group_node_label }}</code></p> <p class="text-muted mb-3"><strong>Node Label:</strong> <code>{{ representative_plan.compute_plan_group_node_label }}</code></p>
{% endif %} {% endif %}
{# Display storage pricing for this cloud provider #}
{% if representative_plan.storage_plans %}
<div class="mb-3">
<p class="text-muted mb-2"><strong>Storage Options:</strong></p>
<div class="table-responsive">
<table class="table table-sm table-bordered">
<thead class="table-secondary">
<tr>
<th>Storage Plan</th>
<th>Term</th>
<th>Unit</th>
<th>Prices</th>
</tr>
</thead>
<tbody>
{% for storage_plan in representative_plan.storage_plans %}
<tr>
<td>{{ storage_plan.name }}</td>
<td>{{ storage_plan.get_term_display }}</td>
<td>{{ storage_plan.get_unit_display }}</td>
<td>
{% for price in storage_plan.prices.all %}
<span class="badge bg-light text-dark me-1">{{ price.amount }} {{ price.currency }}</span>
{% empty %}
<span class="text-muted">No prices</span>
{% endfor %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
{% endif %}
{% endwith %} {% endwith %}
{% endif %} {% endif %}
{% endfor %} {% endfor %}

View file

@ -2,7 +2,12 @@ import re
from django.shortcuts import render from django.shortcuts import render
from collections import defaultdict from collections import defaultdict
from hub.services.models import ComputePlan, VSHNAppCatPrice, ExternalPricePlans from hub.services.models import (
ComputePlan,
VSHNAppCatPrice,
ExternalPricePlans,
StoragePlan,
)
from django.contrib.admin.views.decorators import staff_member_required from django.contrib.admin.views.decorators import staff_member_required
from django.db import models from django.db import models
@ -235,6 +240,11 @@ def pricelist(request):
group_name = plan.group.name if plan.group else "No Group" group_name = plan.group.name if plan.group else "No Group"
# Get storage plans for this cloud provider
storage_plans = StoragePlan.objects.filter(
cloud_provider=plan.cloud_provider
).prefetch_related("prices")
# Add pricing data to the grouped structure # Add pricing data to the grouped structure
pricing_data_by_group_and_service_level[group_name][ pricing_data_by_group_and_service_level[group_name][
service_level_display service_level_display
@ -250,6 +260,7 @@ def pricelist(request):
"compute_plan_group_node_label": ( "compute_plan_group_node_label": (
plan.group.node_label if plan.group else "" plan.group.node_label if plan.group else ""
), ),
"storage_plans": storage_plans,
"vcpus": plan.vcpus, "vcpus": plan.vcpus,
"ram": plan.ram, "ram": plan.ram,
"cpu_mem_ratio": plan.cpu_mem_ratio, "cpu_mem_ratio": plan.cpu_mem_ratio,