From 722ac4efd07a429f273c872416bf8ed13caf41ee Mon Sep 17 00:00:00 2001 From: Akira Date: Mon, 16 Mar 2026 17:04:06 +0900 Subject: [PATCH] =?UTF-8?q?=E9=81=8B=E6=90=AC=E8=A8=88=E7=94=BB:=20?= =?UTF-8?q?=E3=82=B0=E3=83=AB=E3=83=BC=E3=83=97=E5=8D=98=E4=BD=8D=E3=81=AE?= =?UTF-8?q?=E5=9B=9E=E9=96=93=E7=A7=BB=E5=8B=95=E3=83=BB=E6=9C=AA=E5=89=B2?= =?UTF-8?q?=E5=BD=93=E6=88=BB=E3=81=97=E6=A9=9F=E8=83=BD=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.6 --- .../_components/DeliveryEditPage.tsx | 66 ++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-) 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 => {