Files
komp_ac/web/templates/pages/admin/ecb/ecb.html
2026-08-13 09:27:42 +02:00

93 lines
3.6 KiB
HTML

{# GET /admin/ecb — crate::pages::admin::ecb::ui::EcbPage #}
{% extends "ui/base.html" %}
{% block title %}Exchange rates{% endblock %}
{% block content %}
<main>
<section class="heading">
<div>
<p class="eyebrow">Exchange rates</p>
<h1>ECB reference rates</h1>
<p>
The importer fetches the ECB's published rates once a day and records every
attempt. Conversions read only what it has verified, so coverage is what decides
whether a foreign-currency amount can be posted at all.
</p>
</div>
<div class="actions">
<a href="/admin">← Admin panel</a>
</div>
</section>
{% include "pages/admin/ecb/status.html" %}
<section class="panel">
<h2>
Import attempts <span class="count">{{ page.batches.len() }}</span>
{%- if page.failure_count() > 0 %}<span class="tag tag-bad">{{ page.failure_count() }} failed</span>{% endif -%}
</h2>
{% if page.batches.is_empty() %}
<p class="hint">
The importer has not recorded an attempt. It runs on startup and then daily, so
an empty log means the server has not completed a run since this table was
created.
</p>
{% else %}
<div class="table-scroll">
<table class="builder-table">
<thead>
<tr>
<th class="mark">#</th><th>Result</th><th>Started</th><th>Finished</th>
<th>Took</th><th>Window</th><th class="numeric">Observations</th>
<th>Verified through</th>
</tr>
</thead>
<tbody>
{% for batch in page.batches %}
<tr{% if batch.failed() %} class="attempt-failed"{% endif %}>
<td class="mark">{{ batch.batch_id }}</td>
<td>
{%- if batch.succeeded() %}<span class="tag tag-ok">succeeded</span>
{%- else if batch.running() %}<span class="tag">running</span>
{%- else %}<span class="tag tag-bad">failed</span>{% endif -%}
</td>
<td class="moment">{{ batch.started() }}</td>
<td class="moment">
{%- if let Some(finished) = batch.finished() %}{{ finished }}
{%- else %}<span class="hint">still running</span>{% endif -%}
</td>
<td class="numeric">
{%- if let Some(took) = batch.took() %}{{ took }}
{%- else %}<span class="hint"></span>{% endif -%}
</td>
<td>
{{ batch.window() }}
<div class="hint endpoint" title="{{ batch.endpoint }}"><code>{{ batch.endpoint }}</code></div>
</td>
<td class="numeric">{{ batch.observations() }}</td>
<td class="moment">
{%- if let Some(date) = batch.verified_through_date %}{{ date }}
{%- else %}<span class="hint"></span>{% endif -%}
</td>
</tr>
{% if let Some(message) = batch.error_message %}
<tr class="attempt-error">
<td class="mark"></td>
<td colspan="7">{{ message }}</td>
</tr>
{% endif %}
{% endfor %}
</tbody>
</table>
</div>
<p class="hint">
Attempts are an audit record: they cannot be edited or deleted, and a batch that
re-fetched a day an earlier one already owned inserts nothing, which is why the
new count can be lower than the total.
</p>
{% endif %}
</section>
</main>
{% endblock %}