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(