Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a3593dc5ee | ||
|
|
8253bd0dd6 |
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@govoplan/reporting-webui",
|
"name": "@govoplan/reporting-webui",
|
||||||
"version": "0.1.21",
|
"version": "0.1.22",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "webui/src/index.ts",
|
"main": "webui/src/index.ts",
|
||||||
|
|||||||
+2
-2
@@ -4,14 +4,14 @@ build-backend = "setuptools.build_meta"
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "govoplan-reporting"
|
name = "govoplan-reporting"
|
||||||
version = "0.1.21"
|
version = "0.1.22"
|
||||||
description = "GovOPlaN governed reporting and semantic BI module."
|
description = "GovOPlaN governed reporting and semantic BI module."
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
requires-python = ">=3.12"
|
requires-python = ">=3.12"
|
||||||
license = { text = "AGPL-3.0-or-later" }
|
license = { text = "AGPL-3.0-or-later" }
|
||||||
authors = [{ name = "GovOPlaN" }]
|
authors = [{ name = "GovOPlaN" }]
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"govoplan-core>=0.1.45",
|
"govoplan-core>=0.1.46",
|
||||||
"govoplan-access>=0.1.18",
|
"govoplan-access>=0.1.18",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
"""GovOPlaN Reporting module."""
|
"""GovOPlaN Reporting module."""
|
||||||
|
|
||||||
__version__ = "0.1.21"
|
__version__ = "0.1.22"
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import uuid
|
|||||||
from sqlalchemy import and_, exists, func, or_
|
from sqlalchemy import and_, exists, func, or_
|
||||||
from sqlalchemy.orm import Query, Session
|
from sqlalchemy.orm import Query, Session
|
||||||
|
|
||||||
|
from govoplan_core.core.principal_helpers import principal_actor_ids as _actor_ids
|
||||||
from govoplan_core.core.events import (
|
from govoplan_core.core.events import (
|
||||||
EventActorRef,
|
EventActorRef,
|
||||||
EventObjectRef,
|
EventObjectRef,
|
||||||
@@ -884,22 +885,6 @@ def _actor(principal: object) -> str | None:
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def _actor_ids(principal: object) -> tuple[str, ...]:
|
|
||||||
user = getattr(principal, "user", None)
|
|
||||||
return tuple(
|
|
||||||
dict.fromkeys(
|
|
||||||
str(value)
|
|
||||||
for value in (
|
|
||||||
getattr(principal, "account_id", None),
|
|
||||||
getattr(principal, "identity_id", None),
|
|
||||||
getattr(principal, "membership_id", None),
|
|
||||||
getattr(user, "id", None),
|
|
||||||
)
|
|
||||||
if str(value or "").strip()
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def _principal_tenant(principal: object) -> str:
|
def _principal_tenant(principal: object) -> str:
|
||||||
tenant_id = str(getattr(principal, "tenant_id", "") or "").strip()
|
tenant_id = str(getattr(principal, "tenant_id", "") or "").strip()
|
||||||
if not tenant_id:
|
if not tenant_id:
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ from govoplan_reporting.backend.search_source import create_reporting_search_sou
|
|||||||
|
|
||||||
MODULE_ID = "reporting"
|
MODULE_ID = "reporting"
|
||||||
MODULE_NAME = "Reporting"
|
MODULE_NAME = "Reporting"
|
||||||
MODULE_VERSION = "0.1.21"
|
MODULE_VERSION = "0.1.22"
|
||||||
|
|
||||||
|
|
||||||
def _permission(scope: str, label: str, description: str) -> PermissionDefinition:
|
def _permission(scope: str, label: str, description: str) -> PermissionDefinition:
|
||||||
@@ -597,6 +597,8 @@ manifest = ModuleManifest(
|
|||||||
title="Governed reporting and semantic BI",
|
title="Governed reporting and semantic BI",
|
||||||
summary="Build reproducible reports over provider-owned datasets without bypassing module or row-level access.",
|
summary="Build reproducible reports over provider-owned datasets without bypassing module or row-level access.",
|
||||||
body=(
|
body=(
|
||||||
|
"Documentation books sit immediately beside the visible heading or contextual label for "
|
||||||
|
"Reporting, not among operational action buttons. Field help remains beside its label. "
|
||||||
"Reporting pins dataset, semantic-model, and report revisions. Runs retain "
|
"Reporting pins dataset, semantic-model, and report revisions. Runs retain "
|
||||||
"definition hashes, source fingerprints, policy provenance, quality evidence, "
|
"definition hashes, source fingerprints, policy provenance, quality evidence, "
|
||||||
"authorized result rows, diagnostics, and output hashes. Safe dimensions, "
|
"authorized result rows, diagnostics, and output hashes. Safe dimensions, "
|
||||||
@@ -658,6 +660,9 @@ manifest = ModuleManifest(
|
|||||||
"ohne Modul- oder Zeilenberechtigungen zu umgehen."
|
"ohne Modul- oder Zeilenberechtigungen zu umgehen."
|
||||||
),
|
),
|
||||||
"body": (
|
"body": (
|
||||||
|
"Dokumentationsbücher stehen unmittelbar neben der sichtbaren Überschrift oder "
|
||||||
|
"Kontextbezeichnung für Berichtswesen, nicht zwischen ausführbaren Aktionsschaltflächen. "
|
||||||
|
"Feldhilfe bleibt neben der Feldbezeichnung. "
|
||||||
"Reporting fixiert Revisionen von Datensätzen, semantischen Modellen und "
|
"Reporting fixiert Revisionen von Datensätzen, semantischen Modellen und "
|
||||||
"Berichten. Ausführungen bewahren Definitionsprüfsummen, Quellfingerabdrücke, "
|
"Berichten. Ausführungen bewahren Definitionsprüfsummen, Quellfingerabdrücke, "
|
||||||
"Richtlinienherkunft, Qualitätsnachweise, berechtigte Ergebniszeilen, Diagnosen "
|
"Richtlinienherkunft, Qualitätsnachweise, berechtigte Ergebniszeilen, Diagnosen "
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ class _Provider:
|
|||||||
del session
|
del session
|
||||||
return ReportProviderResult(
|
return ReportProviderResult(
|
||||||
report_id=request.report_id,
|
report_id=request.report_id,
|
||||||
generated_at=datetime(2026, 8, 2, 10, 0, tzinfo=UTC),
|
generated_at=datetime.now(UTC),
|
||||||
payload={"metric": 12},
|
payload={"metric": 12},
|
||||||
source_revisions=(
|
source_revisions=(
|
||||||
{
|
{
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@govoplan/reporting-webui",
|
"name": "@govoplan/reporting-webui",
|
||||||
"version": "0.1.21",
|
"version": "0.1.22",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
|
|||||||
@@ -275,7 +275,9 @@ export default function ReportingPage({ settings, auth }: PlatformRouteContext)
|
|||||||
</FilterBar>
|
</FilterBar>
|
||||||
<span className="reporting-count">{reports.length + providerReports.length} reports</span>
|
<span className="reporting-count">{reports.length + providerReports.length} reports</span>
|
||||||
</>}
|
</>}
|
||||||
helpAction={<DocumentationHelpLink
|
title="Reporting"
|
||||||
|
titleLevel={1}
|
||||||
|
titleHelp={<DocumentationHelpLink
|
||||||
reference={{ topicId: "reporting.governed-bi", documentationType: "user" }}
|
reference={{ topicId: "reporting.governed-bi", documentationType: "user" }}
|
||||||
label="Open reporting documentation"
|
label="Open reporting documentation"
|
||||||
/>}
|
/>}
|
||||||
@@ -323,7 +325,7 @@ export default function ReportingPage({ settings, auth }: PlatformRouteContext)
|
|||||||
<header className="reporting-result-header">
|
<header className="reporting-result-header">
|
||||||
<div className="reporting-title">
|
<div className="reporting-title">
|
||||||
<span>{selected.definition_key} · revision {selected.revision}</span>
|
<span>{selected.definition_key} · revision {selected.revision}</span>
|
||||||
<h1>{selected.name}</h1>
|
<h2>{selected.name}</h2>
|
||||||
</div>
|
</div>
|
||||||
<div className="reporting-run-actions">
|
<div className="reporting-run-actions">
|
||||||
{canSchedule &&
|
{canSchedule &&
|
||||||
|
|||||||
Executable
+12
@@ -0,0 +1,12 @@
|
|||||||
|
import type { PlatformTranslations } from "@govoplan/core-webui";
|
||||||
|
|
||||||
|
/** Module-owned translations for contextual headings. */
|
||||||
|
export const generatedTranslations: PlatformTranslations = {
|
||||||
|
en: {
|
||||||
|
"Reporting": "Reporting",
|
||||||
|
},
|
||||||
|
de: {
|
||||||
|
"Reporting": "Reporting",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
import { createElement, lazy } from "react";
|
import { createElement, lazy } from "react";
|
||||||
import type { DashboardWidgetsUiCapability, PlatformWebModule } from "@govoplan/core-webui";
|
import type { DashboardWidgetsUiCapability, PlatformWebModule } from "@govoplan/core-webui";
|
||||||
import ReportingReportsWidget from "./features/reporting/ReportingReportsWidget";
|
import ReportingReportsWidget from "./features/reporting/ReportingReportsWidget";
|
||||||
|
import { generatedTranslations } from "./i18n/generatedTranslations";
|
||||||
import "./styles/reporting.css";
|
import "./styles/reporting.css";
|
||||||
|
|
||||||
|
|
||||||
@@ -42,6 +43,7 @@ const reportingDashboardWidgets: DashboardWidgetsUiCapability = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const reportingModule: PlatformWebModule = {
|
export const reportingModule: PlatformWebModule = {
|
||||||
|
translations: generatedTranslations,
|
||||||
id: "reporting",
|
id: "reporting",
|
||||||
label: "Reporting",
|
label: "Reporting",
|
||||||
version: "0.1.14",
|
version: "0.1.14",
|
||||||
|
|||||||
@@ -109,7 +109,7 @@
|
|||||||
font-size: 0.75rem;
|
font-size: 0.75rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.reporting-title h1 {
|
.reporting-title h2 {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
margin: 2px 0 0;
|
margin: 2px 0 0;
|
||||||
font-size: 1.05rem;
|
font-size: 1.05rem;
|
||||||
|
|||||||
Reference in New Issue
Block a user