-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'dev' into LTD_5653_DESNZ_multiple_licence_conditions
- Loading branch information
Showing
18 changed files
with
734 additions
and
281 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
from django import forms | ||
|
||
from core.common.forms import BaseForm | ||
from core.forms.widgets import FilterSelect | ||
from crispy_forms_gds.choices import Choice | ||
from caseworker.users.services import get_gov_user_list | ||
|
||
|
||
class BaseCaseworkerUser(BaseForm): | ||
|
||
email = forms.EmailField( | ||
label="Email", | ||
error_messages={ | ||
"required": "Enter an email address in the correct format, like [email protected]", | ||
}, | ||
) | ||
|
||
role = forms.ChoiceField( | ||
label="Role", | ||
widget=forms.Select(attrs={"id": "role"}), | ||
) | ||
|
||
team = forms.ChoiceField(label="Team", widget=forms.Select(attrs={"id": "team"})) | ||
|
||
default_queue = forms.ChoiceField( | ||
label="Default Queue", | ||
widget=FilterSelect( | ||
parent_select_name="team", | ||
attrs={"id": "default_queue", "class": "govuk-select"}, | ||
), | ||
) | ||
|
||
def get_layout_fields(self): | ||
return ( | ||
"email", | ||
"role", | ||
"team", | ||
"default_queue", | ||
) | ||
|
||
def __init__(self, request, teams, roles, queues, *args, **kwargs): | ||
super().__init__(*args, **kwargs) | ||
self.request = request | ||
self.fields["team"].choices = [Choice(t["id"], t["name"]) for t in teams] | ||
self.fields["role"].choices = [Choice(r["id"], r["name"]) for r in roles] | ||
|
||
get_team_id = lambda queue: queue["team"].get("id") if queue.get("team") else None | ||
|
||
self.fields["default_queue"].choices = [ | ||
Choice(value=q["id"], label=q["name"], attrs={"data-attribute": get_team_id(q)}) for q in queues | ||
] | ||
self.fields["default_queue"].choices.insert(0, Choice(None, "Select")) | ||
|
||
|
||
class EditCaseworkerQueue(BaseCaseworkerUser): | ||
class Layout: | ||
TITLE = "Edit" | ||
SUBMIT_BUTTON_TEXT = "Save and return" | ||
|
||
_editable_fields = ["email", "team", "role"] | ||
|
||
def __init__(self, request, teams, roles, queues, *args, **kwargs): | ||
super().__init__(request, teams, roles, queues, *args, **kwargs) | ||
|
||
self._email_changed = False | ||
for field in self._editable_fields: | ||
self.fields[field].disabled = True | ||
self.fields[field].required = False | ||
|
||
def clean(self): | ||
cleaned_data = super().clean() | ||
for field in self._editable_fields: | ||
del cleaned_data[field] | ||
return cleaned_data | ||
|
||
|
||
class EditCaseworker(BaseCaseworkerUser): | ||
class Layout: | ||
TITLE = "Edit" | ||
SUBMIT_BUTTON_TEXT = "Save and return" | ||
|
||
def __init__(self, request, teams, roles, queues, *args, **kwargs): | ||
super().__init__(request, teams, roles, queues, *args, **kwargs) | ||
|
||
def clean_email(self): | ||
email = self.cleaned_data["email"] or self.initial["email"] | ||
if email != self.initial["email"].lower(): | ||
gov_user_list = get_gov_user_list(self.request, {"email": email}) | ||
if gov_user_list["count"]: | ||
raise forms.ValidationError("This email has already been registered") | ||
return email |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
from requests.exceptions import HTTPError | ||
from http import HTTPStatus | ||
import rules | ||
|
||
from django.http import Http404 | ||
from django.contrib.messages.views import SuccessMessageMixin | ||
from django.urls import reverse_lazy | ||
from django.views.generic import FormView | ||
|
||
from core.decorators import expect_status | ||
from core.auth.views import LoginRequiredMixin | ||
from caseworker.queues.services import get_queues | ||
from caseworker.teams.services import get_all_teams | ||
from caseworker.users.services import get_all_roles, get_gov_user, update_gov_user | ||
from .forms import EditCaseworkerQueue, EditCaseworker | ||
|
||
|
||
class EditCaseworkerUserView(LoginRequiredMixin, SuccessMessageMixin, FormView): | ||
form_class = EditCaseworkerQueue | ||
|
||
template_name = "core/form.html" | ||
success_message = "User updated successfully" | ||
|
||
def dispatch(self, *args, **kwargs): | ||
try: | ||
self.user_id = kwargs["pk"] | ||
self.user, _ = get_gov_user(self.request, self.user_id) | ||
self.user = self.user["user"] | ||
except HTTPError: | ||
raise Http404() | ||
|
||
return super().dispatch(*args, **kwargs) | ||
|
||
def get_initial(self): | ||
return { | ||
"email": self.user["email"], | ||
"role": self.user["role"]["id"], | ||
"team": self.user["team"]["id"], | ||
"default_queue": self.user["default_queue"]["id"], | ||
} | ||
|
||
def get_form_class(self): | ||
if rules.test_rule("can_caseworker_edit_user", self.request): | ||
return EditCaseworker | ||
return EditCaseworkerQueue | ||
|
||
def get_form_kwargs(self): | ||
form_kwargs = super().get_form_kwargs() | ||
|
||
form_kwargs["request"] = self.request | ||
form_kwargs["teams"] = get_all_teams(self.request) | ||
form_kwargs["roles"] = get_all_roles(self.request) | ||
form_kwargs["queues"] = get_queues(self.request, include_system=True) | ||
|
||
return form_kwargs | ||
|
||
def form_valid(self, form): | ||
data = form.cleaned_data | ||
self.edit_user(data) | ||
# If user is updating their own default_queue, update the local user instance | ||
if str(self.user_id) == self.request.session["lite_api_user_id"]: | ||
self.request.session["default_queue"] = data.get("default_queue") | ||
return super().form_valid(form) | ||
|
||
def get_success_url(self): | ||
self.success_url = reverse_lazy("users:user", kwargs={"pk": self.user_id}) | ||
return self.success_url | ||
|
||
@expect_status( | ||
HTTPStatus.OK, | ||
"Error editing user", | ||
"Unexpected error editing user", | ||
) | ||
def edit_user(self, data): | ||
return update_gov_user(self.request, self.user_id, data) | ||
|
||
def get_context_data(self, **kwargs): | ||
context = super().get_context_data(**kwargs) | ||
context["back_link_url"] = self.get_success_url() | ||
return context |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.