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 os
import sys
import openpyxl
#import openpyxl
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
"""
# Добавляем сортировку
if sort_by == 'discount':
query += " ORDER BY total_quantity"
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"
elif sort_by == 'type':
query += " ORDER BY pt.type_name, p.name"
elif sort_by == 'inn':
query += " ORDER BY p.inn"
else:
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)
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])
@ -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'):
"""Получает историю реализации продукции с разными вариантами сортировки"""
try:
conn = sqlite3.connect(db_path)
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
"""
# Добавляем сортировку по дате
if sort_by == 'date_desc':
query += " ORDER BY s.sale_date DESC, s.created_at DESC"
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
def print_partner_cards(partners_df):
"""Выводит карточки партнеров в красивом формате"""
if partners_df is None or partners_df.empty:
print("📭 Нет данных о партнерах")
return
@ -213,7 +216,7 @@ def print_partner_cards(partners_df):
def print_sales_cards(sales_df):
"""Выводит карточки истории реализации в виде таблицы"""
if sales_df is None or sales_df.empty:
print("📭 Нет данных о продажах")
return
@ -222,14 +225,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['Партнер']
@ -243,12 +246,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)
@ -271,7 +274,7 @@ def simple_choice(options):
def check_database():
"""Проверяет загруженные данные в базе"""
conn = sqlite3.connect('partners.db')
try:
cursor = conn.cursor()
@ -286,12 +289,12 @@ def check_database():
def load_data_from_files():
"""Загружает данные из Excel файлов в базу данных"""
conn = sqlite3.connect('partners.db')
cursor = conn.cursor()
try:
# Запрос имен файлов
print("\n📁 Введите имена файлов:")
partners_file = input("Файл с партнерами: ")
product_type_file = input("Файл с типами продукции: ")
@ -391,10 +394,11 @@ def load_data_from_files():
def display_menu():
"""Главное меню программы"""
menu_options = [
'КАРТОЧКИ ПАРТНЕРОВ (сортировка по рейтингу)',
'КАРТОЧКИ ПАРТНЕРОВ (сортировка по скидкам)',
'КАРТОЧКИ ПАРТНЕРОВ (сортировка по ИНН)',
'ИСТОРИЯ РЕАЛИЗАЦИИ',
'ЗАПОЛНЕНИЕ БД из файлов',
'ВЫХОД'
@ -415,6 +419,12 @@ def display_menu():
partners = get_partners(sort_by='discount', ascending=False)
print_partner_cards(partners)
elif choice == 'КАРТОЧКИ ПАРТНЕРОВ (сортировка по ИНН)':
print("\n🔢 КАРТОЧКИ ПАРТНЕРОВ (сортировка по ИНН)")
print("═" * 70)
partners = get_partners(sort_by='inn', ascending=True)
print_partner_cards(partners)
elif choice == 'ИСТОРИЯ РЕАЛИЗАЦИИ':
print("\n📈 ИСТОРИЯ РЕАЛИЗАЦИИ ПРОДУКЦИИ")
print("═" * 70)

View file

@ -6,3 +6,83 @@
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():
"""Главное меню программы"""