Move rice transplant entries on variety change
This commit is contained in:
46
backend/apps/plans/services_rice_transplant.py
Normal file
46
backend/apps/plans/services_rice_transplant.py
Normal 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
|
||||
Reference in New Issue
Block a user