#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 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( 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( 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(); }