fa4e3c2ffc
Extract the three independent responsibilities of the 1120-line ManagementCockpitService into dedicated classes: ExcelCockpitAnalyzer (file-based cockpit), CentralCockpitAnalyzer (central database cockpit) and FinanceSummaryAnalyzer (finance summary), with shared currency conversion and value-field logic in CockpitValueAggregator. ManagementCockpitService becomes a thin facade that preserves the IManagementCockpitService contract and both constructors, so no callers, DI registrations or tests need to change. Pure code move, no behaviour change. https://claude.ai/code/session_01Q8k7LD7JG8oMReySL3Ckhc
Sage SQL CSV export =================== Server instance: localhost Database filter: (all accessible user databases) From date: 2025-01-01 To date: 2026-01-01 Files: - candidate_objects.csv: SQL tables/views that look relevant for sales/invoices. - export_summary.csv: export status and row counts. - *.csv: exported samples or selected full exports. Recommended workflow: 1. Run discovery first: .\Export-SageSqlCsv.ps1 -DiscoverOnly 2. Send candidate_objects.csv to Trafag/IT for selection. 3. Export selected objects: .\Export-SageSqlCsv.ps1 -Database "DATABASE_NAME" -ObjectName "schema.table_or_view" 4. If the selected object is very large, add: -FromDate "2025-01-01" -ToDate "2026-01-01" -MaxRowsPerObject 100000 The script only reads data. It does not change SQL Server or Sage.