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

@@ -0,0 +1,16 @@
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('plans', '0005_crop_seed_inventory_variety_seedling_boxes_and_rice_transplant'),
]
operations = [
migrations.RenameField(
model_name='ricetransplantentry',
old_name='seedling_boxes_per_tan',
new_name='installed_seedling_boxes',
),
]

View File

@@ -97,10 +97,10 @@ class RiceTransplantEntry(models.Model):
related_name='rice_transplant_entries',
verbose_name='圃場',
)
seedling_boxes_per_tan = models.DecimalField(
max_digits=6,
installed_seedling_boxes = models.DecimalField(
max_digits=8,
decimal_places=2,
verbose_name='反当苗箱枚数',
verbose_name='設置苗箱枚数',
)
seed_grams_per_box = models.DecimalField(
max_digits=8,
@@ -115,4 +115,4 @@ class RiceTransplantEntry(models.Model):
ordering = ['field__display_order', 'field__id']
def __str__(self):
return f'{self.plan} / {self.field} / {self.seedling_boxes_per_tan}/反'
return f'{self.plan} / {self.field} / {self.installed_seedling_boxes}'

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'],
)