47 lines
1.4 KiB
Python
47 lines
1.4 KiB
Python
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
|