#include "directories_management_widget.h" // Genre #include "create_genre_request.h" #include "genres_model.h" #include "genres_repository.h" // Hall #include "create_hall_request.h" #include "halls_model.h" #include "halls_repository.h" // Movie #include "create_movie_request.h" #include "movies_model.h" #include "movies_repository.h" // Common #include "error_dialog.h" #include "model_manager.h" #include "repository_manager.h" #include "repository_result.h" #include "schema_metadata.h" #include DirectoriesManagementWidget::DirectoriesManagementWidget(QWidget *parent) : QWidget(parent), selectedGenreId_(-1), selectedHallId_(-1), selectedMovieId_(-1) { setupUi(this); initializeRepositories(); // First of second initializeModels(); // First of second setupTableViews(); // After initialization of models setupGenreFinder(); setupConnections(); } void DirectoriesManagementWidget::initializeRepositories() { RepositoryManager &repositoryManager = RepositoryManager::instance(); SchemaMetadata metadata = SchemaMetadata::defaultSchema(); genresRepository_ = repositoryManager.getRepositoryAs( metadata.repositoryTableName("genres")); hallsRepository_ = repositoryManager.getRepositoryAs( metadata.repositoryTableName("halls")); moviesRepository_ = repositoryManager.getRepositoryAs( metadata.repositoryTableName("movies")); if (!bool(genresRepository_ && hallsRepository_ && moviesRepository_)) { qFatal() << "DirectoriesManagementWidget::initializeRepositories: Failed to " "initialize repositories"; } } void DirectoriesManagementWidget::initializeModels() { ModelManager &modelManager = ModelManager::instance(); SchemaMetadata metadata = SchemaMetadata::defaultSchema(); genresModel_ = modelManager.getModelAs(metadata.modelTableName("genres")); hallsModel_ = modelManager.getModelAs(metadata.modelTableName("halls")); moviesModel_ = modelManager.getModelAs(metadata.modelTableName("movies")); if (!bool(genresModel_ && hallsModel_ && moviesModel_)) { qFatal() << "DirectoriesManagementWidget::initializeModels: Failed to " "initialize models"; } } void DirectoriesManagementWidget::setupGenreFinder() { SchemaMetadata metadata = SchemaMetadata::defaultSchema(); genreFinder->setDefaultRelation("genres"); genreFinder->setLabelText(EntityFinderWidget::tr("Select genre")); genreFinder->setLineEditPlaceholder( EntityFinderWidget::tr("Here will be information about selected genre")); } void DirectoriesManagementWidget::setupTableViews() { tableHalls->setModel(hallsModel_); tableMovies->setModel(moviesModel_); tableGenres->setModel(genresModel_); } void DirectoriesManagementWidget::setupConnections() { connect(btnAddHall, &QPushButton::clicked, this, &DirectoriesManagementWidget::onPushButtonAddHallClicked); connect(btnAddMovie, &QPushButton::clicked, this, &DirectoriesManagementWidget::onPushButtonAddMovieClicked); connect(btnAddGenre, &QPushButton::clicked, this, &DirectoriesManagementWidget::onPushButtonAddGenreClicked); connect(genreFinder, &EntityFinderWidget::fieldRetrieved, this, &DirectoriesManagementWidget::onGenreFieldRetrieved); } void DirectoriesManagementWidget::onPushButtonAddMovieClicked() { if (selectedGenreId_ == -1) { QMessageBox::warning(this, QMessageBox::tr("Error"), QMessageBox::tr("No genre selected")); } QString title = lineEditMovieName->text(); int duration = spinBoxMovieDuration->value(); CreateMovieRequest request; request.setTitle(title); request.setDuration(duration); request.setGenreId(selectedGenreId_); RepositoryResult result = moviesRepository_->createMovie(request); if (!result.success) { qWarning() << "Failed to create movie:" << result.errorMessage; ErrorDialog::displayError(this, result.errorMessage); } } void DirectoriesManagementWidget::onPushButtonAddHallClicked() { QString name = lineEditHallName->text(); int capacity = spinBoxNumberOfSeats->value(); CreateHallRequest request; request.setHallName(name); request.setCapacity(capacity); RepositoryResult result = hallsRepository_->createHall(request); if (!result.success) { qWarning() << "Failed to create hall:" << result.errorMessage; ErrorDialog::displayError(this, result.errorMessage); } } void DirectoriesManagementWidget::onGenreFieldRetrieved( const QSqlField &field) { selectedGenreId_ = field.value().toInt(); } void DirectoriesManagementWidget::onPushButtonAddGenreClicked() { QString name = lineEditGenreName->text(); CreateGenreRequest request; request.setGenreName(name); RepositoryResult result = genresRepository_->createGenre(request); if (!result.success) { qWarning() << "Failed to create genre:" << result.errorMessage; ErrorDialog::displayError(this, result.errorMessage); } }