diff --git a/main.py b/main.py index 17e3a21..a4500b0 100644 --- a/main.py +++ b/main.py @@ -2,10 +2,11 @@ import sqlite3 import pandas as pd import os import sys -#import openpyxl +import openpyxl def create_tables(db_connection): + #Создает все необходимые таблицы в базе данных cursor = db_connection.cursor() cursor.executescript(''' @@ -97,7 +98,7 @@ def get_partners(db_path='partners.db', sort_by='rating', ascending=False): GROUP BY p.id """ - + #Сортировку if sort_by == 'discount': query += " ORDER BY total_quantity" elif sort_by == 'rating': @@ -118,7 +119,7 @@ def get_partners(db_path='partners.db', sort_by='rating', ascending=False): df = pd.read_sql_query(query, conn) conn.close() - + #Колонки со скидкой if not df.empty: df['Скидка'] = df['total_quantity'].apply(lambda x: calculate_discount(x)[0]) df['Текст_скидки'] = df['total_quantity'].apply(lambda x: calculate_discount(x)[1]) @@ -134,6 +135,7 @@ def get_partners(db_path='partners.db', sort_by='rating', ascending=False): def get_sales_history(db_path='partners.db', limit=50, sort_by='date_desc'): + #Получаем историю реализации продукции с разными вариантами сортировки try: conn = sqlite3.connect(db_path) query = """ @@ -152,7 +154,7 @@ def get_sales_history(db_path='partners.db', limit=50, sort_by='date_desc'): JOIN ProductType pt ON pr.product_type_id = pt.id """ - + #Сортировка по дате if sort_by == 'date_desc': query += " ORDER BY s.sale_date DESC, s.created_at DESC" elif sort_by == 'date_asc': @@ -174,6 +176,7 @@ def get_sales_history(db_path='partners.db', limit=50, sort_by='date_desc'): return None def print_partner_cards(partners_df): + #Выводим карточку партнеров if partners_df is None or partners_df.empty: print("📭 Нет данных о партнерах") @@ -216,7 +219,7 @@ def print_partner_cards(partners_df): def print_sales_cards(sales_df): - + #Выводим карточку исории реализации if sales_df is None or sales_df.empty: print("📭 Нет данных о продажах") return @@ -225,14 +228,14 @@ def print_sales_cards(sales_df): print(f"║ {'ИСТОРИЯ РЕАЛИЗАЦИИ ПРОДУКЦИИ':^145} ║") print("╠" + "═" * 147 + "╣") - + #Заголовок таблицы headers = ["Дата", "Партнер", "Продукция", "Артикул", "Кол-во", "Цена", "Сумма"] print("║ {:<12} {:<18} {:<59} {:<3} {:>9} {:>8} {:>13} ║".format( headers[0], headers[1], headers[2], headers[3], headers[4], headers[5], headers[6] )) print("╠" + "═" * 147 + "╣") - + #Данные таблицы for index, row in sales_df.iterrows(): date = str(row['Дата продажи'])[:10] partner = row['Партнер'] @@ -246,12 +249,12 @@ def print_sales_cards(sales_df): print("╚" + "═" * 147 + "╝") - + #Итоги total_quantity = sales_df['Количество'].sum() total_amount = sales_df['Общая сумма'].sum() print(f"📊 ИТОГО: {len(sales_df)} продаж, {total_quantity:,} единиц, общая сумма: {total_amount:,.2f} руб.") def simple_choice(options): - + #Функция выбора print("\n" + "=" * 50) print("ВЫБЕРИТЕ ОПЦИЮ:") print("=" * 50) @@ -274,7 +277,7 @@ def simple_choice(options): def check_database(): - + #Проверка файлов базы двнных conn = sqlite3.connect('partners.db') try: cursor = conn.cursor() @@ -289,26 +292,26 @@ def check_database(): def load_data_from_files(): - + #Загружает файлы в базу данных conn = sqlite3.connect('partners.db') cursor = conn.cursor() try: - + #Запрос файлов print("\n📁 Введите имена файлов:") partners_file = input("Файл с партнерами: ") product_type_file = input("Файл с типами продукции: ") products_file = input("Файл с продуктами: ") sales_file = input("Файл с продажами: ") - # 1. Загрузка типов партнеров + #Загрузка типов партнеров print("\n1. 📊 Загрузка типов партнеров...") partners_df = pd.read_excel(partners_file) partner_types = partners_df['Тип партнера'].unique() for partner_type in partner_types: cursor.execute("INSERT OR IGNORE INTO PartnerType (type_name) VALUES (?)", (partner_type,)) - # 2. Загрузка партнеров + #Загрузка партнеров print("2. 👥 Загрузка партнеров...") for _, row in partners_df.iterrows(): cursor.execute("SELECT id FROM PartnerType WHERE type_name = ?", (row['Тип партнера'],)) @@ -322,7 +325,7 @@ def load_data_from_files(): row['Юридический адрес партнера'], row['ИНН'], row['Рейтинг']) ) - # 3. Загрузка типов продукции + #Загрузка типов продукции print("3. 📦 Загрузка типов продукции...") product_type_df = pd.read_excel(product_type_file) for _, row in product_type_df.iterrows(): @@ -330,7 +333,7 @@ def load_data_from_files(): (row['Тип продукции'], row['Коэффициент типа продукции']) ) - # 4. Загрузка продуктов + #Загрузка продуктов print("4. 🏷️ Загрузка продуктов...") products_df = pd.read_excel(products_file) for _, row in products_df.iterrows(): @@ -344,13 +347,13 @@ def load_data_from_files(): row['Артикул'], row['Минимальная стоимость для партнера']) ) - # 5. Загрузка продаж + #Загрузка продаж print("5. 💰 Загрузка продаж...") sales_df = pd.read_excel(sales_file) loaded_sales = 0 for _, row in sales_df.iterrows(): - # Находим ID продукта + #Находим ID продукта cursor.execute("SELECT id FROM Product WHERE product_name = ?", (row['Продукция'],)) product_result = cursor.fetchone() if not product_result: @@ -358,7 +361,7 @@ def load_data_from_files(): continue product_id = product_result[0] - # Находим ID партнера + #Находим ID партнера cursor.execute("SELECT id FROM Partner WHERE name = ?", (row['Наименование партнера'],)) partner_result = cursor.fetchone() if not partner_result: @@ -366,15 +369,15 @@ def load_data_from_files(): continue partner_id = partner_result[0] - # Получаем цену продажи + #Получаем цену продажи cursor.execute("SELECT min_partner_price FROM Product WHERE id = ?", (product_id,)) min_price_result = cursor.fetchone() sale_price = min_price_result[0] if min_price_result else 0 - # Преобразуем дату + #Преобразуем дату sale_date = pd.to_datetime(row['Дата продажи']).strftime('%Y-%m-%d') - # Вставляем продажу + #Вставляем продажу cursor.execute("""INSERT INTO Sale (product_id, partner_id, quantity, sale_date, sale_price) VALUES (?, ?, ?, ?, ?)""", @@ -394,7 +397,7 @@ def load_data_from_files(): def display_menu(): - + #Главное меню программы menu_options = [ 'КАРТОЧКИ ПАРТНЕРОВ (сортировка по рейтингу)', 'КАРТОЧКИ ПАРТНЕРОВ (сортировка по скидкам)',