散布実績レビュー修正: バグ修正・仕様適合・デッドコード削除

- 候補API: 運搬済みフィルタ(date IS NOT NULL)を追加。
  delivery_plan_id指定時は全明細表示、年度全体時のみ日付フィルタ適用
- StockTransaction.spreading_item: CASCADE→SET_NULL に修正(仕様7.3準拠)
- perform_destroy: SET_NULL対応でUSEを明示削除してからsession削除
- ConfirmSpreadingModal.tsx: 未使用のため削除
- FertilizerEditPage.tsx: 旧散布確定関連デッドコード全除去
  (isConfirmed/confirmedAt state, handleUnconfirm, 確定取消ボタン, 確定済みバナー)
- services.py: 未使用のto_decimal_or_zero削除

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Akira
2026-03-17 19:56:13 +09:00
parent 140d5e5a4d
commit 9f96d1f820
7 changed files with 52 additions and 396 deletions

View File

@@ -56,10 +56,3 @@ def sync_stock_uses_for_spreading_session(session):
fertilization_plan=None,
spreading_item=item,
)
def to_decimal_or_zero(value):
try:
return Decimal(str(value))
except Exception:
return Decimal('0')

View File

@@ -381,8 +381,10 @@ class SpreadingSessionViewSet(viewsets.ModelViewSet):
return SpreadingSessionSerializer
def perform_destroy(self, instance):
from apps.materials.models import StockTransaction
year = instance.year
affected_pairs = {(item.field_id, item.fertilizer_id) for item in instance.items.all()}
StockTransaction.objects.filter(spreading_item__session=instance).delete()
instance.delete()
sync_actual_bags_for_pairs(year, affected_pairs)
@@ -485,6 +487,8 @@ class SpreadingCandidatesView(APIView):
delivery_queryset = DeliveryTripItem.objects.filter(trip__delivery_plan__year=year)
if delivery_plan_id:
delivery_queryset = delivery_queryset.filter(trip__delivery_plan_id=delivery_plan_id)
else:
delivery_queryset = delivery_queryset.filter(trip__date__isnull=False)
delivery_rows = delivery_queryset.values(
'field_id',
'field__name',