Initial commit
This commit is contained in:
@@ -0,0 +1,160 @@
|
||||
#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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user