""" UI модуль для парсера сводок ПМ """ import streamlit as st from api_client import upload_file_to_api, make_api_request from config import PM_CODES, PM_COLUMNS, DEFAULT_OGS def render_svodka_pm_tab(): """Рендер вкладки сводок ПМ""" st.header("📊 Сводки ПМ - Полный функционал") # Секция загрузки файлов st.subheader("📤 Загрузка файлов") uploaded_pm = st.file_uploader( "Выберите ZIP архив со сводками ПМ", type=['zip'], key="pm_upload" ) if uploaded_pm is not None: if st.button("📤 Загрузить сводки ПМ", key="upload_pm_btn"): with st.spinner("Загружаю файл..."): result, status = upload_file_to_api( "/svodka_pm/upload-zip", uploaded_pm.read(), uploaded_pm.name ) if status == 200: st.success(f"✅ {result.get('message', 'Файл загружен')}") st.info(f"ID объекта: {result.get('object_id', 'N/A')}") else: st.error(f"❌ Ошибка: {result.get('message', 'Неизвестная ошибка')}") st.markdown("---") # Секция получения данных st.subheader("🔍 Получение данных") col1, col2 = st.columns(2) with col1: st.subheader("Данные по одному ОГ") og_id = st.selectbox( "Выберите ОГ", DEFAULT_OGS, key="pm_single_og" ) codes = st.multiselect( "Выберите коды строк", PM_CODES, default=[78, 79], key="pm_single_codes" ) columns = st.multiselect( "Выберите столбцы", PM_COLUMNS, default=["БП", "ПП"], key="pm_single_columns" ) if st.button("🔍 Получить данные по ОГ", key="pm_single_btn"): if codes and columns: with st.spinner("Получаю данные..."): data = { "id": og_id, "codes": codes, "columns": columns } result, status = make_api_request("/svodka_pm/get_single_og", data) if status == 200: st.success("✅ Данные получены") st.json(result) else: st.error(f"❌ Ошибка: {result.get('message', 'Неизвестная ошибка')}") else: st.warning("⚠️ Выберите коды и столбцы") with col2: st.subheader("Данные по всем ОГ") codes_total = st.multiselect( "Выберите коды строк", PM_CODES, default=[78, 79, 394, 395], key="pm_total_codes" ) columns_total = st.multiselect( "Выберите столбцы", PM_COLUMNS, default=["БП", "ПП", "СЭБ"], key="pm_total_columns" ) if st.button("🔍 Получить данные по всем ОГ", key="pm_total_btn"): if codes_total and columns_total: with st.spinner("Получаю данные..."): data = { "codes": codes_total, "columns": columns_total } result, status = make_api_request("/svodka_pm/get_total_ogs", data) if status == 200: st.success("✅ Данные получены") st.json(result) else: st.error(f"❌ Ошибка: {result.get('message', 'Неизвестная ошибка')}") else: st.warning("⚠️ Выберите коды и столбцы")