Move rice transplant entries on variety change

This commit is contained in:
akira
2026-04-05 16:49:03 +09:00
parent 98814299cf
commit 1d5bcc9dd6
5 changed files with 111 additions and 8 deletions

View File

@@ -1,12 +1,20 @@
from django.contrib.auth import get_user_model
from django.test import TestCase
from rest_framework.test import APIRequestFactory, force_authenticate
from decimal import Decimal
from apps.fertilizer.models import FertilizationEntry, FertilizationPlan, Fertilizer
from apps.fields.models import Field
from apps.materials.models import Material, StockTransaction
from apps.materials.stock_service import create_reserves_for_plan
from .models import Crop, Plan, PlanVarietyChange, Variety
from .models import (
Crop,
Plan,
PlanVarietyChange,
RiceTransplantEntry,
RiceTransplantPlan,
Variety,
)
from .serializers import PlanSerializer
from .views import PlanViewSet
@@ -64,7 +72,7 @@ class PlanVarietyChangeTests(TestCase):
self.assertEqual(change.year, 2026)
self.assertEqual(change.old_variety_id, self.old_variety.id)
self.assertEqual(change.new_variety_id, self.new_variety.id)
self.assertEqual(change.moved_entry_count, 0)
self.assertEqual(change.fertilizer_moved_entry_count, 0)
def test_serializer_update_does_not_create_history_without_variety_change(self):
serializer = PlanSerializer(
@@ -158,7 +166,7 @@ class PlanVarietyChangeTests(TestCase):
serializer.save()
change = PlanVarietyChange.objects.get(plan=self.plan)
self.assertEqual(change.moved_entry_count, 1)
self.assertEqual(change.fertilizer_moved_entry_count, 1)
old_fertilization_plan.refresh_from_db()
new_plan = FertilizationPlan.objects.exclude(id=old_fertilization_plan.id).get(
@@ -201,3 +209,50 @@ class PlanVarietyChangeTests(TestCase):
},
)
self.assertEqual(new_reserves[0].quantity, unspread_entry.bags)
def test_serializer_update_moves_rice_transplant_entries_for_target_field(self):
old_rice_plan = RiceTransplantPlan.objects.create(
name='2026年度 にこまる 田植え計画',
year=2026,
variety=self.old_variety,
default_seed_grams_per_box='200.00',
seedling_boxes_per_tan='12.00',
notes='旧計画メモ',
)
target_entry = RiceTransplantEntry.objects.create(
plan=old_rice_plan,
field=self.field,
installed_seedling_boxes='14.40',
seed_grams_per_box='200.00',
)
other_entry = RiceTransplantEntry.objects.create(
plan=old_rice_plan,
field=self.other_field,
installed_seedling_boxes='9.60',
seed_grams_per_box='200.00',
)
serializer = PlanSerializer(
instance=self.plan,
data={'variety': self.new_variety.id},
partial=True,
)
self.assertTrue(serializer.is_valid(), serializer.errors)
serializer.save()
target_entry.refresh_from_db()
other_entry.refresh_from_db()
new_rice_plan = RiceTransplantPlan.objects.exclude(id=old_rice_plan.id).get(
year=2026,
variety=self.new_variety,
)
self.assertEqual(
new_rice_plan.name,
f'2026年度 {self.new_variety.name} 田植え計画(品種変更移動)',
)
self.assertEqual(new_rice_plan.default_seed_grams_per_box, Decimal('200.00'))
self.assertEqual(new_rice_plan.seedling_boxes_per_tan, Decimal('12.00'))
self.assertEqual(new_rice_plan.notes, old_rice_plan.notes)
self.assertEqual(target_entry.plan_id, new_rice_plan.id)
self.assertEqual(other_entry.plan_id, old_rice_plan.id)