diff --git a/82 Reporting.py b/82 Reporting.py new file mode 100644 index 0000000..5207664 --- /dev/null +++ b/82 Reporting.py @@ -0,0 +1,142 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import pymysql +import pandas as pd +import os +from datetime import datetime + +# ============================== +# ⚙ KONFIGURACE +# ============================== + +DB_CONFIG = { + "host": "192.168.1.76", + "port": 3307, + "user": "root", + "password": "Vlado9674+", + "database": "torrents", + "charset": "utf8mb4" +} + +# Cílová složka (používám 'r' před řetězcem pro bezpečné načtení zpětných lomítek) +OUTPUT_DIR = r"u:\Dropbox\!!!Days\Downloads Z230" +FILE_NAME = f"Torrents_Report_{datetime.now():%Y-%m-%d}.xlsx" + +# Spojíme cestu a název souboru +FULL_OUTPUT_PATH = os.path.join(OUTPUT_DIR, FILE_NAME) + + +# ============================== +# 📥 NAČTENÍ DAT +# ============================== + +def get_data(): + print("⏳ Připojuji se k databázi a stahuji data...") + conn = pymysql.connect(**DB_CONFIG) + + query = """ + SELECT + id, + category, + title_visible AS 'Název', + size_pretty AS 'Velikost', + added_datetime AS 'Přidáno do DB', + qb_state AS 'Stav v QB', + qb_progress AS 'Postup (%)', + qb_savepath AS 'Cesta na disku', + qb_completed_datetime AS 'Dokončeno', + qb_last_update AS 'Poslední info' + FROM torrents + ORDER BY added_datetime DESC + """ + + df = pd.read_sql(query, conn) + conn.close() + return df + + +# ============================== +# 🎨 FORMÁTOVÁNÍ EXCELU +# ============================== + +def auto_adjust_columns(writer, df, sheet_name): + """Pomocná funkce pro automatické rozšíření sloupců v Excelu""" + worksheet = writer.sheets[sheet_name] + for idx, col in enumerate(df.columns): + max_len = max( + df[col].astype(str).map(len).max(), + len(str(col)) + ) + 2 + if max_len > 60: max_len = 60 + worksheet.set_column(idx, idx, max_len) + + +# ============================== +# 🚀 HLAVNÍ LOGIKA +# ============================== + +def generate_report(): + # 1. Kontrola cesty + if not os.path.exists(OUTPUT_DIR): + print(f"❌ CHYBA: Cílová složka neexistuje nebo není dostupná: {OUTPUT_DIR}") + print(" Ujistěte se, že je disk U: připojen.") + return + + df = get_data() + print(f"✅ Načteno {len(df)} záznamů.") + + # 2. ÚPRAVA DAT + df['Postup (%)'] = df['Postup (%)'].fillna(0).astype(float).round(1) + + # 3. FILTROVÁNÍ + # A) DEAD + mask_dead = df['Stav v QB'].isin(['dead', 'invalid']) + df_dead = df[mask_dead].copy() + + # B) COMPLETED + mask_completed = ( + (df['Stav v QB'] == 'completed') | + (df['Postup (%)'] >= 100) + ) & (~mask_dead) + df_completed = df[mask_completed].copy() + + # C) ACTIVE / QUEUED + mask_active = (~mask_dead) & (~mask_completed) + df_active = df[mask_active].copy() + + # Seřazení + df_active = df_active.sort_values(by=['Postup (%)', 'Přidáno do DB'], ascending=[False, False]) + df_completed = df_completed.sort_values(by='Dokončeno', ascending=False) + df_dead = df_dead.sort_values(by='Poslední info', ascending=False) + + # 4. EXPORT + print(f"💾 Ukládám do: {FULL_OUTPUT_PATH}") + + try: + with pd.ExcelWriter(FULL_OUTPUT_PATH, engine='xlsxwriter') as writer: + + # List 1: Ke stažení + df_active.to_excel(writer, sheet_name='Ke stažení', index=False) + auto_adjust_columns(writer, df_active, 'Ke stažení') + + # List 2: Hotovo + df_completed.to_excel(writer, sheet_name='Hotovo', index=False) + auto_adjust_columns(writer, df_completed, 'Hotovo') + + # List 3: Dead + df_dead.to_excel(writer, sheet_name='Smazáno (Dead)', index=False) + auto_adjust_columns(writer, df_dead, 'Smazáno (Dead)') + + # List 4: Vše + df.to_excel(writer, sheet_name='Kompletní DB', index=False) + auto_adjust_columns(writer, df, 'Kompletní DB') + + print("🎉 Hotovo! Report byl úspěšně uložen na disk U:") + + except Exception as e: + print(f"❌ Chyba při zápisu souboru: {e}") + + +if __name__ == "__main__": + generate_report() \ No newline at end of file