Files
cinema-ticket-management-sy…/ui/widgets/session_management_widget.cpp
T

104 lines
3.4 KiB
C++
Raw Normal View History

2026-07-12 14:34:52 +04:00
#include "session_management_widget.h"
#include "create_session_request.h"
#include "error_dialog.h"
#include "model_manager.h"
#include "repository_manager.h"
#include "repository_result.h"
#include "schema_metadata.h"
#include "sessions_model.h"
#include "sessions_repository.h"
#include <qnamespace.h>
SessionManagementWidget::SessionManagementWidget(QWidget *parent)
: QWidget(parent) {
setupUi(this);
initializeRepositories(); // First of second
initializeModels(); // First of second
setupTableView(); // After initialization of repositories
setupHallFinder();
setupMovieFinder();
setupConnections();
}
void SessionManagementWidget::initializeRepositories() {
RepositoryManager &repositoryManager = RepositoryManager::instance();
SchemaMetadata metadata = SchemaMetadata::defaultSchema();
sessionsRepository_ = repositoryManager.getRepositoryAs<SessionsRepository>(
metadata.repositoryTableName("sessions"));
if (!sessionsRepository_) {
qFatal() << "SessionManagementWidget::initializeRepositories: Failed to "
"initialize repositories";
}
}
void SessionManagementWidget::initializeModels() {
ModelManager &modelManager = ModelManager::instance();
SchemaMetadata metadata = SchemaMetadata::defaultSchema();
sessionsModel_ = modelManager.getModelAs<SessionsModel>(
metadata.modelTableName("sessions"));
if (!bool(sessionsModel_)) {
qFatal() << "SessionManagementWidget::initializeModels: Failed to "
"initialize models";
}
}
void SessionManagementWidget::setupTableView() {
tableSessions->setModel(sessionsModel_);
}
void SessionManagementWidget::setupConnections() {
connect(btnAddSession, &QPushButton::clicked, this,
&SessionManagementWidget::onPushButtonAddSessionClicked);
connect(hallFinder, &EntityFinderWidget::fieldRetrieved, this,
&SessionManagementWidget::onHallFieldRetrieved);
connect(movieFinder, &EntityFinderWidget::fieldRetrieved, this,
&SessionManagementWidget::onMovieFieldRetrieved);
}
void SessionManagementWidget::setupHallFinder() {
hallFinder->setDefaultRelation("halls");
hallFinder->setLabelText(EntityFinderWidget::tr("Select hall"));
hallFinder->setLineEditPlaceholder(
EntityFinderWidget::tr("Here will be information about selected hall"));
}
void SessionManagementWidget::setupMovieFinder() {
movieFinder->setDefaultRelation("movies");
movieFinder->setLabelText(EntityFinderWidget::tr("Select movie"));
movieFinder->setLineEditPlaceholder(
EntityFinderWidget::tr("Here will be information about selected movie"));
}
void SessionManagementWidget::onPushButtonAddSessionClicked() {
QDateTime beginAt = dateTimeEditBeginAt->dateTime();
double ticketPrice = spinBoxTicketPrice->value();
CreateSessionRequest request;
request.setBeginAt(beginAt);
request.setHallId(selectedHallId_);
request.setMovieId(selectedMovieId_);
request.setTicketPrice(ticketPrice);
RepositoryResult result = sessionsRepository_->createSession(request);
if (!result.success) {
qWarning() << "Failed to create session:" << result.errorMessage;
ErrorDialog::displayError(this, result.errorMessage);
}
};
void SessionManagementWidget::onHallFieldRetrieved(const QSqlField &field) {
selectedHallId_ = field.value().toInt();
}
void SessionManagementWidget::onMovieFieldRetrieved(const QSqlField &field) {
selectedMovieId_ = field.value().toInt();
}