Mercurial > hg > syntilista
view src/editperson.cpp @ 246:43a5e09bb832
Split some utility functions to util.{h,cpp}
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 08 May 2018 13:14:29 +0300 |
parents | 54ab3f3e28c0 |
children | 55581d90c55d |
line wrap: on
line source
// // Syntilista - debt list/management database program // Programmed and designed by Matti Hämäläinen <ccr@tnsp.org> // (C) Copyright 2017-2018 Tecnic Software productions (TNSP) // // Distributed under 3-clause BSD style license, refer to // included file "COPYING" for exact terms. // #include "main.h" #include "util.h" #include "ui_editperson.h" EditPerson::EditPerson(QWidget *parent) : QDialog(parent), ui(new Ui::EditPerson) { ui->setupUi(this); slSetCommonStyleSheet(this); setModal(true); setAttribute(Qt::WA_DeleteOnClose); show(); activateWindow(); raise(); setFocus(); model_Transactions = new SLTransactionSQLModel(); ui->tableview_Transactions->setModel(model_Transactions); ui->tableview_Transactions->setItemDelegate(new QSqlRelationalDelegate(ui->tableview_Transactions)); ui->tableview_Transactions->verticalHeader()->setVisible(false); ui->tableview_Transactions->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); ui->edit_FirstName->setMaxLength(SQL_LEN_FIRST_NAME); ui->edit_LastName->setMaxLength(SQL_LEN_LAST_NAME); connect( ui->textedit_ExtraInfo, SIGNAL(textChanged()), this, SLOT(on_textedit_ExtraInfo_textChanged())); validateForm(); } EditPerson::~EditPerson() { delete ui; delete model_Transactions; } void EditPerson::statusMsg(const QString &msg) { // Pass the status message to main window dynamic_cast<SyntilistaMainWindow *>(parent())->statusMsg(msg); } bool EditPerson::validateForm() { selPerson.firstName = slCleanupStr(ui->edit_FirstName->text()); selPerson.lastName = slCleanupStr(ui->edit_LastName->text()); selPerson.extraInfo = ui->textedit_ExtraInfo->document()->toPlainText(); bool extraInfoValid = selPerson.extraInfo.length() < SQL_LEN_EXTRA_INFO; ui->textedit_ExtraInfo->setStyleSheet(!extraInfoValid ? "background-color: red;" : NULL); 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 != "" && extraInfoValid; } void EditPerson::on_button_Cancel_clicked() { close(); } void EditPerson::on_button_OK_clicked() { // // Check form validation // if (!validateForm()) { slErrorMsg( tr("Virhe!"), tr("Vaaditut kentät (etunimi, sukunimi) eivät ole täytetty tai lisätietojen pituus on liian suuri.")); return; } if (selPerson.id >= 0) { // // We are in update/edit person mode, thus we check if the // first/last name have changed and if there is someone with // different ID and same names. // QSqlQuery person; person.prepare(QStringLiteral("SELECT * FROM people WHERE id <> ? AND first_name=? AND last_name=?")); person.addBindValue(selPerson.id); person.addBindValue(selPerson.firstName); person.addBindValue(selPerson.lastName); person.exec(); slCheckAndReportSQLError("SELECT check for existing person by same name (UPDATE)", person.lastError()); if (person.next()) { // There exists another person with that name slErrorMsg( tr("Virhe!"), tr("Ei pysty! Samalla nimellä '%1 %2' on olemassa jo henkilö!"). arg(selPerson.firstName).arg(selPerson.lastName)); return; } // Allest klar, update the person data dynamic_cast<SyntilistaMainWindow *>(parent())->model_People->updatePerson(selPerson); dynamic_cast<SyntilistaMainWindow *>(parent())->setActivePerson(selPerson.id); statusMsg(tr("Päivitettiin henkilö '%1 %2' (#%3)."). arg(selPerson.firstName).arg(selPerson.lastName).arg(selPerson.id)); } else { // // We are in "add new person" mode, check if there exists // someone with same first+last name. // QSqlQuery person; person.prepare("SELECT * FROM people WHERE first_name=? AND last_name=?"); person.addBindValue(selPerson.firstName); person.addBindValue(selPerson.lastName); person.exec(); slCheckAndReportSQLError("SELECT check for existing person by same name (ADD)", person.lastError()); if (person.next()) { // There exists a record with same name slErrorMsg( tr("Virhe!"), tr("Ei pysty! Samalla nimellä '%1 %2' on olemassa jo henkilö!"). arg(selPerson.firstName).arg(selPerson.lastName)); return; } // Attempt to add a person qint64 nid = dynamic_cast<SyntilistaMainWindow *>(parent())->model_People->addPerson(selPerson); if (nid < 0) { slErrorMsg( tr("Virhe!"), tr("Tietokannan käsittelyssä tapahtui virhe (#%1)."). arg(nid)); } else { dynamic_cast<SyntilistaMainWindow *>(parent())->updatePersonList(); dynamic_cast<SyntilistaMainWindow *>(parent())->setActivePerson(nid); dynamic_cast<SyntilistaMainWindow *>(parent())->focusDebtEdit(); statusMsg(tr("Lisättiin uusi henkilö '%1 %2'."). arg(selPerson.firstName).arg(selPerson.lastName)); } } close(); } void EditPerson::on_edit_FirstName_textChanged(const QString &arg1) { (void) arg1; validateForm(); } void EditPerson::on_edit_LastName_textChanged(const QString &arg1) { (void) arg1; validateForm(); } void EditPerson::on_textedit_ExtraInfo_textChanged() { validateForm(); } void EditPerson::clearForm() { ui->edit_FirstName->clear(); ui->edit_LastName->clear(); ui->textedit_ExtraInfo->document()->clear(); ui->edit_FirstName->setFocus(); } // // Set the person to be edited // void EditPerson::setPerson(qint64 id) { selPerson.id = id; if (id >= 0) { SLPersonInfo pinfo; if (!slGetPersonInfo(id, pinfo)) { statusMsg(tr("Virhe! Ei henkilöä ID:llä #%1").arg(id)); // Intentional fall-through below } else { ui->edit_FirstName->setText(pinfo.firstName); ui->edit_LastName->setText(pinfo.lastName); ui->textedit_ExtraInfo->document()->setPlainText(pinfo.extraInfo); ui->label_AddedValue->setText(slDateTimeToStr(pinfo.added)); QSqlQuery query; query.prepare(QStringLiteral("SELECT id,value,added FROM transactions WHERE person=? ORDER BY added DESC")); query.addBindValue(pinfo.id); query.exec(); slCheckAndReportSQLError("SELECT transactions for tableview_Transactions", query.lastError()); model_Transactions->setQuery(query); 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); return; // Ugly } } // In case of id < 0 or errors .. clearForm(); ui->tableview_Transactions->setModel(NULL); }