papierkram_api_client 0.1.2 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +5 -0
- data/CHANGELOG.md +24 -1
- data/Gemfile +1 -1
- data/Gemfile.lock +5 -5
- data/README.md +164 -56
- data/lib/papierkram_api/client.rb +92 -0
- data/lib/papierkram_api/v1/business_intelligence/base.rb +23 -0
- data/lib/papierkram_api/v1/business_intelligence/expenses_by_category.rb +98 -0
- data/lib/papierkram_api/v1/business_intelligence/smart_queries/expense_vouchers_for_month_in_year.rb +58 -0
- data/lib/papierkram_api/v1/endpoints/banking/bank_connections.rb +30 -0
- data/lib/papierkram_api/v1/endpoints/banking/transactions.rb +20 -0
- data/lib/papierkram_api/v1/endpoints/base.rb +77 -0
- data/lib/papierkram_api/v1/endpoints/contact/companies.rb +30 -0
- data/lib/papierkram_api/v1/endpoints/contact/companies_persons.rb +28 -0
- data/lib/papierkram_api/v1/endpoints/expense/vouchers.rb +45 -0
- data/lib/papierkram_api/v1/endpoints/income/estimates.rb +46 -0
- data/lib/papierkram_api/v1/endpoints/income/invoices.rb +46 -0
- data/lib/papierkram_api/v1/endpoints/income/propositions.rb +20 -0
- data/lib/papierkram_api/v1/endpoints/info.rb +14 -0
- data/lib/papierkram_api/v1/endpoints/projects.rb +26 -0
- data/lib/papierkram_api/v1/endpoints/tracker/tasks.rb +33 -0
- data/lib/papierkram_api/v1/endpoints/tracker/time_entries.rb +62 -0
- data/lib/papierkram_api/v1/helper/date_helper.rb +14 -0
- data/lib/{api → papierkram_api}/v1/helper/pdf_from_response.rb +1 -1
- data/lib/papierkram_api/v1/validators/expense_voucher.rb +105 -0
- data/lib/papierkram_api_client/version.rb +1 -1
- data/lib/papierkram_api_client.rb +21 -102
- metadata +22 -16
- data/lib/api/v1/banking/bank_connections.rb +0 -28
- data/lib/api/v1/banking/transactions.rb +0 -18
- data/lib/api/v1/base.rb +0 -75
- data/lib/api/v1/contact/companies.rb +0 -28
- data/lib/api/v1/contact/companies_persons.rb +0 -26
- data/lib/api/v1/expense/vouchers.rb +0 -44
- data/lib/api/v1/income/estimates.rb +0 -44
- data/lib/api/v1/income/invoices.rb +0 -44
- data/lib/api/v1/income/propositions.rb +0 -18
- data/lib/api/v1/info.rb +0 -12
- data/lib/api/v1/projects.rb +0 -24
- data/lib/api/v1/tracker/tasks.rb +0 -31
- data/lib/api/v1/tracker/time_entries.rb +0 -59
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c428355fa2303fe4086587e47b981b46eac42c498ea84cb2ada942b8b926e1d1
|
4
|
+
data.tar.gz: 63f9f3524d98be430356ebc7e19bc344a0e388f9b99c71dcd4303a7427fd0635
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c4a0d1e8ae94400e56919997bd82daa69cec0ee3b3e6c26d0525e952c6f075238effe6a589c7217c4d89658ec7e2c41c61159b06362898cf4aed7c7f50399103
|
7
|
+
data.tar.gz: b9abc76a4a14af64eaaa07f98e925a164b1474c40e4a618830966c269c3bccb4f28d8334a07b1ea4672b295e6f3d1ef6808bbbae6147bef4b211b0776bda200c
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,27 @@
|
|
1
|
-
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
## [0.2.0] - 2023-04-18
|
4
|
+
|
5
|
+
Das Namespacing hat sich geändert. Die Klasse `PapierkramApiClient` ist jetzt `PapierkramApi::Client`.
|
6
|
+
|
7
|
+
Bitte schaue für Details in die upgedatete Dokumentation in [README.md](README.md) und passe gegebenenfalls deinen Code an.
|
8
|
+
|
9
|
+
### Changed
|
10
|
+
|
11
|
+
- [#19](https://github.com/simonneutert/papierkram_api_client/pull/19) Bump rubocop from 1.50.1 to 1.50.2. [@simonneutert](https://github.com/simonneutert)
|
12
|
+
- [#18](https://github.com/simonneutert/papierkram_api_client/pull/18) Stub basic business intelligence module. [@simonneutert](https://github.com/simonneutert)
|
13
|
+
|
14
|
+
## [0.1.3] - 2023-04-15
|
15
|
+
|
16
|
+
Solltest du diesen Client mithilfe von Umgebungsvariablen einrichten, musst du deinen Code aktualisieren, um die neuen Variablen zu verwenden. Siehe `.env.sample` für die aktualisierten Variablen.
|
17
|
+
|
18
|
+
- `PAPIERKRAM_SUBDOMAIN` ist jetzt `PAPIERKRAM_API_SUBDOMAIN`
|
19
|
+
|
20
|
+
### Changed
|
21
|
+
|
22
|
+
[#17](https://github.com/simonneutert/papierkram_api_client/pull/17) tests expense vouchers endpoint and parameters. [@simonneutert](https://github.com/simonneutert)
|
23
|
+
|
24
|
+
## [0.1.2] - 2023-04-13
|
2
25
|
|
3
26
|
### Fixed
|
4
27
|
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
papierkram_api_client (0.
|
4
|
+
papierkram_api_client (0.2.0)
|
5
5
|
faraday (~> 2.7)
|
6
6
|
httpx (~> 0.22.5)
|
7
7
|
|
@@ -34,16 +34,16 @@ GEM
|
|
34
34
|
method_source (~> 1.0)
|
35
35
|
rainbow (3.1.1)
|
36
36
|
rake (13.0.6)
|
37
|
-
regexp_parser (2.
|
37
|
+
regexp_parser (2.8.0)
|
38
38
|
rexml (3.2.5)
|
39
|
-
rubocop (1.
|
39
|
+
rubocop (1.50.2)
|
40
40
|
json (~> 2.3)
|
41
41
|
parallel (~> 1.10)
|
42
42
|
parser (>= 3.2.0.0)
|
43
43
|
rainbow (>= 2.2.2, < 4.0)
|
44
44
|
regexp_parser (>= 1.8, < 3.0)
|
45
45
|
rexml (>= 3.2.5, < 4.0)
|
46
|
-
rubocop-ast (>= 1.
|
46
|
+
rubocop-ast (>= 1.28.0, < 2.0)
|
47
47
|
ruby-progressbar (~> 1.7)
|
48
48
|
unicode-display_width (>= 2.4.0, < 3.0)
|
49
49
|
rubocop-ast (1.28.0)
|
@@ -66,7 +66,7 @@ DEPENDENCIES
|
|
66
66
|
papierkram_api_client!
|
67
67
|
pry (~> 0.14.2)
|
68
68
|
rake (~> 13.0)
|
69
|
-
rubocop (~> 1.
|
69
|
+
rubocop (~> 1.50)
|
70
70
|
rubocop-minitest (~> 0.30.0)
|
71
71
|
vcr (~> 6.1)
|
72
72
|
|
data/README.md
CHANGED
@@ -4,16 +4,30 @@
|
|
4
4
|
|
5
5
|
Der erste ~~illegale~~ inoffizielle API Client in [Ruby](https://www.ruby-lang.org/de/) für [Papierkram.de](https://www.papierkram.de)!
|
6
6
|
|
7
|
+
### Hol mehr aus deinen Daten raus! Dieser Client bietet dir bald einige Features im Bereich [Business Intelligence](#business-intelligence)!<!-- omit in toc -->
|
8
|
+
|
9
|
+
---
|
10
|
+
|
7
11
|
<img src="pac.svg" alt="PAC Logo, Zunge leckt an Karl Klammer und zieht Daten aus dem Papierkram-Account wie Frosch die Fliege vom Teich" width="300">
|
8
12
|
|
13
|
+
Hol dir den [Papierkram API Client](https://rubygems.org/gems/papierkram_api_client) als [Ruby Gem](https://rubygems.org/gems/papierkram_api_client)!
|
14
|
+
|
15
|
+
---
|
16
|
+
|
17
|
+
**WERBUNG** (es ist ein Aufruf zur Mitarbeit 🫠)
|
18
|
+
JETZT NEU! Ohne Lack und frei von Glamour!
|
19
|
+
Das Gleiche, nur in grün, also für [NodeJS](https://github.com/simonneutert/papierkram-api-client). Und als Mega-Baustelle 😬
|
20
|
+
|
21
|
+
---
|
22
|
+
|
9
23
|
**WICHTIG** Dieses Projekt befindet sich im Entwicklungsstatus bis V1.0.0! Ich werde versuchen, die Änderungen so gut wie möglich zu dokumentieren. Wenn du einen Fehler findest, kannst du gerne einen Issue erstellen oder einen Pull Request mit einer Verbesserung erstellen. Ich freue mich über jede Hilfe!
|
10
24
|
|
11
25
|
> 🚨 **Bitte beachte**, dass DU UNBEDINGT die Requests/Responses der VCR Cassettes (die ausschliesslich bei Nutzung der Testsuite angelegt werden) von privaten Daten befreien musst, bevor du einen Pull Request erstellst oder einen Commit ins Web lädst! Ich werde die Cassettes auch nochmal durchgehen, bevor ich die Version 1.0.0 veröffentliche. ABER BITTE, BITTE, BITTE, mach das selbst auch! Ich habe keine Lust, dass irgendwelche Daten von dir oder deinen Kunden auf Github landen. Danke! 🙏
|
12
26
|
|
13
27
|
Check das [CHANGELOG.md](CHANGELOG.md), Baby!
|
14
28
|
|
15
|
-
|
16
|
-
https://DEINE-SUBDOMAIN.papierkram.de/
|
29
|
+
Hier geht es zu den offiziellen API Docs
|
30
|
+
https://DEINE-SUBDOMAIN.papierkram.de/papierkram_api/v1/api-docs/index.html
|
17
31
|
(wenn du bereits ein Papierkram-Konto hast).
|
18
32
|
Schau bitte dort um alle Rückgabefelder/-werte zu checken, bis ich die Dokumentation hier komplett habe.
|
19
33
|
|
@@ -38,7 +52,7 @@ Aktuell unterstützte Endpunkte / Objekte:
|
|
38
52
|
|
39
53
|
## Was, wie, warum?<!-- omit in toc -->
|
40
54
|
|
41
|
-
Papierkram.de hat nun endlich eine API Schnittstelle für die Programmierung von eigenen Anwendungen. Die Dokumentation findest du hier: [https://DEINE-SUBDOMAIN.papierkram.de/
|
55
|
+
Papierkram.de hat nun endlich eine API Schnittstelle für die Programmierung von eigenen Anwendungen. Die Dokumentation findest du hier: [https://DEINE-SUBDOMAIN.papierkram.de/papierkram_api/v1/api-docs/index.html](https://DEINE-SUBDOMAIN.papierkram.de/papierkram_api/v1/api-docs/index.html). Dieses Projekt soll eine einfache Schnittstelle für die Papierkram API bereitstellen.
|
42
56
|
|
43
57
|
Ziele:
|
44
58
|
|
@@ -88,6 +102,10 @@ Ziele:
|
|
88
102
|
- [alle Zeiteinträge](#alle-zeiteinträge)
|
89
103
|
- [einen Zeiteintrag](#einen-zeiteintrag)
|
90
104
|
- [Verbleibendes Quota](#verbleibendes-quota)
|
105
|
+
- [Business Intelligence](#business-intelligence)
|
106
|
+
- [Business::Intelligence (BI) ExpenseByCategory (Ausgaben nach Kategorie)](#businessintelligence-bi-expensebycategory-ausgaben-nach-kategorie)
|
107
|
+
- [alle Ausgaben eines Monats nach Kategorie](#alle-ausgaben-eines-monats-nach-kategorie)
|
108
|
+
- [alle Ausgaben eines Monats nach Kategorie gefiltert nach Steuersatz](#alle-ausgaben-eines-monats-nach-kategorie-gefiltert-nach-steuersatz)
|
91
109
|
- [Helpers](#helpers)
|
92
110
|
- [Generiere ein PDF aus Response](#generiere-ein-pdf-aus-response)
|
93
111
|
- [Development](#development)
|
@@ -114,10 +132,10 @@ If bundler is not being used to manage dependencies, install the gem by executin
|
|
114
132
|
# client instanziieren
|
115
133
|
|
116
134
|
# wenn ENV gesetzt sind (siehe Readme)
|
117
|
-
client =
|
135
|
+
client = PapierkramApi::Client.new
|
118
136
|
|
119
137
|
# ODER per Variablen
|
120
|
-
client =
|
138
|
+
client = PapierkramApi::Client.new('subdomain', "YOUR-API-KEY");
|
121
139
|
|
122
140
|
# info Endpunkt abfragen
|
123
141
|
info_details = client.info.details
|
@@ -134,41 +152,44 @@ puts invoices.body
|
|
134
152
|
|
135
153
|
Der API Client ist die Hauptklasse für die Kommunikation mit der Papierkram API. Er wird mit den Zugangsdaten initialisiert.
|
136
154
|
|
137
|
-
[Client](
|
155
|
+
[Client](lib/papierkram_api/client.rb)
|
138
156
|
|
139
157
|
Wenn du etwas hinter die Kulissen sehen willst, schau dir diese [Faraday](https://github.com/lostisland/faraday) Klasse an [Faraday::Response](https://github.com/lostisland/faraday/blob/main/lib/faraday/response.rb).
|
140
158
|
|
141
|
-
|
142
159
|
### Initialisierung
|
143
160
|
|
144
161
|
Entweder werden die Zugangsdaten als Argumente übergeben:
|
145
162
|
|
146
163
|
```ruby
|
147
164
|
# usage with subdomain and api key
|
148
|
-
client =
|
165
|
+
client = PapierkramApi::Client.new('subdomain', "SUPER-LONG-API-KEY")
|
149
166
|
```
|
150
167
|
|
151
|
-
Oder es werden die Umgebungsvariablen `
|
168
|
+
Oder es werden die Umgebungsvariablen `PAPIERKRAM_API_SUBDOMAIN` und `PAPIERKRAM_API_KEY` gesetzt und der Client ohne Argumente initialisiert.
|
152
169
|
|
153
170
|
```ruby
|
154
171
|
# usage with environment variables
|
155
|
-
client =
|
172
|
+
client = PapierkramApi::Client.new
|
156
173
|
```
|
157
174
|
|
158
175
|
### Banking::BankConnection (Bankverbindung)
|
159
176
|
|
160
|
-
Der Endpunkt `/
|
177
|
+
Der Endpunkt `/papierkram_api/v1/endpoints/banking/bank_connections` liefert Informationen über die Bankverbindungen. Die Informationen werden als `Faraday::Response` zurückgegeben.
|
161
178
|
|
162
|
-
Siehe [BankConnections](
|
179
|
+
Siehe [BankConnections](lib/papierkram_api/v1/endpoints/banking/bank_connections.rb) für mögliche Parameter.
|
163
180
|
|
164
181
|
#### alle Bankverbindungen
|
165
182
|
|
166
183
|
```ruby
|
167
|
-
bank_connections = client.
|
184
|
+
bank_connections = client.banking_bank_connections.all
|
168
185
|
puts bank_connections.headers
|
169
186
|
puts bank_connections.body
|
170
187
|
```
|
171
188
|
|
189
|
+
<details>
|
190
|
+
|
191
|
+
<summary>Response</summary>
|
192
|
+
|
172
193
|
```ruby
|
173
194
|
# body
|
174
195
|
{
|
@@ -186,14 +207,20 @@ puts bank_connections.body
|
|
186
207
|
}
|
187
208
|
```
|
188
209
|
|
210
|
+
</details>
|
211
|
+
|
189
212
|
#### eine Bankverbindung
|
190
213
|
|
191
214
|
```ruby
|
192
|
-
bank_connection = client.
|
215
|
+
bank_connection = client.banking_bank_connections.by(id: 1)
|
193
216
|
puts bank_connection.headers
|
194
217
|
puts bank_connection.body
|
195
218
|
```
|
196
219
|
|
220
|
+
<details>
|
221
|
+
|
222
|
+
<summary>Response</summary>
|
223
|
+
|
197
224
|
```ruby
|
198
225
|
# body
|
199
226
|
{
|
@@ -218,17 +245,19 @@ puts bank_connection.body
|
|
218
245
|
}
|
219
246
|
```
|
220
247
|
|
248
|
+
</details>
|
249
|
+
|
221
250
|
### Banking::Transaction (Kontoumsatz)
|
222
251
|
|
223
252
|
WORK IN PROGRESS
|
224
253
|
|
225
|
-
[Transactions](
|
254
|
+
[Transactions](lib/papierkram_api/v1/endpoints/banking/transactions.rb)
|
226
255
|
|
227
256
|
### Contact::Company (Unternehmen)
|
228
257
|
|
229
|
-
Der Endpunkt `/
|
258
|
+
Der Endpunkt `/papierkram_api/v1/endpoints/contact/companies` liefert Informationen über die Unternehmen. Die Informationen werden als `Faraday::Response` zurückgegeben.
|
230
259
|
|
231
|
-
Siehe [Companies](
|
260
|
+
Siehe [Companies](lib/papierkram_api/v1/endpoints/contact/companies.rb) für mögliche Parameter.
|
232
261
|
|
233
262
|
#### alle Unternehmen
|
234
263
|
|
@@ -248,14 +277,14 @@ puts company.body
|
|
248
277
|
|
249
278
|
### Contact::Company (Kontaktperson eines Unternehmens)
|
250
279
|
|
251
|
-
Der Endpunkt `/
|
280
|
+
Der Endpunkt `/papierkram_api/v1/endpoints/contact/companies/{company_id}` liefert Informationen über die Kontaktpersonen. Die Informationen werden als `Faraday::Response` zurückgegeben.
|
252
281
|
|
253
|
-
Siehe [CompaniesPersons](
|
282
|
+
Siehe [CompaniesPersons](lib/papierkram_api/v1/endpoints/contact/companies_persons.rb) für mögliche Parameter.
|
254
283
|
|
255
284
|
#### alle Kontaktpersonen (eines Unternehmens)
|
256
285
|
|
257
286
|
```ruby
|
258
|
-
companies = client.
|
287
|
+
companies = client.contact_companies_persons.all(company_id: 1)
|
259
288
|
puts companies.headers
|
260
289
|
puts companies.body
|
261
290
|
```
|
@@ -263,21 +292,21 @@ puts companies.body
|
|
263
292
|
#### eine Kontaktperson (eines Unternehmens)
|
264
293
|
|
265
294
|
```ruby
|
266
|
-
company = client.
|
295
|
+
company = client.contact_companies_persons.by(company_id: 1, id: 1)
|
267
296
|
puts company.headers
|
268
297
|
puts company.body
|
269
298
|
```
|
270
299
|
|
271
300
|
### Expense::Voucher (Ausgabe Beleg)
|
272
301
|
|
273
|
-
Der Endpunkt `/
|
302
|
+
Der Endpunkt `/papierkram_api/v1/endpoints/expense/vouchers` liefert Informationen über die Ausgabe Belege. Die Informationen werden als `Faraday::Response` zurückgegeben.
|
274
303
|
|
275
|
-
Siehe [Vouchers](
|
304
|
+
Siehe [Vouchers](lib/papierkram_api/v1/endpoints/expense/vouchers.rb) für mögliche Parameter.
|
276
305
|
|
277
306
|
#### alle Ausgabe Belege
|
278
307
|
|
279
308
|
```ruby
|
280
|
-
vouchers = client.
|
309
|
+
vouchers = client.expense_vouchers.all
|
281
310
|
puts vouchers.headers
|
282
311
|
puts vouchers.body
|
283
312
|
```
|
@@ -285,7 +314,7 @@ puts vouchers.body
|
|
285
314
|
#### einen Ausgabe Beleg
|
286
315
|
|
287
316
|
```ruby
|
288
|
-
voucher = client.
|
317
|
+
voucher = client.expense_vouchers.by(id: 1)
|
289
318
|
puts voucher.headers
|
290
319
|
puts voucher.body
|
291
320
|
```
|
@@ -293,21 +322,21 @@ puts voucher.body
|
|
293
322
|
#### einen Ausgabe Beleg als PDF
|
294
323
|
|
295
324
|
```ruby
|
296
|
-
voucher = client.
|
297
|
-
puts
|
325
|
+
voucher = client.expense_vouchers.by(id: 1, pdf: true)
|
326
|
+
puts PapierkramApi::V1::Helpers::PdfFromResponse.new(voucher).to_pdf
|
298
327
|
# => {response: Faraday::Response, path_to_pdf_file: 'path/to/tempfile_pdf.pdf'}
|
299
328
|
```
|
300
329
|
|
301
330
|
### Income::Estimate (Angebot)
|
302
331
|
|
303
|
-
Der Endpunkt `/
|
332
|
+
Der Endpunkt `/papierkram_api/v1/endpoints/income/estimates` liefert Informationen über die Angebote. Die Informationen werden als `Faraday::Response` zurückgegeben.
|
304
333
|
|
305
|
-
Siehe [Estimates](
|
334
|
+
Siehe [Estimates](lib/papierkram_api/v1/endpoints/income/estimates.rb) für mögliche Parameter.
|
306
335
|
|
307
336
|
#### alle Angebote
|
308
337
|
|
309
338
|
```ruby
|
310
|
-
estimates = client.
|
339
|
+
estimates = client.income_estimates.all
|
311
340
|
puts estimates.headers
|
312
341
|
puts estimates.body
|
313
342
|
```
|
@@ -315,7 +344,7 @@ puts estimates.body
|
|
315
344
|
#### ein Angebot
|
316
345
|
|
317
346
|
```ruby
|
318
|
-
estimate = client.
|
347
|
+
estimate = client.income_estimates.by(id: 1)
|
319
348
|
puts estimate.headers
|
320
349
|
puts estimate.body
|
321
350
|
```
|
@@ -323,21 +352,21 @@ puts estimate.body
|
|
323
352
|
#### ein Angebot als PDF
|
324
353
|
|
325
354
|
```ruby
|
326
|
-
estimate = client.
|
327
|
-
puts
|
355
|
+
estimate = client.income_estimates.by(id: 1, pdf: true)
|
356
|
+
puts PapierkramApi::V1::Helpers::PdfFromResponse.new(estimate).to_pdf
|
328
357
|
# => {response: Faraday::Response, path_to_pdf_file: 'path/to/tempfile_pdf.pdf'}
|
329
358
|
```
|
330
359
|
|
331
360
|
### Income::Invoice (Rechnung)
|
332
361
|
|
333
|
-
Der Endpunkt `/
|
362
|
+
Der Endpunkt `/papierkram_api/v1/endpoints/income/invoices` liefert Informationen über die Rechnungen. Die Informationen werden als `Faraday::Response` zurückgegeben.
|
334
363
|
|
335
|
-
Siehe [Invoices](
|
364
|
+
Siehe [Invoices](lib/papierkram_api/v1/endpoints/income/invoices.rb) für mögliche Parameter.
|
336
365
|
|
337
366
|
#### alle Rechnungen
|
338
367
|
|
339
368
|
```ruby
|
340
|
-
invoices = client.
|
369
|
+
invoices = client.income_invoices.all
|
341
370
|
puts invoices.headers
|
342
371
|
puts invoices.body
|
343
372
|
```
|
@@ -345,7 +374,7 @@ puts invoices.body
|
|
345
374
|
#### eine Rechnung
|
346
375
|
|
347
376
|
```ruby
|
348
|
-
invoice = client.
|
377
|
+
invoice = client.income_invoices.by(id: 1)
|
349
378
|
puts invoice.headers
|
350
379
|
puts invoice.body
|
351
380
|
```
|
@@ -353,21 +382,21 @@ puts invoice.body
|
|
353
382
|
#### eine Rechnung als PDF
|
354
383
|
|
355
384
|
```ruby
|
356
|
-
invoice = client.
|
357
|
-
puts
|
385
|
+
invoice = client.income_invoices.by(id: 1, pdf: true)
|
386
|
+
puts PapierkramApi::V1::Helpers::PdfFromResponse.new(invoice).to_pdf
|
358
387
|
# => {response: Faraday::Response, path_to_pdf_file: 'path/to/tempfile_pdf.pdf'}
|
359
388
|
```
|
360
389
|
|
361
390
|
### Income::Proposition (Waren / Dienstleistungen)
|
362
391
|
|
363
|
-
Der Endpunkt `/
|
392
|
+
Der Endpunkt `/papierkram_api/v1/endpoints/income/propositions` liefert Informationen über die Waren / Dienstleistungen. Die Informationen werden als `Faraday::Response` zurückgegeben.
|
364
393
|
|
365
|
-
Siehe [Propositions](
|
394
|
+
Siehe [Propositions](lib/papierkram_api/v1/endpoints/income/propositions.rb) für mögliche Parameter.
|
366
395
|
|
367
396
|
#### alle Waren / Dienstleistungen
|
368
397
|
|
369
398
|
```ruby
|
370
|
-
propositions = client.
|
399
|
+
propositions = client.income_propositions.all
|
371
400
|
puts propositions.headers
|
372
401
|
puts propositions.body
|
373
402
|
```
|
@@ -375,16 +404,16 @@ puts propositions.body
|
|
375
404
|
#### eine Ware / Dienstleistung
|
376
405
|
|
377
406
|
```ruby
|
378
|
-
proposition = client.
|
407
|
+
proposition = client.income_propositions.by(id: 1)
|
379
408
|
puts proposition.headers
|
380
409
|
puts proposition.body
|
381
410
|
```
|
382
411
|
|
383
412
|
### Info
|
384
413
|
|
385
|
-
Der Endpunkt
|
414
|
+
Der Endpunkt `lib/papierkram_api/v1/endpoints/info.rb` liefert Informationen über die API. Die Informationen werden als `Faraday::Response` zurückgegeben.
|
386
415
|
|
387
|
-
Siehe [Info](
|
416
|
+
Siehe [Info](lib/papierkram_api/v1/endpoints/info.rb).
|
388
417
|
|
389
418
|
```ruby
|
390
419
|
info = client.info.details
|
@@ -394,9 +423,9 @@ puts info.body
|
|
394
423
|
|
395
424
|
### Project::Project (Projekt)
|
396
425
|
|
397
|
-
Der Endpunkt `/
|
426
|
+
Der Endpunkt `/papierkram_api/v1/endpoints/projects` liefert Informationen über die Projekte. Die Informationen werden als `Faraday::Response` zurückgegeben.
|
398
427
|
|
399
|
-
Siehe [Projects](
|
428
|
+
Siehe [Projects](lib/papierkram_api/v1/endpoints/projects.rb) für mögliche Parameter.
|
400
429
|
|
401
430
|
#### alle Projekte
|
402
431
|
|
@@ -416,9 +445,9 @@ puts project.body
|
|
416
445
|
|
417
446
|
### Tracker::Task (Aufgabe)
|
418
447
|
|
419
|
-
Der Endpunkt `/
|
448
|
+
Der Endpunkt `/papierkram_api/v1/tracker/tasks` liefert Informationen über die Aufgaben. Die Informationen werden als `Faraday::Response` zurückgegeben.
|
420
449
|
|
421
|
-
Siehe [Tasks](
|
450
|
+
Siehe [Tasks](lib/papierkram_api/v1/endpoints/tracker/tasks.rb) für mögliche Parameter.
|
422
451
|
|
423
452
|
#### alle Aufgaben
|
424
453
|
|
@@ -438,9 +467,9 @@ puts task.body
|
|
438
467
|
|
439
468
|
### Tracker::TimeEntry (Zeiteintrag)
|
440
469
|
|
441
|
-
Der Endpunkt `/
|
470
|
+
Der Endpunkt `/papierkram_api/v1/tracker/time_entries` liefert Informationen über die Zeiteinträge. Die Informationen werden als `Faraday::Response` zurückgegeben.
|
442
471
|
|
443
|
-
[TimeEntries](
|
472
|
+
[TimeEntries](lib/papierkram_api/v1/endpoints/tracker/time_entries.rb)
|
444
473
|
|
445
474
|
#### alle Zeiteinträge
|
446
475
|
|
@@ -462,7 +491,7 @@ puts time_entry.body
|
|
462
491
|
|
463
492
|
Jede API Anfrage "kostet" 1 Quota. Das Quota wird bei jedem Request aktualisiert. Um das verbleibende Quota zu erhalten, kann die Methode `remaining_quota` aufgerufen werden.
|
464
493
|
|
465
|
-
[Base](
|
494
|
+
[Base](lib/papierkram_api/v1/endpoints/base.rb)
|
466
495
|
|
467
496
|
Du kannst dein Quota über die Papierkram Webseite einsehen. Die Anzahl der verbleibenden Anfragen wird dir dort angezeigt.
|
468
497
|
|
@@ -474,21 +503,100 @@ response = client.info.details
|
|
474
503
|
quota = client.info.remaining_quota(response)
|
475
504
|
```
|
476
505
|
|
506
|
+
## Business Intelligence
|
507
|
+
|
508
|
+
TODO ergänzen wie man `SmartQueries` erstellt und verwendet.
|
509
|
+
TODO ergänzen wie man `SmartQueries` funktioneren.
|
510
|
+
TODO ergänzen wie die Rückgabewerte von `SmartQueries` gestaltet werden sollten.
|
511
|
+
|
512
|
+
### Business::Intelligence (BI) ExpenseByCategory (Ausgaben nach Kategorie)
|
513
|
+
|
514
|
+
Der Endpunkt `/papierkram_api/v1/business_intelligence/expense_by_categories` liefert Informationen über die Ausgaben nach Kategorie. Die Informationen werden als `Hash` zurückgegeben.
|
515
|
+
|
516
|
+
#### alle Ausgaben eines Monats nach Kategorie
|
517
|
+
|
518
|
+
```ruby
|
519
|
+
client = PapierkramApi::Client.new
|
520
|
+
expense_voucher_data_service = client.expense_vouchers.data_service(:for_month_in_year_service)
|
521
|
+
expense_vouchers_in_date_range = expense_voucher_data_service.for_month_in_year(year: 2020, month: 8)
|
522
|
+
|
523
|
+
service = client.business_intelligence.expenses_by_category
|
524
|
+
result = service.call(expense_vouchers: expense_vouchers_in_date_range)
|
525
|
+
puts result
|
526
|
+
```
|
527
|
+
|
528
|
+
```ruby
|
529
|
+
{"Betriebsbedarf"=>
|
530
|
+
{"amount"=>476.0,
|
531
|
+
"amount_by_creditor"=>{nil=>476.0},
|
532
|
+
"line_items"=>
|
533
|
+
[{"name"=>"2020-01-03",
|
534
|
+
"amount"=>119.0,
|
535
|
+
"category"=>"Betriebsbedarf",
|
536
|
+
"vat_rate"=>"19%",
|
537
|
+
"billing"=>nil,
|
538
|
+
"depreciation"=>nil,
|
539
|
+
"voucher_name"=>"B-00214 - 2020-08-01",
|
540
|
+
"voucher_id"=>641,
|
541
|
+
"creditor"=>nil},
|
542
|
+
{"name"=>"2020-01-03",
|
543
|
+
"amount"=>119.0,
|
544
|
+
"category"=>"Betriebsbedarf",
|
545
|
+
"vat_rate"=>"19%",
|
546
|
+
"billing"=>nil,
|
547
|
+
"depreciation"=>nil,
|
548
|
+
"voucher_name"=>"B-00215 - 2020-08-02",
|
549
|
+
"voucher_id"=>644,
|
550
|
+
"creditor"=>nil},
|
551
|
+
{"name"=>"2020-01-03",
|
552
|
+
"amount"=>119.0,
|
553
|
+
"category"=>"Betriebsbedarf",
|
554
|
+
"vat_rate"=>"19%",
|
555
|
+
"billing"=>nil,
|
556
|
+
"depreciation"=>nil,
|
557
|
+
"voucher_name"=>"B-00216 - 2020-08-03",
|
558
|
+
"voucher_id"=>647,
|
559
|
+
"creditor"=>nil},
|
560
|
+
{"name"=>"2020-01-03",
|
561
|
+
"amount"=>119.0,
|
562
|
+
"category"=>"Betriebsbedarf",
|
563
|
+
"vat_rate"=>"19%",
|
564
|
+
"billing"=>nil,
|
565
|
+
"depreciation"=>nil,
|
566
|
+
"voucher_name"=>"B-00217 - 2020-08-04",
|
567
|
+
"voucher_id"=>650,
|
568
|
+
"creditor"=>nil}]}}
|
569
|
+
```
|
570
|
+
|
571
|
+
#### alle Ausgaben eines Monats nach Kategorie gefiltert nach Steuersatz
|
572
|
+
|
573
|
+
```ruby
|
574
|
+
client = PapierkramApi::Client.new
|
575
|
+
expense_voucher_data_service = client.expense_vouchers.data_service(:for_month_in_year_service)
|
576
|
+
expense_vouchers_in_date_range = expense_voucher_data_service.for_month_in_year(year: 2020, month: 8)
|
577
|
+
|
578
|
+
service = client.business_intelligence.expenses_by_category
|
579
|
+
result = service.call(expense_vouchers: expense_vouchers_in_date_range) do |line_items|
|
580
|
+
line_items.select { |v| v['vat_rate'] == '19%' }
|
581
|
+
end
|
582
|
+
puts result
|
583
|
+
```
|
584
|
+
|
477
585
|
## Helpers
|
478
586
|
|
479
587
|
Es gibt einige Helper, die dir das Leben leichter machen.
|
480
588
|
|
481
589
|
### Generiere ein PDF aus Response
|
482
590
|
|
483
|
-
Mit dem Helper `
|
591
|
+
Mit dem Helper `PapierkramApi::V1::Helpers::PdfFromResponse` kannst du für unterstützte Endpunkte aus einer `Faraday::Response` ein PDF schreiben.
|
484
592
|
|
485
593
|
Unterstützte Endpunkte sind beispielsweise: `Income::Estimate`, `Income::Invoice`, `Expense::Voucher`.
|
486
594
|
|
487
|
-
[Api::V1::Helpers::PdfFromResponse](
|
595
|
+
[Api::V1::Helpers::PdfFromResponse](lib/papierkram_api/v1/helper/pdf_from_response.rb)
|
488
596
|
|
489
597
|
```ruby
|
490
598
|
response = client.income_invoices.by(id: 1, pdf: true)
|
491
|
-
pdf =
|
599
|
+
pdf = PapierkramApi::V1::Helpers::PdfFromResponse.new(response).to_pdf("Rechnung Nummer XXX")
|
492
600
|
puts pdf
|
493
601
|
```
|
494
602
|
|
@@ -514,7 +622,7 @@ Bitte achte darauf, dass du die Tests ausführst und die Tests dann auch grün s
|
|
514
622
|
|
515
623
|
🚨 **SEHR WICHTIG!** Dein API Key wird in den Tests verwendet werden. **Bitte achte darauf**, dass du den API Key nicht in deinen Commits hast! Wenn du per Environment Variable arbeitest, dann wird dein API Key **nicht von VCR aufgezeichnet**. Das bedeutet, dass du deine Tests nicht mit deinem API Key ausführen solltest. ⚠️
|
516
624
|
|
517
|
-
🚨 **NOCH WICHTIGER!** deine Kundendaten, also Klarnamen, E-Mails und Telefonnummern haben hier nichts verloren! Bitte sorge dafür, dass du deine Tests mit einem Testaccount ausführst. 🙏 ODER editiere deine Kundendaten in den
|
625
|
+
🚨 **NOCH WICHTIGER!** deine Kundendaten, also Klarnamen, E-Mails und Telefonnummern haben hier nichts verloren! Bitte sorge dafür, dass du deine Tests mit einem Testaccount ausführst. 🙏 ODER editiere deine Kundendaten in den _VCR Cassettes_ nach dem Test. 🙏
|
518
626
|
|
519
627
|
Wenn du unsicher bist, sprich mich an oder erstelle ein Issue. Ich helfe dir gerne weiter. 🤗
|
520
628
|
|