After Graduate Update

This commit is contained in:
Daniel 2025-11-26 19:31:33 +03:00
parent b92a91ab37
commit c6917dd85e
69 changed files with 7540 additions and 0 deletions

View file

@ -0,0 +1,108 @@
from PyQt6.QtWidgets import (
QDialog,
QVBoxLayout,
QFormLayout,
QLineEdit,
QPushButton,
QComboBox,
QSpinBox,
QMessageBox,
)
from PyQt6.QtCore import Qt
from res.colors import ACCENT_COLOR
from dto.partners_dto import PartnerUpdateDto, PartnersInfo
class EditPartnerDialog(QDialog):
def __init__(self, partner_data: PartnersInfo, parent=None):
super().__init__(parent)
self.partner_data = partner_data
self.setup_ui()
self.load_partner_types()
self.fill_form()
self.result = None
def setup_ui(self):
self.setWindowTitle("Редактирование партнера")
self.setFixedSize(500, 400)
layout = QVBoxLayout()
form_layout = QFormLayout()
# Создаем поля формы
self.partner_type = QComboBox()
self.partner_name = QLineEdit()
self.first_name = QLineEdit()
self.last_name = QLineEdit()
self.middle_name = QLineEdit()
self.email = QLineEdit()
self.phone = QLineEdit()
self.address = QLineEdit()
self.inn = QLineEdit()
self.rating = QSpinBox()
self.rating.setRange(0, 10)
# Добавляем поля в форму
form_layout.addRow("Тип партнера:", self.partner_type)
form_layout.addRow("Название:", self.partner_name)
form_layout.addRow("Имя директора:", self.first_name)
form_layout.addRow("Фамилия директора:", self.last_name)
form_layout.addRow("Отчество директора:", self.middle_name)
form_layout.addRow("Email:", self.email)
form_layout.addRow("Телефон:", self.phone)
form_layout.addRow("Адрес:", self.address)
form_layout.addRow("ИНН:", self.inn)
form_layout.addRow("Рейтинг:", self.rating)
# Кнопки
self.save_button = QPushButton("Сохранить")
self.cancel_button = QPushButton("Отмена")
self.save_button.clicked.connect(self.save_changes)
self.cancel_button.clicked.connect(self.reject)
layout.addLayout(form_layout)
layout.addWidget(self.save_button)
layout.addWidget(self.cancel_button)
self.setLayout(layout)
# Стили
self.setStyleSheet(
f"""
QPushButton {{
background-color: {ACCENT_COLOR};
padding: 8px;
border-radius: 4px;
}}
"""
)
def load_partner_types(self):
types = ['ООО', "ЗАО"]
for i, val in enumerate(types):
self.partner_type.addItem(val, i + 1)
def fill_form(self):
pass
def save_changes(self):
try:
partner_data = PartnerUpdateDto(
id=self.partner_data.id,
partner_type_id=self.partner_type.currentData(),
partner_name=self.partner_name.text(),
first_name=self.first_name.text(),
last_name=self.last_name.text(),
middle_name=self.middle_name.text(),
email=self.email.text(),
phone=self.phone.text(),
address=self.address.text(),
inn=self.inn.text(),
rating=self.rating.value(),
)
db.update_partner(partner_data)
self.accept()
except Exception as e:
QMessageBox.critical(
self, "Ошибка", f"Не удалось сохранить изменения: {str(e)}"
)

View file

@ -0,0 +1,94 @@
from dataclasses import dataclass
from PyQt6.QtWidgets import QWidget, QLabel, QVBoxLayout, QHBoxLayout, QFrame
from PyQt6.QtCore import Qt, pyqtSignal
from res.colors import ACCENT_COLOR, SECONDARY_COLOR
from res.fonts import MAIN_FONT
from dto.partners_dto import PartnersInfo
class PartnerCard(QFrame):
doubleClicked = pyqtSignal(PartnersInfo)
def __init__(self, info: PartnersInfo):
super().__init__()
self.info = info
self.init_ui()
self.set_styles()
def mouseDoubleClickEvent(self, a0):
self.doubleClicked.emit(self.info)
return super().mouseDoubleClickEvent(a0)
def init_ui(self):
main_layout = QVBoxLayout()
self.setLayout(main_layout)
# Верхняя строка: Тип | Наименование и скидка
header_layout = QHBoxLayout()
header_text = QLabel(f"{self.info.type_name} | {self.info.partner_name}")
header_text.setObjectName("partnerHeader")
discount_text = QLabel(f"{self.info.discount}%")
discount_text.setObjectName("partnerDiscount")
header_layout.addWidget(header_text)
header_layout.addWidget(discount_text, alignment=Qt.AlignmentFlag.AlignRight)
# Информация о директоре
director_text = QLabel(f"Директор")
director_text.setObjectName("fieldLabel")
director_name = QLabel(
f"{self.info.last_name_director} {self.info.first_name_director} {self.info.middle_name_director}"
)
# Контактная информация
phone_text = QLabel(f"+{self.info.phone_partner}")
# Рейтинг
rating_layout = QHBoxLayout()
rating_label = QLabel("Рейтинг:")
rating_label.setObjectName("fieldLabel")
rating_value = QLabel(str(self.info.rating))
rating_layout.addWidget(rating_label)
rating_layout.addWidget(rating_value)
rating_layout.addStretch()
# Добавляем все элементы в главный layout
main_layout.addLayout(header_layout)
main_layout.addWidget(director_text)
main_layout.addWidget(director_name)
main_layout.addWidget(phone_text)
main_layout.addLayout(rating_layout)
def set_styles(self):
self.setStyleSheet(
"""
PartnerCard {
border: 1px solid #ccc;
border-radius: 4px;
padding: 10px;
margin: 5px;
background-color: white;
}
QLabel {
font-family: %s;
}
#partnerHeader {
font-size: 18px;
font-weight: bold;
color: %s;
}
#partnerDiscount {
font-size: 18px;
font-weight: bold;
color: %s;
}
#fieldLabel {
color: gray;
font-size: 14px;
}
"""
% (MAIN_FONT, ACCENT_COLOR, SECONDARY_COLOR)
)