91 lines
3.8 KiB
Python
91 lines
3.8 KiB
Python
# 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)}"
|
||
)
|