changeset 5:a5a3baee3043

More cleanups and fixes.
author Matti Hamalainen <ccr@tnsp.org>
date Thu, 30 Mar 2017 13:50:42 +0300
parents f2404a9987dc
children 0315a3b9f560
files main.cpp main.h
diffstat 2 files changed, 127 insertions(+), 120 deletions(-) [+]
line wrap: on
line diff
--- 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<SyntilistaMainWindow *>(parent())->model_People->updatePerson(QModelIndex(), info);
+        dynamic_cast<SyntilistaMainWindow *>(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<SyntilistaMainWindow *>(parent())->model_People->addPerson(info);
-        dynamic_cast<SyntilistaMainWindow *>(parent())->updatePersonList();
+        dynamic_cast<SyntilistaMainWindow *>(parent())->model_People->addPerson(selPerson);
+//        dynamic_cast<SyntilistaMainWindow *>(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());
 }
--- 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;
 };