from rest_framework.views import APIView from rest_framework import serializers from rest_framework.response import Response from rest_framework import status from apps.customer.services import create_customer_note, customer_note_edit, customer_note_delete from apps.customer.selectors import customer_note_retrieve, customer_note_list from apps.customer.models import CustomerNote as CustomerNoteModel from apps.reminder.models import Reminder as ReminderModel from utils.tools import inline_serializer class CustomerCreateNoteApi(APIView): class InputSerializer(serializers.Serializer): desc = serializers.CharField() reminder_datetime = serializers.DateTimeField(required=False, allow_null=True) reminder_desc = serializers.CharField(required=False, allow_null=True, max_length=200) def post(self, request, customer_id): serializer = self.InputSerializer(data=request.data) serializer.is_valid(raise_exception=True) output = create_customer_note(request=request, customer_id=customer_id, **serializer.validated_data) return Response(data={'id': output.id}, status=status.HTTP_201_CREATED) class CustomerListNoteApi(APIView): class OutputSerializer(serializers.ModelSerializer): class Meta: model = CustomerNoteModel exclude = ['cuser_role', 'sys_ws'] def get(self, request, customer_id): notes = customer_note_list(request=request, customer_id=customer_id) output = self.OutputSerializer(notes, many=True) return Response(data=output.data, status=status.HTTP_200_OK) class CustomerRetrieveNoteApi(APIView): class OutputSerializer(serializers.Serializer): class CustomerNoteSerializer(serializers.ModelSerializer): class Meta: model = CustomerNoteModel fields = '__all__' class CustomerNoteReminderSerializer(serializers.ModelSerializer): class Meta: model = ReminderModel fields = '__all__' customer_note = CustomerNoteSerializer(many=False, required=True) customer_note_reminder = CustomerNoteReminderSerializer(many=False, required=False) def get(self, request, customer_id, note_id): note = customer_note_retrieve(request=request, customer_id=customer_id, note_id=note_id) output = self.OutputSerializer(note) return Response(data=output.data, status=status.HTTP_200_OK) class CustomerEditNoteApi(APIView): class InputSerializer(serializers.Serializer): desc = serializers.CharField(required=True) reminder_datetime = serializers.DateTimeField(required=False, allow_null=True) reminder_desc = serializers.CharField(required=False, allow_null=True, max_length=200) class OutputSerializer(serializers.ModelSerializer): class Meta: model = CustomerNoteModel fields = '__all__' def patch(self, request, customer_id, note_id): serializer = self.InputSerializer(data=request.data) serializer.is_valid(raise_exception=True) note = customer_note_edit(request=request, customer_id=customer_id, note_id=note_id, **serializer.validated_data) return Response(data={'id': note.id}, status=status.HTTP_201_CREATED) class CustomerDeleteNoteApi(APIView): def delete(self, request, customer_id, note_id): note = customer_note_delete(request=request, customer_id=customer_id, note_id=note_id) return Response(data={'result': 'deleted'}, status=status.HTTP_200_OK)