Files
abrechnungsrechner/dbmanager.cpp
M4RKUS28 7514b41c4c init
2023-04-30 16:21:26 +02:00

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;
}