1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
#include "transactionmodel.h"
#include <QDebug>
#include <QStringList>
#include <QtSql>
TransactionModel::TransactionModel(QObject *parent)
: QSqlQueryModel(parent)
{
Q_UNUSED(parent);
refresh();
}
void TransactionModel::refresh() {
setQuery(
"SELECT t.id, t.date, t.amount||' '||t.currency, c.name, t.description "
"FROM transactions t "
"LEFT JOIN contra_accounts c ON c.id = t.contra "
"ORDER BY t.date DESC"
);
setHeaderData(0, Qt::Horizontal, "ID");
setHeaderData(1, Qt::Horizontal, "Date");
setHeaderData(2, Qt::Horizontal, "Amount");
setHeaderData(3, Qt::Horizontal, "Contra account");
setHeaderData(4, Qt::Horizontal, "Description");
}
QVariant TransactionModel::data(const QModelIndex &index, int role) const
{
QVariant val = QSqlQueryModel::data(index, role);
if(role == Qt::DisplayRole && index.column() == 2) {
QStringList v = val.toString().split(" ");
return QString("%1 %2").arg(v.at(0).toDouble()/100, 4, 'f', 2).arg(v.at(1));
}
if(role == Qt::ForegroundRole && index.column() == 2) {
double dat = QSqlQueryModel::data(index, Qt::DisplayRole).toString().split(" ").at(0).toDouble();
return dat > 0 ? Qt::green : Qt::red;
}
if(role == Qt::TextAlignmentRole) {
switch(index.column()) {
case 0: return (int)Qt::AlignVCenter|Qt::AlignRight;
case 1: return (int)Qt::AlignVCenter|Qt::AlignLeft;
case 2: return (int)Qt::AlignVCenter|Qt::AlignRight;
case 3: return (int)Qt::AlignVCenter|Qt::AlignLeft;
case 4: return (int)Qt::AlignVCenter|Qt::AlignLeft;
}
}
return val;
}
|