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(15); $pageData = json_encode([ 'settings' => $settings, 'latest' => $latest, 'preferred_currencies' => $preferredCurrencies, 'recent_fetches' => $recentFetches, ], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); $tabs = [ ['label' => 'Ueberblick', 'href' => '/module/fx-rates', 'active' => true], ['label' => 'Waehrungen', 'href' => '/module/fx-rates/currencies'], ]; ?> 'Ueberblick', 'tabs' => $tabs, 'actions' => [ ['label' => 'Nexus Übersicht', 'href' => '/', 'variant' => 'secondary', 'size' => 'sm'], ['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'], ], ]) ?>
'>

Umrechnung

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

API-Self-Describe-Endpoint:

Noch keine Umrechnung berechnet.

Kursverlauf

Neueste Abrufe zuerst. Verlauf der bevorzugten Waehrungen relativ zur Anzeige-Basiswaehrung.

Anzeige-Basis:
Letzter Abruf:
Datum Kurse
Noch keine Verlaufsdaten geladen.