523 lines
19 KiB
C++
523 lines
19 KiB
C++
#include "dbmanager.h"
|
|
|
|
DbManager::DbManager(const QString &path, QObject *parent)
|
|
: QObject(parent)
|
|
{
|
|
const QString DRIVER("QSQLITE");
|
|
// bool init = false;
|
|
|
|
|
|
if( ! QSqlDatabase::isDriverAvailable(DRIVER)) {
|
|
qWarning() << "SQL Lite Driver is not Available";
|
|
exit(12);
|
|
} /*else if( ! QFile::exists( path ) )
|
|
init = true;*/
|
|
|
|
QSqlDatabase m_db = QSqlDatabase::addDatabase( DRIVER );
|
|
m_db.setDatabaseName(path);
|
|
if( ! m_db.open() ) {
|
|
qDebug() << m_db.lastError();
|
|
exit( 13 );
|
|
}
|
|
|
|
if( ! m_db.tables().contains( QLatin1String("rooms") ) ) {
|
|
QSqlQuery query;
|
|
|
|
if( ! query.exec("CREATE TABLE rooms "
|
|
"(name TEXT primary key, "
|
|
"size INT, "
|
|
"miete REAL)") ) {
|
|
qWarning() << query.lastError().text();
|
|
|
|
}
|
|
}
|
|
|
|
if( ! m_db.tables().contains( QLatin1String("persons") ) ) {
|
|
QSqlQuery query;
|
|
|
|
if( ! query.exec("CREATE TABLE persons "
|
|
"(name TEXT primary key, "
|
|
"roomName TEXT, "
|
|
"date TEXT)") ) {
|
|
qWarning() << query.lastError().text();
|
|
|
|
}
|
|
}
|
|
if( ! m_db.tables().contains( QLatin1String("abrechnungen") ) ) {
|
|
QSqlQuery query;
|
|
|
|
if( ! query.exec("CREATE TABLE abrechnungen "
|
|
"(name TEXT primary key, "
|
|
"art TEXT, "
|
|
"wert REAL)") ) {
|
|
qWarning() << query.lastError().text();
|
|
|
|
}
|
|
}
|
|
if( ! m_db.tables().contains( QLatin1String("ereignisse") ) ) {
|
|
QSqlQuery query;
|
|
|
|
if( ! query.exec("CREATE TABLE ereignisse "
|
|
"(id TEXT primary key, "
|
|
"titel TEXT, "
|
|
"date TEXT, "
|
|
"ereignis INT, "
|
|
"person_zieht_ein_person TEXT, "
|
|
"person_zieht_ein_wohnung TEXT, "
|
|
"person_zieht_aus_person TEXT, "
|
|
"wohnung_bearebiten_wohung TEXT, "
|
|
"wohnung_bearbeiten_neue_groese_radio_button INT, "
|
|
"wohnung_bearbeiten_neue_groesse INT, "
|
|
"wohnung_bearbeiten_neue_miete_radio_button INT, "
|
|
"wohnung_bearbeiten_neue_miete REAL, "
|
|
"abrechnung_bearbeiten_check_box TEXT, "
|
|
"abrechnung_bearbeiten_neuer_betrad_radio_b INT, "
|
|
"abrechnung_bearbeiten_neuer_betrag REAL, "
|
|
"abrechnung_bearbeiten_anderes_berechnen INT, "
|
|
"abrechnung_bearbeiten_anderes_berechnene_art INT, "
|
|
"allgemeine_mieterhoehung_prozent REAL"
|
|
")" ) ) {
|
|
qWarning() << query.lastError().text();
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
// if( ! query.exec("CREATE TABLE rooms "
|
|
// "(id integer primary key autoincrement, "
|
|
// "name varchar(128), "
|
|
// "size integer, "
|
|
// "builtdate integer)") ) {
|
|
// qWarning() << query.lastError().text();
|
|
|
|
// }
|
|
|
|
DbManager::ROOM::ROOM(QString name, int size, double miete)
|
|
: name(name),
|
|
size(size),
|
|
miete(miete)
|
|
{
|
|
|
|
}
|
|
|
|
|
|
void DbManager::addRoom(ROOM room)
|
|
{
|
|
|
|
return;
|
|
QSqlQuery query;
|
|
query.prepare("INSERT INTO rooms(name, size, miete) VALUES (:name, :size, :miete)" );
|
|
query.bindValue(":name", room.name);
|
|
query.bindValue(":size", room.size);
|
|
query.bindValue(":miete", room.miete);
|
|
|
|
if( ! query.exec() ) {
|
|
qWarning() << query.lastError().text();
|
|
}
|
|
|
|
emit addedRoom( room.name );
|
|
}
|
|
|
|
void DbManager::clearRooms()
|
|
{
|
|
QSqlQuery query;
|
|
if( ! query.exec("DELETE FROM rooms") ) {
|
|
qWarning() << query.lastError().text();
|
|
}
|
|
}
|
|
|
|
|
|
QList<DbManager::ROOM> DbManager::getAllRooms()
|
|
{
|
|
QSqlQuery query;
|
|
if( ! query.exec("SELECT * FROM rooms") ) {
|
|
qWarning() << query.lastError().text();
|
|
return QList<DbManager::ROOM>();
|
|
}
|
|
|
|
if(query.record().count() != 3 ) {
|
|
qWarning() << " Ungültiger Rückgabe werrtt nicht 4 spalten!" << query.record().count() << " und " << query.size() ;
|
|
return QList<DbManager::ROOM>();
|
|
} else {
|
|
QList<DbManager::ROOM> retV;
|
|
while (query.next()) {
|
|
retV.append(ROOM( query.value(0).toString(),query.value(1).toInt(), query.value(2).toDouble() ) ) ;
|
|
}
|
|
return retV;
|
|
}
|
|
|
|
}
|
|
|
|
void DbManager::setRoom(ROOM room)
|
|
{
|
|
QSqlQuery query;
|
|
query.prepare("INSERT OR REPLACE INTO rooms(name, size, miete) VALUES (:name, :size, :miete)" );
|
|
|
|
query.bindValue(":name", room.name);
|
|
query.bindValue(":size", room.size);
|
|
query.bindValue(":miete", room.miete);
|
|
|
|
if( ! query.exec() ) {
|
|
qWarning() << query.lastError().text();
|
|
}
|
|
}
|
|
|
|
DbManager::ROOM DbManager::getRoomByName(QString name)
|
|
{
|
|
QSqlQuery query;
|
|
query.prepare("SELECT * FROM rooms WHERE name == :name");
|
|
query.bindValue( ":name", name );
|
|
if( ! query.exec() ) {
|
|
qWarning() << query.lastError().text();
|
|
return ROOM();
|
|
}
|
|
|
|
if(query.next() && query.record().count() != 3 ) {
|
|
qWarning() << " Ungültiger Rückgabe werrtt nicht 4 spalten!" << query.record().count() << " und " << query.size() ;
|
|
return ROOM();
|
|
} else
|
|
return ROOM( query.value(0).toString(),query.value(1).toInt(), query.value(2).toDouble() );
|
|
|
|
}
|
|
|
|
bool DbManager::roomExists(QString name)
|
|
{
|
|
QSqlQuery query;
|
|
if( query.exec("SELECT EXISTS(SELECT 1 FROM rooms WHERE name = '" + name + "')") && query.next() )
|
|
return query.value( 0 ).toInt() == 1;
|
|
|
|
qWarning() << query.lastError().text();
|
|
return false;
|
|
|
|
}
|
|
|
|
int DbManager::removeRoom(QString id)
|
|
{
|
|
QSqlQuery query;
|
|
if( ! query.exec("DELETE FROM rooms WHERE name = '" + id + "'") ) {
|
|
qWarning() << query.lastError().text();
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
void DbManager::setPerson(PERSON person)
|
|
{
|
|
QSqlQuery query;
|
|
query.prepare("INSERT OR REPLACE INTO persons(name, roomName, date) VALUES (:name, :roomName, :date)" );
|
|
query.bindValue(":name", person.name);
|
|
query.bindValue(":roomName", person.roomName);
|
|
query.bindValue(":date", person.date.toString());
|
|
|
|
if( ! query.exec() )
|
|
qWarning() << query.lastError().text();
|
|
}
|
|
|
|
DbManager::PERSON DbManager::getPersonByName(QString name)
|
|
{
|
|
QSqlQuery query;
|
|
if( ! query.exec("SELECT * FROM persons WHERE name = '" + name + "'") ) {
|
|
qWarning() << query.lastError().text();
|
|
return PERSON();
|
|
}
|
|
|
|
if(query.next() && query.record().count() != 3 ) {
|
|
qWarning() << " Ungültiger Rückgabe werrtt nicht 3 spalten!" << query.record().count() << " und " << query.size() ;
|
|
return PERSON();
|
|
} else
|
|
return PERSON( query.value(0).toString(), query.value(1).toString(), QDate::fromString( query.value(2).toString() ) );
|
|
}
|
|
|
|
bool DbManager::personExists(QString name)
|
|
{
|
|
QSqlQuery query;
|
|
if( query.exec("SELECT EXISTS(SELECT 1 FROM persons WHERE name = '" + name + "')") && query.next() )
|
|
return query.value( 0 ).toInt() == 1;
|
|
|
|
qWarning() << query.lastError().text();
|
|
return false;
|
|
}
|
|
|
|
QList<DbManager::PERSON> DbManager::getAllPersons()
|
|
{
|
|
QSqlQuery query;
|
|
if( ! query.exec("SELECT * FROM persons") ) {
|
|
qWarning() << query.lastError().text();
|
|
return QList<DbManager::PERSON>();
|
|
}
|
|
|
|
if(query.record().count() != 3 ) {
|
|
qWarning() << " Ungültiger Rückgabe werrtt nicht 3 spalten!" << query.record().count() << " und " << query.size() ;
|
|
return QList<DbManager::PERSON>();
|
|
} else {
|
|
QList<DbManager::PERSON> retV;
|
|
while (query.next())
|
|
retV.append(PERSON( query.value(0).toString(), query.value(1).toString(), QDate::fromString( query.value(2).toString() ) ) ) ;
|
|
return retV;
|
|
}
|
|
|
|
}
|
|
|
|
int DbManager::removePerson(QString id)
|
|
{
|
|
QSqlQuery query;
|
|
if( ! query.exec("DELETE FROM persons WHERE name = '" + id + "'") ) {
|
|
qWarning() << query.lastError().text();
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
void DbManager::setAbrechnung(ABRECHNUNG abrechnung)
|
|
{
|
|
QSqlQuery query;
|
|
query.prepare("INSERT OR REPLACE INTO abrechnungen(name, art, wert) VALUES (:name, :art, :wert)" );
|
|
query.bindValue(":name", abrechnung.name);
|
|
query.bindValue(":art", abrechnung.abrechnusart);
|
|
query.bindValue(":wert", abrechnung.betrag);
|
|
|
|
if( ! query.exec() )
|
|
qWarning() << query.lastError().text();
|
|
}
|
|
|
|
DbManager::ABRECHNUNG DbManager::getAbrechnungByName(QString name)
|
|
{
|
|
QSqlQuery query;
|
|
if( ! query.exec("SELECT * FROM abrechnungen WHERE name = '" + name + "'") ) {
|
|
qWarning() << query.lastError().text();
|
|
return ABRECHNUNG();
|
|
}
|
|
|
|
if(query.next() && query.record().count() != 3 ) {
|
|
qWarning() << " Ungültiger Rückgabe werrtt nicht 3 spalten!" << query.record().count() << " und " << query.size() ;
|
|
return ABRECHNUNG();
|
|
} else
|
|
return ABRECHNUNG( query.value(0).toString(), query.value(1).toInt(), query.value(2).toDouble() );
|
|
}
|
|
|
|
bool DbManager::abrechnungExists(QString name)
|
|
{
|
|
QSqlQuery query;
|
|
if( query.exec("SELECT EXISTS(SELECT 1 FROM abrechnungen WHERE name = '" + name + "')") && query.next() )
|
|
return query.value( 0 ).toInt() == 1;
|
|
|
|
qWarning() << query.lastError().text();
|
|
return false;
|
|
}
|
|
|
|
QList<DbManager::ABRECHNUNG> DbManager::getAllAbrechnungen()
|
|
{
|
|
QSqlQuery query;
|
|
if( ! query.exec("SELECT * FROM abrechnungen") ) {
|
|
qWarning() << query.lastError().text();
|
|
return QList<DbManager::ABRECHNUNG>();
|
|
}
|
|
|
|
if(query.record().count() != 3 ) {
|
|
qWarning() << " Ungültiger Rückgabe werrtt nicht 3 spalten!" << query.record().count() << " und " << query.size() ;
|
|
return QList<DbManager::ABRECHNUNG>();
|
|
} else {
|
|
QList<DbManager::ABRECHNUNG> retV;
|
|
while (query.next())
|
|
retV.append(ABRECHNUNG( query.value(0).toString(), query.value(1).toInt(), query.value(2).toDouble() ) ) ;
|
|
return retV;
|
|
}
|
|
|
|
}
|
|
|
|
int DbManager::removeAbrechnung(QString id)
|
|
{
|
|
QSqlQuery query;
|
|
if( ! query.exec("DELETE FROM abrechnungen WHERE name = '" + id + "'") ) {
|
|
qWarning() << query.lastError().text();
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
void DbManager::setEreignis(EREIGNIS ereignis)
|
|
{
|
|
//TRY TO DO IT BINARY
|
|
|
|
|
|
QSqlQuery query;
|
|
query.prepare("INSERT OR REPLACE INTO ereignisse("
|
|
"id, titel, date,"
|
|
"ereignis, person_zieht_ein_person,"
|
|
"person_zieht_ein_wohnung,person_zieht_aus_person,wohnung_bearebiten_wohung,"
|
|
"wohnung_bearbeiten_neue_groese_radio_button,wohnung_bearbeiten_neue_groesse"
|
|
",wohnung_bearbeiten_neue_miete_radio_button"
|
|
",wohnung_bearbeiten_neue_miete"
|
|
",abrechnung_bearbeiten_check_box"
|
|
",abrechnung_bearbeiten_neuer_betrad_radio_b"
|
|
",abrechnung_bearbeiten_neuer_betrag"
|
|
",abrechnung_bearbeiten_anderes_berechnen"
|
|
",abrechnung_bearbeiten_anderes_berechnene_art"
|
|
",allgemeine_mieterhoehung_prozent) "
|
|
"VALUES ("
|
|
":id, :titel, :date,"
|
|
":ereignis, :person_zieht_ein_person,"
|
|
":person_zieht_ein_wohnung,:person_zieht_aus_person,:wohnung_bearebiten_wohung,"
|
|
":wohnung_bearbeiten_neue_groese_radio_button,:wohnung_bearbeiten_neue_groesse"
|
|
",:wohnung_bearbeiten_neue_miete_radio_button"
|
|
",:wohnung_bearbeiten_neue_miete"
|
|
",:abrechnung_bearbeiten_check_box"
|
|
",:abrechnung_bearbeiten_neuer_betrad_radio_b"
|
|
",:abrechnung_bearbeiten_neuer_betrag"
|
|
",:abrechnung_bearbeiten_anderes_berechnen"
|
|
",:abrechnung_bearbeiten_anderes_berechnene_art"
|
|
",:allgemeine_mieterhoehung_prozent)" );
|
|
|
|
query.bindValue(":id", ereignis.id);
|
|
query.bindValue(":titel", ereignis.titel);
|
|
query.bindValue(":date", ereignis.date.toString());
|
|
query.bindValue(":ereignis", ereignis.ereignis);
|
|
query.bindValue(":person_zieht_ein_person", ereignis.person_zieht_ein_person);
|
|
query.bindValue(":person_zieht_ein_wohnung", ereignis.person_zieht_ein_wohnung);
|
|
query.bindValue(":person_zieht_aus_person", ereignis.person_zieht_aus_person);
|
|
query.bindValue(":wohnung_bearebiten_wohung", ereignis.wohnung_bearebiten_wohung);
|
|
query.bindValue(":wohnung_bearbeiten_neue_groese_radio_button", ereignis.wohnung_bearbeiten_neue_groese_radio_button);
|
|
query.bindValue(":wohnung_bearbeiten_neue_groesse", ereignis.wohnung_bearbeiten_neue_groesse);
|
|
query.bindValue(":wohnung_bearbeiten_neue_miete_radio_button", ereignis.wohnung_bearbeiten_neue_miete_radio_button);
|
|
query.bindValue(":wohnung_bearbeiten_neue_miete", ereignis.wohnung_bearbeiten_neue_miete);
|
|
query.bindValue(":abrechnung_bearbeiten_check_box", ereignis.abrechnung_bearbeiten_check_box);
|
|
query.bindValue(":abrechnung_bearbeiten_neuer_betrad_radio_b", ereignis.abrechnung_bearbeiten_neuer_betrad_radio_b);
|
|
query.bindValue(":abrechnung_bearbeiten_neuer_betrag", ereignis.abrechnung_bearbeiten_neuer_betrag);
|
|
query.bindValue(":abrechnung_bearbeiten_anderes_berechnen", ereignis.abrechnung_bearbeiten_anderes_berechnen);
|
|
query.bindValue(":abrechnung_bearbeiten_anderes_berechnene_art", ereignis.abrechnung_bearbeiten_anderes_berechnene_art);
|
|
query.bindValue(":allgemeine_mieterhoehung_prozent", ereignis.allgemeine_mieterhoehung_prozent);
|
|
|
|
|
|
if( ! query.exec() )
|
|
qWarning() << query.lastError().text();
|
|
}
|
|
|
|
DbManager::EREIGNIS DbManager::getEreignisByDateAndtitel(QString titel, QDate d)
|
|
{
|
|
QSqlQuery query;
|
|
if( ! query.exec("SELECT * FROM ereignisse WHERE id = '" + titel + "|" + d.toString() + "'") ) {
|
|
qWarning() << query.lastError().text();
|
|
return EREIGNIS();
|
|
}
|
|
|
|
if(query.next() && query.record().count() != 18 ) {
|
|
qWarning() << " Ungültiger Rückgabe werrtt nicht 18 spalten!" << query.record().count() << " und " << query.size() ;
|
|
return EREIGNIS();
|
|
} else
|
|
return EREIGNIS( query.value(0).toString(),
|
|
query.value(1).toString(),
|
|
QDate::fromString(query.value(2).toString()),
|
|
query.value(3).toInt(), //Ereignis
|
|
query.value(4).toString(),
|
|
query.value(5).toString(),
|
|
query.value(6).toString(),
|
|
query.value(7).toString(),
|
|
query.value(8).toInt(),
|
|
query.value(9).toInt(),
|
|
query.value(10).toInt(),
|
|
query.value(11).toDouble(),
|
|
query.value(12).toString(),
|
|
query.value(13).toInt(),
|
|
query.value(14).toDouble(),
|
|
query.value(15).toInt(),
|
|
query.value(16).toInt(),
|
|
query.value(17).toDouble()
|
|
);
|
|
}
|
|
|
|
bool DbManager::ereignisExists(QString id)
|
|
{
|
|
QSqlQuery query;
|
|
if( query.exec("SELECT EXISTS(SELECT 1 FROM ereignisse WHERE id = '" + id + "')") && query.next() )
|
|
return query.value( 0 ).toInt() == 1;
|
|
|
|
qWarning() << query.lastError().text();
|
|
return false;
|
|
}
|
|
|
|
QList<DbManager::EREIGNIS> DbManager::getAllEreignisse()
|
|
{
|
|
QSqlQuery query;
|
|
if( ! query.exec("SELECT * FROM ereignisse ORDER BY id ASC") ) {
|
|
qWarning() << query.lastError().text();
|
|
return QList<DbManager::EREIGNIS>();
|
|
}
|
|
|
|
if(query.record().count() != 18 ) {
|
|
qWarning() << " Ungültiger Rückgabe werrtt nicht 16 spalten!" << query.record().count() << " und " << query.size() ;
|
|
return QList<DbManager::EREIGNIS>();
|
|
} else {
|
|
QList<DbManager::EREIGNIS> retV;
|
|
while (query.next())
|
|
retV.append(EREIGNIS( query.value(0).toString(),
|
|
query.value(1).toString(),
|
|
QDate::fromString(query.value(2).toString()),
|
|
query.value(3).toInt(), //Ereignis
|
|
query.value(4).toString(),
|
|
query.value(5).toString(),
|
|
query.value(6).toString(),
|
|
query.value(7).toString(),
|
|
query.value(8).toInt(),
|
|
query.value(9).toInt(),
|
|
query.value(10).toInt(),
|
|
query.value(11).toDouble(),
|
|
query.value(12).toString(),
|
|
query.value(13).toInt(),
|
|
query.value(14).toDouble(),
|
|
query.value(15).toInt(),
|
|
query.value(16).toInt(),
|
|
query.value(17).toDouble()
|
|
) );
|
|
return retV;
|
|
}
|
|
}
|
|
|
|
int DbManager::removeEreignis(QString id)
|
|
{
|
|
QSqlQuery query;
|
|
if( ! query.exec("DELETE FROM ereignisse WHERE id = '" + id + "'") ) {
|
|
qWarning() << query.lastError().text();
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
DbManager::PERSON::PERSON(QString name, QString roomName, QDate date)
|
|
: name(name),
|
|
roomName(roomName),
|
|
date(date)
|
|
{
|
|
|
|
}
|
|
|
|
DbManager::ABRECHNUNG::ABRECHNUNG(QString name, int abrechnusart, double betrag)
|
|
: name(name), abrechnusart(abrechnusart), betrag(betrag)
|
|
{
|
|
|
|
}
|
|
|
|
DbManager::EREIGNIS::EREIGNIS(QString id, QString titel, QDate date, int ereignis, QString person_zieht_ein_person, QString person_zieht_ein_wohnung, QString person_zieht_aus_person,
|
|
QString wohnung_bearebiten_wohung, int wohnung_bearbeiten_neue_groese_radio_button, int wohnung_bearbeiten_neue_groesse, int wohnung_bearbeiten_neue_miete_radio_button,
|
|
double wohnung_bearbeiten_neue_miete, QString abrechnung_bearbeiten_check_box, int abrechnung_bearbeiten_neuer_betrad_radio_b, double abrechnung_bearbeiten_neuer_betrag,
|
|
int abrechnung_bearbeiten_anderes_berechnen, int abrechnung_bearbeiten_anderes_berechnene_art, double allgemeine_mieterhoehung_prozent)
|
|
: titel(titel), id(id), person_zieht_ein_person(person_zieht_ein_person), person_zieht_ein_wohnung(person_zieht_ein_wohnung), person_zieht_aus_person(person_zieht_aus_person), wohnung_bearebiten_wohung(wohnung_bearebiten_wohung),
|
|
abrechnung_bearbeiten_check_box(abrechnung_bearbeiten_check_box),date(date), ereignis(ereignis),
|
|
wohnung_bearbeiten_neue_groese_radio_button(wohnung_bearbeiten_neue_groese_radio_button), wohnung_bearbeiten_neue_groesse(wohnung_bearbeiten_neue_groesse),
|
|
wohnung_bearbeiten_neue_miete_radio_button(wohnung_bearbeiten_neue_miete_radio_button), abrechnung_bearbeiten_neuer_betrad_radio_b(abrechnung_bearbeiten_neuer_betrad_radio_b),
|
|
abrechnung_bearbeiten_anderes_berechnen(abrechnung_bearbeiten_anderes_berechnen), abrechnung_bearbeiten_anderes_berechnene_art(abrechnung_bearbeiten_anderes_berechnene_art),
|
|
wohnung_bearbeiten_neue_miete(wohnung_bearbeiten_neue_miete),
|
|
abrechnung_bearbeiten_neuer_betrag(abrechnung_bearbeiten_neuer_betrag), allgemeine_mieterhoehung_prozent(allgemeine_mieterhoehung_prozent)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
QString DbManager::createID(QString titel, QDate date)
|
|
{
|
|
return date.toString("yyyy.MM.dd") + "-" + titel;
|
|
}
|