diff --git a/CHANGELOG.md b/CHANGELOG.md index b526f705c..17dd794be 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,9 @@ ## Neste versjon +## Versjon 2023.04.08 +- ✨ **Codex** Index brukere kan nå opprette dokumenter og møtereferater i Codex. + ## Versjon 2023.03.11 - 🦟 **Vipps** Brukere som kommer fra venteliste vil nå få en payment countdown startet, slik at de blir kastet ut hvis de ikke betaler. - ⚡ **Venteliste** Brukere vil nå se sin reelle ventelisteplass som tar hensyn til prioriteringer. diff --git a/app/content/admin/admin.py b/app/content/admin/admin.py index 1ec630cd3..0ac3488fc 100644 --- a/app/content/admin/admin.py +++ b/app/content/admin/admin.py @@ -17,7 +17,6 @@ admin.site.register(models.ShortLink) admin.site.register(models.Toddel) admin.site.register(models.QRCode) -admin.site.register(models.Minute) @admin.register(models.Strike) diff --git a/app/content/enums.py b/app/content/enums.py index 3f0ced1d3..5d2332a87 100644 --- a/app/content/enums.py +++ b/app/content/enums.py @@ -18,3 +18,8 @@ class CategoryEnum(ChoiceEnum): KURS = "Kurs" ANNET = "Annet" FADDERUKA = "Fadderuka" + + +class MinuteTagEnum(models.TextChoices): + MINUTE = "Møtereferat" + DOCUMENT = "Dokument" diff --git a/app/content/filters/__init__.py b/app/content/filters/__init__.py index ae6e76129..d442c2664 100644 --- a/app/content/filters/__init__.py +++ b/app/content/filters/__init__.py @@ -1,3 +1,4 @@ from app.content.filters.cheatsheet import CheatsheetFilter from app.content.filters.event import EventFilter from app.content.filters.user import UserFilter +from app.content.filters.minute import MinuteFilter diff --git a/app/content/filters/minute.py b/app/content/filters/minute.py new file mode 100644 index 000000000..db956ab22 --- /dev/null +++ b/app/content/filters/minute.py @@ -0,0 +1,15 @@ +from django_filters.rest_framework import FilterSet, OrderingFilter + +from app.content.models import Minute + + +class MinuteFilter(FilterSet): + """Filters minutes""" + + ordering = OrderingFilter( + fields=("created_at", "updated_at", "title", "author", "tag") + ) + + class Meta: + model = Minute + fields = ["author", "title", "tag"] diff --git a/app/content/migrations/0060_minute_tag.py b/app/content/migrations/0060_minute_tag.py new file mode 100644 index 000000000..b2d57d897 --- /dev/null +++ b/app/content/migrations/0060_minute_tag.py @@ -0,0 +1,22 @@ +# Generated by Django 4.2.5 on 2024-04-08 19:44 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("content", "0059_minute"), + ] + + operations = [ + migrations.AddField( + model_name="minute", + name="tag", + field=models.CharField( + choices=[("Møtereferat", "Minute"), ("Dokument", "Document")], + default="Møtereferat", + max_length=50, + ), + ), + ] diff --git a/app/content/models/minute.py b/app/content/models/minute.py index c27009ed1..2aa8d26ad 100644 --- a/app/content/models/minute.py +++ b/app/content/models/minute.py @@ -2,6 +2,7 @@ from app.common.enums import AdminGroup from app.common.permissions import BasePermissionModel +from app.content.enums import MinuteTagEnum from app.content.models.user import User from app.util.models import BaseModel @@ -12,6 +13,9 @@ class Minute(BaseModel, BasePermissionModel): title = models.CharField(max_length=200) content = models.TextField(default="", blank=True) + tag = models.CharField( + max_length=50, choices=MinuteTagEnum.choices, default=MinuteTagEnum.MINUTE + ) author = models.ForeignKey( User, blank=True, diff --git a/app/content/serializers/__init__.py b/app/content/serializers/__init__.py index baea3383f..53ae7b21e 100644 --- a/app/content/serializers/__init__.py +++ b/app/content/serializers/__init__.py @@ -35,4 +35,5 @@ MinuteCreateSerializer, MinuteSerializer, MinuteUpdateSerializer, + MinuteListSerializer, ) diff --git a/app/content/serializers/minute.py b/app/content/serializers/minute.py index b3f0b2d54..f490195d8 100644 --- a/app/content/serializers/minute.py +++ b/app/content/serializers/minute.py @@ -12,7 +12,7 @@ class Meta: class MinuteCreateSerializer(serializers.ModelSerializer): class Meta: model = Minute - fields = ("title", "content") + fields = ("title", "content", "tag") def create(self, validated_data): author = self.context["request"].user @@ -25,13 +25,21 @@ class MinuteSerializer(serializers.ModelSerializer): class Meta: model = Minute - fields = ("id", "title", "content", "author", "created_at", "updated_at") + fields = ("id", "title", "content", "author", "created_at", "updated_at", "tag") class MinuteUpdateSerializer(serializers.ModelSerializer): class Meta: model = Minute - fields = ("id", "title", "content") + fields = ("id", "title", "content", "tag") def update(self, instance, validated_data): return super().update(instance, validated_data) + + +class MinuteListSerializer(serializers.ModelSerializer): + author = SimpleUserSerializer(read_only=True) + + class Meta: + model = Minute + fields = ("id", "title", "author", "created_at", "updated_at", "tag") diff --git a/app/content/views/minute.py b/app/content/views/minute.py index 92ec6c619..3cc14914b 100644 --- a/app/content/views/minute.py +++ b/app/content/views/minute.py @@ -1,12 +1,15 @@ -from rest_framework import status +from django_filters.rest_framework import DjangoFilterBackend +from rest_framework import filters, status from rest_framework.response import Response from app.common.pagination import BasePagination from app.common.permissions import BasicViewPermission from app.common.viewsets import BaseViewSet +from app.content.filters import MinuteFilter from app.content.models import Minute from app.content.serializers import ( MinuteCreateSerializer, + MinuteListSerializer, MinuteSerializer, MinuteUpdateSerializer, ) @@ -18,6 +21,20 @@ class MinuteViewSet(BaseViewSet): pagination_class = BasePagination queryset = Minute.objects.all() + filter_backends = [DjangoFilterBackend, filters.SearchFilter] + filterset_class = MinuteFilter + search_fields = [ + "title", + "author__first_name", + "author__last_name", + "author__user_id", + ] + + def get_serializer_class(self): + if hasattr(self, "action") and self.action == "list": + return MinuteListSerializer + return super().get_serializer_class() + def create(self, request, *args, **kwargs): data = request.data serializer = MinuteCreateSerializer(data=data, context={"request": request})