mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-07-20 01:36:00 +02:00
test and lint
This commit is contained in:
parent
a7c801739d
commit
c1df03d831
6 changed files with 274 additions and 46 deletions
|
@ -19,3 +19,4 @@ from .user_profile import UserProfileView, FinishProfileSetupView
|
|||
from .health import *
|
||||
from .index import *
|
||||
from .portfolios import *
|
||||
from .transfer_user import TransferUserView
|
||||
|
|
|
@ -15,57 +15,60 @@ from registrar.models.verified_by_staff import VerifiedByStaff
|
|||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class TransferUserView(View):
|
||||
"""Transfer user methods that set up the transfer_user template and handle the forms on it."""
|
||||
|
||||
JOINS = [
|
||||
(DomainRequest, 'creator'),
|
||||
(DomainInformation, 'creator'),
|
||||
(Portfolio, 'creator'),
|
||||
(DomainRequest, 'investigator'),
|
||||
(UserDomainRole, 'user'),
|
||||
(VerifiedByStaff, 'requestor'),
|
||||
(DomainRequest, "creator"),
|
||||
(DomainInformation, "creator"),
|
||||
(Portfolio, "creator"),
|
||||
(DomainRequest, "investigator"),
|
||||
(UserDomainRole, "user"),
|
||||
(VerifiedByStaff, "requestor"),
|
||||
]
|
||||
|
||||
USER_FIELDS = ['portfolio', 'portfolio_roles', 'portfolio_additional_permissions']
|
||||
USER_FIELDS = ["portfolio", "portfolio_roles", "portfolio_additional_permissions"]
|
||||
|
||||
def get(self, request, user_id):
|
||||
"""current_user referes to the 'source' user where the button that redirects to this view was clicked.
|
||||
other_users exclude current_user and populate a dropdown, selected_user is the selection in the dropdown.
|
||||
|
||||
|
||||
This also querries the relevant domains and domain requests, and the admin context needed for the sidenav."""
|
||||
|
||||
current_user = get_object_or_404(User, pk=user_id)
|
||||
other_users = User.objects.exclude(pk=user_id).order_by('first_name', 'last_name') # Exclude the current user from the dropdown
|
||||
other_users = User.objects.exclude(pk=user_id).order_by(
|
||||
"first_name", "last_name"
|
||||
) # Exclude the current user from the dropdown
|
||||
|
||||
# Get the default admin site context, needed for the sidenav
|
||||
admin_context = site.each_context(request)
|
||||
|
||||
context = {
|
||||
'current_user': current_user,
|
||||
'other_users': other_users,
|
||||
'logged_in_user': request.user,
|
||||
"current_user": current_user,
|
||||
"other_users": other_users,
|
||||
"logged_in_user": request.user,
|
||||
**admin_context, # Include the admin context
|
||||
'current_user_domains': self.get_domains(current_user),
|
||||
'current_user_domain_requests': self.get_domain_requests(current_user)
|
||||
"current_user_domains": self.get_domains(current_user),
|
||||
"current_user_domain_requests": self.get_domain_requests(current_user),
|
||||
}
|
||||
|
||||
selected_user_id = request.GET.get('selected_user')
|
||||
selected_user_id = request.GET.get("selected_user")
|
||||
if selected_user_id:
|
||||
selected_user = get_object_or_404(User, pk=selected_user_id)
|
||||
context['selected_user'] = selected_user
|
||||
context['selected_user_domains'] = self.get_domains(selected_user)
|
||||
context['selected_user_domain_requests'] = self.get_domain_requests(selected_user)
|
||||
context["selected_user"] = selected_user
|
||||
context["selected_user_domains"] = self.get_domains(selected_user)
|
||||
context["selected_user_domain_requests"] = self.get_domain_requests(selected_user)
|
||||
|
||||
return render(request, 'admin/transfer_user.html', context)
|
||||
return render(request, "admin/transfer_user.html", context)
|
||||
|
||||
def post(self, request, user_id):
|
||||
"""This handles the transfer from selected_user to current_user then deletes selected_user.
|
||||
|
||||
|
||||
NOTE: We have a ticket to refactor this into a more solid lookup for related fields in #2645"""
|
||||
|
||||
current_user = get_object_or_404(User, pk=user_id)
|
||||
selected_user_id = request.POST.get('selected_user')
|
||||
selected_user_id = request.POST.get("selected_user")
|
||||
selected_user = get_object_or_404(User, pk=selected_user_id)
|
||||
|
||||
try:
|
||||
|
@ -89,53 +92,52 @@ class TransferUserView(View):
|
|||
except Exception as e:
|
||||
messages.error(request, f"An error occurred during the transfer: {e}")
|
||||
|
||||
return redirect('admin:registrar_user_change', object_id=user_id)
|
||||
return redirect("admin:registrar_user_change", object_id=user_id)
|
||||
|
||||
@classmethod
|
||||
def update_joins_and_log(cls, model_class, field_name, old_user, new_user, change_logs):
|
||||
def update_joins_and_log(cls, model_class, field_name, selected_user, current_user, change_logs):
|
||||
"""
|
||||
Helper function to update the user join fields for a given model and log the changes.
|
||||
"""
|
||||
|
||||
filter_kwargs = {field_name: old_user}
|
||||
filter_kwargs = {field_name: selected_user}
|
||||
updated_objects = model_class.objects.filter(**filter_kwargs)
|
||||
|
||||
for obj in updated_objects:
|
||||
# Check for duplicate UserDomainRole before updating
|
||||
if model_class == UserDomainRole:
|
||||
if model_class.objects.filter(user=new_user, domain=obj.domain).exists():
|
||||
if model_class.objects.filter(user=current_user, domain=obj.domain).exists():
|
||||
continue # Skip the update to avoid a duplicate
|
||||
|
||||
# Update the field on the object and save it
|
||||
setattr(obj, field_name, new_user)
|
||||
setattr(obj, field_name, current_user)
|
||||
obj.save()
|
||||
|
||||
# Log the change
|
||||
cls.log_change(obj, field_name, old_user, new_user, change_logs)
|
||||
cls.log_change(obj, field_name, selected_user, current_user, change_logs)
|
||||
|
||||
@classmethod
|
||||
def transfer_user_fields_and_log(cls, old_user, new_user, change_logs):
|
||||
def transfer_user_fields_and_log(cls, selected_user, current_user, change_logs):
|
||||
"""
|
||||
Transfers portfolio fields from the old_user to the new_user.
|
||||
Transfers portfolio fields from the selected_user to the current_user.
|
||||
Logs the changes for each transferred field.
|
||||
|
||||
NOTE: This will be refactored in #2644
|
||||
"""
|
||||
|
||||
for field in cls.USER_FIELDS:
|
||||
old_value = getattr(old_user, field, None)
|
||||
field_value = getattr(selected_user, field, None)
|
||||
|
||||
if old_value:
|
||||
setattr(new_user, field, old_value)
|
||||
cls.log_change(new_user, field, old_value, old_value, change_logs)
|
||||
if field_value:
|
||||
setattr(current_user, field, field_value)
|
||||
cls.log_change(current_user, field, field_value, field_value, change_logs)
|
||||
|
||||
new_user.save()
|
||||
current_user.save()
|
||||
|
||||
@classmethod
|
||||
def log_change(cls, obj, field_name, old_value, new_value, change_logs):
|
||||
def log_change(cls, obj, field_name, field_value, new_value, change_logs):
|
||||
"""Logs the change for a specific field on an object"""
|
||||
log_entry = f'Changed {field_name} from "{old_value}" to "{new_value}" on {obj}'
|
||||
|
||||
log_entry = f'Changed {field_name} from "{field_value}" to "{new_value}" on {obj}'
|
||||
|
||||
logger.info(log_entry)
|
||||
|
||||
# Collect the related object for the success message
|
||||
|
@ -149,10 +151,10 @@ class TransferUserView(View):
|
|||
domains = Domain.objects.filter(id__in=domain_ids)
|
||||
|
||||
return domains
|
||||
|
||||
|
||||
@classmethod
|
||||
def get_domain_requests(cls, user):
|
||||
"""A simplified version of domain_requests_json"""
|
||||
domain_requests = DomainRequest.objects.filter(creator=user)
|
||||
|
||||
return domain_requests
|
||||
return domain_requests
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue