This commit is contained in:
parent 264a3c4960
commit caf93819f9
2 changed files with 2 additions and 112 deletions

112
main.py
View file

@ -88,44 +88,7 @@ def calculate_discount(total_quantity):
else: else:
return 0, '0% (до 10000 ед.)' return 0, '0% (до 10000 ед.)'
def get_partners(db_path='partners.db', sort_by='rating', ascending=False): def get_partners(db_path='partners.db', sort_by='rating', ascending=False):
"""Получает данные о партнерах из базы данных с возможностью сортировки и расчета скидок
Args:
db_path (str): путь к файлу базы данных SQLite. По умолчанию 'partners.db'
sort_by (str): поле для сортировки. Допустимые значения:
- 'rating': по рейтингу (по умолчанию)
- 'discount': по общему количеству продаж (для расчета скидки)
- 'name': по наименованию партнера
- 'type': по типу партнера и наименованию
ascending (bool): направление сортировки.
- False: по убыванию (по умолчанию)
- True: по возрастанию
Returns:
pandas.DataFrame или None: DataFrame с данными партнеров или None в случае ошибки
Структура возвращаемого DataFrame:
- Тип партнера
- Наименование партнера
- Директор
- Электронная почта
- Телефон
- Юридический адрес
- ИНН
- Рейтинг
- Дата создания
- total_quantity: общее количество продаж (скрытое поле)
- Скидка: процент скидки на основе total_quantity
- Текст_скидки: текстовое описание скидки
Raises:
sqlite3.Error: ошибки работы с базой данных
Exception: другие возможные ошибки
Example:
>>> df = get_partners(sort_by='discount', ascending=True)
>>> df = get_partners('my_database.db', sort_by='name')
"""
try: try:
conn = sqlite3.connect(db_path) conn = sqlite3.connect(db_path)
query = """ query = """
@ -176,43 +139,7 @@ def get_partners(db_path='partners.db', sort_by='rating', ascending=False):
print(f"❌ Общая ошибка: {e}") print(f"❌ Общая ошибка: {e}")
return None return None
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'):
"""Получает историю реализации продукции с разными вариантами сортировки
Args:
db_path (str): путь к файлу базы данных SQLite. По умолчанию 'partners.db'
limit (int): ограничение количества возвращаемых записей. По умолчанию 50
sort_by (str): критерий сортировки данных. Допустимые значения:
- 'date_desc': по дате продажи (новые сверху, по умолчанию)
- 'date_asc': по дате продажи (старые сверху)
- 'quantity_desc': по количеству (по убыванию)
- 'amount_desc': по общей сумме (по убыванию)
Returns:
pandas.DataFrame или None: DataFrame с историей продаж или None в случае ошибки
Структура возвращаемого DataFrame:
- Дата продажи: дата осуществления продажи
- Партнер: наименование партнера
- Продукция: название продукции
- Артикул: артикул продукции
- Количество: количество проданных единиц
- Цена за единицу: цена за одну единицу продукции
- Общая сумма: общая сумма продажи (рассчитывается как количество × цена)
- Тип продукции: категория продукции
Raises:
Exception: ошибки при выполнении запроса к базе данных
Example:
>>> # Получить последние 50 продаж
>>> df = get_sales_history()
>>> # Получить 100 самых крупных продаж по сумме
>>> df = get_sales_history(limit=100, sort_by='amount_desc')
>>> # Получить историю продаж в хронологическом порядке
>>> df = get_sales_history(sort_by='date_asc', limit=200)
"""
try: try:
conn = sqlite3.connect(db_path) conn = sqlite3.connect(db_path)
query = """ query = """
@ -366,45 +293,8 @@ def simple_choice(options):
print("\n👋 Программа прервана пользователем.") print("\n👋 Программа прервана пользователем.")
sys.exit(0) sys.exit(0)
def check_database(): def check_database():
"""Упрощенная функция выбора опции из списка с валидацией ввода """Упрощенная функция выбора опции из списка с валидацией ввода"""
Args:
options (list): список строк с доступными опциями для выбора
Returns:
str: выбранная опция из списка options
Особенности:
- Выводит пронумерованный список опций в красивом формате
- Запрашивает ввод пользователя с валидацией
- Обрабатывает некорректный ввод и повторяет запрос
- Обрабатывает прерывание программы (Ctrl+C) с graceful shutdown
- Поддерживает ввод только цифровых значений в допустимом диапазоне
Raises:
SystemExit: при прерывании программы пользователем (KeyboardInterrupt)
Example:
>>> options = ["Показать всех партнеров", "История продаж", "Выход"]
>>> choice = simple_choice(options)
==================================================
ВЫБЕРИТЕ ОПЦИЮ:
==================================================
1. Показать всех партнеров
2. История продаж
3. Выход
Введите номер (1-3): 2
>>> print(choice)
"История продаж"
Обработка ошибок:
- Некорректный ввод (не цифры): повторный запрос
- Число вне диапазона: повторный запрос
- Прерывание (Ctrl+C): graceful exit программы
- EOF (Ctrl+D в Unix): обрабатывается как некорректный ввод
"""
conn = sqlite3.connect('partners.db') conn = sqlite3.connect('partners.db')
try: try:
cursor = conn.cursor() cursor = conn.cursor()

View file

@ -2,7 +2,7 @@
Файл с типами продукции: Product_type_import.xlsx Файл с типами продукции: Product_type_import.xlsx
Файл с продуктами: Products_import.xlsx Файл с продуктами: Products_import.xlsx
Файл с продажами: Partner_products_import.xlsx Файл с продажами: Partner_products_import.xlsx
###
###1 def calculate_discount(total_quantity): ###1 def calculate_discount(total_quantity):
"""Ра""Рассчитываетссчитывает скидку на основе общего количества проданной продукции """Ра""Рассчитываетссчитывает скидку на основе общего количества проданной продукции