# HG changeset patch # User Matti Hamalainen # Date 1490875938 -10800 # Node ID 0315a3b9f560db4eb984f2e50b214e304197ffe0 # Parent a5a3baee3043a1ee93894f6ed8d07869ccd4c4a8 Implement person and transaction history deletion. diff -r a5a3baee3043 -r 0315a3b9f560 main.cpp --- a/main.cpp Thu Mar 30 13:50:42 2017 +0300 +++ b/main.cpp Thu Mar 30 15:12:18 2017 +0300 @@ -320,6 +320,77 @@ } +int SyntilistaMainWindow::deletePerson(qint64 id) +{ + QSqlDatabase::database().transaction(); + + QSqlQuery del; + del.prepare("DELETE FROM people WHERE id=?"); + del.addBindValue(id); + del.exec(); + if (!checkAndReportSQLError("delete user", del.lastError())) + { + QSqlDatabase::database().rollback(); + return -1; + } + + del.prepare("DELETE FROM transactions WHERE person=?"); + del.addBindValue(id); + del.exec(); + + if (!checkAndReportSQLError("delete user transactions", del.lastError())) + { + QSqlDatabase::database().rollback(); + return -2; + } + + QSqlDatabase::database().commit(); + return 0; +} + + +void SyntilistaMainWindow::on_button_DeletePerson_clicked() +{ + if (currPerson.id <= 0) + { + statusMsg(tr("Ei valittua henkilöä!")); + return; + } + + PersonInfo info; + if (!getPersonInfo(currPerson.id, info)) + { + statusMsg(tr("Virhe! Ei henkilöä ID:llä #%1").arg(currPerson.id)); + return; + } + + QMessageBox::StandardButton ret = + QMessageBox::question(this, + tr("Varmistus"), + tr("\nHaluatko varmasti poistaa henkilön:\n\n'%1, %2' (ID #%3)?\n\n" + "Tämä poistaa sekä henkilön ja hänen koko tapahtumahistoriansa PYSYVÄSTI!\n"). + arg(info.lastName).arg(info.firstName).arg(info.id), + QMessageBox::Yes | QMessageBox::No); + + if (ret == QMessageBox::Yes) + { + int rv = deletePerson(info.id); + if (rv != 0) + { + appError(tr("SQL-tietokantavirhe"), + tr("Henkilön tietoja poistettaessa tapahtui virhe #%1."). + arg(rv)); + } + else + { + statusMsg(tr("Henkilö '%1 %2' (ID #%3) poistettu."). + arg(info.firstName).arg(info.lastName). + arg(info.id)); + } + } +} + + void SyntilistaMainWindow::on_button_AddPerson_clicked() { EditPerson *person = new EditPerson(this); diff -r a5a3baee3043 -r 0315a3b9f560 main.h --- a/main.h Thu Mar 30 13:50:42 2017 +0300 +++ b/main.h Thu Mar 30 15:12:18 2017 +0300 @@ -109,6 +109,7 @@ int addTransaction(qint64 id, double value, PersonInfo &info); int addTransactionGUI(qint64 id, bool debt, double value); void updatePersonList(); + int deletePerson(qint64 id); PersonSQLModel *model_People; @@ -139,6 +140,8 @@ void updateSortOrder(int index, Qt::SortOrder order); + void on_button_DeletePerson_clicked(); + private: Ui::SyntilistaMainWindow *ui; diff -r a5a3baee3043 -r 0315a3b9f560 mainwindow.ui --- a/mainwindow.ui Thu Mar 30 13:50:42 2017 +0300 +++ b/mainwindow.ui Thu Mar 30 15:12:18 2017 +0300 @@ -60,6 +60,13 @@ + + + Poista henkilö + + + + Qt::Horizontal