Files
wdm/build/templates/leitstand_import.html
T
bryan.hoffmann 36180448e1
Build und Push Docker Image / build-and-push (push) Failing after 49s
Initial commit
2026-08-20 12:24:38 +02:00

106 lines
4.3 KiB
HTML

{% extends "base.html" %}
{% block content %}
<div class="back-row top">
<a class="big-btn small neutral" href="{{ url_for('leitstand_home') }}">&#8592; Zur&uuml;ck</a>
</div>
<div class="card compact">
<p class="hint">
Excel- (.xlsx) oder CSV-Datei mit den Spalten <strong>Maschine</strong>, <strong>man. Prio</strong>,
<strong>FA.-Nr.</strong>, <strong>Rest-Menge</strong>, <strong>Ist-Menge</strong>,
<strong>Artikel</strong> und <strong>Soll-pro-Stunde</strong> hochladen (weitere Spalten
wie Bezeichnung/Auftrag/Lieferdatum/Bemerkung werden ignoriert). Bei CSV werden
Trennzeichen (Komma/Semikolon/Tab) und Zahlformat (1.234,56 oder 1234.56)
automatisch erkannt.<br>
Auftr&auml;ge f&uuml;r unbekannte Maschinen werden verworfen, bereits vorhandene
FA.-Nrn. bleiben unangetastet. Ist die Rest-Menge 0, wird der Auftrag direkt als
abgeschlossen angelegt.
</p>
<form method="post" action="{{ url_for('leitstand_import') }}" enctype="multipart/form-data" class="compact-form">
<div class="form-group">
<label for="datei">Excel- oder CSV-Datei</label>
<div class="dropzone" id="dropzone">
<input type="file" id="datei" name="datei" accept=".xlsx,.csv" required>
<div class="dropzone-text" id="dropzone-text">Datei hierher ziehen oder klicken zum Ausw&auml;hlen</div>
</div>
</div>
<div class="action-row compact">
<button type="submit" class="big-btn small primary">&#8593; Importieren</button>
</div>
</form>
<script>
(function () {
var zone = document.getElementById('dropzone');
var input = document.getElementById('datei');
var text = document.getElementById('dropzone-text');
if (!zone || !input || !text) return;
var standardtext = text.textContent;
['dragenter', 'dragover'].forEach(function (evtName) {
zone.addEventListener(evtName, function (e) {
e.preventDefault();
zone.classList.add('dragover');
});
});
zone.addEventListener('dragleave', function (e) {
e.preventDefault();
zone.classList.remove('dragover');
});
zone.addEventListener('drop', function (e) {
e.preventDefault();
zone.classList.remove('dragover');
var dateien = e.dataTransfer && e.dataTransfer.files;
if (dateien && dateien.length) {
// Datei aktiv aus dem Drop-Ereignis übernehmen (statt uns auf das
// native Standardverhalten des überlagerten <input> zu verlassen -
// das greift nicht zuverlässig, weil wir dragover/drop hier ohnehin
// abfangen müssen, um die Hervorhebung zu steuern).
input.files = dateien;
input.dispatchEvent(new Event('change', { bubbles: true }));
}
});
input.addEventListener('change', function () {
text.textContent = (input.files && input.files.length) ? input.files[0].name : standardtext;
});
})();
</script>
</div>
{% if ergebnis %}
<div class="card">
<h3>Ergebnis</h3>
<p>
{{ ergebnis.importiert|length }} importiert,
{{ ergebnis.uebersprungen_vorhanden|length }} bereits vorhanden (&uuml;bersprungen),
{{ ergebnis.verworfen_maschine|length }} wegen unbekannter Maschine verworfen{% if ergebnis.fehlerhafte_zeilen %},
{{ ergebnis.fehlerhafte_zeilen|length }} fehlerhaft{% endif %}.
</p>
{% if ergebnis.importiert %}
<details open>
<summary>Importiert ({{ ergebnis.importiert|length }})</summary>
<ul>{% for z in ergebnis.importiert %}<li>{{ z }}</li>{% endfor %}</ul>
</details>
{% endif %}
{% if ergebnis.uebersprungen_vorhanden %}
<details>
<summary>Bereits vorhanden &ndash; &uuml;bersprungen ({{ ergebnis.uebersprungen_vorhanden|length }})</summary>
<ul>{% for z in ergebnis.uebersprungen_vorhanden %}<li>{{ z }}</li>{% endfor %}</ul>
</details>
{% endif %}
{% if ergebnis.verworfen_maschine %}
<details>
<summary>Maschine unbekannt &ndash; verworfen ({{ ergebnis.verworfen_maschine|length }})</summary>
<ul>{% for z in ergebnis.verworfen_maschine %}<li>{{ z }}</li>{% endfor %}</ul>
</details>
{% endif %}
{% if ergebnis.fehlerhafte_zeilen %}
<details>
<summary>Fehlerhafte Zeilen ({{ ergebnis.fehlerhafte_zeilen|length }})</summary>
<ul>{% for z in ergebnis.fehlerhafte_zeilen %}<li>{{ z }}</li>{% endfor %}</ul>
</details>
{% endif %}
</div>
{% endif %}
{% endblock %}