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