diff --git a/main.py b/main.py index f1e2488..d3cc619 100644 --- a/main.py +++ b/main.py @@ -1,8 +1,8 @@ -import sqlite3 -#import datetime -import pandas as pd import os +import sqlite3 +import pandas as pd +import textwrap if os.path.exists('partners.db'): os.remove('partners.db') @@ -10,7 +10,6 @@ if os.path.exists('partners.db'): else: print(f"База данных {'partners.db'} не найдена, создаем новую") - conn = sqlite3.connect('partners.db') cursor = conn.cursor() @@ -105,7 +104,6 @@ products = [ (1, 'Ламинат Дуб серый 32 класс 8 мм с фаской', '7028748', 3890.41), (4, 'Пробковое напольное клеевое покрытие 32 класс 4 мм', '5012543', 5450.59) ] - cursor.executemany(''' INSERT OR IGNORE INTO Product (product_type_id, product_name, article, min_partner_price) VALUES (?, ?, ?, ?) @@ -145,6 +143,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: @@ -157,44 +156,142 @@ for sale in sales_data: print(f"Ошибка при добавлении продажи: {sale}, ошибка: {e}") conn.commit() + +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)}") + + # print("╔" + "═" * 69 + "╗") # print(f"║ {'КАРТОЧКА ПАРТНЕРА':^67} ║") # print("╠" + "═" * 69 + "╣") -def print_patner_cars(partners_df): - """Функция для вывода партнеров в виде карточек с выравниванием""" +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("╔" + "═" * 69 + "╗") -# print(f"║ {'КАРТОЧКА ПАРТНЕРА':^67} ║") -# print("╠" + "═" * 69 + "╣") -# -# # Используем разные кавычки для избежания конфликта -# type_text = f"Тип: {row['Тип партнера' ]}" -# name_text = f"Наименование: {row['Наименование партнера' ]}" -# direktor_text = f"Директор: {row['Директор']}" -# rating_text = f"Рейтинг: {row['Рейтиннг']}" -# email_text = f"Контакты: {row['Контакты']}" -# phone_text = f"Телефон: {row['Телефон']}" -# inn_text = f"ИНН: {row['ИНН']}" -# -# address = row['Юридический адрес'] -# if len(address) > 68: -# address = address[:57] + "..." -# address_text = f"Адрес; {address}" -# -# print(f"║ {}) + for index, row in partners_df.iterrows(): + print("╔" + "=" * 69 + "╗") + print(f"║ {'КАРТОЧКА ПАРТНЕРА':^67} ║") + print("╠" + "=" * 69 + "╣") -if __name__== "__main__": - # Проверяем данные - print("данные уcпешно добавлы в базу данных!") - print("\nКолличество записей в таблицах:") + 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['Юридический адрес'] + address_text = f"Адрес: {address_text}" + + print(f"║ {type_text:<67} ║") + print(f"║ {name_text:<67} ║") + print(f"║ {director_text:<67} ║") + print(f"║ {rating_text:<67} ║") + print(f"║ {'':<67} ║") + print(f"║ {email_text:<67} ║") + print(f"║ {phone_text:<67} ║") + print(f"║ {'':<67} ║") + print(f"║ {inn_text:<67} ║") + print(f"║ {address_text[:63]:<63} ... ║") + + print("╚" + "═" * 69 + "╝") + print() + + +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" + + # Выполняем запрос и получаем данные в DataFrame + 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 + + + + + +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) + + +# if __name__ == "main": +# +# conn.close() + + # + # print("\n3. Партнеры со статистикой продаж:") + # partners_stats = get_partners() + # if partners_stats is not None: + # print(partners_stats.to_string(index=False)) + +