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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +5 -0
  3. data/CHANGELOG.md +24 -1
  4. data/Gemfile +1 -1
  5. data/Gemfile.lock +5 -5
  6. data/README.md +164 -56
  7. data/lib/papierkram_api/client.rb +92 -0
  8. data/lib/papierkram_api/v1/business_intelligence/base.rb +23 -0
  9. data/lib/papierkram_api/v1/business_intelligence/expenses_by_category.rb +98 -0
  10. data/lib/papierkram_api/v1/business_intelligence/smart_queries/expense_vouchers_for_month_in_year.rb +58 -0
  11. data/lib/papierkram_api/v1/endpoints/banking/bank_connections.rb +30 -0
  12. data/lib/papierkram_api/v1/endpoints/banking/transactions.rb +20 -0
  13. data/lib/papierkram_api/v1/endpoints/base.rb +77 -0
  14. data/lib/papierkram_api/v1/endpoints/contact/companies.rb +30 -0
  15. data/lib/papierkram_api/v1/endpoints/contact/companies_persons.rb +28 -0
  16. data/lib/papierkram_api/v1/endpoints/expense/vouchers.rb +45 -0
  17. data/lib/papierkram_api/v1/endpoints/income/estimates.rb +46 -0
  18. data/lib/papierkram_api/v1/endpoints/income/invoices.rb +46 -0
  19. data/lib/papierkram_api/v1/endpoints/income/propositions.rb +20 -0
  20. data/lib/papierkram_api/v1/endpoints/info.rb +14 -0
  21. data/lib/papierkram_api/v1/endpoints/projects.rb +26 -0
  22. data/lib/papierkram_api/v1/endpoints/tracker/tasks.rb +33 -0
  23. data/lib/papierkram_api/v1/endpoints/tracker/time_entries.rb +62 -0
  24. data/lib/papierkram_api/v1/helper/date_helper.rb +14 -0
  25. data/lib/{api → papierkram_api}/v1/helper/pdf_from_response.rb +1 -1
  26. data/lib/papierkram_api/v1/validators/expense_voucher.rb +105 -0
  27. data/lib/papierkram_api_client/version.rb +1 -1
  28. data/lib/papierkram_api_client.rb +21 -102
  29. metadata +22 -16
  30. data/lib/api/v1/banking/bank_connections.rb +0 -28
  31. data/lib/api/v1/banking/transactions.rb +0 -18
  32. data/lib/api/v1/base.rb +0 -75
  33. data/lib/api/v1/contact/companies.rb +0 -28
  34. data/lib/api/v1/contact/companies_persons.rb +0 -26
  35. data/lib/api/v1/expense/vouchers.rb +0 -44
  36. data/lib/api/v1/income/estimates.rb +0 -44
  37. data/lib/api/v1/income/invoices.rb +0 -44
  38. data/lib/api/v1/income/propositions.rb +0 -18
  39. data/lib/api/v1/info.rb +0 -12
  40. data/lib/api/v1/projects.rb +0 -24
  41. data/lib/api/v1/tracker/tasks.rb +0 -31
  42. 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: 63831b78f4a4447b7d349355292f027893b4a4805652dc5baa7c938a62ad8dd0
4
- data.tar.gz: 365a0db65a10d288f1be917a467ef96e7343cf74755ec6469f4065faa09b2cb1
3
+ metadata.gz: c428355fa2303fe4086587e47b981b46eac42c498ea84cb2ada942b8b926e1d1
4
+ data.tar.gz: 63f9f3524d98be430356ebc7e19bc344a0e388f9b99c71dcd4303a7427fd0635
5
5
  SHA512:
6
- metadata.gz: 9cdc3d2759ba1fbbd66179012d193a0683028b63d2e37d5edee4af29d18b5fab5e2728c2d20dbbf8d41afb2d099ddeb9d3986bc623ff6cc34303d4cd1e649719
7
- data.tar.gz: 76ca8994286cf1695386a9ea5d75d4ea8becdb5fff834f1ea80ba2693a448ecdecc38d2f7fb0e883477f004049f2227b94a7fc38e00168066fefa2da55fc3a30
6
+ metadata.gz: c4a0d1e8ae94400e56919997bd82daa69cec0ee3b3e6c26d0525e952c6f075238effe6a589c7217c4d89658ec7e2c41c61159b06362898cf4aed7c7f50399103
7
+ data.tar.gz: b9abc76a4a14af64eaaa07f98e925a164b1474c40e4a618830966c269c3bccb4f28d8334a07b1ea4672b295e6f3d1ef6808bbbae6147bef4b211b0776bda200c
data/.rubocop.yml CHANGED
@@ -19,6 +19,11 @@ Layout/LineLength:
19
19
 
20
20
  Metrics/MethodLength:
21
21
  Max: 16
22
+ CountAsOne:
23
+ - "array"
24
+ - "hash"
25
+ - "heredoc"
26
+ - "method_call"
22
27
 
23
28
  Metrics/ParameterLists:
24
29
  Max: 8
data/CHANGELOG.md CHANGED
@@ -1,4 +1,27 @@
1
- ## [v0.1.2] - 2023-04-13
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
@@ -9,6 +9,6 @@ gem 'minitest', '~> 5.0'
9
9
  gem 'minitest-vcr', '~> 1.4'
10
10
  gem 'pry', '~> 0.14.2'
11
11
  gem 'rake', '~> 13.0'
12
- gem 'rubocop', '~> 1.48'
12
+ gem 'rubocop', '~> 1.50'
13
13
  gem 'rubocop-minitest', '~> 0.30.0'
14
14
  gem 'vcr', '~> 6.1'
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- papierkram_api_client (0.1.2)
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.7.0)
37
+ regexp_parser (2.8.0)
38
38
  rexml (3.2.5)
39
- rubocop (1.48.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.26.0, < 2.0)
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.48)
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
- Hier geht es zu den offiziellen API Docs
16
- https://DEINE-SUBDOMAIN.papierkram.de/api/v1/api-docs/index.html
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/api/v1/api-docs/index.html](https://DEINE-SUBDOMAIN.papierkram.de/api/v1/api-docs/index.html). Dieses Projekt soll eine einfache Schnittstelle für die Papierkram API bereitstellen.
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 = PapierkramApiClient::Client.new
135
+ client = PapierkramApi::Client.new
118
136
 
119
137
  # ODER per Variablen
120
- client = PapierkramApiClient::Client.new('subdomain', "YOUR-API-KEY");
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](/lib/papierkram_api_client.rb)
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 = PapierkramApiClient::Client.new('subdomain', "SUPER-LONG-API-KEY")
165
+ client = PapierkramApi::Client.new('subdomain', "SUPER-LONG-API-KEY")
149
166
  ```
150
167
 
151
- Oder es werden die Umgebungsvariablen `PAPIERKRAM_SUBDOMAIN` und `PAPIERKRAM_API_KEY` gesetzt und der Client ohne Argumente initialisiert.
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 = PapierkramApiClient::Client.new
172
+ client = PapierkramApi::Client.new
156
173
  ```
157
174
 
158
175
  ### Banking::BankConnection (Bankverbindung)
159
176
 
160
- Der Endpunkt `/api/v1/banking/bank_connections` liefert Informationen über die Bankverbindungen. Die Informationen werden als `Faraday::Response` zurückgegeben.
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](/lib/api/v1/banking/bank_connections.rb) für mögliche Parameter.
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.banking.bank_connections.all
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.banking.bank_connections.by(id: 1)
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](/lib/api/v1/banking/transactions.rb)
254
+ [Transactions](lib/papierkram_api/v1/endpoints/banking/transactions.rb)
226
255
 
227
256
  ### Contact::Company (Unternehmen)
228
257
 
229
- Der Endpunkt `/api/v1/contact/companies` liefert Informationen über die Unternehmen. Die Informationen werden als `Faraday::Response` zurückgegeben.
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](/lib/api/v1/contact/companies.rb) für mögliche Parameter.
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 `/api/v1/contact/companies/{company_id}` liefert Informationen über die Kontaktpersonen. Die Informationen werden als `Faraday::Response` zurückgegeben.
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](/lib/api/v1/contact/companies_persons.rb) für mögliche Parameter.
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.contact.companies_persons.all(company_id: 1)
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.contact.companies_persons.by(company_id: 1, id: 1)
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 `/api/v1/expense/vouchers` liefert Informationen über die Ausgabe Belege. Die Informationen werden als `Faraday::Response` zurückgegeben.
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](/lib/api/v1/expense/vouchers.rb) für mögliche Parameter.
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.expense.vouchers.all
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.expense.vouchers.by(id: 1)
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.expense.vouchers.by(id: 1, pdf: true)
297
- puts Api::V1::Helpers::PdfFromResponse.new(voucher).to_pdf
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 `/api/v1/income/estimates` liefert Informationen über die Angebote. Die Informationen werden als `Faraday::Response` zurückgegeben.
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](/lib/api/v1/income/estimates.rb) für mögliche Parameter.
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.income.estimates.all
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.income.estimates.by(id: 1)
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.income.estimates.by(id: 1, pdf: true)
327
- puts Api::V1::Helpers::PdfFromResponse.new(estimate).to_pdf
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 `/api/v1/income/invoices` liefert Informationen über die Rechnungen. Die Informationen werden als `Faraday::Response` zurückgegeben.
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](/lib/api/v1/income/invoices.rb) für mögliche Parameter.
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.income.invoices.all
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.income.invoices.by(id: 1)
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.income.invoices.by(id: 1, pdf: true)
357
- puts Api::V1::Helpers::PdfFromResponse.new(invoice).to_pdf
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 `/api/v1/income/propositions` liefert Informationen über die Waren / Dienstleistungen. Die Informationen werden als `Faraday::Response` zurückgegeben.
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](/lib/api/v1/income/propositions.rb) für mögliche Parameter.
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.income.propositions.all
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.income.propositions.by(id: 1)
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 `/api/v1/info` liefert Informationen über die API. Die Informationen werden als `Faraday::Response` zurückgegeben.
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](/lib/api/v1/info.rb).
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 `/api/v1/projects` liefert Informationen über die Projekte. Die Informationen werden als `Faraday::Response` zurückgegeben.
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](/lib/api/v1/projects.rb) für mögliche Parameter.
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 `/api/v1/tracker/tasks` liefert Informationen über die Aufgaben. Die Informationen werden als `Faraday::Response` zurückgegeben.
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](/lib/api/v1/tracker/tasks.rb) für mögliche Parameter.
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 `/api/v1/tracker/time_entries` liefert Informationen über die Zeiteinträge. Die Informationen werden als `Faraday::Response` zurückgegeben.
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](/lib/api/v1/tracker/time_entries.rb)
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](/lib/api/v1/base.rb)
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 `Api::V1::Helpers::PdfFromResponse` kannst du für unterstützte Endpunkte aus einer `Faraday::Response` ein PDF schreiben.
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](/lib/api/v1/helpers/pdf_from_response.rb)
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 = Api::V1::Helpers::PdfFromResponse.new(response).to_pdf("Rechnung Nummer XXX")
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 *VCR Cassettes* nach dem Test. 🙏
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