Skip to content

Commit

Permalink
added ParticipantsAddDevicesView
Browse files Browse the repository at this point in the history
  • Loading branch information
Nik Sauer committed Jan 21, 2025
1 parent 71618b6 commit fb9108e
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 2 deletions.
56 changes: 55 additions & 1 deletion app/campaign/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -137,4 +137,58 @@ def save(self, commit=True):
# Save the room
room.save()

return room
return room


class UserDeviceForm(forms.ModelForm):
current_devices = (forms.ModelMultipleChoiceField(label='',
queryset=Device.objects.none(),
widget=FilteredSelectMultiple(
verbose_name='Devices',
is_stacked=False,
),
required=False))

class Meta:
model = Room
fields = ['current_devices']

class Media:
css = {
'all': ('/static/admin/css/widgets.css', '/static/css/adminoverrides.css', ),
} # custom css

def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)

# Get the user from the passed arguments (initial data)
self.user = kwargs.get('initial', {}).get('user', None)
self.campaign = kwargs.get('initial', {}).get('campaign', None)

# query set should be a list of all devices in the same organisation as the room is
self.fields['current_devices'].queryset = self.campaign.organization.current_devices.all()
self.initial['current_devices'] = self.user.current_devices.all()

# Initialize form helper
self.helper = FormHelper(self)
self.helper.add_input(Submit('submit', 'Save'))

def save(self, commit=True):
# Save the room instance
user = super().save(commit=commit)

# Get the selected devices
selected_devices = self.cleaned_data['current_devices']

# Update the ForeignKey for the devices
if commit:
# Unassign the devices previously linked to the room
Device.objects.filter(current_user=user).update(current_user=None)

# Assign the selected devices to the current room
selected_devices.update(current_user=user)

# Save the room
user.save()

return user
1 change: 1 addition & 0 deletions app/campaign/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
path('<str:pk>/delete/', CampaignsDeleteView.as_view(), name='campaigns-delete'),
path('<str:pk>/add-user/', CampaignAddUserView.as_view(), name='campaign-add-user'),
path('<str:pk>/participants/<int:user>/', ParticipantDetailView.as_view(), name='participants-detail'),
path('<str:campaign_pk>/participants/<int:pk>/add-devices', ParticipantsAddDevicesView.as_view(), name='user-add-device'),
path('rooms/<int:pk>/', RoomDetailView.as_view(), name='room-detail'),
path('rooms/<int:pk>/delete/', RoomDeleteView.as_view(), name='room-delete'),
path('rooms/<int:pk>/add-device/', RoomAddDeviceView.as_view(),name='room-add-device'),
Expand Down
27 changes: 26 additions & 1 deletion app/campaign/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@


from .models import Campaign, Room
from .forms import CampaignForm, CampaignUserForm, RoomDeviceForm
from .forms import CampaignForm, CampaignUserForm, RoomDeviceForm, UserDeviceForm
from accounts.models import CustomUser
from main.enums import Dimension, SensorModel

Expand Down Expand Up @@ -442,3 +442,28 @@ def dispatch(self, request, *args, **kwargs):

def get_success_url(self):
return reverse_lazy('campaigns-detail', kwargs={'pk': self.campaign.pk})


class ParticipantsAddDevicesView(LoginRequiredMixin, UpdateView):
model = CustomUser
form_class = UserDeviceForm
template_name = 'campaigns/participants/add_device.html'

def get_success_url(self):
return reverse_lazy('campaigns-detail', kwargs={'pk': self.campaign.pk})

def dispatch(self, request, *args, **kwargs):
self.campaign = Campaign.objects.get(pk=kwargs['campaign_pk'])

if self.request.user.is_superuser:
return super().dispatch(request, *args, **kwargs)
if self.request.user != self.campaign.owner:
raise PermissionDenied("You are not allowed to create a Room")

return super().dispatch(request, *args, **kwargs)

def get_initial(self):
initial = super().get_initial()
initial['campaign'] = self.campaign
initial['user'] = self.object
return initial
1 change: 1 addition & 0 deletions app/templates/campaigns/detail.html
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ <h3 class="mb-0">{% trans "Participants" %}</h3>
<td>{{ user.email }}</td>
<td>
<div class="text-end d-flex flex-column flex-md-row gap-2 justify-content-end">
<a href="{% url 'user-add-device' campaign.pk user.pk %}" class="btn btn-outline-primary btn-sm">{% trans "Add Device" %}</a>
<a href="{% url 'participants-detail' campaign.pk user.pk %}" class="btn btn-primary btn-sm">
<i class="bi bi-eye"></i>
<span class="d-none d-sm-inline">{% trans "Details" %}</span>
Expand Down

0 comments on commit fb9108e

Please sign in to comment.