Move all fertilization entries on variety change
This commit is contained in:
@@ -59,10 +59,10 @@ def handle_plan_variety_change(plan: Plan, *, old_variety, new_variety, reason:
|
||||
|
||||
|
||||
def process_plan_variety_change(change: PlanVarietyChange):
|
||||
from apps.fertilizer.services import move_unspread_entries_for_variety_change
|
||||
from apps.fertilizer.services import move_fertilization_entries_for_variety_change
|
||||
from .services_rice_transplant import move_rice_transplant_entries_for_variety_change
|
||||
|
||||
moved_count = move_unspread_entries_for_variety_change(change)
|
||||
moved_count = move_fertilization_entries_for_variety_change(change)
|
||||
move_rice_transplant_entries_for_variety_change(change)
|
||||
if moved_count != change.fertilizer_moved_entry_count:
|
||||
change.fertilizer_moved_entry_count = moved_count
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user