Kundengruppe je Organisation beim Anlegen und nachträglich setzen
Neue Organisationen bekamen keine Kundengruppe (nur die Rückfüllung in Migration 0050 hatte sie gesetzt) und sahen dadurch keine Vorlagen mit Sichtbarkeit kundengruppe. Liste/Detail liefern die Kundengruppe mit, POST /organizations nimmt sie an, PUT .../kundengruppe ändert sie. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
0c268e9088
commit
48ebac7576
1 file changed
+62
-10
@@ -206,6 +206,7 @@ class AuftragSelectRequest(BaseModel):
|
||||
|
||||
class CreateOrganizationRequest(BaseModel):
|
||||
name: str
|
||||
kundengruppe_id: str | None = None
|
||||
|
||||
|
||||
class UpdateOrganizationRequest(BaseModel):
|
||||
@@ -3182,9 +3183,11 @@ def fetch_organizations():
|
||||
with conn.cursor() as cur:
|
||||
cur.execute(
|
||||
"""
|
||||
SELECT id, name, created_at, kontakt_name, adresse, telefon, kontakt_email, notizen,
|
||||
ausrollstufe
|
||||
FROM organizations ORDER BY name
|
||||
SELECT o.id, o.name, o.created_at, o.kontakt_name, o.adresse, o.telefon,
|
||||
o.kontakt_email, o.notizen, o.ausrollstufe, o.kundengruppe_id, k.name
|
||||
FROM organizations o
|
||||
LEFT JOIN kundengruppen k ON k.id = o.kundengruppe_id
|
||||
ORDER BY o.name
|
||||
"""
|
||||
)
|
||||
return [
|
||||
@@ -3198,10 +3201,13 @@ def fetch_organizations():
|
||||
"kontakt_email": kontakt_email,
|
||||
"notizen": notizen,
|
||||
"ausrollstufe": ausrollstufe,
|
||||
"kundengruppe_id": str(kundengruppe_id) if kundengruppe_id else None,
|
||||
"kundengruppe_name": kundengruppe_name,
|
||||
}
|
||||
for (
|
||||
org_id, name, created_at,
|
||||
kontakt_name, adresse, telefon, kontakt_email, notizen, ausrollstufe,
|
||||
kundengruppe_id, kundengruppe_name,
|
||||
) in cur.fetchall()
|
||||
]
|
||||
|
||||
@@ -3234,14 +3240,33 @@ def set_ausrollstufe(organization_id: str, ausrollstufe: str) -> bool:
|
||||
return cur.fetchone() is not None
|
||||
|
||||
|
||||
def set_kundengruppe(organization_id: str, kundengruppe_id: str | None) -> bool:
|
||||
"""Kundengruppe steuert, welche Vorlagen-Workspaces die Organisation
|
||||
sieht (Sichtbarkeit "kundengruppe"). NULL = nur globale Vorlagen."""
|
||||
|
||||
with get_database_connection() as conn:
|
||||
with conn.cursor() as cur:
|
||||
cur.execute(
|
||||
"UPDATE organizations SET kundengruppe_id = %s, updated_at = now() WHERE id = %s RETURNING id",
|
||||
(kundengruppe_id, organization_id),
|
||||
)
|
||||
return cur.fetchone() is not None
|
||||
|
||||
|
||||
def kundengruppe_gueltig(kundengruppe_id: str | None) -> bool:
|
||||
return kundengruppe_id is None or any(k["id"] == kundengruppe_id for k in fetch_kundengruppen())
|
||||
|
||||
|
||||
def fetch_organization(organization_id: str):
|
||||
with get_database_connection() as conn:
|
||||
with conn.cursor() as cur:
|
||||
cur.execute(
|
||||
"""
|
||||
SELECT id, name, created_at, kontakt_name, adresse, telefon, kontakt_email, notizen,
|
||||
ausrollstufe
|
||||
FROM organizations WHERE id = %s
|
||||
SELECT o.id, o.name, o.created_at, o.kontakt_name, o.adresse, o.telefon,
|
||||
o.kontakt_email, o.notizen, o.ausrollstufe, o.kundengruppe_id, k.name
|
||||
FROM organizations o
|
||||
LEFT JOIN kundengruppen k ON k.id = o.kundengruppe_id
|
||||
WHERE o.id = %s
|
||||
""",
|
||||
(organization_id,),
|
||||
)
|
||||
@@ -3260,16 +3285,18 @@ def fetch_organization(organization_id: str):
|
||||
"kontakt_email": row[6],
|
||||
"notizen": row[7],
|
||||
"ausrollstufe": row[8],
|
||||
"kundengruppe_id": str(row[9]) if row[9] else None,
|
||||
"kundengruppe_name": row[10],
|
||||
}
|
||||
|
||||
def create_organization(name: str):
|
||||
def create_organization(name: str, kundengruppe_id: str | None = None):
|
||||
organization_id = uuid4()
|
||||
|
||||
with get_database_connection() as conn:
|
||||
with conn.cursor() as cur:
|
||||
cur.execute(
|
||||
"INSERT INTO organizations (id, name) VALUES (%s, %s)",
|
||||
(organization_id, name),
|
||||
"INSERT INTO organizations (id, name, kundengruppe_id) VALUES (%s, %s, %s)",
|
||||
(organization_id, name, kundengruppe_id),
|
||||
)
|
||||
|
||||
# Jede Organisation bekommt von Geburt an eine Standard-OE (siehe
|
||||
@@ -5965,7 +5992,10 @@ def create_organization_endpoint(
|
||||
"message": "Fehlendes oder ungültiges Service-Token.",
|
||||
}
|
||||
|
||||
return {"success": True, "organization": create_organization(payload.name)}
|
||||
if not kundengruppe_gueltig(payload.kundengruppe_id):
|
||||
return {"success": False, "error": "invalid_request", "message": "Unbekannte Kundengruppe."}
|
||||
|
||||
return {"success": True, "organization": create_organization(payload.name, payload.kundengruppe_id)}
|
||||
|
||||
|
||||
@app.get("/api/v1/organizations/{organization_id}")
|
||||
@@ -6003,6 +6033,28 @@ def put_ausrollstufe(
|
||||
return {"success": True}
|
||||
|
||||
|
||||
class SetKundengruppeRequest(BaseModel):
|
||||
kundengruppe_id: str | None = None
|
||||
|
||||
|
||||
@app.put("/api/v1/organizations/{organization_id}/kundengruppe")
|
||||
def put_kundengruppe(
|
||||
organization_id: str,
|
||||
payload: SetKundengruppeRequest,
|
||||
authorization: str | None = Header(default=None),
|
||||
):
|
||||
if not require_service_token(authorization):
|
||||
return {"success": False, "error": "unauthorized", "message": "Fehlendes oder ungültiges Service-Token."}
|
||||
|
||||
if not kundengruppe_gueltig(payload.kundengruppe_id):
|
||||
return {"success": False, "error": "invalid_request", "message": "Unbekannte Kundengruppe."}
|
||||
|
||||
if not set_kundengruppe(organization_id, payload.kundengruppe_id):
|
||||
return {"success": False, "error": "organization_not_found", "message": "Die Organisation wurde nicht gefunden."}
|
||||
|
||||
return {"success": True}
|
||||
|
||||
|
||||
@app.get("/api/v1/organizations/{organization_id}/dashboard")
|
||||
def get_customer_dashboard_endpoint(organization_id: str, authorization: str | None = Header(default=None)):
|
||||
if not require_service_token(authorization):
|
||||
|
||||
Reference in new issue
Block a user