Fixes: 1) Fixed duplicate `{% with %}` block causing syntax error;
Extra: 1) Improved template structure for maintainability; 2) Added missing closing `{% endwith %}`.
91 lines
4.9 KiB
HTML
91 lines
4.9 KiB
HTML
{% extends 'admin/base.html' %}
|
|
|
|
{% load i18n %}
|
|
|
|
{% block title %}
|
|
{% if subtitle %}
|
|
{{ subtitle }} |
|
|
{% endif %}
|
|
|
|
{{ title }} | {{ site_title|default:_('Django site admin') }}
|
|
{% endblock %}
|
|
|
|
{% block branding %}
|
|
{% include "unfold/helpers/site_branding.html" %}
|
|
{% endblock %}
|
|
|
|
{% block content %}
|
|
<div class="px-4 py-6">
|
|
<h1 class="text-2xl font-semibold mb-6">{% trans "Dashboard" %}</h1>
|
|
|
|
<div class="grid grid-cols-1 sm:grid-cols-2 xl:grid-cols-4 gap-4 mb-8">
|
|
<div class="bg-white dark:bg-gray-800 rounded-lg shadow p-4">
|
|
<div class="text-sm text-gray-500 dark:text-gray-300">{% trans "Revenue (gross, 30d)" %}</div>
|
|
<div class="text-2xl font-bold mt-1">{{ revenue_gross_30|default:0 }}</div>
|
|
</div>
|
|
<div class="bg-white dark:bg-gray-800 rounded-lg shadow p-4">
|
|
<div class="text-sm text-gray-500 dark:text-gray-300">{% trans "Revenue (net, 30d)" %}</div>
|
|
<div class="text-2xl font-bold mt-1">{{ revenue_net_30|default:0 }}</div>
|
|
</div>
|
|
<div class="bg-white dark:bg-gray-800 rounded-lg shadow p-4">
|
|
<div class="text-sm text-gray-500 dark:text-gray-300">{% trans "Returns (30d)" %}</div>
|
|
<div class="text-2xl font-bold mt-1">{{ returns_30|default:0 }}</div>
|
|
</div>
|
|
<div class="bg-white dark:bg-gray-800 rounded-lg shadow p-4">
|
|
<div class="text-sm text-gray-500 dark:text-gray-300">{% trans "Processed orders (30d)" %}</div>
|
|
<div class="text-2xl font-bold mt-1">{{ processed_orders_30|default:0 }}</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6 items-center">
|
|
{% with gross=revenue_gross_30|default:0 returns=returns_30|default:0 %}
|
|
{% with total=gross|add:returns %}
|
|
<div class="bg-white dark:bg-gray-800 rounded-lg shadow p-6">
|
|
<div class="flex items-center justify-between mb-4">
|
|
<h2 class="text-lg font-semibold">{% trans "Sales vs Returns (30d)" %}</h2>
|
|
</div>
|
|
{% if total and total > 0 %}
|
|
{% widthratio gross total 360 as gross_deg %}
|
|
{% widthratio returns total 360 as returns_deg %}
|
|
<div class="flex flex-col sm:flex-row items-center gap-6">
|
|
<div class="relative w-40 h-40">
|
|
<div class="w-40 h-40 rounded-full"
|
|
style="background:
|
|
conic-gradient(
|
|
rgb(34,197,94) 0 {{ gross_deg }}deg,
|
|
rgb(239,68,68) {{ gross_deg }}deg 360deg
|
|
);">
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<div class="flex items-center gap-2 mb-2">
|
|
<span class="inline-block w-3 h-3 rounded-sm" style="background:rgb(34,197,94)"></span>
|
|
<span class="text-sm text-gray-600 dark:text-gray-300">{% trans "Gross" %}:</span>
|
|
<span class="font-semibold">{{ gross }}</span>
|
|
</div>
|
|
<div class="flex items-center gap-2">
|
|
<span class="inline-block w-3 h-3 rounded-sm" style="background:rgb(239,68,68)"></span>
|
|
<span class="text-sm text-gray-600 dark:text-gray-300">{% trans "Returns" %}:</span>
|
|
<span class="font-semibold">{{ returns }}</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% else %}
|
|
<p class="text-sm text-gray-500 dark:text-gray-300">{% trans "Not enough data for chart yet." %}</p>
|
|
{% endif %}
|
|
</div>
|
|
{% endwith %}
|
|
{% endwith %}
|
|
|
|
<div class="bg-white dark:bg-gray-800 rounded-lg shadow p-6">
|
|
<h2 class="text-lg font-semibold mb-4">{% trans "Quick Links" %}</h2>
|
|
<ul class="grid grid-cols-2 gap-3 text-sm">
|
|
<li><a class="text-blue-600 hover:underline" href="{% url 'admin:core_order_changelist' %}">{% trans "Orders" %}</a></li>
|
|
<li><a class="text-blue-600 hover:underline" href="{% url 'admin:core_product_changelist' %}">{% trans "Products" %}</a></li>
|
|
<li><a class="text-blue-600 hover:underline" href="{% url 'admin:vibes_auth_user_changelist' %}">{% trans "Users" %}</a></li>
|
|
<li><a class="text-blue-600 hover:underline" href="{% url 'admin:django_celery_beat_periodictask_changelist' %}">{% trans "Tasks" %}</a></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|