From 9397fd1c836a8e2019b5cd9b7a474e65a202dea1 Mon Sep 17 00:00:00 2001 From: dmitriylaukhin Date: Sat, 27 Jun 2026 13:35:59 +0500 Subject: [PATCH] =?UTF-8?q?feat(=D1=8D=D0=BA=D1=81=D0=BF=D0=BE=D1=80=D1=82?= =?UTF-8?q?):=20=D0=B2=D1=82=D0=BE=D1=80=D0=BE=D0=B9=20=D0=BB=D0=B8=D1=81?= =?UTF-8?q?=D1=82=20=C2=AB=D0=92=D1=81=D0=B5=20=D0=BF=D0=BE=D0=B7=D0=B8?= =?UTF-8?q?=D1=86=D0=B8=D0=B8=C2=BB=20=E2=80=94=20=D0=BF=D0=BE=D0=BB=D0=BD?= =?UTF-8?q?=D0=B0=D1=8F=20=D0=B2=D1=8B=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B0?= =?UTF-8?q?,=20=D0=B2=D0=BA=D0=BB=D1=8E=D1=87=D0=B0=D1=8F=20=D0=BE=D1=87?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=B4=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- api/main.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/api/main.py b/api/main.py index 0c4f9f2..d582aa7 100644 --- a/api/main.py +++ b/api/main.py @@ -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(