Compare commits

..

23 commits

Author SHA1 Message Date
c8a75b5670 stash
All checks were successful
/ test (push) Successful in 55s
2024-11-28 19:20:46 +01:00
f9a7abdbb1 stash 2024-11-28 19:20:36 +01:00
1a3aab4d41 stash
All checks were successful
/ test (push) Successful in 56s
2024-11-28 18:55:18 +01:00
401b71571f stash 2024-11-24 21:58:26 +01:00
8cedbb5180 stash 2024-11-24 16:20:22 +01:00
65b5a8b8b2 stash 2024-11-23 16:13:29 +01:00
4f93a36546 stash
All checks were successful
/ test (push) Successful in 54s
2024-11-23 01:39:36 +01:00
63e3319f0d stash 2024-11-23 01:39:11 +01:00
ec6bfc0d3f stash 2024-11-23 01:38:03 +01:00
9134f6b95e stash 2024-11-23 01:37:57 +01:00
d73fb90442 stash 2024-11-23 01:36:50 +01:00
ee9d83049c save raw_mails as file 2024-11-23 01:36:50 +01:00
3ce31c1f62 stash 2024-11-23 01:36:41 +01:00
18cb69f4f4 stash 2024-11-23 01:35:29 +01:00
b32645b18e stash 2024-11-23 01:35:29 +01:00
9f1a681762 stash 2024-11-23 01:35:29 +01:00
a76706851d stash 2024-11-23 01:35:29 +01:00
e311f87d5d stash 2024-11-23 01:35:29 +01:00
3e03832867 stash 2024-11-23 01:35:29 +01:00
c5e59a3b2b stash 2024-11-23 01:35:29 +01:00
6ac49458f4 stash 2024-11-23 01:35:29 +01:00
76119de05f stash 2024-11-23 01:35:29 +01:00
d5eadbe4b1 add timeline information to the /items endpoint
All checks were successful
/ test (push) Successful in 52s
/ deploy (push) Successful in 4m37s
2024-11-23 01:22:24 +01:00
7 changed files with 7 additions and 103 deletions

View file

@ -1,6 +1,6 @@
from django.contrib import admin
from inventory.models import Item, Container, ItemPlacement, Comment, Event
from inventory.models import Item, Container, Event
class ItemAdmin(admin.ModelAdmin):
@ -22,17 +22,3 @@ class EventAdmin(admin.ModelAdmin):
admin.site.register(Event, EventAdmin)
class ItemPlacementAdmin(admin.ModelAdmin):
pass
admin.site.register(ItemPlacement, ItemPlacementAdmin)
class CommentAdmin(admin.ModelAdmin):
pass
admin.site.register(Comment, CommentAdmin)

View file

@ -27,17 +27,6 @@ class ContainerViewSet(viewsets.ModelViewSet):
queryset = Container.objects.all()
class ItemViewSet(viewsets.ModelViewSet):
serializer_class = ItemSerializer
def get_queryset(self):
queryset = Item.objects.all()
serializer = self.get_serializer_class()
if hasattr(serializer, 'Meta') and hasattr(serializer.Meta, 'prefetch_related_fields'):
queryset = queryset.prefetch_related(*serializer.Meta.prefetch_related_fields)
return queryset
def filter_items(items, query):
query_tokens = query.split(' ')
for item in items:
@ -65,7 +54,6 @@ def search_items(request, event_slug, query):
@api_view(['GET', 'POST'])
@permission_classes([IsAuthenticated])
def item(request, event_slug):
vs = ItemViewSet()
try:
event = None
if event_slug != 'none':
@ -73,7 +61,7 @@ def item(request, event_slug):
if request.method == 'GET':
if not request.user.has_event_perm(event, 'view_item'):
return Response(status=403)
return Response(ItemSerializer(vs.get_queryset().filter(event=event), many=True).data)
return Response(ItemSerializer(Item.objects.filter(event=event), many=True).data)
elif request.method == 'POST':
if not request.user.has_event_perm(event, 'add_item'):
return Response(status=403)
@ -118,7 +106,7 @@ def add_comment(request, event_slug, id):
def item_by_id(request, event_slug, id):
try:
event = Event.objects.get(slug=event_slug)
item = ItemViewSet().get_queryset().get(event=event, id=id)
item = Item.objects.get(event=event, id=id)
if request.method == 'GET':
if not request.user.has_event_perm(event, 'view_item'):
return Response(status=403)

View file

@ -1,52 +0,0 @@
# Generated by Django 4.2.7 on 2024-11-23 15:27
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('inventory', '0006_alter_event_table'),
]
def set_initial_container(apps, schema_editor):
Item = apps.get_model('inventory', 'Item')
for item in Item.objects.all():
item.container_history.get_or_create(container=item.container_old)
item.save()
operations = [
migrations.RenameField(
model_name='item',
old_name='container',
new_name='container_old',
),
migrations.CreateModel(
name='ItemPlacement',
fields=[
('id', models.AutoField(primary_key=True, serialize=False)),
('timestamp', models.DateTimeField(auto_now_add=True)),
('container',
models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='item_history',
to='inventory.container')),
('item',
models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='container_history',
to='inventory.item')),
],
),
migrations.CreateModel(
name='Comment',
fields=[
('id', models.AutoField(primary_key=True, serialize=False)),
('comment', models.TextField()),
('timestamp', models.DateTimeField(auto_now_add=True)),
('item', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='comments',
to='inventory.item')),
],
),
migrations.RunPython(set_initial_container),
migrations.RemoveField(
model_name='item',
name='container_old',
),
]

View file

@ -60,7 +60,6 @@ class ItemSerializer(BasicItemSerializer):
fields = ['cid', 'box', 'id', 'description', 'file', 'dataImage', 'returned', 'event', 'related_issues',
'timeline']
read_only_fields = ['id']
prefetch_related_fields = ['comments', 'issue_relation_changes', 'container_history']
def to_internal_value(self, data):
container = None

View file

@ -21,13 +21,8 @@ from tickets.shared_serializers import RelationSerializer
class IssueViewSet(viewsets.ModelViewSet):
serializer_class = IssueSerializer
def get_queryset(self):
queryset = IssueThread.objects.all()
serializer = self.get_serializer_class()
if hasattr(serializer, 'Meta') and hasattr(serializer.Meta, 'prefetch_related_fields'):
queryset = queryset.prefetch_related(*serializer.Meta.prefetch_related_fields)
return queryset
queryset = IssueThread.objects.all().prefetch_related('state_changes', 'comments', 'emails', 'emails__attachments',
'assignments', 'item_relation_changes', 'shipping_vouchers')
class RelationViewSet(viewsets.ModelViewSet):

View file

@ -47,8 +47,6 @@ class IssueSerializer(BasicIssueSerializer):
model = IssueThread
fields = ('id', 'timeline', 'name', 'state', 'assigned_to', 'last_activity', 'uuid', 'related_items', 'event')
read_only_fields = ('id', 'timeline', 'last_activity', 'uuid', 'related_items')
prefetch_related_fields = ['state_changes', 'comments', 'emails', 'emails__attachments', 'assignments',
'item_relation_changes', 'shipping_vouchers']
def to_internal_value(self, data):
ret = super().to_internal_value(data)
@ -65,14 +63,12 @@ class IssueSerializer(BasicIssueSerializer):
@staticmethod
def get_last_activity(self):
try:
last_state_change = max(
[t.timestamp for t in self.state_changes.all()]) if self.state_changes.exists() else None
last_state_change = max([t.timestamp for t in self.state_changes.all()]) if self.state_changes.exists() else None
last_comment = max([t.timestamp for t in self.comments.all()]) if self.comments.exists() else None
last_mail = max([t.timestamp for t in self.emails.all()]) if self.emails.exists() else None
last_assignment = max([t.timestamp for t in self.assignments.all()]) if self.assignments.exists() else None
last_relation = max([t.timestamp for t in
self.item_relation_changes.all()]) if self.item_relation_changes.exists() else None
last_relation = max([t.timestamp for t in self.item_relation_changes.all()]) if self.item_relation_changes.exists() 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)

View file

@ -75,14 +75,6 @@ server {
allow 127.0.0.1;
allow ::1;
deny all;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_redirect off;
proxy_buffering off;
proxy_pass http://c3lf-sys3;
}
listen 443 ssl http2; # managed by Certbot