fix(tradein/pdf): МЕРА branding + 4-page report (no empty pages) #2513

Merged
lekss361 merged 2 commits from fix/tradein-pdf-mera-empty-pages into main 2026-07-13 18:04:08 +00:00

2 commits

Author SHA1 Message Date
bot-backend
42a50cf814 fix(tradein/pdf): running @page header/footer → ровно 4 страницы (без пустых)
All checks were successful
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 8s
CI Trade-In / changes (pull_request) Successful in 9s
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 59s
CI / frontend-tests (pull_request) Has been skipped
Header/footer сидели В ПОТОКЕ каждой секции (~110pt/стр.) → cover переполнялся
(advice-таблица уезжала на почти-пустую стр. 2), footer listings-секции сиротел
на полностью пустую стр. 4 → отчёт 6 страниц вместо 4.

Fix: header+footer вынесены в running @page margin-boxes (position:running() +
@top-center/@bottom-center) — рендерятся в полях каждой страницы, не занимая
поток. Chrome строится ОДИН раз в generate_trade_in_pdf (else-ветка, не
insufficient_data) и оборачивается в .running-header/.running-footer; из 4
билдеров inline-вызовы header/footer убраны + очищены осиротевшие переменные.
Top-margin 20→25mm под running-header. Дисклеймер offer-страницы перенесён из
footer page_note в inline <p> (сохранён). Убрана дубль-строка advice на cover
(«до 15% при самопродаже» — детально расписана на стр. 04).

Верифицировано рендером реального WeasyPrint 69 в прод-образе: ровно 4 чистые
страницы, бренд МЕРА в шапке/футере всех страниц, «Год постройки —», дисклеймер
на месте. ruff clean; test_pdf_security 32/32; test_trade_in_pdf_dual_price 25/25.
2026-07-13 21:01:53 +03:00
bot-backend
9a73da4ce0 fix(tradein/pdf): МЕРА branding + fix 'Год постройки None' + drop duplicate deals-range on cover
- Дефолт-бренд generic: name «Trade-In Estimator» → «МЕРА» (brand.py). Masthead/
  footer/подписи секций читают brand.name → отчёт теперь брендирован МЕРА;
  white-label бренды (реальное name в brands) не тронуты.
- Cover: year_built=None утекал литеральным «None» в «Год постройки» → «—».
- Cover: убран дубль-бар «Диапазон цен по фактическим сделкам» (уже есть на
  стр. 03) — часть ужимания cover до одной A4-страницы. Тесты обновлены.
2026-07-13 20:37:48 +03:00