#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 #include 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() { return currentRepository()->deleteGenreById( retrievedField_.value().toInt()); } template <> RepositoryResult EntityDeleterWidget::deleteEntityById() { return currentRepository()->deleteHallById( retrievedField_.value().toInt()); } template <> RepositoryResult EntityDeleterWidget::deleteEntityById() { return currentRepository()->deleteMovieById( retrievedField_.value().toInt()); } template <> RepositoryResult EntityDeleterWidget::deleteEntityById() { return currentRepository()->deleteRefundById( retrievedField_.value().toInt()); } template <> RepositoryResult EntityDeleterWidget::deleteEntityById() { return currentRepository()->deleteSessionById( retrievedField_.value().toInt()); } template <> RepositoryResult EntityDeleterWidget::deleteEntityById() { return currentRepository()->deleteTicketById( retrievedField_.value().toInt()); } void EntityDeleterWidget::onPushButtonDeleteEntityClicked() { const QString &databaseTableName = comboBoxCurrentTable->currentData().toString(); RepositoryResult result; if (databaseTableName == "genres") { result = deleteEntityById(); showMessageDialog(result, tr("Genre deleted successfully")); } else if (databaseTableName == "halls") { result = deleteEntityById(); showMessageDialog(result, tr("Hall deleted successfully")); } else if (databaseTableName == "movies") { result = deleteEntityById(); showMessageDialog(result, tr("Movie deleted successfully")); } else if (databaseTableName == "refunds") { result = deleteEntityById(); showMessageDialog(result, tr("Refund deleted successfully")); } else if (databaseTableName == "sessions") { result = deleteEntityById(); showMessageDialog(result, tr("Session deleted successfully")); } else if (databaseTableName == "tickets") { result = deleteEntityById(); 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); } }