Add rice transplant planning feature
This commit is contained in:
@@ -2,8 +2,14 @@ from rest_framework import viewsets, status
|
||||
from rest_framework.decorators import action
|
||||
from rest_framework.response import Response
|
||||
from django.db.models import Sum
|
||||
from .models import Crop, Variety, Plan
|
||||
from .serializers import CropSerializer, VarietySerializer, PlanSerializer
|
||||
from .models import Crop, Variety, Plan, RiceTransplantPlan
|
||||
from .serializers import (
|
||||
CropSerializer,
|
||||
VarietySerializer,
|
||||
PlanSerializer,
|
||||
RiceTransplantPlanSerializer,
|
||||
RiceTransplantPlanWriteSerializer,
|
||||
)
|
||||
from apps.fields.models import Field
|
||||
|
||||
|
||||
@@ -130,3 +136,49 @@ class PlanViewSet(viewsets.ModelViewSet):
|
||||
def get_crops_with_varieties(self, request):
|
||||
crops = Crop.objects.prefetch_related('varieties').all()
|
||||
return Response(CropSerializer(crops, many=True).data)
|
||||
|
||||
|
||||
class RiceTransplantPlanViewSet(viewsets.ModelViewSet):
|
||||
queryset = RiceTransplantPlan.objects.select_related(
|
||||
'variety',
|
||||
'variety__crop',
|
||||
).prefetch_related('entries', 'entries__field')
|
||||
|
||||
def get_queryset(self):
|
||||
queryset = self.queryset
|
||||
year = self.request.query_params.get('year')
|
||||
if year:
|
||||
queryset = queryset.filter(year=year)
|
||||
return queryset
|
||||
|
||||
def get_serializer_class(self):
|
||||
if self.action in ['create', 'update', 'partial_update']:
|
||||
return RiceTransplantPlanWriteSerializer
|
||||
return RiceTransplantPlanSerializer
|
||||
|
||||
@action(detail=False, methods=['get'])
|
||||
def candidate_fields(self, request):
|
||||
year = request.query_params.get('year')
|
||||
variety_id = request.query_params.get('variety_id')
|
||||
if not year or not variety_id:
|
||||
return Response(
|
||||
{'error': 'year と variety_id が必要です'},
|
||||
status=status.HTTP_400_BAD_REQUEST,
|
||||
)
|
||||
|
||||
field_ids = Plan.objects.filter(
|
||||
year=year,
|
||||
variety_id=variety_id,
|
||||
).values_list('field_id', flat=True)
|
||||
fields = Field.objects.filter(id__in=field_ids).order_by('display_order', 'id')
|
||||
data = [
|
||||
{
|
||||
'id': field.id,
|
||||
'name': field.name,
|
||||
'area_tan': str(field.area_tan),
|
||||
'area_m2': field.area_m2,
|
||||
'group_name': field.group_name,
|
||||
}
|
||||
for field in fields
|
||||
]
|
||||
return Response(data)
|
||||
|
||||
Reference in New Issue
Block a user