merge ad- and mail-groups into one

This commit is contained in:
Andreas Zweili 2022-03-30 23:52:44 +02:00
parent 388b9bbadb
commit cda6fc53fd
17 changed files with 80 additions and 356 deletions

View File

@ -3,12 +3,10 @@ from django.contrib import admin
from licenses.models import LicenseWithUser from licenses.models import LicenseWithUser
from .models import ( from .models import (
AdGroup, Group,
MailAlias, MailAlias,
MailGroup,
User, User,
UserInAdGroup, UserInGroup,
UserInMailGroup,
) )
@ -18,18 +16,12 @@ class LicenseWithUserInLine(admin.StackedInline):
verbose_name_plural = "Licenses" verbose_name_plural = "Licenses"
class AdGroupInLine(admin.StackedInline): class GroupInLine(admin.StackedInline):
model = UserInAdGroup model = UserInGroup
extra = 0 extra = 0
verbose_name_plural = "AD Groups" verbose_name_plural = "AD Groups"
class MailGroupInLine(admin.StackedInline):
model = UserInMailGroup
extra = 0
verbose_name_plural = "Mail Groups"
class MailAliasInLine(admin.StackedInline): class MailAliasInLine(admin.StackedInline):
model = MailAlias model = MailAlias
extra = 0 extra = 0
@ -39,16 +31,13 @@ class MailAliasInLine(admin.StackedInline):
class UserAdmin(admin.ModelAdmin): class UserAdmin(admin.ModelAdmin):
list_display = ("name", "customer", "enabled") list_display = ("name", "customer", "enabled")
inlines = ( inlines = (
AdGroupInLine, GroupInLine,
MailGroupInLine,
MailAliasInLine, MailAliasInLine,
LicenseWithUserInLine, LicenseWithUserInLine,
) )
admin.site.register(AdGroup) admin.site.register(Group)
admin.site.register(MailAlias) admin.site.register(MailAlias)
admin.site.register(MailGroup)
admin.site.register(User, UserAdmin) admin.site.register(User, UserAdmin)
admin.site.register(UserInAdGroup) admin.site.register(UserInGroup)
admin.site.register(UserInMailGroup)

View File

@ -1,3 +1,3 @@
from .user import User, UserInAdGroup, UserInMailGroup from .user import User, UserInGroup
from .groups import AdGroup, Group, MailGroup from .groups import Group
from .mailalias import MailAlias from .mailalias import MailAlias

View File

@ -1,42 +1,17 @@
from django.db import models from django.db import models
from model_utils.managers import InheritanceManager
from customers.models import Customer from customers.models import Customer
class Group(models.Model): class Group(models.Model):
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
customer = models.ForeignKey(Customer, on_delete=models.CASCADE) customer = models.ForeignKey(Customer, on_delete=models.CASCADE)
mail_address = models.EmailField()
objects = InheritanceManager()
class Meta:
abstract = True
def __str__(self): def __str__(self):
return self.name return self.name
class AdGroup(Group):
class Meta:
ordering = ["name"]
verbose_name_plural = "AD Groups"
def get_absolute_url(self): def get_absolute_url(self):
from django.urls import reverse from django.urls import reverse
return reverse("ad_group", args=[str(self.id)]) return reverse("group", args=[str(self.id)])
class MailGroup(Group):
mail_address = models.EmailField()
class Meta:
ordering = ["name"]
verbose_name_plural = "Mail Groups"
def get_absolute_url(self):
from django.urls import reverse
return reverse("mail_group", args=[str(self.id)])

View File

@ -1,6 +1,6 @@
from django.db import models from django.db import models
from customers.models import Customer from customers.models import Customer
from .groups import AdGroup, MailGroup from .groups import Group
class User(models.Model): class User(models.Model):
@ -13,8 +13,7 @@ class User(models.Model):
enabled = models.BooleanField() enabled = models.BooleanField()
description = models.TextField(blank=True) description = models.TextField(blank=True)
customer = models.ForeignKey(Customer, on_delete=models.CASCADE) customer = models.ForeignKey(Customer, on_delete=models.CASCADE)
ad_groups = models.ManyToManyField(AdGroup, through="UserInAdGroup") groups = models.ManyToManyField(Group, through="UserInGroup")
mail_groups = models.ManyToManyField(MailGroup, through="UserInMailGroup")
class Meta: class Meta:
ordering = ["name"] ordering = ["name"]
@ -28,11 +27,6 @@ class User(models.Model):
return reverse("user", args=[str(self.id)]) return reverse("user", args=[str(self.id)])
class UserInAdGroup(models.Model): class UserInGroup(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE) user = models.ForeignKey(User, on_delete=models.CASCADE)
group = models.ForeignKey(AdGroup, on_delete=models.CASCADE) group = models.ForeignKey(Group, on_delete=models.CASCADE)
class UserInMailGroup(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
group = models.ForeignKey(MailGroup, on_delete=models.CASCADE)

View File

@ -3,8 +3,7 @@ from django_tables2.utils import A
from core.tables import CoreTable from core.tables import CoreTable
from .models import AdGroup from .models import Group
from .models import MailGroup
from .models import User from .models import User
@ -15,8 +14,7 @@ class UsersTable(CoreTable):
attrs={"td": {"class": "text-truncate", "style": "max-width: 150px;"}} attrs={"td": {"class": "text-truncate", "style": "max-width: 150px;"}}
) )
customer = tables.Column("Customer", linkify=True) customer = tables.Column("Customer", linkify=True)
ad_groups = tables.ManyToManyColumn() groups = tables.ManyToManyColumn()
mail_groups = tables.ManyToManyColumn()
delete = tables.LinkColumn( delete = tables.LinkColumn(
"user_delete", "user_delete",
text="delete", text="delete",
@ -33,12 +31,12 @@ class UsersTable(CoreTable):
model = User model = User
class AdGroupsTable(CoreTable): class GroupsTable(CoreTable):
id = tables.Column(visible=False) id = tables.Column(visible=False)
name = tables.Column("Ad Groups", linkify=True) name = tables.Column("Groups", linkify=True)
customer = tables.Column(visible=False) customer = tables.Column(visible=False)
action = tables.LinkColumn( action = tables.LinkColumn(
"ad_group_delete", "group_delete",
text="delete", text="delete",
args=[A("pk")], args=[A("pk")],
attrs={ attrs={
@ -50,25 +48,4 @@ class AdGroupsTable(CoreTable):
) )
class Meta(CoreTable.Meta): class Meta(CoreTable.Meta):
model = AdGroup model = Group
class MailGroupsTable(CoreTable):
id = tables.Column(visible=False)
name = tables.Column("Mail Groups", linkify=True)
mail_address = tables.EmailColumn(verbose_name="Mail Address")
customer = tables.Column(visible=False)
action = tables.LinkColumn(
"mail_group_delete",
text="delete",
args=[A("pk")],
attrs={
"a": {
"class": "delete material-icons",
}
},
orderable=False,
)
class Meta(CoreTable.Meta):
model = MailGroup

View File

@ -1,11 +1,11 @@
{% extends "core/base.html" %} {% extends "core/base.html" %}
{% block section_title %}Delete AD group{% endblock %} {% block section_title %}Delete Group{% endblock %}
{% block content %} {% block content %}
<div class="row"> <div class="row">
<form method="post">{% csrf_token %} <form method="post">{% csrf_token %}
<p>Are you sure you want to delete the AD group "{{ object }}"?</p> <p>Are you sure you want to delete the group "{{ object }}"?</p>
<button type="submit" class="btn btn-danger">Delete</button> <button type="submit" class="btn btn-danger">Delete</button>
<a href="{% url 'ad_groups' object.customer.pk %}" class="btn btn-primary">Cancel</a> <a href="{% url 'groups' object.customer.pk %}" class="btn btn-primary">Cancel</a>
<input type="hidden" id="previous_page" name="previous_page" value="/previous/page/url"> <input type="hidden" id="previous_page" name="previous_page" value="/previous/page/url">
</form> </form>
<script> <script>

View File

@ -3,10 +3,6 @@
{% block section_title %}{{ customer }} Groups{% endblock %} {% block section_title %}{{ customer }} Groups{% endblock %}
{% block content %} {% block content %}
<div class="table-responsive"> <div class="table-responsive">
{% render_table ad_groups %} {% render_table groups %}
</div>
<div class="table-responsive">
{% render_table mail_groups %}
</div> </div>
{% endblock %} {% endblock %}

View File

@ -1,16 +0,0 @@
{% extends "core/base.html" %}
{% block section_title %}Delete Mail group{% endblock %}
{% block content %}
<div class="row">
<form method="post">{% csrf_token %}
<p>Are you sure you want to delete the mail group "{{ object }}"?</p>
<button type="submit" class="btn btn-danger">Delete</button>
<a href="{% url 'mail_groups' object.customer.pk %}" class="btn btn-primary">Cancel</a>
<input type="hidden" id="previous_page" name="previous_page" value="/previous/page/url">
</form>
<script>
prev = document.getElementById("previous_page");
prev.value = document.referrer;
</script>
</div>
{% endblock %}

View File

@ -45,7 +45,7 @@
</div> </div>
</div> </div>
{% if ad_groups or mail_groups or mail_alias %} {% if groups or mail_alias %}
<div class="col"> <div class="col">
{% if mail_alias %} {% if mail_alias %}
<div class="card mt-3"> <div class="card mt-3">
@ -64,31 +64,15 @@
</div> </div>
{% endif %} {% endif %}
{% if ad_groups %} {% if groups %} <div class="card mt-3">
<div class="card mt-3"> <div class="card-header">Groups</div>
<div class="card-header">AD Groups</div>
<div class="card-body">
<table class="table table-bordered">
{% for group in ad_groups %}
<tr>
<td>{{ group.group }}</td>
</tr>
{% endfor %}
</table>
</div>
</div>
{% endif %}
{% if mail_groups %}
<div class="card mt-3">
<div class="card-header">Mail Groups</div>
<div class="card-body"> <div class="card-body">
<table class="table table-bordered"> <table class="table table-bordered">
<tr> <tr>
<th>Group Name</th> <th>Group Name</th>
<th>Address</th> <th>Address</th>
</tr> </tr>
{% for group in mail_groups %} {% for group in groups %}
<tr> <tr>
<td>{{ group.group }}</td> <td>{{ group.group }}</td>
<td>{{ group.group.mail_address }}</td> <td>{{ group.group.mail_address }}</td>

View File

@ -9,24 +9,22 @@ from customers.models import Customer
pytestmark = pytest.mark.django_db pytestmark = pytest.mark.django_db
def test_customer_ad_group_table_not_logged_in(): def test_customer_group_table_not_logged_in():
response = Client().get("/customer/1/groups/") response = Client().get("/customer/1/groups/")
assert response.status_code == 302 and "login" in response.url assert response.status_code == 302 and "login" in response.url
def test_customer_ad_group_table(create_admin_user): def test_customer_group_table(create_admin_user):
fixture = create_admin_user() fixture = create_admin_user()
customer = fixture["customer"] customer = fixture["customer"]
client = Client() client = Client()
client.login(username="pharma-admin", password="password") client.login(username="pharma-admin", password="password")
ad_group = mixer.blend("users.AdGroup", customer=customer) group = mixer.blend("users.Group", customer=customer)
response = client.get("/customer/" + str(customer.id) + "/groups/") response = client.get("/customer/" + str(customer.id) + "/groups/")
assert response.status_code == 200 and helper.in_content( assert response.status_code == 200 and helper.in_content(response, group)
response, ad_group
)
def test_customer_ad_group_table_no_group(create_admin_user): def test_customer_group_table_no_group(create_admin_user):
fixture = create_admin_user() fixture = create_admin_user()
customer = fixture["customer"] customer = fixture["customer"]
client = Client() client = Client()
@ -35,23 +33,23 @@ def test_customer_ad_group_table_no_group(create_admin_user):
assert response.status_code == 200 assert response.status_code == 200
def test_customer_ad_group_table_no_permission(create_admin_user): def test_customer_group_table_no_permission(create_admin_user):
create_admin_user() create_admin_user()
customer = Customer.objects.create(name="Water Corp.") customer = Customer.objects.create(name="Water Corp.")
client = Client() client = Client()
client.login(username="pharma-admin", password="password") client.login(username="pharma-admin", password="password")
mixer.blend("users.AdGroup", customer=customer) mixer.blend("users.Group", customer=customer)
response = client.get("/customer/" + str(customer.id) + "/groups/") response = client.get("/customer/" + str(customer.id) + "/groups/")
assert response.status_code == 403 assert response.status_code == 403
def test_customer_ad_group_table_multiple_groups(create_admin_user): def test_customer_group_table_multiple_groups(create_admin_user):
fixture = create_admin_user() fixture = create_admin_user()
customer = fixture["customer"] customer = fixture["customer"]
client = Client() client = Client()
client.login(username="pharma-admin", password="password") client.login(username="pharma-admin", password="password")
group1 = mixer.blend("users.AdGroup", customer=mixer.SELECT) group1 = mixer.blend("users.Group", customer=mixer.SELECT)
group2 = mixer.blend("users.AdGroup", customer=mixer.SELECT) group2 = mixer.blend("users.Group", customer=mixer.SELECT)
response = client.get("/customer/" + str(customer.id) + "/groups/") response = client.get("/customer/" + str(customer.id) + "/groups/")
assert ( assert (
response.status_code == 200 response.status_code == 200

View File

@ -1,60 +0,0 @@
import pytest
from django.test import Client
from mixer.backend.django import mixer
from core.tests import helper
from customers.models import Customer
pytestmark = pytest.mark.django_db
def test_customer_mail_group_table_not_logged_in():
response = Client().get("/customer/1/groups/")
assert response.status_code == 302 and "login" in response.url
def test_customer_mail_group_table(create_admin_user):
fixture = create_admin_user()
customer = fixture["customer"]
client = Client()
client.login(username="pharma-admin", password="password")
mail_group = mixer.blend("users.MailGroup", customer=customer)
response = client.get("/customer/" + str(customer.id) + "/groups/")
assert response.status_code == 200 and helper.in_content(
response, mail_group
)
def test_customer_mail_group_table_no_group(create_admin_user):
fixture = create_admin_user()
customer = fixture["customer"]
client = Client()
client.login(username="pharma-admin", password="password")
response = client.get("/customer/" + str(customer.id) + "/groups/")
assert response.status_code == 200
def test_customer_mail_group_table_no_permission(create_admin_user):
create_admin_user()
customer = Customer.objects.create(name="Water Corp.")
client = Client()
client.login(username="pharma-admin", password="password")
mixer.blend("users.MailGroup", customer=customer)
response = client.get("/customer/" + str(customer.id) + "/groups/")
assert response.status_code == 403
def test_customer_mail_group_table_multiple_groups(create_admin_user):
fixture = create_admin_user()
customer = fixture["customer"]
client = Client()
client.login(username="pharma-admin", password="password")
group1 = mixer.blend("users.MailGroup", customer=mixer.SELECT)
group2 = mixer.blend("users.MailGroup", customer=mixer.SELECT)
response = client.get("/customer/" + str(customer.id) + "/groups/")
assert (
response.status_code == 200
and helper.in_content(response, group1.name)
and helper.in_content(response, group2.name)
)

View File

@ -20,16 +20,13 @@ def test_customer_user_table(create_admin_user):
client = Client() client = Client()
client.login(username="pharma-admin", password="password") client.login(username="pharma-admin", password="password")
user = mixer.blend("users.User", customer=mixer.SELECT) user = mixer.blend("users.User", customer=mixer.SELECT)
ad_group = mixer.blend("users.AdGroup") group = mixer.blend("users.Group")
mail_group = mixer.blend("users.MailGroup") mixer.blend("users.UserInGroup", user=user, group=group)
mixer.blend("users.UserInAdGroup", user=user, group=ad_group)
mixer.blend("users.UserInMailGroup", user=user, group=mail_group)
response = client.get("/customer/" + str(customer.id) + "/users/") response = client.get("/customer/" + str(customer.id) + "/users/")
assert ( assert (
response.status_code == 200 response.status_code == 200
and helper.in_content(response, user.name) and helper.in_content(response, user.name)
and helper.in_content(response, ad_group) and helper.in_content(response, group)
and helper.in_content(response, mail_group)
and helper.in_content(response, user.primary_mail) and helper.in_content(response, user.primary_mail)
) )

View File

@ -8,45 +8,45 @@ from core.tests import helper
pytestmark = pytest.mark.django_db pytestmark = pytest.mark.django_db
def test_ad_group_detail_view_not_logged_in(): def test_group_detail_view_not_logged_in():
response = Client().get("/ad-group/1/") response = Client().get("/group/1/")
assert response.status_code == 302 and "login" in response.url assert response.status_code == 302 and "login" in response.url
def test_ad_group_detail_view(create_admin_user): def test_group_detail_view(create_admin_user):
create_admin_user() create_admin_user()
group = mixer.blend("users.AdGroup", customer=mixer.SELECT) group = mixer.blend("users.Group", customer=mixer.SELECT)
client = Client() client = Client()
client.login(username="pharma-admin", password="password") client.login(username="pharma-admin", password="password")
response = client.get("/ad-group/" + str(group.id) + "/") response = client.get("/group/" + str(group.id) + "/")
assert response.status_code == 200 and helper.in_content(response, group) assert response.status_code == 200 and helper.in_content(response, group)
def test_ad_group_detail_view_not_found(create_admin_user): def test_group_detail_view_not_found(create_admin_user):
create_admin_user() create_admin_user()
client = Client() client = Client()
client.login(username="pharma-admin", password="password") client.login(username="pharma-admin", password="password")
response = client.get("/ad-group/230/") response = client.get("/group/230/")
assert response.status_code == 404 assert response.status_code == 404
def test_ad_group_detail_view_no_permission(create_admin_user): def test_group_detail_view_no_permission(create_admin_user):
create_admin_user() create_admin_user()
customer = mixer.blend("customers.Customer") customer = mixer.blend("customers.Customer")
group = mixer.blend("users.AdGroup", customer=customer) group = mixer.blend("users.Group", customer=customer)
client = Client() client = Client()
client.login(username="pharma-admin", password="password") client.login(username="pharma-admin", password="password")
response = client.get("/ad-group/" + str(group.id) + "/") response = client.get("/group/" + str(group.id) + "/")
assert response.status_code == 404 assert response.status_code == 404
def test_ad_group_detail_view_with_user(create_admin_user): def test_group_detail_view_with_user(create_admin_user):
create_admin_user() create_admin_user()
group = mixer.blend("users.AdGroup", customer=mixer.SELECT) group = mixer.blend("users.Group", customer=mixer.SELECT)
client = Client() client = Client()
client.login(username="pharma-admin", password="password") client.login(username="pharma-admin", password="password")
response = client.get("/ad-group/" + str(group.id) + "/") response = client.get("/group/" + str(group.id) + "/")
user = mixer.blend("users.User", customer=mixer.SELECT) user = mixer.blend("users.User", customer=mixer.SELECT)
user.ad_groups.add(group) user.groups.add(group)
response = client.get("/ad-group/" + str(group.id) + "/") response = client.get("/group/" + str(group.id) + "/")
assert response.status_code == 200 and helper.in_content(response, user) assert response.status_code == 200 and helper.in_content(response, user)

View File

@ -1,52 +0,0 @@
import pytest
from mixer.backend.django import mixer
from django.test import Client
from core.tests import helper
pytestmark = pytest.mark.django_db
def test_mail_group_detail_view_not_logged_in():
response = Client().get("/mail-group/1/")
assert response.status_code == 302 and "login" in response.url
def test_mail_group_detail_view(create_admin_user):
create_admin_user()
group = mixer.blend("users.MailGroup", customer=mixer.SELECT)
client = Client()
client.login(username="pharma-admin", password="password")
response = client.get("/mail-group/" + str(group.id) + "/")
assert response.status_code == 200 and helper.in_content(response, group)
def test_mail_group_detail_view_not_found(create_admin_user):
create_admin_user()
client = Client()
client.login(username="pharma-admin", password="password")
response = client.get("/mail-group/230/")
assert response.status_code == 404
def test_mail_group_detail_view_no_permission(create_admin_user):
create_admin_user()
customer = mixer.blend("customers.Customer")
group = mixer.blend("users.MailGroup", customer=customer)
client = Client()
client.login(username="pharma-admin", password="password")
response = client.get("/mail-group/" + str(group.id) + "/")
assert response.status_code == 404
def test_mail_group_detail_view_with_user(create_admin_user):
create_admin_user()
group = mixer.blend("users.MailGroup", customer=mixer.SELECT)
client = Client()
client.login(username="pharma-admin", password="password")
response = client.get("/mail-group/" + str(group.id) + "/")
user = mixer.blend("users.User", customer=mixer.SELECT)
user.mail_groups.add(group)
response = client.get("/mail-group/" + str(group.id) + "/")
assert response.status_code == 200 and helper.in_content(response, user)

View File

@ -30,29 +30,16 @@ def test_user_detail_view_not_found(create_admin_user):
assert response.status_code == 404 assert response.status_code == 404
def test_user_detail_view_ad_group(create_admin_user): def test_user_detail_view_group(create_admin_user):
create_admin_user() create_admin_user()
user = mixer.blend("users.User", customer=mixer.SELECT) user = mixer.blend("users.User", customer=mixer.SELECT)
group = mixer.blend("users.AdGroup") group = mixer.blend("users.Group")
mixer.blend("users.UserInAdGroup", user=user, group=group) mixer.blend("users.UserInGroup", user=user, group=group)
client = Client() client = Client()
client.login(username="pharma-admin", password="password") client.login(username="pharma-admin", password="password")
response = client.get("/user/" + str(user.id) + "/") response = client.get("/user/" + str(user.id) + "/")
assert response.status_code == 200 and helper.in_content( assert response.status_code == 200 and helper.in_content(
response, "AD Groups" response, "Groups"
)
def test_user_detail_view_mail_group(create_admin_user):
create_admin_user()
user = mixer.blend("users.User", customer=mixer.SELECT)
group = mixer.blend("users.MailGroup")
mixer.blend("users.UserInMailGroup", user=user, group=group)
client = Client()
client.login(username="pharma-admin", password="password")
response = client.get("/user/" + str(user.id) + "/")
assert response.status_code == 200 and helper.in_content(
response, "Mail Groups"
) )

View File

@ -4,19 +4,11 @@ from . import views
urlpatterns = [ urlpatterns = [
path("customer/<int:pk>/groups/", views.groups_table_view, name="groups"), path("customer/<int:pk>/groups/", views.groups_table_view, name="groups"),
path("ad-group/<int:pk>/", views.ad_group_detail_view, name="ad_group"), path("group/<int:pk>/", views.group_detail_view, name="group"),
path( path(
"mail-group/<int:pk>/", views.mail_group_detail_view, name="mail_group" "delete/group/<int:pk>/",
), views.delete_group,
path( name="group_delete",
"delete/ad-group/<int:pk>/",
views.delete_ad_group,
name="ad_group_delete",
),
path(
"delete/mail-group/<int:pk>/",
views.delete_mail_group,
name="mail_group_delete",
), ),
path("customer/<int:pk>/users/", views.users_table_view, name="users"), path("customer/<int:pk>/users/", views.users_table_view, name="users"),
path("user/<int:pk>/", views.user_detail_view, name="user"), path("user/<int:pk>/", views.user_detail_view, name="user"),

View File

@ -16,14 +16,11 @@ from computers.models import Computer
from licenses.models import LicenseWithUser from licenses.models import LicenseWithUser
from .decorators import user_view_permission from .decorators import user_view_permission
from .models import AdGroup from .models import Group
from .models import MailGroup
from .models import MailAlias from .models import MailAlias
from .models import User from .models import User
from .models import UserInAdGroup from .models import UserInGroup
from .models import UserInMailGroup from .tables import GroupsTable
from .tables import AdGroupsTable
from .tables import MailGroupsTable
from .tables import UsersTable from .tables import UsersTable
@ -39,8 +36,7 @@ def users_table_view(request, pk):
@user_view_permission @user_view_permission
def user_detail_view(request, pk): def user_detail_view(request, pk):
user = get_object_or_404(User, pk=pk) user = get_object_or_404(User, pk=pk)
ad_groups = UserInAdGroup.objects.filter(user=user) groups = Group.objects.filter(user=user)
mail_groups = UserInMailGroup.objects.filter(user=user)
mail_alias = MailAlias.objects.filter(user=user) mail_alias = MailAlias.objects.filter(user=user)
computers = Computer.objects.filter(user=user) computers = Computer.objects.filter(user=user)
licenses = LicenseWithUser.objects.filter(user=user) licenses = LicenseWithUser.objects.filter(user=user)
@ -49,8 +45,7 @@ def user_detail_view(request, pk):
"users/user_details.html", "users/user_details.html",
{ {
"user": user, "user": user,
"ad_groups": ad_groups, "groups": groups,
"mail_groups": mail_groups,
"mail_alias": mail_alias, "mail_alias": mail_alias,
"computers": computers, "computers": computers,
"licenses": licenses, "licenses": licenses,
@ -69,34 +64,26 @@ class UserDeleteView(LoginRequiredMixin, DeleteView):
@customer_view_permission @customer_view_permission
def groups_table_view(request, pk): def groups_table_view(request, pk):
customer = get_object_or_404(Customer, pk=pk) customer = get_object_or_404(Customer, pk=pk)
ad_groups_table = AdGroupsTable( groups_table = GroupsTable(
utils.get_objects_for_customer( utils.get_objects_for_customer(
AdGroup, user=request.user, customer_pk=pk Group, user=request.user, customer_pk=pk
) )
) )
RequestConfig(request).configure(ad_groups_table) RequestConfig(request).configure(groups_table)
mail_groups_table = MailGroupsTable(
utils.get_objects_for_customer(
MailGroup, user=request.user, customer_pk=pk
)
)
RequestConfig(request).configure(mail_groups_table)
return TemplateResponse( return TemplateResponse(
request, request,
"groups/group_list.html", "groups/group_list.html",
{ {
"customer": customer.name, "customer": customer.name,
"ad_groups": ad_groups_table, "groups": groups_table,
"mail_groups": mail_groups_table,
}, },
) )
@login_required @login_required
def ad_group_detail_view(request, pk): def group_detail_view(request, pk):
group = utils.get_object_with_view_permission( group = utils.get_object_with_view_permission(
AdGroup, user=request.user, pk=pk Group, user=request.user, pk=pk
) )
users = group.user_set.all() users = group.user_set.all()
return render( return render(
@ -105,37 +92,13 @@ def ad_group_detail_view(request, pk):
@login_required @login_required
def mail_group_detail_view(request, pk): def delete_group(request, pk):
group = utils.get_object_with_view_permission( group = utils.get_object_with_view_permission(
MailGroup, user=request.user, pk=pk Group, user=request.user, pk=pk
)
users = group.user_set.all()
return render(
request, "groups/group_details.html", {"group": group, "users": users}
)
@login_required
def delete_ad_group(request, pk):
group = utils.get_object_with_view_permission(
AdGroup, user=request.user, pk=pk
) )
if request.method == "POST": if request.method == "POST":
group.delete() group.delete()
return redirect("ad_groups", pk=group.customer.pk) return redirect("groups", pk=group.customer.pk)
return TemplateResponse( return TemplateResponse(
request, "groups/ad_group_confirm_delete.html", {"object": group} request, "groups/group_confirm_delete.html", {"object": group}
)
@login_required
def delete_mail_group(request, pk):
group = utils.get_object_with_view_permission(
MailGroup, user=request.user, pk=pk
)
if request.method == "POST":
group.delete()
return redirect("mail_groups", pk=group.customer.pk)
return TemplateResponse(
request, "groups/mail_group_confirm_delete.html", {"object": group}
) )