All Values are now in fix point

This commit is contained in:
Grégory Soutadé 2012-04-30 21:15:51 +02:00
parent 12cc163459
commit 7c932e4f75
19 changed files with 165 additions and 174 deletions

View File

@ -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

View File

@ -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));

View File

@ -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<Operation>* KissCount::Search(QString* description, QDate* dateFrom, QDate* dateTo,
double* amountFrom, double* amountTo,
int* amountFrom, int* amountTo,
std::vector<int> categories, int types, std::vector<int> 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<int, std::map<int, std::map<int, double> > >* accountAmounts,
std::map<int, double>* categories)
std::map<int, std::map<int, std::map<int, int> > >* accountAmounts,
std::map<int, int>* categories)
{
_db->GetStats(_user, monthFrom, yearFrom, monthTo, yearTo, accountAmounts, categories);
}
void KissCount::GetMonthStats(int month, int year, int nbDays,
std::map<int, std::vector<double> >* operations,
std::map<int, double>* categories)
std::map<int, std::vector<int> >* operations,
std::map<int, int>* categories)
{
_db->GetMonthStats(_user, month, year, nbDays, operations, categories);
}
@ -476,12 +476,12 @@ void KissCount::UpdateStats()
_wxUI->UpdateStats();
}
std::map<int, double>* KissCount::GetNotChecked(int month, int year)
std::map<int, int>* KissCount::GetNotChecked(int month, int year)
{
return _db->GetNotChecked(_user, month, year);
}
std::map<int, double>* KissCount::GetVirtualAmount(int month, int year)
std::map<int, int>* KissCount::GetVirtualAmount(int month, int year)
{
return _db->GetVirtualAmount(_user, month, year);
}

View File

@ -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<Operation>* Search(QString* description, QDate* dateFrom, QDate* dateTo,
double* amountFrom, double* amountTo,
int* amountFrom, int* amountTo,
std::vector<int> categories, int types, std::vector<int> 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<int, std::map<int, std::map<int, double> > >* accountAmounts,
std::map<int, double>* categories);
std::map<int, std::map<int, std::map<int, int> > >* accountAmounts,
std::map<int, int>* categories);
void GetMonthStats(int month, int year, int nbDays,
std::map<int, std::vector<double> >* operations,
std::map<int, double>* categories);
std::map<int, std::vector<int> >* operations,
std::map<int, int>* categories);
void UpdateStats();
std::map<int, double>* GetNotChecked(int month, int year);
std::map<int, double>* GetVirtualAmount(int month, int year);
std::map<int, int>* GetNotChecked(int month, int year);
std::map<int, int>* GetVirtualAmount(int month, int year);
static QFont ExtractFont(QString);
static QString CompactFont(const QFont& font);

View File

@ -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<Account>::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<Operation>* Database::Search(User* user, QString* description, QDate* dateFrom, QDate* dateTo,
double* amountFrom, double* amountTo,
int* amountFrom, int* amountTo,
std::vector<int> categories, int types, std::vector<int> accounts, bool wildcards)
{
QSqlRecord set;
@ -1423,8 +1414,8 @@ std::vector<Operation>* Database::Search(User* user, QString* description, QDate
}
void Database::GetStats(User* user, int monthFrom, int yearFrom, int monthTo,
int yearTo, std::map<int, std::map<int, std::map<int, double> > >* accountAmounts,
std::map<int, double>* categories)
int yearTo, std::map<int, std::map<int, std::map<int, int> > >* accountAmounts,
std::map<int, int>* 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<int, std::vector<double> >* operations,
std::map<int, double>* categories)
std::map<int, std::vector<int> >* operations,
std::map<int, int>* 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<int, double>* Database::GetNotChecked(User* user, int month, int year)
std::map<int, int>* Database::GetNotChecked(User* user, int month, int year)
{
std::vector<Account>::iterator accountIt;
std::map<int, double>* res = new std::map<int, double>;
std::map<int, int>* res = new std::map<int, int>;
QSqlRecord set;
QSqlQuery query(_db);
QString req;
@ -1587,7 +1578,7 @@ std::map<int, double>* 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<int, double>* Database::GetNotChecked(User* user, int month, int year)
return res;
}
std::map<int, double>* Database::GetVirtualAmount(User* user, int month, int year)
std::map<int, int>* Database::GetVirtualAmount(User* user, int month, int year)
{
std::vector<Account>::iterator accountIt;
std::map<int, double>* res = new std::map<int, double>;
std::map<int, int>* res = new std::map<int, int>;
QSqlRecord set;
QSqlQuery query(_db);
QString req;
@ -1619,7 +1610,7 @@ std::map<int, double>* 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();

View File

@ -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<Operation>* Search(User* user, QString* description, QDate* dateFrom, QDate* dateTo,
double* amountFrom, double* amountTo,
int* amountFrom, int* amountTo,
std::vector<int> categories, int types, std::vector<int> accounts, bool wildcards);
void GetStats(User* user, int monthFrom, int yearFrom, int monthTo,
int yearTo, std::map<int, std::map<int, std::map<int, double> > >* accountAmounts,
std::map<int, double>* categories);
int yearTo, std::map<int, std::map<int, std::map<int, int> > >* accountAmounts,
std::map<int, int>* categories);
void GetMonthStats(User* user, int month, int year, int nbDays,
std::map<int, std::vector<double> >* operations,
std::map<int, double>* categories);
std::map<int, std::vector<int> >* operations,
std::map<int, int>* categories);
void KillMe(User* user);
bool GetOperation(int id, Operation* op);
std::map<QString, QString> getSharedAccountOwners(int account);
QString getSharedAccountOwner(int account);
std::map<int, double>* GetNotChecked(User* user, int month, int year);
std::map<int, double>* GetVirtualAmount(User* user, int month, int year);
std::map<int, int>* GetNotChecked(User* user, int month, int year);
std::map<int, int>* GetVirtualAmount(User* user, int month, int year);
void UpdateImportPattern(User* user);

View File

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

View File

@ -137,7 +137,7 @@ bool XMLExportEngine::SaveOperations(std::vector<Operation>* 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"));

View File

@ -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");

View File

@ -319,7 +319,7 @@ std::vector<Operation>* ImportEngine::GetOperations(std::map<int, int>& accounts
return &_operations;
}
const std::map<AccountAmount, double, AccountAmount>& ImportEngine::GetAccountAmounts()
const std::map<AccountAmount, int, AccountAmount>& ImportEngine::GetAccountAmounts()
{
return _accountAmounts;
}

View File

@ -55,7 +55,7 @@ public:
// Final Step
virtual std::vector<Operation>* GetOperations(std::map<int, int>& accounts, std::map<int, int>& categories);
const std::map<AccountAmount, double, AccountAmount>& GetAccountAmounts();
const std::map<AccountAmount, int, AccountAmount>& GetAccountAmounts();
void MatchPattern(QString& key, Operation& op);
int UpdatePattern(int pos);
@ -77,7 +77,7 @@ protected:
std::vector<Category> _unresolvedCategories;
std::vector<Operation> _operations;
std::map<int, QString> _descriptions;
std::map<AccountAmount, double, AccountAmount> _accountAmounts;
std::map<AccountAmount, int, AccountAmount> _accountAmounts;
void ApplyPattern(ImportPattern& pattern, Operation& op);
QString FindPattern(QString& s1, QString& s2);

View File

@ -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");

View File

@ -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<nbCategories; i++)
{
_categoriesValues[i] = 0.0;
@ -486,7 +486,7 @@ void AccountPanel::InitAccountsGrid(User* user, int month, int year)
{
std::vector<Account>::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; i<NUMBER_COLS_ACCOUNTS; i++)
@ -562,15 +562,14 @@ void AccountPanel::UpdateStats()
int i;
User* user = _kiss->GetUser();
std::vector<Operation>::iterator it;
double curCredit, curDebit, totalCredit, totalDebit, balance, value, value2, percents;
std::map<int, double> curAccountAmount, finalAccountAmount;
std::map<int, double>::iterator doubleIt;
int curCredit, curDebit, totalCredit, totalDebit, balance, value, value2, percents;
std::map<int, int> curAccountAmount, finalAccountAmount;
std::map<int, int>::iterator intIt;
std::vector<Account>::iterator accountIt;
unsigned int day;
int mode;
std::map<int, double>* notChecked = 0;
std::map<int, double>* virtuals = 0;
std::map<int, int>* notChecked = 0;
std::map<int, int>* virtuals = 0;
Account account;
Operation op;
bool blocked_account ;
@ -595,15 +594,15 @@ void AccountPanel::UpdateStats()
for (i=0; i<user->GetCategoriesNumber(); 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; i<user->GetCategoriesNumber(); 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<int, std::vector<int> > 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();

View File

@ -77,12 +77,12 @@ private:
GridAccount* _grid;
QTableWidget* _accountsGrid, *_statsGrid;
KDChart::Widget* _pie;
double *_categoriesValues;
int *_categoriesValues;
// wxRadioBox *_radioMode;
std::map<QString, int> _categoriesIndexes;
std::vector<Operation>* _curOperations;
QString* _categories, *_accounts;
std::map<int, double> _accountsInitValues;
std::map<int, int> _accountsInitValues;
QStandardItemModel* _dataset;
int _fixCosts;
QRadioButton *_virtual, *_real, *_check;

View File

@ -352,9 +352,9 @@ void ImportPanel::OnIntegrate()
std::map<int, int> mapid;
int oldid, account;
bool update;
std::map<AccountAmount, double, AccountAmount> accountAmounts;
std::map<AccountAmount, double, AccountAmount>::iterator it;
double amount;
std::map<AccountAmount, int, AccountAmount> accountAmounts;
std::map<AccountAmount, int, AccountAmount>::iterator it;
int amount;
if (!_operations->size()) return;

View File

@ -118,7 +118,7 @@ SearchBanner::~SearchBanner()
std::vector<Operation> * SearchBanner::Search()
{
QString *description=0;
double *amountFrom=0, *amountTo=0;
int *amountFrom=0, *amountTo=0;
std::vector<int> categories, accounts;
QDate *dateFrom=0, *dateTo=0;
User* user= _kiss->GetUser();
@ -152,8 +152,8 @@ std::vector<Operation> * 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<Operation> * 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"));

View File

@ -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; i<user->GetCategoriesNumber(); 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<nbCategories; i++)
{
_categoriesValues[i] = 0.0;
@ -217,13 +217,13 @@ QString StatsPanel::GetToolTip()
void StatsPanel::UpdateStats(int monthFrom, int yearFrom, int monthTo, int yearTo)
{
std::map<int, std::map<int, std::map<int, double> > > accountAmounts;
std::map<int, double> categories;
std::map<int, std::vector<double> > operations;
std::map<int, std::map<int, std::map<int, int> > > accountAmounts;
std::map<int, int> categories;
std::map<int, std::vector<int> > operations;
std::vector<Account>::iterator accountIt;
std::map<int, double>::iterator categoriesIt;
std::map<int, std::map<int, double> >::iterator accountYearIt;
double total, non_fix;
std::map<int, int>::iterator categoriesIt;
std::map<int, std::map<int, int> >::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; a<nbDays; a++)
vec << operations[accountIt->id][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();

View File

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

View File

@ -335,7 +335,7 @@ void GridAccount::InsertOperation(User* user, Operation& op, int line, bool fix,
std::vector<Operation>::iterator it;
std::vector<QString>::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<int>::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();