Issue #2 に最新の理解を記録し、その内容で仕様書と実装を修正しました。

document/16_マスタードキュメント_田植え計画編.md は、「行ごとに保持するのは圃場の苗箱数」「列側に反当苗箱枚数を持つ」「種もみg/箱 は全体共通値」という前提に更新しています。コード側は backend/apps/plans/models.py と backend/apps/plans/serializers.py で計画ヘッダに seedling_boxes_per_tan を追加し、backend/apps/plans/migrations/0007_ricetransplantplan_seedling_boxes_per_tan.py も作成しました。画面は frontend/src/app/rice-transplant/_components/RiceTransplantEditPage.tsx を施肥計画寄りに組み直し、列単位のデフォルト反映と四捨五入、行ごとの苗箱数入力に寄せています。frontend/src/types/index.ts も合わせて更新済みです。

確認できたのはバックエンドの構文チェックまでで、python3 -m py_compile backend/apps/plans/models.py backend/apps/plans/serializers.py backend/apps/plans/views.py は通過しています。フロントのビルド確認まではこの環境では回していません。Issue #2 にも今回の反映内容をコメント済みです。
This commit is contained in:
akira
2026-04-05 10:53:24 +09:00
parent 95c90dd699
commit 11b36b28a5
6 changed files with 275 additions and 219 deletions

View File

@@ -49,8 +49,8 @@ class RiceTransplantEntrySerializer(serializers.ModelSerializer):
read_only=True,
)
planned_boxes = serializers.SerializerMethodField()
planned_seed_kg = serializers.SerializerMethodField()
default_seedling_boxes = serializers.SerializerMethodField()
planned_seed_kg = serializers.SerializerMethodField()
class Meta:
model = RiceTransplantEntry
@@ -60,7 +60,6 @@ class RiceTransplantEntrySerializer(serializers.ModelSerializer):
'field_name',
'field_area_tan',
'installed_seedling_boxes',
'seed_grams_per_box',
'default_seedling_boxes',
'planned_boxes',
'planned_seed_kg',
@@ -68,7 +67,7 @@ class RiceTransplantEntrySerializer(serializers.ModelSerializer):
def get_default_seedling_boxes(self, obj):
area = Decimal(str(obj.field.area_tan))
default_boxes_per_tan = obj.plan.variety.default_seedling_boxes_per_tan
default_boxes_per_tan = obj.plan.seedling_boxes_per_tan
return str((area * default_boxes_per_tan).quantize(Decimal('0.01')))
def get_planned_boxes(self, obj):
@@ -76,7 +75,7 @@ class RiceTransplantEntrySerializer(serializers.ModelSerializer):
def get_planned_seed_kg(self, obj):
seed_kg = (
obj.installed_seedling_boxes * obj.seed_grams_per_box / Decimal('1000')
obj.installed_seedling_boxes * obj.plan.default_seed_grams_per_box / Decimal('1000')
).quantize(Decimal('0.001'))
return str(seed_kg)
@@ -101,6 +100,7 @@ class RiceTransplantPlanSerializer(serializers.ModelSerializer):
'variety_name',
'crop_name',
'default_seed_grams_per_box',
'seedling_boxes_per_tan',
'notes',
'entries',
'field_count',
@@ -126,7 +126,7 @@ class RiceTransplantPlanSerializer(serializers.ModelSerializer):
total = sum(
(
entry.installed_seedling_boxes
* entry.seed_grams_per_box
* obj.default_seed_grams_per_box
/ Decimal('1000')
)
for entry in obj.entries.all()
@@ -152,6 +152,7 @@ class RiceTransplantPlanWriteSerializer(serializers.ModelSerializer):
'year',
'variety',
'default_seed_grams_per_box',
'seedling_boxes_per_tan',
'notes',
'entries',
]
@@ -192,5 +193,5 @@ class RiceTransplantPlanWriteSerializer(serializers.ModelSerializer):
plan=plan,
field_id=entry['field_id'],
installed_seedling_boxes=entry['installed_seedling_boxes'],
seed_grams_per_box=entry['seed_grams_per_box'],
seed_grams_per_box=plan.default_seed_grams_per_box,
)