180 lines
5.6 KiB
C++
180 lines
5.6 KiB
C++
|
|
#include "entity_deleter_widget.h"
|
||
|
|
|
||
|
|
#include "error_dialog.h"
|
||
|
|
#include "genres_repository_interface.h"
|
||
|
|
#include "halls_repository_interface.h"
|
||
|
|
#include "movies_repository_interface.h"
|
||
|
|
#include "refunds_repository_interface.h"
|
||
|
|
#include "repository_result.h"
|
||
|
|
#include "sessions_repository_interface.h"
|
||
|
|
#include "tickets_repository_interface.h"
|
||
|
|
|
||
|
|
#include <QMessageBox>
|
||
|
|
#include <QSqlTableModel>
|
||
|
|
|
||
|
|
EntityDeleterWidget::EntityDeleterWidget(QWidget *parent) : QWidget(parent) {
|
||
|
|
setupUi(this);
|
||
|
|
|
||
|
|
setupComboBoxCurrentTable();
|
||
|
|
setupEntityFinder();
|
||
|
|
setupConnections();
|
||
|
|
}
|
||
|
|
|
||
|
|
void EntityDeleterWidget::setupComboBoxCurrentTable() {
|
||
|
|
SchemaMetadata metadata = SchemaMetadata::defaultSchema();
|
||
|
|
|
||
|
|
QStringList databaseTableNames = {"genres", "halls", "movies",
|
||
|
|
"refunds", "sessions", "tickets"};
|
||
|
|
|
||
|
|
for (const QString currentDTN : databaseTableNames) {
|
||
|
|
comboBoxCurrentTable->addItem(metadata.translatedTableName(currentDTN),
|
||
|
|
currentDTN);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void EntityDeleterWidget::setupConnections() {
|
||
|
|
connect(comboBoxCurrentTable, &QComboBox::currentIndexChanged, this,
|
||
|
|
&EntityDeleterWidget::onComboBoxCurrentTableCurrentIndexChanged);
|
||
|
|
|
||
|
|
connect(entityFinder, &EntityFinderWidget::fieldRetrieved, this,
|
||
|
|
&EntityDeleterWidget::onFieldRetrieved);
|
||
|
|
|
||
|
|
connect(entityFinder, &EntityFinderWidget::recordRetrieved, this,
|
||
|
|
&EntityDeleterWidget::onRecordRetrieved);
|
||
|
|
|
||
|
|
connect(pushButtonDeleteEntity, &QPushButton::clicked, this,
|
||
|
|
&EntityDeleterWidget::onPushButtonDeleteEntityClicked);
|
||
|
|
}
|
||
|
|
|
||
|
|
void EntityDeleterWidget::setupEntityFinder() {
|
||
|
|
entityFinder->setLabelText(tr("Select record of current table to delete"));
|
||
|
|
refreshEntityFinder();
|
||
|
|
}
|
||
|
|
|
||
|
|
void EntityDeleterWidget::refreshEntityFinder() {
|
||
|
|
const QString &databaseTableName =
|
||
|
|
comboBoxCurrentTable->currentData().toString();
|
||
|
|
|
||
|
|
entityFinder->setDefaultRelation(databaseTableName);
|
||
|
|
}
|
||
|
|
|
||
|
|
void EntityDeleterWidget::onComboBoxCurrentTableCurrentIndexChanged(int index) {
|
||
|
|
refreshEntityFinder();
|
||
|
|
|
||
|
|
const QString &databaseTableName =
|
||
|
|
comboBoxCurrentTable->currentData().toString();
|
||
|
|
|
||
|
|
qInfo() << "Current table was changed:" << "CurrentComboBoxIndex:" << index
|
||
|
|
<< "databaseTableName:" << databaseTableName;
|
||
|
|
}
|
||
|
|
|
||
|
|
void EntityDeleterWidget::onFieldRetrieved(const QSqlField &field) {
|
||
|
|
retrievedField_ = field;
|
||
|
|
}
|
||
|
|
|
||
|
|
void EntityDeleterWidget::onRecordRetrieved(const QSqlRecord &record) {
|
||
|
|
// NOTE: It is possible to reduce the behavior of each of the tables if the
|
||
|
|
// removal is in different ways with other data
|
||
|
|
selectedRecord_ = record;
|
||
|
|
}
|
||
|
|
|
||
|
|
template <>
|
||
|
|
RepositoryResult
|
||
|
|
EntityDeleterWidget::deleteEntityById<GenresRepositoryInterface>() {
|
||
|
|
return currentRepository<GenresRepositoryInterface>()->deleteGenreById(
|
||
|
|
retrievedField_.value().toInt());
|
||
|
|
}
|
||
|
|
|
||
|
|
template <>
|
||
|
|
RepositoryResult
|
||
|
|
EntityDeleterWidget::deleteEntityById<HallsRepositoryInterface>() {
|
||
|
|
return currentRepository<HallsRepositoryInterface>()->deleteHallById(
|
||
|
|
retrievedField_.value().toInt());
|
||
|
|
}
|
||
|
|
|
||
|
|
template <>
|
||
|
|
RepositoryResult
|
||
|
|
EntityDeleterWidget::deleteEntityById<MoviesRepositoryInterface>() {
|
||
|
|
return currentRepository<MoviesRepositoryInterface>()->deleteMovieById(
|
||
|
|
retrievedField_.value().toInt());
|
||
|
|
}
|
||
|
|
|
||
|
|
template <>
|
||
|
|
RepositoryResult
|
||
|
|
EntityDeleterWidget::deleteEntityById<RefundsRepositoryInterface>() {
|
||
|
|
return currentRepository<RefundsRepositoryInterface>()->deleteRefundById(
|
||
|
|
retrievedField_.value().toInt());
|
||
|
|
}
|
||
|
|
|
||
|
|
template <>
|
||
|
|
RepositoryResult
|
||
|
|
EntityDeleterWidget::deleteEntityById<SessionsRepositoryInterface>() {
|
||
|
|
return currentRepository<SessionsRepositoryInterface>()->deleteSessionById(
|
||
|
|
retrievedField_.value().toInt());
|
||
|
|
}
|
||
|
|
|
||
|
|
template <>
|
||
|
|
RepositoryResult
|
||
|
|
EntityDeleterWidget::deleteEntityById<TicketsRepositoryInterface>() {
|
||
|
|
return currentRepository<TicketsRepositoryInterface>()->deleteTicketById(
|
||
|
|
retrievedField_.value().toInt());
|
||
|
|
}
|
||
|
|
|
||
|
|
void EntityDeleterWidget::onPushButtonDeleteEntityClicked() {
|
||
|
|
const QString &databaseTableName =
|
||
|
|
comboBoxCurrentTable->currentData().toString();
|
||
|
|
|
||
|
|
RepositoryResult result;
|
||
|
|
|
||
|
|
if (databaseTableName == "genres") {
|
||
|
|
|
||
|
|
result = deleteEntityById<GenresRepositoryInterface>();
|
||
|
|
showMessageDialog(result, tr("Genre deleted successfully"));
|
||
|
|
|
||
|
|
} else if (databaseTableName == "halls") {
|
||
|
|
|
||
|
|
result = deleteEntityById<HallsRepositoryInterface>();
|
||
|
|
showMessageDialog(result, tr("Hall deleted successfully"));
|
||
|
|
|
||
|
|
} else if (databaseTableName == "movies") {
|
||
|
|
|
||
|
|
result = deleteEntityById<MoviesRepositoryInterface>();
|
||
|
|
showMessageDialog(result, tr("Movie deleted successfully"));
|
||
|
|
|
||
|
|
} else if (databaseTableName == "refunds") {
|
||
|
|
|
||
|
|
result = deleteEntityById<RefundsRepositoryInterface>();
|
||
|
|
showMessageDialog(result, tr("Refund deleted successfully"));
|
||
|
|
|
||
|
|
} else if (databaseTableName == "sessions") {
|
||
|
|
|
||
|
|
result = deleteEntityById<SessionsRepositoryInterface>();
|
||
|
|
showMessageDialog(result, tr("Session deleted successfully"));
|
||
|
|
|
||
|
|
} else if (databaseTableName == "tickets") {
|
||
|
|
|
||
|
|
result = deleteEntityById<TicketsRepositoryInterface>();
|
||
|
|
showMessageDialog(result, tr("Ticket deleted successfully"));
|
||
|
|
|
||
|
|
} else {
|
||
|
|
qCritical() << "EntityDeleterWidget::onPressPushButtonDeleteEntity: "
|
||
|
|
"Unknown database table name:"
|
||
|
|
<< databaseTableName;
|
||
|
|
}
|
||
|
|
|
||
|
|
// NOTE: Application connector will reset entity finder
|
||
|
|
|
||
|
|
// if (result.success) {
|
||
|
|
// entityFinder->resetToDefault();
|
||
|
|
// }
|
||
|
|
}
|
||
|
|
|
||
|
|
void EntityDeleterWidget::showMessageDialog(const RepositoryResult &result,
|
||
|
|
const QString &successMessage) {
|
||
|
|
if (!result.success) {
|
||
|
|
ErrorDialog::displayError(this, result.errorMessage);
|
||
|
|
} else {
|
||
|
|
QMessageBox::information(this, QMessageBox::tr("Success"), successMessage);
|
||
|
|
}
|
||
|
|
}
|