Selaa lähdekoodia

Filter werden angezeigt, haben aber noch keine Funktion

gc-server3 1 kuukausi sitten
vanhempi
commit
3485341a9d
5 muutettua tiedostoa jossa 397 lisäystä ja 194 poistoa
  1. 1 1
      app/main.py
  2. 29 2
      app/routes.py
  3. 140 124
      templates/base/base.html
  4. 114 61
      templates/forderungen/details.html
  5. 113 6
      templates/forderungen/liste.html

+ 1 - 1
app/main.py

@@ -1,7 +1,7 @@
 from fastapi import FastAPI
 from fastapi.staticfiles import StaticFiles
 
-from .db import Base, engine
+# from .db import Base, engine
 from .routes import router
 
 app = FastAPI(title="GCOutline")

+ 29 - 2
app/routes.py

@@ -80,8 +80,35 @@ def forderungen_liste(request: Request, db: Session = Depends(get_session), limi
     )
     # print(query)
     # q = db.execute(text("SELECT * FROM [dbo].[Forderungen]"))
-    q = db.execute(text(query))
-    return templates.TemplateResponse(request, "forderungen/liste.html", {"request": request, "forderungen_liste": q})
+    q = db.execute(text(query)).fetchall()
+    col_names = list(q[0]._asdict().keys())
+
+    config = {
+        # "RechnungsdatumVon": (),
+        # "RechnungsdatumBis": {"selectedDate": "'2027-01-01T00:00:00'"},
+        "Hauptbetrieb": ("Client_DB", "Hauptbetrieb_Name"),
+        "Standort": ("Standort_ID", "Standort_Name"),
+        # "Rechnungsnummer": {"text": "''"},
+        "Kunde": ("Kunde", "Kunde"),
+        "Verursacher": ("Verursacher", "Verursacher"),
+        "Fahrzeug": ("VIN", "VIN"),
+        "Staffel": ("Staffel", "Staffel"),
+        "Mahnstufe": ("Mahnstufe", "Mahnstufe"),
+        # "WiedervorlageVon": {"selectedDate": "'2000-01-01T00:00:00'"},
+        # "WiedervorlageBis": {"selectedDate": "'2027-01-01T00:00:00'"},
+        # "BenutzerSelect": {"selectedOptionValue": "winter"},
+    }
+
+    filters = {}
+
+    for filter_name, (key, value) in config.items():
+        filters[filter_name] = {row[col_names.index(key)]: row[col_names.index(value)] for row in q}
+
+    # print(filters["Standort"])
+
+    return templates.TemplateResponse(
+        request, "forderungen/liste.html", {"request": request, "forderungen_liste": q, "filter": filters}
+    )
 
 
 @router.get("/forderungen/details/{client_db}_{document_no}", response_class=HTMLResponse)

+ 140 - 124
templates/base/base.html

@@ -1,20 +1,26 @@
 <!DOCTYPE html>
 <html lang="de">
-  <head>
-    <base href="./">
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <meta name="description" content="Global Cube">
-    <meta name="author" content="Global Cube GmbH - Robert Burghard">
-    <meta name="keyword" content="Bootstrap,Admin,Template,Open,Source,jQuery,CSS,HTML,RWD,Dashboard">    
-    <title>Forderungen</title>
-    <script src="https://unpkg.com/htmx.org@1.9.3"></script>
 
-    <link href="https://cdn.jsdelivr.net/npm/@coreui/coreui@5.4.3/dist/css/coreui.min.css" rel="stylesheet" integrity="sha384-oMIIhJL1T5s+PxJr6+Qb0pO1IRFB6OGMM+J57UBT3UQKxSVsb++MkXpu9cLqaJxu" crossorigin="anonymous">
-    <script src="https://cdn.jsdelivr.net/npm/@coreui/coreui@5.4.3/dist/js/coreui.bundle.min.js" integrity="sha384-SWhFOmxmv1pfTLKVBW7q8uossvuaWNeQFdmaWi6xdldiUjyqG9F6V2R2BOC8gkxx" crossorigin="anonymous"></script>
-  </head>
-  <body class="container py-3">
-    <!--<nav class="navbar navbar-expand-lg bg-primary">
+<head>
+  <base href="./">
+  <meta charset="utf-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1">
+  <meta name="description" content="Global Cube">
+  <meta name="author" content="Global Cube GmbH - Robert Burghard">
+  <meta name="keyword" content="Bootstrap,Admin,Template,Open,Source,jQuery,CSS,HTML,RWD,Dashboard">
+  <title>Forderungen</title>
+  <script src="https://cdn.jsdelivr.net/npm/htmx.org@2.0.8/dist/htmx.min.js"></script>
+
+  <link href="https://cdn.jsdelivr.net/npm/@coreui/coreui@5.6.1/dist/css/coreui.min.css" rel="stylesheet">
+  <link href="https://cdn.jsdelivr.net/npm/@coreui/icons@3.0.1/css/all.min.css" rel="stylesheet">
+  
+  <script src="https://cdn.jsdelivr.net/npm/@coreui/coreui@5.6.1/dist/js/coreui.bundle.min.js"></script>
+  <script src="https://cdn.jsdelivr.net/npm/@coreui/icons@3.0.1/dist/cjs/index.min.js"></script>
+
+</head>
+
+<body class="container py-3">
+  <!--<nav class="navbar navbar-expand-lg bg-primary">
     <div class="container-fluid">
         <a class="navbar-brand" href="#">Navbar</a>
         <button class="navbar-toggler" type="button" data-coreui-toggle="collapse" data-coreui-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
@@ -38,115 +44,125 @@
         </div>
     </div>
     </nav>-->
-        <div class="wrapper d-flex flex-column min-vh-100">
-      <header class="header header-sticky p-0 mb-4">
-        <div class="container-fluid border-bottom px-4">
-          <button class="header-toggler" type="button" onclick="coreui.Sidebar.getInstance(document.querySelector('#sidebar')).toggle()" style="margin-inline-start: -14px;">
-            <svg class="icon icon-lg">
-              <use xlink:href="vendors/@coreui/icons/svg/free.svg#cil-menu"></use>
-            </svg>
-          </button>
-          <ul class="header-nav d-none d-lg-flex">
-            <li class="nav-item"><a class="nav-link" href="#">Dashboard</a></li>
-            <li class="nav-item"><a class="nav-link" href="#">Users</a></li>
-            <li class="nav-item"><a class="nav-link" href="#">Settings</a></li>
-          </ul>
-          <ul class="header-nav ms-auto">
-            <li class="nav-item"><a class="nav-link" href="#">
-                <svg class="icon icon-lg">
+  <div class="wrapper d-flex flex-column min-vh-100">
+    <header class="header header-sticky p-0 mb-4">
+      <div class="container-fluid border-bottom px-4">
+        <button class="header-toggler" type="button"
+          onclick="coreui.Sidebar.getInstance(document.querySelector('#sidebar')).toggle()"
+          style="margin-inline-start: -14px;">
+          <svg class="icon icon-lg">
+            <use xlink:href="vendors/@coreui/icons/svg/free.svg#cil-menu"></use>
+          </svg>
+        </button>
+        <ul class="header-nav d-none d-lg-flex">
+          <li class="nav-item"><a class="nav-link" href="#">Dashboard</a></li>
+          <li class="nav-item"><a class="nav-link" href="#">Users</a></li>
+          <li class="nav-item"><a class="nav-link" href="#">Settings</a></li>
+        </ul>
+        <ul class="header-nav ms-auto">
+          <li class="nav-item"><a class="nav-link" href="#">
+              <svg class="icon icon-lg">
+                <use xlink:href="vendors/@coreui/icons/svg/free.svg#cil-bell"></use>
+              </svg></a></li>
+          <li class="nav-item"><a class="nav-link" href="#">
+              <svg class="icon icon-lg">
+                <use xlink:href="vendors/@coreui/icons/svg/free.svg#cil-list-rich"></use>
+              </svg></a></li>
+          <li class="nav-item"><a class="nav-link" href="#">
+              <svg class="icon icon-lg">
+                <use xlink:href="vendors/@coreui/icons/svg/free.svg#cil-envelope-open"></use>
+              </svg></a></li>
+        </ul>
+        <ul class="header-nav">
+          <li class="nav-item py-1">
+            <div class="vr h-100 mx-2 text-body text-opacity-75"></div>
+          </li>
+          <li class="nav-item dropdown">
+            <button class="btn btn-link nav-link py-2 px-2 d-flex align-items-center" type="button"
+              aria-expanded="false" data-coreui-toggle="dropdown">
+              <svg class="icon icon-lg theme-icon-active">
+                <use xlink:href="vendors/@coreui/icons/svg/free.svg#cil-contrast"></use>
+              </svg>
+            </button>
+            <ul class="dropdown-menu dropdown-menu-end" style="--cui-dropdown-min-width: 8rem;">
+              <li>
+                <button class="dropdown-item d-flex align-items-center" type="button" data-coreui-theme-value="light">
+                  <svg class="icon icon-lg me-3">
+                    <use xlink:href="vendors/@coreui/icons/svg/free.svg#cil-sun"></use>
+                  </svg>Light
+                </button>
+              </li>
+              <li>
+                <button class="dropdown-item d-flex align-items-center" type="button" data-coreui-theme-value="dark">
+                  <svg class="icon icon-lg me-3">
+                    <use xlink:href="vendors/@coreui/icons/svg/free.svg#cil-moon"></use>
+                  </svg>Dark
+                </button>
+              </li>
+              <li>
+                <button class="dropdown-item d-flex align-items-center active" type="button"
+                  data-coreui-theme-value="auto">
+                  <svg class="icon icon-lg me-3">
+                    <use xlink:href="vendors/@coreui/icons/svg/free.svg#cil-contrast"></use>
+                  </svg>Auto
+                </button>
+              </li>
+            </ul>
+          </li>
+          <li class="nav-item py-1">
+            <div class="vr h-100 mx-2 text-body text-opacity-75"></div>
+          </li>
+          <li class="nav-item dropdown"><a class="nav-link py-0 pe-0" data-coreui-toggle="dropdown" href="#"
+              role="button" aria-haspopup="true" aria-expanded="false">
+              <div class="avatar avatar-md"><img class="avatar-img" src="assets/img/avatars/8.jpg" alt="user@email.com">
+              </div>
+            </a>
+            <div class="dropdown-menu dropdown-menu-end pt-0">
+              <div class="dropdown-header bg-body-tertiary text-body-secondary fw-semibold rounded-top mb-2">Account
+              </div><a class="dropdown-item" href="#">
+                <svg class="icon me-2">
                   <use xlink:href="vendors/@coreui/icons/svg/free.svg#cil-bell"></use>
-                </svg></a></li>
-            <li class="nav-item"><a class="nav-link" href="#">
-                <svg class="icon icon-lg">
-                  <use xlink:href="vendors/@coreui/icons/svg/free.svg#cil-list-rich"></use>
-                </svg></a></li>
-            <li class="nav-item"><a class="nav-link" href="#">
-                <svg class="icon icon-lg">
+                </svg> Updates<span class="badge badge-sm bg-info ms-2">42</span></a><a class="dropdown-item" href="#">
+                <svg class="icon me-2">
                   <use xlink:href="vendors/@coreui/icons/svg/free.svg#cil-envelope-open"></use>
-                </svg></a></li>
-          </ul>
-          <ul class="header-nav">
-            <li class="nav-item py-1">
-              <div class="vr h-100 mx-2 text-body text-opacity-75"></div>
-            </li>
-            <li class="nav-item dropdown">
-              <button class="btn btn-link nav-link py-2 px-2 d-flex align-items-center" type="button" aria-expanded="false" data-coreui-toggle="dropdown">
-                <svg class="icon icon-lg theme-icon-active">
-                  <use xlink:href="vendors/@coreui/icons/svg/free.svg#cil-contrast"></use>
-                </svg>
-              </button>
-              <ul class="dropdown-menu dropdown-menu-end" style="--cui-dropdown-min-width: 8rem;">
-                <li>
-                  <button class="dropdown-item d-flex align-items-center" type="button" data-coreui-theme-value="light">
-                    <svg class="icon icon-lg me-3">
-                      <use xlink:href="vendors/@coreui/icons/svg/free.svg#cil-sun"></use>
-                    </svg>Light
-                  </button>
-                </li>
-                <li>
-                  <button class="dropdown-item d-flex align-items-center" type="button" data-coreui-theme-value="dark">
-                    <svg class="icon icon-lg me-3">
-                      <use xlink:href="vendors/@coreui/icons/svg/free.svg#cil-moon"></use>
-                    </svg>Dark
-                  </button>
-                </li>
-                <li>
-                  <button class="dropdown-item d-flex align-items-center active" type="button" data-coreui-theme-value="auto">
-                    <svg class="icon icon-lg me-3">
-                      <use xlink:href="vendors/@coreui/icons/svg/free.svg#cil-contrast"></use>
-                    </svg>Auto
-                  </button>
-                </li>
-              </ul>
-            </li>
-            <li class="nav-item py-1">
-              <div class="vr h-100 mx-2 text-body text-opacity-75"></div>
-            </li>
-            <li class="nav-item dropdown"><a class="nav-link py-0 pe-0" data-coreui-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">
-                <div class="avatar avatar-md"><img class="avatar-img" src="assets/img/avatars/8.jpg" alt="user@email.com"></div>
-              </a>
-              <div class="dropdown-menu dropdown-menu-end pt-0">
-                <div class="dropdown-header bg-body-tertiary text-body-secondary fw-semibold rounded-top mb-2">Account</div><a class="dropdown-item" href="#">
-                  <svg class="icon me-2">
-                    <use xlink:href="vendors/@coreui/icons/svg/free.svg#cil-bell"></use>
-                  </svg> Updates<span class="badge badge-sm bg-info ms-2">42</span></a><a class="dropdown-item" href="#">
-                  <svg class="icon me-2">
-                    <use xlink:href="vendors/@coreui/icons/svg/free.svg#cil-envelope-open"></use>
-                  </svg> Messages<span class="badge badge-sm bg-success ms-2">42</span></a><a class="dropdown-item" href="#">
-                  <svg class="icon me-2">
-                    <use xlink:href="vendors/@coreui/icons/svg/free.svg#cil-task"></use>
-                  </svg> Tasks<span class="badge badge-sm bg-danger ms-2">42</span></a><a class="dropdown-item" href="#">
-                  <svg class="icon me-2">
-                    <use xlink:href="vendors/@coreui/icons/svg/free.svg#cil-comment-square"></use>
-                  </svg> Comments<span class="badge badge-sm bg-warning ms-2">42</span></a>
-                <div class="dropdown-header bg-body-tertiary text-body-secondary fw-semibold my-2">
-                  <div class="fw-semibold">Settings</div>
-                </div><a class="dropdown-item" href="#">
-                  <svg class="icon me-2">
-                    <use xlink:href="vendors/@coreui/icons/svg/free.svg#cil-user"></use>
-                  </svg> Profile</a><a class="dropdown-item" href="#">
-                  <svg class="icon me-2">
-                    <use xlink:href="vendors/@coreui/icons/svg/free.svg#cil-settings"></use>
-                  </svg> Settings</a><a class="dropdown-item" href="#">
-                  <svg class="icon me-2">
-                    <use xlink:href="vendors/@coreui/icons/svg/free.svg#cil-credit-card"></use>
-                  </svg> Payments<span class="badge badge-sm bg-secondary ms-2">42</span></a><a class="dropdown-item" href="#">
-                  <svg class="icon me-2">
-                    <use xlink:href="vendors/@coreui/icons/svg/free.svg#cil-file"></use>
-                  </svg> Projects<span class="badge badge-sm bg-primary ms-2">42</span></a>
-                <div class="dropdown-divider"></div><a class="dropdown-item" href="#">
-                  <svg class="icon me-2">
-                    <use xlink:href="vendors/@coreui/icons/svg/free.svg#cil-lock-locked"></use>
-                  </svg> Lock Account</a><a class="dropdown-item" href="#">
-                  <svg class="icon me-2">
-                    <use xlink:href="vendors/@coreui/icons/svg/free.svg#cil-account-logout"></use>
-                  </svg> Logout</a>
-              </div>
-            </li>
-          </ul>
-        </div>
-    <div class="container-fluid px-4">
-      {% block content %}{% endblock %}
-    </div>
-  </body>
-</html>
+                </svg> Messages<span class="badge badge-sm bg-success ms-2">42</span></a><a class="dropdown-item"
+                href="#">
+                <svg class="icon me-2">
+                  <use xlink:href="vendors/@coreui/icons/svg/free.svg#cil-task"></use>
+                </svg> Tasks<span class="badge badge-sm bg-danger ms-2">42</span></a><a class="dropdown-item" href="#">
+                <svg class="icon me-2">
+                  <use xlink:href="vendors/@coreui/icons/svg/free.svg#cil-comment-square"></use>
+                </svg> Comments<span class="badge badge-sm bg-warning ms-2">42</span></a>
+              <div class="dropdown-header bg-body-tertiary text-body-secondary fw-semibold my-2">
+                <div class="fw-semibold">Settings</div>
+              </div><a class="dropdown-item" href="#">
+                <svg class="icon me-2">
+                  <use xlink:href="vendors/@coreui/icons/svg/free.svg#cil-user"></use>
+                </svg> Profile</a><a class="dropdown-item" href="#">
+                <svg class="icon me-2">
+                  <use xlink:href="vendors/@coreui/icons/svg/free.svg#cil-settings"></use>
+                </svg> Settings</a><a class="dropdown-item" href="#">
+                <svg class="icon me-2">
+                  <use xlink:href="vendors/@coreui/icons/svg/free.svg#cil-credit-card"></use>
+                </svg> Payments<span class="badge badge-sm bg-secondary ms-2">42</span></a><a class="dropdown-item"
+                href="#">
+                <svg class="icon me-2">
+                  <use xlink:href="vendors/@coreui/icons/svg/free.svg#cil-file"></use>
+                </svg> Projects<span class="badge badge-sm bg-primary ms-2">42</span></a>
+              <div class="dropdown-divider"></div><a class="dropdown-item" href="#">
+                <svg class="icon me-2">
+                  <use xlink:href="vendors/@coreui/icons/svg/free.svg#cil-lock-locked"></use>
+                </svg> Lock Account</a><a class="dropdown-item" href="#">
+                <svg class="icon me-2">
+                  <use xlink:href="vendors/@coreui/icons/svg/free.svg#cil-account-logout"></use>
+                </svg> Logout</a>
+            </div>
+          </li>
+        </ul>
+      </div>
+      <div class="container-fluid px-6">
+        {% block content %}{% endblock %}
+      </div>
+</body>
+
+</html>

+ 114 - 61
templates/forderungen/details.html

@@ -1,65 +1,10 @@
 {% extends "base/base.html" %}
 {% block content %}
-<div class="card mb-3">
-  <div class="card-body">
-    <h5 class="card-title">Rechnung {{ forderung.rechnungsnummer }}</h5>
-    <p>Kunde: {{ forderung.kunde.name if forderung.kunde else '' }}</p>
-    <p>Betrag: {{ forderung.betrag }}</p>
-    <p>Fälligkeit: {{ forderung.faelligkeit }}</p>
-    <div class="mt-3">
-      <a class="btn btn-outline-secondary me-2" href="/detail/{{ forderung.id }}/export/docx">Export DOCX</a>
-      <a class="btn btn-outline-primary" href="mailto:?subject=Rechnung%20{{ forderung.rechnungsnummer }}&body=Sie%20finden%20Details%20unter%20{{ request.url }}">E-Mail (mailto)</a>
-    </div>
-  </div>
-</div>
 
-<div class="card">
-  <div class="card-body">
-    <h6>Neue Bemerkung</h6>
-    <form method="post" action="/detail/{{ forderung.id }}/bemerkung">
-      <div class="mb-2">
-        <textarea name="bemerkung" class="form-control" rows="3"></textarea>
-      </div>
-      <div class="mb-2">
-        <label>Wiedervorlage</label>
-        <input type="date" name="wiedervorlage_datum" class="form-control" />
-      </div>
-      <button class="btn btn-primary" type="submit">Speichern</button>
-      <a class="btn btn-secondary ms-2" href="/forderungen">Zurück</a>
-    </form>
-  </div>
-</div>
-
-{% if forderung.bemerkungen %}
-<div class="mt-3">
-  <h5>Bemerkungen</h5>
-  <ul class="list-group">
-    {% for b in forderung.bemerkungen %}
-    <li class="list-group-item">{{ b.zeitstempel }} - {{ b.benutzer }}: {{ b.bemerkung }} {% if b.wiedervorlage_datum %} (WV: {{ b.wiedervorlage_datum }}){% endif %}</li>
-    {% endfor %}
-  </ul>
-</div>
-{% endif %}
-
-<h2>Forderung Details</h2>
-
-<table class="table table-striped">
-  <tbody>
-    {% for row in forderung_kopf %}
-    
-    {% for value in row %}
-    <tr>
-      <th>{{ loop.index }}</th>
-      <td>{{ value }}</td>
-    </tr>
-      {% endfor %}
-    {% endfor %}
-  </tbody>
-</table>
 
 <h2>Kommentare</h2>
 
-<table class="table table-striped">
+<table class="table table-striped table-bordered">
   <thead>
     <tr>
         <th>Timestamp</th>
@@ -76,10 +21,75 @@
       <td>{{ row.Timestamp|date_format }}</td>
       <td>{{ row.Name }}</td>
       <td>{{ row.Rolle }}</td>
-      <td>{{ row.Begründung }}</td>
-      <td>{{ row.Wiedervorlage }}</td>
-      <td>{{ row.Kommentar }}</td>
+      <td>{{ row.Begründung or '' }}</td>
+      <td>{{ row.Wiedervorlage|date_format }}</td>
+      <td>{{ row.Kommentar or '' }}</td>
+    </tr>
+    {% endfor %}
+  </tbody>
+</table>
+
+
+<h2>Eingabemaske</h2>
+
+<form class="row g-3">
+  <div class="col-md-6">
+    <label for="inputEmail4" class="form-label">Email</label>
+    <input type="email" class="form-control" id="inputEmail4">
+  </div>
+  <div class="col-md-6">
+    <label for="inputPassword4" class="form-label">Password</label>
+    <input type="password" class="form-control" id="inputPassword4">
+  </div>
+  <div class="col-12">
+    <label for="inputAddress" class="form-label">Address</label>
+    <input type="text" class="form-control" id="inputAddress" placeholder="1234 Main St">
+  </div>
+  <div class="col-12">
+    <label for="inputAddress2" class="form-label">Address 2</label>
+    <input type="text" class="form-control" id="inputAddress2" placeholder="Apartment, studio, or floor">
+  </div>
+  <div class="col-md-6">
+    <label for="inputCity" class="form-label">City</label>
+    <input type="text" class="form-control" id="inputCity">
+  </div>
+  <div class="col-md-4">
+    <label for="inputState" class="form-label">State</label>
+    <select id="inputState" class="form-select">
+      <option selected>Choose...</option>
+      <option>...</option>
+    </select>
+  </div>
+  <div class="col-md-2">
+    <label for="inputZip" class="form-label">Zip</label>
+    <input type="text" class="form-control" id="inputZip">
+  </div>
+  <div class="col-12">
+    <div class="form-check">
+      <input class="form-check-input" type="checkbox" id="gridCheck">
+      <label class="form-check-label" for="gridCheck">
+        Check me out
+      </label>
+    </div>
+  </div>
+  <div class="col-12">
+    <button type="submit" class="btn btn-primary">Sign in</button>
+  </div>
+</form>
+
+
+<h2>Forderung Details</h2>
+
+<table class="table table-striped table-bordered">
+  <tbody>
+    {% for row in forderung_kopf %}
+    
+    {% for key, value in row._asdict().items() %}
+    <tr>
+      <th>{{ key }}</th>
+      <td>{{ value }}</td>
     </tr>
+      {% endfor %}
     {% endfor %}
   </tbody>
 </table>
@@ -87,7 +97,7 @@
 
 <h2>Mahnungen</h2>
 
-<table class="table table-striped">
+<table class="table table-striped table-bordered">
   <thead>
     <tr>
         <th>Kunde_Nr</th>
@@ -119,7 +129,7 @@
 
 <h2>Auftragspositionen</h2>
 
-<table class="table table-striped">
+<table class="table table-striped table-bordered">
   <thead>
     <tr>
         <th>Auftrag_Nr</th>
@@ -140,4 +150,47 @@
 
 
 
+<div class="card mb-3">
+  <div class="card-body">
+    <h5 class="card-title">Rechnung {{ forderung.rechnungsnummer }}</h5>
+    <p>Kunde: {{ forderung.kunde.name if forderung.kunde else '' }}</p>
+    <p>Betrag: {{ forderung.betrag }}</p>
+    <p>Fälligkeit: {{ forderung.faelligkeit }}</p>
+    <div class="mt-3">
+      <a class="btn btn-outline-secondary me-2" href="/detail/{{ forderung.id }}/export/docx">Export DOCX</a>
+      <a class="btn btn-outline-primary" href="mailto:?subject=Rechnung%20{{ forderung.rechnungsnummer }}&body=Sie%20finden%20Details%20unter%20{{ request.url }}">E-Mail (mailto)</a>
+    </div>
+  </div>
+</div>
+
+<div class="card">
+  <div class="card-body">
+    <h6>Neue Bemerkung</h6>
+    <form method="post" action="/detail/{{ forderung.id }}/bemerkung">
+      <div class="mb-2">
+        <textarea name="bemerkung" class="form-control" rows="3"></textarea>
+      </div>
+      <div class="mb-2">
+        <label>Wiedervorlage</label>
+        <input type="date" name="wiedervorlage_datum" class="form-control" />
+      </div>
+      <button class="btn btn-primary" type="submit">Speichern</button>
+      <a class="btn btn-secondary ms-2" href="/forderungen">Zurück</a>
+    </form>
+  </div>
+</div>
+
+{% if forderung.bemerkungen %}
+<div class="mt-3">
+  <h5>Bemerkungen</h5>
+  <ul class="list-group">
+    {% for b in forderung.bemerkungen %}
+    <li class="list-group-item">{{ b.zeitstempel }} - {{ b.benutzer }}: {{ b.bemerkung }} {% if b.wiedervorlage_datum %} (WV: {{ b.wiedervorlage_datum }}){% endif %}</li>
+    {% endfor %}
+  </ul>
+</div>
+{% endif %}
+
+
+
 {% endblock %}

+ 113 - 6
templates/forderungen/liste.html

@@ -4,7 +4,114 @@
   <a class="btn btn-secondary me-2" href="/export/csv">Export CSV</a>
   <a class="btn btn-secondary" href="/export/xlsx">Export XLSX</a>
 </div>
-<table class="table table-striped">
+
+<form class="row g-3">
+  <div class="col-md-2">
+    <label for="Hauptbetrieb" class="form-label">Hauptbetrieb</label>
+    <select id="Hauptbetrieb" class="form-select">
+        <option name="">-</option>
+      {% for key, value in filter.Hauptbetrieb.items() %}
+        <option name="{{ key }}">{{ value }}</option>
+      {% endfor %}
+    </select>
+  </div>
+  <div class="col-md-3">
+    <label for="Standort" class="form-label">Standort</label>
+    <select id="Standort" class="form-select">
+        <option name="">-</option>
+      {% for key, value in filter.Standort.items() %}
+        <option name="{{ key }}">{{ value }}</option>
+      {% endfor %}
+    </select>
+  </div>
+  <div class="col-md-3">
+    <label for="Bereich" class="form-label">Bereich</label>
+    <select id="Bereich" class="form-select">
+        <option name="">-</option>
+    </select>
+  </div>
+  <div class="col-md-4">
+    <label for="Verursacher" class="form-label">Verursacher</label>
+    <select id="Verursacher" class="form-select">
+        <option name="">-</option>
+      {% for key, value in filter.Verursacher.items() %}
+        <option name="{{ key }}">{{ value }}</option>
+      {% endfor %}
+    </select>
+  </div>
+
+
+  <div class="col-md-3">
+    <label for="Rechnungsnummer" class="form-label">Rechnungsnummer</label>
+    <input type="email" class="form-control" id="Rechnungsnummer">
+  </div>
+  <div class="col-md-2">
+    <label for="RechnungsdatumVon" class="form-label">Rechnungsdatum von</label>
+    <input type="date" class="form-control" id="RechnungsdatumVon">
+  </div>
+  <div class="col-md-2">
+    <label for="RechnungsdatumBis" class="form-label">Rechnungsdatum bis</label>
+    <input type="date" class="form-control" id="RechnungsdatumBis">
+  </div>
+  <div class="col-md-5">
+    <label for="Kunde" class="form-label">Kunde</label>
+    <select id="Kunde" class="form-select">
+        <option name="">-</option>
+      {% for key, value in filter.Kunde.items() %}
+        <option name="{{ key }}">{{ value }}</option>
+      {% endfor %}
+    </select>
+  </div>
+
+
+  <div class="col-md-2">
+    <label for="WiedervorlageVon" class="form-label">Wiedervorlage von</label>
+    <input type="date" class="form-control" id="WiedervorlageVon">
+  </div>
+  <div class="col-md-2">
+    <label for="WiedervorlageBis" class="form-label">Wiedervorlage bis</label>
+    <input type="date" class="form-control" id="WiedervorlageBis">
+  </div>
+
+  <div class="col-md-4">
+    <label for="Fahrzeug" class="form-label">Fahrzeug</label>
+    <select id="Fahrzeug" class="form-select">
+        <option name="">-</option>
+      {% for key, value in filter.Fahrzeug.items() %}
+        <option name="{{ key }}">{{ value }}</option>
+      {% endfor %}
+    </select>
+  </div>
+  <div class="col-md-2">
+    <label for="Staffel" class="form-label">Staffel</label>
+    <select id="Staffel" class="form-select">
+        <option name="">-</option>
+      {% for key, value in filter.Staffel.items() %}
+        <option name="{{ key }}">{{ value }}</option>
+      {% endfor %}
+    </select>
+  </div>
+  <div class="col-md-2">
+    <label for="Mahnstufe" class="form-label">Mahnstufe</label>
+    <select id="Mahnstufe" class="form-select">
+        <option name="">-</option>
+      {% for key, value in filter.Mahnstufe.items() %}
+        <option name="{{ key }}">{{ value }}</option>
+      {% endfor %}
+    </select>
+  </div>
+  <div class="col-12">
+    <div class="form-check">
+      <input class="form-check-input" type="checkbox" id="gridCheck">
+      <label class="form-check-label" for="gridCheck">
+        Guthaben anzeigen
+      </label>
+    </div>
+  </div>
+</form>
+
+
+<table class="table table-striped table-bordered">
   <thead>
     <tr>
         <th>.</th>
@@ -24,17 +131,17 @@
   <tbody>
     {% for row in forderungen_liste %}
     <tr>
-      <td><a href="/forderungen/details/{{ row.Client_DB }}_{{ row.Document_No }}" class="btn btn-sm btn-primary">X</a></td>
+      <td><a href="/forderungen/details/{{ row.Client_DB }}_{{ row.Document_No }}" class="btn btn-sm btn-primary"><i class="icon cil-pencil"></i></a></td>
       <td>{{ row.Standort_Name }}</td>
       <td>{{ row.Kunde }}</td>
       <td>{{ row.Bereich }}</td>
       <td>{{ row.Verursacher }}</td>
       <td>{{ row.Document_No }}</td>
       <td>{{ row.Invoice_Date|date_format }}</td>
-      <td>{{ row.Tage }}</td>
-      <td>{{ row.Mahnstufe }}</td>
-      <td>{{ row.offen|number_format }}</td>
-      <td>{{ row.offen_Kunde_gesamt|number_format }}</td>
+      <td class="text-end">{{ row.Tage }}</td>
+      <td class="text-end">{{ row.Mahnstufe }}</td>
+      <td class="text-end">{{ row.offen|number_format }}</td>
+      <td class="text-end">{{ row.offen_Kunde_gesamt|number_format }}</td>
       <td>{{ row.Kommentar_Fibu or '' }}</td>
     </tr>
     {% endfor %}