Рефакторинг: отделение Delivery от Order, обязательные поля доставки, исправление доменов

- Отделена модель Delivery от Order (OneToOne связь)
- Добавлены обязательные поля delivery_date, time_from, time_to в Delivery
- Delivery обязательна при создании заказа (кроме черновиков)
- Добавлены методы calculate_total() и reset_delivery_cost() в Order
- Добавлена валидация полей доставки в OrderForm
- Исправлено создание доменов - убран порт из домена в БД
- Исправлен редирект после установки пароля (правильный формат URL)
- Исправлена ошибка NoReverseMatch в navbar для public схемы
- Удалены все старые миграции (база создается с нуля)
- Обновлены views для работы с новой моделью Delivery
This commit is contained in:
2025-12-23 23:52:59 +03:00
parent d29c736252
commit 94fe363cb1
61 changed files with 1342 additions and 2189 deletions

View File

@@ -213,7 +213,37 @@ def password_setup_confirm(request, token):
)
# Перенаправить на домен тенанта
tenant_url = f'http://{tenant.schema_name}.localhost:8000/'
# Получаем домен из базы (без порта, порт добавляется в URL только для localhost)
from tenants.models import Domain
from django.conf import settings
connection.set_schema_to_public()
try:
domain_obj = Domain.objects.filter(tenant=tenant, is_primary=True).first()
if domain_obj:
domain_name = domain_obj.domain
# Убираем порт из домена если он есть (для совместимости со старыми записями)
if ':' in domain_name:
domain_name = domain_name.split(':')[0]
else:
# Fallback если домен не найден
domain_base = settings.TENANT_DOMAIN_BASE
if ':' in domain_base:
domain_base = domain_base.split(':')[0]
domain_name = f"{tenant.schema_name}.{domain_base}"
except:
domain_base = settings.TENANT_DOMAIN_BASE
if ':' in domain_base:
domain_base = domain_base.split(':')[0]
domain_name = f"{tenant.schema_name}.{domain_base}"
# Формируем URL с правильным протоколом и портом
protocol = 'https' if settings.USE_HTTPS else 'http'
# Добавляем порт только для localhost
if 'localhost' in domain_name:
tenant_url = f'{protocol}://{domain_name}:8000/'
else:
tenant_url = f'{protocol}://{domain_name}/'
return redirect(tenant_url)
else:
messages.error(request, 'Пароли не совпадают.')