# gui/sales_history.py """ Окно истории продаж партнера Соответствует модулю 4 ТЗ """ from PyQt6.QtWidgets import (QDialog, QVBoxLayout, QHBoxLayout, QLabel, QTableWidget, QTableWidgetItem, QPushButton, QHeaderView, QMessageBox) from PyQt6.QtCore import Qt import requests class SalesHistoryWindow(QDialog): def __init__(self, partner_data, parent=None): super().__init__(parent) self.partner_data = partner_data self.setup_ui() self.load_sales_history() def setup_ui(self): self.setWindowTitle(f"История продаж - {self.partner_data['company_name']}") self.setModal(True) self.resize(800, 400) layout = QVBoxLayout() # Заголовок title = QLabel(f"История реализации продукции\n{self.partner_data['company_name']}") title.setAlignment(Qt.AlignmentFlag.AlignCenter) title.setStyleSheet("font-size: 16px; font-weight: bold; margin: 10px;") layout.addWidget(title) # Таблица продаж self.sales_table = QTableWidget() self.sales_table.setColumnCount(4) self.sales_table.setHorizontalHeaderLabels([ "ID", "Наименование продукции", "Количество", "Дата продажи" ]) self.sales_table.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.Stretch) layout.addWidget(self.sales_table) # Статистика self.stats_label = QLabel() self.stats_label.setStyleSheet("font-weight: bold; margin: 10px;") layout.addWidget(self.stats_label) # Кнопки buttons_layout = QHBoxLayout() self.close_button = QPushButton("Закрыть") self.close_button.clicked.connect(self.accept) buttons_layout.addStretch() buttons_layout.addWidget(self.close_button) layout.addLayout(buttons_layout) self.setLayout(layout) def load_sales_history(self): """Загрузка истории продаж партнера""" try: response = requests.get( f"http://localhost:8000/api/v1/sales/partner/{self.partner_data['partner_id']}" ) if response.status_code == 200: sales_data = response.json() self.display_sales_data(sales_data) else: QMessageBox.warning(self, "Ошибка", "Не удалось загрузить историю продаж") except Exception as e: QMessageBox.critical(self, "Ошибка", f"Ошибка подключения: {str(e)}") def display_sales_data(self, sales_data): """Отображение данных о продажах в таблице""" self.sales_table.setRowCount(len(sales_data)) total_quantity = 0 for row, sale in enumerate(sales_data): self.sales_table.setItem(row, 0, QTableWidgetItem(str(sale['sale_id']))) self.sales_table.setItem(row, 1, QTableWidgetItem(sale['product_name'])) self.sales_table.setItem(row, 2, QTableWidgetItem(str(sale['quantity']))) self.sales_table.setItem(row, 3, QTableWidgetItem(sale['sale_date'])) total_quantity += float(sale['quantity']) # Обновление статистики self.stats_label.setText( f"Общее количество проданной продукции: {total_quantity}\n" f"Всего продаж: {len(sales_data)}" )