v1.0
This commit is contained in:
@@ -18,7 +18,7 @@ Kunde bearbeiten
|
||||
|
||||
<div class="p-6 rounded-xl shadow bg-white dark:bg-slate-800 text-slate-900 dark:text-white transition-colors">
|
||||
|
||||
<h2 class="text-xl font-bold mb-2">Kundendaten</h2>
|
||||
<h2 class="text-lg font-bold mb-2">Kundendaten</h2>
|
||||
|
||||
<div class="grid md:grid-cols-2 gap-4 mb-8">
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ Kundenstammdaten verwalten
|
||||
<div class="p-6 rounded-xl shadow bg-white dark:bg-slate-800 text-slate-900 dark:text-white transition-colors">
|
||||
<div class="flex flex-col sm:flex-row sm:justify-between sm:items-center gap-4">
|
||||
<div>
|
||||
<h2 class="text-xl font-bold">Aktionen</h2>
|
||||
<h2 class="text-lg font-bold">Aktionen</h2>
|
||||
<p class="text-slate-400 text-sm mt-1">
|
||||
Kunden anlegen
|
||||
</p>
|
||||
@@ -36,7 +36,7 @@ Kundenstammdaten verwalten
|
||||
<div class="p-6 rounded-xl shadow bg-white dark:bg-slate-800 text-slate-900 dark:text-white transition-colors mb-8">
|
||||
|
||||
<div class="mb-6">
|
||||
<h2 class="text-xl font-bold">Kundenliste</h2>
|
||||
<h2 class="text-lg font-bold">Kundenliste</h2>
|
||||
<p class="text-slate-400 text-sm mt-1">Alle Kunden, inkl. Standorte und Ansprechpartner</p>
|
||||
</div>
|
||||
|
||||
@@ -49,7 +49,7 @@ Kundenstammdaten verwalten
|
||||
<div class="p-6 rounded-xl shadow bg-white dark:bg-slate-800 text-slate-900 dark:text-white transition-colors">
|
||||
|
||||
<div class="mb-6">
|
||||
<h2 class="text-xl font-bold">Archivierte Kunden</h2>
|
||||
<h2 class="text-lg font-bold">Archivierte Kunden</h2>
|
||||
<p class="text-slate-400 text-sm mt-1">Alle inaktiven Kunden, inkl. Standorte und Ansprechpartner</p>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -0,0 +1,249 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}Rechnungswesen - Rechnungen{% endblock %}
|
||||
|
||||
{% block header_title %}
|
||||
Zahlung erfassen
|
||||
{% endblock %}
|
||||
|
||||
{% block header_description %}
|
||||
Zahlung für Rechnung {{ invoice.invoice_number }} hinzufügen
|
||||
{% endblock %}
|
||||
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="grid grid-cols-1 lg:grid-cols-3 gap-6">
|
||||
<!-- PAYMENT FORM -->
|
||||
<div class="lg:col-span-2">
|
||||
<div class="p-6 rounded-xl shadow bg-white dark:bg-slate-800 text-slate-900 dark:text-white transition-colors">
|
||||
|
||||
|
||||
|
||||
<form method="post" enctype="multipart/form-data" class="space-y-4">
|
||||
{% csrf_token %}
|
||||
|
||||
{{ form.as_p }}
|
||||
|
||||
<button class="btn btn-save">
|
||||
Speichern
|
||||
</button>
|
||||
</form>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- PAYMENT SUMMARY -->
|
||||
<div class="lg:col-span-1">
|
||||
|
||||
<div class="bg-white dark:bg-slate-800 rounded-xl shadow p-6 font-mono text-sm">
|
||||
|
||||
<!-- HEADER -->
|
||||
<div class="text-center">
|
||||
|
||||
<h2 class="text-lg font-bold">
|
||||
Zahlungsübersicht
|
||||
</h2>
|
||||
|
||||
<p class="text-xs text-slate-400 mt-1">
|
||||
Rechnung {{ invoice.invoice_number }}
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="border-t border-dashed border-slate-300 dark:border-slate-600 my-5"></div>
|
||||
|
||||
|
||||
<!-- RECHNUNG -->
|
||||
<div class="space-y-2">
|
||||
|
||||
|
||||
{% if not invoice.is_small_business %}
|
||||
|
||||
<div class="flex justify-between">
|
||||
<span class="text-slate-400">
|
||||
Netto
|
||||
</span>
|
||||
|
||||
<span>
|
||||
{{ invoice.total_net|floatformat:2 }} €
|
||||
</span>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="flex justify-between">
|
||||
<span class="text-slate-400">
|
||||
Umsatzsteuer
|
||||
</span>
|
||||
|
||||
<span>
|
||||
{{ invoice.total_tax|floatformat:2 }} €
|
||||
</span>
|
||||
</div>
|
||||
|
||||
|
||||
{% endif %}
|
||||
|
||||
|
||||
<div class="flex justify-between font-semibold">
|
||||
<span>
|
||||
Rechnungsbetrag
|
||||
</span>
|
||||
|
||||
<span>
|
||||
{{ invoice.total_amount|floatformat:2 }} €
|
||||
</span>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<!-- MAHNUNGEN -->
|
||||
{% if invoice.reminder_amount > 0 %}
|
||||
|
||||
<div class="border-t border-dashed border-slate-300 dark:border-slate-600 my-5"></div>
|
||||
|
||||
|
||||
<div class="space-y-2">
|
||||
|
||||
<div class="flex justify-between text-red-600">
|
||||
|
||||
<span>
|
||||
Mahngebühren
|
||||
</span>
|
||||
|
||||
<span>
|
||||
+ {{ invoice.reminder_amount|floatformat:2 }} €
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{% for reminder in invoice.reminders.all %}
|
||||
|
||||
{% if reminder.status != "canceled" %}
|
||||
|
||||
<div class="flex justify-between text-xs text-slate-400">
|
||||
|
||||
<span>
|
||||
{{ reminder.level }}. Mahnung
|
||||
</span>
|
||||
|
||||
<span>
|
||||
{{ reminder.fee|floatformat:2 }} €
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
||||
{% endif %}
|
||||
|
||||
{% endfor %}
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
{% endif %}
|
||||
|
||||
|
||||
|
||||
<!-- GESAMT -->
|
||||
<div class="border-t border-dashed border-slate-300 dark:border-slate-600 my-5"></div>
|
||||
|
||||
|
||||
<div class="flex justify-between text-lg font-bold">
|
||||
|
||||
<span>
|
||||
Gesamtforderung
|
||||
</span>
|
||||
|
||||
<span>
|
||||
{{ invoice.total_with_reminders|floatformat:2 }} €
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<!-- ZAHLUNGEN -->
|
||||
<div class="mt-4 space-y-2">
|
||||
|
||||
|
||||
<div class="flex justify-between text-green-600">
|
||||
|
||||
<span>
|
||||
Bereits bezahlt
|
||||
</span>
|
||||
|
||||
<span>
|
||||
- {{ invoice.paid_amount|floatformat:2 }} €
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
{% for payment in invoice.payments.all %}
|
||||
|
||||
<div class="flex justify-between text-xs text-slate-400">
|
||||
|
||||
<span>
|
||||
Zahlung {{ payment.date|date:"d.m.Y" }}
|
||||
</span>
|
||||
|
||||
<span>
|
||||
{{ payment.amount|floatformat:2 }} €
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
||||
{% endfor %}
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<!-- OFFEN -->
|
||||
<div class="border-t border-dashed border-slate-300 dark:border-slate-600 my-5"></div>
|
||||
|
||||
|
||||
<div class="bg-slate-100 dark:bg-slate-700 rounded-xl p-4 text-center">
|
||||
|
||||
<p class="text-xs uppercase text-slate-400">
|
||||
Offener Betrag
|
||||
</p>
|
||||
|
||||
|
||||
<p class="text-3xl font-bold text-red-600 mt-1">
|
||||
|
||||
{{ invoice.open_amount|floatformat:2 }} €
|
||||
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<!-- FOOTER -->
|
||||
<div class="border-t border-dashed border-slate-300 dark:border-slate-600 my-5"></div>
|
||||
|
||||
|
||||
<div class="text-center text-xs text-slate-400">
|
||||
|
||||
Zahlungserfassung
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
@@ -16,7 +16,7 @@ Details & Positionen
|
||||
<div class="p-6 rounded-xl shadow bg-white dark:bg-slate-800 text-slate-900 dark:text-white transition-colors">
|
||||
<div class="flex flex-col sm:flex-row sm:justify-between sm:items-center gap-4">
|
||||
<div>
|
||||
<h2 class="text-xl font-bold">Aktionen</h2>
|
||||
<h2 class="text-lg font-bold">Aktionen</h2>
|
||||
<p class="text-slate-400 text-sm mt-1">
|
||||
Positionen zur Rechnung hinzufügen
|
||||
</p>
|
||||
@@ -32,7 +32,6 @@ Details & Positionen
|
||||
<a href="{% url 'invoices:invoices_download' invoice.id %}" class="btn btn-action">Download</a>
|
||||
<a href="{% url 'invoices:invoices_cancel' invoice.id %}" onclick="startDownloadAndRedirect()" class="btn btn-delete">Stornieren</a>
|
||||
<a href="{% url 'invoices:invoices_paid' invoice.id %}" class="btn btn-action">Zahlung verbuchen</a>
|
||||
<a href="{% url 'invoices:invoices_overdue' invoice.id %}" class="btn btn-action">Überfällig</a>
|
||||
{% endif %}
|
||||
{% if invoice.status == "paid" %}
|
||||
<a href="{% url 'invoices:invoices_download' invoice.id %}" class="btn btn-action">Download</a>
|
||||
@@ -44,6 +43,8 @@ Details & Positionen
|
||||
{% endif %}
|
||||
{% if invoice.status == "overdue" %}
|
||||
<a href="{% url 'invoices:invoices_download' invoice.id %}" class="btn btn-action">Download</a>
|
||||
<a href="{% url 'invoices:invoices_cancel' invoice.id %}" onclick="startDownloadAndRedirect()" class="btn btn-delete">Stornieren</a>
|
||||
<a href="{% url 'invoices:invoices_paid' invoice.id %}" class="btn btn-action">Zahlung verbuchen</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<div class="p-6 rounded-xl shadow bg-white dark:bg-slate-800 text-slate-900 dark:text-white transition-colors">
|
||||
<div class="flex flex-col sm:flex-row sm:justify-between sm:items-center gap-4">
|
||||
<div>
|
||||
<h2 class="text-xl font-bold">Aktionen</h2>
|
||||
<h2 class="text-lg font-bold">Aktionen</h2>
|
||||
<p class="text-slate-400 text-sm mt-1">Neue Rechnung erstellen</p>
|
||||
</div>
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
</div>
|
||||
<div class="p-6 rounded-xl shadow bg-white dark:bg-slate-800 text-slate-900 dark:text-white transition-colors">
|
||||
<div class="mb-6">
|
||||
<h2 class="text-xl font-bold">Rechnungen</h2>
|
||||
<h2 class="text-lg font-bold">Rechnungen</h2>
|
||||
<p class="text-slate-400 text-sm mt-1">Alle Rechnungen mit aktuellem Status</p>
|
||||
</div>
|
||||
<div class="overflow-x-auto rounded-xl">
|
||||
|
||||
@@ -158,7 +158,7 @@ table {
|
||||
|
||||
margin-top:30px;
|
||||
margin-left:auto;
|
||||
width:250px;
|
||||
width: 300px;
|
||||
|
||||
}
|
||||
|
||||
@@ -178,7 +178,7 @@ table {
|
||||
border-top:1px solid #cbd5e1;
|
||||
margin-top:10px;
|
||||
padding-top:10px;
|
||||
font-size:16px;
|
||||
font-size:14px;
|
||||
font-weight:bold;
|
||||
|
||||
}
|
||||
@@ -454,7 +454,7 @@ Preis
|
||||
</th>
|
||||
|
||||
|
||||
{% if not company.is_small_business %}
|
||||
{% if not invoice.is_small_business %}
|
||||
|
||||
<th class="left">
|
||||
Steuer
|
||||
@@ -518,7 +518,7 @@ Gesamt
|
||||
</td>
|
||||
|
||||
|
||||
{% if not company.is_small_business %}
|
||||
{% if not invoice.is_small_business %}
|
||||
|
||||
<td class="left">
|
||||
{{ item.unit_tax_rate|floatformat:0 }} %
|
||||
@@ -569,7 +569,7 @@ Netto
|
||||
|
||||
|
||||
|
||||
{% if not company.is_small_business %}
|
||||
{% if not invoice.is_small_business %}
|
||||
{% for tax_rate,tax_amount in tax_summary.items %}
|
||||
|
||||
<div class="total-row">
|
||||
@@ -603,7 +603,7 @@ Gesamt
|
||||
|
||||
<span>
|
||||
|
||||
{% if company.is_small_business %}
|
||||
{% if invoice.is_small_business %}
|
||||
{{ total_net|floatformat:2 }}
|
||||
{% else %}
|
||||
{{ total_gross|floatformat:2 }}
|
||||
@@ -644,7 +644,7 @@ Rechnungshinweis
|
||||
|
||||
|
||||
|
||||
{% if company.is_small_business %}
|
||||
{% if invoice.is_small_business %}
|
||||
|
||||
<div class="note">
|
||||
|
||||
|
||||
@@ -155,10 +155,9 @@ table {
|
||||
|
||||
|
||||
.total-box {
|
||||
|
||||
margin-top:30px;
|
||||
margin-left:auto;
|
||||
width:250px;
|
||||
width:300px;
|
||||
|
||||
}
|
||||
|
||||
@@ -174,11 +173,10 @@ table {
|
||||
|
||||
|
||||
.total-final {
|
||||
|
||||
border-top:1px solid #cbd5e1;
|
||||
margin-top:10px;
|
||||
padding-top:10px;
|
||||
font-size:16px;
|
||||
font-size:14px;
|
||||
font-weight:bold;
|
||||
|
||||
}
|
||||
@@ -414,12 +412,11 @@ Stornodatum: {{ cancel_date|date:"d.m.Y" }}
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- POSITIONEN -->
|
||||
|
||||
<div class="items-wrapper">
|
||||
<table class="items">
|
||||
|
||||
<table class="items">
|
||||
|
||||
<thead>
|
||||
|
||||
@@ -429,37 +426,46 @@ Stornodatum: {{ cancel_date|date:"d.m.Y" }}
|
||||
Nr.
|
||||
</th>
|
||||
|
||||
|
||||
<th>
|
||||
Beschreibung
|
||||
</th>
|
||||
|
||||
{% if show_service_date %}
|
||||
<th class="left">Leistungsdatum</th>
|
||||
{% endif %}
|
||||
|
||||
<th class="left">
|
||||
{% if show_service_date %}
|
||||
|
||||
<th>
|
||||
Leistungsdatum
|
||||
</th>
|
||||
|
||||
{% endif %}
|
||||
|
||||
|
||||
<th class="right">
|
||||
Menge
|
||||
</th>
|
||||
|
||||
<th class="left">
|
||||
|
||||
<th>
|
||||
Einheit
|
||||
</th>
|
||||
|
||||
<th class="left">
|
||||
Preis
|
||||
|
||||
<th class="right">
|
||||
Einzelpreis
|
||||
</th>
|
||||
|
||||
|
||||
{% if not company.is_small_business %}
|
||||
{% if not invoice.is_small_business %}
|
||||
|
||||
<th class="left">
|
||||
<th class="right">
|
||||
Steuer
|
||||
</th>
|
||||
|
||||
{% endif %}
|
||||
|
||||
|
||||
<th class="left">
|
||||
<th class="right">
|
||||
Gesamt
|
||||
</th>
|
||||
|
||||
@@ -469,7 +475,6 @@ Gesamt
|
||||
</thead>
|
||||
|
||||
|
||||
|
||||
<tbody>
|
||||
|
||||
|
||||
@@ -483,40 +488,52 @@ Gesamt
|
||||
</td>
|
||||
|
||||
|
||||
|
||||
<td>
|
||||
{{ item.description }}
|
||||
Storno: {{ item.description }}
|
||||
</td>
|
||||
|
||||
|
||||
{% if show_service_date %}
|
||||
<td class="left">
|
||||
{% if item.service_period_from %}
|
||||
{{ item.service_period_from|date:"d.m.Y" }}
|
||||
{% endif %}
|
||||
{% if item.service_period_to %}
|
||||
- {{ item.service_period_to|date:"d.m.Y" }}
|
||||
{% endif %}
|
||||
</td>
|
||||
{% endif %}
|
||||
|
||||
<td class="left">
|
||||
{% if show_service_date %}
|
||||
|
||||
<td>
|
||||
|
||||
{% if item.service_period_from %}
|
||||
{{ item.service_period_from|date:"d.m.Y" }}
|
||||
{% endif %}
|
||||
|
||||
{% if item.service_period_to %}
|
||||
- {{ item.service_period_to|date:"d.m.Y" }}
|
||||
{% endif %}
|
||||
|
||||
</td>
|
||||
|
||||
{% endif %}
|
||||
|
||||
|
||||
|
||||
<td class="right">
|
||||
{{ item.quantity }}
|
||||
</td>
|
||||
|
||||
|
||||
<td class="left">
|
||||
|
||||
<td>
|
||||
{{ item.unit }}
|
||||
</td>
|
||||
|
||||
|
||||
<td class="left">
|
||||
|
||||
<td class="right">
|
||||
-{{ item.unit_price_net|floatformat:2 }} €
|
||||
</td>
|
||||
|
||||
|
||||
{% if not company.is_small_business %}
|
||||
|
||||
<td class="left">
|
||||
{% if not invoice.is_small_business %}
|
||||
|
||||
<td class="right">
|
||||
{{ item.unit_tax_rate|floatformat:0 }} %
|
||||
</td>
|
||||
|
||||
@@ -524,7 +541,7 @@ Gesamt
|
||||
|
||||
|
||||
|
||||
<td class="left">
|
||||
<td class="right">
|
||||
-{{ item.calculated_total_net|floatformat:2 }} €
|
||||
</td>
|
||||
|
||||
@@ -540,14 +557,28 @@ Gesamt
|
||||
|
||||
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- SUMMEN -->
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- SUMMEN -->
|
||||
|
||||
<div class="total-box">
|
||||
|
||||
|
||||
@@ -565,7 +596,9 @@ Netto
|
||||
|
||||
|
||||
|
||||
{% if not company.is_small_business %}
|
||||
|
||||
{% if not invoice.is_small_business %}
|
||||
|
||||
{% for tax_rate,tax_amount in tax_summary.items %}
|
||||
|
||||
<div class="total-row">
|
||||
@@ -574,32 +607,27 @@ Netto
|
||||
Umsatzsteuer {{ tax_rate|floatformat:0 }} %
|
||||
</span>
|
||||
|
||||
|
||||
<span>
|
||||
-{{ tax_amount|floatformat:2 }} €
|
||||
</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{% endfor %}
|
||||
|
||||
{% endif %}
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="total-row total-final">
|
||||
|
||||
<span>
|
||||
Gesamt
|
||||
Rechnungsbetrag
|
||||
</span>
|
||||
|
||||
|
||||
<span>
|
||||
|
||||
{% if company.is_small_business %}
|
||||
{% if invoice.is_small_business %}
|
||||
-{{ total_net|floatformat:2 }}
|
||||
{% else %}
|
||||
-{{ total_gross|floatformat:2 }}
|
||||
@@ -609,12 +637,41 @@ Gesamt
|
||||
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="total-row">
|
||||
|
||||
<span>
|
||||
Bereits bezahlt
|
||||
</span>
|
||||
|
||||
<span>
|
||||
-{{ paid_amount|floatformat:2 }} €
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="total-row total-final">
|
||||
|
||||
<span>
|
||||
Erstattungsbetrag
|
||||
</span>
|
||||
|
||||
<span>
|
||||
{{ refund_amount|floatformat:2 }} €
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="note">
|
||||
|
||||
<div class="receiver-title">
|
||||
@@ -623,37 +680,45 @@ Gesamt
|
||||
|
||||
<br>
|
||||
|
||||
Die Rechnung {{ invoice.invoice_number }}
|
||||
wird durch diese Stornorechnung vollständig aufgehoben.
|
||||
|
||||
{% if original_status == "paid" %}
|
||||
Die Rechnung
|
||||
<strong>{{ invoice.invoice_number }}</strong>
|
||||
vom {{ invoice.issue_date|date:"d.m.Y" }}
|
||||
wird durch diese Stornorechnung aufgehoben.
|
||||
|
||||
<br><br>
|
||||
|
||||
Die ursprüngliche Rechnung wurde bereits bezahlt.
|
||||
{% if paid_amount > 0 %}
|
||||
|
||||
Es entsteht ein Guthaben in Höhe von
|
||||
<br><br>
|
||||
|
||||
{% if company.is_small_business %}
|
||||
{{ total_net|floatformat:2 }}
|
||||
{% else %}
|
||||
{{ total_gross|floatformat:2 }}
|
||||
{% endif %}
|
||||
|
||||
€.
|
||||
Die ursprüngliche Rechnung wurde bereits bezahlt.
|
||||
|
||||
|
||||
Der zu erstattende Betrag beträgt:
|
||||
|
||||
|
||||
<strong>
|
||||
{{ refund_amount|floatformat:2 }} €
|
||||
</strong>
|
||||
|
||||
|
||||
<br><br>
|
||||
|
||||
|
||||
Die Rückerstattung erfolgt separat.
|
||||
|
||||
Die Rückerstattung erfolgt separat.
|
||||
|
||||
{% endif %}
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
{% if company.is_small_business %}
|
||||
{% if invoice.is_small_business %}
|
||||
|
||||
<div class="note">
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ Leistungen und Artikel verwalten
|
||||
<div class="p-6 rounded-xl shadow bg-white dark:bg-slate-800 text-slate-900 dark:text-white transition-colors">
|
||||
<div class="flex flex-col sm:flex-row sm:justify-between sm:items-center gap-4">
|
||||
<div>
|
||||
<h2 class="text-xl font-bold">Aktionen</h2>
|
||||
<h2 class="text-lg font-bold">Aktionen</h2>
|
||||
<p class="text-slate-400 text-sm mt-1">
|
||||
Leistungen und Artikel anlegen
|
||||
</p>
|
||||
@@ -38,7 +38,7 @@ Leistungen und Artikel verwalten
|
||||
<div class="flex flex-wrap justify-between items-center mb-6">
|
||||
|
||||
<div>
|
||||
<h2 class="text-xl font-bold">
|
||||
<h2 class="text-lg font-bold">
|
||||
Artikel und Leistungen
|
||||
</h2>
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ Details & Positionen
|
||||
<div class="p-6 rounded-xl shadow bg-white dark:bg-slate-800 text-slate-900 dark:text-white transition-colors">
|
||||
<div class="flex flex-col sm:flex-row sm:justify-between sm:items-center gap-4">
|
||||
<div>
|
||||
<h2 class="text-xl font-bold">Aktionen</h2>
|
||||
<h2 class="text-lg font-bold">Aktionen</h2>
|
||||
<p class="text-slate-400 text-sm mt-1">
|
||||
Positionen zum Angebot hinzufügen
|
||||
</p>
|
||||
@@ -32,7 +32,6 @@ Details & Positionen
|
||||
<a href="{% url 'invoices:offers_download' offer.id %}" class="btn btn-action">Download</a>
|
||||
<a href="{% url 'invoices:offers_accept' offer.id %}" class="btn btn-action">Akzeptiert</a>
|
||||
<a href="{% url 'invoices:offers_reject' offer.id %}" class="btn btn-action">Abgelehnt</a>
|
||||
<a href="{% url 'invoices:offers_expire' offer.id %}" class="btn btn-action">Ausgelaufen</a>
|
||||
{% endif %}
|
||||
{% if offer.status == "accepted" or offer.status == "rejected" or offer.status == "expired" %}
|
||||
<a href="{% url 'invoices:offers_download' offer.id %}" class="btn btn-action">Download</a>
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<div class="p-6 rounded-xl shadow bg-white dark:bg-slate-800 text-slate-900 dark:text-white transition-colors">
|
||||
<div class="flex flex-col sm:flex-row sm:justify-between sm:items-center gap-4">
|
||||
<div>
|
||||
<h2 class="text-xl font-bold">Aktionen</h2>
|
||||
<h2 class="text-lg font-bold">Aktionen</h2>
|
||||
<p class="text-slate-400 text-sm mt-1">Neues Angebot erstellen</p>
|
||||
</div>
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
</div>
|
||||
<div class="p-6 rounded-xl shadow bg-white dark:bg-slate-800 text-slate-900 dark:text-white transition-colors">
|
||||
<div class="mb-6">
|
||||
<h2 class="text-xl font-bold">Angebote</h2>
|
||||
<h2 class="text-lg font-bold">Angebote</h2>
|
||||
<p class="text-slate-400 text-sm mt-1">Alle Angebote mit aktuellem Status</p>
|
||||
</div>
|
||||
<div class="overflow-x-auto rounded-xl">
|
||||
|
||||
@@ -158,7 +158,7 @@ table {
|
||||
|
||||
margin-top:30px;
|
||||
margin-left:auto;
|
||||
width:250px;
|
||||
width: 300px;
|
||||
|
||||
}
|
||||
|
||||
@@ -178,7 +178,7 @@ table {
|
||||
border-top:1px solid #cbd5e1;
|
||||
margin-top:10px;
|
||||
padding-top:10px;
|
||||
font-size:16px;
|
||||
font-size:14px;
|
||||
font-weight:bold;
|
||||
|
||||
}
|
||||
|
||||
@@ -18,44 +18,37 @@ Angebote, Rechnungen, Mahnungen verwalten
|
||||
<!-- MODULE GRID -->
|
||||
<div class="grid grid-cols-1 md:grid-cols-3 gap-4">
|
||||
|
||||
<a href="{% url 'invoices:invoices_offers_overview' %}" class="p-6 rounded-xl shadow bg-white dark:bg-slate-800 text-slate-900 dark:text-white transition-colors">
|
||||
<a href="{% url 'invoices:invoices_offers_overview' %}" class="border border-slate-100 dark:border-slate-700 hover:border-[var(--company-color)]/40 hover:shadow-sm transition-all duration-200 p-6 rounded-xl shadow bg-white dark:bg-slate-800 text-slate-900 dark:text-white transition-colors">
|
||||
<div class="text-2xl mb-2">📄</div>
|
||||
<h2 class="text-xl font-bold">Angebote</h2>
|
||||
<h2 class="text-lg font-bold">Angebote</h2>
|
||||
<p class="text-slate-400 text-sm mt-1">Angebote erstellen und verwalten</p>
|
||||
</a>
|
||||
<a href="{% url 'invoices:invoices_invoices_overview' %}" class="p-6 rounded-xl shadow bg-white dark:bg-slate-800 text-slate-900 dark:text-white transition-colors">
|
||||
<a href="{% url 'invoices:invoices_invoices_overview' %}" class="border border-slate-100 dark:border-slate-700 hover:border-[var(--company-color)]/40 hover:shadow-sm transition-all duration-200 p-6 rounded-xl shadow bg-white dark:bg-slate-800 text-slate-900 dark:text-white transition-colors">
|
||||
<div class="text-2xl mb-2">🧾</div>
|
||||
<h2 class="text-xl font-bold">Rechnungen</h2>
|
||||
<h2 class="text-lg font-bold">Rechnungen</h2>
|
||||
<p class="text-slate-400 text-sm mt-1">Rechnungen erstellen und verwalten</p>
|
||||
</a>
|
||||
<a href="{% url 'invoices:invoices_reminders_overview' %}" class="p-6 rounded-xl shadow bg-white dark:bg-slate-800 text-slate-900 dark:text-white transition-colors">
|
||||
<a href="{% url 'invoices:invoices_reminders_overview' %}" class="border border-slate-100 dark:border-slate-700 hover:border-[var(--company-color)]/40 hover:shadow-sm transition-all duration-200 p-6 rounded-xl shadow bg-white dark:bg-slate-800 text-slate-900 dark:text-white transition-colors">
|
||||
<div class="text-2xl mb-2">⚠️</div>
|
||||
<h2 class="text-xl font-bold">Mahnungen</h2>
|
||||
<h2 class="text-lg font-bold">Mahnungen</h2>
|
||||
<p class="text-slate-400 text-sm mt-1">Offene Forderungen verfolgen</p>
|
||||
</a>
|
||||
<a href="{% url 'invoices:customers_overview' %}" class="p-6 rounded-xl shadow bg-white dark:bg-slate-800 text-slate-900 dark:text-white transition-colors">
|
||||
<a href="{% url 'invoices:customers_overview' %}" class="border border-slate-100 dark:border-slate-700 hover:border-[var(--company-color)]/40 hover:shadow-sm transition-all duration-200 p-6 rounded-xl shadow bg-white dark:bg-slate-800 text-slate-900 dark:text-white transition-colors">
|
||||
<div class="text-2xl mb-2">👥</div>
|
||||
<h2 class="text-xl font-bold">Kunden</h2>
|
||||
<h2 class="text-lg font-bold">Kunden</h2>
|
||||
<p class="text-slate-400 text-sm mt-1">Kundenstammdaten verwalten</p>
|
||||
</a>
|
||||
<a href="{% url 'invoices:items_overview' %}" class="p-6 rounded-xl shadow bg-white dark:bg-slate-800 text-slate-900 dark:text-white transition-colors">
|
||||
<a href="{% url 'invoices:items_overview' %}" class="border border-slate-100 dark:border-slate-700 hover:border-[var(--company-color)]/40 hover:shadow-sm transition-all duration-200 p-6 rounded-xl shadow bg-white dark:bg-slate-800 text-slate-900 dark:text-white transition-colors">
|
||||
<div class="text-2xl mb-2">📦</div>
|
||||
<h2 class="text-xl font-bold">Posten</h2>
|
||||
<h2 class="text-lg font-bold">Posten</h2>
|
||||
<p class="text-slate-400 text-sm mt-1">Leistungen und Artikel verwalten</p>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- OPTIONAL INFO BOX -->
|
||||
<div class="p-6 rounded-xl shadow bg-white dark:bg-slate-800 text-slate-900 dark:text-white transition-colors mt-8">
|
||||
|
||||
<h2 class="text-xl font-bold">
|
||||
Zusammenfassung
|
||||
</h2>
|
||||
|
||||
<p class="text-slate-400 text-sm mt-1">
|
||||
folgt
|
||||
</p>
|
||||
|
||||
<a href="{% url 'invoices:invoices_payments_overview' %}" class="border border-slate-100 dark:border-slate-700 hover:border-[var(--company-color)]/40 hover:shadow-sm transition-all duration-200 p-6 rounded-xl shadow bg-white dark:bg-slate-800 text-slate-900 dark:text-white transition-colors">
|
||||
<div class="text-2xl mb-2">🏦</div>
|
||||
<h2 class="text-lg font-bold">Zahlungen</h2>
|
||||
<p class="text-slate-400 text-sm mt-1">Zahlungsvorgänge verfolgen</p>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,20 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}Rechnungswesen - Zahlungen{% endblock %}
|
||||
|
||||
{% block header_title %}Zahlungen{% endblock %}
|
||||
{% block header_description %}Zahlungsvorgänge verfolgen{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% load django_tables2 %}
|
||||
<div class="p-6 rounded-xl shadow bg-white dark:bg-slate-800 text-slate-900 dark:text-white transition-colors">
|
||||
<div class="mb-6">
|
||||
<h2 class="text-lg font-bold">Zahlungen</h2>
|
||||
<p class="text-slate-400 text-sm mt-1">Alle Zahlungsvorgänge</p>
|
||||
</div>
|
||||
<div class="overflow-x-auto rounded-xl">
|
||||
{% render_table table %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
@@ -15,7 +15,7 @@ Details
|
||||
<div class="p-6 rounded-xl shadow bg-white dark:bg-slate-800 text-slate-900 dark:text-white transition-colors">
|
||||
<div class="flex flex-col sm:flex-row sm:justify-between sm:items-center gap-4">
|
||||
<div>
|
||||
<h2 class="text-xl font-bold">Aktionen</h2>
|
||||
<h2 class="text-lg font-bold">Aktionen</h2>
|
||||
<p class="text-slate-400 text-sm mt-1">
|
||||
Mahnung verwalten
|
||||
</p>
|
||||
@@ -28,8 +28,6 @@ Details
|
||||
{% if reminder.status == "sent" %}
|
||||
<a href="{% url 'invoices:reminders_download' reminder.id %}" class="btn btn-action">Download</a>
|
||||
<a href="{% url 'invoices:reminders_cancel' reminder.id %}" class="btn btn-delete">Stornieren</a>
|
||||
<a href="{% url 'invoices:reminders_paid' reminder.id %}" class="btn btn-action">Zahlung verbuchen</a>
|
||||
<a href="{% url 'invoices:reminders_expire' reminder.id %}" class="btn btn-action">Überfällig</a>
|
||||
{% endif %}
|
||||
{% if reminder.status == "paid" or reminder.status == "canceled" or reminder.status == "expired" %}
|
||||
<a href="{% url 'invoices:reminders_download' reminder.id %}" class="btn btn-action">Download</a>
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<div class="p-6 rounded-xl shadow bg-white dark:bg-slate-800 text-slate-900 dark:text-white transition-colors">
|
||||
<div class="flex flex-col sm:flex-row sm:justify-between sm:items-center gap-4">
|
||||
<div>
|
||||
<h2 class="text-xl font-bold">Aktionen</h2>
|
||||
<h2 class="text-lg font-bold">Aktionen</h2>
|
||||
<p class="text-slate-400 text-sm mt-1">Neue Mahnung erstellen</p>
|
||||
</div>
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
</div>
|
||||
<div class="p-6 rounded-xl shadow bg-white dark:bg-slate-800 text-slate-900 dark:text-white transition-colors">
|
||||
<div class="mb-6">
|
||||
<h2 class="text-xl font-bold">Mahnungen</h2>
|
||||
<h2 class="text-lg font-bold">Mahnungen</h2>
|
||||
<p class="text-slate-400 text-sm mt-1">Alle Mahnungen mit aktuellem Status</p>
|
||||
</div>
|
||||
<div class="overflow-x-auto rounded-xl">
|
||||
|
||||
@@ -149,16 +149,15 @@ table {
|
||||
|
||||
|
||||
.right {
|
||||
text-align:right;
|
||||
text-align: right !important;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.total-box {
|
||||
|
||||
margin-top:30px;
|
||||
margin-left:auto;
|
||||
width:250px;
|
||||
width:300px;
|
||||
|
||||
}
|
||||
|
||||
@@ -178,7 +177,7 @@ table {
|
||||
border-top:1px solid #cbd5e1;
|
||||
margin-top:10px;
|
||||
padding-top:10px;
|
||||
font-size:16px;
|
||||
font-size:14px;
|
||||
font-weight:bold;
|
||||
|
||||
}
|
||||
@@ -440,7 +439,7 @@ Betrag
|
||||
Rechnung {{ reminder.invoice.invoice_number }}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<td class="right">
|
||||
{{ invoice_amount|floatformat:2 }} €
|
||||
</td>
|
||||
|
||||
@@ -459,7 +458,7 @@ Rechnung {{ reminder.invoice.invoice_number }}
|
||||
({{ old_reminder.issue_date|date:"d.m.Y" }})
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<td class="right">
|
||||
{{ old_reminder.fee|floatformat:2 }} €
|
||||
</td>
|
||||
|
||||
@@ -474,7 +473,7 @@ Rechnung {{ reminder.invoice.invoice_number }}
|
||||
Aktuelle Mahngebühr
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<td class="right">
|
||||
{{ reminder.fee|floatformat:2 }} €
|
||||
</td>
|
||||
|
||||
@@ -484,6 +483,32 @@ Rechnung {{ reminder.invoice.invoice_number }}
|
||||
|
||||
|
||||
|
||||
{% if payments %}
|
||||
|
||||
{% for payment in payments %}
|
||||
|
||||
<tr>
|
||||
|
||||
<td>
|
||||
Zahlung vom {{ payment.date|date:"d.m.Y" }}
|
||||
{% if payment.payment_method %}
|
||||
({{ payment.payment_method }})
|
||||
{% endif %}
|
||||
</td>
|
||||
|
||||
<td class="right">
|
||||
- {{ payment.amount|floatformat:2 }} €
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
|
||||
{% endfor %}
|
||||
|
||||
{% endif %}
|
||||
|
||||
|
||||
|
||||
|
||||
</tbody>
|
||||
|
||||
|
||||
@@ -494,12 +519,20 @@ Rechnung {{ reminder.invoice.invoice_number }}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- GESAMTFORDERUNG -->
|
||||
|
||||
|
||||
<div class="total-box">
|
||||
|
||||
|
||||
<div class="total-row">
|
||||
|
||||
<span>
|
||||
@@ -513,7 +546,6 @@ Offener Rechnungsbetrag
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
{% if previous_reminders or reminder.fee > 0 %}
|
||||
|
||||
<div class="total-row">
|
||||
@@ -531,23 +563,36 @@ Mahngebühren
|
||||
{% endif %}
|
||||
|
||||
|
||||
<div class="total-row">
|
||||
|
||||
<span>
|
||||
Bereits bezahlt
|
||||
</span>
|
||||
|
||||
<span>
|
||||
- {{ total_paid|floatformat:2 }} €
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="total-row total-final">
|
||||
|
||||
<span>
|
||||
Gesamtforderung
|
||||
Gesamt
|
||||
</span>
|
||||
|
||||
|
||||
<span>
|
||||
{{ total_due|floatformat:2 }} €
|
||||
{{ open_amount|floatformat:2 }} €
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
<form
|
||||
id="save-form-{{ record.id }}"
|
||||
method="post"
|
||||
action="{% url 'invoices:items_edit' record.id %}">
|
||||
|
||||
{% csrf_token %}
|
||||
|
||||
</form>
|
||||
|
||||
|
||||
<div class="flex gap-2">
|
||||
|
||||
<button
|
||||
type="submit"
|
||||
form="save-form-{{ record.id }}"
|
||||
class="btn btn-save">
|
||||
Speichern
|
||||
</button>
|
||||
|
||||
|
||||
<form
|
||||
method="post"
|
||||
action="{% url 'invoices:items_delete' record.id %}">
|
||||
|
||||
{% csrf_token %}
|
||||
|
||||
<button
|
||||
type="submit"
|
||||
class="btn btn-delete">
|
||||
Löschen
|
||||
</button>
|
||||
|
||||
</form>
|
||||
|
||||
</div>
|
||||
@@ -1,6 +0,0 @@
|
||||
<input
|
||||
type="text"
|
||||
name="description"
|
||||
form="save-form-{{ record.id }}"
|
||||
value="{{ record.description }}"
|
||||
class="border rounded px-2 py-1 w-full">
|
||||
@@ -0,0 +1,176 @@
|
||||
<form method="post" action="{% url 'invoices:items_edit' item.id %}">
|
||||
{% csrf_token %}
|
||||
|
||||
<div class="grid md:grid-cols-2 xl:grid-cols-3 gap-4">
|
||||
|
||||
<div>
|
||||
<label class="block text-sm mb-1">
|
||||
Typ
|
||||
</label>
|
||||
|
||||
<select
|
||||
name="item_type"
|
||||
class="border rounded px-3 py-2 w-full">
|
||||
|
||||
{% for value,label in item.ItemType.choices %}
|
||||
<option
|
||||
value="{{ value }}"
|
||||
{% if item.item_type == value %}selected{% endif %}>
|
||||
{{ label }}
|
||||
</option>
|
||||
{% endfor %}
|
||||
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label class="block text-sm mb-1">
|
||||
Beschreibung
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="text"
|
||||
name="description"
|
||||
value="{{ item.description }}"
|
||||
class="border rounded px-3 py-2 w-full">
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-sm mb-1">
|
||||
Kategorie
|
||||
</label>
|
||||
|
||||
<select
|
||||
name="category"
|
||||
class="border rounded px-3 py-2 w-full">
|
||||
|
||||
<option value="">
|
||||
---
|
||||
</option>
|
||||
|
||||
{% for c in table.categories %}
|
||||
<option
|
||||
value="{{ c.id }}"
|
||||
{% if item.category_id == c.id %}selected{% endif %}>
|
||||
{{ c.name }}
|
||||
</option>
|
||||
{% endfor %}
|
||||
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label class="block text-sm mb-1">
|
||||
Beschreibung
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="text"
|
||||
name="description"
|
||||
value="{{ item.description }}"
|
||||
class="border rounded px-3 py-2 w-full">
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-sm mb-1">
|
||||
Einheit
|
||||
</label>
|
||||
|
||||
<select
|
||||
name="unit"
|
||||
class="border rounded px-3 py-2 w-full">
|
||||
|
||||
<option value="">
|
||||
---
|
||||
</option>
|
||||
|
||||
{% for u in table.units %}
|
||||
<option
|
||||
value="{{ u.id }}"
|
||||
{% if item.unit_id == u.id %}selected{% endif %}>
|
||||
{{ u.name }}
|
||||
</option>
|
||||
{% endfor %}
|
||||
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label class="block text-sm mb-1">
|
||||
Einzelpreis Netto
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="number"
|
||||
step="0.01"
|
||||
name="price_net"
|
||||
value="{{ item.price_net }}"
|
||||
class="border rounded px-3 py-2 w-full">
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label class="block text-sm mb-1">
|
||||
MwSt. (%)
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="number"
|
||||
step="0.01"
|
||||
name="tax_rate"
|
||||
value="{{ item.tax_rate }}"
|
||||
class="border rounded px-3 py-2 w-full">
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label class="block text-sm mb-1">
|
||||
Einkaufspreis
|
||||
</label>
|
||||
|
||||
<input
|
||||
type="number"
|
||||
step="0.01"
|
||||
name="price_buy"
|
||||
value="{{ item.price_buy }}"
|
||||
class="border rounded px-3 py-2 w-full">
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-sm mb-1">
|
||||
Lieferant
|
||||
</label>
|
||||
|
||||
<select
|
||||
name="supplier"
|
||||
class="border rounded px-3 py-2 w-full">
|
||||
|
||||
<option value="">
|
||||
---
|
||||
</option>
|
||||
|
||||
{% for s in table.suppliers %}
|
||||
<option
|
||||
value="{{ s.id }}"
|
||||
{% if item.supplier_id == s.id %}selected{% endif %}>
|
||||
{{ s.name }}
|
||||
</option>
|
||||
{% endfor %}
|
||||
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mt-5 flex gap-2">
|
||||
|
||||
<button
|
||||
type="submit"
|
||||
class="btn btn-save">
|
||||
Speichern
|
||||
</button>
|
||||
|
||||
<button
|
||||
type="submit"
|
||||
formaction="{% url 'invoices:items_delete' item.id %}"
|
||||
class="btn btn-delete">
|
||||
Löschen
|
||||
</button>
|
||||
|
||||
</div>
|
||||
|
||||
</form>
|
||||
@@ -1,16 +0,0 @@
|
||||
<select
|
||||
name="item_type"
|
||||
form="save-form-{{ record.id }}"
|
||||
class="border rounded px-2 py-1 w-full">
|
||||
|
||||
{% for v,l in table.types %}
|
||||
|
||||
<option
|
||||
value="{{ v }}"
|
||||
{% if record.item_type == v %}selected{% endif %}>
|
||||
{{ l }}
|
||||
</option>
|
||||
|
||||
{% endfor %}
|
||||
|
||||
</select>
|
||||
@@ -1,7 +0,0 @@
|
||||
<input
|
||||
type="number"
|
||||
step="0.01"
|
||||
name="price_net"
|
||||
form="save-form-{{ record.id }}"
|
||||
value="{{ record.price_net }}"
|
||||
class="border rounded px-2 py-1 w-full">
|
||||
@@ -1,7 +0,0 @@
|
||||
<input
|
||||
type="number"
|
||||
step="0.01"
|
||||
name="tax_rate"
|
||||
form="save-form-{{ record.id }}"
|
||||
value="{{ record.tax_rate }}"
|
||||
class="border rounded px-2 py-1 w-full">
|
||||
@@ -1,20 +0,0 @@
|
||||
<select
|
||||
name="unit"
|
||||
form="save-form-{{ record.id }}"
|
||||
class="border rounded px-2 py-1 w-full">
|
||||
|
||||
|
||||
{% for unit in table.units %}
|
||||
|
||||
<option
|
||||
value="{{ unit.id }}"
|
||||
{% if record.unit_id == unit.id %}selected{% endif %}>
|
||||
|
||||
{{ unit.name }}
|
||||
|
||||
</option>
|
||||
|
||||
{% endfor %}
|
||||
|
||||
|
||||
</select>
|
||||
Reference in New Issue
Block a user