# HG changeset patch # User Matti Hamalainen # Date 1490871042 -10800 # Node ID a5a3baee3043a1ee93894f6ed8d07869ccd4c4a8 # Parent f2404a9987dc9c1e91d06f24935d5d42be6ce67a More cleanups and fixes. diff -r f2404a9987dc -r a5a3baee3043 main.cpp --- a/main.cpp Thu Mar 30 12:32:05 2017 +0300 +++ b/main.cpp Thu Mar 30 13:50:42 2017 +0300 @@ -65,6 +65,49 @@ } +void PersonInfo::dump() +{ + printf("PersonInfo() #%lld '%s %s' (added=%s, updated=%s, balance %1.2f)\n#%s#\n", + id, + firstName.toUtf8().constData(), + lastName.toUtf8().constData(), + dateTimeToStr(added).toUtf8().constData(), + dateTimeToStr(updated).toUtf8().constData(), + balance, + extraInfo.toUtf8().constData()); +} + + +// +// +// +bool getPersonInfo(qint64 id, PersonInfo &info) +{ + QSqlQuery person; + person.prepare( + "SELECT id,first_name,last_name,extra_info,added,updated, " + "(SELECT SUM(value) FROM transactions WHERE transactions.person=people.id) AS balance " + "FROM people WHERE id=?"); + + person.addBindValue(id); + person.exec(); + if (!person.next()) + return false; + + info.id = person.value(0).toInt(); + info.firstName = person.value(1).toString(); + info.lastName = person.value(2).toString(); + info.extraInfo = person.value(3).toString(); + info.added = person.value(4).toDateTime(); + info.updated = person.value(5).toDateTime(); + info.balance = person.value(6).toDouble(); + + person.finish(); + + return true; +} + + int main(int argc, char *argv[]) { QApplication sapp(argc, argv); @@ -218,31 +261,24 @@ void SyntilistaMainWindow::setActivePerson(qint64 id) { - personID = id; + currPerson.id = id; ui->button_EditPerson->setEnabled(id >= 0); if (id >= 0) { - QSqlQuery person; - person.prepare(query_Person +" WHERE id=?"); - person.addBindValue(id); - person.exec(); - checkAndReportSQLError("SELECT in setActivePerson()", person.lastError()); - - if (!person.next()) + if (!getPersonInfo(id, currPerson)) { - statusMsg(tr("ERROR! No person with ID #%1").arg(id)); + statusMsg(tr("Virhe! Ei henkilöä ID:llä #%1").arg(id)); } else { ui->personGB->setEnabled(true); - ui->label_PersonName->setText(person.value(1).toString() +", "+ person.value(2).toString()); + ui->label_PersonName->setText(currPerson.lastName +", "+ currPerson.firstName); - personBalance = person.value(3).toDouble(); - ui->label_BalanceValue->setText(moneyValueToStr(personBalance)); - ui->label_BalanceValue->setStyleSheet(personBalance < 0 ? "color: red;" : "color: green;"); - ui->button_PayFullDebt->setEnabled(personBalance < 0); + ui->label_BalanceValue->setText(moneyValueToStr(currPerson.balance)); + ui->label_BalanceValue->setStyleSheet(currPerson.balance < 0 ? "color: red;" : "color: green;"); + ui->button_PayFullDebt->setEnabled(currPerson.balance < 0); QSqlQuery query; query.prepare("SELECT id,value,added FROM transactions WHERE person=? ORDER BY added DESC LIMIT 5"); @@ -252,9 +288,9 @@ model_Latest->setQuery(query); - model_Latest->setHeaderData(0, Qt::Horizontal, "ID"); - model_Latest->setHeaderData(1, Qt::Horizontal, "Summa"); - model_Latest->setHeaderData(2, Qt::Horizontal, "Aika"); + model_Latest->setHeaderData(0, Qt::Horizontal, tr("ID")); + model_Latest->setHeaderData(1, Qt::Horizontal, tr("Summa")); + model_Latest->setHeaderData(2, Qt::Horizontal, tr("Aika")); ui->tableview_Latest->setModel(model_Latest); ui->tableview_Latest->setColumnHidden(0, true); @@ -293,10 +329,10 @@ void SyntilistaMainWindow::on_button_EditPerson_clicked() { - if (personID >= 0) + if (currPerson.id >= 0) { EditPerson *person = new EditPerson(this); - person->setPerson(personID); + person->setPerson(currPerson.id); } } @@ -310,7 +346,7 @@ setActivePerson(model->data(model->index(row, 0)).toInt()); EditPerson *person = new EditPerson(this); - person->setPerson(personID); + person->setPerson(currPerson.id); } else setActivePerson(-1); @@ -325,8 +361,7 @@ void SyntilistaMainWindow::updatePersonData(qint64 id) { - printf("updatePersonData(%lld)\n", id); - if (id == personID) + if (id == currPerson.id) setActivePerson(id); model_People->updateModel(); @@ -391,11 +426,11 @@ model_People->setQuery(query); - model_People->setHeaderData(0, Qt::Horizontal, "ID"); - model_People->setHeaderData(1, Qt::Horizontal, "Sukunimi"); - model_People->setHeaderData(2, Qt::Horizontal, "Etunimi"); - model_People->setHeaderData(3, Qt::Horizontal, "Tase"); - model_People->setHeaderData(4, Qt::Horizontal, "Muutettu"); + model_People->setHeaderData(0, Qt::Horizontal, tr("ID")); + model_People->setHeaderData(1, Qt::Horizontal, tr("Sukunimi")); + model_People->setHeaderData(2, Qt::Horizontal, tr("Etunimi")); + model_People->setHeaderData(3, Qt::Horizontal, tr("Tase")); + model_People->setHeaderData(4, Qt::Horizontal, tr("Muutettu")); } @@ -411,34 +446,11 @@ void SyntilistaMainWindow::on_button_XXX_clicked() { -// printf("XXX-namiskaa painettu!\n"); + statusMsg(tr("Mystistä XXX-namiskaa painettu!")); } // -// -// -bool SyntilistaMainWindow::getPersonInfo(qint64 id, PersonInfo &info) -{ - QSqlQuery person; - person.prepare("SELECT id,first_name,last_name,extra_info,added,updated FROM people WHERE id=?"); - person.addBindValue(id); - person.exec(); - if (!person.next()) - return false; - - info.id = person.value(0).toInt(); - info.firstName = person.value(1).toString(); - info.lastName = person.value(2).toString(); - info.extraInfo = person.value(3).toString(); - info.added = person.value(4).toDateTime(); - info.updated = person.value(5).toDateTime(); - - person.finish(); - return true; -} - -// // Add one transaction to given person id // int SyntilistaMainWindow::addTransaction(qint64 id, double value, PersonInfo &info) @@ -494,13 +506,13 @@ if (ret == 0) { ui->edit_Amount->clear(); - updatePersonData(id); + updatePersonData(info.id); QString str; if (debt) { str = tr("Lisättiin velkaa %1 EUR henkilölle '%2 %3' (#%4)."). - arg(value, 1, 'f', 2). + arg(moneyValueToStr(value)). arg(info.firstName). arg(info.lastName). arg(info.id); @@ -508,7 +520,7 @@ else { str = tr("Vähennettiin velkaa %1 EUR henkilöltä '%2 %3' (#%4)."). - arg(value, 1, 'f', 2). + arg(moneyValueToStr(value)). arg(info.firstName). arg(info.lastName). arg(info.id); @@ -527,20 +539,20 @@ void SyntilistaMainWindow::on_button_AddDebt_clicked() { - addTransactionGUI(personID, true, moneyStrToValue(ui->edit_Amount->text())); + addTransactionGUI(currPerson.id, true, moneyStrToValue(ui->edit_Amount->text())); } void SyntilistaMainWindow::on_button_PayDebt_clicked() { - addTransactionGUI(personID, false, moneyStrToValue(ui->edit_Amount->text())); + addTransactionGUI(currPerson.id, false, moneyStrToValue(ui->edit_Amount->text())); } void SyntilistaMainWindow::on_button_PayFullDebt_clicked() { - if (personBalance < 0) - addTransactionGUI(personID, false, -personBalance); + if (currPerson.balance < 0) + addTransactionGUI(currPerson.id, false, -currPerson.balance); else statusMsg("Valitulla henkilöllä ei ole velkaa."); } @@ -585,22 +597,16 @@ } -bool EditPerson::validateForm(PersonInfo &info) -{ - info.firstName = cleanupStr(ui->edit_FirstName->text()); - info.lastName = cleanupStr(ui->edit_LastName->text()); - - ui->edit_FirstName->setStyleSheet(info.firstName == "" ? "background-color: red;" : NULL); - ui->edit_LastName->setStyleSheet(info.lastName == "" ? "background-color: red;" : NULL); - - return info.firstName != "" && info.lastName != ""; -} - - bool EditPerson::validateForm() { - PersonInfo info; - return validateForm(info); + selPerson.firstName = cleanupStr(ui->edit_FirstName->text()); + selPerson.lastName = cleanupStr(ui->edit_LastName->text()); + selPerson.extraInfo = ui->textedit_ExtraInfo->document()->toPlainText(); + + ui->edit_FirstName->setStyleSheet(selPerson.firstName == "" ? "background-color: red;" : NULL); + ui->edit_LastName->setStyleSheet(selPerson.lastName == "" ? "background-color: red;" : NULL); + + return selPerson.firstName != "" && selPerson.lastName != ""; } @@ -612,20 +618,23 @@ void EditPerson::on_button_OK_clicked() { - PersonInfo info; - info.id = personID; - info.extraInfo = ui->textedit_ExtraInfo->document()->toPlainText(); + if (!validateForm()) + { + QMessageBox::critical(0, + tr("Virhe!"), + tr("Vaaditut kentät (etunimi, sukunimi) eivät ole täytetty."), + QMessageBox::Ok); - if (!validateForm(info)) return; + } - if (info.id >= 0) + if (selPerson.id >= 0) { QSqlQuery person; person.prepare("SELECT * FROM people WHERE id <> ? AND first_name=? AND last_name=?"); - person.addBindValue(info.id); - person.addBindValue(info.firstName); - person.addBindValue(info.lastName); + person.addBindValue(selPerson.id); + person.addBindValue(selPerson.firstName); + person.addBindValue(selPerson.lastName); person.exec(); checkAndReportSQLError("SELECT check for existing person by same name (UPDATE)", person.lastError()); @@ -636,17 +645,17 @@ return; } - dynamic_cast(parent())->model_People->updatePerson(QModelIndex(), info); + dynamic_cast(parent())->model_People->updatePerson(QModelIndex(), selPerson); statusMsg(tr("Päivitettiin henkilö '%1 %2' (#%3)."). - arg(info.firstName).arg(info.lastName).arg(info.id)); + arg(selPerson.firstName).arg(selPerson.lastName).arg(selPerson.id)); } else { QSqlQuery person; person.prepare("SELECT * FROM people WHERE first_name=? AND last_name=?"); - person.addBindValue(info.firstName); - person.addBindValue(info.lastName); + person.addBindValue(selPerson.firstName); + person.addBindValue(selPerson.lastName); person.exec(); checkAndReportSQLError("SELECT check for existing person by same name (ADD)", person.lastError()); @@ -657,11 +666,11 @@ return; } - dynamic_cast(parent())->model_People->addPerson(info); - dynamic_cast(parent())->updatePersonList(); + dynamic_cast(parent())->model_People->addPerson(selPerson); +// dynamic_cast(parent())->updatePersonList(); statusMsg(tr("Lisättiin uusi henkilö '%1 %2'."). - arg(info.firstName).arg(info.lastName)); + arg(selPerson.firstName).arg(selPerson.lastName)); } close(); @@ -693,37 +702,32 @@ void EditPerson::setPerson(qint64 id) { - personID = id; + selPerson.id = id; if (id >= 0) { - QSqlQuery person; - person.prepare("SELECT * FROM people WHERE id=?"); - person.addBindValue(id); - person.exec(); - checkAndReportSQLError("SELECT in EditPerson::setPerson()", person.lastError()); - - if (!person.next()) + PersonInfo pinfo; + if (!getPersonInfo(id, pinfo)) { - statusMsg(tr("ERROR! No person with ID #%1").arg(id)); + statusMsg(tr("Virhe! Ei henkilöä ID:llä #%1").arg(id)); } else { - ui->edit_FirstName->setText(person.value(1).toString()); - ui->edit_LastName->setText(person.value(2).toString()); - ui->textedit_ExtraInfo->document()->setPlainText(person.value(3).toString()); - + ui->edit_FirstName->setText(pinfo.firstName); + ui->edit_LastName->setText(pinfo.lastName); + ui->textedit_ExtraInfo->document()->setPlainText(pinfo.extraInfo); + QSqlQuery query; query.prepare("SELECT id,value,added FROM transactions WHERE person=? ORDER BY added DESC"); - query.addBindValue(id); + query.addBindValue(pinfo.id); query.exec(); checkAndReportSQLError("SELECT transactions for tableview_Transactions", query.lastError()); model_Transactions->setQuery(query); - model_Transactions->setHeaderData(0, Qt::Horizontal, "ID"); - model_Transactions->setHeaderData(1, Qt::Horizontal, "Summa"); - model_Transactions->setHeaderData(2, Qt::Horizontal, "Aika"); + model_Transactions->setHeaderData(0, Qt::Horizontal, tr("ID")); + model_Transactions->setHeaderData(1, Qt::Horizontal, tr("Summa")); + model_Transactions->setHeaderData(2, Qt::Horizontal, tr("Aika")); ui->tableview_Transactions->setModel(model_Transactions); ui->tableview_Transactions->setColumnHidden(0, true); @@ -777,16 +781,16 @@ void PersonSQLModel::updatePerson(const QModelIndex &item, const PersonInfo &person) { - QSqlQuery query; - query.prepare("UPDATE people SET first_name=?,last_name=?,extra_info=?,updated=? WHERE id=?"); - query.addBindValue(person.firstName); - query.addBindValue(person.lastName); - query.addBindValue(person.extraInfo); - query.addBindValue(QDateTime::currentDateTimeUtc()); - query.addBindValue(person.id); - query.exec(); + QSqlQuery np; + np.prepare("UPDATE people SET first_name=?,last_name=?,extra_info=?,updated=? WHERE id=?"); + np.addBindValue(person.firstName); + np.addBindValue(person.lastName); + np.addBindValue(person.extraInfo); + np.addBindValue(QDateTime::currentDateTimeUtc()); + np.addBindValue(person.id); + np.exec(); - checkAndReportSQLError("PersonSQLModel::updatePerson()", query.lastError()); + checkAndReportSQLError("PersonSQLModel::updatePerson()", np.lastError()); QSqlDatabase::database().commit(); updateModel(); @@ -816,7 +820,6 @@ void PersonSQLModel::updateModel() { - printf("PersonSQLModel::updateModelInfo()\n"); query().exec(); emit dataChanged(index(0, 0), index(rowCount(), columnCount())); } @@ -858,7 +861,6 @@ void TransactionSQLModel::updateModel() { - printf("TransactionSQLModel::updateModelInfo()\n"); query().exec(); emit dataChanged(QModelIndex(), QModelIndex()); } diff -r f2404a9987dc -r a5a3baee3043 main.h --- a/main.h Thu Mar 30 12:32:05 2017 +0300 +++ b/main.h Thu Mar 30 13:50:42 2017 +0300 @@ -30,14 +30,22 @@ public: explicit PersonInfo() { + id = -1; + firstName = ""; + lastName = ""; + extraInfo = ""; + balance = 0; } ~PersonInfo() { } + void dump(); + qint64 id; QString firstName, lastName, extraInfo; + double balance; QDateTime added, updated; }; @@ -98,7 +106,6 @@ void readSettings(); void saveSettings(); void setActivePerson(qint64 id); - bool getPersonInfo(qint64 id, PersonInfo &info); int addTransaction(qint64 id, double value, PersonInfo &info); int addTransactionGUI(qint64 id, bool debt, double value); void updatePersonList(); @@ -136,8 +143,7 @@ Ui::SyntilistaMainWindow *ui; TransactionSQLModel *model_Latest; - qint64 personID; - double personBalance; + PersonInfo currPerson; int peopleSortIndex; Qt::SortOrder peopleSortOrder; @@ -156,7 +162,6 @@ void statusMsg(const QString &msg); void clearForm(); - bool validateForm(PersonInfo &info); bool validateForm(); void setPerson(qint64 id); @@ -172,7 +177,7 @@ private: Ui::EditPerson *ui; - qint64 personID; + PersonInfo selPerson; TransactionSQLModel *model_Transactions; };