From 4f73122c48e1569b790bf69e5b5d1c3d4cf3336c Mon Sep 17 00:00:00 2001 From: user_3d Date: Thu, 16 Oct 2025 10:37:25 +0500 Subject: [PATCH] 171906 --- main.py | 172 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 169 insertions(+), 3 deletions(-) diff --git a/main.py b/main.py index e96ab8a..153c2ea 100644 --- a/main.py +++ b/main.py @@ -1,7 +1,15 @@ import sqlite3 import datetime import pandas as pd -#10 +import os + +#Армина +if os.path.exists('partners.db'): + os.remove('partners.db') + print(f"База данных {'partners.db'} удалена") +else: + print(f"База данных {'partners.db'} не найдена, создаем новую") + conn = sqlite3.connect('partners.db') cursor = conn.cursor() @@ -10,7 +18,6 @@ cursor.executescript(''' CREATE TABLE IF NOT EXISTS PartnerType ( id INTEGER PRIMARY KEY AUTOINCREMENT, type_name VARCHAR(100) NOT NULL UNIQUE); - CREATE TABLE IF NOT EXISTS Partner ( id INTEGER PRIMARY KEY AUTOINCREMENT, @@ -137,6 +144,7 @@ def get_ids(product_name, partner_name): return product_id, partner_id, sale_price + for sale in sales_data: product_name, partner_name, quantity, sale_date = sale try: @@ -150,4 +158,162 @@ for sale in sales_data: # Сохраняем изменения conn.commit() -conn.close() +def get_partners(db_path='partners.db', sort_by= 'rating', ascending =False): + try: + # Подключаемся к базе данных + conn = sqlite3. connect (db_path) + # SQL запрос для получения данных о партнерах + query = """SELECT + pt. type_name AS "Тип партнера", + p. name AS "Наименование партнера", + p.director AS "Директор", + p. email AS "Электронная почта", + p. phone AS "Телефон", + p. Legal_address AS "Юридический адрес", + p. inn AS "ИНН", + p.rating AS "Рейтинг", + p.created_at AS "Дата создания" + FROM Partner p + JOIN PartnerType pt ON p.partner_type_id = pt.id + """ + if sort_by == 'rating': + query += " ORDER BY p.rating" + elif sort_by == 'name': + query += " ORDER BY p.name" + elif sort_by == 'type': + query += " ORDER BY pt.type_name, p.name" + else: + query += " ORDER BY p.rating" + query += " DESC" if not ascending else " ASC" + df = pd.read_sql_query(query, conn) + # Закрываем соединение + conn.close() + return df + + except sqlite3.Error as e: + print(f"Ошибка базы данных: {e}") + return None + except Exception as e: + print(f"Общая ошибка: {e}") + return None + +def print_partners(partners_df): + """ФУНКЦИЯ для красивого вывода данных о партнерах""" + if partners_df is None or partners_df.empty: + print("Нет данных о партнерах") + return + + # Выводим данные в удобном формате + print("=" * 120) + print("{:<7} {:<20} {:<35} {:<20} {:<10}".format( + "Тип", "Наименование", "Директор","Телефон","Рейтинг" + )) + print("=" * 120) + + for _, row in partners_df.iterrows(): + print("{:<7} {:<20} {:<35} {:<20} {:<10}".format( + row['Тип партнера'] [:7], + row['Наименование партнера'] [:20], + row['Директор'] [:35], + row['Телефон'][:20], + row['Рейтинг'] + )) + print("=" * 120) + print(f"Всего партнеров: {len(partners_df)}") + + +def get_partners_with_stats(db_path='partners.db'): + """Функция для получения партнеров со статистикой продаж""" + + try: + conn = sqlite3.connect(db_path) + query = """ + SELECT + pt.type_name AS "Тип партнера", + p.name AS "Наименование партнера", + p.director AS "Директор", + p.rating AS "Рейтинг", + COUNT (s.id) AS "Количество продаж", + SUM(COALESCE(s.quantity, 0)) AS "Общее количество товаров", + SUM(COALESCE(s.quantity * s.sale_price, 0)) AS "Общий объем продаж", + p.created_at AS "Дата регистрации" + FROM Partner p + JOIN PartnerType pt ON p.partner_type_id = pt.id + LEFT JOIN Sale s ON p.id = s.partner_id + GROUP BY p.id + ORDER BY "Общий объем продаж" DESC""" + + df = pd.read_sql_query(query, conn) + conn.close() + return df + except Exception as e: + print(f"Общая ошибка: {e}") + return None + + # print("╔" + "═" * 69 + "╗") + # print(f"║ {'КАРТОЧКА ПАРТНЕРА':^67} ║") + # print("╠" + "═" * 69 + "╣") + # print("╚" + "═" * 69 + "╝") + +def print_partner_cards(partners_df): + """ФУНКЦИЯ для вывода партнеров в виде карточек с выравниванием""" + if partners_df is None or partners_df.empty: + print("Нет данных о партнерах") + return + + for index, row in partners_df.iterrows(): + print("╔" + "═" * 70 + "╗") + print(f"║{'КАРТОЧКА ПАРТНЕРА':^70}║") + print("╠" + "═" * 70 + "╣") + + # Используем разные кавычки для избежания конфликта + type_text = f"Тип: {row['Тип партнера']}" + name_text = f"Наименование: {row['Наименование партнера']}" + director_text = f"Директор: {row['Директор']}" + rating_text = f"Рейтинг: {row['Рейтинг']}" + email_text = f"Контакты: {row['Электронная почта']}" + phone_text = f"Телефон: {row['Телефон']}" + inn_text = f"ИНН: {row['ИНН']}" + address_text = row['Юридический адрес'] + + print(f"║{type_text:<70}║") + print(f"║{name_text:<70}║") + print(f"║{director_text:<70}║") + print(f"║{rating_text:<70}║") + print(f"║{'':<70}║") + print(f"║{email_text:<70}║") + print(f"║{phone_text:<70}║") + print(f"║{'':<70}║") + print(f"║{inn_text:<70}║") + print(f"║{address_text:<70}║") + print("╚" + "═" * 70 + "╝") + print() + +if __name__ == "__main__": + # Проверяем данные + print("Данные успешно добавлены в базу данных!") + print("\nКоличество записей в таблицах:") + tables = ['PartnerType', 'Partner', 'ProductType', 'Product', 'Sale'] + for table in tables: + cursor.execute(f'SELECT COUNT(*) FROM {table}') + count = cursor.fetchone()[0] + print(f"{table}: {count} записей") + conn.close() + + print("1. КАРТОЧКИ ПАРТНЕРОВ (сортировка по рейтингу)") + print("=" * 70) + partners = get_partners(sort_by='rating', ascending=False) + print_partner_cards(partners) + + # print("\n3. Партнеры со статистикой продаж:") + # partners_stats = get_partners_with_stats() + # + # if partners_stats is not None: + # print(partners_stats.to_string(index=False)) + + # + # print("\n4. Полные данные о партнерах:") + # # Выводим полную информацию в табличном виде + # full_data = get_partners() + # if full_data is not None: + # print(full_data.to_string(index=False))