Files
crmApi/apps/customer/views/customer_note.py
T
2024-01-22 13:01:42 +03:30

95 lines
3.5 KiB
Python

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)