gnucash2bmd 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/history.md +5 -0
- data/lib/gnucash2bmd.rb +77 -10
- data/lib/gnucash2bmd/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e31559ee180d73a140b98f2bdf6af15f466d4647
|
4
|
+
data.tar.gz: 67afd43f223ba20cc44727893c9ef3946333a898
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2273ce89f5b71c54a8a795c9f7b616768dd945eaea8545ff66d5e9624fa7d723375ec1c4c108a4260a4e79bdc31a8dd84bf9a6524436b481c863ae917ec63c4e
|
7
|
+
data.tar.gz: e8997043870bbefa0a93f886cf287f2a217d1c52b6a7c969cccfb773894662763bc0c0bbe00f0cbd24abd8bba735f9c08a5d3d58a2a765ca2f94a4317a280a42
|
data/history.md
CHANGED
data/lib/gnucash2bmd.rb
CHANGED
@@ -46,7 +46,7 @@ files_read = [
|
|
46
46
|
|
47
47
|
AUSGABE = opts[:ausgabe]
|
48
48
|
GNUCASH = opts[:gnucash]
|
49
|
-
DATE_FORMAT= '%
|
49
|
+
DATE_FORMAT= '%d.%m.%Y'
|
50
50
|
|
51
51
|
KONTEN_GNUCASH_HEADERS = {
|
52
52
|
'type' => nil,
|
@@ -83,6 +83,26 @@ KONTEN_JOURNAL_HEADERS = {
|
|
83
83
|
Mandant_ID = 1
|
84
84
|
|
85
85
|
BANK_GUIDS ||= {}
|
86
|
+
NOTWNDIG = %(
|
87
|
+
Notwendige Felder für den BuErf Import:
|
88
|
+
Grundsätzlich alle Felder, die Sie auch beim "manuellen" Buchen in der Buchungsmaske eingeben:
|
89
|
+
Konto Führendes Buchungskonto
|
90
|
+
Gkonto Gegenkonto
|
91
|
+
Belegnr Belegnummer, Rechnungsnummer
|
92
|
+
Buchdatum Buchungsdatum
|
93
|
+
Belegdatum Belegdatum, Rechnungsdatum
|
94
|
+
Buchcode Code, ob Soll oder Haben
|
95
|
+
Betrag Buchungsbetrag für führendes Konto
|
96
|
+
Text Buchungstext
|
97
|
+
|
98
|
+
Buchsymbol Buchungssymbol AR
|
99
|
+
Steuercode Code, ob Vorsteuer oder Umsatzsteuer usw.
|
100
|
+
Prozent Steuerprozentsatz
|
101
|
+
Steuer Steuerbetrag
|
102
|
+
ZZiel Nettozahlungsziel in Tagen
|
103
|
+
Skontopz Skontoprozentsatz
|
104
|
+
Skontotage Skontozahlungsziel in Tagen
|
105
|
+
)
|
86
106
|
IDS = {
|
87
107
|
:satzart => 'satzart',
|
88
108
|
# :mandant => 'Mandats-IDs',
|
@@ -91,10 +111,28 @@ KONTEN_JOURNAL_HEADERS = {
|
|
91
111
|
:konto => 'konto',
|
92
112
|
:gkonto => 'gkonto',
|
93
113
|
:buchdatum => 'buchdatum',
|
94
|
-
:
|
114
|
+
:belegdatum => 'belegdatum',
|
115
|
+
:buchungstext => 'text',
|
95
116
|
:betrag => 'betrag',
|
96
117
|
:belegnr => 'belegnr',
|
97
118
|
:buchcode => 'buchcode',
|
119
|
+
|
120
|
+
:buchsymbol => 'buchsymbol',
|
121
|
+
:steuercode => 'steuercode',
|
122
|
+
:prozent => 'prozent',
|
123
|
+
:steuer => 'steuer',
|
124
|
+
:zziel => 'zziel',
|
125
|
+
:skontopz => 'skontopz',
|
126
|
+
:skontotage => 'skontotage',
|
127
|
+
}
|
128
|
+
DEFAULTS = {
|
129
|
+
:buchsymbol => 'AR',
|
130
|
+
:steuercode => '0,0',
|
131
|
+
:prozent => '0,0',
|
132
|
+
:steuer => '0,0',
|
133
|
+
:zziel => '30',
|
134
|
+
:skontopz => '0,0',
|
135
|
+
:skontotage => '10',
|
98
136
|
}
|
99
137
|
BMD_LINE = eval("Struct.new( :#{IDS.keys.join(', :')})")
|
100
138
|
class BMD_LINE
|
@@ -116,7 +154,6 @@ KONTEN_JOURNAL_HEADERS = {
|
|
116
154
|
end
|
117
155
|
new_id = BANK_GUIDS.size + 1
|
118
156
|
BANK_GUIDS[new_id] = konto_bezeichung
|
119
|
-
new_id
|
120
157
|
end
|
121
158
|
def Helpers.get_ids_sorted_by_value
|
122
159
|
IDS.sort_by.reverse_each{ |k, v| v }.to_h
|
@@ -155,6 +192,7 @@ def read_journal(filename)
|
|
155
192
|
@mehrteilig = nil
|
156
193
|
@buchungs_nr = 0 # Will be added by column Aktion
|
157
194
|
puts "reading journal from #{filename}"
|
195
|
+
konto = KONTEN_JOURNAL_HEADERS.values.index('konto')
|
158
196
|
CSV.foreach(filename) do |row|
|
159
197
|
line_nr += 1
|
160
198
|
if line_nr == 1
|
@@ -201,6 +239,10 @@ end
|
|
201
239
|
def check_cmd(filename)
|
202
240
|
nr_rows = nil
|
203
241
|
idx = 0
|
242
|
+
konto_row = IDS.keys.index(:konto)
|
243
|
+
gkonto_row = IDS.keys.index(:gkonto)
|
244
|
+
guid_row = IDS.keys.index(:bank_guid)
|
245
|
+
belegnr_row = IDS.keys.index(:belegnr)
|
204
246
|
CSV.foreach(filename, :col_sep => ';') do |row|
|
205
247
|
idx += 1
|
206
248
|
nr_rows ||= row.size
|
@@ -209,6 +251,25 @@ def check_cmd(filename)
|
|
209
251
|
puts " #{row}"
|
210
252
|
exit 2
|
211
253
|
end
|
254
|
+
next if idx == 1
|
255
|
+
if row[belegnr_row]
|
256
|
+
value = row[belegnr_row]
|
257
|
+
raise "Zeile #{idx} für Beleg-Nr '#{value}' darf maximal 20 Zeichen lang sein (ist #{value.length})." if value.length > 20
|
258
|
+
raise "Zeile #{idx} für Beleg-Nr '#{value}' muss alphanumerisch sein." unless /^[a-z0-9]+$/i.match(value)
|
259
|
+
end
|
260
|
+
if row[guid_row]
|
261
|
+
value = row[guid_row]
|
262
|
+
raise "Zeile #{idx} für GUID '#{value}' darf maximal 36 Zeichen lang sein (ist #{value.length})." if value.length > 36
|
263
|
+
raise "Zeile #{idx} für GUID '#{value}' muss alphanumerisch sein." unless /^[a-z0-9]+$/i.match(value)
|
264
|
+
end
|
265
|
+
if row[gkonto_row]
|
266
|
+
value = row[gkonto_row]
|
267
|
+
raise "Zeile #{idx} für Gkonto '#{value}' muss eine Zeile angegeben werden" unless value.to_i > 0 && value.size < 10
|
268
|
+
end
|
269
|
+
if row[konto_row]
|
270
|
+
value = row[konto_row]
|
271
|
+
raise "Zeile #{idx} für Konto '#{value}' muss eine Zeile angegeben werden" unless value.to_i > 0 && value.size < 10
|
272
|
+
end
|
212
273
|
end
|
213
274
|
puts "Alle #{idx} Zeilen von #{filename} haben #{nr_rows} Elemente"
|
214
275
|
rescue => error
|
@@ -237,8 +298,8 @@ def read_gnucash(filename)
|
|
237
298
|
book = Gnucash.open(filename)
|
238
299
|
book.accounts.each do |account|
|
239
300
|
bmd = BMD_LINE.new
|
240
|
-
|
241
|
-
bmd.bank_guid = account.id
|
301
|
+
bmd.bank_guid = Helpers.search_bank_guid(account.id)
|
302
|
+
# bmd.bank_guid = account.id
|
242
303
|
bmd.name = account.name
|
243
304
|
bmd.name_voll = account.full_name
|
244
305
|
bmd.account_nr = account.description
|
@@ -264,11 +325,17 @@ def read_gnucash(filename)
|
|
264
325
|
@last_transaction_date = @buchung.buchdatum if !@last_transaction_date || @last_transaction_date < @buchung.buchdatum
|
265
326
|
@first_transaction_date = @buchung.buchdatum if !@first_transaction_date || @first_transaction_date > @buchung.buchdatum
|
266
327
|
@buchung.buchungstext = txn.description
|
267
|
-
@buchung.belegnr = txn.id
|
328
|
+
@buchung.belegnr = @buchungs_nr # txn.id ist 32 Zeichen lang. Ungültig!!
|
329
|
+
@buchung.belegdatum = @buchung.buchdatum
|
330
|
+
DEFAULTS.each do |key, value|
|
331
|
+
cmd = "@buchung.#{key} = '#{value}'"
|
332
|
+
eval cmd
|
333
|
+
end
|
334
|
+
|
268
335
|
|
269
336
|
if txn.splits.size == 2
|
270
|
-
@buchung.konto = txn.splits.first[:account].id
|
271
|
-
@buchung.gkonto = txn.splits.last[:account].id
|
337
|
+
@buchung.konto = Helpers.search_bank_guid(txn.splits.first[:account].id)
|
338
|
+
@buchung.gkonto = Helpers.search_bank_guid(txn.splits.last[:account].id)
|
272
339
|
@buchung.betrag = txn.splits.first[:value]
|
273
340
|
@buchung.buchcode = getBuchcode(txn.splits.first[:value])
|
274
341
|
@contents << @buchung
|
@@ -288,12 +355,12 @@ def read_gnucash(filename)
|
|
288
355
|
end if $VERBOSE
|
289
356
|
txn.splits.each_with_index do |split, idx|
|
290
357
|
if txn.value.to_s.eql?(split[:value].to_s)
|
291
|
-
@buchung.konto = split[:account].id
|
358
|
+
@buchung.konto = Helpers.search_bank_guid(split[:account].id)
|
292
359
|
@buchung.betrag = split[:value]
|
293
360
|
@buchung.buchcode = getBuchcode(split[:value])
|
294
361
|
else
|
295
362
|
gegenbuchung = @buchung.clone
|
296
|
-
gegenbuchung.gkonto = split[:account].id
|
363
|
+
gegenbuchung.gkonto = Helpers.search_bank_guid(split[:account].id)
|
297
364
|
gegenbuchung.betrag = split[:value]
|
298
365
|
gegenbuchung.buchcode = getBuchcode(split[:value])
|
299
366
|
gegenbuchungen << gegenbuchung
|
data/lib/gnucash2bmd/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gnucash2bmd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Niklaus Giger
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-05-
|
11
|
+
date: 2017-05-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: trollop
|