sdfsdf
All checks were successful
Deploy / deploy-staging (push) Successful in 24s
Deploy / deploy-production (push) Has been skipped

This commit is contained in:
2026-06-22 23:43:19 +02:00
parent a5cf110de2
commit 23afe81251
6 changed files with 34 additions and 22 deletions

View File

@@ -78,7 +78,7 @@
return; return;
} }
const entryRoute = String(options?.entryRoute || '/apps/boersenchecker'); const entryRoute = String(options?.entryRoute || '/apps/boersenchecker/index.php');
const defaultView = String(options?.defaultView || 'overview'); const defaultView = String(options?.defaultView || 'overview');
const state = { const state = {
@@ -100,7 +100,19 @@
host.innerHTML = html; host.innerHTML = html;
enhanceHost(host, this); enhanceHost(host, this);
if (typeof window.initBoersencheckerCharts === 'function') { if (typeof window.initBoersencheckerCharts === 'function') {
window.initBoersencheckerCharts(host); try {
window.initBoersencheckerCharts(host);
} catch (error) {
const message = error instanceof Error ? error.message : 'Chart-Initialisierung fehlgeschlagen.';
const statusNode = host.querySelector('[data-bc-chart-status]');
const chartNode = host.querySelector('[data-bc-chart]');
if (statusNode instanceof HTMLElement) {
statusNode.textContent = message;
}
if (chartNode instanceof HTMLElement) {
chartNode.innerHTML = `<div class="muted">${message}</div>`;
}
}
} }
}, },
renderError(error) { renderError(error) {

View File

@@ -4,12 +4,12 @@
"description": "Depotverwaltung fuer Aktien, Kaufdaten, Kursverlauf und Waehrungsumrechnung.", "description": "Depotverwaltung fuer Aktien, Kaufdaten, Kursverlauf und Waehrungsumrechnung.",
"actions": [ "actions": [
{ "label": "Desktop", "href": "/" }, { "label": "Desktop", "href": "/" },
{ "label": "Setup", "href": "/apps/boersenchecker?view=setup" } { "label": "Setup", "href": "/apps/boersenchecker/index.php?view=setup" }
], ],
"tabs": [ "tabs": [
{ "label": "Ueberblick", "href": "/apps/boersenchecker?view=overview", "view": "overview" }, { "label": "Ueberblick", "href": "/apps/boersenchecker/index.php?view=overview", "view": "overview" },
{ "label": "Depotverwaltung", "href": "/apps/boersenchecker?view=depotverwaltung", "view": "depotverwaltung" }, { "label": "Depotverwaltung", "href": "/apps/boersenchecker/index.php?view=depotverwaltung", "view": "depotverwaltung" },
{ "label": "Aktienverwaltung", "href": "/apps/boersenchecker?view=aktienverwaltung", "view": "aktienverwaltung" }, { "label": "Aktienverwaltung", "href": "/apps/boersenchecker/index.php?view=aktienverwaltung", "view": "aktienverwaltung" },
{ "label": "Setup", "href": "/apps/boersenchecker?view=setup", "view": "setup" } { "label": "Setup", "href": "/apps/boersenchecker/index.php?view=setup", "view": "setup" }
] ]
} }

View File

@@ -13,7 +13,7 @@ return [
'app_id' => 'boersenchecker', 'app_id' => 'boersenchecker',
'title' => (string) ($manifest['title'] ?? 'Börsenchecker'), 'title' => (string) ($manifest['title'] ?? 'Börsenchecker'),
'icon' => 'BC', 'icon' => 'BC',
'entry_route' => '/apps/boersenchecker', 'entry_route' => '/apps/boersenchecker/index.php',
'window_mode' => 'window', 'window_mode' => 'window',
'content_mode' => 'native-module', 'content_mode' => 'native-module',
'default_width' => 1220, 'default_width' => 1220,
@@ -25,7 +25,7 @@ return [
'native_module' => [ 'native_module' => [
'initializer' => 'initBoersencheckerApp', 'initializer' => 'initBoersencheckerApp',
'options' => [ 'options' => [
'entryRoute' => '/apps/boersenchecker', 'entryRoute' => '/apps/boersenchecker/index.php',
'defaultView' => 'overview', 'defaultView' => 'overview',
], ],
'assets' => [ 'assets' => [

View File

@@ -17,7 +17,7 @@
<p>Depots anderer Benutzer sind nur fuer `appadmin` sichtbar und bearbeitbar.</p> <p>Depots anderer Benutzer sind nur fuer `appadmin` sichtbar und bearbeitbar.</p>
</div> </div>
</div> </div>
<form method="get" action="/apps/boersenchecker" style="margin-top:16px; display:flex; gap:10px; flex-wrap:wrap; align-items:end;"> <form method="get" action="/apps/boersenchecker/index.php" style="margin-top:16px; display:flex; gap:10px; flex-wrap:wrap; align-items:end;">
<input type="hidden" name="view" value="depotverwaltung"> <input type="hidden" name="view" value="depotverwaltung">
<label class="setup-field muted" style="margin:0; min-width:260px;"> <label class="setup-field muted" style="margin:0; min-width:260px;">
<span>Depots von Benutzer</span> <span>Depots von Benutzer</span>
@@ -61,7 +61,7 @@
<div class="bc-actions"> <div class="bc-actions">
<button class="bc-button bc-button--primary" type="submit">Depot speichern</button> <button class="bc-button bc-button--primary" type="submit">Depot speichern</button>
<?php if ($editPortfolio): ?> <?php if ($editPortfolio): ?>
<a class="bc-button bc-button--secondary" href="/apps/boersenchecker?view=depotverwaltung<?= e($ownerQuery) ?>">Abbrechen</a> <a class="bc-button bc-button--secondary" href="/apps/boersenchecker/index.php?view=depotverwaltung<?= e($ownerQuery) ?>">Abbrechen</a>
<?php endif; ?> <?php endif; ?>
</div> </div>
</form> </form>
@@ -97,7 +97,7 @@
Alpha Vantage Mindestabstand: <?= e((string) $marketDataMinIntervalMinutes) ?> Min. Alpha Vantage Mindestabstand: <?= e((string) $marketDataMinIntervalMinutes) ?> Min.
</div> </div>
<div class="muted" style="margin-top:6px;"> <div class="muted" style="margin-top:6px;">
API-Key und Timeout fuer Aktienkurse werden ueber <a href="/apps/boersenchecker?view=setup">dieses Modul-Setup</a> gepflegt. API-Key und Timeout fuer Aktienkurse werden ueber <a href="/apps/boersenchecker/index.php?view=setup">dieses Modul-Setup</a> gepflegt.
</div> </div>
<div class="muted" style="margin-top:6px;"> <div class="muted" style="margin-top:6px;">
FX-Provider, API-Key und Waehrungskatalog werden im Modul <a href="/apps/fx-rates">fx-rates</a> gepflegt. FX-Provider, API-Key und Waehrungskatalog werden im Modul <a href="/apps/fx-rates">fx-rates</a> gepflegt.
@@ -189,7 +189,7 @@
<div class="bc-actions"> <div class="bc-actions">
<button class="bc-button bc-button--primary" type="submit">Position speichern</button> <button class="bc-button bc-button--primary" type="submit">Position speichern</button>
<?php if ($editPosition): ?> <?php if ($editPosition): ?>
<a class="bc-button bc-button--secondary" href="/apps/boersenchecker?view=depotverwaltung<?= e($ownerQuery) ?>">Abbrechen</a> <a class="bc-button bc-button--secondary" href="/apps/boersenchecker/index.php?view=depotverwaltung<?= e($ownerQuery) ?>">Abbrechen</a>
<?php endif; ?> <?php endif; ?>
</div> </div>
</form> </form>
@@ -237,7 +237,7 @@
<td><?= e((string) ($result['currency'] ?? '')) ?></td> <td><?= e((string) ($result['currency'] ?? '')) ?></td>
<td><?= e((string) ($result['match_score'] ?? '')) ?></td> <td><?= e((string) ($result['match_score'] ?? '')) ?></td>
<td> <td>
<a class="bc-button bc-button--secondary" href="/apps/boersenchecker?view=depotverwaltung&owner_sub=<?= urlencode((string) $ownerSub) ?>&symbol_candidate=<?= urlencode((string) ($result['symbol'] ?? '')) ?>&instrument_name_candidate=<?= urlencode((string) ($result['name'] ?? '')) ?>&isin_candidate=<?= urlencode((string) ($result['isin'] ?? '')) ?>&market_candidate=<?= urlencode((string) ($result['region'] ?? '')) ?>&quote_currency_candidate=<?= urlencode((string) ($result['currency'] ?? '')) ?>"> <a class="bc-button bc-button--secondary" href="/apps/boersenchecker/index.php?view=depotverwaltung&owner_sub=<?= urlencode((string) $ownerSub) ?>&symbol_candidate=<?= urlencode((string) ($result['symbol'] ?? '')) ?>&instrument_name_candidate=<?= urlencode((string) ($result['name'] ?? '')) ?>&isin_candidate=<?= urlencode((string) ($result['isin'] ?? '')) ?>&market_candidate=<?= urlencode((string) ($result['region'] ?? '')) ?>&quote_currency_candidate=<?= urlencode((string) ($result['currency'] ?? '')) ?>">
In Formular uebernehmen In Formular uebernehmen
</a> </a>
</td> </td>
@@ -324,7 +324,7 @@
<div class="muted"><?= e((string) $portfolio['base_currency']) ?> · <?= e((string) $stats['positions']) ?> Position(en)</div> <div class="muted"><?= e((string) $portfolio['base_currency']) ?> · <?= e((string) $stats['positions']) ?> Position(en)</div>
</div> </div>
<div class="bc-actions"> <div class="bc-actions">
<a class="bc-button bc-button--secondary" href="/apps/boersenchecker?view=depotverwaltung&owner_sub=<?= urlencode((string) $ownerSub) ?>&edit_portfolio=<?= e((string) $portfolioId) ?>">Bearbeiten</a> <a class="bc-button bc-button--secondary" href="/apps/boersenchecker/index.php?view=depotverwaltung&owner_sub=<?= urlencode((string) $ownerSub) ?>&edit_portfolio=<?= e((string) $portfolioId) ?>">Bearbeiten</a>
<form method="post" onsubmit="return confirm('Depot wirklich loeschen?')"> <form method="post" onsubmit="return confirm('Depot wirklich loeschen?')">
<input type="hidden" name="action" value="delete_portfolio"> <input type="hidden" name="action" value="delete_portfolio">
<input type="hidden" name="owner_sub" value="<?= e((string) $ownerSub) ?>"> <input type="hidden" name="owner_sub" value="<?= e((string) $ownerSub) ?>">
@@ -425,8 +425,8 @@
</td> </td>
<td> <td>
<div class="bc-actions"> <div class="bc-actions">
<a class="bc-button bc-button--secondary" href="/apps/boersenchecker?view=depotverwaltung&owner_sub=<?= urlencode((string) $ownerSub) ?>&edit_position=<?= e((string) $position['id']) ?>">Bearbeiten</a> <a class="bc-button bc-button--secondary" href="/apps/boersenchecker/index.php?view=depotverwaltung&owner_sub=<?= urlencode((string) $ownerSub) ?>&edit_position=<?= e((string) $position['id']) ?>">Bearbeiten</a>
<a class="bc-button bc-button--secondary" href="/apps/boersenchecker?view=depotverwaltung&owner_sub=<?= urlencode((string) $ownerSub) ?>&instrument_id=<?= e((string) $position['instrument_id']) ?>">Kurs erfassen</a> <a class="bc-button bc-button--secondary" href="/apps/boersenchecker/index.php?view=depotverwaltung&owner_sub=<?= urlencode((string) $ownerSub) ?>&instrument_id=<?= e((string) $position['instrument_id']) ?>">Kurs erfassen</a>
<form method="post"> <form method="post">
<input type="hidden" name="action" value="refresh_market_data_position"> <input type="hidden" name="action" value="refresh_market_data_position">
<input type="hidden" name="owner_sub" value="<?= e((string) $ownerSub) ?>"> <input type="hidden" name="owner_sub" value="<?= e((string) $ownerSub) ?>">
@@ -469,7 +469,7 @@
<?= e((string) ($instrument['symbol'] ?: '-')) ?> · <?= e((string) ($instrument['isin'] ?: '-')) ?> <?= e((string) ($instrument['symbol'] ?: '-')) ?> · <?= e((string) ($instrument['isin'] ?: '-')) ?>
</div> </div>
</div> </div>
<a class="bc-button bc-button--secondary" href="/apps/boersenchecker?view=depotverwaltung&owner_sub=<?= urlencode((string) $ownerSub) ?>&instrument_id=<?= e((string) $instrumentId) ?>">Neuen Kurs erfassen</a> <a class="bc-button bc-button--secondary" href="/apps/boersenchecker/index.php?view=depotverwaltung&owner_sub=<?= urlencode((string) $ownerSub) ?>&instrument_id=<?= e((string) $instrumentId) ?>">Neuen Kurs erfassen</a>
</div> </div>
<?php if ($history === []): ?> <?php if ($history === []): ?>
<div class="muted" style="margin-top:12px;">Noch keine historischen Kurse vorhanden.</div> <div class="muted" style="margin-top:12px;">Noch keine historischen Kurse vorhanden.</div>

View File

@@ -25,7 +25,7 @@
</div> </div>
</div> </div>
<div class="bc-toolbar" style="margin-top:16px;"> <div class="bc-toolbar" style="margin-top:16px;">
<form class="bc-panel" method="get" action="/apps/boersenchecker"> <form class="bc-panel" method="get" action="/apps/boersenchecker/index.php">
<input type="hidden" name="view" value="overview"> <input type="hidden" name="view" value="overview">
<div class="bc-field-label">Depotauswahl</div> <div class="bc-field-label">Depotauswahl</div>
<?php if ($portfolios === []): ?> <?php if ($portfolios === []): ?>
@@ -44,7 +44,7 @@
<?php endif; ?> <?php endif; ?>
</form> </form>
<form class="bc-panel" method="get" action="/apps/boersenchecker"> <form class="bc-panel" method="get" action="/apps/boersenchecker/index.php">
<input type="hidden" name="view" value="overview"> <input type="hidden" name="view" value="overview">
<input type="hidden" name="portfolio_id" value="<?= e((string) $selectedPortfolioId) ?>"> <input type="hidden" name="portfolio_id" value="<?= e((string) $selectedPortfolioId) ?>">
<div class="bc-field-label">Aktienauswahl</div> <div class="bc-field-label">Aktienauswahl</div>

View File

@@ -16,7 +16,7 @@
<p>Systemweit vorhandene Aktie aus allen Depots auswaehlen.</p> <p>Systemweit vorhandene Aktie aus allen Depots auswaehlen.</p>
</div> </div>
</div> </div>
<form method="get" action="/apps/boersenchecker" style="margin-top:16px;"> <form method="get" action="/apps/boersenchecker/index.php" style="margin-top:16px;">
<input type="hidden" name="view" value="aktienverwaltung"> <input type="hidden" name="view" value="aktienverwaltung">
<label class="setup-field muted"> <label class="setup-field muted">
<span>Aktien aller Depots</span> <span>Aktien aller Depots</span>
@@ -68,7 +68,7 @@
<td><?= e((string) ($result['region'] ?? '')) ?></td> <td><?= e((string) ($result['region'] ?? '')) ?></td>
<td><?= e((string) ($result['currency'] ?? '')) ?></td> <td><?= e((string) ($result['currency'] ?? '')) ?></td>
<td> <td>
<a class="bc-button bc-button--secondary" href="/apps/boersenchecker?view=aktienverwaltung&instrument_id=<?= e((string) $selectedInstrumentId) ?>&symbol_candidate=<?= urlencode((string) ($result['symbol'] ?? '')) ?>&instrument_name_candidate=<?= urlencode((string) ($result['name'] ?? '')) ?>&isin_candidate=<?= urlencode((string) ($result['isin'] ?? '')) ?>&market_candidate=<?= urlencode((string) ($result['region'] ?? '')) ?>&quote_currency_candidate=<?= urlencode((string) ($result['currency'] ?? '')) ?>"> <a class="bc-button bc-button--secondary" href="/apps/boersenchecker/index.php?view=aktienverwaltung&instrument_id=<?= e((string) $selectedInstrumentId) ?>&symbol_candidate=<?= urlencode((string) ($result['symbol'] ?? '')) ?>&instrument_name_candidate=<?= urlencode((string) ($result['name'] ?? '')) ?>&isin_candidate=<?= urlencode((string) ($result['isin'] ?? '')) ?>&market_candidate=<?= urlencode((string) ($result['region'] ?? '')) ?>&quote_currency_candidate=<?= urlencode((string) ($result['currency'] ?? '')) ?>">
Uebernehmen Uebernehmen
</a> </a>
</td> </td>