This commit is contained in:
2026-09-23 21:46:36 +02:00
parent c187b0c45e
commit 80f6136399
9 changed files with 115 additions and 8 deletions
+85
View File
@@ -6200,6 +6200,91 @@ def software_installations_page(request: Request, db: Session = Depends(get_db))
return response
@app.get("/software/installations/export.xlsx")
def software_installations_export_excel(request: Request, db: Session = Depends(get_db)):
_require_admin(request)
language_code = _request_language(request)
software_entries = _software_installation_rows(db)
headers = [
translate(db, language_code, "common.assets", "Assets"),
translate(db, language_code, "common.name", "Name"),
translate(db, language_code, "about.version", "Version"),
translate(db, language_code, "software.publisher", "Publisher"),
translate(db, language_code, "software.architecture", "Architecture"),
translate(db, language_code, "software.platform", "Platform"),
translate(db, language_code, "software.install_date", "Installation date"),
translate(db, language_code, "software.last_seen", "Last seen"),
]
rows = []
for entry in software_entries:
platform = str(entry.platform or "unknown")
rows.append([
entry.asset_name or "",
entry.name or "",
entry.version or "",
entry.publisher or "",
entry.architecture or "",
translate(db, language_code, f"software.platform.{platform}", platform),
entry.install_date or "",
entry.last_seen_at or "",
])
return _xlsx_response(
"assetmanager-software-installations.xlsx",
headers,
rows,
)
@app.get("/software/summary/export.xlsx")
def software_summary_export_excel(request: Request, db: Session = Depends(get_db)):
_require_admin(request)
language_code = _request_language(request)
allowed_groupings = {"name_platform", "software", "version"}
grouping = str(
request.query_params.get("grouping")
or request.session.get("software_summary_grouping")
or "software"
).strip().lower()
if grouping not in allowed_groupings:
grouping = "software"
software_summary = _software_summary_rows(db, grouping)
headers = [
translate(db, language_code, "common.name", "Name"),
translate(db, language_code, "software.publisher", "Publisher"),
translate(db, language_code, "software.platform", "Platform"),
translate(db, language_code, "software.versions", "Versions"),
translate(db, language_code, "software.version_count", "Number of versions"),
translate(db, language_code, "software.unique_asset_count", "Unique assets"),
translate(db, language_code, "software.inventory_entry_count", "Inventory entries"),
translate(db, language_code, "software.last_seen", "Last seen"),
]
rows = []
for row in software_summary:
platform = str(row.get("platform") or "unknown")
rows.append([
row.get("name") or "",
row.get("publisher") or "",
translate(db, language_code, f"software.platform.{platform}", platform),
row.get("versions") or "",
row.get("version_count") or 0,
row.get("asset_count") or 0,
row.get("entries") or 0,
row.get("last_seen_at") or "",
])
return _xlsx_response(
f"assetmanager-software-summary-{grouping}.xlsx",
headers,
rows,
)
@app.get("/software/summary")
def software_summary_page(request: Request, db: Session = Depends(get_db)):
_require_admin(request)