feat: Implement provisioning request management in admin and user invoice views

This commit is contained in:
2026-05-26 22:45:10 +02:00
parent b2cf004a78
commit 94f7d301d1
3 changed files with 286 additions and 23 deletions
+45
View File
@@ -62,6 +62,51 @@
{% else %}
<article class="entry"><p>Noch keine Rechnungen vorhanden.</p></article>
{% endfor %}
{% if provision_requests %}
<h2>Provisionierungsanfragen</h2>
{% for prov in provision_requests %}
<article class="entry">
<h3>{{ prov.booking_number or prov.booking_number }}</h3>
<p><strong>Nutzer:</strong> {{ prov.username }} | <strong>Subdomain:</strong> {{ prov.subdomain }}</p>
<p><strong>Paket:</strong> {{ prov.package_label or prov.package }} | <strong>Betrag:</strong> {{ '%.2f'|format(prov.amount_eur or 0) }} EUR</p>
<p><strong>Status:</strong> {{ prov.provision_status or 'not_started' }}{% if prov.provision_error %} | <strong>Fehler:</strong> {{ prov.provision_error }}{% endif %}</p>
<p><strong>Kontaktdaten:</strong> {{ prov.booking_data.contact_person }} | {{ prov.booking_data.contact_email }} | {{ prov.booking_data.billing_city }}</p>
<form method="post" style="display:inline-block; margin-right:0.6rem;">
<input type="hidden" name="action" value="create_from_provision">
<input type="hidden" name="prov_id" value="{{ prov.id }}">
<input type="text" name="period" placeholder="Zeitraum (optional)">
<input type="text" name="due_date" placeholder="Fälligkeit (YYYY-MM-DD)">
<button type="submit">Rechnung erzeugen</button>
</form>
<form method="post" style="display:inline-block; margin-right:0.6rem;">
<input type="hidden" name="action" value="update_provision">
<input type="hidden" name="prov_id" value="{{ prov.id }}">
<select name="prov_status">
<option value="accepted">accepted</option>
<option value="rejected">rejected</option>
<option value="completed">completed</option>
</select>
<button type="submit">Status setzen</button>
</form>
<form method="post" style="display:inline-block; margin-right:0.6rem;">
<input type="hidden" name="action" value="run_provision">
<input type="hidden" name="prov_id" value="{{ prov.id }}">
<button type="submit">Provision starten</button>
</form>
<form method="post" style="display:inline-block; margin-right:0.6rem;">
<input type="hidden" name="action" value="retry_provision">
<input type="hidden" name="prov_id" value="{{ prov.id }}">
<button type="submit">Provision wiederholen</button>
</form>
<form method="post" style="display:inline-block; margin-right:0.6rem;">
<input type="hidden" name="action" value="configure_provision">
<input type="hidden" name="prov_id" value="{{ prov.id }}">
<button type="submit">Konfiguration ausführen</button>
</form>
</article>
{% endfor %}
{% endif %}
</div>
</section>
+34
View File
@@ -45,6 +45,40 @@
</table>
</section>
<section class="panel">
<h2>Provisionierungsanfragen</h2>
<p>Hier siehst du den Status deiner angeforderten Instanzen/ Buchungen, die vom Admin geprüft werden.</p>
</section>
<section class="table-wrap">
<table>
<thead>
<tr>
<th>Anfrage</th>
<th>Paket</th>
<th>Subdomain</th>
<th>Betrag</th>
<th>Status</th>
</tr>
</thead>
<tbody>
{% for prov in provision_requests %}
<tr>
<td>{{ prov.booking_number or prov.booking_number }}</td>
<td>{{ prov.package_label or prov.package }}</td>
<td>{{ prov.subdomain }}</td>
<td>{{ '%.2f'|format(prov.amount_eur or 0) }} EUR</td>
<td>{{ prov.provision_status or 'not_started' }}</td>
</tr>
{% else %}
<tr>
<td colspan="5">Keine Provisionierungsanfragen vorhanden.</td>
</tr>
{% endfor %}
</tbody>
</table>
</section>
<style>
.panel { margin-bottom: 1rem; }
.table-wrap { background: #fff; border: 1px solid #d8e1e8; border-radius: 14px; padding: 1rem; overflow-x: auto; }