Mitgliederverwaltung für einen Landesverband, Clientkomponente
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
pmv-client/editdialog.cpp

192 lines
7.5 KiB

/* Diese Datei ist Teil von pmv-client <https://git.piratenpartei-sh.de>
*
* pmv-client ist Freie Software: Sie können es unter den Bedingungen
* der GNU General Public License, wie von der Free Software Foundation,
* Version 3 der Lizenz weiter verteilen und/oder modifizieren.
*
* Dieses Programm wird in der Hoffnung bereitgestellt, dass es nützlich sein
* wird, jedoch OHNE JEDE GEWÄHR,; sogar ohne die implizite Gewähr der
* MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK.
* Siehe die GNU General Public License für weitere Einzelheiten.
*
* Sie sollten eine Kopie der GNU General Public License zusammen mit diesem
* Programm erhalten haben. Wenn nicht, siehe <https://www.gnu.org/licenses/>.
*
* SPDX-License-Identifier: GPL-3.0-only
*/
#include "editdialog.h"
#include "ui_editdialog.h"
#include <QPushButton>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDebug>
#include <QSqlError>
EditDialog::EditDialog(QWidget *parent, int nummer) :
QDialog(parent),
ui(new Ui::EditDialog)
{
ui->setupUi(this);
ui->buttonBox->button(QDialogButtonBox::Close)->setText("Schließen");
ui->buttonBox->button(QDialogButtonBox::Save)->setText("Speichern");
// Mahnstatus initialisieren
QStringList mahnstatuslist = {"0", "1", "20", "30"}; // Bedeutung noch unbekannt
ui->comboBox_mahnstatus->insertItems(0, mahnstatuslist);
this->mitgliednr = nummer;
QSqlQuery qry;
qry.prepare("SELECT nr, vorname, nachname, nickname, strasse, plz, ort,"
" email, telefon, geburtsdatum, eintrittsdatum, austrittsdatum,"
" staatsang, schwebend, stimmberechtigt, status "
"FROM mitglied WHERE nr=:nr");
qry.bindValue(":nr", nummer);
qry.exec();
qry.first();
ui->lineEdit_nr->setText(qry.value("nr").toString());
ui->lineEdit_vorname->setText(qry.value("vorname").toString());
ui->lineEdit_nachname->setText(qry.value("nachname").toString());
ui->dateEdit_geburtstag->setDate(qry.value("geburtsdatum").toDate());
ui->lineEdit_nick->setText(qry.value("nickname").toString());
ui->lineEdit_email->setText(qry.value("email").toString());
ui->lineEdit_telefon->setText(qry.value("telefon").toString());
ui->lineEdit_plz->setText(qry.value("plz").toString()); // TODO Führende Nullen beachten!
ui->lineEdit_ort->setText(qry.value("ort").toString());
ui->lineEdit_strasse->setText(qry.value("strasse").toString());
ui->lineEdit_staatsang->setText(qry.value("staatsang").toString());
ui->dateEdit_eintritt->setDate(qry.value("eintrittsdatum").toDate());
// TODO 01.01.2006 entspricht "kein Austrittsdatum" n/a
if (ui->dateEdit_austritt->minimumDate() == qry.value("austrittsdatum").toDate()) {
}
else {
ui->dateEdit_austritt->setDate(qry.value("austrittsdatum").toDate());
}
ui->checkBox_schwebend->setCheckState(qry.value("schwebend").toBool() ? Qt::Checked : Qt::Unchecked);
ui->checkBox_stimmberechtigt->setCheckState(qry.value("stimmberechtigt").toBool() ? Qt::Checked : Qt::Unchecked);
// Status-Radiobuttons
QStringList statusOptions = {"aktiv", "ruhend", "ausgetreten"};
switch(statusOptions.indexOf(qry.value("status").toString())) {
case 0:
ui->radioButton_aktiv->setChecked(true);
break;
case 1:
ui->radioButton_ruhend->setChecked(true);
break;
case 2:
ui->radioButton_ausgetreten->setChecked(true);
break;
}
qry.finish();
// TODO Die Sichtbarkeit der Beitragsdaten hängt von den Berechtigungen ab
qry.prepare("SELECT beitrag, mahndatum, reduziert, reduziert_bis "
"FROM beitrag WHERE mitgliednr=:nr");
qry.bindValue(":nr", nummer);
qry.exec();
qry.first();
// TODO Datensätze gefunden?
if (qry.isValid()) {
ui->lineEdit_beitrag->setText(qry.value("beitrag").toString());
ui->dateEdit_mdatum->setDate(qry.value("mahndatum").toDate());
ui->dateEdit_rdatum->setDate(qry.value("reduziert_bis").toDate());
ui->checkBox_reduziert->setCheckState(qry.value("reduziert").toBool() ? Qt::Checked : Qt::Unchecked);
} else {
QSqlQuery qrynew;
qrynew.prepare("INSERT INTO beitrag (mitgliednr, beitrag) VALUES (:nr, :beitrag)");
qrynew.bindValue(":nr", nummer);
qrynew.bindValue(":beitrag", 72); // TODO Globale Variable
if (!qrynew.exec()) {
qDebug() << qrynew.lastError();
}
}
qry.finish();
// TODO Berechtigungen für die einzelnen Buchungen sind vmtl. noch eine Stufe
// "höher" in den Berechtigungen einzustufen.
model = new QSqlTableModel(this);
model->setTable("buchung");
model->setFilter(QString("mitgliednr=%1").arg(nummer));
model->setSort(2, Qt::DescendingOrder);
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->setHeaderData(0, Qt::Horizontal, "ID");
model->setHeaderData(1, Qt::Horizontal, "Mitglied-Nr.");
model->setHeaderData(2, Qt::Horizontal, "Datum");
model->setHeaderData(3, Qt::Horizontal, "Soll");
model->setHeaderData(4, Qt::Horizontal, "Ist");
model->setHeaderData(5, Qt::Horizontal, "Jahr");
// model->setSort(0, Qt::AscendingOrder);
ui->tableView_Buchung->setSelectionBehavior(QAbstractItemView::SelectRows);
ui->tableView_Buchung->setModel(model);
ui->tableView_Buchung->setColumnHidden(0, true);
ui->tableView_Buchung->setColumnHidden(1, true);
model->select();
}
EditDialog::~EditDialog()
{
delete ui;
}
void EditDialog::on_buttonBox_accepted()
{
// TODO Dirty-Prüfung um nur geänderte Felder zurückzuschreiben
QSqlQuery qry;
qry.prepare("UPDATE mitglied SET"
" vorname=:vorname, nachname=:nachname, nickname=:nick,"
" email=:email, telefon=:telefon, strasse=:str, ort=:ort, plz=:plz,"
" geburtsdatum=:geburtsdatum, eintrittsdatum=:edatum, austrittsdatum=:adatum,"
" schwebend=:schwebend, stimmberechtigt=:stimmberechtigt, status=:status "
"WHERE nr=:nr");
// TODO Änderung der Mitgliedsmummer erfordert besondere Beachtung?
//int nrneu = ui->lineEdit_nr->text().toInt();
//if (nrneu != this->mitgliednr) {
// qry.bindValue(":nrneu", nrneu);
//}
qry.bindValue(":nr", this->mitgliednr);
qry.bindValue(":vorname", ui->lineEdit_vorname->text());
qry.bindValue(":nachname", ui->lineEdit_nachname->text());
qry.bindValue(":nick", ui->lineEdit_nick->text());
qry.bindValue(":email", ui->lineEdit_email->text());
qry.bindValue(":telefon", ui->lineEdit_telefon->text());
qry.bindValue(":str", ui->lineEdit_strasse->text());
qry.bindValue(":plz", ui->lineEdit_plz->text().toUInt());
qry.bindValue(":ort", ui->lineEdit_ort->text());
qry.bindValue(":edatum", ui->dateEdit_eintritt->date());
qry.bindValue(":geburtsdatum", ui->dateEdit_geburtstag->date());
if ( ui->dateEdit_austritt->date() == ui->dateEdit_austritt->minimumDate()) {
qry.bindValue(":adatum", QVariant(QVariant::String)); // NULL erzeugen
}
else {
qry.bindValue(":adatum", ui->dateEdit_austritt->date());
}
qry.bindValue(":schwebend", ui->checkBox_schwebend->isChecked());
qry.bindValue(":stimmberechtigt", ui->checkBox_stimmberechtigt->isChecked());
if (ui->radioButton_aktiv->isChecked()) {
qry.bindValue(":status", "aktiv");
}
else if (ui->radioButton_ruhend->isChecked()) {
qry.bindValue(":status", "ruhend");
}
else {
qry.bindValue(":status", "ausgetreten");
}
if (!qry.exec()) {
qDebug() << qry.lastError();
}
}