README.md 8.57 KB
Newer Older
Stephane Mankowski's avatar
Stephane Mankowski committed
1
2
3
4
5
6
7
8
9
10
11
# A personal finances manager, powered by KDE

<img src="https://skrooge.org/sites/skrooge.org/files/images/header1.png" title="Juk logo">

Skrooge allows you to manage your personal finances, powered by [KDE](http://www.kde.org). Thanks to its many [features](https://skrooge.org/features), it is one of the most powerful way to enter, follow, and analyze your expenses.

Based on its KDE foundations, Skrooge can run on many platforms, including of course linux, BSD, Solaris, but also on Mac OS, and possibly on Windows.

Learn more about [skrooge.org](https://skrooge.org/).

## Features
Stephane Mankowski's avatar
krazy2    
Stephane Mankowski committed
12

Stephane Mankowski's avatar
Stephane Mankowski committed
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
### Import your accounts from many sources

Skrooge is able to import transactions from many formats (AFB120, QIF, CSV, MT940, OFX, QFX).  
For a more reach import, Skrooge is able to import documents from many applications ([KMYMONEY](https://kmymoney.org/), Microsoft Money, [GNUCASH](http://gnucash.org/), [GRISBI](http://fr.grisbi.org/), [HOMEBANK](http://homebank.free.fr/fr/index.php) and [MONEY MANAGER EX](https://www.moneymanagerex.org/)).

And better, Skrooge is able to import directly transactions from all your banks web sites in one click.

### Reporting

Build the graph you want to well undestand how your spend your money.  
Have a look to the periodic reports (monthly, annually, ...) to undestand the progress.  
Have a quick look on the dashboard.  
Skrooge is also able to give you advice based on your behavior.  

### Like in a web browser

Several tabs to help you organize your work.  
Bookmark your preferred reports, graphs, filters, pages, ...

### Budget

Budgeting isn’t about restriction. It’s about setting and reaching your goals. Skrooge can help you to manage your budgets by putting in places simples rules.

### Classical features

Infinite categories levels.  
Scheduled operations.  
Multi currencies.  
Manage payees.

### Advanced features

Infinite undo/redo (even after the file was closed !)  
Mass update of operations.  
Automatically process operations based on search conditions.  
Instant filtering on operations and reports.  
Download of quotes.  
Add all properties you want on all objets (transactions, accounts, categories, ...) and including files (pdf, pictures, ...).

### Track refund of your expenses

Skrooge can help you to check that you have received the expected refund (e.g. medical).
Stephane Mankowski's avatar
krazy2    
Stephane Mankowski committed
55

Stephane Mankowski's avatar
Stephane Mankowski committed
56
## How to install it:
Stephane Mankowski's avatar
krazy2    
Stephane Mankowski committed
57

Stephane Mankowski's avatar
Stephane Mankowski committed
58
59
60
61
62
63
64
65
66
67
68
69
70
More information here: [https://skrooge.org/download](https://skrooge.org/download)

## How to build it:

### Install prerequisits:

 - xsltproc
 - libgrantlee5-dev (>=5.0.0)
 - libsqlite3-dev (>=3.7.0)
 - libofx-dev 
 - libboost-dev 
 - qtscript5-dev
 - qttools5-dev
71
72
 - libqt5webkit5-dev  (If you want to build with WebKit. You must not activate the option SKG_WEBENGINE) (**Preferred and default**)
 - libqt5webengine5-dev (If you want to build with WebEngine. You must activate the option SKG_WEBKIT)
Stephane Mankowski's avatar
Stephane Mankowski committed
73
74
75
76
77
78
79
80
81
82
83
84
 - libqt5svg5-dev
 - libkf5coreaddons-dev
 - libkf5archive-dev
 - libkf5xmlgui-dev
 - libkf5wallet-dev
 - libkf5parts-dev
 - libkf5newstuff-dev
 - libkf5iconthemes-dev 
 - libkf5kdelibs4support-dev
 - libkf5notifyconfig-dev  	
 - libkf5runner-dev  
 - plasma-framework-dev  
85
 - libkf5doctools-dev  	
Stephane Mankowski's avatar
Stephane Mankowski committed
86
87
88
89
 - kgendesignerplugin 
 - libqca-qt5-2-dev 
 - libkf5activities-dev
 - kross-dev 
Stephane Mankowski's avatar
Stephane Mankowski committed
90
 - qtdeclarative5-dev
91
 - qtquickcontrols2-5-dev
Stephane Mankowski's avatar
Stephane Mankowski committed
92
93
 - libsqlcipher-dev
 - sqlcipher
94
 - kirigami2-dev
Stephane Mankowski's avatar
Stephane Mankowski committed
95

96
	
Stephane Mankowski's avatar
Stephane Mankowski committed
97
#### Examples:
Stephane Mankowski's avatar
krazy2    
Stephane Mankowski committed
98

Stephane Mankowski's avatar
Stephane Mankowski committed
99
100
On ubuntu:

Stephane Mankowski's avatar
Stephane Mankowski committed
101
    sudo apt-get install pkg-config build-essential cmake devscripts cdbs extra-cmake-modules kross-dev sqlite3 sqlcipher libsqlcipher-dev libgrantlee5-dev libsqlite3-dev libofx-dev libboost-dev xsltproc qtscript5-dev qttools5-dev libqt5webkit5-dev libqt5svg5-dev libkf5coreaddons-dev libkf5archive-dev libkf5xmlgui-dev libkf5activities-dev libkf5wallet-dev libkf5parts-dev libkf5newstuff-dev libkf5iconthemes-dev libkf5kdelibs4support-dev libkf5notifyconfig-dev libkf5runner-dev libkf5doctools-dev kgendesignerplugin libqca-qt5-2-dev qtbase5-private-dev qtquickcontrols2-5-dev kirigami2-dev libkf5plasma-dev qtwebengine5-dev qtdeclarative5-dev libqt5xmlpatterns5-dev
102

Stephane Mankowski's avatar
Stephane Mankowski committed
103
### Extract the archive, and enter the "skrooge" directory. Then run :
Stephane Mankowski's avatar
krazy2    
Stephane Mankowski committed
104

Stephane Mankowski's avatar
Stephane Mankowski committed
105
106
	mkdir build && cd build
        cmake .. -DCMAKE_INSTALL_PREFIX=[path to your KDE installation]
107
108
	make

Stephane Mankowski's avatar
Stephane Mankowski committed
109
#### Examples:
Stephane Mankowski's avatar
krazy2    
Stephane Mankowski committed
110

Stephane Mankowski's avatar
Stephane Mankowski committed
111
112
On ubuntu:

Stephane Mankowski's avatar
Stephane Mankowski committed
113
		mkdir build && cd build
Stephane Mankowski's avatar
Stephane Mankowski committed
114
                cmake .. -DCMAKE_INSTALL_PREFIX=`kf5-config --prefix` -DCMAKE_BUILD_TYPE=release -DCMAKE_EXPORT_COMPILE_COMMANDS=1 -DSKG_WEBENGINE=OFF -DSKG_BUILD_TEST=OFF -DSKG_DESIGNER=OFF 
115
		make
Stephane Mankowski's avatar
Stephane Mankowski committed
116
		
Stephane Mankowski's avatar
Stephane Mankowski committed
117
118
119

On ubuntu (with ninja):

Stephane Mankowski's avatar
Stephane Mankowski committed
120
		mkdir build && cd build
121
                                                                                                                                                                                                                                                                release -DCMAKE_EXPORT_COMPILE_COMMANDS=1 -DSKG_WEBENGINE=OFF -DSKG_WEBKIT=ON -DSKG_BUILD_TEST=OFF -DSKG_DESIGNER=OFF 
Stephane Mankowski's avatar
Stephane Mankowski committed
122
123
124
		make
        
        
125

Stephane Mankowski's avatar
Stephane Mankowski committed
126
### Prepare to run
Stephane Mankowski's avatar
krazy2    
Stephane Mankowski committed
127

Stephane Mankowski's avatar
Stephane Mankowski committed
128
129
130
131
        Skrooge uses plugins. By default, plugins are loaded from your system. It means that, if you have a local build of Skrooge and an other version of Skrooge installed on your system. The system version of plugins will be loaded.
        The easiest solution is to install your local build like this:
                make install (as root)
                
Stephane Mankowski's avatar
Stephane Mankowski committed
132
#### Examples:
Stephane Mankowski's avatar
krazy2    
Stephane Mankowski committed
133

Stephane Mankowski's avatar
Stephane Mankowski committed
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
On ubuntu:

    sudo make install 

If you don't want to install Skrooge on your system, you will have to set many Qt and Kde environment variables before running skrooge. This is not easy to do.

### Run the test

    ctest

#### Run skrooge

    /usr/bin/skrooge
    
## Other important thinks to remember

### For Static code analysis (scan-build)

    CXX=clang++ CC=clang scan-build -k cmake .. -DCMAKE_INSTALL_PREFIX=`kf5-config --prefix` -DCMAKE_BUILD_TYPE=profile
    make clean
    scan-build -k -o results make

### With sanitizer (-fno-omit-frame-pointer )

Stephane Mankowski's avatar
Stephane Mankowski committed
158
    cmake .. -DCMAKE_INSTALL_PREFIX=`kf5-config --prefix` -DCMAKE_BUILD_TYPE=profile -DECM_ENABLE_SANITIZERS='undefined,address,asan,ubsan'
Stephane Mankowski's avatar
Stephane Mankowski committed
159
160
161
    export ASAN_OPTIONS=detect_leaks=1

### With clazy
Stephane Mankowski's avatar
Stephane Mankowski committed
162

Stephane Mankowski's avatar
Stephane Mankowski committed
163
    export CXX="clazy"
Stephane Mankowski's avatar
Stephane Mankowski committed
164
    export CLAZY_CHECKS="level0,level1,level2"
Stephane Mankowski's avatar
Stephane Mankowski committed
165
    export CLAZY_FIXIT="fix-qlatin1string-allocations,fix-fromLatin1_fromUtf8-allocations,fix-fromCharPtrAllocations"
Stephane Mankowski's avatar
Stephane Mankowski committed
166
    cmake .. -DCMAKE_CXX_COMPILER=clazy -DCMAKE_INSTALL_PREFIX=`kf5-config --prefix` -DCMAKE_BUILD_TYPE=Debug
167
    
Stephane Mankowski's avatar
Stephane Mankowski committed
168
169
170
171
172
173
174
    make clean
    make -i > t.txt 2>&1
    cat t.txt | grep "warning:" | grep -v "ui_" | grep -v "moc_" | grep -v "_settings" |grep -v "/usr/include" | grep -v "FixIt failed" | grep -v ".moc:" | grep -v "/build/" | sort -u > warning_all.txt 
    cat warning_all.txt | grep -v "ctor-missing-parent-argument" | grep -v "clazy-copyable-polymorphic" | sort -u > warning.txt 

### With clazy-standalone

Stephane Mankowski's avatar
Stephane Mankowski committed
175
    cmake .. -DCMAKE_INSTALL_PREFIX=`kf5-config --prefix` -DCMAKE_BUILD_TYPE=release -DCMAKE_EXPORT_COMPILE_COMMANDS=1 
Stephane Mankowski's avatar
Stephane Mankowski committed
176
    make
Stephane Mankowski's avatar
Stephane Mankowski committed
177
    find . -name "*cpp" | xargs clazy-standalone -checks=level0,level1,level2 -p compile_commands.json > t.txt 2>&1
Stephane Mankowski's avatar
Stephane Mankowski committed
178
179
180
181
182
183
184
185
186
187
    cat t.txt | grep "warning:" | grep -v "ui_" | grep -v "moc_" | grep -v "_settings" |grep -v "/usr/include" | grep -v "FixIt failed" | sort -u > warning.txt

### clang-tidy

    run-clang-tidy.py -header-filter='.*' -checks=*,-fuchsia-*,-objc-*,-android-*,-abseil-*,-google-*,-misc-unused-parameters,-clang-diagnostic-error,-cppcoreguidelines-pro-type-member-init,-llvm-header-guard,-readability-inconsistent-declaration-parameter-name,-readability-redundant-member-init -fix > traces.txt
     
    cat traces.txt | grep warning  | grep -v ui_ | grep  -v /build/ | grep -v "clang-tidy -header" | sort -u > clangtidy.txt

### With coverity

Stephane Mankowski's avatar
Stephane Mankowski committed
188
    export PATH=~/Telechargements/cov-analysis-linux64-2022.6.0/bin/:$PATH
Stephane Mankowski's avatar
Stephane Mankowski committed
189
190
191
192
193
194
195
196
197
198
199
200
201
202
    make clean
    cov-build --dir cov-int make -j 4
    tar caf skrooge.bz2 cov-int

### iwyu

    iwyu_tool.py -p .

### Docker

    sudo docker build -t skrooge .
    sudo docker run -e DISPLAY=unix$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix skrooge

### Flatpak
Stephane Mankowski's avatar
krazy2    
Stephane Mankowski committed
203

204
[https://community.kde.org/Guidelines_and_HOWTOs/Flatpak]
Stephane Mankowski's avatar
Stephane Mankowski committed
205

206
#### Build
Stephane Mankowski's avatar
krazy2    
Stephane Mankowski committed
207

Stephane Mankowski's avatar
Stephane Mankowski committed
208
    mkdir app repo
209
210
    flatpak install flathub org.kde.Platform//5.12
    flatpak install flathub org.kde.Sdk//5.12
211
    flatpak install flathub io.qt.qtwebkit.BaseApp//5.12
212
    flatpak-builder --ccache --repo=repo --subject="Build of skrooge `date`" skrooge org.kde.skrooge.json --force-clean
213
214
    
#### Install
Stephane Mankowski's avatar
krazy2    
Stephane Mankowski committed
215

216
217
    flatpak uninstall org.kde.skrooge
    flatpak install skrooge org.kde.skrooge
218
219
    
#### Run    
Stephane Mankowski's avatar
krazy2    
Stephane Mankowski committed
220

221
    flatpak run org.kde.skrooge
222
223
    
#### Debug    
Stephane Mankowski's avatar
krazy2    
Stephane Mankowski committed
224

225
    flatpak run --command=sh --devel org.kde.skrooge
Stephane Mankowski's avatar
Stephane Mankowski committed
226

Stephane Mankowski's avatar
Stephane Mankowski committed
227
### Convert all logo in 100x100
Stephane Mankowski's avatar
Stephane Mankowski committed
228

Stephane Mankowski's avatar
Stephane Mankowski committed
229
230
231
232
    for x in /home/s/Developpements/skrooge/images/logos/*.png
    do
        convert $x -resize 100x100 $x
    done