Adjust rice transplant plan to store installed box counts

This commit is contained in:
akira
2026-04-05 10:26:14 +09:00
parent 9bcc5e5e21
commit 95c90dd699
6 changed files with 101 additions and 50 deletions

View File

@@ -50,6 +50,7 @@ class RiceTransplantEntrySerializer(serializers.ModelSerializer):
)
planned_boxes = serializers.SerializerMethodField()
planned_seed_kg = serializers.SerializerMethodField()
default_seedling_boxes = serializers.SerializerMethodField()
class Meta:
model = RiceTransplantEntry
@@ -58,20 +59,25 @@ class RiceTransplantEntrySerializer(serializers.ModelSerializer):
'field',
'field_name',
'field_area_tan',
'seedling_boxes_per_tan',
'installed_seedling_boxes',
'seed_grams_per_box',
'default_seedling_boxes',
'planned_boxes',
'planned_seed_kg',
]
def get_planned_boxes(self, obj):
def get_default_seedling_boxes(self, obj):
area = Decimal(str(obj.field.area_tan))
return str((area * obj.seedling_boxes_per_tan).quantize(Decimal('0.01')))
default_boxes_per_tan = obj.plan.variety.default_seedling_boxes_per_tan
return str((area * default_boxes_per_tan).quantize(Decimal('0.01')))
def get_planned_boxes(self, obj):
return str(obj.installed_seedling_boxes.quantize(Decimal('0.01')))
def get_planned_seed_kg(self, obj):
area = Decimal(str(obj.field.area_tan))
boxes = area * obj.seedling_boxes_per_tan
seed_kg = (boxes * obj.seed_grams_per_box / Decimal('1000')).quantize(Decimal('0.001'))
seed_kg = (
obj.installed_seedling_boxes * obj.seed_grams_per_box / Decimal('1000')
).quantize(Decimal('0.001'))
return str(seed_kg)
@@ -111,7 +117,7 @@ class RiceTransplantPlanSerializer(serializers.ModelSerializer):
def get_total_seedling_boxes(self, obj):
total = sum(
Decimal(str(entry.field.area_tan)) * entry.seedling_boxes_per_tan
entry.installed_seedling_boxes
for entry in obj.entries.all()
)
return str(total.quantize(Decimal('0.01')))
@@ -119,8 +125,7 @@ class RiceTransplantPlanSerializer(serializers.ModelSerializer):
def get_total_seed_kg(self, obj):
total = sum(
(
Decimal(str(entry.field.area_tan))
* entry.seedling_boxes_per_tan
entry.installed_seedling_boxes
* entry.seed_grams_per_box
/ Decimal('1000')
)
@@ -186,6 +191,6 @@ class RiceTransplantPlanWriteSerializer(serializers.ModelSerializer):
RiceTransplantEntry.objects.create(
plan=plan,
field_id=entry['field_id'],
seedling_boxes_per_tan=entry['seedling_boxes_per_tan'],
installed_seedling_boxes=entry['installed_seedling_boxes'],
seed_grams_per_box=entry['seed_grams_per_box'],
)