This commit is contained in:
user_3d 2025-10-25 09:13:14 +05:00
parent b9e41adb07
commit 3faf6a6526
2 changed files with 106 additions and 16 deletions

40
main.py
View file

@ -2,7 +2,7 @@ import sqlite3
import pandas as pd import pandas as pd
import os import os
import sys import sys
import openpyxl #import openpyxl
def create_tables(db_connection): def create_tables(db_connection):
@ -97,7 +97,7 @@ def get_partners(db_path='partners.db', sort_by='rating', ascending=False):
GROUP BY p.id GROUP BY p.id
""" """
# Добавляем сортировку
if sort_by == 'discount': if sort_by == 'discount':
query += " ORDER BY total_quantity" query += " ORDER BY total_quantity"
elif sort_by == 'rating': elif sort_by == 'rating':
@ -106,6 +106,10 @@ def get_partners(db_path='partners.db', sort_by='rating', ascending=False):
query += " ORDER BY p.name" query += " ORDER BY p.name"
elif sort_by == 'type': elif sort_by == 'type':
query += " ORDER BY pt.type_name, p.name" query += " ORDER BY pt.type_name, p.name"
elif sort_by == 'inn':
query += " ORDER BY p.inn"
else: else:
query += " ORDER BY p.rating" query += " ORDER BY p.rating"
@ -114,7 +118,7 @@ def get_partners(db_path='partners.db', sort_by='rating', ascending=False):
df = pd.read_sql_query(query, conn) df = pd.read_sql_query(query, conn)
conn.close() conn.close()
# Добавляем колонки со скидкой
if not df.empty: 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)[0])
df['Текст_скидки'] = df['total_quantity'].apply(lambda x: calculate_discount(x)[1]) df['Текст_скидки'] = df['total_quantity'].apply(lambda x: calculate_discount(x)[1])
@ -130,7 +134,6 @@ 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'): def get_sales_history(db_path='partners.db', limit=50, sort_by='date_desc'):
"""Получает историю реализации продукции с разными вариантами сортировки"""
try: try:
conn = sqlite3.connect(db_path) conn = sqlite3.connect(db_path)
query = """ query = """
@ -149,7 +152,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 JOIN ProductType pt ON pr.product_type_id = pt.id
""" """
# Добавляем сортировку по дате
if sort_by == 'date_desc': if sort_by == 'date_desc':
query += " ORDER BY s.sale_date DESC, s.created_at DESC" query += " ORDER BY s.sale_date DESC, s.created_at DESC"
elif sort_by == 'date_asc': elif sort_by == 'date_asc':
@ -171,7 +174,7 @@ def get_sales_history(db_path='partners.db', limit=50, sort_by='date_desc'):
return None return None
def print_partner_cards(partners_df): def print_partner_cards(partners_df):
"""Выводит карточки партнеров в красивом формате"""
if partners_df is None or partners_df.empty: if partners_df is None or partners_df.empty:
print("📭 Нет данных о партнерах") print("📭 Нет данных о партнерах")
return return
@ -213,7 +216,7 @@ def print_partner_cards(partners_df):
def print_sales_cards(sales_df): def print_sales_cards(sales_df):
"""Выводит карточки истории реализации в виде таблицы"""
if sales_df is None or sales_df.empty: if sales_df is None or sales_df.empty:
print("📭 Нет данных о продажах") print("📭 Нет данных о продажах")
return return
@ -222,14 +225,14 @@ def print_sales_cards(sales_df):
print(f"║ {'ИСТОРИЯ РЕАЛИЗАЦИИ ПРОДУКЦИИ':^145} ║") print(f"║ {'ИСТОРИЯ РЕАЛИЗАЦИИ ПРОДУКЦИИ':^145} ║")
print("╠" + "═" * 147 + "╣") print("╠" + "═" * 147 + "╣")
# Заголовок таблицы
headers = ["Дата", "Партнер", "Продукция", "Артикул", "Кол-во", "Цена", "Сумма"] headers = ["Дата", "Партнер", "Продукция", "Артикул", "Кол-во", "Цена", "Сумма"]
print("║ {:<12} {:<18} {:<59} {:<3} {:>9} {:>8} {:>13} ║".format( print("║ {:<12} {:<18} {:<59} {:<3} {:>9} {:>8} {:>13} ║".format(
headers[0], headers[1], headers[2], headers[3], headers[4], headers[5], headers[6] headers[0], headers[1], headers[2], headers[3], headers[4], headers[5], headers[6]
)) ))
print("╠" + "═" * 147 + "╣") print("╠" + "═" * 147 + "╣")
# Данные таблицы
for index, row in sales_df.iterrows(): for index, row in sales_df.iterrows():
date = str(row['Дата продажи'])[:10] date = str(row['Дата продажи'])[:10]
partner = row['Партнер'] partner = row['Партнер']
@ -243,12 +246,12 @@ def print_sales_cards(sales_df):
print("╚" + "═" * 147 + "╝") print("╚" + "═" * 147 + "╝")
# Итоги
total_quantity = sales_df['Количество'].sum() total_quantity = sales_df['Количество'].sum()
total_amount = sales_df['Общая сумма'].sum() total_amount = sales_df['Общая сумма'].sum()
print(f"📊 ИТОГО: {len(sales_df)} продаж, {total_quantity:,} единиц, общая сумма: {total_amount:,.2f} руб.") print(f"📊 ИТОГО: {len(sales_df)} продаж, {total_quantity:,} единиц, общая сумма: {total_amount:,.2f} руб.")
def simple_choice(options): def simple_choice(options):
"""Упрощенная функция выбора"""
print("\n" + "=" * 50) print("\n" + "=" * 50)
print("ВЫБЕРИТЕ ОПЦИЮ:") print("ВЫБЕРИТЕ ОПЦИЮ:")
print("=" * 50) print("=" * 50)
@ -271,7 +274,7 @@ def simple_choice(options):
def check_database(): def check_database():
"""Проверяет загруженные данные в базе"""
conn = sqlite3.connect('partners.db') conn = sqlite3.connect('partners.db')
try: try:
cursor = conn.cursor() cursor = conn.cursor()
@ -286,12 +289,12 @@ def check_database():
def load_data_from_files(): def load_data_from_files():
"""Загружает данные из Excel файлов в базу данных"""
conn = sqlite3.connect('partners.db') conn = sqlite3.connect('partners.db')
cursor = conn.cursor() cursor = conn.cursor()
try: try:
# Запрос имен файлов
print("\n📁 Введите имена файлов:") print("\n📁 Введите имена файлов:")
partners_file = input("Файл с партнерами: ") partners_file = input("Файл с партнерами: ")
product_type_file = input("Файл с типами продукции: ") product_type_file = input("Файл с типами продукции: ")
@ -391,10 +394,11 @@ def load_data_from_files():
def display_menu(): def display_menu():
"""Главное меню программы"""
menu_options = [ menu_options = [
'КАРТОЧКИ ПАРТНЕРОВ (сортировка по рейтингу)', 'КАРТОЧКИ ПАРТНЕРОВ (сортировка по рейтингу)',
'КАРТОЧКИ ПАРТНЕРОВ (сортировка по скидкам)', 'КАРТОЧКИ ПАРТНЕРОВ (сортировка по скидкам)',
'КАРТОЧКИ ПАРТНЕРОВ (сортировка по ИНН)',
'ИСТОРИЯ РЕАЛИЗАЦИИ', 'ИСТОРИЯ РЕАЛИЗАЦИИ',
'ЗАПОЛНЕНИЕ БД из файлов', 'ЗАПОЛНЕНИЕ БД из файлов',
'ВЫХОД' 'ВЫХОД'
@ -415,6 +419,12 @@ def display_menu():
partners = get_partners(sort_by='discount', ascending=False) partners = get_partners(sort_by='discount', ascending=False)
print_partner_cards(partners) print_partner_cards(partners)
elif choice == 'КАРТОЧКИ ПАРТНЕРОВ (сортировка по ИНН)':
print("\n🔢 КАРТОЧКИ ПАРТНЕРОВ (сортировка по ИНН)")
print("═" * 70)
partners = get_partners(sort_by='inn', ascending=True)
print_partner_cards(partners)
elif choice == 'ИСТОРИЯ РЕАЛИЗАЦИИ': elif choice == 'ИСТОРИЯ РЕАЛИЗАЦИИ':
print("\n📈 ИСТОРИЯ РЕАЛИЗАЦИИ ПРОДУКЦИИ") print("\n📈 ИСТОРИЯ РЕАЛИЗАЦИИ ПРОДУКЦИИ")
print("═" * 70) print("═" * 70)

View file

@ -6,3 +6,83 @@
def create_tables(db_connection): def create_tables(db_connection):
"""Создает все необходимые таблицы в базе данных""" """Создает все необходимые таблицы в базе данных"""
# Добавляем сортировку
if sort_by == 'discount':
query += " ORDER BY total_quantity"
elif sort_by == 'rating'....
# Добавляем колонки со скидкой
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])
def get_sales_history(db_path='partners.db', limit=50, sort_by='date_desc'):
"""Получает историю реализации продукции с разными вариантами сортировки"""
# Добавляем сортировку по дате
if sort_by == 'date_desc':
query += " ORDER BY s.sale_date DESC, s.created_at DESC"
elif sort_by == 'date_asc':
query += " ORDER BY s.sale_date ASC, s.created_at ASC"
def print_partner_cards(partners_df):
"""Выводит карточки партнеров в красивом формате"""
def print_sales_cards(sales_df):
"""Выводит карточки истории реализации в виде таблицы"""
# Заголовок таблицы
headers = ["Дата", "Партнер", "Продукция", "Артикул", "Кол-во", "Цена", "Сумма"]
print("║ {:<12} {:<18} {:<59} {:<3} {:>9} {:>8} {:>13} ║
# Данные таблицы
for index, row in sales_df.iterrows():
date = str(row['Дата продажи'])[:10]
partner = row['Партнер']
product = row['Продукция']
# Итоги
total_quantity = sales_df['Количество'].sum()
total_amount = sales_df['Общая сумма'].sum()
def simple_choice(options):
"""Упрощенная функция выбора"""
def check_database():
"""Проверяет загруженные данные в базе"""
def load_data_from_files():
"""Загружает данные из Excel файлов в базу данных"""
# Запрос имен файлов
print("\n📁 Введите имена файлов:")
partners_file = input("Файл с партнерами: ")
product_type_file = input("Файл с типами продукции: ")
products_file = input("Файл с продуктами: ")
sales_file = input("Файл с продажами: ")
# 1. Загрузка типов партнеров
print("\n1. 📊 Загрузка типов партнеров...") ниже идут 2, 3, 4, 5
for _, row in sales_df.iterrows():
# Находим ID продукта
# Находим ID партнера
cursor.execute("SELECT id FROM Partner WHERE name = ?", (row['Наименование партнера'],))
partner_result = cursor.fetchone()
# Получаем цену продажи
cursor.execute("SELECT min_partner_price FROM Product WHERE id = ?", (product_id,))
min_price_result = cursor.fetchone()
# Преобразуем дату
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 (?, ?, ?, ?, ?)""",
def display_menu():
"""Главное меню программы"""