mirror of
https://github.com/ae-utbm/sith.git
synced 2025-07-10 20:09:25 +00:00
room management views
This commit is contained in:
33
reservation/forms.py
Normal file
33
reservation/forms.py
Normal file
@ -0,0 +1,33 @@
|
||||
from django import forms
|
||||
|
||||
from club.widgets.ajax_select import AutoCompleteSelectClub
|
||||
from core.models import User
|
||||
from reservation.models import Room
|
||||
|
||||
|
||||
class RoomCreateForm(forms.ModelForm):
|
||||
required_css_class = "required"
|
||||
error_css_class = "error"
|
||||
|
||||
class Meta:
|
||||
model = Room
|
||||
fields = ["name", "club", "location", "description"]
|
||||
widgets = {"club": AutoCompleteSelectClub}
|
||||
|
||||
|
||||
class RoomUpdateForm(forms.ModelForm):
|
||||
required_css_class = "required"
|
||||
error_css_class = "error"
|
||||
|
||||
class Meta:
|
||||
model = Room
|
||||
fields = ["name", "club", "location", "description"]
|
||||
widgets = {"club": AutoCompleteSelectClub}
|
||||
|
||||
def __init__(self, *args, request_user: User, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
if not request_user.has_perm("reservation.change_room"):
|
||||
# if the user doesn't have the global edition permission
|
||||
# (i.e. it's a club board member, but not a sith admin)
|
||||
# some fields aren't editable
|
||||
del self.fields["club"]
|
27
reservation/templates/reservation/macros.jinja
Normal file
27
reservation/templates/reservation/macros.jinja
Normal file
@ -0,0 +1,27 @@
|
||||
{% macro room_detail(room, can_edit, can_delete) %}
|
||||
<div class="card card-row card-row-m">
|
||||
<div class="card-content">
|
||||
<strong class="card-title">{{ room.name }}</strong>
|
||||
<em>{{ room.get_location_display() }}</em>
|
||||
<p>{{ room.description|truncate(250) }}</p>
|
||||
</div>
|
||||
<div class="card-top-left">
|
||||
{% if can_edit %}
|
||||
<a
|
||||
class="btn btn-grey btn-no-text"
|
||||
href="{{ url("reservation:room_edit", room_id=room.id) }}"
|
||||
>
|
||||
<i class="fa fa-edit"></i>
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if can_delete %}
|
||||
<a
|
||||
class="btn btn-red btn-no-text"
|
||||
href="{{ url("reservation:room_delete", room_id=room.id) }}"
|
||||
>
|
||||
<i class="fa fa-trash"></i>
|
||||
</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endmacro %}
|
13
reservation/urls.py
Normal file
13
reservation/urls.py
Normal file
@ -0,0 +1,13 @@
|
||||
from django.urls import path
|
||||
|
||||
from reservation.views import (
|
||||
RoomCreateView,
|
||||
RoomDeleteView,
|
||||
RoomUpdateView,
|
||||
)
|
||||
|
||||
urlpatterns = [
|
||||
path("room/create/", RoomCreateView.as_view(), name="room_create"),
|
||||
path("room/<int:room_id>/edit", RoomUpdateView.as_view(), name="room_edit"),
|
||||
path("room/<int:room_id>/delete", RoomDeleteView.as_view(), name="room_delete"),
|
||||
]
|
@ -1 +1,51 @@
|
||||
# Create your views here.
|
||||
|
||||
from django.contrib.auth.mixins import PermissionRequiredMixin
|
||||
from django.contrib.messages.views import SuccessMessageMixin
|
||||
from django.urls import reverse_lazy
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from django.views.generic import CreateView, DeleteView, TemplateView, UpdateView
|
||||
|
||||
from club.models import Club
|
||||
from core.auth.mixins import CanEditMixin
|
||||
from core.views import UseFragmentsMixin
|
||||
from core.views.mixins import FragmentMixin
|
||||
from reservation.forms import ReservationForm, RoomCreateForm, RoomUpdateForm
|
||||
from reservation.models import ReservationSlot, Room
|
||||
|
||||
|
||||
class RoomCreateView(SuccessMessageMixin, PermissionRequiredMixin, CreateView):
|
||||
form_class = RoomCreateForm
|
||||
template_name = "core/create.jinja"
|
||||
success_message = _("%(name)s was created successfully")
|
||||
permission_required = "reservation.add_room"
|
||||
|
||||
def get_initial(self):
|
||||
init = super().get_initial()
|
||||
if "club" in self.request.GET:
|
||||
club_id = self.request.GET["club"]
|
||||
if club_id.isdigit() and int(club_id) > 0:
|
||||
init["club"] = Club.objects.filter(id=int(club_id)).first()
|
||||
return init
|
||||
|
||||
|
||||
class RoomUpdateView(SuccessMessageMixin, CanEditMixin, UpdateView):
|
||||
model = Room
|
||||
pk_url_kwarg = "room_id"
|
||||
form_class = RoomUpdateForm
|
||||
template_name = "core/edit.jinja"
|
||||
success_message = _("%(name)s was updated successfully")
|
||||
|
||||
def get_form_kwargs(self):
|
||||
return super().get_form_kwargs() | {"request_user": self.request.user}
|
||||
|
||||
def get_success_url(self):
|
||||
return self.request.path
|
||||
|
||||
|
||||
class RoomDeleteView(PermissionRequiredMixin, DeleteView):
|
||||
model = Room
|
||||
pk_url_kwarg = "room_id"
|
||||
template_name = "core/delete_confirm.jinja"
|
||||
success_url = reverse_lazy("reservation:room_list")
|
||||
permission_required = "reservation.delete_room"
|
||||
|
Reference in New Issue
Block a user