abra-flexi 0.7.0 → 0.8.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.
package/README.md CHANGED
@@ -1,9 +1,9 @@
1
1
  # ABRA Flexi Typescript client
2
2
  **English version follows**
3
3
 
4
- [ABRA Flexi](https://www.abra.eu/flexi/) je český Ekonomický software pro malé a střední podniky vyvýjený společností [ABRA Software](https://www.abra.eu). ABRA Flexi poskytuje přístup k datům pomocí REST API s veřejnou dokumentací.
4
+ [ABRA Flexi](https://www.abra.eu/flexi/) je český Ekonomický software pro malé a střední podniky vyvýjený společností [ABRA Software](https://www.abra.eu). ABRA Flexi poskytuje přístup k datům pomocí REST API s veřejnou dokumentací.
5
5
 
6
- ABRA Flexi Typescript client (AFTC) je knihovna pro přístup k REST API ABRA Flexi. Použitelná v prohlížeči i na serveru (Node.js) a poskytující metody pro dotazování a mutaci dat.
6
+ ABRA Flexi Typescript client (AFTC) je knihovna pro přístup k REST API ABRA Flexi. Použitelná v prohlížeči i na serveru (Node.js) a poskytující metody pro dotazování a mutaci dat.
7
7
 
8
8
  AFTC obsahuje třídu pro každou z evidencí v ABRA Flexi. Vlastnosti těchto tříd zároveň modelují vztahy mezi evidencemi.
9
9
 
@@ -16,22 +16,6 @@ Knihovna je distribuovaná jako npm balíček
16
16
  npm install abra-flexi
17
17
  ```
18
18
 
19
- **!! Zatím nedistribuováno !!**
20
- Místo npm použíjte přímo git repository a `npm link` (knihovnu mustí nejdříve přeložit).
21
- ```
22
- git checkout git@github.com:tomasKavan/abraFlexiClient.git
23
- cd abraFlexiClient
24
- npm install
25
- npm run build
26
- npm link
27
- ```
28
-
29
- Ve svém projektu potom:
30
-
31
- ```
32
- npm link abra-flexi
33
- ```
34
-
35
19
  ### Generování evidenčních tříd
36
20
 
37
21
  Součástní repository knihovny je nástroj pro generování evidenčních tříd z metadat, které poskytuje API. Generátor dovoluje vybrat subset generovaných tříd. To je užitečné, pokud chcete udržet knihovnu co nejmenší a generovat pouze třídy pro Vámi použivané evidence.
@@ -54,7 +38,7 @@ npm run build
54
38
 
55
39
  ### Příklady
56
40
 
57
- Složka `examples` obsahuje příklady použití knihovny. Prozatím jsem připravil
41
+ Složka `examples` obsahuje příklady použití knihovny. Prozatím jsem připravil
58
42
  - jednoduchý CLI nástroj pro načtení konkrétní evidence (loadEntityCli.ts)
59
43
  - soubor s příkladem volání více typů dotazů (loadEntity.ts)
60
44
  - příklad vytvoŕení nové faktury. Nutno nastavit konstanty na řádku 29-31 (createAndSave.ts)
@@ -73,7 +57,7 @@ V návodu se používají pojmy
73
57
 
74
58
  ### Import a inicializace knihovny
75
59
 
76
- ```typescript
60
+ ```typescript
77
61
  import { AFApiClient, AFApiConfig } from 'abra-flexi'
78
62
 
79
63
  const apiOpts: AFApiConfig = {
@@ -111,7 +95,7 @@ const api = new AFApiClient({
111
95
 
112
96
  ### Dotazování instancí
113
97
 
114
- Pro dotazování instancí jsou k dispozici metody `query` (vrací kolekci instancí evidenčních tříd) a `queryOne` (vrací jedu instanci).
98
+ Pro dotazování instancí jsou k dispozici metody `query` (vrací kolekci instancí evidenčních tříd) a `queryOne` (vrací jedu instanci).
115
99
 
116
100
  Parametrech dotazu může být uveden požadovaný detail. Detail se zapisuje formou pole vlastností evidencí formou textových řetězců. Detaily relací je možné vkládat pomocí pole o 2 prvcích, kde prvním je název vlastnosti relace v evidenci a druhým opět pole vlastností v napojené evidenci. Jasněji je to patrné z příkladu níže.
117
101
 
@@ -121,7 +105,7 @@ Filtrování je možné vkládat pomocí metod `Filter(expr, params)`, `ID(id)`,
121
105
  - `:key` se nahradí textovou hodnotou klíče `key` ve druhém argumentu,
122
106
  - `::mujKod` se nahradí textovou hodnotou klíče `mujKod` ve druhém argumentu a prefixuje se předponou `code:`,
123
107
 
124
- Obě návěští podporují kolekce. Návěstí se pak nahradí výsledkem `kolekce.join(',')`. Pokud je hodnotou instance evidence (podtřída AFEntity), ignoruje se typ návěští a použije se číselné id resp. kód, není-li číselné id vyplněno/načteno.
108
+ Obě návěští podporují kolekce. Návěstí se pak nahradí výsledkem `kolekce.join(',')`. Pokud je hodnotou instance evidence (podtřída AFEntity), ignoruje se typ návěští a použije se číselné id resp. kód, není-li číselné id vyplněno/načteno.
125
109
 
126
110
  Metoda `Filter` vrací objekt s mající následující metody:
127
111
  - `use(filter, op)` - přidá jiný objekt filtru do stávajícího. Atribut `op` určuje operátor pro spojení se stávajícím filtrem (`and` nebo `or`, defaultní je `or`). Filtr je vložen v závorkách.
@@ -131,13 +115,13 @@ Metoda `Filter` vrací objekt s mající následující metody:
131
115
 
132
116
  Všechny metody vrací vždy novou instanci filtru. Filtry si tedy můžete předpřipravit a následně spojivat pomocí `use()`/`useNot()`.
133
117
 
134
- ```typescript
118
+ ```typescript
135
119
  import { AFInterniDoklad, Filter } from 'abra-flexi'
136
120
 
137
121
  const queryOpts: AFQueryOptions = {
138
122
  detail: ['id', 'kod', 'typDokl', ['uzivatelske-vazby', ['id', 'evidenceType', 'objectId', 'vazbaTyp']]],
139
123
  filter: Filter(`typDokl = '::td'`, { td: 'MUJ_TYP_DOKLADU'})
140
- }
124
+ }
141
125
 
142
126
  const run = async () => {
143
127
  try {
@@ -184,7 +168,7 @@ const secondPage = await api.query(AFAdresar, {
184
168
 
185
169
  Pro načtení většího detailu či aktualizaci dříve načtených instancí můžete použít metody `populate` a `populateOne`. Detailem požadované vlastnosti se aktualizují na původní instanci.
186
170
 
187
- ```typescript
171
+ ```typescript
188
172
  const loadedEntity // Zde máme uloženou dříve načtenou instanci entity AFInterniDoklad
189
173
 
190
174
  const options = {
@@ -210,7 +194,7 @@ Instance entit odkazované pomocí uživatelských vazeb je možné načíst met
210
194
 
211
195
  Načteny jsou pouze instance vazeb, které se již vyskytují ve zdrojové kolekci! Metoda `queryURels` tedy sama uživatelské vazby na jednotlivých zdrojových instancích nenačítá. Načítá pouze instance, na které vazba odkazuje.
212
196
 
213
- ```typescript
197
+ ```typescript
214
198
  const soureEntities // Zde máme kolekci entit, pro které načítáme instance odkazované uživatelskou vazbou
215
199
 
216
200
  const run = async () => {
@@ -316,22 +300,43 @@ const pdf = await api.queryFile(AFFakturaVydana, 'pdf', {
316
300
  })
317
301
  ```
318
302
 
303
+ #### Seznam dostupných sestav
304
+
305
+ Sestavy dostupné pro danou evidenci lze získat metodou `queryReports()`. Vrací pole `AFReportInfo` — každá obsahuje mimo jiné unikátní `reportId` (to je hodnota posílaná do `reportName`) a seznam podporovaných jazyků (`languages.language[]`).
306
+
307
+ Objekt `AFReportInfo` (resp. `AFReportLanguage` z jeho `languages.language`) lze předat přímo do `reportName` / `reportLang` v `queryFile()` — knihovna z něj vytáhne správné hodnoty:
308
+
309
+ ```typescript
310
+ const reports = await api.queryReports(AFFakturaVydana)
311
+ const reportDef = reports.find(r => r.isDefault === 'true') ?? reports[0]
312
+
313
+ const pdf = await api.queryFile(AFFakturaVydana, 'pdf', {
314
+ filter: ID(42),
315
+ reportName: reportDef, // → reportId
316
+ reportLang: reportDef.languages?.language.find(l => l.code === 'en') ?? 'cs'
317
+ })
318
+ ```
319
+
319
320
  ### Akce na instancích
320
321
 
321
- Pojmenované akce definované v ABRA Flexi (např. storno, uzavření dokladu) lze volat metodou `callEntityAction()`. Instance musí být uložená (mít přidělené `id`).
322
+ Pojmenované akce definované v ABRA Flexi (např. storno, uhrazení zápočtem) lze volat metodou `action()`. Instance musí být uložená (mít přidělené `id`) nebo v rozpoznatelném stavu — pokud má pouze `kod` / `ext`, klient si nejdříve dohledá `id`.
323
+
324
+ Pro každou evidenci s reálnými business akcemi generátor vyrobí samostatný TypeScript enum (např. `AFFakturaPrijataAction`). CRUD pseudo-akce (`new`/`edit`/`delete`/`copy`) jsou vynechány — používají se přes dedikované metody `create()`, `save()` a `delete()`. Akce se validují podle metadat dané evidence; volání nepodporované akce skončí chybou ještě před jakýmkoli HTTP požadavkem.
322
325
 
323
326
  ```typescript
324
- import { AFFakturaVydana } from 'abra-flexi'
327
+ import { AFFakturaPrijata, AFFakturaPrijataAction } from 'abra-flexi'
325
328
 
326
- const faktura = await api.createIdStub(AFFakturaVydana, { id: 2452 })
327
- await api.callEntityAction(faktura, 'storno')
329
+ const faktura = await api.resolveStubId(AFFakturaPrijata, 2452)
330
+ await api.action(faktura, AFFakturaPrijataAction.Storno)
331
+ // nebo s textovou hodnotou:
332
+ await api.action(faktura, 'uhrad-zapoctem')
328
333
  ```
329
334
 
330
335
  ## Task list pro vydání stabilní verze
331
336
 
332
337
  - [X] Generování evidenčních tříd dle metadat REST API
333
338
  - [X] Načítání kolekcí a jednotlivých instancí z REST API
334
- - [X] Načítání užviatelských relací
339
+ - [X] Načítání užviatelských relací
335
340
  - [X] Refersh již načtených dat
336
341
  - [X] Pohodlná práce se štítky
337
342
  - [X] Vytváření, mazání a změna záznamů v REST API
@@ -346,8 +351,8 @@ await api.callEntityAction(faktura, 'storno')
346
351
 
347
352
  # English
348
353
 
349
- [ABRA Flexi](https://www.abra.eu/en/flexi/) is Czech ERP for small businesses, developed by [ABRA Software](https://www.abra.eu/en). To access data in ABRA Flexi there is a REST API with public documentation.
354
+ [ABRA Flexi](https://www.abra.eu/en/flexi/) is Czech ERP for small businesses, developed by [ABRA Software](https://www.abra.eu/en). To access data in ABRA Flexi there is a REST API with public documentation.
350
355
 
351
- ABRA Flexi Typescript client (AFTC) is library to call ABRA Flexi REST API. It's for browsers and server environments (Node.js). It provides methods for CRUD.
356
+ ABRA Flexi Typescript client (AFTC) is library to call ABRA Flexi REST API. It's for browsers and server environments (Node.js). It provides methods for CRUD.
352
357
 
353
358
  Because ABRA Flexi is Czech software, it's expected to have mainly Czech developer audience. English version of the documentation will be finalized when the library API becomes stable.