abra-flexi 1.0.0-beta.2
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/LICENSE +24 -0
- package/README.md +193 -0
- package/abra/AFApiClient.d.ts +20 -0
- package/abra/AFApiClient.js +288 -0
- package/abra/AFApiUrlHelper.d.ts +4 -0
- package/abra/AFApiUrlHelper.js +85 -0
- package/abra/AFDataType.d.ts +19 -0
- package/abra/AFDataType.js +46 -0
- package/abra/AFEntity.d.ts +19 -0
- package/abra/AFEntity.js +30 -0
- package/abra/AFError.d.ts +13 -0
- package/abra/AFError.js +23 -0
- package/abra/AFFilter.d.ts +22 -0
- package/abra/AFFilter.js +58 -0
- package/abra/AFStitkyCache.d.ts +15 -0
- package/abra/AFStitkyCache.js +87 -0
- package/abra/AFTypes.d.ts +87 -0
- package/abra/AFTypes.js +29 -0
- package/generated/AFEntityEnums.d.ts +1018 -0
- package/generated/AFEntityEnums.js +1144 -0
- package/generated/AFEntityRegistry.d.ts +3 -0
- package/generated/AFEntityRegistry.js +551 -0
- package/generated/entities/AFAdresar.d.ts +106 -0
- package/generated/entities/AFAdresar.js +607 -0
- package/generated/entities/AFAdresarBankovniUcet.d.ts +36 -0
- package/generated/entities/AFAdresarBankovniUcet.js +177 -0
- package/generated/entities/AFAnalyzaNakupu.d.ts +71 -0
- package/generated/entities/AFAnalyzaNakupu.js +426 -0
- package/generated/entities/AFAnalyzaProdeje.d.ts +74 -0
- package/generated/entities/AFAnalyzaProdeje.js +450 -0
- package/generated/entities/AFAnalyzaZakazky.d.ts +53 -0
- package/generated/entities/AFAnalyzaZakazky.js +292 -0
- package/generated/entities/AFAtribut.d.ts +32 -0
- package/generated/entities/AFAtribut.js +141 -0
- package/generated/entities/AFAutotisk.d.ts +20 -0
- package/generated/entities/AFAutotisk.js +78 -0
- package/generated/entities/AFBanka.d.ts +152 -0
- package/generated/entities/AFBanka.js +902 -0
- package/generated/entities/AFBankaPolozka.d.ts +76 -0
- package/generated/entities/AFBankaPolozka.js +419 -0
- package/generated/entities/AFBankovniUcet.d.ts +77 -0
- package/generated/entities/AFBankovniUcet.js +451 -0
- package/generated/entities/AFBankovniUcetPokladna.d.ts +31 -0
- package/generated/entities/AFBankovniUcetPokladna.js +145 -0
- package/generated/entities/AFBankovniUcetSkladPokladna.d.ts +31 -0
- package/generated/entities/AFBankovniUcetSkladPokladna.js +145 -0
- package/generated/entities/AFCastkyKOdpoctu.d.ts +21 -0
- package/generated/entities/AFCastkyKOdpoctu.js +108 -0
- package/generated/entities/AFCenik.d.ts +165 -0
- package/generated/entities/AFCenik.js +1008 -0
- package/generated/entities/AFCenikObal.d.ts +36 -0
- package/generated/entities/AFCenikObal.js +198 -0
- package/generated/entities/AFCenikTypSazbyDph.d.ts +22 -0
- package/generated/entities/AFCenikTypSazbyDph.js +87 -0
- package/generated/entities/AFCenikovaSkupina.d.ts +22 -0
- package/generated/entities/AFCenikovaSkupina.js +100 -0
- package/generated/entities/AFCenikovyPohybNakup.d.ts +106 -0
- package/generated/entities/AFCenikovyPohybNakup.js +670 -0
- package/generated/entities/AFCenikovyPohybProdej.d.ts +106 -0
- package/generated/entities/AFCenikovyPohybProdej.js +670 -0
- package/generated/entities/AFCenovaUroven.d.ts +56 -0
- package/generated/entities/AFCenovaUroven.js +323 -0
- package/generated/entities/AFCertifikacniAutorita.d.ts +18 -0
- package/generated/entities/AFCertifikacniAutorita.js +72 -0
- package/generated/entities/AFCertifikat.d.ts +22 -0
- package/generated/entities/AFCertifikat.js +92 -0
- package/generated/entities/AFCertifikatFinbricks.d.ts +22 -0
- package/generated/entities/AFCertifikatFinbricks.js +92 -0
- package/generated/entities/AFCinnost.d.ts +23 -0
- package/generated/entities/AFCinnost.js +105 -0
- package/generated/entities/AFCiselnikMzdovychSlozek.d.ts +71 -0
- package/generated/entities/AFCiselnikMzdovychSlozek.js +453 -0
- package/generated/entities/AFCisloBaliku.d.ts +20 -0
- package/generated/entities/AFCisloBaliku.js +74 -0
- package/generated/entities/AFCleneniDph.d.ts +32 -0
- package/generated/entities/AFCleneniDph.js +169 -0
- package/generated/entities/AFCleneniKontrolniHlaseni.d.ts +30 -0
- package/generated/entities/AFCleneniKontrolniHlaseni.js +150 -0
- package/generated/entities/AFCustomButton.d.ts +19 -0
- package/generated/entities/AFCustomButton.js +75 -0
- package/generated/entities/AFDanovyNaklad.d.ts +31 -0
- package/generated/entities/AFDanovyNaklad.js +136 -0
- package/generated/entities/AFDanovyOdpis.d.ts +33 -0
- package/generated/entities/AFDanovyOdpis.js +150 -0
- package/generated/entities/AFDashboardPanel.d.ts +29 -0
- package/generated/entities/AFDashboardPanel.js +141 -0
- package/generated/entities/AFDashboardSharing.d.ts +18 -0
- package/generated/entities/AFDashboardSharing.js +58 -0
- package/generated/entities/AFDite.d.ts +29 -0
- package/generated/entities/AFDite.js +132 -0
- package/generated/entities/AFDodavatel.d.ts +37 -0
- package/generated/entities/AFDodavatel.js +183 -0
- package/generated/entities/AFDodavatelskaSmlouva.d.ts +82 -0
- package/generated/entities/AFDodavatelskaSmlouva.js +441 -0
- package/generated/entities/AFDodavatelskyTypSmlouvy.d.ts +37 -0
- package/generated/entities/AFDodavatelskyTypSmlouvy.js +197 -0
- package/generated/entities/AFDoklad.d.ts +22 -0
- package/generated/entities/AFDoklad.js +109 -0
- package/generated/entities/AFDokladKUhrade.d.ts +248 -0
- package/generated/entities/AFDokladKUhrade.js +1579 -0
- package/generated/entities/AFDoporuceni.d.ts +17 -0
- package/generated/entities/AFDoporuceni.js +73 -0
- package/generated/entities/AFFakturaPrijata.d.ts +205 -0
- package/generated/entities/AFFakturaPrijata.js +1221 -0
- package/generated/entities/AFFakturaPrijataPolozka.d.ts +132 -0
- package/generated/entities/AFFakturaPrijataPolozka.js +822 -0
- package/generated/entities/AFFakturaVydana.d.ts +231 -0
- package/generated/entities/AFFakturaVydana.js +1425 -0
- package/generated/entities/AFFakturaVydanaPolozka.d.ts +135 -0
- package/generated/entities/AFFakturaVydanaPolozka.js +837 -0
- package/generated/entities/AFFiltr.d.ts +24 -0
- package/generated/entities/AFFiltr.js +107 -0
- package/generated/entities/AFFormaDopravy.d.ts +43 -0
- package/generated/entities/AFFormaDopravy.js +241 -0
- package/generated/entities/AFFormaUhrady.d.ts +38 -0
- package/generated/entities/AFFormaUhrady.js +196 -0
- package/generated/entities/AFFormaUhradyZauctovani.d.ts +18 -0
- package/generated/entities/AFFormaUhradyZauctovani.js +58 -0
- package/generated/entities/AFFormatElektronickehoBankovnictvi.d.ts +22 -0
- package/generated/entities/AFFormatElektronickehoBankovnictvi.js +115 -0
- package/generated/entities/AFFormatElektronickehoPrikazu.d.ts +27 -0
- package/generated/entities/AFFormatElektronickehoPrikazu.js +150 -0
- package/generated/entities/AFGlobalStore.d.ts +11 -0
- package/generated/entities/AFGlobalStore.js +33 -0
- package/generated/entities/AFHlavniKniha.d.ts +28 -0
- package/generated/entities/AFHlavniKniha.js +139 -0
- package/generated/entities/AFHodnoceniZakazky.d.ts +22 -0
- package/generated/entities/AFHodnoceniZakazky.js +100 -0
- package/generated/entities/AFIndividualniCenik.d.ts +32 -0
- package/generated/entities/AFIndividualniCenik.js +169 -0
- package/generated/entities/AFInsight.d.ts +24 -0
- package/generated/entities/AFInsight.js +116 -0
- package/generated/entities/AFInterniDoklad.d.ts +132 -0
- package/generated/entities/AFInterniDoklad.js +783 -0
- package/generated/entities/AFInterniDokladPolozka.d.ts +110 -0
- package/generated/entities/AFInterniDokladPolozka.js +679 -0
- package/generated/entities/AFIntrastatDodaciPodminky.d.ts +22 -0
- package/generated/entities/AFIntrastatDodaciPodminky.js +100 -0
- package/generated/entities/AFIntrastatDruhDopravy.d.ts +22 -0
- package/generated/entities/AFIntrastatDruhDopravy.js +100 -0
- package/generated/entities/AFIntrastatKodNomenklatury.d.ts +24 -0
- package/generated/entities/AFIntrastatKodNomenklatury.js +104 -0
- package/generated/entities/AFIntrastatKrajUrceni.d.ts +22 -0
- package/generated/entities/AFIntrastatKrajUrceni.js +100 -0
- package/generated/entities/AFIntrastatKurz.d.ts +19 -0
- package/generated/entities/AFIntrastatKurz.js +65 -0
- package/generated/entities/AFIntrastatMernaJednotka.d.ts +22 -0
- package/generated/entities/AFIntrastatMernaJednotka.js +100 -0
- package/generated/entities/AFIntrastatObchodniTransakce.d.ts +22 -0
- package/generated/entities/AFIntrastatObchodniTransakce.js +100 -0
- package/generated/entities/AFIntrastatZvlastniPohyb.d.ts +22 -0
- package/generated/entities/AFIntrastatZvlastniPohyb.js +100 -0
- package/generated/entities/AFInventura.d.ts +28 -0
- package/generated/entities/AFInventura.js +120 -0
- package/generated/entities/AFInventuraPolozka.d.ts +41 -0
- package/generated/entities/AFInventuraPolozka.js +209 -0
- package/generated/entities/AFKonstSymbol.d.ts +22 -0
- package/generated/entities/AFKonstSymbol.js +100 -0
- package/generated/entities/AFKontakt.d.ts +52 -0
- package/generated/entities/AFKontakt.js +292 -0
- package/generated/entities/AFKurz.d.ts +19 -0
- package/generated/entities/AFKurz.js +65 -0
- package/generated/entities/AFKurzProCenotvorbu.d.ts +19 -0
- package/generated/entities/AFKurzProCenotvorbu.js +65 -0
- package/generated/entities/AFKurzProPreceneni.d.ts +19 -0
- package/generated/entities/AFKurzProPreceneni.js +65 -0
- package/generated/entities/AFKusovnik.d.ts +26 -0
- package/generated/entities/AFKusovnik.js +122 -0
- package/generated/entities/AFLeasing.d.ts +77 -0
- package/generated/entities/AFLeasing.js +433 -0
- package/generated/entities/AFMajetek.d.ts +103 -0
- package/generated/entities/AFMajetek.js +608 -0
- package/generated/entities/AFMajetekUdalost.d.ts +41 -0
- package/generated/entities/AFMajetekUdalost.js +210 -0
- package/generated/entities/AFMapovaniSkladu.d.ts +21 -0
- package/generated/entities/AFMapovaniSkladu.js +68 -0
- package/generated/entities/AFMena.d.ts +29 -0
- package/generated/entities/AFMena.js +135 -0
- package/generated/entities/AFMernaJednotka.d.ts +29 -0
- package/generated/entities/AFMernaJednotka.js +153 -0
- package/generated/entities/AFMistoUrceni.d.ts +37 -0
- package/generated/entities/AFMistoUrceni.js +188 -0
- package/generated/entities/AFMzda.d.ts +103 -0
- package/generated/entities/AFMzda.js +640 -0
- package/generated/entities/AFMzdovaSlozka.d.ts +64 -0
- package/generated/entities/AFMzdovaSlozka.js +359 -0
- package/generated/entities/AFMzdyBankovniSpojeni.d.ts +37 -0
- package/generated/entities/AFMzdyBankovniSpojeni.js +178 -0
- package/generated/entities/AFNabidkaPrijata.d.ts +126 -0
- package/generated/entities/AFNabidkaPrijata.js +751 -0
- package/generated/entities/AFNabidkaPrijataPolozka.d.ts +75 -0
- package/generated/entities/AFNabidkaPrijataPolozka.js +426 -0
- package/generated/entities/AFNabidkaVydana.d.ts +130 -0
- package/generated/entities/AFNabidkaVydana.js +775 -0
- package/generated/entities/AFNabidkaVydanaPolozka.d.ts +87 -0
- package/generated/entities/AFNabidkaVydanaPolozka.js +514 -0
- package/generated/entities/AFNaklad.d.ts +28 -0
- package/generated/entities/AFNaklad.js +113 -0
- package/generated/entities/AFNastaveni.d.ts +247 -0
- package/generated/entities/AFNastaveni.js +1773 -0
- package/generated/entities/AFNepritomnost.d.ts +37 -0
- package/generated/entities/AFNepritomnost.js +177 -0
- package/generated/entities/AFObjednavkaPrijata.d.ts +155 -0
- package/generated/entities/AFObjednavkaPrijata.js +941 -0
- package/generated/entities/AFObjednavkaPrijataPolozka.d.ts +96 -0
- package/generated/entities/AFObjednavkaPrijataPolozka.js +584 -0
- package/generated/entities/AFObjednavkaVydana.d.ts +129 -0
- package/generated/entities/AFObjednavkaVydana.js +774 -0
- package/generated/entities/AFObjednavkaVydanaPolozka.d.ts +81 -0
- package/generated/entities/AFObjednavkaVydanaPolozka.js +475 -0
- package/generated/entities/AFObrat.d.ts +29 -0
- package/generated/entities/AFObrat.js +126 -0
- package/generated/entities/AFObratPolozky.d.ts +20 -0
- package/generated/entities/AFObratPolozky.js +77 -0
- package/generated/entities/AFObratovaPredvaha.d.ts +28 -0
- package/generated/entities/AFObratovaPredvaha.js +139 -0
- package/generated/entities/AFOdberatel.d.ts +38 -0
- package/generated/entities/AFOdberatel.js +185 -0
- package/generated/entities/AFOdpisovaSkupina.d.ts +35 -0
- package/generated/entities/AFOdpisovaSkupina.js +189 -0
- package/generated/entities/AFOsoba.d.ts +132 -0
- package/generated/entities/AFOsoba.js +877 -0
- package/generated/entities/AFOsobaBlizka.d.ts +29 -0
- package/generated/entities/AFOsobaBlizka.js +132 -0
- package/generated/entities/AFOsobaHlavicka.d.ts +19 -0
- package/generated/entities/AFOsobaHlavicka.js +73 -0
- package/generated/entities/AFParametr.d.ts +32 -0
- package/generated/entities/AFParametr.js +125 -0
- package/generated/entities/AFPenezniUstav.d.ts +22 -0
- package/generated/entities/AFPenezniUstav.js +100 -0
- package/generated/entities/AFPoSplatnosti.d.ts +15 -0
- package/generated/entities/AFPoSplatnosti.js +50 -0
- package/generated/entities/AFPodkladyDph.d.ts +64 -0
- package/generated/entities/AFPodkladyDph.js +380 -0
- package/generated/entities/AFPodobneZbozi.d.ts +17 -0
- package/generated/entities/AFPodobneZbozi.js +59 -0
- package/generated/entities/AFPohledavka.d.ts +190 -0
- package/generated/entities/AFPohledavka.js +1143 -0
- package/generated/entities/AFPohledavkaPolozka.d.ts +110 -0
- package/generated/entities/AFPohledavkaPolozka.js +681 -0
- package/generated/entities/AFPohybNaUctech.d.ts +53 -0
- package/generated/entities/AFPohybNaUctech.js +292 -0
- package/generated/entities/AFPokladna.d.ts +37 -0
- package/generated/entities/AFPokladna.js +177 -0
- package/generated/entities/AFPokladniPohyb.d.ts +165 -0
- package/generated/entities/AFPokladniPohyb.js +985 -0
- package/generated/entities/AFPokladniPohybPolozka.d.ts +128 -0
- package/generated/entities/AFPokladniPohybPolozka.js +791 -0
- package/generated/entities/AFPoplatek.d.ts +22 -0
- package/generated/entities/AFPoplatek.js +85 -0
- package/generated/entities/AFPoptavkaPrijata.d.ts +129 -0
- package/generated/entities/AFPoptavkaPrijata.js +768 -0
- package/generated/entities/AFPoptavkaPrijataPolozka.d.ts +87 -0
- package/generated/entities/AFPoptavkaPrijataPolozka.js +514 -0
- package/generated/entities/AFPoptavkaVydana.d.ts +123 -0
- package/generated/entities/AFPoptavkaVydana.js +734 -0
- package/generated/entities/AFPoptavkaVydanaPolozka.d.ts +75 -0
- package/generated/entities/AFPoptavkaVydanaPolozka.js +426 -0
- package/generated/entities/AFPrace.d.ts +28 -0
- package/generated/entities/AFPrace.js +105 -0
- package/generated/entities/AFPraceMesic.d.ts +28 -0
- package/generated/entities/AFPraceMesic.js +105 -0
- package/generated/entities/AFPracovniPomer.d.ts +91 -0
- package/generated/entities/AFPracovniPomer.js +574 -0
- package/generated/entities/AFPracovniPomerHlavicka.d.ts +25 -0
- package/generated/entities/AFPracovniPomerHlavicka.js +112 -0
- package/generated/entities/AFPravoViditelnosti.d.ts +14 -0
- package/generated/entities/AFPravoViditelnosti.js +55 -0
- package/generated/entities/AFPredpisZauctovani.d.ts +42 -0
- package/generated/entities/AFPredpisZauctovani.js +235 -0
- package/generated/entities/AFPrehledZamestnancu.d.ts +33 -0
- package/generated/entities/AFPrehledZamestnancu.js +165 -0
- package/generated/entities/AFPreneseniDph.d.ts +24 -0
- package/generated/entities/AFPreneseniDph.js +111 -0
- package/generated/entities/AFPricteniRozdilu.d.ts +8 -0
- package/generated/entities/AFPricteniRozdilu.js +11 -0
- package/generated/entities/AFPrikazKInkasu.d.ts +38 -0
- package/generated/entities/AFPrikazKInkasu.js +178 -0
- package/generated/entities/AFPrikazKInkasuPolozka.d.ts +50 -0
- package/generated/entities/AFPrikazKInkasuPolozka.js +268 -0
- package/generated/entities/AFPrikazKUhrade.d.ts +39 -0
- package/generated/entities/AFPrikazKUhrade.js +185 -0
- package/generated/entities/AFPrikazKUhradePolozka.d.ts +50 -0
- package/generated/entities/AFPrikazKUhradePolozka.js +268 -0
- package/generated/entities/AFPriloha.d.ts +61 -0
- package/generated/entities/AFPriloha.js +288 -0
- package/generated/entities/AFPrislustenstvi.d.ts +17 -0
- package/generated/entities/AFPrislustenstvi.js +59 -0
- package/generated/entities/AFProdejka.d.ts +208 -0
- package/generated/entities/AFProdejka.js +1250 -0
- package/generated/entities/AFProdejkaPlatba.d.ts +26 -0
- package/generated/entities/AFProdejkaPlatba.js +125 -0
- package/generated/entities/AFPsc.d.ts +29 -0
- package/generated/entities/AFPsc.js +144 -0
- package/generated/entities/AFRada.d.ts +25 -0
- package/generated/entities/AFRada.js +115 -0
- package/generated/entities/AFRadaBanka.d.ts +25 -0
- package/generated/entities/AFRadaBanka.js +115 -0
- package/generated/entities/AFRadaFakturyPrijate.d.ts +25 -0
- package/generated/entities/AFRadaFakturyPrijate.js +115 -0
- package/generated/entities/AFRadaFakturyVydane.d.ts +25 -0
- package/generated/entities/AFRadaFakturyVydane.js +115 -0
- package/generated/entities/AFRadaInternihoDokladu.d.ts +25 -0
- package/generated/entities/AFRadaInternihoDokladu.js +115 -0
- package/generated/entities/AFRadaNabidkyPrijate.d.ts +25 -0
- package/generated/entities/AFRadaNabidkyPrijate.js +115 -0
- package/generated/entities/AFRadaNabidkyVydane.d.ts +25 -0
- package/generated/entities/AFRadaNabidkyVydane.js +115 -0
- package/generated/entities/AFRadaObjednavkyPrijate.d.ts +25 -0
- package/generated/entities/AFRadaObjednavkyPrijate.js +115 -0
- package/generated/entities/AFRadaObjednavkyVydane.d.ts +25 -0
- package/generated/entities/AFRadaObjednavkyVydane.js +115 -0
- package/generated/entities/AFRadaPohledavky.d.ts +25 -0
- package/generated/entities/AFRadaPohledavky.js +115 -0
- package/generated/entities/AFRadaPokladniPohyb.d.ts +25 -0
- package/generated/entities/AFRadaPokladniPohyb.js +115 -0
- package/generated/entities/AFRadaPoptavkyPrijate.d.ts +25 -0
- package/generated/entities/AFRadaPoptavkyPrijate.js +115 -0
- package/generated/entities/AFRadaPoptavkyVydane.d.ts +25 -0
- package/generated/entities/AFRadaPoptavkyVydane.js +115 -0
- package/generated/entities/AFRadaSkladovyPohyb.d.ts +25 -0
- package/generated/entities/AFRadaSkladovyPohyb.js +115 -0
- package/generated/entities/AFRadaZavazku.d.ts +25 -0
- package/generated/entities/AFRadaZavazku.js +115 -0
- package/generated/entities/AFRadekPriznaniDph.d.ts +27 -0
- package/generated/entities/AFRadekPriznaniDph.js +116 -0
- package/generated/entities/AFRadekSestavy.d.ts +36 -0
- package/generated/entities/AFRadekSestavy.js +185 -0
- package/generated/entities/AFRegion.d.ts +28 -0
- package/generated/entities/AFRegion.js +140 -0
- package/generated/entities/AFReport.d.ts +34 -0
- package/generated/entities/AFReport.js +159 -0
- package/generated/entities/AFRezervace.d.ts +28 -0
- package/generated/entities/AFRezervace.js +113 -0
- package/generated/entities/AFRocniRada.d.ts +23 -0
- package/generated/entities/AFRocniRada.js +95 -0
- package/generated/entities/AFRole.d.ts +24 -0
- package/generated/entities/AFRole.js +111 -0
- package/generated/entities/AFRozvahaPoUctech.d.ts +136 -0
- package/generated/entities/AFRozvahaPoUctech.js +1004 -0
- package/generated/entities/AFSablonaMail.d.ts +24 -0
- package/generated/entities/AFSablonaMail.js +116 -0
- package/generated/entities/AFSablonaUpominky.d.ts +43 -0
- package/generated/entities/AFSablonaUpominky.js +249 -0
- package/generated/entities/AFSadyAKomplety.d.ts +19 -0
- package/generated/entities/AFSadyAKomplety.js +67 -0
- package/generated/entities/AFSaldo.d.ts +53 -0
- package/generated/entities/AFSaldo.js +292 -0
- package/generated/entities/AFSaldoKDatu.d.ts +169 -0
- package/generated/entities/AFSaldoKDatu.js +1072 -0
- package/generated/entities/AFSarzeExpirace.d.ts +24 -0
- package/generated/entities/AFSarzeExpirace.js +105 -0
- package/generated/entities/AFSazbaDph.d.ts +23 -0
- package/generated/entities/AFSazbaDph.js +90 -0
- package/generated/entities/AFSestava.d.ts +86 -0
- package/generated/entities/AFSestava.js +544 -0
- package/generated/entities/AFSettingStore.d.ts +12 -0
- package/generated/entities/AFSettingStore.js +40 -0
- package/generated/entities/AFSklad.d.ts +38 -0
- package/generated/entities/AFSklad.js +185 -0
- package/generated/entities/AFSkladovaKarta.d.ts +62 -0
- package/generated/entities/AFSkladovaKarta.js +358 -0
- package/generated/entities/AFSkladovyPohyb.d.ts +130 -0
- package/generated/entities/AFSkladovyPohyb.js +730 -0
- package/generated/entities/AFSkladovyPohybPolozka.d.ts +105 -0
- package/generated/entities/AFSkladovyPohybPolozka.js +623 -0
- package/generated/entities/AFSkupinaAtributu.d.ts +27 -0
- package/generated/entities/AFSkupinaAtributu.js +134 -0
- package/generated/entities/AFSkupinaFirem.d.ts +27 -0
- package/generated/entities/AFSkupinaFirem.js +127 -0
- package/generated/entities/AFSkupinaOsob.d.ts +44 -0
- package/generated/entities/AFSkupinaOsob.js +246 -0
- package/generated/entities/AFSkupinaPlneni.d.ts +22 -0
- package/generated/entities/AFSkupinaPlneni.js +100 -0
- package/generated/entities/AFSkupinaStitku.d.ts +23 -0
- package/generated/entities/AFSkupinaStitku.js +107 -0
- package/generated/entities/AFSkupinaZbozi.d.ts +53 -0
- package/generated/entities/AFSkupinaZbozi.js +333 -0
- package/generated/entities/AFSmena.d.ts +23 -0
- package/generated/entities/AFSmena.js +86 -0
- package/generated/entities/AFSmlouva.d.ts +85 -0
- package/generated/entities/AFSmlouva.js +462 -0
- package/generated/entities/AFSmlouvaPolozka.d.ts +74 -0
- package/generated/entities/AFSmlouvaPolozka.js +388 -0
- package/generated/entities/AFSmlouvaZurnal.d.ts +18 -0
- package/generated/entities/AFSmlouvaZurnal.js +73 -0
- package/generated/entities/AFSouhrnneHlaseniDph.d.ts +15 -0
- package/generated/entities/AFSouhrnneHlaseniDph.js +57 -0
- package/generated/entities/AFSplatkovyKalendar.d.ts +46 -0
- package/generated/entities/AFSplatkovyKalendar.js +243 -0
- package/generated/entities/AFSrazka.d.ts +43 -0
- package/generated/entities/AFSrazka.js +215 -0
- package/generated/entities/AFStalaMzdovaSlozka.d.ts +55 -0
- package/generated/entities/AFStalaMzdovaSlozka.js +287 -0
- package/generated/entities/AFStandardniPredpis.d.ts +23 -0
- package/generated/entities/AFStandardniPredpis.js +94 -0
- package/generated/entities/AFStat.d.ts +33 -0
- package/generated/entities/AFStat.js +171 -0
- package/generated/entities/AFStatDph.d.ts +33 -0
- package/generated/entities/AFStatDph.js +171 -0
- package/generated/entities/AFStavCeniku.d.ts +27 -0
- package/generated/entities/AFStavCeniku.js +127 -0
- package/generated/entities/AFStavObchodnihoDokladu.d.ts +32 -0
- package/generated/entities/AFStavObchodnihoDokladu.js +167 -0
- package/generated/entities/AFStavSkladuKDatu.d.ts +23 -0
- package/generated/entities/AFStavSkladuKDatu.js +99 -0
- package/generated/entities/AFStavSmlouvy.d.ts +23 -0
- package/generated/entities/AFStavSmlouvy.js +105 -0
- package/generated/entities/AFStavUctu.d.ts +136 -0
- package/generated/entities/AFStavUctu.js +1004 -0
- package/generated/entities/AFStavZakazky.d.ts +22 -0
- package/generated/entities/AFStavZakazky.js +97 -0
- package/generated/entities/AFStitek.d.ts +43 -0
- package/generated/entities/AFStitek.js +241 -0
- package/generated/entities/AFStredisko.d.ts +40 -0
- package/generated/entities/AFStredisko.js +225 -0
- package/generated/entities/AFStrom.d.ts +30 -0
- package/generated/entities/AFStrom.js +160 -0
- package/generated/entities/AFStromCenik.d.ts +13 -0
- package/generated/entities/AFStromCenik.js +41 -0
- package/generated/entities/AFStromKoren.d.ts +24 -0
- package/generated/entities/AFStromKoren.js +122 -0
- package/generated/entities/AFSubjekt.d.ts +22 -0
- package/generated/entities/AFSubjekt.js +89 -0
- package/generated/entities/AFSumaceSestavy.d.ts +17 -0
- package/generated/entities/AFSumaceSestavy.js +59 -0
- package/generated/entities/AFText.d.ts +36 -0
- package/generated/entities/AFText.js +196 -0
- package/generated/entities/AFTypAktivity.d.ts +28 -0
- package/generated/entities/AFTypAktivity.js +132 -0
- package/generated/entities/AFTypAtributu.d.ts +30 -0
- package/generated/entities/AFTypAtributu.js +148 -0
- package/generated/entities/AFTypBanka.d.ts +57 -0
- package/generated/entities/AFTypBanka.js +293 -0
- package/generated/entities/AFTypDokladu.d.ts +43 -0
- package/generated/entities/AFTypDokladu.js +210 -0
- package/generated/entities/AFTypFakturyPrijate.d.ts +85 -0
- package/generated/entities/AFTypFakturyPrijate.js +427 -0
- package/generated/entities/AFTypFakturyVydane.d.ts +103 -0
- package/generated/entities/AFTypFakturyVydane.js +557 -0
- package/generated/entities/AFTypInternihoDokladu.d.ts +54 -0
- package/generated/entities/AFTypInternihoDokladu.js +262 -0
- package/generated/entities/AFTypLeasingu.d.ts +38 -0
- package/generated/entities/AFTypLeasingu.js +192 -0
- package/generated/entities/AFTypMajetku.d.ts +39 -0
- package/generated/entities/AFTypMajetku.js +198 -0
- package/generated/entities/AFTypNabidkyPrijate.d.ts +50 -0
- package/generated/entities/AFTypNabidkyPrijate.js +241 -0
- package/generated/entities/AFTypNabidkyVydane.d.ts +53 -0
- package/generated/entities/AFTypNabidkyVydane.js +263 -0
- package/generated/entities/AFTypNakladu.d.ts +24 -0
- package/generated/entities/AFTypNakladu.js +109 -0
- package/generated/entities/AFTypObjednavkyPrijate.d.ts +73 -0
- package/generated/entities/AFTypObjednavkyPrijate.js +382 -0
- package/generated/entities/AFTypObjednavkyVydane.d.ts +56 -0
- package/generated/entities/AFTypObjednavkyVydane.js +271 -0
- package/generated/entities/AFTypOrganizace.d.ts +21 -0
- package/generated/entities/AFTypOrganizace.js +99 -0
- package/generated/entities/AFTypPohledavky.d.ts +76 -0
- package/generated/entities/AFTypPohledavky.js +370 -0
- package/generated/entities/AFTypPokladniPohyb.d.ts +86 -0
- package/generated/entities/AFTypPokladniPohyb.js +462 -0
- package/generated/entities/AFTypPoptavkyPrijate.d.ts +51 -0
- package/generated/entities/AFTypPoptavkyPrijate.js +249 -0
- package/generated/entities/AFTypPoptavkyVydane.d.ts +50 -0
- package/generated/entities/AFTypPoptavkyVydane.js +247 -0
- package/generated/entities/AFTypPracovnihoPomeru.d.ts +22 -0
- package/generated/entities/AFTypPracovnihoPomeru.js +100 -0
- package/generated/entities/AFTypProdejky.d.ts +102 -0
- package/generated/entities/AFTypProdejky.js +536 -0
- package/generated/entities/AFTypSkladovyPohyb.d.ts +72 -0
- package/generated/entities/AFTypSkladovyPohyb.js +374 -0
- package/generated/entities/AFTypSmlouvy.d.ts +45 -0
- package/generated/entities/AFTypSmlouvy.js +241 -0
- package/generated/entities/AFTypStavuCeniku.d.ts +27 -0
- package/generated/entities/AFTypStavuCeniku.js +127 -0
- package/generated/entities/AFTypUzivatelskeVazby.d.ts +32 -0
- package/generated/entities/AFTypUzivatelskeVazby.js +173 -0
- package/generated/entities/AFTypVzajemnychZapoctu.d.ts +59 -0
- package/generated/entities/AFTypVzajemnychZapoctu.js +302 -0
- package/generated/entities/AFTypZakazky.d.ts +29 -0
- package/generated/entities/AFTypZakazky.js +136 -0
- package/generated/entities/AFTypZavazku.d.ts +77 -0
- package/generated/entities/AFTypZavazku.js +371 -0
- package/generated/entities/AFUcet.d.ts +34 -0
- package/generated/entities/AFUcet.js +163 -0
- package/generated/entities/AFUcetniDenik.d.ts +48 -0
- package/generated/entities/AFUcetniDenik.js +253 -0
- package/generated/entities/AFUcetniDenikZjednoduseny.d.ts +45 -0
- package/generated/entities/AFUcetniDenikZjednoduseny.js +232 -0
- package/generated/entities/AFUcetniObdobi.d.ts +18 -0
- package/generated/entities/AFUcetniObdobi.js +80 -0
- package/generated/entities/AFUcetniOdpis.d.ts +32 -0
- package/generated/entities/AFUcetniOdpis.js +143 -0
- package/generated/entities/AFUcetniOsnova.d.ts +28 -0
- package/generated/entities/AFUcetniOsnova.js +137 -0
- package/generated/entities/AFUdalost.d.ts +61 -0
- package/generated/entities/AFUdalost.js +309 -0
- package/generated/entities/AFUlozenePriznaniDph.d.ts +21 -0
- package/generated/entities/AFUlozenePriznaniDph.js +82 -0
- package/generated/entities/AFUlozenePriznaniKonVykDph.d.ts +24 -0
- package/generated/entities/AFUlozenePriznaniKonVykDph.js +98 -0
- package/generated/entities/AFUmisteni.d.ts +22 -0
- package/generated/entities/AFUmisteni.js +100 -0
- package/generated/entities/AFUmisteniUctu.d.ts +12 -0
- package/generated/entities/AFUmisteniUctu.js +29 -0
- package/generated/entities/AFUmisteniVeSkladu.d.ts +25 -0
- package/generated/entities/AFUmisteniVeSkladu.js +118 -0
- package/generated/entities/AFUmisteniVeSkladuMistnost.d.ts +25 -0
- package/generated/entities/AFUmisteniVeSkladuMistnost.js +118 -0
- package/generated/entities/AFUmisteniVeSkladuPolice.d.ts +25 -0
- package/generated/entities/AFUmisteniVeSkladuPolice.js +118 -0
- package/generated/entities/AFUmisteniVeSkladuRegal.d.ts +25 -0
- package/generated/entities/AFUmisteniVeSkladuRegal.js +118 -0
- package/generated/entities/AFUzivatel.d.ts +45 -0
- package/generated/entities/AFUzivatel.js +244 -0
- package/generated/entities/AFUzivatelskaVazba.d.ts +22 -0
- package/generated/entities/AFUzivatelskaVazba.js +98 -0
- package/generated/entities/AFUzivatelskyDotaz.d.ts +32 -0
- package/generated/entities/AFUzivatelskyDotaz.js +156 -0
- package/generated/entities/AFUzivatelskyDotazParametr.d.ts +29 -0
- package/generated/entities/AFUzivatelskyDotazParametr.js +141 -0
- package/generated/entities/AFUzivatelskyDotazVlastnost.d.ts +30 -0
- package/generated/entities/AFUzivatelskyDotazVlastnost.js +150 -0
- package/generated/entities/AFVazba.d.ts +14 -0
- package/generated/entities/AFVazba.js +44 -0
- package/generated/entities/AFVazebniDoklad.d.ts +39 -0
- package/generated/entities/AFVazebniDoklad.js +209 -0
- package/generated/entities/AFVykazHospodareni.d.ts +136 -0
- package/generated/entities/AFVykazHospodareni.js +1004 -0
- package/generated/entities/AFVyrobniCislo.d.ts +29 -0
- package/generated/entities/AFVyrobniCislo.js +146 -0
- package/generated/entities/AFVysledovkaPoUctech.d.ts +136 -0
- package/generated/entities/AFVysledovkaPoUctech.js +1004 -0
- package/generated/entities/AFVzajemnyZapocet.d.ts +145 -0
- package/generated/entities/AFVzajemnyZapocet.js +876 -0
- package/generated/entities/AFVztah.d.ts +26 -0
- package/generated/entities/AFVztah.js +128 -0
- package/generated/entities/AFXslt.d.ts +21 -0
- package/generated/entities/AFXslt.js +93 -0
- package/generated/entities/AFZakazka.d.ts +63 -0
- package/generated/entities/AFZakazka.js +325 -0
- package/generated/entities/AFZalohaKOdpoctu.d.ts +23 -0
- package/generated/entities/AFZalohaKOdpoctu.js +116 -0
- package/generated/entities/AFZapujcka.d.ts +34 -0
- package/generated/entities/AFZapujcka.js +171 -0
- package/generated/entities/AFZavazek.d.ts +190 -0
- package/generated/entities/AFZavazek.js +1142 -0
- package/generated/entities/AFZavazekPolozka.d.ts +110 -0
- package/generated/entities/AFZavazekPolozka.js +681 -0
- package/generated/entities/AFZurnal.d.ts +18 -0
- package/generated/entities/AFZurnal.js +86 -0
- package/generated/entities/index.d.ts +265 -0
- package/generated/entities/index.js +538 -0
- package/helpers/urlHelper.d.ts +1 -0
- package/helpers/urlHelper.js +21 -0
- package/index.d.ts +7 -0
- package/index.js +34 -0
- package/package.json +56 -0
- package/tsconfig.json +11 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
BSD 2-Clause License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025, Tomas Kavan
|
|
4
|
+
|
|
5
|
+
Redistribution and use in source and binary forms, with or without
|
|
6
|
+
modification, are permitted provided that the following conditions are met:
|
|
7
|
+
|
|
8
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
|
9
|
+
list of conditions and the following disclaimer.
|
|
10
|
+
|
|
11
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
12
|
+
this list of conditions and the following disclaimer in the documentation
|
|
13
|
+
and/or other materials provided with the distribution.
|
|
14
|
+
|
|
15
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
16
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
17
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
18
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
19
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
20
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
21
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
22
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
23
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
24
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
package/README.md
ADDED
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
# ABRA Flexi Typescript client
|
|
2
|
+
**English version follows**
|
|
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í.
|
|
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.
|
|
7
|
+
|
|
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
|
+
|
|
10
|
+
**Knihovna je v rané fázi vývoje a její rozhraní zatím není stabilní**.
|
|
11
|
+
|
|
12
|
+
## Instalace
|
|
13
|
+
|
|
14
|
+
Knihovna je distribuovaná jako npm balíček
|
|
15
|
+
```
|
|
16
|
+
npm install abra-flexi
|
|
17
|
+
```
|
|
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:lib
|
|
26
|
+
npm link
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Ve svém projektu potom:
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
npm link abra-flexi
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Gnerování evidenčních tříd
|
|
36
|
+
|
|
37
|
+
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.
|
|
38
|
+
|
|
39
|
+
Generátor je třeba přeložit
|
|
40
|
+
```
|
|
41
|
+
npm run build:cli
|
|
42
|
+
chmod a+x ./bin/index.js
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
a následně lze generování spustit například takto:
|
|
46
|
+
```
|
|
47
|
+
./bin/index.js -s https://muj-flexi-server.cz/c/moje-spolecnost/ -u uzivatel1 -p hesloUzivatele -c -e adresar -e faktura-prijata -e polozka-faktury-prijate
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
knihovnu s vygenerovanými třídami lze přeložit
|
|
51
|
+
```
|
|
52
|
+
npm run build:cli
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Příklady
|
|
56
|
+
|
|
57
|
+
Složka `examples` obsahuje příklady použití knihovny. Prozatím jsem připravil
|
|
58
|
+
- jednoduchý CLI nástroj pro načtení konkrétní evidence (loadEntityCli.ts)
|
|
59
|
+
- soubor s příkladem volání více typů dotazů (loadEntity.ts)
|
|
60
|
+
Příkaldy je možné spustit pomocí nástroje `ts-node`:
|
|
61
|
+
```
|
|
62
|
+
ts-node examples/loadEntityCli.ts -h #vypíše nápovědu k příkazu
|
|
63
|
+
ts-node examples/loadEntity.ts -s https://muj.server.cz -c moje-firma -u uzivatel1 -h heslo1
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Použití
|
|
67
|
+
|
|
68
|
+
V návodu se používají pojmy
|
|
69
|
+
- **evidence** Typ evidence v systému ABRA Flexi, například Faktura přijatá či Položka faktury přijaté. Každá evidence je reprezentováná evidenční třídou, například `AFFakturaPrijata` či `AFPolozkaFakturyPrijate`.
|
|
70
|
+
- **instance** Záznam v evidenci. Například faktura přijatá s kódem IV24.0001, identifikátorem 14 a dlšími hodnotami je instancí. Instance je v knihovně reprezentována instancí evidenční třídy, například: `const fp = new AFFakturaPrijata()`.
|
|
71
|
+
|
|
72
|
+
### Import a inicializace knihovny
|
|
73
|
+
|
|
74
|
+
```typescript
|
|
75
|
+
import { AFApiClient } from 'aftc'
|
|
76
|
+
|
|
77
|
+
const apiOpts: AFApiConfig = {
|
|
78
|
+
url: '<doplnte_server>',
|
|
79
|
+
company: '<doplnte_spolecnost>
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const api = new AFApiClient(apiOpts)
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Dotazování instancí
|
|
86
|
+
|
|
87
|
+
Pro dotazování instancí jsou k dispozici metody `query` (vrací kolekci instancí evidenčních tříd) a `queryOne` (vrací jedu instanci).
|
|
88
|
+
|
|
89
|
+
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.
|
|
90
|
+
|
|
91
|
+
Filtrování je možné vkládat pomocí metod `Filter`, `ID` nebo `CODE`. Metoda `Filter` akceptuje textovou šablonu, ve které budou všechny návěstí nahrazeny hodnotami předanými ve druhém argumentu. Návěstí mohou být:
|
|
92
|
+
- `:key` se nahradí textovou hodnotou klíče `key` ve druhém argumentu,
|
|
93
|
+
- `::mujKod` se nahradí textovou hodnotou klíče `mujKod` ve druhém argumentu a prefixuje se předponou `code:`,
|
|
94
|
+
- `:...kolekce` očekává, že klíč `kolekce` bude typu `Array`. Návěstí se nahradí výsledkem `kolekce.join(',')`.
|
|
95
|
+
|
|
96
|
+
```typescript
|
|
97
|
+
import { AFInterniDoklad, Filter } from 'aftc'
|
|
98
|
+
|
|
99
|
+
const queryOpts: AFQueryOptions = {
|
|
100
|
+
detail: ['id', 'kod', 'typDokl', ['uzivatelske-vazby', ['id', 'evidenceType', 'objectId', 'vazbaTyp']]],
|
|
101
|
+
filter: Filter(`typDokl = '::td'`, { td: 'MUJ_TYP_DOKLADU'})
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
const query = api.query(AFInterniDoklad, queryOpts)
|
|
105
|
+
|
|
106
|
+
const run = async () => {
|
|
107
|
+
try {
|
|
108
|
+
const data = await query
|
|
109
|
+
console.log(data)
|
|
110
|
+
} catch (e) {
|
|
111
|
+
console.error(e)
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
run()
|
|
115
|
+
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Načtení většího detailu
|
|
119
|
+
|
|
120
|
+
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.
|
|
121
|
+
|
|
122
|
+
```typescript
|
|
123
|
+
const loadedEntity // Zde máme uloženou dříve načtenou instanci entity AFInterniDoklad
|
|
124
|
+
|
|
125
|
+
const options = {
|
|
126
|
+
detail: AFQueryDetail.FULL
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
const populate = api.populateOne(loadEntity)
|
|
130
|
+
|
|
131
|
+
const run = async () => {
|
|
132
|
+
try {
|
|
133
|
+
const populatedEntity = await populate
|
|
134
|
+
console.log(populatedEntity)
|
|
135
|
+
console.log(populatedEntity === loadedEntity) // Vypíše true
|
|
136
|
+
} catch (e) {
|
|
137
|
+
console.error(e)
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
run()
|
|
141
|
+
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Načtení instancí z uživatelských vazeb
|
|
145
|
+
|
|
146
|
+
Instance entit odkazované pomocí uživatelských vazeb je možné načíst metodou `queryURel`. Metodě je třeba zaslat zdrojovou kolekci instancí. Instance neumsí být stejného typu (evidence), ale musí mít klíč `uzivatelske-vazby`. Metoda načítá vazby na kokrétní evidenci (vazby ostatních typů jsou vynechány). Vazby je možné filtrovat dle typu `typVazby`. Načtená data jsou přidána do vazeb zrojových instancí (vlastnost `object`). Data jsou dále vrácena jako kolekce párů `{ entity: zdrojova_entity, referencedFrom: načtená_entita }`.
|
|
147
|
+
|
|
148
|
+
Načteny jsou pouze instance vazeb, které se již vyskytují ve zdrojové kolekci! Metoda `queryURel` tedy sama uživatelské vazby na jednotlivých zdrojových instancích nenačítá. Načítá pouze instance, na které vazba odkazuje.
|
|
149
|
+
|
|
150
|
+
```typescript
|
|
151
|
+
const soureEntities // Zde máme kolekci entit, pro které načítáme instance odkazované uživatelskou vazbou
|
|
152
|
+
|
|
153
|
+
const query = api.queryURels(AFInterniDoklad, soureEntities, {
|
|
154
|
+
detail: ['id', 'kod', 'typDokl']
|
|
155
|
+
})
|
|
156
|
+
|
|
157
|
+
const run = async () => {
|
|
158
|
+
try {
|
|
159
|
+
const pairs = await query
|
|
160
|
+
console.log(pairs)
|
|
161
|
+
} catch (e) {
|
|
162
|
+
console.error(e)
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
run()
|
|
166
|
+
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Vytváření, změna a odstraňování instancí
|
|
170
|
+
|
|
171
|
+
*TODO: Zatím neimplementováno*
|
|
172
|
+
|
|
173
|
+
## Task list pro vydání stabilní verze
|
|
174
|
+
|
|
175
|
+
- [X] Generování evidenčních tříd dle metadat REST API
|
|
176
|
+
- [X] Načítání kolekcí a jednotlivých instancí z REST API
|
|
177
|
+
- [X] Načítání užviatelských relací
|
|
178
|
+
- [X] Refersh již načtených dat
|
|
179
|
+
- [ ] Pohodlná práce se štítky
|
|
180
|
+
- [ ] Vytváření, mazání a změna záznamů v REST API
|
|
181
|
+
- [ ] Lokální keš a společné instance pro jedno ID
|
|
182
|
+
- [ ] Battle tested - reálné nasazení, úprava rozhraní dle reálného použití
|
|
183
|
+
- [ ] Verzování, npm balíčkování
|
|
184
|
+
- [ ] Kontrola kompatibility při připojování k REST API
|
|
185
|
+
- [ ] English documentation
|
|
186
|
+
|
|
187
|
+
# English
|
|
188
|
+
|
|
189
|
+
[ABRA Flexi]([https://www.abra.eu/flexi/](https://www.abra.eu/en/flexi/) is Czech ERP for small businesses, developer by [ABRA Software](https://www.abra.eu/en). To access data in ABRA Flexi there is a REST API with public documentation.
|
|
190
|
+
|
|
191
|
+
ABRA Flexi Typescript client (AFTC) is library to call ABRA Fflexi REST API. It's for browsers and server environments (Node.js). It provides methods for CRUD.
|
|
192
|
+
|
|
193
|
+
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.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { AFEntity } from "./AFEntity";
|
|
2
|
+
import { AFApiConfig, AFQueryOptions, AFURelOptions, AFURelResult, AFPopulateOptions, AFURelMinimal, StitkyCacheStrategy } from "./AFTypes";
|
|
3
|
+
export declare class AFApiClient {
|
|
4
|
+
private _url;
|
|
5
|
+
private _fetch;
|
|
6
|
+
private _company;
|
|
7
|
+
private _stitkyCache;
|
|
8
|
+
constructor(config: AFApiConfig);
|
|
9
|
+
get url(): string;
|
|
10
|
+
get company(): string;
|
|
11
|
+
get stitkyCacheStrategy(): StitkyCacheStrategy;
|
|
12
|
+
queryRaw<T extends typeof AFEntity>(entityPath: string, options: AFQueryOptions): Promise<any>;
|
|
13
|
+
query<T extends typeof AFEntity>(entity: T, options: AFQueryOptions): Promise<InstanceType<T>[]>;
|
|
14
|
+
queryOne<T extends typeof AFEntity>(entity: T, options: AFQueryOptions): Promise<InstanceType<T>>;
|
|
15
|
+
queryURels<T extends typeof AFEntity = typeof AFEntity>(relatedEntity: T, forObjects: AFURelMinimal | AFURelMinimal[], options?: AFURelOptions): Promise<AFURelResult<InstanceType<T>>[]>;
|
|
16
|
+
populate<T extends typeof AFEntity = typeof AFEntity>(entities: InstanceType<T>[], options: AFPopulateOptions): Promise<InstanceType<T>[]>;
|
|
17
|
+
populateOne<T extends typeof AFEntity = typeof AFEntity>(entity: InstanceType<T>, options: AFPopulateOptions): Promise<InstanceType<T>>;
|
|
18
|
+
private _processEntityObj;
|
|
19
|
+
private _setProperty;
|
|
20
|
+
}
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AFApiClient = void 0;
|
|
4
|
+
const AFDataType_1 = require("./AFDataType");
|
|
5
|
+
const AFError_1 = require("./AFError");
|
|
6
|
+
const AFFilter_1 = require("./AFFilter");
|
|
7
|
+
const AFTypes_1 = require("./AFTypes");
|
|
8
|
+
const AFEntityRegistry_1 = require("../generated/AFEntityRegistry");
|
|
9
|
+
const urlHelper_1 = require("../helpers/urlHelper");
|
|
10
|
+
const AFApiUrlHelper_1 = require("./AFApiUrlHelper");
|
|
11
|
+
const AFStitkyCache_1 = require("./AFStitkyCache");
|
|
12
|
+
const ABRA_API_FORMAT = 'json';
|
|
13
|
+
class AFApiClient {
|
|
14
|
+
_url;
|
|
15
|
+
_fetch;
|
|
16
|
+
_company;
|
|
17
|
+
_stitkyCache;
|
|
18
|
+
constructor(config) {
|
|
19
|
+
this._url = config.url;
|
|
20
|
+
this._company = config.company;
|
|
21
|
+
this._fetch = config.fetch || fetch;
|
|
22
|
+
this._stitkyCache = new AFStitkyCache_1.AFStitkyCache(this, config.stitkyCacheStrategy);
|
|
23
|
+
}
|
|
24
|
+
get url() { return this._url; }
|
|
25
|
+
get company() { return this._company; }
|
|
26
|
+
get stitkyCacheStrategy() { return this._stitkyCache.strategy; }
|
|
27
|
+
async queryRaw(entityPath, options) {
|
|
28
|
+
if (!this.company || !this.company.length) {
|
|
29
|
+
throw new AFError_1.AFError(AFError_1.AFErrorCode.MISSING_ABRA_COMPANY, `Can't query AFApiClient without providing company path component first.`);
|
|
30
|
+
}
|
|
31
|
+
const detail = options.detail || AFTypes_1.AFQueryDetail.SUMMARY;
|
|
32
|
+
let url = this._url + '/c/' + this.company + '/' + entityPath;
|
|
33
|
+
url += options.filter ? options.filter.toUrlComponent() : '';
|
|
34
|
+
url += '.' + ABRA_API_FORMAT;
|
|
35
|
+
url = (0, urlHelper_1.addParamToUrl)(url, 'detail', (0, AFApiUrlHelper_1.composeDetail)(detail));
|
|
36
|
+
url = (0, urlHelper_1.addParamToUrl)(url, 'includes', (0, AFApiUrlHelper_1.composeIncludes)(detail, entityPath));
|
|
37
|
+
url = (0, urlHelper_1.addParamToUrl)(url, 'relations', (0, AFApiUrlHelper_1.composeRelations)(detail));
|
|
38
|
+
url = (0, urlHelper_1.addParamToUrl)(url, 'limit', options.limit);
|
|
39
|
+
url = (0, urlHelper_1.addParamToUrl)(url, 'start', options.start);
|
|
40
|
+
url = (0, urlHelper_1.addParamToUrl)(url, 'addRowCount', options.addRowCount);
|
|
41
|
+
url = (0, urlHelper_1.addParamToUrl)(url, 'onlyExtIds', options.onlyExtIds);
|
|
42
|
+
url = (0, urlHelper_1.addParamToUrl)(url, 'noExtIds', options.noExtIds);
|
|
43
|
+
url = (0, urlHelper_1.addParamToUrl)(url, 'noIds', options.noIds);
|
|
44
|
+
url = (0, urlHelper_1.addParamToUrl)(url, 'codeAsId', options.codeAsId);
|
|
45
|
+
url = (0, urlHelper_1.addParamToUrl)(url, 'dryRun', options.dryRun);
|
|
46
|
+
url = (0, urlHelper_1.addParamToUrl)(url, 'noSimpleMode', options.noSimpleMode);
|
|
47
|
+
url = (0, urlHelper_1.addParamToUrl)(url, 'noValidityCheck', options.noValidityCheck);
|
|
48
|
+
// TODO - remove
|
|
49
|
+
console.log(url);
|
|
50
|
+
try {
|
|
51
|
+
const raw = await this._fetch(url, { signal: options.abortController?.signal });
|
|
52
|
+
if (raw.status >= 400 && raw.status < 600) {
|
|
53
|
+
throw new AFError_1.AFError(AFError_1.AFErrorCode.ABRA_FLEXI_ERROR, `${raw.status} ${raw.statusText}`);
|
|
54
|
+
}
|
|
55
|
+
const json = await raw.json();
|
|
56
|
+
let entityObj = json.winstrom[entityPath];
|
|
57
|
+
return entityObj;
|
|
58
|
+
}
|
|
59
|
+
catch (e) {
|
|
60
|
+
if (!(e instanceof AFError_1.AFError)) {
|
|
61
|
+
console.log(e);
|
|
62
|
+
e = new AFError_1.AFError(AFError_1.AFErrorCode.UNKNOWN, e.toString());
|
|
63
|
+
}
|
|
64
|
+
throw e;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
async query(entity, options) {
|
|
68
|
+
const res = this.queryRaw(entity.EntityPath, options);
|
|
69
|
+
try {
|
|
70
|
+
const rawData = await res;
|
|
71
|
+
const data = this._processEntityObj(entity, rawData);
|
|
72
|
+
if (!options.noUpdateStitkyCache) {
|
|
73
|
+
await this._stitkyCache.fetchTick();
|
|
74
|
+
}
|
|
75
|
+
return data;
|
|
76
|
+
}
|
|
77
|
+
catch (e) {
|
|
78
|
+
if (!(e instanceof AFError_1.AFError)) {
|
|
79
|
+
console.log(e);
|
|
80
|
+
e = new AFError_1.AFError(AFError_1.AFErrorCode.UNKNOWN, e.toString());
|
|
81
|
+
}
|
|
82
|
+
throw e;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
async queryOne(entity, options) {
|
|
86
|
+
const data = await this.query(entity, options);
|
|
87
|
+
if (!data || !data.length)
|
|
88
|
+
throw new AFError_1.AFError(AFError_1.AFErrorCode.OBJECT_NOT_FOUND, `${entity} object not found. Query filter: ${options.filter}`);
|
|
89
|
+
return data[0];
|
|
90
|
+
}
|
|
91
|
+
async queryURels(relatedEntity, forObjects, options = {}) {
|
|
92
|
+
if (!(forObjects instanceof Array)) {
|
|
93
|
+
forObjects = [forObjects];
|
|
94
|
+
}
|
|
95
|
+
if (options.vazbaTyp === 'string') {
|
|
96
|
+
options.vazbaTyp = [options.vazbaTyp];
|
|
97
|
+
}
|
|
98
|
+
const out = [];
|
|
99
|
+
const fetchedList = [];
|
|
100
|
+
for (const uobj of forObjects) {
|
|
101
|
+
const uvs = uobj["uzivatelske-vazby"];
|
|
102
|
+
if (!uvs)
|
|
103
|
+
continue;
|
|
104
|
+
for (const uv of uvs) {
|
|
105
|
+
// Check if vazba is properly defined and if it has proper vazbaTyp (if required)
|
|
106
|
+
if (!uv.evidenceType || !uv.objectId)
|
|
107
|
+
continue;
|
|
108
|
+
if (options.vazbaTyp &&
|
|
109
|
+
(!uv.vazbaTyp ||
|
|
110
|
+
typeof uv.vazbaTyp.kod !== 'string' ||
|
|
111
|
+
!options.vazbaTyp.includes(uv.vazbaTyp.kod)))
|
|
112
|
+
continue;
|
|
113
|
+
// Check if related evidence type matches the requested type
|
|
114
|
+
const cls = (0, AFEntityRegistry_1.EntityByPath)(uv.evidenceType);
|
|
115
|
+
if (cls !== relatedEntity)
|
|
116
|
+
continue;
|
|
117
|
+
// Get (or create) list of already fetched objects by evidenceType
|
|
118
|
+
let list = fetchedList.find(fli => fli[0] === uv.evidenceType);
|
|
119
|
+
if (!list) {
|
|
120
|
+
list = [uv.evidenceType, []];
|
|
121
|
+
fetchedList.push(list);
|
|
122
|
+
}
|
|
123
|
+
// Load data from cache or fetch it if missing
|
|
124
|
+
let data = list[1].find(li => li.id === uv.objectId);
|
|
125
|
+
if (!data) {
|
|
126
|
+
try {
|
|
127
|
+
const opts = {
|
|
128
|
+
detail: options.detail,
|
|
129
|
+
filter: (0, AFFilter_1.ID)(uv.objectId),
|
|
130
|
+
abort: options.abortController,
|
|
131
|
+
noUpdateStitkyCache: true
|
|
132
|
+
};
|
|
133
|
+
let outInner = await this.query(relatedEntity, opts);
|
|
134
|
+
if (!outInner || !outInner.length)
|
|
135
|
+
continue;
|
|
136
|
+
list[1].push(outInner[0]);
|
|
137
|
+
data = outInner[0];
|
|
138
|
+
const res = {
|
|
139
|
+
entity: uobj,
|
|
140
|
+
referencedFrom: outInner[0]
|
|
141
|
+
};
|
|
142
|
+
out.push(res);
|
|
143
|
+
}
|
|
144
|
+
catch (e) {
|
|
145
|
+
if (!(e instanceof AFError_1.AFError)) {
|
|
146
|
+
console.log(e);
|
|
147
|
+
e = new AFError_1.AFError(AFError_1.AFErrorCode.UNKNOWN, e.toString());
|
|
148
|
+
}
|
|
149
|
+
throw e;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
uv.object = data;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
if (!options.noUpdateStitkyCache) {
|
|
156
|
+
await this._stitkyCache.fetchTick();
|
|
157
|
+
}
|
|
158
|
+
return out;
|
|
159
|
+
}
|
|
160
|
+
async populate(entities, options) {
|
|
161
|
+
const fetchBy = [];
|
|
162
|
+
for (const en of entities) {
|
|
163
|
+
if (typeof en.id !== 'undefined') {
|
|
164
|
+
fetchBy.push(['id', en.id.toString()]);
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
if (typeof en.kod !== 'undefined') {
|
|
168
|
+
fetchBy.push(['kod', en.kod || '']);
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
throw new AFError_1.AFError(AFError_1.AFErrorCode.MISSING_ID_IN_POPULATE, `Can't populate entity withoud id or kod set. It's not possible to fetch data. Entity: ${en}`);
|
|
172
|
+
}
|
|
173
|
+
// Nothing was requested to populate
|
|
174
|
+
if (!fetchBy.length)
|
|
175
|
+
return [];
|
|
176
|
+
let tplArr = fetchBy.map(entry => `${entry[0]} = '${entry[1]}'`);
|
|
177
|
+
if (!options.detail)
|
|
178
|
+
options.detail = [];
|
|
179
|
+
if (options.detail instanceof Array) {
|
|
180
|
+
if (!options.detail.includes('id'))
|
|
181
|
+
options.detail.push('id');
|
|
182
|
+
if (!options.detail.includes('kod'))
|
|
183
|
+
options.detail.push('kod');
|
|
184
|
+
}
|
|
185
|
+
const opts = {
|
|
186
|
+
filter: (0, AFFilter_1.Filter)(tplArr.join(' or ')),
|
|
187
|
+
detail: options.detail,
|
|
188
|
+
abortController: options.abortController
|
|
189
|
+
};
|
|
190
|
+
try {
|
|
191
|
+
const cls = (0, AFEntityRegistry_1.EntityByName)(entities[0].constructor.name);
|
|
192
|
+
const resQRaw = this.queryRaw(cls.EntityPath, opts);
|
|
193
|
+
let dataQ = await resQRaw;
|
|
194
|
+
if (!dataQ)
|
|
195
|
+
throw new AFError_1.AFError(AFError_1.AFErrorCode.UNKNOWN, 'Unable to fetch data to populate');
|
|
196
|
+
if (!(dataQ instanceof Array))
|
|
197
|
+
dataQ = [dataQ];
|
|
198
|
+
for (const enQ of dataQ) {
|
|
199
|
+
const en = entities.find(e => {
|
|
200
|
+
if (typeof e.id !== 'undefined')
|
|
201
|
+
return enQ.id === String(e.id);
|
|
202
|
+
if (typeof e.kod !== 'undefined')
|
|
203
|
+
return enQ.kod === String(e.kod);
|
|
204
|
+
return false;
|
|
205
|
+
});
|
|
206
|
+
if (!en)
|
|
207
|
+
continue;
|
|
208
|
+
const oKeys = Object.keys(enQ);
|
|
209
|
+
for (const okey of oKeys) {
|
|
210
|
+
this._setProperty(en, okey, enQ);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
if (!options.noUpdateStitkyCache) {
|
|
214
|
+
await this._stitkyCache.fetchTick();
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
catch (e) {
|
|
218
|
+
if (!(e instanceof AFError_1.AFError)) {
|
|
219
|
+
console.log(e);
|
|
220
|
+
e = new AFError_1.AFError(AFError_1.AFErrorCode.UNKNOWN, e.toString());
|
|
221
|
+
}
|
|
222
|
+
throw e;
|
|
223
|
+
}
|
|
224
|
+
return entities;
|
|
225
|
+
}
|
|
226
|
+
async populateOne(entity, options) {
|
|
227
|
+
const res = await this.populate([entity], options);
|
|
228
|
+
if (!res || !res.length)
|
|
229
|
+
throw new AFError_1.AFError(AFError_1.AFErrorCode.OBJECT_NOT_FOUND, `${entity} object not found. Kod / ID: ${entity.kod} / ${entity.id}`);
|
|
230
|
+
return res[0];
|
|
231
|
+
}
|
|
232
|
+
_processEntityObj(entity, obj) {
|
|
233
|
+
if (!obj)
|
|
234
|
+
return [];
|
|
235
|
+
// If there is no detail, prepare stub with code (kod)
|
|
236
|
+
if (typeof obj === 'string') {
|
|
237
|
+
if (obj.slice(0, 5) === 'code:') {
|
|
238
|
+
obj = {
|
|
239
|
+
kod: obj.slice(5)
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
if (!(obj instanceof Array)) {
|
|
244
|
+
obj = [obj];
|
|
245
|
+
}
|
|
246
|
+
const res = [];
|
|
247
|
+
for (const o of obj) {
|
|
248
|
+
const ent = new entity(this._stitkyCache);
|
|
249
|
+
const oKeys = Object.keys(o);
|
|
250
|
+
for (const okey of oKeys) {
|
|
251
|
+
this._setProperty(ent, okey, o);
|
|
252
|
+
}
|
|
253
|
+
res.push(ent);
|
|
254
|
+
}
|
|
255
|
+
return res;
|
|
256
|
+
}
|
|
257
|
+
_setProperty(entity, key, obj) {
|
|
258
|
+
const annot = entity.getPropertyTypeAnnotation(key);
|
|
259
|
+
if (!annot)
|
|
260
|
+
return;
|
|
261
|
+
const v = obj[key];
|
|
262
|
+
if (!v)
|
|
263
|
+
return;
|
|
264
|
+
// If it's relation, recursively call _processEntityObj
|
|
265
|
+
if (annot.type === AFTypes_1.PropertyType.Relation) {
|
|
266
|
+
if (!annot.afClass)
|
|
267
|
+
return;
|
|
268
|
+
const cls = typeof annot.afClass === 'string' ? (0, AFEntityRegistry_1.EntityByName)(annot.afClass) : annot.afClass;
|
|
269
|
+
const propOut = this._processEntityObj(cls, v);
|
|
270
|
+
if (!propOut)
|
|
271
|
+
return;
|
|
272
|
+
if (annot.isArray) {
|
|
273
|
+
entity[key] = propOut;
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
if (propOut.length) {
|
|
277
|
+
entity[key] = propOut[0];
|
|
278
|
+
}
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
// Else set it as scalar type
|
|
282
|
+
//console.log(obj)
|
|
283
|
+
if (!obj)
|
|
284
|
+
return;
|
|
285
|
+
entity[annot.key] = (0, AFDataType_1.parsePropertyValue)(annot.type, annot, obj[annot.key]);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
exports.AFApiClient = AFApiClient;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { AFQueryDetail, NestedDetail } from "./AFTypes";
|
|
2
|
+
export declare function composeDetail(level: NestedDetail | AFQueryDetail): string | null;
|
|
3
|
+
export declare function composeIncludes(level: NestedDetail | AFQueryDetail, entityPath: string): string | null;
|
|
4
|
+
export declare function composeRelations(level: NestedDetail | AFQueryDetail): string | null;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.composeRelations = exports.composeIncludes = exports.composeDetail = void 0;
|
|
4
|
+
const AFEntityRegistry_1 = require("../generated/AFEntityRegistry");
|
|
5
|
+
const AFEntity_1 = require("./AFEntity");
|
|
6
|
+
const AFError_1 = require("./AFError");
|
|
7
|
+
const AFTypes_1 = require("./AFTypes");
|
|
8
|
+
function composeDetail(level) {
|
|
9
|
+
if (level === AFTypes_1.AFQueryDetail.FULL)
|
|
10
|
+
return 'full';
|
|
11
|
+
if (level === AFTypes_1.AFQueryDetail.ID)
|
|
12
|
+
return 'id';
|
|
13
|
+
if (level === AFTypes_1.AFQueryDetail.SUMMARY)
|
|
14
|
+
return null;
|
|
15
|
+
const levProc = (inp) => {
|
|
16
|
+
let out = '';
|
|
17
|
+
for (const ndi of inp) {
|
|
18
|
+
if (out.length)
|
|
19
|
+
out += ',';
|
|
20
|
+
if (typeof ndi === 'string') {
|
|
21
|
+
out += ndi;
|
|
22
|
+
}
|
|
23
|
+
else if (ndi instanceof Array) {
|
|
24
|
+
out += ndi[0] + '(' + levProc(ndi[1]) + ')';
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return out;
|
|
28
|
+
};
|
|
29
|
+
const out = 'custom:' + levProc(level);
|
|
30
|
+
return out;
|
|
31
|
+
}
|
|
32
|
+
exports.composeDetail = composeDetail;
|
|
33
|
+
function composeIncludes(level, entityPath) {
|
|
34
|
+
if (level === AFTypes_1.AFQueryDetail.FULL)
|
|
35
|
+
return null;
|
|
36
|
+
if (level === AFTypes_1.AFQueryDetail.ID)
|
|
37
|
+
return null;
|
|
38
|
+
if (level === AFTypes_1.AFQueryDetail.SUMMARY)
|
|
39
|
+
return null;
|
|
40
|
+
const includes = [];
|
|
41
|
+
const cls = (0, AFEntityRegistry_1.EntityByPath)(entityPath);
|
|
42
|
+
const levProc = (inp, base, entity) => {
|
|
43
|
+
for (const ndi of inp) {
|
|
44
|
+
if (typeof ndi === 'string')
|
|
45
|
+
continue;
|
|
46
|
+
if (ndi instanceof Array) {
|
|
47
|
+
const key = ndi[0];
|
|
48
|
+
const list = ndi[1];
|
|
49
|
+
const annot = (0, AFEntity_1.GetPropertyTypeAnnotation)(entity, key);
|
|
50
|
+
if (!annot || !annot.afClass)
|
|
51
|
+
throw new AFError_1.AFError(AFError_1.AFErrorCode.QUERY_DETAIL_UNKNOWN_KEY, `[AFError].QUERY_DETAIL_UNKNOWN_KEY: Requested unknown key ${key} on entity ${(typeof entity)}. Or it has't type annotation set.`);
|
|
52
|
+
const relEnt = (0, AFEntityRegistry_1.EntityByName)(annot.afClass);
|
|
53
|
+
const thisIncl = base + '/' + key + '/' + relEnt.EntityPath;
|
|
54
|
+
includes.push(thisIncl);
|
|
55
|
+
levProc(list, thisIncl, relEnt);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
levProc(level, cls.EntityPath, cls);
|
|
60
|
+
return includes.join(',');
|
|
61
|
+
}
|
|
62
|
+
exports.composeIncludes = composeIncludes;
|
|
63
|
+
function composeRelations(level) {
|
|
64
|
+
if (level === AFTypes_1.AFQueryDetail.FULL)
|
|
65
|
+
return null;
|
|
66
|
+
if (level === AFTypes_1.AFQueryDetail.ID)
|
|
67
|
+
return null;
|
|
68
|
+
if (level === AFTypes_1.AFQueryDetail.SUMMARY)
|
|
69
|
+
return null;
|
|
70
|
+
const relations = [];
|
|
71
|
+
const levProc = (inp) => {
|
|
72
|
+
for (const ndi of inp) {
|
|
73
|
+
if (typeof ndi === 'string')
|
|
74
|
+
continue;
|
|
75
|
+
const key = ndi[0];
|
|
76
|
+
const list = ndi[1];
|
|
77
|
+
if (!relations.includes(key))
|
|
78
|
+
relations.push(key);
|
|
79
|
+
levProc(list);
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
levProc(level);
|
|
83
|
+
return relations.length ? relations.join(',') : null;
|
|
84
|
+
}
|
|
85
|
+
exports.composeRelations = composeRelations;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
import { Big } from 'big.js';
|
|
4
|
+
import { PropertyType, TypeAnnotation } from './AFTypes';
|
|
5
|
+
type PropertyTypeMap = {
|
|
6
|
+
[PropertyType.Integer]: number;
|
|
7
|
+
[PropertyType.String]: string;
|
|
8
|
+
[PropertyType.Select]: string;
|
|
9
|
+
[PropertyType.DateTime]: Date;
|
|
10
|
+
[PropertyType.Date]: Date;
|
|
11
|
+
[PropertyType.Numeric]: Big;
|
|
12
|
+
[PropertyType.Logic]: boolean;
|
|
13
|
+
[PropertyType.Blob]: Buffer;
|
|
14
|
+
[PropertyType.Array]: any[];
|
|
15
|
+
};
|
|
16
|
+
type ParsedType<T extends PropertyType> = T extends keyof PropertyTypeMap ? PropertyTypeMap[T] : never;
|
|
17
|
+
export declare function parsePropertyValue<T extends PropertyType>(propertyType: T, annot: TypeAnnotation, obj: any): ParsedType<T> | undefined;
|
|
18
|
+
export declare function serializePropertyValue<T extends PropertyType>(propertyType: T, annotation: TypeAnnotation, property: any): string;
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.serializePropertyValue = exports.parsePropertyValue = void 0;
|
|
4
|
+
const big_js_1 = require("big.js");
|
|
5
|
+
const AFTypes_1 = require("./AFTypes");
|
|
6
|
+
function parsePropertyValue(propertyType, annot, obj) {
|
|
7
|
+
if (obj === null || obj === undefined)
|
|
8
|
+
return undefined;
|
|
9
|
+
switch (propertyType) {
|
|
10
|
+
case AFTypes_1.PropertyType.Integer:
|
|
11
|
+
return parseInt(obj, 10);
|
|
12
|
+
case AFTypes_1.PropertyType.String:
|
|
13
|
+
return (annot?.maxLength ? obj.slice(0, annot.maxLength) : obj);
|
|
14
|
+
case AFTypes_1.PropertyType.Select:
|
|
15
|
+
if (!annot?.enum)
|
|
16
|
+
throw new Error(`Enum typeAnnotation is required for Select (property ${annot.key})`);
|
|
17
|
+
return (annot.enum[obj] ?? obj);
|
|
18
|
+
case AFTypes_1.PropertyType.DateTime:
|
|
19
|
+
return new Date(obj);
|
|
20
|
+
case AFTypes_1.PropertyType.Date:
|
|
21
|
+
const split = obj.split('+');
|
|
22
|
+
const dateStr = split[0] + 'T00:00:00.000+' + split[1];
|
|
23
|
+
return new Date(dateStr);
|
|
24
|
+
case AFTypes_1.PropertyType.Numeric:
|
|
25
|
+
return new big_js_1.Big(obj).round(annot?.decimals ?? 2);
|
|
26
|
+
case AFTypes_1.PropertyType.Logic:
|
|
27
|
+
return (obj.toLowerCase() === "true");
|
|
28
|
+
case AFTypes_1.PropertyType.Blob:
|
|
29
|
+
return Buffer.from(obj, "base64");
|
|
30
|
+
case AFTypes_1.PropertyType.Array:
|
|
31
|
+
if (!annot?.itemType)
|
|
32
|
+
throw new Error("itemType is required for Array");
|
|
33
|
+
const myAnnot = { ...annot };
|
|
34
|
+
myAnnot.type = annot.itemType;
|
|
35
|
+
return (Array.isArray(obj)
|
|
36
|
+
? obj.map((item) => parsePropertyValue(annot.itemType, myAnnot, item))
|
|
37
|
+
: []);
|
|
38
|
+
default:
|
|
39
|
+
throw new Error(`Unknown PropertyType: ${propertyType} of property ${annot.key}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.parsePropertyValue = parsePropertyValue;
|
|
43
|
+
function serializePropertyValue(propertyType, annotation, property) {
|
|
44
|
+
throw new Error('TODO: serializePropertyValue not implemented yet');
|
|
45
|
+
}
|
|
46
|
+
exports.serializePropertyValue = serializePropertyValue;
|