summaryrefslogtreecommitdiff
path: root/transactionmodel.cpp
blob: 59143e0e7584f25fe8296f652ca576851fc48d3f (plain)
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;
}