""" UI модуль для ремонта СА """ import streamlit as st import pandas as pd from api_client import upload_file_to_api, make_api_request, get_system_ogs, get_available_ogs from config import REPAIR_TYPES def render_svodka_repair_ca_tab(): """Рендер вкладки ремонта СА""" st.header("🔧 Ремонт СА - Управление ремонтными работами") # Секция загрузки файлов st.subheader("📤 Загрузка файлов") uploaded_file = st.file_uploader( "Выберите Excel файл или ZIP архив с данными о ремонте СА", type=['xlsx', 'xlsm', 'xls', 'zip'], key="repair_ca_upload" ) if uploaded_file is not None: if st.button("📤 Загрузить файл", key="repair_ca_upload_btn"): with st.spinner("Загружаю файл..."): file_data = uploaded_file.read() result, status = upload_file_to_api("/svodka_repair_ca/upload", file_data, uploaded_file.name) if status == 200: st.success("✅ Файл успешно загружен") st.json(result) else: st.error(f"❌ Ошибка загрузки: {result.get('message', 'Неизвестная ошибка')}") st.markdown("---") # Секция получения данных st.subheader("🔍 Получение данных") col1, col2 = st.columns(2) with col1: st.subheader("Фильтры") # Получаем доступные ОГ из системного API system_ogs = get_system_ogs() available_ogs = system_ogs.get("single_ogs", []) # Фильтр по ОГ og_ids = st.multiselect( "Выберите ОГ (оставьте пустым для всех)", available_ogs if available_ogs else ["KNPZ", "ANHK", "SNPZ", "BASH", "UNH", "NOV"], # fallback key="repair_ca_og_ids" ) # Фильтр по типам ремонта repair_types = st.multiselect( "Выберите типы ремонта (оставьте пустым для всех)", REPAIR_TYPES, key="repair_ca_types" ) # Включение плановых/фактических данных include_planned = st.checkbox("Включать плановые данные", value=True, key="repair_ca_planned") include_factual = st.checkbox("Включать фактические данные", value=True, key="repair_ca_factual") with col2: st.subheader("Действия") if st.button("🔍 Получить данные о ремонте", key="repair_ca_get_btn"): with st.spinner("Получаю данные..."): data = { "include_planned": include_planned, "include_factual": include_factual } # Добавляем фильтры только если они выбраны if og_ids: data["og_ids"] = og_ids if repair_types: data["repair_types"] = repair_types result, status = make_api_request("/svodka_repair_ca/get_data", data) if status == 200: st.success("✅ Данные получены") # Отображаем данные в виде таблицы, если возможно if result.get("data") and isinstance(result["data"], list): df_data = [] for item in result["data"]: df_data.append({ "ID ОГ": item.get("id", ""), "Наименование": item.get("name", ""), "Тип ремонта": item.get("type", ""), "Дата начала": item.get("start_date", ""), "Дата окончания": item.get("end_date", ""), "План": item.get("plan", ""), "Факт": item.get("fact", ""), "Простой": item.get("downtime", "") }) if df_data: df = pd.DataFrame(df_data) st.dataframe(df, use_container_width=True) else: st.info("📋 Нет данных для отображения") else: st.json(result) else: st.error(f"❌ Ошибка: {result.get('message', 'Неизвестная ошибка')}")