"""Report Generator plugin — PDF/Excel/CSV reports from Jinja2 templates.""" from __future__ import annotations from app.plugins.base import BasePlugin from app.plugins.manifest import FrontendMenuItem, FrontendPageRoute, PluginManifest, PluginRouteDef class ReportGeneratorPlugin(BasePlugin): """Report Generator plugin for generating reports from Jinja2 templates.""" manifest = PluginManifest( name="report_generator", version="1.0.0", display_name="Report Generator", description="Generates PDF/Excel/CSV reports from Jinja2 templates and data sources", is_core=True, dependencies=["permissions"], routes=[ PluginRouteDef( path="/api/v1/reports", module="app.plugins.builtins.report_generator.routes", router_attr="router", ), ], events=["report.requested", "report.generated"], migrations=["0001_initial.sql"], permissions=["reports:read", "reports:generate", "reports:manage_templates"], menu_items=[ FrontendMenuItem(label_key='nav.reports', label='Berichte', path='/reports', icon='BarChart3', order=70), ], page_routes=[ FrontendPageRoute(path='/reports', component='@/pages/Reports', protected=True), ], author="LeoCRM Team", min_app_version="1.0.0", contract_version="1.0.0") def get_entity_models(self) -> dict[str, type]: from app.plugins.builtins.report_generator.models import ReportInstance, ReportTemplate return {"report_template": ReportTemplate, "report_instance": ReportInstance} async def on_activate( self, db, service_container, event_bus ) -> None: """Activate plugin: register background jobs and event listeners.""" # Register background jobs (isolated report generation in worker) from app.plugins.builtins.report_generator import jobs # noqa: F401 await super().on_activate(db, service_container, event_bus) async def on_deactivate( self, db, service_container, event_bus ) -> None: """Deactivate plugin: unregister contract and event listeners.""" # Contract abmelden from app.plugins.builtins.contracts import get_contract_registry get_contract_registry().unregister(self.manifest.name) await super().on_deactivate(db, service_container, event_bus)