papierkram_api_client 0.1.3 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +5 -0
- data/CHANGELOG.md +13 -0
- data/Gemfile.lock +3 -3
- data/README.md +155 -55
- 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 -43
- 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,3 +1,16 @@
|
|
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
|
+
|
1
14
|
## [0.1.3] - 2023-04-15
|
2
15
|
|
3
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.
|
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,9 +34,9 @@ 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.50.
|
39
|
+
rubocop (1.50.2)
|
40
40
|
json (~> 2.3)
|
41
41
|
parallel (~> 1.10)
|
42
42
|
parser (>= 3.2.0.0)
|
data/README.md
CHANGED
@@ -4,8 +4,14 @@
|
|
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
|
+
|
9
15
|
---
|
10
16
|
|
11
17
|
**WERBUNG** (es ist ein Aufruf zur Mitarbeit 🫠)
|
@@ -20,8 +26,8 @@ Das Gleiche, nur in grün, also für [NodeJS](https://github.com/simonneutert/pa
|
|
20
26
|
|
21
27
|
Check das [CHANGELOG.md](CHANGELOG.md), Baby!
|
22
28
|
|
23
|
-
|
24
|
-
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
|
25
31
|
(wenn du bereits ein Papierkram-Konto hast).
|
26
32
|
Schau bitte dort um alle Rückgabefelder/-werte zu checken, bis ich die Dokumentation hier komplett habe.
|
27
33
|
|
@@ -46,7 +52,7 @@ Aktuell unterstützte Endpunkte / Objekte:
|
|
46
52
|
|
47
53
|
## Was, wie, warum?<!-- omit in toc -->
|
48
54
|
|
49
|
-
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.
|
50
56
|
|
51
57
|
Ziele:
|
52
58
|
|
@@ -96,6 +102,10 @@ Ziele:
|
|
96
102
|
- [alle Zeiteinträge](#alle-zeiteinträge)
|
97
103
|
- [einen Zeiteintrag](#einen-zeiteintrag)
|
98
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)
|
99
109
|
- [Helpers](#helpers)
|
100
110
|
- [Generiere ein PDF aus Response](#generiere-ein-pdf-aus-response)
|
101
111
|
- [Development](#development)
|
@@ -122,10 +132,10 @@ If bundler is not being used to manage dependencies, install the gem by executin
|
|
122
132
|
# client instanziieren
|
123
133
|
|
124
134
|
# wenn ENV gesetzt sind (siehe Readme)
|
125
|
-
client =
|
135
|
+
client = PapierkramApi::Client.new
|
126
136
|
|
127
137
|
# ODER per Variablen
|
128
|
-
client =
|
138
|
+
client = PapierkramApi::Client.new('subdomain', "YOUR-API-KEY");
|
129
139
|
|
130
140
|
# info Endpunkt abfragen
|
131
141
|
info_details = client.info.details
|
@@ -142,41 +152,44 @@ puts invoices.body
|
|
142
152
|
|
143
153
|
Der API Client ist die Hauptklasse für die Kommunikation mit der Papierkram API. Er wird mit den Zugangsdaten initialisiert.
|
144
154
|
|
145
|
-
[Client](
|
155
|
+
[Client](lib/papierkram_api/client.rb)
|
146
156
|
|
147
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).
|
148
158
|
|
149
|
-
|
150
159
|
### Initialisierung
|
151
160
|
|
152
161
|
Entweder werden die Zugangsdaten als Argumente übergeben:
|
153
162
|
|
154
163
|
```ruby
|
155
164
|
# usage with subdomain and api key
|
156
|
-
client =
|
165
|
+
client = PapierkramApi::Client.new('subdomain', "SUPER-LONG-API-KEY")
|
157
166
|
```
|
158
167
|
|
159
168
|
Oder es werden die Umgebungsvariablen `PAPIERKRAM_API_SUBDOMAIN` und `PAPIERKRAM_API_KEY` gesetzt und der Client ohne Argumente initialisiert.
|
160
169
|
|
161
170
|
```ruby
|
162
171
|
# usage with environment variables
|
163
|
-
client =
|
172
|
+
client = PapierkramApi::Client.new
|
164
173
|
```
|
165
174
|
|
166
175
|
### Banking::BankConnection (Bankverbindung)
|
167
176
|
|
168
|
-
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.
|
169
178
|
|
170
|
-
Siehe [BankConnections](
|
179
|
+
Siehe [BankConnections](lib/papierkram_api/v1/endpoints/banking/bank_connections.rb) für mögliche Parameter.
|
171
180
|
|
172
181
|
#### alle Bankverbindungen
|
173
182
|
|
174
183
|
```ruby
|
175
|
-
bank_connections = client.
|
184
|
+
bank_connections = client.banking_bank_connections.all
|
176
185
|
puts bank_connections.headers
|
177
186
|
puts bank_connections.body
|
178
187
|
```
|
179
188
|
|
189
|
+
<details>
|
190
|
+
|
191
|
+
<summary>Response</summary>
|
192
|
+
|
180
193
|
```ruby
|
181
194
|
# body
|
182
195
|
{
|
@@ -194,14 +207,20 @@ puts bank_connections.body
|
|
194
207
|
}
|
195
208
|
```
|
196
209
|
|
210
|
+
</details>
|
211
|
+
|
197
212
|
#### eine Bankverbindung
|
198
213
|
|
199
214
|
```ruby
|
200
|
-
bank_connection = client.
|
215
|
+
bank_connection = client.banking_bank_connections.by(id: 1)
|
201
216
|
puts bank_connection.headers
|
202
217
|
puts bank_connection.body
|
203
218
|
```
|
204
219
|
|
220
|
+
<details>
|
221
|
+
|
222
|
+
<summary>Response</summary>
|
223
|
+
|
205
224
|
```ruby
|
206
225
|
# body
|
207
226
|
{
|
@@ -226,17 +245,19 @@ puts bank_connection.body
|
|
226
245
|
}
|
227
246
|
```
|
228
247
|
|
248
|
+
</details>
|
249
|
+
|
229
250
|
### Banking::Transaction (Kontoumsatz)
|
230
251
|
|
231
252
|
WORK IN PROGRESS
|
232
253
|
|
233
|
-
[Transactions](
|
254
|
+
[Transactions](lib/papierkram_api/v1/endpoints/banking/transactions.rb)
|
234
255
|
|
235
256
|
### Contact::Company (Unternehmen)
|
236
257
|
|
237
|
-
Der Endpunkt `/
|
258
|
+
Der Endpunkt `/papierkram_api/v1/endpoints/contact/companies` liefert Informationen über die Unternehmen. Die Informationen werden als `Faraday::Response` zurückgegeben.
|
238
259
|
|
239
|
-
Siehe [Companies](
|
260
|
+
Siehe [Companies](lib/papierkram_api/v1/endpoints/contact/companies.rb) für mögliche Parameter.
|
240
261
|
|
241
262
|
#### alle Unternehmen
|
242
263
|
|
@@ -256,14 +277,14 @@ puts company.body
|
|
256
277
|
|
257
278
|
### Contact::Company (Kontaktperson eines Unternehmens)
|
258
279
|
|
259
|
-
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.
|
260
281
|
|
261
|
-
Siehe [CompaniesPersons](
|
282
|
+
Siehe [CompaniesPersons](lib/papierkram_api/v1/endpoints/contact/companies_persons.rb) für mögliche Parameter.
|
262
283
|
|
263
284
|
#### alle Kontaktpersonen (eines Unternehmens)
|
264
285
|
|
265
286
|
```ruby
|
266
|
-
companies = client.
|
287
|
+
companies = client.contact_companies_persons.all(company_id: 1)
|
267
288
|
puts companies.headers
|
268
289
|
puts companies.body
|
269
290
|
```
|
@@ -271,21 +292,21 @@ puts companies.body
|
|
271
292
|
#### eine Kontaktperson (eines Unternehmens)
|
272
293
|
|
273
294
|
```ruby
|
274
|
-
company = client.
|
295
|
+
company = client.contact_companies_persons.by(company_id: 1, id: 1)
|
275
296
|
puts company.headers
|
276
297
|
puts company.body
|
277
298
|
```
|
278
299
|
|
279
300
|
### Expense::Voucher (Ausgabe Beleg)
|
280
301
|
|
281
|
-
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.
|
282
303
|
|
283
|
-
Siehe [Vouchers](
|
304
|
+
Siehe [Vouchers](lib/papierkram_api/v1/endpoints/expense/vouchers.rb) für mögliche Parameter.
|
284
305
|
|
285
306
|
#### alle Ausgabe Belege
|
286
307
|
|
287
308
|
```ruby
|
288
|
-
vouchers = client.
|
309
|
+
vouchers = client.expense_vouchers.all
|
289
310
|
puts vouchers.headers
|
290
311
|
puts vouchers.body
|
291
312
|
```
|
@@ -293,7 +314,7 @@ puts vouchers.body
|
|
293
314
|
#### einen Ausgabe Beleg
|
294
315
|
|
295
316
|
```ruby
|
296
|
-
voucher = client.
|
317
|
+
voucher = client.expense_vouchers.by(id: 1)
|
297
318
|
puts voucher.headers
|
298
319
|
puts voucher.body
|
299
320
|
```
|
@@ -301,21 +322,21 @@ puts voucher.body
|
|
301
322
|
#### einen Ausgabe Beleg als PDF
|
302
323
|
|
303
324
|
```ruby
|
304
|
-
voucher = client.
|
305
|
-
puts
|
325
|
+
voucher = client.expense_vouchers.by(id: 1, pdf: true)
|
326
|
+
puts PapierkramApi::V1::Helpers::PdfFromResponse.new(voucher).to_pdf
|
306
327
|
# => {response: Faraday::Response, path_to_pdf_file: 'path/to/tempfile_pdf.pdf'}
|
307
328
|
```
|
308
329
|
|
309
330
|
### Income::Estimate (Angebot)
|
310
331
|
|
311
|
-
Der Endpunkt `/
|
332
|
+
Der Endpunkt `/papierkram_api/v1/endpoints/income/estimates` liefert Informationen über die Angebote. Die Informationen werden als `Faraday::Response` zurückgegeben.
|
312
333
|
|
313
|
-
Siehe [Estimates](
|
334
|
+
Siehe [Estimates](lib/papierkram_api/v1/endpoints/income/estimates.rb) für mögliche Parameter.
|
314
335
|
|
315
336
|
#### alle Angebote
|
316
337
|
|
317
338
|
```ruby
|
318
|
-
estimates = client.
|
339
|
+
estimates = client.income_estimates.all
|
319
340
|
puts estimates.headers
|
320
341
|
puts estimates.body
|
321
342
|
```
|
@@ -323,7 +344,7 @@ puts estimates.body
|
|
323
344
|
#### ein Angebot
|
324
345
|
|
325
346
|
```ruby
|
326
|
-
estimate = client.
|
347
|
+
estimate = client.income_estimates.by(id: 1)
|
327
348
|
puts estimate.headers
|
328
349
|
puts estimate.body
|
329
350
|
```
|
@@ -331,21 +352,21 @@ puts estimate.body
|
|
331
352
|
#### ein Angebot als PDF
|
332
353
|
|
333
354
|
```ruby
|
334
|
-
estimate = client.
|
335
|
-
puts
|
355
|
+
estimate = client.income_estimates.by(id: 1, pdf: true)
|
356
|
+
puts PapierkramApi::V1::Helpers::PdfFromResponse.new(estimate).to_pdf
|
336
357
|
# => {response: Faraday::Response, path_to_pdf_file: 'path/to/tempfile_pdf.pdf'}
|
337
358
|
```
|
338
359
|
|
339
360
|
### Income::Invoice (Rechnung)
|
340
361
|
|
341
|
-
Der Endpunkt `/
|
362
|
+
Der Endpunkt `/papierkram_api/v1/endpoints/income/invoices` liefert Informationen über die Rechnungen. Die Informationen werden als `Faraday::Response` zurückgegeben.
|
342
363
|
|
343
|
-
Siehe [Invoices](
|
364
|
+
Siehe [Invoices](lib/papierkram_api/v1/endpoints/income/invoices.rb) für mögliche Parameter.
|
344
365
|
|
345
366
|
#### alle Rechnungen
|
346
367
|
|
347
368
|
```ruby
|
348
|
-
invoices = client.
|
369
|
+
invoices = client.income_invoices.all
|
349
370
|
puts invoices.headers
|
350
371
|
puts invoices.body
|
351
372
|
```
|
@@ -353,7 +374,7 @@ puts invoices.body
|
|
353
374
|
#### eine Rechnung
|
354
375
|
|
355
376
|
```ruby
|
356
|
-
invoice = client.
|
377
|
+
invoice = client.income_invoices.by(id: 1)
|
357
378
|
puts invoice.headers
|
358
379
|
puts invoice.body
|
359
380
|
```
|
@@ -361,21 +382,21 @@ puts invoice.body
|
|
361
382
|
#### eine Rechnung als PDF
|
362
383
|
|
363
384
|
```ruby
|
364
|
-
invoice = client.
|
365
|
-
puts
|
385
|
+
invoice = client.income_invoices.by(id: 1, pdf: true)
|
386
|
+
puts PapierkramApi::V1::Helpers::PdfFromResponse.new(invoice).to_pdf
|
366
387
|
# => {response: Faraday::Response, path_to_pdf_file: 'path/to/tempfile_pdf.pdf'}
|
367
388
|
```
|
368
389
|
|
369
390
|
### Income::Proposition (Waren / Dienstleistungen)
|
370
391
|
|
371
|
-
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.
|
372
393
|
|
373
|
-
Siehe [Propositions](
|
394
|
+
Siehe [Propositions](lib/papierkram_api/v1/endpoints/income/propositions.rb) für mögliche Parameter.
|
374
395
|
|
375
396
|
#### alle Waren / Dienstleistungen
|
376
397
|
|
377
398
|
```ruby
|
378
|
-
propositions = client.
|
399
|
+
propositions = client.income_propositions.all
|
379
400
|
puts propositions.headers
|
380
401
|
puts propositions.body
|
381
402
|
```
|
@@ -383,16 +404,16 @@ puts propositions.body
|
|
383
404
|
#### eine Ware / Dienstleistung
|
384
405
|
|
385
406
|
```ruby
|
386
|
-
proposition = client.
|
407
|
+
proposition = client.income_propositions.by(id: 1)
|
387
408
|
puts proposition.headers
|
388
409
|
puts proposition.body
|
389
410
|
```
|
390
411
|
|
391
412
|
### Info
|
392
413
|
|
393
|
-
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.
|
394
415
|
|
395
|
-
Siehe [Info](
|
416
|
+
Siehe [Info](lib/papierkram_api/v1/endpoints/info.rb).
|
396
417
|
|
397
418
|
```ruby
|
398
419
|
info = client.info.details
|
@@ -402,9 +423,9 @@ puts info.body
|
|
402
423
|
|
403
424
|
### Project::Project (Projekt)
|
404
425
|
|
405
|
-
Der Endpunkt `/
|
426
|
+
Der Endpunkt `/papierkram_api/v1/endpoints/projects` liefert Informationen über die Projekte. Die Informationen werden als `Faraday::Response` zurückgegeben.
|
406
427
|
|
407
|
-
Siehe [Projects](
|
428
|
+
Siehe [Projects](lib/papierkram_api/v1/endpoints/projects.rb) für mögliche Parameter.
|
408
429
|
|
409
430
|
#### alle Projekte
|
410
431
|
|
@@ -424,9 +445,9 @@ puts project.body
|
|
424
445
|
|
425
446
|
### Tracker::Task (Aufgabe)
|
426
447
|
|
427
|
-
Der Endpunkt `/
|
448
|
+
Der Endpunkt `/papierkram_api/v1/tracker/tasks` liefert Informationen über die Aufgaben. Die Informationen werden als `Faraday::Response` zurückgegeben.
|
428
449
|
|
429
|
-
Siehe [Tasks](
|
450
|
+
Siehe [Tasks](lib/papierkram_api/v1/endpoints/tracker/tasks.rb) für mögliche Parameter.
|
430
451
|
|
431
452
|
#### alle Aufgaben
|
432
453
|
|
@@ -446,9 +467,9 @@ puts task.body
|
|
446
467
|
|
447
468
|
### Tracker::TimeEntry (Zeiteintrag)
|
448
469
|
|
449
|
-
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.
|
450
471
|
|
451
|
-
[TimeEntries](
|
472
|
+
[TimeEntries](lib/papierkram_api/v1/endpoints/tracker/time_entries.rb)
|
452
473
|
|
453
474
|
#### alle Zeiteinträge
|
454
475
|
|
@@ -470,7 +491,7 @@ puts time_entry.body
|
|
470
491
|
|
471
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.
|
472
493
|
|
473
|
-
[Base](
|
494
|
+
[Base](lib/papierkram_api/v1/endpoints/base.rb)
|
474
495
|
|
475
496
|
Du kannst dein Quota über die Papierkram Webseite einsehen. Die Anzahl der verbleibenden Anfragen wird dir dort angezeigt.
|
476
497
|
|
@@ -482,21 +503,100 @@ response = client.info.details
|
|
482
503
|
quota = client.info.remaining_quota(response)
|
483
504
|
```
|
484
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
|
+
|
485
585
|
## Helpers
|
486
586
|
|
487
587
|
Es gibt einige Helper, die dir das Leben leichter machen.
|
488
588
|
|
489
589
|
### Generiere ein PDF aus Response
|
490
590
|
|
491
|
-
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.
|
492
592
|
|
493
593
|
Unterstützte Endpunkte sind beispielsweise: `Income::Estimate`, `Income::Invoice`, `Expense::Voucher`.
|
494
594
|
|
495
|
-
[Api::V1::Helpers::PdfFromResponse](
|
595
|
+
[Api::V1::Helpers::PdfFromResponse](lib/papierkram_api/v1/helper/pdf_from_response.rb)
|
496
596
|
|
497
597
|
```ruby
|
498
598
|
response = client.income_invoices.by(id: 1, pdf: true)
|
499
|
-
pdf =
|
599
|
+
pdf = PapierkramApi::V1::Helpers::PdfFromResponse.new(response).to_pdf("Rechnung Nummer XXX")
|
500
600
|
puts pdf
|
501
601
|
```
|
502
602
|
|
@@ -522,7 +622,7 @@ Bitte achte darauf, dass du die Tests ausführst und die Tests dann auch grün s
|
|
522
622
|
|
523
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. ⚠️
|
524
624
|
|
525
|
-
🚨 **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. 🙏
|
526
626
|
|
527
627
|
Wenn du unsicher bist, sprich mich an oder erstelle ein Issue. Ich helfe dir gerne weiter. 🤗
|
528
628
|
|
@@ -0,0 +1,92 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module PapierkramApi
|
4
|
+
# The Client class is the main entry point for the Papierkram API Client.
|
5
|
+
class Client
|
6
|
+
attr_accessor :client,
|
7
|
+
:subdomain,
|
8
|
+
:api_key,
|
9
|
+
:base_url,
|
10
|
+
:remaining_quota
|
11
|
+
|
12
|
+
extend Forwardable
|
13
|
+
def_delegators :@client, :get, :post, :put, :patch, :delete
|
14
|
+
|
15
|
+
def initialize(subdomain = nil, api_key = nil)
|
16
|
+
@subdomain = subdomain || ENV.fetch('PAPIERKRAM_API_SUBDOMAIN', nil)
|
17
|
+
@api_key = api_key || ENV.fetch('PAPIERKRAM_API_KEY', nil)
|
18
|
+
@base_url = base_url_env
|
19
|
+
@remaining_quota = nil
|
20
|
+
build_client!
|
21
|
+
end
|
22
|
+
|
23
|
+
def build_client!
|
24
|
+
@client = Faraday.new(url: @base_url) do |config|
|
25
|
+
config.request :authorization, 'Bearer', @api_key
|
26
|
+
config.request :json
|
27
|
+
config.response :json
|
28
|
+
config.adapter :httpx
|
29
|
+
yield(config) if block_given?
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def business_intelligence
|
34
|
+
@business_intelligence ||= PapierkramApi::V1::BusinessIntelligence::Base.new
|
35
|
+
end
|
36
|
+
|
37
|
+
def banking_bank_connections
|
38
|
+
@banking_bank_connections ||= PapierkramApi::V1::Endpoints::Banking::BankConnections.new(@client)
|
39
|
+
end
|
40
|
+
|
41
|
+
def banking_transactions
|
42
|
+
raise ArgumentError, 'not implemented'
|
43
|
+
# @banking_transactions ||= PapierkramApi::V1::Banking::Transactions.new(@client)
|
44
|
+
end
|
45
|
+
|
46
|
+
def contact_companies
|
47
|
+
@contact_companies ||= PapierkramApi::V1::Endpoints::Contact::Companies.new(@client)
|
48
|
+
end
|
49
|
+
|
50
|
+
def contact_companies_persons
|
51
|
+
@contact_companies_persons ||= PapierkramApi::V1::Endpoints::Contact::CompaniesPersons.new(@client)
|
52
|
+
end
|
53
|
+
|
54
|
+
def expense_vouchers
|
55
|
+
@expense_vouchers ||= PapierkramApi::V1::Endpoints::Expense::Vouchers.new(@client)
|
56
|
+
end
|
57
|
+
|
58
|
+
def income_estimates
|
59
|
+
@income_estimates ||= PapierkramApi::V1::Endpoints::Income::Estimates.new(@client)
|
60
|
+
end
|
61
|
+
|
62
|
+
def income_invoices
|
63
|
+
@income_invoices ||= PapierkramApi::V1::Endpoints::Income::Invoices.new(@client)
|
64
|
+
end
|
65
|
+
|
66
|
+
def income_propositions
|
67
|
+
@income_propositions ||= PapierkramApi::V1::Endpoints::Income::Propositions.new(@client)
|
68
|
+
end
|
69
|
+
|
70
|
+
def info
|
71
|
+
@info ||= PapierkramApi::V1::Endpoints::Info.new(@client)
|
72
|
+
end
|
73
|
+
|
74
|
+
def projects
|
75
|
+
@projects ||= PapierkramApi::V1::Endpoints::Projects.new(@client)
|
76
|
+
end
|
77
|
+
|
78
|
+
def tracker_tasks
|
79
|
+
@tracker_tasks ||= PapierkramApi::V1::Endpoints::Tracker::Tasks.new(@client)
|
80
|
+
end
|
81
|
+
|
82
|
+
def tracker_time_entries
|
83
|
+
@tracker_time_entries ||= PapierkramApi::V1::Endpoints::Tracker::TimeEntries.new(@client)
|
84
|
+
end
|
85
|
+
|
86
|
+
private
|
87
|
+
|
88
|
+
def base_url_env
|
89
|
+
"https://#{@subdomain}.papierkram.de"
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module PapierkramApi
|
4
|
+
module V1
|
5
|
+
module BusinessIntelligence
|
6
|
+
# Business Intelligence Base Class
|
7
|
+
#
|
8
|
+
# Business Intelligence is a set of services that can be used to gain
|
9
|
+
# insights into the data stored in the system.
|
10
|
+
#
|
11
|
+
# Therefor you should pass data to the service and get back a result.
|
12
|
+
#
|
13
|
+
# IMPORTANT no calls to the API should be made in this class.
|
14
|
+
# This is an intentional design decision! To seperate logic from the data source.
|
15
|
+
#
|
16
|
+
class Base
|
17
|
+
def expenses_by_category
|
18
|
+
@expenses_by_category ||= PapierkramApi::V1::BusinessIntelligence::ExpensesByCategory.new
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|