diff --git a/src/registrar/admin.py b/src/registrar/admin.py index c059e5674..6585d602a 100644 --- a/src/registrar/admin.py +++ b/src/registrar/admin.py @@ -344,6 +344,12 @@ class UserDomainRoleAdmin(ListHeaderAdmin): class DomainInvitationAdmin(ListHeaderAdmin): """Custom domain invitation admin class.""" + class Meta: + model = models.DomainInvitation + fields = "__all__" + + _meta = Meta() + # Columns list_display = [ "email", @@ -356,6 +362,10 @@ class DomainInvitationAdmin(ListHeaderAdmin): "email", "domain__name", ] + + # Filters + list_filter = ("status",) + search_help_text = "Search by email or domain." # Mark the FSM field 'status' as readonly diff --git a/src/registrar/models/domain.py b/src/registrar/models/domain.py index 37e78ec6e..94430fb36 100644 --- a/src/registrar/models/domain.py +++ b/src/registrar/models/domain.py @@ -212,11 +212,9 @@ class Domain(TimeStampedModel, DomainHelper): @Cache def registry_expiration_date(self) -> date: """Get or set the `ex_date` element from the registry. - Additionally, update the expiration date in the registrar""" + Additionally, _get_property updates the expiration date in the registrar""" try: - self.expiration_date = self._get_property("ex_date") - self.save() - return self.expiration_date + return self._get_property("ex_date") except Exception as e: # exception raised during the save to registrar logger.error(f"error updating expiration date in registrar: {e}") @@ -880,6 +878,14 @@ class Domain(TimeStampedModel, DomainHelper): """ return self.state == self.State.READY + def is_editable(self) -> bool: + """domain is editable unless state is on hold or deleted""" + return self.state in [ + self.State.UNKNOWN, + self.State.DNS_NEEDED, + self.State.READY, + ] + def transfer(self): """Going somewhere. Not implemented.""" raise NotImplementedError() @@ -1188,7 +1194,7 @@ class Domain(TimeStampedModel, DomainHelper): logger.error(e) logger.error(e.code) raise e - if e.code == ErrorCode.OBJECT_DOES_NOT_EXIST: + if e.code == ErrorCode.OBJECT_DOES_NOT_EXIST and self.state != Domain.State.DELETED: # avoid infinite loop already_tried_to_create = True self.dns_needed_from_unknown() @@ -1602,6 +1608,12 @@ class Domain(TimeStampedModel, DomainHelper): if old_cache_contacts is not None: cleaned["contacts"] = old_cache_contacts + # if expiration date from registry does not match what is in db, + # update the db + if "ex_date" in cleaned and cleaned["ex_date"] != self.expiration_date: + self.expiration_date = cleaned["ex_date"] + self.save() + self._cache = cleaned except RegistryError as e: diff --git a/src/registrar/templates/domain_detail.html b/src/registrar/templates/domain_detail.html index e220fe1aa..81a350f82 100644 --- a/src/registrar/templates/domain_detail.html +++ b/src/registrar/templates/domain_detail.html @@ -29,30 +29,34 @@ {% url 'domain-dns-nameservers' pk=domain.id as url %} {% if domain.nameservers|length > 0 %} - {% include "includes/summary_item.html" with title='DNS name servers' domains='true' value=domain.nameservers list='true' edit_link=url %} + {% include "includes/summary_item.html" with title='DNS name servers' domains='true' value=domain.nameservers list='true' edit_link=url editable=domain.is_editable %} {% else %} + {% if domain.is_editable %}
No DNS name servers have been added yet. Before your domain can be used we’ll need information about your domain name servers.
- Add DNS name servers + Add DNS name servers + {% else %} + {% include "includes/summary_item.html" with title='DNS name servers' domains='true' value='' edit_link=url editable=domain.is_editable %} + {% endif %} {% endif %} {% url 'domain-org-name-address' pk=domain.id as url %} - {% include "includes/summary_item.html" with title='Organization name and mailing address' value=domain.domain_info address='true' edit_link=url %} + {% include "includes/summary_item.html" with title='Organization name and mailing address' value=domain.domain_info address='true' edit_link=url editable=domain.is_editable %} {% url 'domain-authorizing-official' pk=domain.id as url %} - {% include "includes/summary_item.html" with title='Authorizing official' value=domain.domain_info.authorizing_official contact='true' edit_link=url %} + {% include "includes/summary_item.html" with title='Authorizing official' value=domain.domain_info.authorizing_official contact='true' edit_link=url editable=domain.is_editable %} {% url 'domain-your-contact-information' pk=domain.id as url %} - {% include "includes/summary_item.html" with title='Your contact information' value=request.user.contact contact='true' edit_link=url %} + {% include "includes/summary_item.html" with title='Your contact information' value=request.user.contact contact='true' edit_link=url editable=domain.is_editable %} {% url 'domain-security-email' pk=domain.id as url %} {% if security_email is not None and security_email != default_security_email%} - {% include "includes/summary_item.html" with title='Security email' value=security_email edit_link=url %} + {% include "includes/summary_item.html" with title='Security email' value=security_email edit_link=url editable=domain.is_editable %} {% else %} - {% include "includes/summary_item.html" with title='Security email' value='None provided' edit_link=url %} + {% include "includes/summary_item.html" with title='Security email' value='None provided' edit_link=url editable=domain.is_editable %} {% endif %} {% url 'domain-users' pk=domain.id as url %} - {% include "includes/summary_item.html" with title='Domain managers' users='true' list=True value=domain.permissions.all edit_link=url %} + {% include "includes/summary_item.html" with title='Domain managers' users='true' list=True value=domain.permissions.all edit_link=url editable=domain.is_editable %} {% endblock %} {# domain_content #} diff --git a/src/registrar/templates/domain_sidebar.html b/src/registrar/templates/domain_sidebar.html index 6be8f655d..c224d60c1 100644 --- a/src/registrar/templates/domain_sidebar.html +++ b/src/registrar/templates/domain_sidebar.html @@ -12,6 +12,7 @@ + {% if domain.is_editable %}