Skip to content

Commit

Permalink
Merge pull request #106 from luftdaten-at/52-kampagnenmanager-mit-ber…
Browse files Browse the repository at this point in the history
…echtigungen

52 kampagnenmanager mit berechtigungen
  • Loading branch information
n11ik authored Jan 10, 2025
2 parents c23cd63 + e7ed92c commit e564928
Show file tree
Hide file tree
Showing 28 changed files with 565 additions and 244 deletions.
2 changes: 1 addition & 1 deletion app/accounts/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from django.views import generic

from .forms import CustomUserCreationForm
from campaign.models import OrganizationInvitation
from organizations.models import OrganizationInvitation


class SignupPageView(generic.CreateView):
Expand Down
23 changes: 3 additions & 20 deletions app/campaign/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@
from django.utils.translation import gettext_lazy as _
from django.contrib.admin.widgets import FilteredSelectMultiple

from .models import Campaign, Organization, Room
from organizations.models import Organization

from .models import Campaign, Room
from devices.models import Device
from accounts.models import CustomUser

Expand Down Expand Up @@ -34,10 +36,6 @@ class Meta:

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)

# Initialize form helper
self.helper = FormHelper(self)
self.helper.add_input(Submit('submit', 'Save'))
Expand All @@ -46,21 +44,6 @@ def __init__(self, *args, **kwargs):
self.fields['start_date'].input_formats = ('%Y-%m-%dT%H:%M',)
self.fields['end_date'].input_formats = ('%Y-%m-%dT%H:%M',)

def save(self, commit=True):
# Get the instance but don't save to the database yet
campaign = super().save(commit=False)

# Set the `public` field to False
campaign.public = False
campaign.owner = self.user
campaign.organization = self.user.organizations.first()
campaign.save()
campaign.users.add(self.user)

# Save to the database if commit is True
campaign.save()

return campaign

class CampaignUserForm(forms.ModelForm):
users = (forms.ModelMultipleChoiceField(label='',
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Generated by Django 5.1.2 on 2025-01-08 15:17

import django.db.models.deletion
from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('campaign', '0008_alter_organizationinvitation_expiring_date'),
('devices', '0012_alter_device_current_organization'),
('organizations', '0001_initial'),
]

operations = [
migrations.RemoveField(
model_name='organization',
name='owner',
),
migrations.RemoveField(
model_name='organization',
name='users',
),
migrations.AlterField(
model_name='campaign',
name='organization',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='campaigns', to='organizations.organization'),
),
migrations.DeleteModel(
name='OrganizationInvitation',
),
migrations.DeleteModel(
name='Organization',
),
]
41 changes: 1 addition & 40 deletions app/campaign/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ class Campaign(models.Model):
blank=True
)
organization = models.ForeignKey(
'Organization',
'organizations.Organization',
on_delete=models.CASCADE,
related_name='campaigns',
null = True
Expand All @@ -45,42 +45,3 @@ class Meta:

def __str__(self):
return f'{self.name} in {self.campaign}'


class Organization(models.Model):
"""
Represents an organization that owns campaigns and users can be part of.
"""
name = models.CharField(max_length=255)
description = models.TextField(null=True, blank=True)
users = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='organizations')

owner = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name='owned_organizations'
)

def __str__(self):
return self.name


class OrganizationInvitation(models.Model):
"""
if email e gets invited to a campaign
but there is no usesr with email e
an invitation is created.
as soon as users u with email e registers
user u gets added to all organizations where there
exists an invitation. -> invitations get deleted
"""
expiring_date = models.DateField(null=True)
email = models.EmailField()
organization = models.ForeignKey('Organization', on_delete=models.CASCADE, related_name='invitations')

class Meta:
unique_together = ('email', 'organization')

def __str__(self):
return f'{self.email} {self.organization.name} {self.expiring_date}'
10 changes: 3 additions & 7 deletions app/campaign/urls.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from django.urls import path
from .views import *
from campaign.views import *

urlpatterns = [
path('', CampaignsHomeView.as_view(), name='campaigns-home'),
Expand All @@ -13,10 +13,6 @@
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'),
path('rooms/create/<int:campaign_pk>/', RoomCreateView.as_view(), name='room-create'),
path('organizations/my', OrganizationsView.as_view(), name='organizations-my'),
path('organizations/create', OrganizationCreateView.as_view(), name='organizations-create'),
path('organizations/<int:pk>', OrganizationDetailView.as_view(), name='organizations-detail'),
path('organizations/<int:org_id>/remove-user/<int:user_id>', remove_user_from_organization, name='remove-user-from-organization'),
path('organizations/<int:org_id>/invite-user', invite_user_to_organization, name='invite-user-to-organization'),
path('<str:campaign_pk>/rooms/create/', RoomCreateView.as_view(), name='room-create'),
path('<str:campaign_pk>/rooms/<int:pk>/update/', RoomUpdateView.as_view(), name='room-update'),
]
Loading

0 comments on commit e564928

Please sign in to comment.