add /matches endpoint ad return match information in tickets and /item endpoints

This commit is contained in:
j3d1 2024-11-21 00:58:14 +01:00
parent aaa11c3b60
commit 797ea3ae12
12 changed files with 339 additions and 61 deletions

View file

@ -2,9 +2,10 @@ from rest_framework import serializers
from authentication.models import ExtendedUser
from inventory.models import Event
from inventory.shared_serializers import BasicItemSerializer
from mail.api_v2 import AttachmentSerializer
from tickets.models import IssueThread, Comment, STATE_CHOICES, ShippingVoucher
from inventory.serializers import ItemSerializer
from tickets.shared_serializers import BasicIssueSerializer
class CommentSerializer(serializers.ModelSerializer):
@ -37,14 +38,10 @@ class ShippingVoucherSerializer(serializers.ModelSerializer):
read_only_fields = ('id', 'timestamp', 'used_at')
class IssueSerializer(serializers.ModelSerializer):
class IssueSerializer(BasicIssueSerializer):
timeline = serializers.SerializerMethodField()
last_activity = serializers.SerializerMethodField()
assigned_to = serializers.SlugRelatedField(slug_field='username', queryset=ExtendedUser.objects.all(),
allow_null=True, required=False)
event = serializers.SlugRelatedField(slug_field='slug', queryset=Event.objects.all(),
allow_null=True, required=False)
related_items = ItemSerializer(many=True, read_only=True)
related_items = BasicItemSerializer(many=True, read_only=True)
class Meta:
model = IssueThread
@ -72,8 +69,8 @@ class IssueSerializer(serializers.ModelSerializer):
last_mail = self.emails.order_by('-timestamp').first().timestamp if self.emails.count() > 0 else None
last_assignment = self.assignments.order_by('-timestamp').first().timestamp if \
self.assignments.count() > 0 else None
last_relation = self.item_relations.order_by('-timestamp').first().timestamp if \
self.item_relations.count() > 0 else None
last_relation = self.item_relation_changes.order_by('-timestamp').first().timestamp if \
self.item_relation_changes.count() > 0 else None
args = [x for x in [last_state_change, last_comment, last_mail, last_assignment, last_relation] if
x is not None]
return max(args)
@ -115,13 +112,13 @@ class IssueSerializer(serializers.ModelSerializer):
'timestamp': assignment.timestamp,
'assigned_to': assignment.assigned_to.username,
})
for relation in obj.item_relations.all():
for relation in (obj.item_relation_changes.all()):
timeline.append({
'type': 'item_relation',
'id': relation.id,
'status': relation.status,
'timestamp': relation.timestamp,
'item': ItemSerializer(relation.item).data,
'item': BasicItemSerializer(relation.item).data,
})
for shipping_voucher in obj.shipping_vouchers.all():
timeline.append({
@ -133,5 +130,3 @@ class IssueSerializer(serializers.ModelSerializer):
})
return sorted(timeline, key=lambda x: x['timestamp'])
def get_queryset(self):
return IssueThread.objects.all().order_by('-last_activity')