master-floor/ressult/gui/sales_history.py
2025-11-26 19:31:33 +03:00

91 lines
3.8 KiB
Python
Raw 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.

# 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)}"
)