|
|
@@ -1,6 +1,5 @@
|
|
|
import io
|
|
|
import re
|
|
|
-from dataclasses import dataclass
|
|
|
from datetime import datetime, timedelta
|
|
|
from pathlib import Path
|
|
|
from urllib.parse import unquote, urlencode
|
|
|
@@ -18,6 +17,8 @@ from fastapi.responses import (
|
|
|
from sqlalchemy import text
|
|
|
from sqlalchemy.orm import Session
|
|
|
|
|
|
+from app.query_filter import filter_type_option, import_filter_config
|
|
|
+
|
|
|
from .db import get_session
|
|
|
from .jinja_templates import templates
|
|
|
from .ldap import ldap_authenticate
|
|
|
@@ -63,77 +64,7 @@ def single_quote(text: str):
|
|
|
return "'" + unquote(text) + "'"
|
|
|
|
|
|
|
|
|
-@dataclass
|
|
|
-class FilterConfig:
|
|
|
- name: str
|
|
|
- text: str
|
|
|
- filter_type: str
|
|
|
- width: str
|
|
|
- key_column: str
|
|
|
- value_column: str
|
|
|
- visible: bool = True
|
|
|
- default_value: str = ""
|
|
|
- options: list[dict[str, str]] | None = None
|
|
|
- current_value: str | None = None
|
|
|
-
|
|
|
-
|
|
|
-forderung_filter_config = [
|
|
|
- FilterConfig("Hauptbetrieb", "Hauptbetrieb", "select", "2", "Client_DB", "Hauptbetrieb_Name"),
|
|
|
- FilterConfig("Standort", "Standort", "select", "3", "Standort_ID", "Standort_Name"),
|
|
|
- FilterConfig("Bereich", "Bereich", "select", "3", "Bereich", "Bereich"),
|
|
|
- FilterConfig("Verursacher", "Verursacher", "select", "4", "Verursacher", "Verursacher"),
|
|
|
- FilterConfig("Rechnungsnummer", "Rechnungsnummer", "text", "2", "Document_No", "Document_No"),
|
|
|
- FilterConfig(
|
|
|
- "RechnungsdatumVon",
|
|
|
- "Rechnungsdatum von",
|
|
|
- "date",
|
|
|
- "2",
|
|
|
- "Invoice_Date",
|
|
|
- "Invoice_Date",
|
|
|
- default_value="2000-01-01T00:00:00",
|
|
|
- ),
|
|
|
- FilterConfig(
|
|
|
- "RechnungsdatumBis",
|
|
|
- "Rechnungsdatum bis",
|
|
|
- "date",
|
|
|
- "2",
|
|
|
- "Invoice_Date",
|
|
|
- "Invoice_Date",
|
|
|
- default_value="2027-01-01T00:00:00",
|
|
|
- ),
|
|
|
- FilterConfig("Kunde", "Kunde", "text", "4", "Kunde", "Kunde"),
|
|
|
- FilterConfig("Abwarten", "Abwarten", "select", "2", "Abwarten", "Abwarten"),
|
|
|
- FilterConfig(
|
|
|
- "WiedervorlageVon",
|
|
|
- "Wiedervorlage von",
|
|
|
- "date",
|
|
|
- "2",
|
|
|
- "Wiedervorlage",
|
|
|
- "Wiedervorlage",
|
|
|
- default_value="2000-01-01T00:00:00",
|
|
|
- ),
|
|
|
- FilterConfig(
|
|
|
- "WiedervorlageBis",
|
|
|
- "Wiedervorlage bis",
|
|
|
- "date",
|
|
|
- "2",
|
|
|
- "Wiedervorlage",
|
|
|
- "Wiedervorlage",
|
|
|
- default_value="2027-01-01T00:00:00",
|
|
|
- ),
|
|
|
- FilterConfig("Fahrzeug", "Fahrzeug", "select", "2", "VIN", "VIN"),
|
|
|
- FilterConfig("Staffel", "Staffel", "select", "2", "Staffel", "Staffel"),
|
|
|
- FilterConfig("Mahnstufe", "Mahnstufe", "select", "2", "Mahnstufe", "Mahnstufe"),
|
|
|
- FilterConfig("Bearbeitet", "Bearbeitet", "select", "2", "Bearbeitet", "Bearbeitet"),
|
|
|
- FilterConfig("BenutzerSelect", "Benutzer", "hidden", "2", "", "", visible=False, default_value="winter"),
|
|
|
-]
|
|
|
-
|
|
|
-filter_type_option = {
|
|
|
- "text": "text",
|
|
|
- "select": "selectedOptionValue",
|
|
|
- "date": "selectedDate",
|
|
|
- "hidden": "selectedOptionValue",
|
|
|
-}
|
|
|
+forderung_filter_config = import_filter_config()
|
|
|
|
|
|
|
|
|
@router.get("/app/forderungen/liste", response_class=HTMLResponse)
|
|
|
@@ -153,7 +84,13 @@ def forderungen_liste(request: Request, db: Session = Depends(get_session), limi
|
|
|
query = templates.TemplateResponse(request, "forderungen/liste/queries/forderungen_liste.sql", context).body.decode(
|
|
|
"utf-8"
|
|
|
)
|
|
|
- # print(query)
|
|
|
+ query_params = [
|
|
|
+ f.query_param for f in forderung_filter_config if f.query_param is not None and f.filter_type != "hidden"
|
|
|
+ ]
|
|
|
+ if query_params:
|
|
|
+ query = query.replace("1 = 1", " AND ".join(query_params))
|
|
|
+ print(query)
|
|
|
+ print(query_params)
|
|
|
# q = db.execute(text("SELECT * FROM [dbo].[Forderungen]"))
|
|
|
q_res = db.execute(text(query))
|
|
|
col_names = list(q_res.keys())
|
|
|
@@ -161,7 +98,7 @@ def forderungen_liste(request: Request, db: Session = Depends(get_session), limi
|
|
|
|
|
|
filters = {}
|
|
|
for f in forderung_filter_config:
|
|
|
- if f.key_column == "":
|
|
|
+ if f.key_column not in col_names:
|
|
|
continue
|
|
|
filters[f.name] = {row[col_names.index(f.key_column)]: row[col_names.index(f.value_column)] for row in q}
|
|
|
f.options = filters[f.name]
|