Защита удаления заказов и улучшение интерфейса клиентов

Orders:
- Удаление разрешено только для черновиков (draft)
- Запрет удаления заказов с оплатой (amount_paid > 0)
- Кнопка "Удалить" скрыта для недопустимых заказов

Customers:
- Inline-редактирование полей клиента
- Улучшен дизайн карточки клиента
- Добавлена история заказов и кошелька

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-28 23:59:57 +03:00
parent 6c1b1c4aa2
commit 07829f867b
7 changed files with 684 additions and 438 deletions

View File

@@ -26,9 +26,11 @@
<a href="{% url 'orders:order-update' order.order_number %}" class="btn btn-primary">
<i class="bi bi-pencil"></i> Редактировать
</a>
{% if order.status and order.status.code == 'draft' and order.amount_paid == 0 %}
<a href="{% url 'orders:order-delete' order.order_number %}" class="btn btn-danger">
<i class="bi bi-trash"></i> Удалить
</a>
{% endif %}
<a href="{% url 'orders:order-list' %}" class="btn btn-secondary">
<i class="bi bi-arrow-left"></i> К списку
</a>

View File

@@ -413,13 +413,31 @@ def order_update(request, order_number):
def order_delete(request, order_number):
"""Удаление заказа с подтверждением"""
"""Удаление заказа с подтверждением (только для черновиков без оплаты)"""
order = get_object_or_404(Order, order_number=order_number)
# Проверка: удалять можно только черновики
if not order.status or order.status.code != 'draft':
messages.error(
request,
f'Удаление невозможно. Удалять можно только заказы в статусе "Черновик". '
f'Текущий статус: {order.status.name if order.status else "не задан"}'
)
return redirect('orders:order-detail', order_number=order.order_number)
# Проверка: нельзя удалять заказы с оплатой
if order.amount_paid > 0:
messages.error(
request,
f'Удаление невозможно. Заказ имеет оплату ({order.amount_paid} руб.). '
f'Сначала оформите возврат платежа.'
)
return redirect('orders:order-detail', order_number=order.order_number)
if request.method == 'POST':
order_number = order.order_number
order_number_saved = order.order_number
order.delete()
messages.success(request, f'Заказ #{order_number} успешно удален.')
messages.success(request, f'Заказ #{order_number_saved} успешно удален.')
return redirect('orders:order-list')
context = {