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 +38 -33
- package/dist/index.cjs +1846 -433
- package/dist/index.d.cts +611 -72
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +611 -72
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +1786 -433
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
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,
|
|
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 {
|
|
327
|
+
import { AFFakturaPrijata, AFFakturaPrijataAction } from 'abra-flexi'
|
|
325
328
|
|
|
326
|
-
const faktura = await api.
|
|
327
|
-
await api.
|
|
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.
|