zov-tech/backend-py
wasrusgen 5e6746e676 B+E: DWG/чертежи + карточка «Замер готов — нужен подбор?»
Backend (main.py):
- Колонки в Measurements: design_files, podbor_decision, podbor_decision_at, podbor_lead_id
- _save_design_file() сохраняет DWG/DXF/PDF/PNG/JPG в PHOTOS_DIR/<id>/design_*.ext
- POST /api/measurement_design_upload — загрузка чертежей (до 10 файлов, 30МБ каждый)
- POST /api/measurement_decision — фиксация решения (needed|not_needed|later|done)
- POST /api/manager_pending — список завершённых замеров без решения про подбор
- /api/photo расширен MIME-типами pdf/dwg/dxf
- /api/measurement_detail отдаёт design_files, podbor_decision, podbor_lead_id

Frontend (app.js + clients.js + podbor.css):
- На главной менеджера: карточки « Замеры готовы» с вопросом
  «Клиенту потребуется помощь с подбором техники?» и кнопками Да/Нет/Позже
- «Да» → переход в #/podbor с pre-fill клиента
- «Нет/Позже» → фиксация решения, анимация удаления карточки
- В карточке замера (renderMeasurement) — секция «📐 Чертёж / DWG»
  с inline-загрузкой файлов и списком прикреплённых чертежей
- index.html: cache bump v=20260514b
2026-05-14 09:17:32 +03:00
..
app B+E: DWG/чертежи + карточка «Замер готов — нужен подбор?» 2026-05-14 09:17:32 +03:00
.dockerignore feat(infra): Python FastAPI backend + Docker compose for VPS deploy (GigaChat with Russian root CA) 2026-05-10 17:44:21 +03:00
Dockerfile backend: Playwright + Chromium for JS-rendered sites (Я.Маркет, OZON fallback) 2026-05-11 13:25:05 +03:00
requirements.txt A+B: голос в мастере замера + Google Calendar события 2026-05-13 23:49:20 +03:00
seed_test_clients.py seed_test_clients: 4 тестовые заявки в разных статусах 2026-05-13 19:59:39 +03:00