Move all fertilization entries on variety change

This commit is contained in:
akira
2026-04-05 18:42:09 +09:00
parent ae0249be69
commit c675b7b7ae
4 changed files with 53 additions and 68 deletions

View File

@@ -111,47 +111,47 @@ class PlanVarietyChangeTests(TestCase):
self.assertEqual(change.old_variety_id, self.old_variety.id)
self.assertEqual(change.new_variety_id, self.new_variety.id)
def test_serializer_update_moves_only_unspread_fertilizer_entries(self):
material_unspread = Material.objects.create(
def test_serializer_update_moves_all_fertilizer_entries_for_target_field(self):
material_target = Material.objects.create(
name='高度化成14号',
material_type=Material.MaterialType.FERTILIZER,
)
material_partial = Material.objects.create(
material_spread = Material.objects.create(
name='分げつ一発',
material_type=Material.MaterialType.FERTILIZER,
)
fertilizer_unspread = Fertilizer.objects.create(
fertilizer_target = Fertilizer.objects.create(
name='高度化成14号',
material=material_unspread,
material=material_target,
)
fertilizer_partial = Fertilizer.objects.create(
fertilizer_spread = Fertilizer.objects.create(
name='分げつ一発',
material=material_partial,
material=material_spread,
)
old_fertilization_plan = FertilizationPlan.objects.create(
name='2026年度 にこまる 元肥',
year=2026,
variety=self.old_variety,
calc_settings=[{'fertilizer_id': fertilizer_unspread.id, 'method': 'per_tan', 'param': '1.0'}],
calc_settings=[{'fertilizer_id': fertilizer_target.id, 'method': 'per_tan', 'param': '1.0'}],
)
unspread_entry = FertilizationEntry.objects.create(
target_entry = FertilizationEntry.objects.create(
plan=old_fertilization_plan,
field=self.field,
fertilizer=fertilizer_unspread,
fertilizer=fertilizer_target,
bags='4.00',
actual_bags=None,
)
partial_entry = FertilizationEntry.objects.create(
spread_entry = FertilizationEntry.objects.create(
plan=old_fertilization_plan,
field=self.field,
fertilizer=fertilizer_partial,
fertilizer=fertilizer_spread,
bags='3.00',
actual_bags='1.0000',
)
untouched_entry = FertilizationEntry.objects.create(
plan=old_fertilization_plan,
field=self.other_field,
fertilizer=fertilizer_unspread,
fertilizer=fertilizer_target,
bags='2.00',
actual_bags=None,
)
@@ -166,7 +166,7 @@ class PlanVarietyChangeTests(TestCase):
serializer.save()
change = PlanVarietyChange.objects.get(plan=self.plan)
self.assertEqual(change.fertilizer_moved_entry_count, 1)
self.assertEqual(change.fertilizer_moved_entry_count, 2)
old_fertilization_plan.refresh_from_db()
new_plan = FertilizationPlan.objects.exclude(id=old_fertilization_plan.id).get(
@@ -179,12 +179,12 @@ class PlanVarietyChangeTests(TestCase):
)
self.assertEqual(new_plan.calc_settings, old_fertilization_plan.calc_settings)
unspread_entry.refresh_from_db()
partial_entry.refresh_from_db()
target_entry.refresh_from_db()
spread_entry.refresh_from_db()
untouched_entry.refresh_from_db()
self.assertEqual(unspread_entry.plan_id, new_plan.id)
self.assertEqual(partial_entry.plan_id, old_fertilization_plan.id)
self.assertEqual(target_entry.plan_id, new_plan.id)
self.assertEqual(spread_entry.plan_id, new_plan.id)
self.assertEqual(untouched_entry.plan_id, old_fertilization_plan.id)
old_reserves = list(
@@ -199,16 +199,21 @@ class PlanVarietyChangeTests(TestCase):
transaction_type=StockTransaction.TransactionType.RESERVE,
).order_by('material__name')
)
self.assertEqual(len(old_reserves), 2)
self.assertEqual(len(new_reserves), 1)
self.assertEqual(len(old_reserves), 1)
self.assertEqual(len(new_reserves), 2)
self.assertEqual(
{(reserve.material_id, reserve.quantity) for reserve in old_reserves},
{
(material_partial.id, partial_entry.bags),
(material_unspread.id, untouched_entry.bags),
(material_target.id, untouched_entry.bags),
},
)
self.assertEqual(
{(reserve.material_id, reserve.quantity) for reserve in new_reserves},
{
(material_target.id, target_entry.bags),
(material_spread.id, spread_entry.bags),
},
)
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(