|
|
@@ -1,4 +1,5 @@
|
|
|
import io
|
|
|
+from datetime import datetime
|
|
|
|
|
|
import pandas as pd
|
|
|
from docx import Document
|
|
|
@@ -6,6 +7,7 @@ from docxtpl import DocxTemplate
|
|
|
from fastapi import APIRouter, Depends, Form, HTTPException, Request, Response
|
|
|
from fastapi.responses import HTMLResponse, RedirectResponse, StreamingResponse
|
|
|
from fastapi.templating import Jinja2Templates
|
|
|
+from sqlalchemy import text
|
|
|
from sqlalchemy.orm import Session
|
|
|
|
|
|
from .auth import ldap_authenticate
|
|
|
@@ -41,7 +43,82 @@ def login_post(username: str = Form(...), password: str = Form(...)):
|
|
|
@router.get("/forderungen", response_class=HTMLResponse)
|
|
|
def forderungsliste(request: Request, db: Session = Depends(get_session), limit: int = 100):
|
|
|
q = db.query(Forderung).order_by(Forderung.faelligkeit.asc()).limit(limit).all()
|
|
|
- return templates.TemplateResponse("base/list.html", {"request": request, "forderungen": q})
|
|
|
+ return templates.TemplateResponse(request, "base/list.html", {"request": request, "forderungen": q})
|
|
|
+
|
|
|
+
|
|
|
+def number_format(input: float) -> str:
|
|
|
+ return format(input, "0,.2f").replace(".", ":").replace(",", ".").replace(":", ",")
|
|
|
+
|
|
|
+
|
|
|
+def date_format(input: datetime) -> str:
|
|
|
+ return input.strftime("%d.%m.%Y")
|
|
|
+
|
|
|
+
|
|
|
+templates.env.filters["number_format"] = number_format
|
|
|
+templates.env.filters["date_format"] = date_format
|
|
|
+
|
|
|
+
|
|
|
+@router.get("/forderungen/liste", response_class=HTMLResponse)
|
|
|
+def forderungen_liste(request: Request, db: Session = Depends(get_session), limit: int = 100):
|
|
|
+ context = {
|
|
|
+ "RechnungsdatumVon": {"selectedDate": "'2000-01-01T00:00:00'"},
|
|
|
+ "RechnungsdatumBis": {"selectedDate": "'2027-01-01T00:00:00'"},
|
|
|
+ "Hauptbetrieb": {"selectedOptionValue": "''"},
|
|
|
+ "Standort": {"selectedOptionValue": "''"},
|
|
|
+ "Rechnungsnummer": {"text": "''"},
|
|
|
+ "Kunde": {"selectedOptionValue": "''"},
|
|
|
+ "Verursacher": {"selectedOptionValue": "''"},
|
|
|
+ "Fahrzeug": {"selectedOptionValue": "''"},
|
|
|
+ "Staffel": {"selectedOptionValue": "''"},
|
|
|
+ "Mahnstufe": {"selectedOptionValue": "''"},
|
|
|
+ "WiedervorlageVon": {"selectedDate": "'2000-01-01T00:00:00'"},
|
|
|
+ "WiedervorlageBis": {"selectedDate": "'2027-01-01T00:00:00'"},
|
|
|
+ "BenutzerSelect": {"selectedOptionValue": "winter"},
|
|
|
+ }
|
|
|
+ query = templates.TemplateResponse(request, "forderungen/queries/forderungen_liste.sql", context).body.decode(
|
|
|
+ "utf-8"
|
|
|
+ )
|
|
|
+ # 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})
|
|
|
+
|
|
|
+
|
|
|
+@router.get("/forderungen/details/{client_db}_{document_no}", response_class=HTMLResponse)
|
|
|
+def forderungen_details(
|
|
|
+ request: Request, client_db: str, document_no: str, db: Session = Depends(get_session), limit: int = 100
|
|
|
+):
|
|
|
+ context = {
|
|
|
+ "appsmith": {
|
|
|
+ "URL": {
|
|
|
+ "queryParams": {
|
|
|
+ "Client_DB": "'" + client_db + "'",
|
|
|
+ "Document_No": "'" + document_no + "'",
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ "BelegeFilter": {"selectedOptionValue": "D"},
|
|
|
+ "BenutzerSelect": {"selectedOptionValue": "winter"},
|
|
|
+ }
|
|
|
+
|
|
|
+ template_context = {}
|
|
|
+ for filename in [
|
|
|
+ "auftrag_positionen",
|
|
|
+ "forderung_belege",
|
|
|
+ "forderung_kommentar",
|
|
|
+ "forderung_kopf",
|
|
|
+ "forderung_mahnung",
|
|
|
+ ]:
|
|
|
+ query = templates.TemplateResponse(request, f"forderungen/queries/{filename}.sql", context).body.decode("utf-8")
|
|
|
+ template_context[filename] = db.execute(text(query)).fetchall()
|
|
|
+ template_context["forderung"] = {
|
|
|
+ "id": "12345",
|
|
|
+ "rechnungsnummer": "WERE123445",
|
|
|
+ "kunde": "Burghard",
|
|
|
+ "betrag": "120,00",
|
|
|
+ "faelligkeit": "23.12.1983",
|
|
|
+ }
|
|
|
+ return templates.TemplateResponse(request, "forderungen/details.html", template_context)
|
|
|
|
|
|
|
|
|
@router.get("/chat", response_class=HTMLResponse)
|
|
|
@@ -106,7 +183,7 @@ def detail(request: Request, id: int, db: Session = Depends(get_session)):
|
|
|
f = db.query(Forderung).filter(Forderung.id == id).first()
|
|
|
if not f:
|
|
|
raise HTTPException(status_code=404)
|
|
|
- return templates.TemplateResponse("base/detail.html", {"request": request, "forderung": f})
|
|
|
+ return templates.TemplateResponse(request, "base/detail.html", {"request": request, "forderung": f})
|
|
|
|
|
|
|
|
|
@router.post("/detail/{id}/bemerkung")
|
|
|
@@ -142,7 +219,7 @@ def export_docx(id: int, db: Session = Depends(get_session)):
|
|
|
|
|
|
@router.get("/export/docx")
|
|
|
def export_docx2(id: int, db: Session = Depends(get_session)):
|
|
|
- doc = DocxTemplate("templates\\docx\\Mahnung_AHR.docx")
|
|
|
+ doc = DocxTemplate("templates\\forderungen\\docs\\Mahnung_AHR.docx")
|
|
|
context = {
|
|
|
"Kunde_Name": "Robert Burghard",
|
|
|
"Kunde_Adresse": "Im Waldhof 14a",
|