project_6/read.txt

279 lines
15 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Файл с партнерами: Partners_import.xlsx
Файл с типами продукции: Product_type_import.xlsx
Файл с продуктами: Products_import.xlsx
Файл с продажами: Partner_products_import.xlsx
def calculate_discount(total_quantity):
"""
Рассчитывает размер скидки на основе общего объема продаж.
Скидка определяется по следующим пороговым значениям:
- 15% при объеме от 300000 единиц
- 10% при объеме от 50000 до 300000 единиц
- 5% при объеме от 10000 до 50000 единиц
- 0% при объеме менее 10000 единиц
Args:
total_quantity (int): Общее количество проданных единиц товара
Returns:
tuple: Кортеж содержащий:
- int: Процент скидки (0-15)
- str: Текстовое описание скидки с диапазоном
"""
def get_partners(db_path='partners.db', sort_by='rating', ascending=False):
"""
Получает список партнеров из базы данных с возможностью сортировки и расчетом скидок.
Функция подключается к SQLite базе данных, извлекает информацию о партнерах,
рассчитывает скидки на основе общего объема продаж и предоставляет возможность
сортировки по различным критериям.
Args:
db_path (str, optional): Путь к файлу базы данных. По умолчанию 'partners.db'
sort_by (str, optional): Поле для сортировки. По умолчанию 'rating'.
Допустимые значения: 'rating', 'name', 'type', 'discount'
ascending (bool, optional): Направление сортировки. По умолчанию False (убывание).
True - возрастание, False - убывание
Returns:
pandas.DataFrame or None: DataFrame с данными партнеров, включая рассчитанные скидки,
или None в случае ошибки
Raises:
sqlite3.Error: В случае ошибок при работе с базой данных
Exception: При других непредвиденных ошибках
Example:
>>> df = get_partners(sort_by='discount', ascending=True)
>>> print(df[['Наименование партнера', 'Рейтинг', 'Скидка']])
"""
def get_sales_history(db_path='partners.db', limit=50, sort_by='date_desc'):
"""
Получает историю продаж из базы данных с возможностью сортировки и ограничения количества записей.
Функция извлекает детальную информацию о продажах, включая даты, партнеров,
продукцию, количества и суммы. Поддерживает различные варианты сортировки
и ограничение количества возвращаемых записей.
Args:
db_path (str, optional): Путь к файлу базы данных. По умолчанию 'partners.db'
limit (int, optional): Максимальное количество возвращаемых записей.
По умолчанию 50
sort_by (str, optional): Критерий сортировки результатов. По умолчанию 'date_desc'.
Допустимые значения:
- 'date_desc': по дате продажи (новые сначала)
- 'date_asc': по дате продажи (старые сначала)
- 'quantity_desc': по количеству (по убыванию)
- 'amount_desc': по общей сумме (по убыванию)
Returns:
pandas.DataFrame or None: DataFrame с историей продаж, содержащий колонки:
- Дата продажи
- Партнер
- Продукция
- Артикул
- Количество
- Цена за единицу
- Общая сумма
- Тип продукции
или None в случае ошибки
Raises:
sqlite3.Error: В случае ошибок при работе с базой данных
Exception: При других непредвиденных ошибках
Example:
>>> # Получить последние 100 продаж, отсортированных по сумме
>>> sales_df = get_sales_history(limit=100, sort_by='amount_desc')
>>> print(sales_df[['Партнер', 'Продукция', 'Общая сумма']].head())
"""
def print_partner_cards(partners_df):
"""
Выводит в консоль красиво оформленные карточки партнеров.
Функция принимает DataFrame с данными партнеров и отображает их в виде
структурированных карточек с рамкой. Каждая карточка содержит основную
информацию о партнере: тип, наименование, директор, рейтинг, объем продаж,
размер скидки, контактные данные и юридическую информацию.
Args:
partners_df (pandas.DataFrame): DataFrame с данными партнеров, должен содержать колонки:
- 'Тип партнера'
- 'Наименование партнера'
- 'Директор'
- 'Рейтинг'
- 'total_quantity'
- 'Текст_скидки'
- 'Электронная почта'
- 'Телефон'
- 'ИНН'
- 'Юридический адрес'
Returns:
None: Функция только выводит данные в консоль
Example:
>>> partners = get_partners()
>>> print_partner_cards(partners)
Note:
- Если передан пустой DataFrame или None, выводится сообщение об отсутствии данных
- Длинные адреса обрезаются до 60 символов с добавлением многоточия
- Форматирование чисел: разделители тысяч для объема продаж
- Между карточками добавляются пустые строки для лучшей читаемости
"""
def print_sales_cards(sales_df):
"""
Выводит в консоль таблицу с историей продаж в структурированном формате.
Функция принимает DataFrame с данными о продажах и отображает их в виде
таблицы с рамкой. Включает заголовки, детальную информацию по каждой продаже
и итоговую статистику в нижней части.
Args:
sales_df (pandas.DataFrame): DataFrame с данными о продажах, должен содержать колонки:
- 'Дата продажи'
- 'Партнер'
- 'Продукция'
- 'Артикул'
- 'Количество'
- 'Цена за единицу'
- 'Общая сумма'
Returns:
None: Функция только выводит данные в консоль
Example:
>>> sales = get_sales_history(limit=10)
>>> print_sales_cards(sales)
Note:
- Если передан пустой DataFrame или None, выводится сообщение об отсутствии данных
- Дата обрезается до 10 символов (формат ГГГГ-ММ-ДД)
- Числовые значения форматируются с разделителями тысяч и двумя знаками после запятой
- В конце выводится сводная статистика по всем отображенным продажам
- Ширина таблицы фиксирована для обеспечения читаемости
"""
def simple_choice(options):
"""
Предоставляет пользователю интерактивный выбор из списка опций.
Функция отображает пронумерованный список доступных опций и запрашивает
у пользователя ввод номера выбранной опции. Обрабатывает различные
сценарии некорректного ввода и обеспечивает надежный выбор.
Args:
options (list): Список строк с доступными опциями для выбора
Returns:
str: Выбранная опция из переданного списка
Raises:
SystemExit: При прерывании программы пользователем (Ctrl+C)
Example:
>>> menu_options = ["Показать партнеров", "История продаж", "Выход"]
>>> choice = simple_choice(menu_options)
>>> print(f"Выбрано: {choice}")
Note:
- Опции нумеруются начиная с 1
- Функция обрабатывает нечисловой ввод и числа вне диапазона
- Поддерживает обработку прерывания программы (KeyboardInterrupt)
- Цикл продолжается до получения корректного ввода
"""
def check_database():
"""
Функция подключается к базе данных и выводит количество записей
в каждой из основных таблиц для проверки корректности загрузки данных.
Таблицы для проверки:
- PartnerType: типы партнеров
- Partner: информация о партнерах
- ProductType: типы продуктов
- Product: информация о продуктах
- Sale: данные о продажах
"""
def load_data_from_files():
"""
Загружает данные из Excel-файлов в базу данных SQLite.
Функция выполняет пошаговую загрузку данных из четырех Excel-файлов:
- Файл с партнерами
- Файл с типами продукции
- Файл с продуктами
- Файл с продажами
Процесс загрузки включает:
1. Загрузку типов партнеров
2. Загрузку данных партнеров
3. Загрузку типов продукции с коэффициентами
4. Загрузку информации о продуктах
5. Загрузку истории продаж с валидацией связей
Returns:
None: Функция выполняет операции с базой данных и выводит результаты в консоль
Raises:
Exception: При ошибках чтения файлов или операций с базой данных
Example:
>>> load_data_from_files()
📁 Введите имена файлов:
Файл с партнерами: partners.xlsx
Файл с типами продукции: product_types.xlsx
Файл с продуктами: products.xlsx
Файл с продажами: sales.xlsx
Note:
- Использует INSERT OR IGNORE для избежания дубликатов
- Проверяет существование связей перед вставкой продаж
- Выводит прогресс загрузки и информационные сообщения
- В случае ошибки выполняет откат транзакции
- В конце вызывает проверку целостности данных
"""
def display_menu():
"""
Главное меню приложения для управления партнерами и продажами.
Функция предоставляет интерактивный интерфейс для работы с системой:
- Просмотр карточек партнеров с различной сортировкой
- Просмотр истории продаж
- Загрузка данных из файлов
- Выход из приложения
Returns:
None: Функция управляет основным потоком выполнения приложения
Example:
>>> display_menu()
==================================================
ВЫБЕРИТЕ ОПЦИЮ:
==================================================
1. КАРТОЧКИ ПАРТНЕРОВ (сортировка по рейтингу)
2. КАРТОЧКИ ПАРТНЕРОВ (сортировка по скидкам)
3. ИСТОРИЯ РЕАЛИЗАЦИИ
4. ЗАПОЛНЕНИЕ БД из файлов
5. ВЫХОД
Note:
- При выборе загрузки данных существующая БД удаляется и создается заново
- Использует циклическое меню до выбора опции выхода
- Каждая опция сопровождается визуальным разделителем для лучшей читаемости
"""