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

@@ -0,0 +1,46 @@
from django.db import transaction
from .models import RiceTransplantEntry, RiceTransplantPlan
@transaction.atomic
def move_rice_transplant_entries_for_variety_change(change):
old_variety_id = change.old_variety_id
new_variety = change.new_variety
if old_variety_id is None or new_variety is None:
return 0
old_plans = (
RiceTransplantPlan.objects
.filter(
year=change.year,
variety_id=old_variety_id,
entries__field_id=change.field_id,
)
.distinct()
.prefetch_related('entries')
)
moved_count = 0
for old_plan in old_plans:
entries_to_move = list(
old_plan.entries.filter(field_id=change.field_id).order_by('id')
)
if not entries_to_move:
continue
new_plan = RiceTransplantPlan.objects.create(
name=f'{change.year}年度 {new_variety.name} 田植え計画(品種変更移動)',
year=change.year,
variety=new_variety,
default_seed_grams_per_box=old_plan.default_seed_grams_per_box,
seedling_boxes_per_tan=old_plan.seedling_boxes_per_tan,
notes=old_plan.notes,
)
RiceTransplantEntry.objects.filter(
id__in=[entry.id for entry in entries_to_move]
).update(plan=new_plan)
moved_count += len(entries_to_move)
return moved_count