feat(экспорт): второй лист «Все позиции» — полная выгрузка, включая очередь

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-27 13:35:59 +05:00
parent c1ed1962a8
commit 9397fd1c83
+25
View File
@@ -487,6 +487,31 @@ def export_xlsx():
for i, w in enumerate(widths, 1):
ws.column_dimensions[ws.cell(row=1, column=i).column_letter].width = w
ws.freeze_panes = "A2"
# Второй лист — ВСЕ активные позиции как есть (включая очередь верификации),
# чтобы выгрузка была полной: первый лист — чистый каталог, второй — всё сырьё.
ws2 = wb.create_sheet("Все позиции")
ws2.append(["Услуга (как в прайсе)", "Сопоставлено со справочником", "Специальность",
"Клиника", "Цена резидент, ₸", "Цена нерезидент, ₸", "Прайс от", "Статус"])
for cell in ws2[1]:
cell.font = head_font
cell.fill = head_fill
sql_all = """SELECT pi.service_name_raw, s.name_ru AS matched, s.specialty, p.name AS partner,
pi.price_resident, pi.price_nonresident, pi.effective_date,
CASE WHEN pi.service_id IS NULL THEN 'в очереди' ELSE 'сопоставлено' END st
FROM price_item pi
JOIN partner p ON pi.partner_id = p.partner_id
LEFT JOIN service s ON pi.service_id = s.service_id
WHERE pi.is_active = 1
ORDER BY pi.service_name_raw"""
with db() as conn:
for r in conn.execute(sql_all):
ws2.append([r["service_name_raw"], r["matched"], r["specialty"], r["partner"],
r["price_resident"], r["price_nonresident"], r["effective_date"], r["st"]])
for i, w in enumerate([40, 40, 20, 24, 16, 18, 12, 14], 1):
ws2.column_dimensions[ws2.cell(row=1, column=i).column_letter].width = w
ws2.freeze_panes = "A2"
buffer = BytesIO()
wb.save(buffer)
return Response(