diff --git a/ChangeLog b/ChangeLog index 661dc8b..bf77612 100644 --- a/ChangeLog +++ b/ChangeLog @@ -12,6 +12,7 @@ v0.3 (27/04/2012) ** Dev ** Version 3 of database : account hidden item added, some id deleted, on delete constraints added This version is not compatible with previous ones + Values are in fix point (no double anymore) ** Bugs ** Fix a bug in language settings diff --git a/ressources/init.sql b/ressources/init.sql index f84b108..11df5de 100644 --- a/ressources/init.sql +++ b/ressources/init.sql @@ -2,8 +2,8 @@ CREATE TABLE kisscount(db_version VARCHAR(20)); CREATE TABLE user (id INTEGER PRIMARY KEY, name VARCHAR(255), password VARCHAR(255)); CREATE TABLE account(id INTEGER PRIMARY KEY, user REFERENCES user(id), name VARCHAR(255), number VARCHAR(255), shared CHAR(1), blocked CHAR(1), default_account CHAR(1), virtual CHAR(1), hidden CHAR(1)); CREATE TABLE shared_account(account REFERENCES account(id), user REFERENCES user(id)); -CREATE TABLE account_amount(account REFERENCES account(id), year INTEGER, month INTEGER, amount FLOAT, PRIMARY KEY(account, year, month)); -CREATE TABLE operation(id INTEGER PRIMARY KEY, parent REFERENCES operation(id), user REFERENCES user(id), account REFERENCES account(id) ON DELETE SET NULL, year INTEGER, month INTEGER, day INTEGER, amount FLOAT, description VARCHAR(255), category REFERENCES category(id) ON DELETE SET NULL, fix_cost CHAR(1), checked CHAR(1), formula VARCHAR(255), transfert REFERENCES operation(id), meta CHAR(1), virtual CHAR(1)); +CREATE TABLE account_amount(account REFERENCES account(id), year INTEGER, month INTEGER, amount INTEGER, PRIMARY KEY(account, year, month)); +CREATE TABLE operation(id INTEGER PRIMARY KEY, parent REFERENCES operation(id), user REFERENCES user(id), account REFERENCES account(id) ON DELETE SET NULL, year INTEGER, month INTEGER, day INTEGER, amount INTEGER, description VARCHAR(255), category REFERENCES category(id) ON DELETE SET NULL, fix_cost CHAR(1), checked CHAR(1), formula VARCHAR(255), transfert REFERENCES operation(id), meta CHAR(1), virtual CHAR(1)); CREATE TABLE category(id INTEGER PRIMARY KEY, user REFERENCES user(id), parent REFERENCES category(id) ON DELETE SET NULL, name VARCHAR(255), backcolor VARCHAR(10), forecolor VARCHAR(10), font VARCHAR(255), fix_cost CHAR(1)); CREATE TABLE preference(user REFERENCES user(id), name VARCHAR(255), value VARCHAR(255), PRIMARY KEY(user, name)); CREATE TABLE import_pattern(user REFERENCES user(id), description VARCHAR(255), pattern VARCHAR(255), account REFERENCES account(id), category REFERENCES category(id), PRIMARY KEY(user, description)); diff --git a/src/controller/KissCount.cpp b/src/controller/KissCount.cpp index ec88612..9d7222e 100644 --- a/src/controller/KissCount.cpp +++ b/src/controller/KissCount.cpp @@ -98,12 +98,12 @@ User* KissCount::GetUser() return _user; } -double KissCount::GetAccountAmount(int id, int month, int year, bool* had_value) +int KissCount::GetAccountAmount(int id, int month, int year, bool* had_value) { return _db->GetAccountAmount(id, month, year, had_value); } -double KissCount::CalcAccountAmount(int id, int month, int year, bool* had_values) +int KissCount::CalcAccountAmount(int id, int month, int year, bool* had_values) { return _db->CalcAccountAmount(id, month, year, had_values); } @@ -157,17 +157,17 @@ void KissCount::DeleteOperations(int month, int year) } } -double KissCount::MetaAmount(int id) +int KissCount::MetaAmount(int id) { return _db->MetaAmount(id); } -double KissCount::MetaPositiveAmount(int id) +int KissCount::MetaPositiveAmount(int id) { return _db->MetaPositiveAmount(id); } -void KissCount::SetAccountAmount(int accountId, int month, int year, double amount) +void KissCount::SetAccountAmount(int accountId, int month, int year, int amount) { _db->SetAccountAmount(accountId, month, year, amount); } @@ -398,7 +398,7 @@ const QString& KissCount::GetOperationOrder() } std::vector* KissCount::Search(QString* description, QDate* dateFrom, QDate* dateTo, - double* amountFrom, double* amountTo, + int* amountFrom, int* amountTo, std::vector categories, int types, std::vector accounts) { @@ -458,15 +458,15 @@ void KissCount::GetHistory(int month, int year, QStringList& list) } void KissCount::GetStats(int monthFrom, int yearFrom, int monthTo, int yearTo, - std::map > >* accountAmounts, - std::map* categories) + std::map > >* accountAmounts, + std::map* categories) { _db->GetStats(_user, monthFrom, yearFrom, monthTo, yearTo, accountAmounts, categories); } void KissCount::GetMonthStats(int month, int year, int nbDays, - std::map >* operations, - std::map* categories) + std::map >* operations, + std::map* categories) { _db->GetMonthStats(_user, month, year, nbDays, operations, categories); } @@ -476,12 +476,12 @@ void KissCount::UpdateStats() _wxUI->UpdateStats(); } -std::map* KissCount::GetNotChecked(int month, int year) +std::map* KissCount::GetNotChecked(int month, int year) { return _db->GetNotChecked(_user, month, year); } -std::map* KissCount::GetVirtualAmount(int month, int year) +std::map* KissCount::GetVirtualAmount(int month, int year) { return _db->GetVirtualAmount(_user, month, year); } diff --git a/src/controller/KissCount.hpp b/src/controller/KissCount.hpp index d37cce4..9a835eb 100644 --- a/src/controller/KissCount.hpp +++ b/src/controller/KissCount.hpp @@ -72,12 +72,12 @@ public: void UpdateOperation(Operation& op, bool checkTransfert=true); void DeleteOperation(Operation& op); void DeleteOperations(int month, int year); - double MetaAmount(int id); - double MetaPositiveAmount(int id); + int MetaAmount(int id); + int MetaPositiveAmount(int id); - double GetAccountAmount(int id, int month, int year, bool* had_values=NULL); - void SetAccountAmount(int accountId, int month, int year, double value); - double CalcAccountAmount(int id, int month, int year, bool* had_values); + int GetAccountAmount(int id, int month, int year, bool* had_values=NULL); + void SetAccountAmount(int accountId, int month, int year, int value); + int CalcAccountAmount(int id, int month, int year, bool* had_values); int AddAccount(Account& ac); void UpdateAccount(Account& ac); @@ -101,22 +101,22 @@ public: const QString& GetOperationOrder(); std::vector* Search(QString* description, QDate* dateFrom, QDate* dateTo, - double* amountFrom, double* amountTo, + int* amountFrom, int* amountTo, std::vector categories, int types, std::vector accounts); bool SearchPreviousOperation(Operation* res, Operation& op, int month, int year, bool limitToType, int index); void GetStats(int monthFrom, int yearFrom, int monthTo, int yearTo, - std::map > >* accountAmounts, - std::map* categories); + std::map > >* accountAmounts, + std::map* categories); void GetMonthStats(int month, int year, int nbDays, - std::map >* operations, - std::map* categories); + std::map >* operations, + std::map* categories); void UpdateStats(); - std::map* GetNotChecked(int month, int year); - std::map* GetVirtualAmount(int month, int year); + std::map* GetNotChecked(int month, int year); + std::map* GetVirtualAmount(int month, int year); static QFont ExtractFont(QString); static QString CompactFont(const QFont& font); diff --git a/src/model/Database.cpp b/src/model/Database.cpp index e231ab8..6d0ac09 100644 --- a/src/model/Database.cpp +++ b/src/model/Database.cpp @@ -30,15 +30,6 @@ #include "Database.hpp" -static inline QString DoubleToString(double d) -{ - QString res; - - res = res.sprintf("%.2lf", d); - - return res.replace(",", "."); -} - Database::Database(const char* filename, KissCount* kiss) : _kiss(kiss) { std::ifstream bdd_file; @@ -211,7 +202,7 @@ static inline void fillOperation(Operation* op, const QSqlRecord& set) op->day = set.value("day").toInt(); op->month = set.value("month").toInt(); op->year = set.value("year").toInt(); - op->amount = set.value("amount").toDouble(); + op->amount = set.value("amount").toInt(); op->description = set.value("description").toString(); op->category = set.value("category").toInt(); op->fix_cost = set.value("fix_cost").toBool(); @@ -406,28 +397,28 @@ void Database::LoadYear(User* user, int year) query.clear(); } -double Database::GetAccountAmount(int id, int month, int year, bool* had_value) +int Database::GetAccountAmount(int id, int month, int year, bool* had_value) { QSqlRecord set; QString req; - double res = 0.0; + int res = 0; QSqlQuery query(_db); req = QString("SELECT amount FROM account_amount WHERE account='%1' AND month='%2' AND year='%3'") .arg(QString::number(id), QString::number(month), QString::number(year)) ; - EXECUTE_SQL_QUERY(req, 0.0); + EXECUTE_SQL_QUERY(req, 0); if (query.next()) { set = query.record(); - res = set.value("amount").toDouble(); + res = set.value("amount").toInt(); if (had_value) *had_value = true; } else { - SetAccountAmount(id, month, year, 0.0); + SetAccountAmount(id, month, year, 0); if (had_value) *had_value = false; } @@ -437,22 +428,22 @@ double Database::GetAccountAmount(int id, int month, int year, bool* had_value) return res; } -double Database::CalcAccountAmount(int id, int month, int year, bool* had_values) +int Database::CalcAccountAmount(int id, int month, int year, bool* had_values) { QSqlRecord set; QString req; - double res = 0.0; + int res = 0; QSqlQuery query(_db); req = QString("SELECT SUM(id) AS id, SUM(amount) AS amount FROM operation WHERE account='%1' AND month='%2' AND year='%3' AND meta='0'"). arg(QString::number(id), QString::number(month), QString::number(year)) ; - EXECUTE_SQL_QUERY(req, 0.0); + EXECUTE_SQL_QUERY(req, 0); if (query.next()) { set = query.record(); - res = set.value("amount").toDouble(); + res = set.value("amount").toInt(); if (had_values) *had_values = set.value("id").toInt() > 0 ; } @@ -525,7 +516,7 @@ void Database::LinkOrUnlinkOperation(User* user, Operation& op) query.clear(); req = QString("SELECT id, account FROM operation WHERE description=\"%1\" AND month='%2' AND year='%3' AND amount='%4' AND meta='0' AND account !='%5' AND transfert=''") - .arg(op.description, QString::number(op.month), QString::number(op.year), DoubleToString(-op.amount), QString::number(op.account)); + .arg(op.description, QString::number(op.month), QString::number(op.year), QString::number(-op.amount), QString::number(op.account)); EXECUTE_SQL_QUERY(req, ); @@ -577,7 +568,7 @@ void Database::UpdateOperation(User* user, Operation& op, bool checkTransfert) req = "UPDATE operation SET parent='%1', account='%2', year='%3', month='%4', day='%5', amount='%6', description=\"%7\", category='%8'" ; req = req.arg((op.parent) ? QString::number(op.parent) : "", QString::number(op.account), QString::number(op.year), QString::number(op.month), - QString::number(op.day), DoubleToString(op.amount), op.description, QString::number(op.category)); + QString::number(op.day), QString::number(op.amount), op.description, QString::number(op.category)); req += ", fix_cost='%1', checked='%2', transfert='%3', meta='%4', virtual='%5', formula='%6' WHERE id='%7'"; req = req.arg(QString::number(op.fix_cost), QString::number(op.checked), (op.transfert) ? QString::number(op.transfert): "", QString::number(op.meta), QString::number(op._virtual), op.formula, QString::number(op.id)); @@ -599,7 +590,7 @@ int Database::AddOperation(User* user, Operation& op, bool checkTransfert) req = "INSERT INTO operation ('user', 'parent', 'account', 'year', 'month', 'day', 'amount', 'description', 'category', 'fix_cost', 'formula', 'transfert', 'meta', 'virtual', 'checked') VALUES ('%1', '%2', '%3', '%4', '%5', '%6', '%7', '%8'" ; req = req.arg(QString::number(user->_id), (op.parent) ? QString::number(op.parent): "", QString::number(op.account), QString::number(op.year), - QString::number(op.month), QString::number(op.day), DoubleToString(op.amount), op.description); + QString::number(op.month), QString::number(op.day), QString::number(op.amount), op.description); req += ", '%1', '%2', '%3', '%4', '%5', '%6', '%7')"; req = req.arg(QString::number(op.category), QString::number(op.fix_cost), op.formula, (op.transfert) ? QString::number(op.transfert): "", QString::number(op.meta), QString::number(op._virtual), QString::number(op.checked)); @@ -715,11 +706,11 @@ bool Database::LoadOperation(User* user, int id) } // We may not have access to all operations if we have a shared account -double Database::MetaAmount(int id) +int Database::MetaAmount(int id) { QSqlRecord set; QString req; - double res = 0.0; + int res = 0; QSqlQuery query(_db); req = QString("SELECT SUM(amount) as amount FROM operation WHERE parent='%1'").arg(id); @@ -729,7 +720,7 @@ double Database::MetaAmount(int id) if (query.next()) { set = query.record(); - res = set.value("amount").toDouble(); + res = set.value("amount").toInt(); } query.clear(); @@ -738,11 +729,11 @@ double Database::MetaAmount(int id) } // Idem -double Database::MetaPositiveAmount(int id) +int Database::MetaPositiveAmount(int id) { QSqlRecord set; QString req; - double res = 0.0; + int res = 0; QSqlQuery query(_db); req = QString("SELECT SUM(amount) as amount FROM operation WHERE amount > 0 AND parent='%1'").arg(id); @@ -752,7 +743,7 @@ double Database::MetaPositiveAmount(int id) if (query.next()) { set = query.record(); - res = set.value("amount").toDouble(); + res = set.value("amount").toInt(); } query.clear(); @@ -760,13 +751,13 @@ double Database::MetaPositiveAmount(int id) return res; } -void Database::SetAccountAmount(int accountId, int month, int year, double amount) +void Database::SetAccountAmount(int accountId, int month, int year, int amount) { QString req; QSqlQuery query(_db); req = "INSERT or REPLACE INTO account_amount ('account', 'year', 'month', 'amount') VALUES ('%1', '%2', '%3', '%4')" ; - req = req.arg(QString::number(accountId), QString::number(year), QString::number(month), DoubleToString(amount)); + req = req.arg(QString::number(accountId), QString::number(year), QString::number(month), QString::number(amount)); EXECUTE_SQL_UPDATE(req, ); } @@ -1113,12 +1104,12 @@ void Database::GenerateMonth(User* user, int monthFrom, int yearFrom, int monthT std::vector::iterator it; QString req; QSqlRecord set; - double amount; + int amount; QSqlQuery query(_db); for (it = user->_accounts.begin(); it != user->_accounts.end(); it++) { - amount = 0.0; + amount = 0; req = "SELECT SUM(amount) AS total FROM operation WHERE account='%1' AND year='%2' AND month='%3' AND meta='0'" ; req = req.arg(QString::number(it->id), QString::number(yearFrom), QString::number(monthFrom)); @@ -1127,7 +1118,7 @@ void Database::GenerateMonth(User* user, int monthFrom, int yearFrom, int monthT if (query.next()) { set = query.record(); - amount += set.value("total").toDouble(); + amount += set.value("total").toInt(); } query.clear(); @@ -1140,14 +1131,14 @@ void Database::GenerateMonth(User* user, int monthFrom, int yearFrom, int monthT if (query.next()) { set = query.record(); - amount += set.value("amount").toDouble(); + amount += set.value("amount").toInt(); } query.clear(); req = "INSERT INTO account_amount ('account', 'year', 'month', 'amount') VALUES " ; req += "('%1', '%2', '%3', '%4')"; - req = req.arg(QString::number(it->id), QString::number(yearTo), QString::number(monthTo), DoubleToString(amount)); + req = req.arg(QString::number(it->id), QString::number(yearTo), QString::number(monthTo), QString::number(amount)); EXECUTE_SQL_UPDATE(req, ); } @@ -1253,7 +1244,7 @@ void Database::UpdatePreference(User* user, const QString& preference) } std::vector* Database::Search(User* user, QString* description, QDate* dateFrom, QDate* dateTo, - double* amountFrom, double* amountTo, + int* amountFrom, int* amountTo, std::vector categories, int types, std::vector accounts, bool wildcards) { QSqlRecord set; @@ -1423,8 +1414,8 @@ std::vector* Database::Search(User* user, QString* description, QDate } void Database::GetStats(User* user, int monthFrom, int yearFrom, int monthTo, - int yearTo, std::map > >* accountAmounts, - std::map* categories) + int yearTo, std::map > >* accountAmounts, + std::map* categories) { QSqlRecord set; QSqlQuery query(_db); @@ -1447,7 +1438,7 @@ void Database::GetStats(User* user, int monthFrom, int yearFrom, int monthTo, while (query.next()) { set = query.record(); - (*accountAmounts)[accountIt->id][set.value("year").toInt()][set.value("month").toInt()] = set.value("amount").toDouble(); + (*accountAmounts)[accountIt->id][set.value("year").toInt()][set.value("month").toInt()] = set.value("amount").toInt(); } query.clear(); } @@ -1480,7 +1471,7 @@ void Database::GetStats(User* user, int monthFrom, int yearFrom, int monthTo, if (query.next()) { set = query.record(); - (*categories)[categoryIt->id] = -set.value("amount").toDouble(); + (*categories)[categoryIt->id] = -set.value("amount").toInt(); } query.clear(); @@ -1494,7 +1485,7 @@ void Database::GetStats(User* user, int monthFrom, int yearFrom, int monthTo, if (query.next()) { set = query.record(); - (*categories)[categoryIt->id] += set.value("amount").toDouble(); + (*categories)[categoryIt->id] += set.value("amount").toInt(); } query.clear(); } @@ -1503,8 +1494,8 @@ void Database::GetStats(User* user, int monthFrom, int yearFrom, int monthTo, } void Database::GetMonthStats(User* user, int month, int year, int nbDays, - std::map >* operations, - std::map* categories) + std::map >* operations, + std::map* categories) { QSqlRecord set; QSqlQuery query(_db); @@ -1526,7 +1517,7 @@ void Database::GetMonthStats(User* user, int month, int year, int nbDays, set = query.record(); (*operations)[accountIt->id].clear(); - previous_amount = set.value("amount").toDouble(); + previous_amount = set.value("amount").toInt(); } query.clear(); @@ -1547,7 +1538,7 @@ void Database::GetMonthStats(User* user, int month, int year, int nbDays, previous_day++; } - previous_amount += set.value("amount").toDouble(); + previous_amount += set.value("amount").toInt(); (*operations)[accountIt->id][cur_day] = previous_amount; } query.clear(); @@ -1564,10 +1555,10 @@ void Database::GetMonthStats(User* user, int month, int year, int nbDays, GetStats(user, month, year, month, year, 0, categories) ; } -std::map* Database::GetNotChecked(User* user, int month, int year) +std::map* Database::GetNotChecked(User* user, int month, int year) { std::vector::iterator accountIt; - std::map* res = new std::map; + std::map* res = new std::map; QSqlRecord set; QSqlQuery query(_db); QString req; @@ -1587,7 +1578,7 @@ std::map* Database::GetNotChecked(User* user, int month, int year) if (query.next()) { set = query.record(); - (*res)[accountIt->id] = set.value("amount").toDouble(); + (*res)[accountIt->id] = set.value("amount").toInt(); } query.clear(); @@ -1596,10 +1587,10 @@ std::map* Database::GetNotChecked(User* user, int month, int year) return res; } -std::map* Database::GetVirtualAmount(User* user, int month, int year) +std::map* Database::GetVirtualAmount(User* user, int month, int year) { std::vector::iterator accountIt; - std::map* res = new std::map; + std::map* res = new std::map; QSqlRecord set; QSqlQuery query(_db); QString req; @@ -1619,7 +1610,7 @@ std::map* Database::GetVirtualAmount(User* user, int month, int yea if (query.next()) { set = query.record(); - (*res)[accountIt->id] = set.value("amount").toDouble(); + (*res)[accountIt->id] = set.value("amount").toInt(); } query.clear(); diff --git a/src/model/Database.hpp b/src/model/Database.hpp index 5f10cb8..22749f8 100644 --- a/src/model/Database.hpp +++ b/src/model/Database.hpp @@ -106,12 +106,12 @@ public: void DeleteOperation(User* user, Operation& op); void DeleteOperations(User* user, int month, int year); bool LoadOperation(User* user, int id); - double MetaAmount(int id); - double MetaPositiveAmount(int id); + int MetaAmount(int id); + int MetaPositiveAmount(int id); - double GetAccountAmount(int id, int month, int year, bool* had_value=NULL); - void SetAccountAmount(int accountId, int month, int year, double amount); - double CalcAccountAmount(int id, int month, int year, bool* had_values); + int GetAccountAmount(int id, int month, int year, bool* had_value=NULL); + void SetAccountAmount(int accountId, int month, int year, int amount); + int CalcAccountAmount(int id, int month, int year, bool* had_values); int AddAccount(User* user, Account& ac); void UpdateAccount(Account& ac); @@ -135,24 +135,24 @@ public: void UpdatePreference(User* user, const QString& preference); std::vector* Search(User* user, QString* description, QDate* dateFrom, QDate* dateTo, - double* amountFrom, double* amountTo, + int* amountFrom, int* amountTo, std::vector categories, int types, std::vector accounts, bool wildcards); void GetStats(User* user, int monthFrom, int yearFrom, int monthTo, - int yearTo, std::map > >* accountAmounts, - std::map* categories); + int yearTo, std::map > >* accountAmounts, + std::map* categories); void GetMonthStats(User* user, int month, int year, int nbDays, - std::map >* operations, - std::map* categories); + std::map >* operations, + std::map* categories); void KillMe(User* user); bool GetOperation(int id, Operation* op); std::map getSharedAccountOwners(int account); QString getSharedAccountOwner(int account); - std::map* GetNotChecked(User* user, int month, int year); - std::map* GetVirtualAmount(User* user, int month, int year); + std::map* GetNotChecked(User* user, int month, int year); + std::map* GetVirtualAmount(User* user, int month, int year); void UpdateImportPattern(User* user); diff --git a/src/model/Operation.hpp b/src/model/Operation.hpp index 6997a54..35c1e73 100644 --- a/src/model/Operation.hpp +++ b/src/model/Operation.hpp @@ -29,7 +29,7 @@ struct Operation { unsigned int day; unsigned int month; unsigned int year; - double amount; + int amount; QString description; int category; bool fix_cost; diff --git a/src/model/export/XMLExportEngine.cpp b/src/model/export/XMLExportEngine.cpp index 3fd3a27..31b1269 100644 --- a/src/model/export/XMLExportEngine.cpp +++ b/src/model/export/XMLExportEngine.cpp @@ -137,7 +137,7 @@ bool XMLExportEngine::SaveOperations(std::vector* operations) _writer->writeAttribute("day", QString::number(it->day)); _writer->writeAttribute("month", QString::number(it->month)); _writer->writeAttribute("year", QString::number(it->year)); - _writer->writeAttribute("amount", v.sprintf("%.2lf", it->amount)); + _writer->writeAttribute("amount", QString::number(it->amount)); _writer->writeAttribute("description", it->description); _writer->writeAttribute("category", QString::number(it->category)); _writer->writeAttribute("fix_cost", (it->fix_cost ? "1" : "0")); diff --git a/src/model/import/GrisbiImportEngine.cpp b/src/model/import/GrisbiImportEngine.cpp index 4fb56b1..ef596fa 100644 --- a/src/model/import/GrisbiImportEngine.cpp +++ b/src/model/import/GrisbiImportEngine.cpp @@ -114,7 +114,7 @@ void GrisbiImportEngine::LoadOperation(const QXmlAttributes& attrs) op.day = date.day(); op.month = date.month(); op.year = date.year(); - op.amount = attrs.value("Am").toDouble(); + op.amount = attrs.value("Am").toInt(); op.category = _categories[attrs.value("Ca").toInt()]; op.description = attrs.value("No"); diff --git a/src/model/import/ImportEngine.cpp b/src/model/import/ImportEngine.cpp index c4f55a6..8d1acb8 100644 --- a/src/model/import/ImportEngine.cpp +++ b/src/model/import/ImportEngine.cpp @@ -319,7 +319,7 @@ std::vector* ImportEngine::GetOperations(std::map& accounts return &_operations; } -const std::map& ImportEngine::GetAccountAmounts() +const std::map& ImportEngine::GetAccountAmounts() { return _accountAmounts; } diff --git a/src/model/import/ImportEngine.hpp b/src/model/import/ImportEngine.hpp index 2ae80e1..ee2964f 100644 --- a/src/model/import/ImportEngine.hpp +++ b/src/model/import/ImportEngine.hpp @@ -55,7 +55,7 @@ public: // Final Step virtual std::vector* GetOperations(std::map& accounts, std::map& categories); - const std::map& GetAccountAmounts(); + const std::map& GetAccountAmounts(); void MatchPattern(QString& key, Operation& op); int UpdatePattern(int pos); @@ -77,7 +77,7 @@ protected: std::vector _unresolvedCategories; std::vector _operations; std::map _descriptions; - std::map _accountAmounts; + std::map _accountAmounts; void ApplyPattern(ImportPattern& pattern, Operation& op); QString FindPattern(QString& s1, QString& s2); diff --git a/src/model/import/XMLImportEngine.cpp b/src/model/import/XMLImportEngine.cpp index 956fd1c..470dd7f 100644 --- a/src/model/import/XMLImportEngine.cpp +++ b/src/model/import/XMLImportEngine.cpp @@ -142,12 +142,12 @@ void XMLImportEngine::LoadAccount(const QXmlAttributes& attrs) void XMLImportEngine::LoadAccountAmount(const QXmlAttributes& attrs) { AccountAmount accountAmount; - double amount; + int amount; accountAmount.account = attrs.value("account").toInt(); accountAmount.month = attrs.value("month").toInt(); accountAmount.year = attrs.value("year").toInt(); - amount = attrs.value("amount").toDouble(); + amount = attrs.value("amount").toInt(); _accountAmounts[accountAmount] = amount; } @@ -210,7 +210,7 @@ void XMLImportEngine::LoadOperation(const QXmlAttributes& attrs) op.day = attrs.value("day").toInt(); op.month = attrs.value("month").toInt(); op.year = attrs.value("year").toInt(); - op.amount = attrs.value("amount").toDouble(); + op.amount = attrs.value("amount").toInt(); op.description = attrs.value("description"); op.category = attrs.value("category").toInt(); op.category = (attrs.value("fix_cost") == "1"); diff --git a/src/view/AccountPanel.cpp b/src/view/AccountPanel.cpp index 756d93c..a135d4b 100644 --- a/src/view/AccountPanel.cpp +++ b/src/view/AccountPanel.cpp @@ -110,7 +110,7 @@ void AccountPanel::Init(KissCount* kiss, wxUI *parent, int curMode) QVector< double > vec; vec << 0.0; _dataset = new QStandardItemModel(nbCategories, 2, this); - _categoriesValues = new double[nbCategories]; + _categoriesValues = new int[nbCategories]; for(i=0; i::iterator it; int curLine = 0; - double value; + int value; int i, nbAccounts; QTableWidgetItem* item; QString v; @@ -537,7 +537,7 @@ void AccountPanel::InitAccountsGrid(User* user, int month, int year) _accountsGrid->setItem(curLine, ACCOUNT_NAME, new QTableWidgetItem(it->name)); value = _kiss->GetAccountAmount(it->id, month, year); - _accountsGrid->setItem(curLine, ACCOUNT_INIT, new QTableWidgetItem(v.sprintf("%.2lf", value))); + _accountsGrid->setItem(curLine, ACCOUNT_INIT, new QTableWidgetItem(v.sprintf("%.2lf", (double)value/100))); _accountsGrid->setItem(curLine, ACCOUNT_CUR, new QTableWidgetItem("")); _accountsGrid->setItem(curLine, ACCOUNT_FINAL, new QTableWidgetItem("")); for (i=0; iGetUser(); std::vector::iterator it; - double curCredit, curDebit, totalCredit, totalDebit, balance, value, value2, percents; - std::map curAccountAmount, finalAccountAmount; - std::map::iterator doubleIt; + int curCredit, curDebit, totalCredit, totalDebit, balance, value, value2, percents; + std::map curAccountAmount, finalAccountAmount; std::map::iterator intIt; std::vector::iterator accountIt; unsigned int day; int mode; - std::map* notChecked = 0; - std::map* virtuals = 0; + std::map* notChecked = 0; + std::map* virtuals = 0; Account account; Operation op; bool blocked_account ; @@ -595,15 +594,15 @@ void AccountPanel::UpdateStats() for (i=0; iGetCategoriesNumber(); i++) _categoriesValues[i] = 0.0; - for (doubleIt=_accountsInitValues.begin(); doubleIt!=_accountsInitValues.end(); doubleIt++) + for (intIt=_accountsInitValues.begin(); intIt!=_accountsInitValues.end(); intIt++) { - curAccountAmount[doubleIt->first] = _accountsInitValues[doubleIt->first]; - finalAccountAmount[doubleIt->first] = _accountsInitValues[doubleIt->first]; + curAccountAmount[intIt->first] = _accountsInitValues[intIt->first]; + finalAccountAmount[intIt->first] = _accountsInitValues[intIt->first]; if (mode == REAL_MODE || mode == CHECK_MODE) { - curAccountAmount[doubleIt->first] += -(*virtuals)[doubleIt->first]; - finalAccountAmount[doubleIt->first] += -(*virtuals)[doubleIt->first]; + curAccountAmount[intIt->first] += -(*virtuals)[intIt->first]; + finalAccountAmount[intIt->first] += -(*virtuals)[intIt->first]; } } @@ -744,28 +743,28 @@ void AccountPanel::UpdateStats() } balance = totalCredit - totalDebit; - _statsGrid->item(CUR_CREDIT, 1)->setText(v.sprintf("%.2lf", curCredit)); - _statsGrid->item(CUR_DEBIT, 1)->setText(v.sprintf("%.2lf", curDebit)); - _statsGrid->item(TOTAL_CREDIT, 1)->setText(v.sprintf("%.2lf", totalCredit)); - _statsGrid->item(TOTAL_DEBIT, 1)->setText(v.sprintf("%.2lf", totalDebit)); + _statsGrid->item(CUR_CREDIT, 1)->setText(v.sprintf("%.2lf", (double)curCredit/100)); + _statsGrid->item(CUR_DEBIT, 1)->setText(v.sprintf("%.2lf", (double)curDebit/100)); + _statsGrid->item(TOTAL_CREDIT, 1)->setText(v.sprintf("%.2lf", (double)totalCredit/100)); + _statsGrid->item(TOTAL_DEBIT, 1)->setText(v.sprintf("%.2lf", (double)totalDebit/100)); - _statsGrid->item(BALANCE, 1)->setText(v.sprintf("%.2lf", balance)); + _statsGrid->item(BALANCE, 1)->setText(v.sprintf("%.2lf", (double)balance/100)); _statsGrid->item(BALANCE, 1)->setForeground((balance >= 0) ? QBrush(Qt::green) : QBrush(Qt::red)); // KDChart::Legend* legend = _pie->legend(); for(i=0; iGetCategoriesNumber(); i++) { if (totalDebit != 0) - percents = ((double) (_categoriesValues[i]*100))/totalDebit; + percents = (_categoriesValues[i]*100)/totalDebit; else percents = 0.0; if (i) - _statsGrid->item(CATS_STATS+i+1, 1)->setText(v.sprintf("%.2lf (%02d %%)", _categoriesValues[i], (int)percents)); + _statsGrid->item(CATS_STATS+i+1, 1)->setText(v.sprintf("%.2lf (%02d %%)", (double)_categoriesValues[i]/100, (int)percents)); else - _statsGrid->item(CATS_STATS+i, 1)->setText(v.sprintf("%.2lf (%02d %%)", _categoriesValues[i], (int)percents)); + _statsGrid->item(CATS_STATS+i, 1)->setText(v.sprintf("%.2lf (%02d %%)", (double)_categoriesValues[i]/100, (int)percents)); QVector< double > vec; - vec << _categoriesValues[i]; + vec << (double) _categoriesValues[i] / 100; _pie->setDataset( i, vec, _categories[i] ); // if (_categoriesValues[i] == 0.0) // legend->setDatasetHidden(i, true); @@ -776,10 +775,10 @@ void AccountPanel::UpdateStats() value = totalDebit - _categoriesValues[0]; if (totalDebit != 0) - percents = ((double) (value*100))/totalDebit; + percents = (value*100)/totalDebit; else percents = 0.0; - _statsGrid->item(NON_FIX, 1)->setText(v.sprintf("%.2lf (%02d %%)", value, (int)percents)); + _statsGrid->item(NON_FIX, 1)->setText(v.sprintf("%.2lf (%02d %%)", (double)value/100, (int)percents)); for (i=0, accountIt=user->_accounts.begin(); accountIt!=user->_accounts.end(); accountIt++, i++) { @@ -794,24 +793,24 @@ void AccountPanel::UpdateStats() value = _accountsInitValues[accountIt->id]; if (mode == REAL_MODE) value -= (*virtuals)[accountIt->id]; - _accountsGrid->item(i, ACCOUNT_INIT)->setText(v.sprintf("%.2lf", value)); + _accountsGrid->item(i, ACCOUNT_INIT)->setText(v.sprintf("%.2lf", (double)value/100)); value = curAccountAmount[accountIt->id]; - _accountsGrid->item(i, ACCOUNT_CUR)->setText(v.sprintf("%.2lf", value)); + _accountsGrid->item(i, ACCOUNT_CUR)->setText(v.sprintf("%.2lf", (double)value/100)); _accountsGrid->item(i, ACCOUNT_CUR)->setForeground((value >= 0) ? QBrush(Qt::black) : QBrush(Qt::red)); value = finalAccountAmount[accountIt->id]; - _accountsGrid->item(i, ACCOUNT_FINAL)->setText(v.sprintf("%.2lf", value)); + _accountsGrid->item(i, ACCOUNT_FINAL)->setText(v.sprintf("%.2lf", (double)value/100)); } else { value = _accountsInitValues[accountIt->id] - (*virtuals)[accountIt->id]; value2 = (*notChecked)[accountIt->id]; - _accountsGrid->item(i, ACCOUNT_INIT)->setText(v.sprintf("%.2lf (%.2lf)", value, value-value2)); + _accountsGrid->item(i, ACCOUNT_INIT)->setText(v.sprintf("%.2lf (%.2lf)", (double)value/100, (double)(value-value2)/100)); value = curAccountAmount[accountIt->id]; - _accountsGrid->item(i, ACCOUNT_CUR)->setText(v.sprintf("%.2lf (%.2lf)", value, value-value2)); + _accountsGrid->item(i, ACCOUNT_CUR)->setText(v.sprintf("%.2lf (%.2lf)", (double)value/100, (double)(value-value2)/100)); _accountsGrid->item(i, ACCOUNT_CUR)->setForeground((value >= 0) ? QBrush(Qt::black) : QBrush(Qt::red)); value = finalAccountAmount[accountIt->id]; - _accountsGrid->item(i, ACCOUNT_FINAL)->setText(v.sprintf("%.2lf (%.2lf)", value, value-value2)); + _accountsGrid->item(i, ACCOUNT_FINAL)->setText(v.sprintf("%.2lf (%.2lf)", (double)value/100, (double)(value-value2)/100)); } } @@ -846,7 +845,7 @@ void AccountPanel::OnAccountModified(int row, int column) amount = _accountsGrid->item(row, column)->text().toDouble(); - _kiss->SetAccountAmount(id, _curMonth, _curYear, amount); + _kiss->SetAccountAmount(id, _curMonth, _curYear, amount*100); _accountsInitValues[id] = amount; UpdateStats(); @@ -1130,15 +1129,15 @@ void AccountPanel::OnUnGroup() void AccountPanel::OnUpdateNextMonths() { - double* deltas, *cur_amounts, amount; + int* deltas, *cur_amounts, amount; int i, a; User* user = _kiss->GetUser(); bool had_values, accounts_updated = false; int last_month = 0, last_year = 0, account_updated = 0; std::map > operations; - deltas = new double[user->_accounts.size()] ; - cur_amounts = new double[user->_accounts.size()] ; + deltas = new int[user->_accounts.size()] ; + cur_amounts = new int[user->_accounts.size()] ; operations = _kiss->GetAllOperations(); diff --git a/src/view/AccountPanel.hpp b/src/view/AccountPanel.hpp index 79b0bd6..c128bfd 100644 --- a/src/view/AccountPanel.hpp +++ b/src/view/AccountPanel.hpp @@ -77,12 +77,12 @@ private: GridAccount* _grid; QTableWidget* _accountsGrid, *_statsGrid; KDChart::Widget* _pie; - double *_categoriesValues; + int *_categoriesValues; // wxRadioBox *_radioMode; std::map _categoriesIndexes; std::vector* _curOperations; QString* _categories, *_accounts; - std::map _accountsInitValues; + std::map _accountsInitValues; QStandardItemModel* _dataset; int _fixCosts; QRadioButton *_virtual, *_real, *_check; diff --git a/src/view/ImportPanel.cpp b/src/view/ImportPanel.cpp index 73858d7..e70a135 100644 --- a/src/view/ImportPanel.cpp +++ b/src/view/ImportPanel.cpp @@ -352,9 +352,9 @@ void ImportPanel::OnIntegrate() std::map mapid; int oldid, account; bool update; - std::map accountAmounts; - std::map::iterator it; - double amount; + std::map accountAmounts; + std::map::iterator it; + int amount; if (!_operations->size()) return; diff --git a/src/view/SearchBanner.cpp b/src/view/SearchBanner.cpp index c0d59f6..9e4d26f 100644 --- a/src/view/SearchBanner.cpp +++ b/src/view/SearchBanner.cpp @@ -118,7 +118,7 @@ SearchBanner::~SearchBanner() std::vector * SearchBanner::Search() { QString *description=0; - double *amountFrom=0, *amountTo=0; + int *amountFrom=0, *amountTo=0; std::vector categories, accounts; QDate *dateFrom=0, *dateTo=0; User* user= _kiss->GetUser(); @@ -152,8 +152,8 @@ std::vector * SearchBanner::Search() if (_amountFrom->text().length()) { - amountFrom = new double; - *amountFrom = _amountFrom->text().toDouble(&ok); + amountFrom = new int; + *amountFrom = _amountFrom->text().toInt(&ok); if (!ok) { QMessageBox::critical(0, _("Error"), _("Invalid amount from")); @@ -165,8 +165,8 @@ std::vector * SearchBanner::Search() if (_amountTo->text().length()) { - amountTo = new double; - *amountTo = _amountTo->text().toDouble(&ok); + amountTo = new int; + *amountTo = _amountTo->text().toInt(&ok); if (!ok) { QMessageBox::critical(0, _("Error"), _("Invalid amount to")); diff --git a/src/view/StatsPanel.cpp b/src/view/StatsPanel.cpp index ca7f016..a3a27f5 100644 --- a/src/view/StatsPanel.cpp +++ b/src/view/StatsPanel.cpp @@ -141,7 +141,7 @@ StatsPanel::StatsPanel(KissCount* kiss, wxUI *parent) : KissPanel(kiss, parent), nbCategories = user->GetCategoriesNumber(); // nbCategories = (user->GetCategoriesNumber() <= wxUI::MAX_CATEGORY) ? user->GetCategoriesNumber() : wxUI::MAX_CATEGORY; - _categoriesValues = new double[user->GetCategoriesNumber()]; + _categoriesValues = new int[user->GetCategoriesNumber()]; for(i=0; iGetCategoriesNumber(); i++) _categoriesValues[i] = 0.0; @@ -158,7 +158,7 @@ StatsPanel::StatsPanel(KissCount* kiss, wxUI *parent) : KissPanel(kiss, parent), legend->setTitleText(_("Cost repartition")); QVector< double > vec; vec << 0.0; - _categoriesValues = new double[nbCategories]; + _categoriesValues = new int[nbCategories]; for(i=0; i > > accountAmounts; - std::map categories; - std::map > operations; + std::map > > accountAmounts; + std::map categories; + std::map > operations; std::vector::iterator accountIt; - std::map::iterator categoriesIt; - std::map >::iterator accountYearIt; - double total, non_fix; + std::map::iterator categoriesIt; + std::map >::iterator accountYearIt; + int total, non_fix; int account, size, i, a, b, percents, nbDays; QString value, v; User* user = _kiss->GetUser(); @@ -262,7 +262,7 @@ void StatsPanel::UpdateStats(int monthFrom, int yearFrom, int monthTo, int yearT vec.clear(); for (a=0; aid][a]; + vec << (double) operations[accountIt->id][a] / 100; _plot->setDataset(++i, vec, user->GetAccountName(accountIt->id)); } @@ -314,13 +314,13 @@ void StatsPanel::UpdateStats(int monthFrom, int yearFrom, int monthTo, int yearT Compute cur month value (if there are operations) as next month value */ - vec << accountAmounts[accountIt->id][accountYearIt->first][b-1] - + _kiss->CalcAccountAmount(accountIt->id, b-1, accountYearIt->first, 0); + vec << (double) (accountAmounts[accountIt->id][accountYearIt->first][b-1] + + _kiss->CalcAccountAmount(accountIt->id, b-1, accountYearIt->first, 0)) / 100; failed = true; } else { - vec << accountAmounts[accountIt->id][accountYearIt->first][b]; + vec << (double) accountAmounts[accountIt->id][accountYearIt->first][b] / 100; failed = false; } size++; @@ -378,10 +378,10 @@ void StatsPanel::UpdateStats(int monthFrom, int yearFrom, int monthTo, int yearT { _categoriesValues[_categoriesIndexes[categoriesIt->first]] = categoriesIt->second; if (total) - percents = ((double) (categoriesIt->second*100))/total; + percents = (categoriesIt->second*100)/total; else percents = 0; - value = v.sprintf("%0.2lf (%02d%%)", categoriesIt->second, percents); + value = v.sprintf("%0.2lf (%02d%%)", (double) categoriesIt->second/100, percents); if (i) { _statsGrid->setItem(_categoriesIndexes[categoriesIt->first]+1, 1, new QTableWidgetItem(value)); @@ -393,17 +393,17 @@ void StatsPanel::UpdateStats(int monthFrom, int yearFrom, int monthTo, int yearT _statsGrid->item(_categoriesIndexes[categoriesIt->first], 1)->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter); } QVector< double > vec; - vec << _categoriesValues[_categoriesIndexes[categoriesIt->first]]; + vec << (double) _categoriesValues[_categoriesIndexes[categoriesIt->first]] / 100; _pie->setDataset(_categoriesIndexes[categoriesIt->first], vec, _categories[_categoriesIndexes[categoriesIt->first]]); } non_fix = total - _categoriesValues[0]; if (total) - percents = ((double) (non_fix*100))/total; + percents = (non_fix*100)/total; else percents = 0; - value = v.sprintf("%0.2lf (%02d%%)", non_fix, percents); + value = v.sprintf("%0.2lf (%02d%%)", (double)non_fix/100, percents); _statsGrid->setItem(1, 1, new QTableWidgetItem(value)); _statsGrid->resizeColumnsToContents(); diff --git a/src/view/StatsPanel.hpp b/src/view/StatsPanel.hpp index b278e1b..8a7b03f 100644 --- a/src/view/StatsPanel.hpp +++ b/src/view/StatsPanel.hpp @@ -47,7 +47,7 @@ private: QComboBox* _monthFrom, *_yearFrom, *_monthTo, *_yearTo; QTableWidget *_statsGrid; KDChart::Widget* _pie; - double *_categoriesValues; + int *_categoriesValues; //CategorySimpleDataset* _dataset; KDChart::Widget *_plot ; QString* _categories; diff --git a/src/view/grid/GridAccount.cpp b/src/view/grid/GridAccount.cpp index b408d1c..c06a7e9 100644 --- a/src/view/grid/GridAccount.cpp +++ b/src/view/grid/GridAccount.cpp @@ -335,7 +335,7 @@ void GridAccount::InsertOperation(User* user, Operation& op, int line, bool fix, std::vector::iterator it; std::vector::iterator it2; int r, g, b; - double amount; + int amount; QColor color; QDate curDate = QDate::currentDate(); QString description, v; @@ -377,10 +377,10 @@ void GridAccount::InsertOperation(User* user, Operation& op, int line, bool fix, setItem(line, OP_DATE, new QTableWidgetItem(_kiss->FormatDate(op.day+1, month+1, year))); if (op.amount < 0) { - setItem(line, DEBIT, new QTableWidgetItem(v.sprintf("%.2lf", -op.amount))); + setItem(line, DEBIT, new QTableWidgetItem(v.sprintf("%.2lf", (double)-op.amount/100))); } else - setItem(line, CREDIT, new QTableWidgetItem(v.sprintf("%.2lf", op.amount))); + setItem(line, CREDIT, new QTableWidgetItem(v.sprintf("%.2lf", (double)op.amount/100))); if (!op.meta) setItem(line, ACCOUNT, new QTableWidgetItem(user->GetAccountName(op.account))); @@ -403,8 +403,8 @@ void GridAccount::InsertOperation(User* user, Operation& op, int line, bool fix, { amount = _kiss->MetaPositiveAmount(op.id); - setItem(line, DEBIT, new QTableWidgetItem(v.sprintf("%.2lf", amount))); - setItem(line, CREDIT, new QTableWidgetItem(v.sprintf("%.2lf", amount))); + setItem(line, DEBIT, new QTableWidgetItem(v.sprintf("%.2lf", (double)amount/100))); + setItem(line, CREDIT, new QTableWidgetItem(v.sprintf("%.2lf", (double)amount/100))); } if (op.category) @@ -871,7 +871,7 @@ void GridAccount::OnOperationModified(int row, int col) unsigned char r, g, b; std::vector::iterator it; Operation op, op2; - double amount; + int amount; QFont font; Category cat ; bool fix_cost; @@ -945,11 +945,11 @@ void GridAccount::OnOperationModified(int row, int col) value = item(row, DEBIT)->text(); if (value.length()) { - new_op.amount = value.toDouble(); + new_op.amount = value.toDouble()*100; if (new_op.amount < 0) { new_op.amount *= -1.0; - setItem(row, DEBIT, new QTableWidgetItem(value.sprintf("%.2lf", new_op.amount))); + setItem(row, DEBIT, new QTableWidgetItem(value.sprintf("%.2lf", (double)new_op.amount/100))); } if (new_op.amount != 0.0) new_op.amount *= -1.0; op_complete--; @@ -959,11 +959,11 @@ void GridAccount::OnOperationModified(int row, int col) value = item(row, CREDIT)->text(); if (value.length()) { - new_op.amount = value.toDouble(); + new_op.amount = value.toDouble()*100; if (new_op.amount < 0) { new_op.amount *= -1.0; - setItem(row, DEBIT, new QTableWidgetItem(value.sprintf("%.2lf", new_op.amount))); + setItem(row, DEBIT, new QTableWidgetItem(value.sprintf("%.2lf", (double)new_op.amount/100))); } op_complete--; new_op.formula = _displayedOperations[row].formula; @@ -1131,20 +1131,20 @@ void GridAccount::OnOperationModified(int row, int col) { amount = _kiss->MetaPositiveAmount(new_op.id); - setItem(row, DEBIT, new QTableWidgetItem(v.sprintf("%.2lf", amount))); - setItem(row, CREDIT, new QTableWidgetItem(v.sprintf("%.2lf", amount))); + setItem(row, DEBIT, new QTableWidgetItem(v.sprintf("%.2lf", (double)amount/100))); + setItem(row, CREDIT, new QTableWidgetItem(v.sprintf("%.2lf", (double)amount/100))); } else { if (_displayedOperations[row].amount < 0) { - setItem(row, DEBIT, new QTableWidgetItem(v.sprintf("%.2lf", -new_op.amount))); + setItem(row, DEBIT, new QTableWidgetItem(v.sprintf("%.2lf", (double)-new_op.amount/100))); setItem(row, CREDIT, new QTableWidgetItem("")); } else { setItem(row, DEBIT, new QTableWidgetItem("")); - setItem(row, CREDIT, new QTableWidgetItem(v.sprintf("%.2lf", new_op.amount))); + setItem(row, CREDIT, new QTableWidgetItem(v.sprintf("%.2lf", (double)new_op.amount/100))); } }