#ifndef DATABASE_H #define DATABASE_H #include #include #include #include #include #include #include "transaction.h" class Database { public: Database(); ~Database(); bool open(const QString &path); bool createTables(); // Transaction operations bool addTransaction(const Transaction &transaction); bool updateTransaction(const Transaction &transaction); bool deleteTransaction(int id); QList getTransactions(const QDate &startDate, const QDate &endDate); QList getAllTransactions(); // Recurring rule operations bool addRecurringRule(const RecurringRule &rule); bool updateRecurringRule(const RecurringRule &rule); bool deleteRecurringRule(int id); QList getAllRecurringRules(); void regenerateProjectionsForRule(const RecurringRule &rule); void deleteProjectionsForRule(int ruleId); void regenerateAllProjections(); // Reconciliation bool convertToActual(int transactionId, double actualAmount); // Settings QString getSetting(const QString &name, const QString &defaultValue = QString()); bool setSetting(const QString &name, const QString &value); QString lastError() const; private: QSqlDatabase db; QString errorMsg; Transaction queryToTransaction(QSqlQuery &query); RecurringRule queryToRecurringRule(QSqlQuery &query); }; #endif // DATABASE_H