fix(pitch-deck): remove Berechnen button + cell editing from Finanzplan
Some checks failed
Build pitch-deck / build-push-deploy (push) Successful in 1m10s
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-go-consent (push) Successful in 29s
CI / test-python-voice (push) Successful in 30s
CI / test-bqas (push) Has been cancelled
Some checks failed
Build pitch-deck / build-push-deploy (push) Successful in 1m10s
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-go-consent (push) Successful in 29s
CI / test-python-voice (push) Successful in 30s
CI / test-bqas (push) Has been cancelled
Finanzplan is now read-only for investors: - Removed "Berechnen" / "Compute" button - Removed cell double-click editing - Removed blue edit indicator dots - All sums computed live in frontend (no manual recompute needed) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -99,7 +99,6 @@ export default function FinanzplanSlide({ lang, investorId, preferredScenarioId,
|
|||||||
const [activeSheet, setActiveSheet] = useState<string>('guv')
|
const [activeSheet, setActiveSheet] = useState<string>('guv')
|
||||||
const [rows, setRows] = useState<SheetRow[]>([])
|
const [rows, setRows] = useState<SheetRow[]>([])
|
||||||
const [loading, setLoading] = useState(false)
|
const [loading, setLoading] = useState(false)
|
||||||
const [computing, setComputing] = useState(false)
|
|
||||||
const [yearOffset, setYearOffset] = useState(0) // 0=2026, 1=2027, ...
|
const [yearOffset, setYearOffset] = useState(0) // 0=2026, 1=2027, ...
|
||||||
const de = lang === 'de'
|
const de = lang === 'de'
|
||||||
|
|
||||||
@@ -197,31 +196,6 @@ export default function FinanzplanSlide({ lang, investorId, preferredScenarioId,
|
|||||||
|
|
||||||
useEffect(() => { loadSheet(activeSheet) }, [activeSheet, loadSheet])
|
useEffect(() => { loadSheet(activeSheet) }, [activeSheet, loadSheet])
|
||||||
|
|
||||||
// Compute
|
|
||||||
const handleCompute = async () => {
|
|
||||||
setComputing(true)
|
|
||||||
try {
|
|
||||||
await fetch('/api/finanzplan/compute', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ scenarioId: selectedScenarioId || undefined }) })
|
|
||||||
await loadSheet(activeSheet)
|
|
||||||
} catch { /* ignore */ }
|
|
||||||
setComputing(false)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Cell edit
|
|
||||||
const handleCellEdit = async (rowId: number, monthKey: string, newValue: string) => {
|
|
||||||
const numVal = parseFloat(newValue.replace(/[^\d.-]/g, ''))
|
|
||||||
if (isNaN(numVal)) return
|
|
||||||
|
|
||||||
try {
|
|
||||||
await fetch(`/api/finanzplan/${activeSheet}`, {
|
|
||||||
method: 'PUT',
|
|
||||||
headers: { 'Content-Type': 'application/json' },
|
|
||||||
body: JSON.stringify({ rowId, updates: { [monthKey]: numVal } }),
|
|
||||||
})
|
|
||||||
await loadSheet(activeSheet)
|
|
||||||
} catch { /* ignore */ }
|
|
||||||
}
|
|
||||||
|
|
||||||
const currentYear = 2026 + yearOffset
|
const currentYear = 2026 + yearOffset
|
||||||
const monthStart = yearOffset * 12 + 1
|
const monthStart = yearOffset * 12 + 1
|
||||||
const monthEnd = monthStart + 11
|
const monthEnd = monthStart + 11
|
||||||
@@ -270,15 +244,6 @@ export default function FinanzplanSlide({ lang, investorId, preferredScenarioId,
|
|||||||
{tab.label}
|
{tab.label}
|
||||||
</button>
|
</button>
|
||||||
))}
|
))}
|
||||||
<div className="flex-1" />
|
|
||||||
<button
|
|
||||||
onClick={handleCompute}
|
|
||||||
disabled={computing}
|
|
||||||
className="flex items-center gap-1 px-3 py-1.5 text-[10px] bg-emerald-500/20 text-emerald-300 rounded-lg hover:bg-emerald-500/30 transition-colors disabled:opacity-50"
|
|
||||||
>
|
|
||||||
<RefreshCw className={`w-3 h-3 ${computing ? 'animate-spin' : ''}`} />
|
|
||||||
{de ? 'Berechnen' : 'Compute'}
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* === KPIs Tab === */}
|
{/* === KPIs Tab === */}
|
||||||
@@ -656,7 +621,7 @@ export default function FinanzplanSlide({ lang, investorId, preferredScenarioId,
|
|||||||
const label = getLabel(row)
|
const label = getLabel(row)
|
||||||
const isSumRow = row.is_sum_row || label.includes('GESAMT') || label.includes('Summe') || label.includes('ÜBERSCHUSS') || label.includes('LIQUIDITÄT') || label.includes('UEBERSCHUSS') || label.includes('LIQUIDITAET')
|
const isSumRow = row.is_sum_row || label.includes('GESAMT') || label.includes('Summe') || label.includes('ÜBERSCHUSS') || label.includes('LIQUIDITÄT') || label.includes('UEBERSCHUSS') || label.includes('LIQUIDITAET')
|
||||||
const isTotalRow = label.includes('GESAMT') || label.includes('Bestandskunden gesamt') || label.includes('GESAMTUMSATZ') || label.includes('SUMME')
|
const isTotalRow = label.includes('GESAMT') || label.includes('Bestandskunden gesamt') || label.includes('GESAMTUMSATZ') || label.includes('SUMME')
|
||||||
const isEditable = row.is_editable
|
const isEditable = false // read-only for investors
|
||||||
// Balance rows show Dec value, flow rows show annual sum
|
// Balance rows show Dec value, flow rows show annual sum
|
||||||
const isBalanceRow = label.includes('Kontostand') || label === 'LIQUIDITÄT' || label === 'LIQUIDITAET'
|
const isBalanceRow = label.includes('Kontostand') || label === 'LIQUIDITÄT' || label === 'LIQUIDITAET'
|
||||||
const isUnitPrice = (row as Record<string, unknown>).section === 'unit_cost' || (row as Record<string, unknown>).section === 'einkauf' || label.includes('Einkaufspreis')
|
const isUnitPrice = (row as Record<string, unknown>).section === 'unit_cost' || (row as Record<string, unknown>).section === 'einkauf' || label.includes('Einkaufspreis')
|
||||||
|
|||||||
Reference in New Issue
Block a user