diff --git a/main.py b/main.py index 02f447a..fc8e058 100644 --- a/main.py +++ b/main.py @@ -1,8 +1,14 @@ import sqlite3 -# import datetime import pandas as pd -# контрольная работа Потапов + +# import datetime +# import pandas as pd + +#potapov andrey 3 d ЪМ + + + conn = sqlite3.connect("partners.db") cursor = conn.cursor() @@ -158,4 +164,196 @@ for sale in sales_data: print(f"Ошибка при добавлении продажи: {sale}, ошибка: {e}") conn.commit() -conn.close() \ No newline at end of file +def get_partners(db_path='partners.db', sort_by='rating', ascending=False): + try: + conn = sqlite3.connect(db_path) + 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 get_ids(product_name, partner_name): + cursor.execute('SELECT id FROM Product WHERE product_name = ?', (product_name,)) + product_id = cursor.fetchone()[0] + + cursor.execute('SELECT id FROM Partner WHERE name = ?', (partner_name,)) + partner_id = cursor.fetchone()[0] + + cursor.execute('SELECT min_partner_price FROM Product WHERE product_name = ?', (product_name,)) + sale_price = cursor.fetchone()[0] + + return product_id, partner_id, sale_price + + +for sale in sales_data: + product_name, partner_name, quantity, sale_date = sale + try: + product_id, partner_id, sale_price = get_ids(product_name, partner_name) + cursor.execute(''' + INSERT INTO Sale (product_id, partner_id, quantity, sale_date, sale_price) + VALUES (?, ?, ?, ?, ?) + ''', (product_id, partner_id, quantity, sale_date, sale_price)) + except Exception as e: + 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)}") +def print_partner_cards(partners_df): + """Функция для вывода партнеров в виде карточек с выравниваем""" + global address + 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['Наименование партнера']}" + director_text = f"Директор: {row['Директор']}" + rating_text = f"Рейтинг: {row['Рейтинг']}" + email_text = f"Контакты: {row['Электронная почта']}" + phone_text = f"Телефон: {row['Телефон']}" + inn_text = f"ИНН: {row['ИНН']}" + + address_text = row['Юридический адрес'] + # if len(address) > 60: + # address = address[:57] + "..." + 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) + 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) + + print("\n3. Партнеры со статистикой продаж:") + partners_stats = get_partners() + 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))