Room reservation - #1092
Conversation
926122e to
3ebd4b1
Compare
3ebd4b1 to
7eb1fab
Compare
b99fbc0 to
ddf3382
Compare
be1f35b to
03a04fc
Compare
438b632 to
cc5ab90
Compare
cc5ab90 to
6d21ecb
Compare
6d21ecb to
5b29250
Compare
04e2e00 to
0baaf69
Compare
klmp200
left a comment
There was a problem hiding this comment.
Petit début de review parce que j'ai un peu de temps, je m'y remet plus tard
| */ | ||
| async fetchResources() { | ||
| const res = await reservableroomFetchRooms(); | ||
| return res.data.map((i) => Object.assign(i, { title: i.name, group: i.location })); |
There was a problem hiding this comment.
C'est déjà le cas. Tu ne vois le lien et tu n'as le droit d'accéder à la vue que si tu a la permission de voir des réservations. Tu as peut-être oublié de générer les données de test.
There was a problem hiding this comment.
Du coup, tu peux avoir le droit de voir la page mais pas forcément le droit de voir les salles, c'est étrange
There was a problem hiding this comment.
C'est même pire que ça. J'ai pris krophil qui est président troll (qui possède la jolly), il a la permission de réservation et pourtant on voit aucune salle dans le tableau.
Il y a un truc que je comprend pas
| <i class="fa-solid fa-magnifying-glass fa-xl"></i> | ||
| <a href="{{ url("matmat:search_clear") }}">{% trans %}Matmatronch{% endtrans %}</a> | ||
| </li> | ||
| {% if user.has_perm("reservation.view_reservationslot") %} |
There was a problem hiding this comment.
Mhh, ça a pas vraiment l'air de fonctionner cette histoire
J'ai connecté plusieurs users et on arrive juste sur une page pétée parce que l'api renvoie une 403 dessus
There was a problem hiding this comment.
Ok, j'ai trouvé, d'après le populate, tous les cotisants ont cette perm.
En prod ce sera le cas ou pas ?
There was a problem hiding this comment.
Oui
Après, c'est comme toutes les autres perms de django, on peut choisir directement dans l'interface admin quels groupes ont quelles perms
dfb545b to
bfc30f4
Compare
bfc30f4 to
7655200
Compare
7655200 to
4cc9339
Compare
b8bf684 to
03cdad5
Compare
03cdad5 to
e5a2d1b
Compare
e5a2d1b to
21dc955
Compare
21dc955 to
753b219
Compare
| <i class="fa-solid fa-magnifying-glass fa-xl"></i> | ||
| <a href="{{ url("matmat:search_clear") }}">{% trans %}Matmatronch{% endtrans %}</a> | ||
| </li> | ||
| {% if user.has_perm("reservation.view_reservationslot") %} |
There was a problem hiding this comment.
Ok, j'ai trouvé, d'après le populate, tous les cotisants ont cette perm.
En prod ce sera le cas ou pas ?
| ) | ||
| if self.id is not None: | ||
| overlapping = overlapping.exclude(id=self.id) | ||
| if overlapping.exists(): |
There was a problem hiding this comment.
C'est un problème de lt/gt au lieu de lte/gte
| */ | ||
| async fetchResources() { | ||
| const res = await reservableroomFetchRooms(); | ||
| return res.data.map((i) => Object.assign(i, { title: i.name, group: i.location })); |
There was a problem hiding this comment.
Du coup, tu peux avoir le droit de voir la page mais pas forcément le droit de voir les salles, c'est étrange
| resources: this.fetchResources, | ||
| events: this.fetchEvents, | ||
| select: this.selectFreeSlot, | ||
| selectOverlap: false, |
There was a problem hiding this comment.
On peut pas déplacer entre les salles la réservation, il y a une option pour ça ?
| {% endfor %} | ||
| </div> | ||
| {% endif %} | ||
| <form |
There was a problem hiding this comment.
Utilisation intéressante du formulaire.
Par contre, si le but c'était juste d'ajouter des attributs, on peut le faire directement dans un formulaire django https://www.geeksforgeeks.org/python/how-to-add-html-attributes-to-input-fields-in-django-forms/#methods-to-add-html-attributes
There was a problem hiding this comment.
Les attributs Alpine, je préfère les mettre dans le template. C'est pas juste un placeholder ou un autre attribut qui marche bien tout seul. L'attribut Alpine, s'il est là, c'est pour interagir avec autre chose. Si on définit les variables Alpine à plusieurs endroits différents, ça devient difficile à suivre.
| verbose_name=_("reserved room"), | ||
| ) | ||
| author = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name=_("author")) | ||
| comment = models.TextField(_("comment"), blank=True, default="") |
There was a problem hiding this comment.
Le commentaire, j'ai trouvé aucun moyen de le voir, même pas un petit tooltip, rien :/
| href="{{ url("reservation:room_create") }}?club={{ object.id }}" | ||
| class="btn btn-blue" | ||
| > | ||
| {% trans %}Add a room{% endtrans %} |
| _("site"), | ||
| blank=True, | ||
| choices=[ | ||
| ("BELFORT", "Belfort"), |
There was a problem hiding this comment.
Ptet un peu hardcodé quand même :/
Ça devrais pas changer mais ptet au moins mettre ça dans les settings, non ?
| path("room/<int:room_id>/delete", RoomDeleteView.as_view(), name="room_delete"), | ||
| path( | ||
| "fragment/reservation", ReservationFragment.as_view(), name="make_reservation" | ||
| ), |
There was a problem hiding this comment.
Une page qui liste toutes les salles ce serait pas de refus, c'est vraiment difficile de s'y retrouver.
Mais ça peut être fait plus tard
There was a problem hiding this comment.
La page qui liste toutes les salles, c'est la page des réservations
| private locale = "en"; | ||
| private canEditSlot = false; | ||
| private canBookSlot = false; | ||
| private canDeleteSlot = false; |
There was a problem hiding this comment.
J'ai toujours pas trouvé comment delete un slot :/
753b219 to
f4a70e0
Compare





Fonctionnalité pour permettre aux clubs de gérer des salles que les gens peuvent réserver.
Aperçu
Le coeur de la fonctionnalité est le planning de réservation :
Ce planning est accessible depuis les liens sur la page d'accueil :
Chaque salle est liée à un site (Belfort, Sev ou Montbé) et gérée par un club.
Un club peut gérer ses salles depuis ses outils
Les salles sont réservables. Une réservation possède un auteur (la personne qui a fait la réservation), une salle, une heure de début et une heure de fin. Comme on peut le voir plus haut, il y a marqué en-dessous du planning qu'on peut créer une réservation en sélectionnant une plage horaire. Lorsqu'on le fait, un formulaire apparait avec les champs appropriés pré-remplis.
Si on a les permissions requises, on peut également déplacer les réservations directement par glisser-déposer sur le planning.
Modération et permission
Il n'y a pas (encore) de système de modération des événements. La PR est déjà assez grosse comme ça, je préfère passer une gestion plus fine des permissions dans une autre mise-à-jour plus tard.
Pour le moment, les réservations sont créables avec la permission globale
reservation.add_reservationslot, qui sera attribuée aux respos sites (et éventuellement au bureau AE dans son ensemble aussi).Les réservations sont modifiables avec la permission
reservation.change_reservationslot, attribuée aux respos site.Même avec les permissions requises, les réservations passées ne sont ni créables, ni modifiables. Une réservation dont l'heure de début se trouve avant le moment présent est donc gelée.