Move unspread fertilization entries on variety change

This commit is contained in:
akira
2026-04-05 16:43:26 +09:00
parent 21fb2323eb
commit 98814299cf
3 changed files with 167 additions and 2 deletions

View File

@@ -3,9 +3,10 @@ from decimal import Decimal
from django.db import transaction
from django.db.models import Sum
from apps.materials.stock_service import create_reserves_for_plan
from apps.materials.models import StockTransaction
from apps.workrecords.services import sync_spreading_work_record
from .models import FertilizationEntry, SpreadingSessionItem
from .models import FertilizationEntry, FertilizationPlan, SpreadingSessionItem
def sync_actual_bags_for_pairs(year, field_fertilizer_pairs):
@@ -56,3 +57,51 @@ def sync_stock_uses_for_spreading_session(session):
fertilization_plan=None,
spreading_item=item,
)
@transaction.atomic
def move_unspread_entries_for_variety_change(change):
moved_count = 0
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 = (
FertilizationPlan.objects
.filter(
year=change.year,
variety_id=old_variety_id,
entries__field_id=change.field_id,
entries__actual_bags__isnull=True,
)
.distinct()
.prefetch_related('entries')
)
for old_plan in old_plans:
entries_to_move = list(
old_plan.entries.filter(
field_id=change.field_id,
actual_bags__isnull=True,
).order_by('id')
)
if not entries_to_move:
continue
new_plan = FertilizationPlan.objects.create(
name=f'{change.year}年度 {new_variety.name} 施肥計画(品種変更移動)',
year=change.year,
variety=new_variety,
calc_settings=old_plan.calc_settings,
)
FertilizationEntry.objects.filter(
id__in=[entry.id for entry in entries_to_move]
).update(plan=new_plan)
create_reserves_for_plan(old_plan)
create_reserves_for_plan(new_plan)
moved_count += len(entries_to_move)
return moved_count