From cae411eae720263b641b93c586d743cbf5706590 Mon Sep 17 00:00:00 2001 From: jtricerolph Date: Mon, 20 Jul 2026 14:22:00 +0000 Subject: [PATCH] Add Fill F&B from last 7 days button to worksheet toolbar Co-Authored-By: Claude Sonnet 4.6 --- frontend/src/pages/DirectorsForecast.tsx | 29 +++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/frontend/src/pages/DirectorsForecast.tsx b/frontend/src/pages/DirectorsForecast.tsx index d7155e0e..67610afe 100644 --- a/frontend/src/pages/DirectorsForecast.tsx +++ b/frontend/src/pages/DirectorsForecast.tsx @@ -1,5 +1,5 @@ import { useCallback, useEffect, useState } from 'react' -import { Save, RefreshCw, Camera, Trash2, Printer } from 'lucide-react' +import { Save, RefreshCw, Camera, Trash2, Printer, Repeat2 } from 'lucide-react' import { useAuth } from '../components/AuthGate' import { dfGetWorksheet, dfSaveWorksheet, dfGetReport, dfSaveSnapshot, dfDeleteSnapshot } from '../api' import type { WorksheetDay, WorksheetData, ForecastReportData, ForecastSnapshot } from '../types' @@ -81,6 +81,28 @@ function WorksheetTab({ year, month }: { year: number; month: number }) { setDirty(true) } + function fillFnBFromLast7() { + if (!data) return + const last7 = data.days + .filter(d => d.is_past && (d.actual_dry != null || d.actual_wet != null)) + .slice(-7) + if (!last7.length) return + setOverrides(prev => { + const next = { ...prev } + const futureDays = data.days.filter(d => !d.is_past) + futureDays.forEach((day, i) => { + const src = last7[i % last7.length] + next[day.date] = { + ...next[day.date], + dry_override: String(src.actual_dry ?? src.forecast_dry ?? ''), + wet_override: String(src.actual_wet ?? src.forecast_wet ?? ''), + } + }) + return next + }) + setDirty(true) + } + async function handleSave() { if (!canEdit) return setSaving(true) @@ -147,6 +169,11 @@ function WorksheetTab({ year, month }: { year: number; month: number }) { + {canEdit && ( + + )} {canEdit && (