Оптимизация страницы детального просмотра заказа: перемещение блока товаров вверх, добавление статуса в заголовок, оптимизация SQL-запросов

This commit is contained in:
2025-12-21 12:57:54 +03:00
parent 375ec5366a
commit ec02360eac
2 changed files with 68 additions and 59 deletions

View File

@@ -6,7 +6,16 @@
<div class="container-fluid"> <div class="container-fluid">
<div class="row mb-4"> <div class="row mb-4">
<div class="col"> <div class="col">
<h1>Заказ {{ order.order_number }}</h1> <h1>
Заказ {{ order.order_number }}
{% if order.status %}
<span class="badge ms-2" style="background-color: {{ order.status.color }}; color: #fff;">
{{ order.status.label|default:order.status.name }}
</span>
{% else %}
<span class="badge bg-secondary ms-2">Не установлен</span>
{% endif %}
</h1>
</div> </div>
<div class="col-auto"> <div class="col-auto">
<a href="{% url 'orders:order-update' order.order_number %}" class="btn btn-primary"> <a href="{% url 'orders:order-update' order.order_number %}" class="btn btn-primary">
@@ -24,6 +33,62 @@
<div class="row"> <div class="row">
<!-- Левая колонка --> <!-- Левая колонка -->
<div class="col-md-8"> <div class="col-md-8">
<!-- Товары -->
<div class="card mb-3">
<div class="card-header">
<h5 class="mb-0">Товары в заказе</h5>
</div>
<div class="card-body">
<table class="table">
<thead>
<tr>
<th>Наименование</th>
<th>Количество</th>
<th>Цена</th>
<th>Сумма</th>
</tr>
</thead>
<tbody>
{% for item in order.items.all %}
<tr>
<td>
{{ item.item_name }}
{% if item.product_kit and item.product_kit.is_temporary %}
<span class="badge bg-info ms-1">Временный</span>
<br>
<small class="text-muted">Создан специально для этого заказа</small>
<br>
<a href="{% url 'products:productkit-make-permanent' item.product_kit.pk %}" class="btn btn-sm btn-outline-success mt-1">
<i class="bi bi-arrow-right-circle"></i> Сделать постоянным
</a>
{% endif %}
</td>
<td>{{ item.quantity }} шт.</td>
<td>
{{ item.price|floatformat:2 }} руб.
{% if item.is_custom_price %}
<span class="badge bg-warning ms-1">Изменена</span>
<br>
<small class="text-muted">
Оригинальная: {{ item.original_price|floatformat:2 }} руб.
{% if item.price_difference %}
{% if item.price_difference > 0 %}
<span class="text-success">(+{{ item.price_difference|floatformat:2 }} руб.)</span>
{% else %}
<span class="text-danger">({{ item.price_difference|floatformat:2 }} руб.)</span>
{% endif %}
{% endif %}
</small>
{% endif %}
</td>
<td><strong>{{ item.get_total_price|floatformat:2 }} руб.</strong></td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
<!-- Основная информация --> <!-- Основная информация -->
<div class="card mb-3"> <div class="card mb-3">
<div class="card-header"> <div class="card-header">
@@ -170,62 +235,6 @@
{% endif %} {% endif %}
</div> </div>
</div> </div>
<!-- Товары -->
<div class="card mb-3">
<div class="card-header">
<h5 class="mb-0">Товары в заказе</h5>
</div>
<div class="card-body">
<table class="table">
<thead>
<tr>
<th>Наименование</th>
<th>Количество</th>
<th>Цена</th>
<th>Сумма</th>
</tr>
</thead>
<tbody>
{% for item in order.items.all %}
<tr>
<td>
{{ item.item_name }}
{% if item.product_kit and item.product_kit.is_temporary %}
<span class="badge bg-info ms-1">Временный</span>
<br>
<small class="text-muted">Создан специально для этого заказа</small>
<br>
<a href="{% url 'products:productkit-make-permanent' item.product_kit.pk %}" class="btn btn-sm btn-outline-success mt-1">
<i class="bi bi-arrow-right-circle"></i> Сделать постоянным
</a>
{% endif %}
</td>
<td>{{ item.quantity }} шт.</td>
<td>
{{ item.price|floatformat:2 }} руб.
{% if item.is_custom_price %}
<span class="badge bg-warning ms-1">Изменена</span>
<br>
<small class="text-muted">
Оригинальная: {{ item.original_price|floatformat:2 }} руб.
{% if item.price_difference %}
{% if item.price_difference > 0 %}
<span class="text-success">(+{{ item.price_difference|floatformat:2 }} руб.)</span>
{% else %}
<span class="text-danger">({{ item.price_difference|floatformat:2 }} руб.)</span>
{% endif %}
{% endif %}
</small>
{% endif %}
</td>
<td><strong>{{ item.get_total_price|floatformat:2 }} руб.</strong></td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div> </div>
<!-- Правая колонка --> <!-- Правая колонка -->

View File

@@ -48,8 +48,8 @@ def order_list(request):
def order_detail(request, order_number): def order_detail(request, order_number):
"""Детальная информация о заказе""" """Детальная информация о заказе"""
order = get_object_or_404( order = get_object_or_404(
Order.objects.select_related('customer', 'delivery_address', 'pickup_warehouse', 'modified_by') Order.objects.select_related('customer', 'delivery_address', 'pickup_warehouse', 'modified_by', 'status')
.prefetch_related('items__product', 'items__product_kit', 'transactions__created_by'), .prefetch_related('items__product', 'items__product_kit', 'transactions__created_by', 'transactions__payment_method'),
order_number=order_number order_number=order_number
) )