ticket update

This commit is contained in:
Parsa Nazer
2025-02-26 22:46:06 +03:30
parent 36c6b0129f
commit c4bc2267fc
4 changed files with 83 additions and 35 deletions
@@ -0,0 +1,21 @@
# Generated by Django 5.1.2 on 2025-02-26 17:42
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('ticket', '0014_attachment_uploaded_by'),
]
operations = [
migrations.RemoveField(
model_name='ticket',
name='attachments',
),
migrations.RemoveField(
model_name='ticket',
name='content',
),
]
-2
View File
@@ -37,7 +37,6 @@ class Ticket(models.Model):
('other', 'سایر'),
]
subject = models.CharField(max_length=255, verbose_name='موضوع')
content = models.TextField(verbose_name='جزيیات تیکت')
ticket_category = models.CharField(max_length=30, verbose_name='دسته بندی تیکت', choices=CATEGORY_CHOICES)
customer = models.ForeignKey(User, on_delete=models.CASCADE, related_name="tickets", verbose_name='کاربر')
admin = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True, related_name="assigned_tickets", verbose_name='ادمین')
@@ -45,7 +44,6 @@ class Ticket(models.Model):
created_at = jmodels.jDateTimeField(auto_now_add=True, verbose_name='ساخته شده در')
updated_at = jmodels.jDateTimeField(auto_now=True, verbose_name='اپدیت شده در')
order = models.ForeignKey(OrderModel ,blank=True, null=True, on_delete=models.SET_NULL)
attachments = models.ManyToManyField(Attachment, related_name='tickets', blank=True)
def __str__(self):
return self.subject
+39 -24
View File
@@ -3,36 +3,13 @@ from .models import Ticket, Message, Attachment
from django.utils.timezone import localtime
from account.serializers import ProfileSerializer
class MessageSerializer(serializers.ModelSerializer):
class Meta:
model = Message
fields = '__all__'
class TicketSerializer(serializers.ModelSerializer):
messages = MessageSerializer(many=True, read_only=True)
admin = ProfileSerializer(read_only=True)
class Meta:
model = Ticket
exclude = ('customer', )
read_only_fields = ('status', 'admin', )
class TicketListSerializer(serializers.ModelSerializer):
class Meta:
model = Ticket
exclude = ('customer', 'admin', 'order', 'content')
read_only_fields = ('status',)
class AttachmentSerializer(serializers.ModelSerializer):
file = serializers.FileField(write_only=True)
link = serializers.SerializerMethodField()
class Meta:
model = Attachment
fields = ['id', 'name', 'file','link' , 'created_at', 'size']
fields = ['id', 'name', 'file', 'link' , 'created_at', 'size']
read_only_fields = ('size', 'name', )
def get_link(self, obj):
@@ -40,3 +17,41 @@ class AttachmentSerializer(serializers.ModelSerializer):
if request is not None:
return request.build_absolute_uri(obj.file.url)
return obj.file.url
class MessageSerializer(serializers.ModelSerializer):
class Meta:
model = Message
exclude = ('sender', )
extra_kwargs = {'ticket': {'write_only': True}}
class MessageForTicketSerializer(serializers.ModelSerializer):
class Meta:
model = Message
exclude = ('sender', 'ticket')
class TicketSerializer(serializers.ModelSerializer):
messages = MessageSerializer(many=True, read_only=True)
message = MessageForTicketSerializer(write_only=True)
class Meta:
model = Ticket
exclude = ('customer', 'admin')
read_only_fields = ('status',)
def create(self, validated_data):
message = validated_data.pop('message', None)
ticket = super().create(validated_data)
print(f'fck this shit{ticket.pk}')
message['ticket'] = ticket.pk
message_obj = MessageSerializer(data=message)
if message_obj.is_valid():
message_obj.save(sender=ticket.customer)
return ticket
else:
raise Exception('bullshit data for message')
class TicketListSerializer(serializers.ModelSerializer):
class Meta:
model = Ticket
exclude = ('customer', 'admin', )
read_only_fields = ('status',)
+22 -8
View File
@@ -40,16 +40,30 @@ class AttachmentUploadView(APIView):
class TicketCreateView(generics.CreateAPIView):
queryset = Ticket.objects.all()
# class TicketCreateView(generics.CreateAPIView):
# queryset = Ticket.objects.all()
# serializer_class = TicketSerializer
# permission_classes = [permissions.IsAuthenticated]
# def perform_create(self, serializer):
# message = serializer.validated_data.get('message')
# ticket = serializer.validated_data.get('ticket')
# serializer.save(customer=self.request.user)
class TicketCreateView(APIView):
serializer_class = TicketSerializer
permission_classes = [permissions.IsAuthenticated]
def perform_create(self, serializer):
serializer.save(customer=self.request.user)
def post(self, request):
new_ticket_ser = self.serializer_class(data=request.data)
message = request.data.get('message', None)
print(message)
if new_ticket_ser.is_valid():
new_ticket_ser.save(customer=request.user)
return Response(new_ticket_ser.data, status=status.HTTP_201_CREATED)
else:
print(new_ticket_ser.error_messages)
return Response(new_ticket_ser.errors)
class TicketListView(APIView):
serializer_class = TicketListSerializer
permission_classes = [permissions.IsAuthenticated]