Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class EventViewSet(viewsets.ModelViewSet):
- queryset = models.Event.objects.all()
- serializer_class = serializers.EventSerializer
- permission_classes = (permissions.AllowAny,)
- filter_backends = (django_filters.rest_framework.DjangoFilterBackend,)
- filterset_fields = ('patient', 'type')
- pagination_class = None
- def create(self, request, *args, **kwargs):
- patient_id = request.data['patient']
- patient = models.Patient.objects.filter(pk=patient_id)
- if not patient.exists():
- raise Http404
- else:
- patient = patient.get()
- keys = request.data.keys()
- if 'doctor' not in keys:
- request.data['doctor'] = models.Patient.objects.get(pk=patient_id).doctor_id
- if 'card' not in keys:
- request.data['card'] = models.Card.objects.get(patient_id=patient_id).pk
- if request.data['type'] == models.Event.MENSTRUATION:
- models.Event.objects.filter(
- (Q(type=models.Event.MENSTRUATION) | Q(type=models.Event.OVULATION)) & Q(patient_id=patient_id)
- ).delete()
- start_date = parse_datetime(request.data['start_date'])
- cycle = request.data['duration']
- serializer = self.get_serializer(data=request.data)
- serializer.is_valid(raise_exception=True)
- self.perform_create(serializer)
- headers = self.get_success_headers(serializer.data)
- if cycle % 2 == 0:
- ovulation_delta_days = cycle / 2 - 2
- else:
- ovulation_delta_days = cycle // 2 - 2
- year_offset = start_date + timedelta(days=365)
- while start_date < year_offset:
- models.Event.objects.create(
- type=models.Event.OVULATION,
- doctor_id=request.data['doctor'],
- card_id=request.data['card'],
- start_date=start_date + timedelta(days=ovulation_delta_days),
- duration=5,
- patient_id=patient_id
- )
- start_date += timedelta(days=cycle)
- request.data['start_date'] = start_date
- serializer = self.get_serializer(data=request.data)
- serializer.is_valid(raise_exception=True)
- self.perform_create(serializer)
- return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
- elif request.data['type'] == models.Event.PREGNANCY:
- patient.state = models.Patient.PREGNANT
- patient.save()
- elif request.data['type'] == models.Event.ABORTION:
- patient.state = models.Patient.DEFAULT
- patient.save()
- elif request.data['type'] == models.Event.INTAKE:
- start_date = parse_datetime(request.data['start_date'])
- request.data['start_date'] = start_date + timedelta(days=4)
- models.Event.objects.create(
- type=models.Event.TREATMENT_ASSIGNMENT,
- doctor_id=request.data['doctor'],
- card_id=request.data['card'],
- start_date=start_date,
- patient_id=patient_id
- )
- elif request.data['type'] == models.Event.ANALYSIS:
- #details = request.data['analysisType']
- #details = models.Analyzes.FRAGMENTATION
- details = 'FRAGMENTATION'
- return super().create(request, *args, **kwargs)
- def get_serializer(self, *args, **kwargs):
- """ if an array is passed, set serializer to many """
- if isinstance(kwargs.get('data', {}), list):
- kwargs['many'] = True
- return super().get_serializer(*args, **kwargs)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement