104 lines
3.4 KiB
C++
104 lines
3.4 KiB
C++
|
|
#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();
|
||
|
|
}
|