diff --git a/jarvis/profiles/admin.py b/jarvis/profiles/admin.py
index 9d8881c..1859ed0 100644
--- a/jarvis/profiles/admin.py
+++ b/jarvis/profiles/admin.py
@@ -1,5 +1,5 @@
from django.contrib import admin
-from .models import Profile # , Notification
+from .models import Profile, Notification
from django_admin_listfilter_dropdown.filters import RelatedDropdownFilter
@@ -12,15 +12,15 @@ class ProfileAdmin(admin.ModelAdmin):
admin.site.register(Profile, ProfileAdmin)
-# class NotificationAdmin(admin.ModelAdmin):
-# model = Notification
-# list_display = ("user", "gymnast", "functionality")
-# autocomplete_fields = ("user", "gymnast")
-# list_filter = (
-# ("user", RelatedDropdownFilter),
-# ("gymnast", RelatedDropdownFilter),
-# ("functionality", RelatedDropdownFilter),
-# )
+class NotificationAdmin(admin.ModelAdmin):
+ model = Notification
+ list_display = ("user", "gymnast", "functionality")
+ autocomplete_fields = ("user", "gymnast")
+ list_filter = (
+ ("user", RelatedDropdownFilter),
+ ("gymnast", RelatedDropdownFilter),
+ ("functionality", RelatedDropdownFilter),
+ )
-# admin.site.register(Notification, NotificationAdmin)
+admin.site.register(Notification, NotificationAdmin)
diff --git a/jarvis/profiles/migrations/0002_notification.py b/jarvis/profiles/migrations/0002_notification.py
new file mode 100644
index 0000000..298cb60
--- /dev/null
+++ b/jarvis/profiles/migrations/0002_notification.py
@@ -0,0 +1,58 @@
+# Generated by Django 4.2 on 2023-04-27 11:54
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ("people", "0008_alter_gymnast_orientation"),
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ("contenttypes", "0002_remove_content_type_name"),
+ ("profiles", "0001_initial"),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name="Notification",
+ fields=[
+ (
+ "id",
+ models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ (
+ "functionality",
+ models.ForeignKey(
+ limit_choices_to={"app_label": "followup"},
+ on_delete=django.db.models.deletion.CASCADE,
+ to="contenttypes.contenttype",
+ ),
+ ),
+ (
+ "gymnast",
+ models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="notifications",
+ to="people.gymnast",
+ ),
+ ),
+ (
+ "user",
+ models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ to=settings.AUTH_USER_MODEL,
+ ),
+ ),
+ ],
+ options={
+ "unique_together": {("user", "gymnast", "functionality")},
+ },
+ ),
+ ]
diff --git a/jarvis/profiles/models.py b/jarvis/profiles/models.py
index 4675d70..3c23a74 100644
--- a/jarvis/profiles/models.py
+++ b/jarvis/profiles/models.py
@@ -7,7 +7,7 @@ Les profils peuvent enregistrer les informations suivantes:
* si la barre de navigation doit être cachée ou non
"""
-# from django.contrib.contenttypes.models import ContentType
+from django.contrib.contenttypes.models import ContentType
from django.contrib.auth import get_user_model
from django.db import models
from jarvis.people.models import Gymnast
@@ -44,21 +44,21 @@ class Profile(models.Model):
return "%s %s" % (self.user.first_name, self.user.last_name)
-# class Notification(models.Model):
-# """Classe permettant de définir quelles notification un utilisateur veut recevoir."""
+class Notification(models.Model):
+ """Classe permettant de définir quelles notification un utilisateur veut recevoir."""
-# class Meta:
-# unique_together = ("user", "gymnast", "functionality")
+ class Meta:
+ unique_together = ("user", "gymnast", "functionality")
-# user = models.ForeignKey(User, on_delete=models.CASCADE)
-# gymnast = models.ForeignKey(
-# Gymnast, on_delete=models.CASCADE, related_name="notifications"
-# )
-# functionality = models.ForeignKey(
-# ContentType,
-# on_delete=models.CASCADE,
-# limit_choices_to={"app_label": "followup"},
-# )
+ user = models.ForeignKey(User, on_delete=models.CASCADE)
+ gymnast = models.ForeignKey(
+ Gymnast, on_delete=models.CASCADE, related_name="notifications"
+ )
+ functionality = models.ForeignKey(
+ ContentType,
+ on_delete=models.CASCADE,
+ limit_choices_to={"app_label": "followup"},
+ )
-# def __str__(self):
-# return f"{self.user} will be notified for add/update {self.functionality} to {self.gymnast}"
+ def __str__(self):
+ return f"{self.user} will be notified for add/update {self.functionality} to {self.gymnast}"
diff --git a/jarvis/profiles/templates/notification_update.html b/jarvis/profiles/templates/notification_update.html
index d20c0f2..b214fe2 100644
--- a/jarvis/profiles/templates/notification_update.html
+++ b/jarvis/profiles/templates/notification_update.html
@@ -22,10 +22,10 @@
@@ -49,7 +49,7 @@
method: "POST",
data: {
gymnast_id: $(this).data("gymnast"),
- notification_id: $(this).data("functionality"),
+ functionality_id: $(this).data("functionality"),
csrfmiddlewaretoken: '{{ csrf_token }}'
},
success: function(data) {
@@ -63,7 +63,7 @@
method: "POST",
data: {
gymnast_id: $(this).data("gymnast"),
- notification_id: $(this).data("functionality"),
+ functionality_id: $(this).data("functionality"),
csrfmiddlewaretoken: '{{ csrf_token }}'
},
success: function(data) {
diff --git a/jarvis/profiles/urls.py b/jarvis/profiles/urls.py
index 890d211..0c7591b 100644
--- a/jarvis/profiles/urls.py
+++ b/jarvis/profiles/urls.py
@@ -7,11 +7,11 @@ from . import views
profile_urlpatterns = [
path(r"edit/", views.profile_update, name="profile_update"),
- # path(
- # r"notification_update/", views.notification_update, name="notification_update"
- # ),
- # path(r"notification_add/", views.notification_add, name="notification_add"),
- # path(
- # r"notification_remove/", views.notification_remove, name="notification_remove"
- # ),
+ path(
+ r"notification_update/", views.notification_update, name="notification_update"
+ ),
+ path(r"notification_add/", views.notification_add, name="notification_add"),
+ path(
+ r"notification_remove/", views.notification_remove, name="notification_remove"
+ ),
]
diff --git a/jarvis/profiles/views.py b/jarvis/profiles/views.py
index 3469fc7..cfd055d 100644
--- a/jarvis/profiles/views.py
+++ b/jarvis/profiles/views.py
@@ -2,13 +2,14 @@
from django.contrib.auth.decorators import login_required
from django.contrib.auth import get_user_model
+from django.contrib.contenttypes.models import ContentType
from django.http import HttpResponseRedirect, HttpResponse
from django.shortcuts import render, get_object_or_404
from django.views.decorators.http import require_http_methods
from django.urls import reverse
from .forms import ProfileForm
-from .models import Profile # , Notification, FUNCTIONALITY_CHOICES
+from .models import Profile, Notification
from jarvis.people.models import Gymnast
@@ -44,50 +45,52 @@ def profile_update(request):
return render(request, "update.html", context)
-# @login_required
-# @require_http_methods(["GET", "POST"])
-# def notification_update(request):
-# gymnast_list = Gymnast.objects.filter(is_active=True)
+@login_required
+@require_http_methods(["GET", "POST"])
+def notification_update(request):
+ gymnast_list = Gymnast.objects.filter(is_active=True)
+ functionality_list = ContentType.objects.filter(app_label="followup")
-# context = {
-# "gymnast_list": gymnast_list,
-# "functionality_list": FUNCTIONALITY_CHOICES,
-# }
-# return render(request, "notification_update.html", context)
+ context = {
+ "gymnast_list": gymnast_list,
+ "functionality_list": functionality_list,
+ }
+ return render(request, "notification_update.html", context)
-# @require_http_methods(["POST"])
-# def notification_add(request):
-# """
-# Ajoute une demande de notification
-# """
-# gymnast_id = request.POST.get("gymnast_id", None)
-# notification_id = request.POST.get("notification_id", None)
+@require_http_methods(["POST"])
+def notification_add(request):
+ """
+ Ajoute une demande de notification
+ """
+ gymnast_id = request.POST.get("gymnast_id", None)
+ functionality_id = request.POST.get("functionality_id", None)
-# gymnast = get_object_or_404(Gymnast, pk=gymnast_id)
-# row, created = Notification.objects.get_or_create(
-# user=request.user, gymnast=gymnast, functionality=notification_id
-# )
+ gymnast = get_object_or_404(Gymnast, pk=gymnast_id)
+ functionality = get_object_or_404(ContentType, pk=functionality_id)
+ row, created = Notification.objects.get_or_create(
+ user=request.user, gymnast=gymnast, functionality=functionality
+ )
-# if created:
-# return HttpResponse(200, (row, created)) # devrait être un 201
-# else:
-# return HttpResponse(400, (row, created))
+ if created:
+ return HttpResponse(200, (row, created)) # devrait être un 201
+ else:
+ return HttpResponse(400, (row, created))
-# @require_http_methods(["POST"])
-# def notification_remove(request):
-# """
-# Supprime une demande de notification
-# """
-# gymnast_id = request.POST.get("gymnast_id", None)
-# notification_id = request.POST.get("notification_id", None)
+@require_http_methods(["POST"])
+def notification_remove(request):
+ """
+ Supprime une demande de notification
+ """
+ gymnast_id = request.POST.get("gymnast_id", None)
+ functionnality_id = request.POST.get("functionnality_id", None)
-# try:
-# Notification.objects.get(
-# user=request.user, gymnast=gymnast_id, functionality=notification_id
-# ).delete()
-# except Exception:
-# return HttpResponse(409)
+ try:
+ Notification.objects.get(
+ user=request.user, gymnast=gymnast_id, functionality=functionnality_id
+ ).delete()
+ except Exception:
+ return HttpResponse(409)
-# return HttpResponse(200)
+ return HttpResponse(200)