161 lines
5.0 KiB
C++
161 lines
5.0 KiB
C++
#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 <QMessageBox>
|
|
|
|
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<GenresRepository>(
|
|
metadata.repositoryTableName("genres"));
|
|
|
|
hallsRepository_ = repositoryManager.getRepositoryAs<HallsRepository>(
|
|
metadata.repositoryTableName("halls"));
|
|
|
|
moviesRepository_ = repositoryManager.getRepositoryAs<MoviesRepository>(
|
|
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<GenresModel>(metadata.modelTableName("genres"));
|
|
|
|
hallsModel_ =
|
|
modelManager.getModelAs<HallsModel>(metadata.modelTableName("halls"));
|
|
|
|
moviesModel_ =
|
|
modelManager.getModelAs<MoviesModel>(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);
|
|
}
|
|
}
|