refactor ids part 1

This commit is contained in:
zandercymatics 2025-03-05 14:56:28 -07:00
parent 8b76cde13d
commit 949424854e
No known key found for this signature in database
GPG key ID: FF4636ABEC9682B7
2 changed files with 59 additions and 59 deletions

View file

@ -89,52 +89,52 @@ urlpatterns = [
name="members", name="members",
), ),
path( path(
"member/<int:pk>", "member/<int:member_pk>",
views.PortfolioMemberView.as_view(), views.PortfolioMemberView.as_view(),
name="member", name="member",
), ),
path( path(
"member/<int:pk>/delete", "member/<int:member_pk>/delete",
views.PortfolioMemberDeleteView.as_view(), views.PortfolioMemberDeleteView.as_view(),
name="member-delete", name="member-delete",
), ),
path( path(
"member/<int:pk>/permissions", "member/<int:member_pk>/permissions",
views.PortfolioMemberEditView.as_view(), views.PortfolioMemberEditView.as_view(),
name="member-permissions", name="member-permissions",
), ),
path( path(
"member/<int:pk>/domains", "member/<int:member_pk>/domains",
views.PortfolioMemberDomainsView.as_view(), views.PortfolioMemberDomainsView.as_view(),
name="member-domains", name="member-domains",
), ),
path( path(
"member/<int:pk>/domains/edit", "member/<int:member_pk>/domains/edit",
views.PortfolioMemberDomainsEditView.as_view(), views.PortfolioMemberDomainsEditView.as_view(),
name="member-domains-edit", name="member-domains-edit",
), ),
path( path(
"invitedmember/<int:pk>", "invitedmember/<int:invitedmember_pk>",
views.PortfolioInvitedMemberView.as_view(), views.PortfolioInvitedMemberView.as_view(),
name="invitedmember", name="invitedmember",
), ),
path( path(
"invitedmember/<int:pk>/delete", "invitedmember/<int:invitedmember_pk>/delete",
views.PortfolioInvitedMemberDeleteView.as_view(), views.PortfolioInvitedMemberDeleteView.as_view(),
name="invitedmember-delete", name="invitedmember-delete",
), ),
path( path(
"invitedmember/<int:pk>/permissions", "invitedmember/<int:invitedmember_pk>/permissions",
views.PortfolioInvitedMemberEditView.as_view(), views.PortfolioInvitedMemberEditView.as_view(),
name="invitedmember-permissions", name="invitedmember-permissions",
), ),
path( path(
"invitedmember/<int:pk>/domains", "invitedmember/<int:invitedmember_pk>/domains",
views.PortfolioInvitedMemberDomainsView.as_view(), views.PortfolioInvitedMemberDomainsView.as_view(),
name="invitedmember-domains", name="invitedmember-domains",
), ),
path( path(
"invitedmember/<int:pk>/domains/edit", "invitedmember/<int:invitedmember_pk>/domains/edit",
views.PortfolioInvitedMemberDomainsEditView.as_view(), views.PortfolioInvitedMemberDomainsEditView.as_view(),
name="invitedmember-domains-edit", name="invitedmember-domains-edit",
), ),

View file

@ -78,8 +78,8 @@ class PortfolioMemberView(DetailView, View):
context_object_name = "portfolio" context_object_name = "portfolio"
template_name = "portfolio_member.html" template_name = "portfolio_member.html"
def get(self, request, pk): def get(self, request, member_pk):
portfolio_permission = get_object_or_404(UserPortfolioPermission, pk=pk) portfolio_permission = get_object_or_404(UserPortfolioPermission, pk=member_pk)
member = portfolio_permission.user member = portfolio_permission.user
# We have to explicitely name these with member_ otherwise we'll have conflicts with context preprocessors # We have to explicitely name these with member_ otherwise we'll have conflicts with context preprocessors
@ -103,8 +103,8 @@ class PortfolioMemberView(DetailView, View):
request, request,
self.template_name, self.template_name,
{ {
"edit_url": reverse("member-permissions", args=[pk]), "edit_url": reverse("member-permissions", args=[member_pk]),
"domains_url": reverse("member-domains", args=[pk]), "domains_url": reverse("member-domains", args=[member_pk]),
"portfolio_permission": portfolio_permission, "portfolio_permission": portfolio_permission,
"member": member, "member": member,
"member_has_view_all_requests_portfolio_permission": member_has_view_all_requests_portfolio_permission, "member_has_view_all_requests_portfolio_permission": member_has_view_all_requests_portfolio_permission,
@ -119,19 +119,19 @@ class PortfolioMemberView(DetailView, View):
@grant_access(HAS_PORTFOLIO_MEMBERS_VIEW, HAS_PORTFOLIO_MEMBERS_EDIT) @grant_access(HAS_PORTFOLIO_MEMBERS_VIEW, HAS_PORTFOLIO_MEMBERS_EDIT)
class PortfolioMemberDeleteView(View): class PortfolioMemberDeleteView(View):
def post(self, request, pk): def post(self, request, member_pk):
""" """
Find and delete the portfolio member using the provided primary key (pk). Find and delete the portfolio member using the provided primary key (pk).
Redirect to a success page after deletion (or any other appropriate page). Redirect to a success page after deletion (or any other appropriate page).
""" """
portfolio_member_permission = get_object_or_404(UserPortfolioPermission, pk=pk) portfolio_member_permission = get_object_or_404(UserPortfolioPermission, pk=member_pk)
member = portfolio_member_permission.user member = portfolio_member_permission.user
portfolio = portfolio_member_permission.portfolio portfolio = portfolio_member_permission.portfolio
# Validate if the member can be removed # Validate if the member can be removed
error_message = self._validate_member_removal(request, member, portfolio) error_message = self._validate_member_removal(request, member, portfolio)
if error_message: if error_message:
return self._handle_error_response(request, error_message, pk) return self._handle_error_response(request, error_message, member_pk)
# Attempt to send notification emails # Attempt to send notification emails
self._send_removal_notifications(request, portfolio_member_permission) self._send_removal_notifications(request, portfolio_member_permission)
@ -162,14 +162,14 @@ class PortfolioMemberDeleteView(View):
) )
return None return None
def _handle_error_response(self, request, error_message, pk): def _handle_error_response(self, request, error_message, member_pk):
""" """
Return an error response (JSON or redirect with messages). Return an error response (JSON or redirect with messages).
""" """
if request.headers.get("X-Requested-With") == "XMLHttpRequest": if request.headers.get("X-Requested-With") == "XMLHttpRequest":
return JsonResponse({"error": error_message}, status=400) return JsonResponse({"error": error_message}, status=400)
messages.error(request, error_message) messages.error(request, error_message)
return redirect(reverse("member", kwargs={"pk": pk})) return redirect(reverse("member", kwargs={"pk": member_pk}))
def _send_removal_notifications(self, request, portfolio_member_permission): def _send_removal_notifications(self, request, portfolio_member_permission):
""" """
@ -225,8 +225,8 @@ class PortfolioMemberEditView(DetailView, View):
template_name = "portfolio_member_permissions.html" template_name = "portfolio_member_permissions.html"
form_class = portfolioForms.PortfolioMemberForm form_class = portfolioForms.PortfolioMemberForm
def get(self, request, pk): def get(self, request, member_pk):
portfolio_permission = get_object_or_404(UserPortfolioPermission, pk=pk) portfolio_permission = get_object_or_404(UserPortfolioPermission, pk=member_pk)
user = portfolio_permission.user user = portfolio_permission.user
form = self.form_class(instance=portfolio_permission) form = self.form_class(instance=portfolio_permission)
@ -241,8 +241,8 @@ class PortfolioMemberEditView(DetailView, View):
}, },
) )
def post(self, request, pk): def post(self, request, member_pk):
portfolio_permission = get_object_or_404(UserPortfolioPermission, pk=pk) portfolio_permission = get_object_or_404(UserPortfolioPermission, pk=member_pk)
user = portfolio_permission.user user = portfolio_permission.user
form = self.form_class(request.POST, instance=portfolio_permission) form = self.form_class(request.POST, instance=portfolio_permission)
removing_admin_role_on_self = False removing_admin_role_on_self = False
@ -277,7 +277,7 @@ class PortfolioMemberEditView(DetailView, View):
self._handle_exceptions(e) self._handle_exceptions(e)
form.save() form.save()
messages.success(self.request, "The member access and permission changes have been saved.") messages.success(self.request, "The member access and permission changes have been saved.")
return redirect("member", pk=pk) if not removing_admin_role_on_self else redirect("home") return redirect("member", pk=member_pk) if not removing_admin_role_on_self else redirect("home")
return render( return render(
request, request,
@ -306,8 +306,8 @@ class PortfolioMemberDomainsView(View):
template_name = "portfolio_member_domains.html" template_name = "portfolio_member_domains.html"
def get(self, request, pk): def get(self, request, member_pk):
portfolio_permission = get_object_or_404(UserPortfolioPermission, pk=pk) portfolio_permission = get_object_or_404(UserPortfolioPermission, pk=member_pk)
member = portfolio_permission.user member = portfolio_permission.user
return render( return render(
@ -326,8 +326,8 @@ class PortfolioMemberDomainsEditView(DetailView, View):
context_object_name = "portfolio" context_object_name = "portfolio"
template_name = "portfolio_member_domains_edit.html" template_name = "portfolio_member_domains_edit.html"
def get(self, request, pk): def get(self, request, member_pk):
portfolio_permission = get_object_or_404(UserPortfolioPermission, pk=pk) portfolio_permission = get_object_or_404(UserPortfolioPermission, pk=member_pk)
member = portfolio_permission.user member = portfolio_permission.user
return render( return render(
@ -339,33 +339,33 @@ class PortfolioMemberDomainsEditView(DetailView, View):
}, },
) )
def post(self, request, pk): def post(self, request, member_pk):
""" """
Handles adding and removing domains for a portfolio member. Handles adding and removing domains for a portfolio member.
""" """
added_domains = request.POST.get("added_domains") added_domains = request.POST.get("added_domains")
removed_domains = request.POST.get("removed_domains") removed_domains = request.POST.get("removed_domains")
portfolio_permission = get_object_or_404(UserPortfolioPermission, pk=pk) portfolio_permission = get_object_or_404(UserPortfolioPermission, pk=member_pk)
member = portfolio_permission.user member = portfolio_permission.user
portfolio = portfolio_permission.portfolio portfolio = portfolio_permission.portfolio
added_domain_ids = self._parse_domain_ids(added_domains, "added domains") added_domain_ids = self._parse_domain_ids(added_domains, "added domains")
if added_domain_ids is None: if added_domain_ids is None:
return redirect(reverse("member-domains", kwargs={"pk": pk})) return redirect(reverse("member-domains", kwargs={"pk": member_pk}))
removed_domain_ids = self._parse_domain_ids(removed_domains, "removed domains") removed_domain_ids = self._parse_domain_ids(removed_domains, "removed domains")
if removed_domain_ids is None: if removed_domain_ids is None:
return redirect(reverse("member-domains", kwargs={"pk": pk})) return redirect(reverse("member-domains", kwargs={"pk": member_pk}))
if not (added_domain_ids or removed_domain_ids): if not (added_domain_ids or removed_domain_ids):
messages.success(request, "The domain assignment changes have been saved.") messages.success(request, "The domain assignment changes have been saved.")
return redirect(reverse("member-domains", kwargs={"pk": pk})) return redirect(reverse("member-domains", kwargs={"pk": member_pk}))
try: try:
self._process_added_domains(added_domain_ids, member, request.user, portfolio) self._process_added_domains(added_domain_ids, member, request.user, portfolio)
self._process_removed_domains(removed_domain_ids, member) self._process_removed_domains(removed_domain_ids, member)
messages.success(request, "The domain assignment changes have been saved.") messages.success(request, "The domain assignment changes have been saved.")
return redirect(reverse("member-domains", kwargs={"pk": pk})) return redirect(reverse("member-domains", kwargs={"pk": member_pk}))
except IntegrityError: except IntegrityError:
messages.error( messages.error(
request, request,
@ -373,7 +373,7 @@ class PortfolioMemberDomainsEditView(DetailView, View):
f"please contact {DefaultUserValues.HELP_EMAIL}.", f"please contact {DefaultUserValues.HELP_EMAIL}.",
) )
logger.error("A database error occurred while saving changes.", exc_info=True) logger.error("A database error occurred while saving changes.", exc_info=True)
return redirect(reverse("member-domains-edit", kwargs={"pk": pk})) return redirect(reverse("member-domains-edit", kwargs={"pk": member_pk}))
except Exception as e: except Exception as e:
messages.error( messages.error(
request, request,
@ -381,7 +381,7 @@ class PortfolioMemberDomainsEditView(DetailView, View):
f"please contact {DefaultUserValues.HELP_EMAIL}.", f"please contact {DefaultUserValues.HELP_EMAIL}.",
) )
logger.error(f"An unexpected error occurred: {str(e)}", exc_info=True) logger.error(f"An unexpected error occurred: {str(e)}", exc_info=True)
return redirect(reverse("member-domains-edit", kwargs={"pk": pk})) return redirect(reverse("member-domains-edit", kwargs={"pk": member_pk}))
def _parse_domain_ids(self, domain_data, domain_type): def _parse_domain_ids(self, domain_data, domain_type):
""" """
@ -439,8 +439,8 @@ class PortfolioInvitedMemberView(DetailView, View):
template_name = "portfolio_member.html" template_name = "portfolio_member.html"
# form_class = PortfolioInvitedMemberForm # form_class = PortfolioInvitedMemberForm
def get(self, request, pk): def get(self, request, invitedmember_pk):
portfolio_invitation = get_object_or_404(PortfolioInvitation, pk=pk) portfolio_invitation = get_object_or_404(PortfolioInvitation, pk=invitedmember_pk)
# form = self.form_class(instance=portfolio_invitation) # form = self.form_class(instance=portfolio_invitation)
# We have to explicitely name these with member_ otherwise we'll have conflicts with context preprocessors # We have to explicitely name these with member_ otherwise we'll have conflicts with context preprocessors
@ -464,8 +464,8 @@ class PortfolioInvitedMemberView(DetailView, View):
request, request,
self.template_name, self.template_name,
{ {
"edit_url": reverse("invitedmember-permissions", args=[pk]), "edit_url": reverse("invitedmember-permissions", args=[invitedmember_pk]),
"domains_url": reverse("invitedmember-domains", args=[pk]), "domains_url": reverse("invitedmember-domains", args=[invitedmember_pk]),
"portfolio_invitation": portfolio_invitation, "portfolio_invitation": portfolio_invitation,
"member_has_view_all_requests_portfolio_permission": member_has_view_all_requests_portfolio_permission, "member_has_view_all_requests_portfolio_permission": member_has_view_all_requests_portfolio_permission,
"member_has_edit_request_portfolio_permission": member_has_edit_request_portfolio_permission, "member_has_edit_request_portfolio_permission": member_has_edit_request_portfolio_permission,
@ -479,12 +479,12 @@ class PortfolioInvitedMemberView(DetailView, View):
@grant_access(HAS_PORTFOLIO_MEMBERS_VIEW, HAS_PORTFOLIO_MEMBERS_EDIT) @grant_access(HAS_PORTFOLIO_MEMBERS_VIEW, HAS_PORTFOLIO_MEMBERS_EDIT)
class PortfolioInvitedMemberDeleteView(View): class PortfolioInvitedMemberDeleteView(View):
def post(self, request, pk): def post(self, request, invitedmember_pk):
""" """
Find and delete the portfolio invited member using the provided primary key (pk). Find and delete the portfolio invited member using the provided primary key (pk).
Redirect to a success page after deletion (or any other appropriate page). Redirect to a success page after deletion (or any other appropriate page).
""" """
portfolio_invitation = get_object_or_404(PortfolioInvitation, pk=pk) portfolio_invitation = get_object_or_404(PortfolioInvitation, pk=invitedmember_pk)
try: try:
# if invitation being removed is an admin # if invitation being removed is an admin
@ -529,8 +529,8 @@ class PortfolioInvitedMemberEditView(DetailView, View):
template_name = "portfolio_member_permissions.html" template_name = "portfolio_member_permissions.html"
form_class = portfolioForms.PortfolioInvitedMemberForm form_class = portfolioForms.PortfolioInvitedMemberForm
def get(self, request, pk): def get(self, request, invitedmember_pk):
portfolio_invitation = get_object_or_404(PortfolioInvitation, pk=pk) portfolio_invitation = get_object_or_404(PortfolioInvitation, pk=invitedmember_pk)
form = self.form_class(instance=portfolio_invitation) form = self.form_class(instance=portfolio_invitation)
return render( return render(
@ -542,8 +542,8 @@ class PortfolioInvitedMemberEditView(DetailView, View):
}, },
) )
def post(self, request, pk): def post(self, request, invitedmember_pk):
portfolio_invitation = get_object_or_404(PortfolioInvitation, pk=pk) portfolio_invitation = get_object_or_404(PortfolioInvitation, pk=invitedmember_pk)
form = self.form_class(request.POST, instance=portfolio_invitation) form = self.form_class(request.POST, instance=portfolio_invitation)
if form.is_valid(): if form.is_valid():
try: try:
@ -569,7 +569,7 @@ class PortfolioInvitedMemberEditView(DetailView, View):
self._handle_exceptions(e) self._handle_exceptions(e)
form.save() form.save()
messages.success(self.request, "The member access and permission changes have been saved.") messages.success(self.request, "The member access and permission changes have been saved.")
return redirect("invitedmember", pk=pk) return redirect("invitedmember", pk=invitedmember_pk)
return render( return render(
request, request,
@ -598,8 +598,8 @@ class PortfolioInvitedMemberDomainsView(View):
template_name = "portfolio_member_domains.html" template_name = "portfolio_member_domains.html"
def get(self, request, pk): def get(self, request, invitedmember_pk):
portfolio_invitation = get_object_or_404(PortfolioInvitation, pk=pk) portfolio_invitation = get_object_or_404(PortfolioInvitation, pk=invitedmember_pk)
return render( return render(
request, request,
@ -617,8 +617,8 @@ class PortfolioInvitedMemberDomainsEditView(DetailView, View):
context_object_name = "portfolio" context_object_name = "portfolio"
template_name = "portfolio_member_domains_edit.html" template_name = "portfolio_member_domains_edit.html"
def get(self, request, pk): def get(self, request, invitedmember_pk):
portfolio_invitation = get_object_or_404(PortfolioInvitation, pk=pk) portfolio_invitation = get_object_or_404(PortfolioInvitation, pk=invitedmember_pk)
return render( return render(
request, request,
@ -628,33 +628,33 @@ class PortfolioInvitedMemberDomainsEditView(DetailView, View):
}, },
) )
def post(self, request, pk): def post(self, request, invitedmember_pk):
""" """
Handles adding and removing domains for a portfolio invitee. Handles adding and removing domains for a portfolio invitee.
""" """
added_domains = request.POST.get("added_domains") added_domains = request.POST.get("added_domains")
removed_domains = request.POST.get("removed_domains") removed_domains = request.POST.get("removed_domains")
portfolio_invitation = get_object_or_404(PortfolioInvitation, pk=pk) portfolio_invitation = get_object_or_404(PortfolioInvitation, pk=invitedmember_pk)
email = portfolio_invitation.email email = portfolio_invitation.email
portfolio = portfolio_invitation.portfolio portfolio = portfolio_invitation.portfolio
added_domain_ids = self._parse_domain_ids(added_domains, "added domains") added_domain_ids = self._parse_domain_ids(added_domains, "added domains")
if added_domain_ids is None: if added_domain_ids is None:
return redirect(reverse("invitedmember-domains", kwargs={"pk": pk})) return redirect(reverse("invitedmember-domains", kwargs={"pk": invitedmember_pk}))
removed_domain_ids = self._parse_domain_ids(removed_domains, "removed domains") removed_domain_ids = self._parse_domain_ids(removed_domains, "removed domains")
if removed_domain_ids is None: if removed_domain_ids is None:
return redirect(reverse("invitedmember-domains", kwargs={"pk": pk})) return redirect(reverse("invitedmember-domains", kwargs={"pk": invitedmember_pk}))
if not (added_domain_ids or removed_domain_ids): if not (added_domain_ids or removed_domain_ids):
messages.success(request, "The domain assignment changes have been saved.") messages.success(request, "The domain assignment changes have been saved.")
return redirect(reverse("invitedmember-domains", kwargs={"pk": pk})) return redirect(reverse("invitedmember-domains", kwargs={"pk": invitedmember_pk}))
try: try:
self._process_added_domains(added_domain_ids, email, request.user, portfolio) self._process_added_domains(added_domain_ids, email, request.user, portfolio)
self._process_removed_domains(removed_domain_ids, email) self._process_removed_domains(removed_domain_ids, email)
messages.success(request, "The domain assignment changes have been saved.") messages.success(request, "The domain assignment changes have been saved.")
return redirect(reverse("invitedmember-domains", kwargs={"pk": pk})) return redirect(reverse("invitedmember-domains", kwargs={"pk": invitedmember_pk}))
except IntegrityError: except IntegrityError:
messages.error( messages.error(
request, request,
@ -662,7 +662,7 @@ class PortfolioInvitedMemberDomainsEditView(DetailView, View):
f"please contact {DefaultUserValues.HELP_EMAIL}.", f"please contact {DefaultUserValues.HELP_EMAIL}.",
) )
logger.error("A database error occurred while saving changes.", exc_info=True) logger.error("A database error occurred while saving changes.", exc_info=True)
return redirect(reverse("invitedmember-domains-edit", kwargs={"pk": pk})) return redirect(reverse("invitedmember-domains-edit", kwargs={"pk": invitedmember_pk}))
except Exception as e: except Exception as e:
messages.error( messages.error(
request, request,
@ -670,7 +670,7 @@ class PortfolioInvitedMemberDomainsEditView(DetailView, View):
f"please contact {DefaultUserValues.HELP_EMAIL}.", f"please contact {DefaultUserValues.HELP_EMAIL}.",
) )
logger.error(f"An unexpected error occurred: {str(e)}.", exc_info=True) logger.error(f"An unexpected error occurred: {str(e)}.", exc_info=True)
return redirect(reverse("invitedmember-domains-edit", kwargs={"pk": pk})) return redirect(reverse("invitedmember-domains-edit", kwargs={"pk": invitedmember_pk}))
def _parse_domain_ids(self, domain_data, domain_type): def _parse_domain_ids(self, domain_data, domain_type):
""" """