- tweak: code management
This commit is contained in:
160
src/userinterfaces/widgets/routeswidget.cpp
Normal file
160
src/userinterfaces/widgets/routeswidget.cpp
Normal file
@@ -0,0 +1,160 @@
|
||||
#include "routeswidget.h"
|
||||
#include "../../services/database.h"
|
||||
#include <QTableWidget>
|
||||
#include <QHeaderView>
|
||||
#include <QMessageBox>
|
||||
#include <QInputDialog>
|
||||
|
||||
RoutesWidget::RoutesWidget(QWidget* parent) : QWidget(parent) {
|
||||
QVBoxLayout* mainLayout = new QVBoxLayout(this);
|
||||
|
||||
QLabel* title = new QLabel("Управление рейсами", this);
|
||||
title->setStyleSheet("font-size: 20px; font-weight: bold;");
|
||||
mainLayout->addWidget(title);
|
||||
|
||||
m_table = new QTableWidget(this);
|
||||
m_table->setColumnCount(6);
|
||||
m_table->setHorizontalHeaderLabels({"ID", "Маршрут", "Время отправления", "Цена", "Всего мест", "Свободно"});
|
||||
m_table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
|
||||
m_table->setSelectionBehavior(QAbstractItemView::SelectRows);
|
||||
m_table->setSelectionMode(QAbstractItemView::SingleSelection);
|
||||
m_table->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
||||
mainLayout->addWidget(m_table);
|
||||
|
||||
QHBoxLayout* btnLayout = new QHBoxLayout();
|
||||
m_addBtn = new QPushButton("Добавить", this);
|
||||
m_editBtn = new QPushButton("Редактировать", this);
|
||||
m_deleteBtn = new QPushButton("Удалить", this);
|
||||
btnLayout->addWidget(m_addBtn);
|
||||
btnLayout->addWidget(m_editBtn);
|
||||
btnLayout->addWidget(m_deleteBtn);
|
||||
btnLayout->addStretch();
|
||||
mainLayout->addLayout(btnLayout);
|
||||
|
||||
connect(m_addBtn, &QPushButton::clicked, this, &RoutesWidget::onAddClicked);
|
||||
connect(m_editBtn, &QPushButton::clicked, this, &RoutesWidget::onEditClicked);
|
||||
connect(m_deleteBtn, &QPushButton::clicked, this, &RoutesWidget::onDeleteClicked);
|
||||
|
||||
loadRoutes();
|
||||
}
|
||||
|
||||
void RoutesWidget::loadRoutes() {
|
||||
QVector<Route> routes = Database::instance().getAllRoutes();
|
||||
m_table->setRowCount(routes.size());
|
||||
|
||||
for (int i = 0; i < routes.size(); ++i) {
|
||||
const Route& route = routes[i];
|
||||
m_table->setItem(i, 0, new QTableWidgetItem(QString::number(route.id)));
|
||||
m_table->setItem(i, 1, new QTableWidgetItem(route.routeName));
|
||||
m_table->setItem(i, 2, new QTableWidgetItem(route.departureTime));
|
||||
m_table->setItem(i, 3, new QTableWidgetItem(QString::number(route.price, 'f', 2)));
|
||||
m_table->setItem(i, 4, new QTableWidgetItem(QString::number(route.totalSeats)));
|
||||
m_table->setItem(i, 5, new QTableWidgetItem(QString::number(route.availableSeats)));
|
||||
}
|
||||
}
|
||||
|
||||
void RoutesWidget::onAddClicked() {
|
||||
RouteDialog dialog;
|
||||
if (dialog.exec() == QDialog::Accepted) {
|
||||
if (Database::instance().addRoute(
|
||||
dialog.getRouteName(),
|
||||
dialog.getDepartureTime(),
|
||||
dialog.getPrice(),
|
||||
dialog.getTotalSeats())) {
|
||||
loadRoutes();
|
||||
QMessageBox::information(this, "Успех", "Рейс добавлен!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void RoutesWidget::onEditClicked() {
|
||||
int row = m_table->currentRow();
|
||||
if (row < 0) {
|
||||
QMessageBox::warning(this, "Ошибка", "Выберите рейс для редактирования!");
|
||||
return;
|
||||
}
|
||||
|
||||
int id = m_table->item(row, 0)->text().toInt();
|
||||
Route route = Database::instance().getRoute(id);
|
||||
|
||||
RouteDialog dialog(&route, this);
|
||||
if (dialog.exec() == QDialog::Accepted) {
|
||||
route.routeName = dialog.getRouteName();
|
||||
route.departureTime = dialog.getDepartureTime();
|
||||
route.price = dialog.getPrice();
|
||||
|
||||
if (route.totalSeats != dialog.getTotalSeats()) {
|
||||
int diff = dialog.getTotalSeats() - route.totalSeats;
|
||||
route.totalSeats = dialog.getTotalSeats();
|
||||
route.availableSeats += diff;
|
||||
if (route.availableSeats < 0) route.availableSeats = 0;
|
||||
}
|
||||
|
||||
if (Database::instance().updateRoute(route)) {
|
||||
loadRoutes();
|
||||
QMessageBox::information(this, "Успех", "Рейс обновлен!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void RoutesWidget::onDeleteClicked() {
|
||||
int row = m_table->currentRow();
|
||||
if (row < 0) {
|
||||
QMessageBox::warning(this, "Ошибка", "Выберите рейс для удаления!");
|
||||
return;
|
||||
}
|
||||
|
||||
int id = m_table->item(row, 0)->text().toInt();
|
||||
|
||||
QMessageBox::StandardButton reply = QMessageBox::question(
|
||||
this, "Подтверждение", "Удалить выбранный рейс?",
|
||||
QMessageBox::Yes | QMessageBox::No);
|
||||
|
||||
if (reply == QMessageBox::Yes) {
|
||||
if (Database::instance().deleteRoute(id)) {
|
||||
loadRoutes();
|
||||
QMessageBox::information(this, "Успех", "Рейс удален!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
RouteDialog::RouteDialog(Route* route, QWidget* parent)
|
||||
: QDialog(parent)
|
||||
{
|
||||
setWindowTitle(route ? "Редактирование рейса" : "Добавление рейса");
|
||||
setFixedSize(400, 250);
|
||||
|
||||
QFormLayout* form = new QFormLayout(this);
|
||||
|
||||
m_nameEdit = new QLineEdit(this);
|
||||
m_dateTimeEdit = new QDateTimeEdit(this);
|
||||
m_dateTimeEdit->setCalendarPopup(true);
|
||||
m_dateTimeEdit->setDateTime(QDateTime::currentDateTime().addDays(1));
|
||||
m_priceEdit = new QLineEdit(this);
|
||||
m_priceEdit->setPlaceholderText("0.00");
|
||||
m_seatsEdit = new QLineEdit(this);
|
||||
m_seatsEdit->setPlaceholderText("100");
|
||||
|
||||
if (route) {
|
||||
m_nameEdit->setText(route->routeName);
|
||||
m_dateTimeEdit->setDateTime(QDateTime::fromString(route->departureTime, "yyyy-MM-dd HH:mm:ss"));
|
||||
m_priceEdit->setText(QString::number(route->price, 'f', 2));
|
||||
m_seatsEdit->setText(QString::number(route->totalSeats));
|
||||
}
|
||||
|
||||
form->addRow("Маршрут:", m_nameEdit);
|
||||
form->addRow("Время отправления:", m_dateTimeEdit);
|
||||
form->addRow("Цена билета:", m_priceEdit);
|
||||
form->addRow("Всего мест:", m_seatsEdit);
|
||||
|
||||
QHBoxLayout* btnLayout = new QHBoxLayout();
|
||||
QPushButton* okBtn = new QPushButton("ОК", this);
|
||||
QPushButton* cancelBtn = new QPushButton("Отмена", this);
|
||||
btnLayout->addStretch();
|
||||
btnLayout->addWidget(okBtn);
|
||||
btnLayout->addWidget(cancelBtn);
|
||||
form->addRow(btnLayout);
|
||||
|
||||
connect(okBtn, &QPushButton::clicked, this, &QDialog::accept);
|
||||
connect(cancelBtn, &QPushButton::clicked, this, &QDialog::reject);
|
||||
}
|
||||
Reference in New Issue
Block a user