First commit (without notification class)

This commit is contained in:
Gregory Trullemans 2023-04-27 11:23:05 +02:00
parent a1ae3e9134
commit 6460ac5afc
6 changed files with 76 additions and 136 deletions

View File

@ -1,5 +1,5 @@
from django.contrib import admin from django.contrib import admin
from .models import Profile, Notification from .models import Profile
from django_admin_listfilter_dropdown.filters import ( from django_admin_listfilter_dropdown.filters import (
ChoiceDropdownFilter, ChoiceDropdownFilter,
RelatedDropdownFilter, RelatedDropdownFilter,
@ -12,16 +12,16 @@ class ProfileAdmin(admin.ModelAdmin):
autocomplete_fields = ("user",) autocomplete_fields = ("user",)
class NotificationAdmin(admin.ModelAdmin): # class NotificationAdmin(admin.ModelAdmin):
model = Notification # model = Notification
list_display = ("user", "gymnast", "functionality") # list_display = ("user", "gymnast", "functionality")
autocomplete_fields = ("user", "gymnast") # autocomplete_fields = ("user", "gymnast")
list_filter = ( # list_filter = (
("user", RelatedDropdownFilter), # ("user", RelatedDropdownFilter),
("gymnast", RelatedDropdownFilter), # ("gymnast", RelatedDropdownFilter),
("functionality", ChoiceDropdownFilter), # ("functionality", ChoiceDropdownFilter),
) # )
admin.site.register(Profile, ProfileAdmin) admin.site.register(Profile, ProfileAdmin)
admin.site.register(Notification, NotificationAdmin) # admin.site.register(Notification, NotificationAdmin)

View File

@ -1,68 +0,0 @@
# Generated by Django 4.2 on 2023-04-23 06:42
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
("people", "0008_alter_gymnast_orientation"),
("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.PositiveSmallIntegerField(
choices=[
(0, "Chrono"),
(1, "Accident"),
(2, "LearnedSkill"),
(3, "Plan"),
(4, "Point"),
(5, "MindState"),
(6, "GymnastHasRoutine"),
(7, "NumberOfRoutineDone"),
(8, "HeightWeight"),
(9, "Note"),
(10, "Intensity"),
(11, "SeasonInformation"),
]
),
),
(
"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")},
},
),
]

View File

@ -58,17 +58,17 @@ class Profile(models.Model):
return "%s %s" % (self.user.first_name, self.user.last_name) return "%s %s" % (self.user.first_name, self.user.last_name)
class Notification(models.Model): # class Notification(models.Model):
"""Classe permettant de définir quelles notification un utilisateur veut recevoir.""" # """Classe permettant de définir quelles notification un utilisateur veut recevoir."""
class Meta: # class Meta:
unique_together = ("user", "gymnast", "functionality") # unique_together = ("user", "gymnast", "functionality")
user = models.ForeignKey(User, on_delete=models.CASCADE) # user = models.ForeignKey(User, on_delete=models.CASCADE)
gymnast = models.ForeignKey( # gymnast = models.ForeignKey(
Gymnast, on_delete=models.CASCADE, related_name="notifications" # Gymnast, on_delete=models.CASCADE, related_name="notifications"
) # )
functionality = models.PositiveSmallIntegerField(choices=FUNCTIONALITY_CHOICES) # functionality = models.PositiveSmallIntegerField(choices=FUNCTIONALITY_CHOICES)
def __str__(self): # def __str__(self):
return f"{self.user} will be notified for add/update {self.functionality} to {self.gymnast}" # return f"{self.user} will be notified for add/update {self.functionality} to {self.gymnast}"

View File

@ -7,11 +7,11 @@ from . import views
profile_urlpatterns = [ profile_urlpatterns = [
path(r"edit/", views.profile_update, name="profile_update"), path(r"edit/", views.profile_update, name="profile_update"),
path( # path(
r"notification_update/", views.notification_update, name="notification_update" # r"notification_update/", views.notification_update, name="notification_update"
), # ),
path(r"notification_add/", views.notification_add, name="notification_add"), # path(r"notification_add/", views.notification_add, name="notification_add"),
path( # path(
r"notification_remove/", views.notification_remove, name="notification_remove" # r"notification_remove/", views.notification_remove, name="notification_remove"
), # ),
] ]

View File

@ -8,7 +8,7 @@ from django.views.decorators.http import require_http_methods
from django.urls import reverse from django.urls import reverse
from .forms import ProfileForm from .forms import ProfileForm
from .models import Profile, Notification, FUNCTIONALITY_CHOICES from .models import Profile # , Notification, FUNCTIONALITY_CHOICES
from jarvis.people.models import Gymnast from jarvis.people.models import Gymnast
@ -44,50 +44,50 @@ def profile_update(request):
return render(request, "update.html", context) return render(request, "update.html", context)
@login_required # @login_required
@require_http_methods(["GET", "POST"]) # @require_http_methods(["GET", "POST"])
def notification_update(request): # def notification_update(request):
gymnast_list = Gymnast.objects.filter(is_active=True) # gymnast_list = Gymnast.objects.filter(is_active=True)
context = { # context = {
"gymnast_list": gymnast_list, # "gymnast_list": gymnast_list,
"functionality_list": FUNCTIONALITY_CHOICES, # "functionality_list": FUNCTIONALITY_CHOICES,
} # }
return render(request, "notification_update.html", context) # return render(request, "notification_update.html", context)
@require_http_methods(["POST"]) # @require_http_methods(["POST"])
def notification_add(request): # def notification_add(request):
""" # """
Ajoute une demande de notification # Ajoute une demande de notification
""" # """
gymnast_id = request.POST.get("gymnast_id", None) # gymnast_id = request.POST.get("gymnast_id", None)
notification_id = request.POST.get("notification_id", None) # notification_id = request.POST.get("notification_id", None)
gymnast = get_object_or_404(Gymnast, pk=gymnast_id) # gymnast = get_object_or_404(Gymnast, pk=gymnast_id)
row, created = Notification.objects.get_or_create( # row, created = Notification.objects.get_or_create(
user=request.user, gymnast=gymnast, functionality=notification_id # user=request.user, gymnast=gymnast, functionality=notification_id
) # )
if created: # if created:
return HttpResponse(200, (row, created)) # devrait être un 201 # return HttpResponse(200, (row, created)) # devrait être un 201
else: # else:
return HttpResponse(400, (row, created)) # return HttpResponse(400, (row, created))
@require_http_methods(["POST"]) # @require_http_methods(["POST"])
def notification_remove(request): # def notification_remove(request):
""" # """
Supprime une demande de notification # Supprime une demande de notification
""" # """
gymnast_id = request.POST.get("gymnast_id", None) # gymnast_id = request.POST.get("gymnast_id", None)
notification_id = request.POST.get("notification_id", None) # notification_id = request.POST.get("notification_id", None)
try: # try:
Notification.objects.get( # Notification.objects.get(
user=request.user, gymnast=gymnast_id, functionality=notification_id # user=request.user, gymnast=gymnast_id, functionality=notification_id
).delete() # ).delete()
except Exception: # except Exception:
return HttpResponse(409) # return HttpResponse(409)
return HttpResponse(200) # return HttpResponse(200)

View File

@ -0,0 +1,8 @@
from django import template
register = template.Library()
@register.filter
def get_item(dictionary, key):
return dictionary.get(key)