aboutsummaryrefslogtreecommitdiff
path: root/cashflow.h
blob: 9de01ae09adeed24d26c00ef91f0ff8c62074e04 (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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#ifndef CASHFLOW_H
#define CASHFLOW_H

#include <QMainWindow>
#include <QTableWidget>
#include <QDate>
#include "database.h"
#include "transaction.h"

QT_BEGIN_NAMESPACE
namespace Ui { class CashFlow; }
QT_END_NAMESPACE

class CashFlow : public QMainWindow
{
    Q_OBJECT

public:
    CashFlow(QWidget *parent = nullptr);
    ~CashFlow();

private slots:
    void onDateRangeChanged();
    void onTransactionSelected();
    void onSaveTransaction();
    void onTransactionFieldChanged();
    void onNewTransaction();
    void onDeleteTransaction();
    void onRecurringSelected();
    void onSaveRecurring();
    void onNewRecurring();
    void onDeleteRecurring();
    void onPeriodChanged();
    
private:
    Ui::CashFlow *ui;
    Database *database;
    int currentTransactionId;
    int currentRecurringId;
    double startingBalance;
    QFont currentAmountFont;
    
    enum PeriodType {
        Daily,
        Weekly,
        Monthly,
        Quarterly
    };
    
    void setupConnections();
    void refreshView();
    void refreshTransactionTable();
    void refreshRecurringTable();
    void calculateAndDisplayBalance();
    QList<Transaction> getAllTransactionsInRange();
    QList<Transaction> generateProjectedTransactions();
    void clearTransactionEntry();
    void loadTransactionToEntry(const Transaction &t);
    void clearRecurringEntry();
    void loadRecurringToEntry(const RecurringRule &r);
    QDate getPeriodEnd(const QDate &date, PeriodType periodType);
    QDate getPeriodStart(const QDate &date, PeriodType periodType);
    QString getPeriodLabel(const QDate &date, PeriodType periodType, int count);
    void insertPeriodEndRow(const QString &label, double balance, const QMap<QString, double> &accountBalances);
    void updateAmountColors();
    void loadSettings();
    void applySettings();
    void onSaveSettings();
    void onChooseAmountFont();
    QString formatCurrency(double amount) const;
};
#endif // CASHFLOW_H