diff --git a/frontend/src/app/distribution/_components/DeliveryEditPage.tsx b/frontend/src/app/distribution/_components/DeliveryEditPage.tsx index 5740a59..69482bd 100644 --- a/frontend/src/app/distribution/_components/DeliveryEditPage.tsx +++ b/frontend/src/app/distribution/_components/DeliveryEditPage.tsx @@ -547,6 +547,47 @@ export default function DeliveryEditPage({ planId }: Props) { removeFieldFromTrip(fieldId, tripTempId); }; + // グループの全圃場を別のtripに移動 + const moveGroupToTrip = (groupFieldIds: number[], fromTripTempId: string, toTripTempId: string) => { + setTrips(prev => { + const fromTrip = prev.find(t => t.tempId === fromTripTempId); + if (!fromTrip) return prev; + const fieldIdSet = new Set(groupFieldIds); + const movingItems = fromTrip.items.filter(item => fieldIdSet.has(item.fieldId)); + if (movingItems.length === 0) return prev; + + return prev.map(t => { + if (t.tempId === fromTripTempId) { + return { ...t, items: t.items.filter(item => !fieldIdSet.has(item.fieldId)) }; + } + if (t.tempId === toTripTempId) { + const newItems = [...t.items]; + for (const moving of movingItems) { + const existing = newItems.find( + item => item.fieldId === moving.fieldId && item.fertilizerId === moving.fertilizerId + ); + if (existing) { + existing.bags += moving.bags; + } else { + newItems.push({ ...moving }); + } + } + return { ...t, items: newItems }; + } + return t; + }); + }); + }; + + // グループの全圃場をtripから未割り当てに戻す + const returnGroupToUnassigned = (groupFieldIds: number[], tripTempId: string) => { + const fieldIdSet = new Set(groupFieldIds); + setTrips(prev => prev.map(t => { + if (t.tempId !== tripTempId) return t; + return { ...t, items: t.items.filter(item => !fieldIdSet.has(item.fieldId)) }; + })); + }; + // tripのグループ小計 const getTripGroupFertTotal = useCallback((trip: LocalTrip, fieldIds: number[], fertilizerId: number): number => { return trip.items @@ -958,11 +999,34 @@ export default function DeliveryEditPage({ planId }: Props) { {/* グループ小計行 */}
★ {groupName} - + {groupFertTotals.map((f, i) => ( {i > 0 ? ' ' : ''}{f.name}: {f.total.toFixed(2)} ))} + {fieldIds.length > 1 && ( + + )}
{/* 圃場行 */} {fieldIds.map(fId => {