Stub pt 2

This commit is contained in:
zandercymatics 2024-08-13 13:27:31 -06:00
parent 4243d19293
commit ceabc16c73
No known key found for this signature in database
GPG key ID: FF4636ABEC9682B7
3 changed files with 52 additions and 55 deletions

View file

@ -2846,7 +2846,7 @@ class PortfolioAdmin(ListHeaderAdmin):
fieldsets = [ fieldsets = [
# TODO - this will need to be reworked # TODO - this will need to be reworked
#(None, {"fields": ["organization_name", "federal_agency", "creator", "created_at", "notes"]}), #(None, {"fields": ["organization_name", "federal_agency", "creator", "created_at", "notes"]}),
(None, {"fields": ["organization_name", "creator", "created_at", "notes"]}), (None, {"fields": ["portfolio_type", "organization_name", "creator", "created_at", "notes"]}),
("Portfolio members", {"fields": ["administrators", "members"]}), ("Portfolio members", {"fields": ["administrators", "members"]}),
("Portfolio domains", {"fields": ["domains", "domain_requests"]}), ("Portfolio domains", {"fields": ["domains", "domain_requests"]}),
("Type of organization", {"fields": ["organization_type", "federal_type"]}), ("Type of organization", {"fields": ["organization_type", "federal_type"]}),
@ -2862,28 +2862,41 @@ class PortfolioAdmin(ListHeaderAdmin):
search_help_text = "Search by organization name." search_help_text = "Search by organization name."
readonly_fields = [ readonly_fields = [
"created_at", "created_at",
# Custom fields such as these must be defined as readonly.
# Custom fields such as these must be defined as readonly, even if they are not.
"administrators", "administrators",
"members", "members",
"domains", "domains",
"domain_requests", "domain_requests",
"suborganizations" "suborganizations",
"federal_type",
"portfolio_type",
] ]
def portfolio_type(self, obj: models.Portfolio):
org_choices = DomainRequest.OrganizationChoices
org_type = org_choices.get_org_label(obj.organization_type)
if obj.organization_type == org_choices.FEDERAL and obj.federal_agency:
return " - ".join([org_type, obj.federal_agency.agency])
else:
return org_type
portfolio_type.short_description = "Portfolio type"
def suborganizations(self, obj: models.Portfolio): def suborganizations(self, obj: models.Portfolio):
queryset = obj.get_suborganizations() queryset = obj.get_suborganizations()
return self.get_links_csv(queryset, "suborganization") sep = '<div class="display-block margin-top-1"></div>'
return self.get_links_csv(queryset, "suborganization", seperator=sep)
suborganizations.short_description = "Suborganizations" suborganizations.short_description = "Suborganizations"
def domains(self, obj: models.Portfolio): def domains(self, obj: models.Portfolio):
queryset = obj.get_domains() queryset = obj.get_domains()
return self.get_links_csv(queryset, "domaininformation") sep = '<div class="display-block margin-top-1"></div>'
return self.get_links_csv(queryset, "domaininformation", seperator=sep)
domains.short_description = "Domains" domains.short_description = "Domains"
def domain_requests(self, obj: models.Portfolio): def domain_requests(self, obj: models.Portfolio):
queryset = obj.get_domain_requests() queryset = obj.get_domain_requests()
return self.get_links_csv(queryset, "domainrequest") sep = '<div class="display-block margin-top-1"></div>'
return self.get_links_csv(queryset, "domainrequest", seperator=sep)
domain_requests.short_description = "Domain requests" domain_requests.short_description = "Domain requests"
def administrators(self, obj: models.Portfolio): def administrators(self, obj: models.Portfolio):
@ -2902,8 +2915,8 @@ class PortfolioAdmin(ListHeaderAdmin):
"federal_agency", "federal_agency",
] ]
# TODO change these names # Q for reviewers: What should this be called?
def get_links_csv(self, queryset, model_name, link_text_attribute=None): def get_links_csv(self, queryset, model_name, link_text_attribute=None, seperator=", "):
links = [] links = []
for item in queryset: for item in queryset:
if link_text_attribute: if link_text_attribute:
@ -2914,26 +2927,14 @@ class PortfolioAdmin(ListHeaderAdmin):
item_display_value = item item_display_value = item
if item_display_value: if item_display_value:
link = self.get_html_change_link(model_name=model_name, object_id=item.pk, text_content=item_display_value) change_url = reverse(f"admin:registrar_{model_name}_change", args=[item.pk])
links.append(link) links.append(f'<a href="{change_url}">{escape(item_display_value)}</a>')
return format_html(", ".join(links)) return format_html(seperator.join(links))
def get_html_change_link(self, model_name, object_id, text_content):
change_url = reverse(f"admin:registrar_{model_name}_change", args=[object_id])
return f'<a href="{change_url}">{escape(text_content)}</a>'
def change_view(self, request, object_id, form_url="", extra_context=None): def change_view(self, request, object_id, form_url="", extra_context=None):
"""Add related suborganizations and domain groups""" """Add related suborganizations and domain groups"""
obj = self.get_object(request, object_id) obj = self.get_object(request, object_id)
extra_context = {"administrators": obj.get_administrators(), "members": obj.get_members()}
# ---- Domain Groups
domain_groups = DomainGroup.objects.filter(portfolio=obj)
# ---- Suborganizations
suborganizations = Suborganization.objects.filter(portfolio=obj)
extra_context = {"domain_groups": domain_groups, "suborganizations": suborganizations}
return super().change_view(request, object_id, form_url, extra_context) return super().change_view(request, object_id, form_url, extra_context)
def save_model(self, request, obj, form, change): def save_model(self, request, obj, form, change):

View file

@ -0,0 +1,13 @@
{% extends "django/admin/includes/email_clipboard_fieldset.html" %}
{% load custom_filters %}
{% load static url_helpers %}
{% block field_readonly %}
{% if field.field.name == "members" %}
{% comment %} Do nothing - for now {% endcomment %}
<div class="readonly">{{ field.contents }}</div>
{% else %}
<div class="readonly">{{ field.contents }}</div>
{% endif %}
{% endblock field_readonly %}

View file

@ -1,34 +1,17 @@
{% extends 'django/admin/email_clipboard_change_form.html' %} {% extends 'django/admin/email_clipboard_change_form.html' %}
{% load i18n static %} {% load i18n static %}
{% block after_related_objects %} {% block field_sets %}
<div class="module aligned padding-3"> {% for fieldset in adminform %}
<h2>Associated groups and suborganizations</h2> {% comment %}
<div class="grid-row grid-gap mobile:padding-x-1 desktop:padding-x-4"> TODO: this will eventually need to be changed to something like this
<div class="mobile:grid-col-12 tablet:grid-col-6 desktop:grid-col-4"> if we ever want to customize this file:
<h3>Domain groups</h3> {% include "django/admin/includes/domain_information_fieldset.html" %}
<ul class="margin-0 padding-0">
{% for domain_group in domain_groups %} Use detail_table_fieldset as an example, or just extend it.
<li>
<a href="{% url 'admin:registrar_domaingroup_change' domain_group.pk %}"> original_object is just a variable name for "DomainInformation" or "DomainRequest"
{{ domain_group.name }} {% endcomment %}
</a> {% include "django/admin/includes/portfolio_fieldset.html" with original_object=original %}
</li> {% endfor %}
{% endfor %}
</ul>
</div>
<div class="mobile:grid-col-12 tablet:grid-col-6 desktop:grid-col-4">
<h3>Suborganizations</h3>
<ul class="margin-0 padding-0">
{% for suborg in suborganizations %}
<li>
<a href="{% url 'admin:registrar_suborganization_change' suborg.pk %}">
{{ suborg.name }}
</a>
</li>
{% endfor %}
</ul>
</div>
</div>
</div>
{% endblock %} {% endblock %}