phosphat-report-app/CARRY_FORWARD_IMPLEMENTATION.md

66 lines
2.6 KiB
Markdown

# Carry Forward Feature - Implementation Complete
## Overview
The carry-forward feature automatically populates form fields in the new report form with calculated values from the last report for the same location combination (Area, Dredger Location, and Reclamation Location).
## Implementation Details
### API Endpoint
**File:** `app/routes/api.last-report-data.ts`
Fetches the most recent report for a given location combination and calculates carry-forward values:
- **Dredger Line Length**: Same as last report
- **Shore Connection**: Same as last report
- **Reclamation Height Base**: (Base Height + Extra Height) from last report
- **Pipeline Main**: (Main + Extension 1) from last report
- **Pipeline Reserve**: (Reserve + Extension 2) from last report
### Frontend Integration
**File:** `app/routes/reports_.new.tsx`
#### useEffect Hook
Added a `useEffect` that triggers when:
- User reaches Step 2
- All three location fields are selected (Area, Dredger Location, Reclamation Location)
The hook:
1. Fetches last report data from the API
2. Only updates fields that are still at their default values
3. Preserves any user-modified values
#### User Experience
- Info message displayed in Step 2 explaining that values are auto-filled
- Users can modify any auto-filled values
- Only applies to fields that haven't been manually changed
- Gracefully handles cases where no previous report exists
## Behavior
### When Values Are Carried Forward
- User selects Area, Dredger Location, and Dredger Line Length in Step 1
- User moves to Step 2 and selects Reclamation Location
- System automatically fetches and populates:
- Dredger Line Length (if not already entered)
- Shore Connection (if empty)
- Reclamation Height Base (if still at default 0)
- Pipeline Main (if still at default 0)
- Pipeline Reserve (if still at default 0)
### When Values Are NOT Carried Forward
- No previous report exists for the location combination
- User has already manually entered values
- API request fails (fails silently, doesn't block user)
## Benefits
1. **Efficiency**: Reduces data entry time for recurring locations
2. **Accuracy**: Ensures continuity of measurements across shifts
3. **User-Friendly**: Non-intrusive - users can still override any value
4. **Smart**: Only updates fields that haven't been touched by the user
## Technical Notes
- Uses GET request to `/api/last-report-data` with query parameters
- Calculations performed server-side for data integrity
- Client-side state management prevents overwriting user input
- Error handling ensures feature doesn't break form functionality