assets(); if ($assets) { $assets->addStyle('/module/fx-rates/asset?file=fx-rates.css'); $assets->addScript('/module/fx-rates/asset?file=fx-rates.js', 'footer', true); } $settings = module_fn('fx-rates', 'settings'); $service = module_fn('fx-rates', 'service'); $preferredCurrencies = is_array($settings['preferred_currencies'] ?? null) ? $settings['preferred_currencies'] : []; $apiDescribeUrl = APP_API_BASE . '/fx-rates/v1/endpoints'; $notice = trim((string) ($_GET['notice'] ?? '')); $error = trim((string) ($_GET['error'] ?? '')); if ((string) ($_GET['refresh'] ?? '') === '1') { try { $force = !empty($_GET['force']); if ($force) { $result = $service->refreshLatestRates(null, (string) ($settings['default_base_currency'] ?? ''), 'manual'); } else { $result = $service->autoRefreshLatestRates( (string) ($settings['default_base_currency'] ?? ''), null, (int) ($settings['refresh_max_age_minutes'] ?? 60), 'manual' ); } $params = !empty($result['reused']) ? [ 'notice' => sprintf( 'Kein neuer API-Abruf. Der letzte gespeicherte Snapshot ist juenger als %d Minuten. Fuer einen erzwungenen Abruf bitte bestaetigen.', (int) ($settings['refresh_max_age_minutes'] ?? 60) ), ] : [ 'notice' => sprintf( 'Aktuelle Kurse gespeichert. %d Werte aktualisiert.', (int) ($result['updated_count'] ?? 0) ), ]; } catch (\Throwable $exception) { $params = ['error' => $exception->getMessage() !== '' ? $exception->getMessage() : 'Kurse konnten nicht aktualisiert werden.']; } redirect('/module/fx-rates?' . http_build_query($params)); } $latest = $service->latestStatus(); $recentFetches = $service->recentFetches(12); $pageData = json_encode([ 'settings' => $settings, 'latest' => $latest, 'preferred_currencies' => $preferredCurrencies, 'recent_fetches' => $recentFetches, ], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); ?> 'Waehrungskurse', 'actions' => [ ['label' => 'Setup', 'href' => '/modules/setup/fx-rates', 'variant' => 'secondary', 'size' => 'sm'], ['label' => 'Aktuelle Kurse abrufen', 'href' => '/module/fx-rates?refresh=1', 'variant' => 'secondary', 'size' => 'sm'], ], ]) ?>
'>

API-Self-Describe-Endpoint:

Umrechnung

Umrechnung auf Basis des letzten verfuegbaren Kurses zwischen den bevorzugten Waehrungen.

Noch keine Umrechnung berechnet.

Letzte Kurse

Letzter gespeicherter Snapshot, umgerechnet auf .

Letzter Abruf:
Anzeige-Basis:
Snapshot-Basis:
Waehrung Kurs
Noch keine Daten geladen.

Kursverlauf

Chronologischer Verlauf der bevorzugten Waehrungen relativ zur Anzeige-Basiswaehrung.

Datum Kurse
Noch keine Verlaufsdaten geladen.

Letzte Abrufe

Datum Basis Provider Ausloeser
Noch keine Abrufe vorhanden.