mod: раздел сравнения оконных наборов.

This commit is contained in:
2026-05-09 14:40:54 +03:00
parent ac8b50e3be
commit 0bc88869a5
3 changed files with 457 additions and 4 deletions

View File

@@ -1,10 +1,14 @@
# -*- coding: utf-8 -*-
from django.shortcuts import render, redirect
from django.http import HttpRequest, HttpResponse
from oknardia.models import Seria_Info
from web.report1 import get_last_all_user_visit_list, get_last_user_visit_cookies, get_last_user_visit_list
import time
import pytils.translit
from django.http import HttpRequest, HttpResponse
from django.shortcuts import render, redirect
from oknardia.models import Seria_Info, SetKit
from web.add_func import get_rating_set_for_stars
from web.report1 import get_last_all_user_visit_list, get_last_user_visit_cookies, get_last_user_visit_list
def catalog_root(request: HttpRequest) -> HttpResponse:
""" Корневая страница каталога
@@ -24,6 +28,68 @@ def catalog_root(request: HttpRequest) -> HttpResponse:
return response
def catalog_sets(request: HttpRequest) -> HttpResponse:
""" Каталог оконных наборов (SetKit) — список всех активных комплектаций, отсортированных по рейтингу.
Для каждого набора собирается dict с полями набора, профиля, стеклопакета и компании-установщика.
Цепочка FK: SetKit.kSet2User → OurUser.kMerchantOffice → MerchantOffice.kMerchantName (MerchantBrand).
Слаги URL формируются через pytils.translit.slugify.
:param request: HttpRequest -- входящий http-запрос
:return response: HttpResponse -- исходящий http-ответ
"""
time_start = time.perf_counter()
qs = (
SetKit.objects
.filter(sSetActive=True)
.select_related(
'kSet2PVCprofiles',
'kSet2Glazing',
'kSet2User__kMerchantOffice__kMerchantName',
)
.order_by('-fSetRating')
)
kits: list[dict] = []
for kit in qs:
# достаём бренд через цепочку FK (всё уже прогружено через select_related)
try:
office = kit.kSet2User.kMerchantOffice
brand = office.kMerchantName if office else None
except Exception:
office = brand = None
profile = kit.kSet2PVCprofiles
glazing = kit.kSet2Glazing
kits.append({
'kit': kit,
'stars': get_rating_set_for_stars(kit.fSetRating),
'profile': profile,
'glazing': glazing,
# компания-установщик
'merchant_id': brand.id if brand else None,
'merchant_slug': pytils.translit.slugify(brand.sMerchantName) if brand else "",
'merchant_name': brand.sMerchantName if brand else "",
'merchant_logo': str(brand.pMerchantLogo) if brand and brand.pMerchantLogo else "",
'merchant_url': brand.sMerchantMainURL if brand else "",
# слаги для ссылок на профиль в каталоге профилей
'profile_manufacturer_slug': pytils.translit.slugify(
profile.sProfileManufacturer) if profile else "",
'profile_slug': pytils.translit.slugify(
profile.sProfileName) if profile else "",
})
to_template: dict[str, object] = {
'SET_LIST': kits,
'LAST_VISIT': get_last_user_visit_list(get_last_user_visit_cookies(request)[:3]),
'LOG_VISIT': get_last_all_user_visit_list(),
'ticks': float(time.perf_counter() - time_start),
}
return render(request, "catalog/catalog_sets.html", to_template)
def report_all_info_seria_redirect(request: HttpRequest, seria_id: str = "12") -> HttpResponse:
""" Переадресация старых URL, т.к. их сколько-то есть (было) во внешних ссылках