parent
9fec85b688
commit
3878b5dbdb
@ -10,7 +10,7 @@ from django.core.exceptions import ObjectDoesNotExist
|
||||
|
||||
from konova.utils.message_templates import DEDUCTION_ADDED, REVOCATION_ADDED, DEDUCTION_REMOVED, DEDUCTION_EDITED, \
|
||||
REVOCATION_EDITED
|
||||
from user.models import User
|
||||
from user.models import User, Team
|
||||
from user.models import UserActionLogEntry
|
||||
from django.db import transaction
|
||||
from django import forms
|
||||
@ -37,6 +37,20 @@ class ShareModalForm(BaseModalForm):
|
||||
}
|
||||
)
|
||||
)
|
||||
team_select = forms.ModelMultipleChoiceField(
|
||||
label=_("Add team to share with"),
|
||||
label_suffix="",
|
||||
help_text=_("Multiple selection possible - You can only select teams which do not already have access."),
|
||||
required=False,
|
||||
queryset=Team.objects.all(),
|
||||
widget=autocomplete.ModelSelect2Multiple(
|
||||
url="share-team-autocomplete",
|
||||
attrs={
|
||||
"data-placeholder": _("Click for selection"),
|
||||
"data-minimum-input-length": 3,
|
||||
},
|
||||
),
|
||||
)
|
||||
user_select = forms.ModelMultipleChoiceField(
|
||||
label=_("Add user to share with"),
|
||||
label_suffix="",
|
||||
@ -97,6 +111,13 @@ class ShareModalForm(BaseModalForm):
|
||||
self.disable_form_field("users")
|
||||
|
||||
self._add_user_choices_to_field()
|
||||
self._add_teams_to_field()
|
||||
|
||||
def _add_teams_to_field(self):
|
||||
form_data = {
|
||||
"teams": []
|
||||
}
|
||||
self.load_initial_data(form_data)
|
||||
|
||||
def _add_user_choices_to_field(self):
|
||||
""" Transforms the instance's sharing users into a list for the form field
|
||||
|
@ -11,7 +11,7 @@ from dal_select2.views import Select2QuerySetView, Select2GroupQuerySetView
|
||||
from django.core.exceptions import ImproperlyConfigured
|
||||
|
||||
from konova.utils.message_templates import UNGROUPED
|
||||
from user.models import User
|
||||
from user.models import User, Team
|
||||
from django.db.models import Q
|
||||
|
||||
from codelist.models import KonovaCode
|
||||
@ -69,9 +69,8 @@ class InterventionAutocomplete(Select2QuerySetView):
|
||||
|
||||
|
||||
class ShareUserAutocomplete(Select2QuerySetView):
|
||||
""" Autocomplete for intervention entries
|
||||
""" Autocomplete for share with single users
|
||||
|
||||
Only returns entries that are accessible for the requesting user
|
||||
|
||||
"""
|
||||
def get_queryset(self):
|
||||
@ -93,6 +92,23 @@ class ShareUserAutocomplete(Select2QuerySetView):
|
||||
return qs
|
||||
|
||||
|
||||
class ShareTeamAutocomplete(Select2QuerySetView):
|
||||
""" Autocomplete for share with teams
|
||||
|
||||
"""
|
||||
def get_queryset(self):
|
||||
if self.request.user.is_anonymous:
|
||||
return Team.objects.none()
|
||||
if self.q:
|
||||
# Due to privacy concerns only a full username match will return the proper user entry
|
||||
qs = Team.objects.filter(
|
||||
Q(name__icontains=self.q)
|
||||
).order_by(
|
||||
"name"
|
||||
)
|
||||
return qs
|
||||
|
||||
|
||||
class KonovaCodeAutocomplete(Select2GroupQuerySetView):
|
||||
"""
|
||||
Provides simple autocomplete functionality for codes
|
||||
|
@ -20,7 +20,7 @@ from django.urls import path, include
|
||||
from konova.autocompletes import EcoAccountAutocomplete, \
|
||||
InterventionAutocomplete, CompensationActionCodeAutocomplete, BiotopeCodeAutocomplete, LawCodeAutocomplete, \
|
||||
RegistrationOfficeCodeAutocomplete, ConservationOfficeCodeAutocomplete, ProcessTypeCodeAutocomplete, \
|
||||
ShareUserAutocomplete, BiotopeExtraCodeAutocomplete, CompensationActionDetailCodeAutocomplete
|
||||
ShareUserAutocomplete, BiotopeExtraCodeAutocomplete, CompensationActionDetailCodeAutocomplete, ShareTeamAutocomplete
|
||||
from konova.settings import SSO_SERVER, SSO_PUBLIC_KEY, SSO_PRIVATE_KEY, DEBUG
|
||||
from konova.sso.sso import KonovaSSOClient
|
||||
from konova.views import logout_view, home_view
|
||||
@ -52,6 +52,7 @@ urlpatterns = [
|
||||
path("atcmplt/codes/reg-off", RegistrationOfficeCodeAutocomplete.as_view(), name="codes-registration-office-autocomplete"),
|
||||
path("atcmplt/codes/cons-off", ConservationOfficeCodeAutocomplete.as_view(), name="codes-conservation-office-autocomplete"),
|
||||
path("atcmplt/share/u", ShareUserAutocomplete.as_view(), name="share-user-autocomplete"),
|
||||
path("atcmplt/share/t", ShareTeamAutocomplete.as_view(), name="share-team-autocomplete"),
|
||||
]
|
||||
|
||||
if DEBUG:
|
||||
|
29
user/migrations/0003_team.py
Normal file
29
user/migrations/0003_team.py
Normal file
@ -0,0 +1,29 @@
|
||||
# Generated by Django 3.1.3 on 2022-02-17 10:22
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import uuid
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('user', '0002_user_api_token'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Team',
|
||||
fields=[
|
||||
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
|
||||
('name', models.CharField(blank=True, max_length=500, null=True)),
|
||||
('description', models.TextField(blank=True, null=True)),
|
||||
('admin', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)),
|
||||
('users', models.ManyToManyField(blank=True, related_name='teams', to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
]
|
Loading…
Reference in New Issue
Block a user