20251106
This commit is contained in:
parent
264a3c4960
commit
caf93819f9
112
main.py
112
main.py
|
|
@ -88,44 +88,7 @@ def calculate_discount(total_quantity):
|
|||
else:
|
||||
return 0, '0% (до 10000 ед.)'
|
||||
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:
|
||||
conn = sqlite3.connect(db_path)
|
||||
query = """
|
||||
|
|
@ -176,43 +139,7 @@ def get_partners(db_path='partners.db', sort_by='rating', ascending=False):
|
|||
print(f"❌ Общая ошибка: {e}")
|
||||
return None
|
||||
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:
|
||||
conn = sqlite3.connect(db_path)
|
||||
query = """
|
||||
|
|
@ -366,45 +293,8 @@ def simple_choice(options):
|
|||
print("\n👋 Программа прервана пользователем.")
|
||||
sys.exit(0)
|
||||
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')
|
||||
try:
|
||||
cursor = conn.cursor()
|
||||
|
|
|
|||
2
read.txt
2
read.txt
|
|
@ -2,7 +2,7 @@
|
|||
Файл с типами продукции: Product_type_import.xlsx
|
||||
Файл с продуктами: Products_import.xlsx
|
||||
Файл с продажами: Partner_products_import.xlsx
|
||||
|
||||
###
|
||||
###1 def calculate_discount(total_quantity):
|
||||
"""Ра""Рассчитываетссчитывает скидку на основе общего количества проданной продукции
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue