mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-05-28 16:29:54 +02:00
Remove submitter from models
This commit is contained in:
parent
f1c8f52456
commit
2f2b2fe10f
9 changed files with 59 additions and 60 deletions
|
@ -505,7 +505,6 @@ class AdminSortFields:
|
||||||
sort_mapping = {
|
sort_mapping = {
|
||||||
# == Contact == #
|
# == Contact == #
|
||||||
"other_contacts": (Contact, _name_sort),
|
"other_contacts": (Contact, _name_sort),
|
||||||
"submitter": (Contact, _name_sort),
|
|
||||||
# == Senior Official == #
|
# == Senior Official == #
|
||||||
"senior_official": (SeniorOfficial, _name_sort),
|
"senior_official": (SeniorOfficial, _name_sort),
|
||||||
# == User == #
|
# == User == #
|
||||||
|
@ -1390,13 +1389,9 @@ class DomainInformationAdmin(ListHeaderAdmin, ImportExportModelAdmin):
|
||||||
"domain",
|
"domain",
|
||||||
"generic_org_type",
|
"generic_org_type",
|
||||||
"created_at",
|
"created_at",
|
||||||
"submitter",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
orderable_fk_fields = [
|
orderable_fk_fields = [("domain", "name")]
|
||||||
("domain", "name"),
|
|
||||||
("submitter", ["first_name", "last_name"]),
|
|
||||||
]
|
|
||||||
|
|
||||||
# Filters
|
# Filters
|
||||||
list_filter = ["generic_org_type"]
|
list_filter = ["generic_org_type"]
|
||||||
|
@ -1408,7 +1403,7 @@ class DomainInformationAdmin(ListHeaderAdmin, ImportExportModelAdmin):
|
||||||
search_help_text = "Search by domain."
|
search_help_text = "Search by domain."
|
||||||
|
|
||||||
fieldsets = [
|
fieldsets = [
|
||||||
(None, {"fields": ["portfolio", "sub_organization", "creator", "submitter", "domain_request", "notes"]}),
|
(None, {"fields": ["portfolio", "sub_organization", "creator", "domain_request", "notes"]}),
|
||||||
(".gov domain", {"fields": ["domain"]}),
|
(".gov domain", {"fields": ["domain"]}),
|
||||||
("Contacts", {"fields": ["senior_official", "other_contacts", "no_other_contacts_rationale"]}),
|
("Contacts", {"fields": ["senior_official", "other_contacts", "no_other_contacts_rationale"]}),
|
||||||
("Background info", {"fields": ["anything_else"]}),
|
("Background info", {"fields": ["anything_else"]}),
|
||||||
|
@ -1472,7 +1467,6 @@ class DomainInformationAdmin(ListHeaderAdmin, ImportExportModelAdmin):
|
||||||
"more_organization_information",
|
"more_organization_information",
|
||||||
"domain",
|
"domain",
|
||||||
"domain_request",
|
"domain_request",
|
||||||
"submitter",
|
|
||||||
"no_other_contacts_rationale",
|
"no_other_contacts_rationale",
|
||||||
"anything_else",
|
"anything_else",
|
||||||
"is_policy_acknowledged",
|
"is_policy_acknowledged",
|
||||||
|
@ -1487,7 +1481,6 @@ class DomainInformationAdmin(ListHeaderAdmin, ImportExportModelAdmin):
|
||||||
"domain_request",
|
"domain_request",
|
||||||
"senior_official",
|
"senior_official",
|
||||||
"domain",
|
"domain",
|
||||||
"submitter",
|
|
||||||
"portfolio",
|
"portfolio",
|
||||||
"sub_organization",
|
"sub_organization",
|
||||||
]
|
]
|
||||||
|
@ -1658,13 +1651,11 @@ class DomainRequestAdmin(ListHeaderAdmin, ImportExportModelAdmin):
|
||||||
"custom_election_board",
|
"custom_election_board",
|
||||||
"city",
|
"city",
|
||||||
"state_territory",
|
"state_territory",
|
||||||
"submitter",
|
|
||||||
"investigator",
|
"investigator",
|
||||||
]
|
]
|
||||||
|
|
||||||
orderable_fk_fields = [
|
orderable_fk_fields = [
|
||||||
("requested_domain", "name"),
|
("requested_domain", "name"),
|
||||||
("submitter", ["first_name", "last_name"]),
|
|
||||||
("investigator", ["first_name", "last_name"]),
|
("investigator", ["first_name", "last_name"]),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -1694,11 +1685,11 @@ class DomainRequestAdmin(ListHeaderAdmin, ImportExportModelAdmin):
|
||||||
# Search
|
# Search
|
||||||
search_fields = [
|
search_fields = [
|
||||||
"requested_domain__name",
|
"requested_domain__name",
|
||||||
"submitter__email",
|
"creator__email",
|
||||||
"submitter__first_name",
|
"creator__first_name",
|
||||||
"submitter__last_name",
|
"creator__last_name",
|
||||||
]
|
]
|
||||||
search_help_text = "Search by domain or submitter."
|
search_help_text = "Search by domain or creator."
|
||||||
|
|
||||||
fieldsets = [
|
fieldsets = [
|
||||||
(
|
(
|
||||||
|
@ -1714,7 +1705,6 @@ class DomainRequestAdmin(ListHeaderAdmin, ImportExportModelAdmin):
|
||||||
"action_needed_reason_email",
|
"action_needed_reason_email",
|
||||||
"investigator",
|
"investigator",
|
||||||
"creator",
|
"creator",
|
||||||
"submitter",
|
|
||||||
"approved_domain",
|
"approved_domain",
|
||||||
"notes",
|
"notes",
|
||||||
]
|
]
|
||||||
|
@ -1802,7 +1792,6 @@ class DomainRequestAdmin(ListHeaderAdmin, ImportExportModelAdmin):
|
||||||
"approved_domain",
|
"approved_domain",
|
||||||
"alternative_domains",
|
"alternative_domains",
|
||||||
"purpose",
|
"purpose",
|
||||||
"submitter",
|
|
||||||
"no_other_contacts_rationale",
|
"no_other_contacts_rationale",
|
||||||
"anything_else",
|
"anything_else",
|
||||||
"is_policy_acknowledged",
|
"is_policy_acknowledged",
|
||||||
|
@ -1813,7 +1802,6 @@ class DomainRequestAdmin(ListHeaderAdmin, ImportExportModelAdmin):
|
||||||
autocomplete_fields = [
|
autocomplete_fields = [
|
||||||
"approved_domain",
|
"approved_domain",
|
||||||
"requested_domain",
|
"requested_domain",
|
||||||
"submitter",
|
|
||||||
"creator",
|
"creator",
|
||||||
"senior_official",
|
"senior_official",
|
||||||
"investigator",
|
"investigator",
|
||||||
|
@ -2150,10 +2138,7 @@ class DomainRequestAdmin(ListHeaderAdmin, ImportExportModelAdmin):
|
||||||
if not action_needed_reason or action_needed_reason == DomainRequest.ActionNeededReasons.OTHER:
|
if not action_needed_reason or action_needed_reason == DomainRequest.ActionNeededReasons.OTHER:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
if flag_is_active(None, "profile_feature"): # type: ignore
|
recipient = domain_request.creator
|
||||||
recipient = domain_request.creator
|
|
||||||
else:
|
|
||||||
recipient = domain_request.submitter
|
|
||||||
|
|
||||||
# Return the context of the rendered views
|
# Return the context of the rendered views
|
||||||
context = {"domain_request": domain_request, "recipient": recipient}
|
context = {"domain_request": domain_request, "recipient": recipient}
|
||||||
|
|
|
@ -37,7 +37,6 @@ class DomainRequestFixture:
|
||||||
# "anything_else": None,
|
# "anything_else": None,
|
||||||
# "is_policy_acknowledged": None,
|
# "is_policy_acknowledged": None,
|
||||||
# "senior_official": None,
|
# "senior_official": None,
|
||||||
# "submitter": None,
|
|
||||||
# "other_contacts": [],
|
# "other_contacts": [],
|
||||||
# "current_websites": [],
|
# "current_websites": [],
|
||||||
# "alternative_domains": [],
|
# "alternative_domains": [],
|
||||||
|
@ -123,12 +122,6 @@ class DomainRequestFixture:
|
||||||
else:
|
else:
|
||||||
da.senior_official = Contact.objects.create(**cls.fake_contact())
|
da.senior_official = Contact.objects.create(**cls.fake_contact())
|
||||||
|
|
||||||
if not da.submitter:
|
|
||||||
if "submitter" in app and app["submitter"] is not None:
|
|
||||||
da.submitter, _ = Contact.objects.get_or_create(**app["submitter"])
|
|
||||||
else:
|
|
||||||
da.submitter = Contact.objects.create(**cls.fake_contact())
|
|
||||||
|
|
||||||
if not da.requested_domain:
|
if not da.requested_domain:
|
||||||
if "requested_domain" in app and app["requested_domain"] is not None:
|
if "requested_domain" in app and app["requested_domain"] is not None:
|
||||||
da.requested_domain, _ = DraftDomain.objects.get_or_create(name=app["requested_domain"])
|
da.requested_domain, _ = DraftDomain.objects.get_or_create(name=app["requested_domain"])
|
||||||
|
|
|
@ -387,12 +387,12 @@ class PurposeForm(RegistrarForm):
|
||||||
|
|
||||||
|
|
||||||
class YourContactForm(RegistrarForm):
|
class YourContactForm(RegistrarForm):
|
||||||
JOIN = "submitter"
|
JOIN = "creator"
|
||||||
|
|
||||||
def to_database(self, obj):
|
def to_database(self, obj):
|
||||||
if not self.is_valid():
|
if not self.is_valid():
|
||||||
return
|
return
|
||||||
contact = getattr(obj, "submitter", None)
|
contact = getattr(obj, "creator", None)
|
||||||
if contact is not None and not contact.has_more_than_one_join("submitted_domain_requests"):
|
if contact is not None and not contact.has_more_than_one_join("submitted_domain_requests"):
|
||||||
# if contact exists in the database and is not joined to other entities
|
# if contact exists in the database and is not joined to other entities
|
||||||
super().to_database(contact)
|
super().to_database(contact)
|
||||||
|
@ -401,12 +401,12 @@ class YourContactForm(RegistrarForm):
|
||||||
# in either case, create a new contact and update it
|
# in either case, create a new contact and update it
|
||||||
contact = Contact()
|
contact = Contact()
|
||||||
super().to_database(contact)
|
super().to_database(contact)
|
||||||
obj.submitter = contact
|
obj.creator = contact
|
||||||
obj.save()
|
obj.save()
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_database(cls, obj):
|
def from_database(cls, obj):
|
||||||
contact = getattr(obj, "submitter", None)
|
contact = getattr(obj, "creator", None)
|
||||||
return super().from_database(contact)
|
return super().from_database(contact)
|
||||||
|
|
||||||
first_name = forms.CharField(
|
first_name = forms.CharField(
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
# Generated by Django 4.2.10 on 2024-08-26 18:45
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
("registrar", "0118_alter_portfolio_options_alter_portfolio_creator_and_more"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name="domaininformation",
|
||||||
|
name="submitter",
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name="domainrequest",
|
||||||
|
name="submitter",
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="domainrequest",
|
||||||
|
name="creator",
|
||||||
|
field=models.ForeignKey(
|
||||||
|
help_text="Person who submitted the domain request. Will receive email updates.",
|
||||||
|
on_delete=django.db.models.deletion.PROTECT,
|
||||||
|
related_name="domain_requests_created",
|
||||||
|
to=settings.AUTH_USER_MODEL,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]
|
|
@ -48,8 +48,7 @@ class DomainInformation(TimeStampedModel):
|
||||||
null=True,
|
null=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
# This is the domain request user who created this domain request. The contact
|
# This is the domain request user who created this domain request.
|
||||||
# information that they gave is in the `submitter` field
|
|
||||||
creator = models.ForeignKey(
|
creator = models.ForeignKey(
|
||||||
"registrar.User",
|
"registrar.User",
|
||||||
on_delete=models.PROTECT,
|
on_delete=models.PROTECT,
|
||||||
|
@ -197,17 +196,6 @@ class DomainInformation(TimeStampedModel):
|
||||||
related_name="domain_info",
|
related_name="domain_info",
|
||||||
)
|
)
|
||||||
|
|
||||||
# This is the contact information provided by the domain requestor. The
|
|
||||||
# user who created the domain request is in the `creator` field.
|
|
||||||
submitter = models.ForeignKey(
|
|
||||||
"registrar.Contact",
|
|
||||||
null=True,
|
|
||||||
blank=True,
|
|
||||||
related_name="submitted_domain_requests_information",
|
|
||||||
on_delete=models.PROTECT,
|
|
||||||
help_text='Person listed under "your contact information" in the request form',
|
|
||||||
)
|
|
||||||
|
|
||||||
purpose = models.TextField(
|
purpose = models.TextField(
|
||||||
null=True,
|
null=True,
|
||||||
blank=True,
|
blank=True,
|
||||||
|
|
|
@ -70,7 +70,7 @@ This is using a custom implementation fieldset.html (see admin/fieldset.html)
|
||||||
<div class="readonly textarea-wrapper">
|
<div class="readonly textarea-wrapper">
|
||||||
<div id="action_needed_reason_email_readonly" class="dja-readonly-textarea-container padding-1 margin-top-0 padding-top-0 margin-bottom-1 thin-border collapse--dgsimple collapsed">
|
<div id="action_needed_reason_email_readonly" class="dja-readonly-textarea-container padding-1 margin-top-0 padding-top-0 margin-bottom-1 thin-border collapse--dgsimple collapsed">
|
||||||
<label class="max-full" for="action_needed_reason_email_view_more">
|
<label class="max-full" for="action_needed_reason_email_view_more">
|
||||||
<strong>Sent to {% if has_profile_feature_flag %}creator{%else%}submitter{%endif%}</strong>
|
<strong>Sent to {% if has_profile_feature_flag %}creator{%else%}creator{%endif%}</strong>
|
||||||
</label>
|
</label>
|
||||||
<textarea id="action_needed_reason_email_view_more" cols="40" rows="20" class="{% if not original_object.action_needed_reason %}display-none{% endif %}" readonly>
|
<textarea id="action_needed_reason_email_view_more" cols="40" rows="20" class="{% if not original_object.action_needed_reason %}display-none{% endif %}" readonly>
|
||||||
{{ original_object.action_needed_reason_email }}
|
{{ original_object.action_needed_reason_email }}
|
||||||
|
@ -187,10 +187,10 @@ This is using a custom implementation fieldset.html (see admin/fieldset.html)
|
||||||
{% if not skip_additional_contact_info %}
|
{% if not skip_additional_contact_info %}
|
||||||
{% include "django/admin/includes/user_detail_list.html" with user=original_object.creator no_title_top_padding=field.is_readonly %}
|
{% include "django/admin/includes/user_detail_list.html" with user=original_object.creator no_title_top_padding=field.is_readonly %}
|
||||||
{% endif%}
|
{% endif%}
|
||||||
{% elif field.field.name == "submitter" %}
|
{% elif field.field.name == "creator" %}
|
||||||
<div class="flex-container tablet:margin-top-2">
|
<div class="flex-container tablet:margin-top-2">
|
||||||
<label aria-label="Submitter contact details"></label>
|
<label aria-label="Creator contact details"></label>
|
||||||
{% include "django/admin/includes/contact_detail_list.html" with user=original_object.submitter no_title_top_padding=field.is_readonly %}
|
{% include "django/admin/includes/contact_detail_list.html" with user=original_object.creator no_title_top_padding=field.is_readonly %}
|
||||||
</div>
|
</div>
|
||||||
{% elif field.field.name == "senior_official" %}
|
{% elif field.field.name == "senior_official" %}
|
||||||
<div class="flex-container">
|
<div class="flex-container">
|
||||||
|
|
|
@ -130,8 +130,8 @@
|
||||||
|
|
||||||
{% if step == Step.YOUR_CONTACT %}
|
{% if step == Step.YOUR_CONTACT %}
|
||||||
{% namespaced_url 'domain-request' step as domain_request_url %}
|
{% namespaced_url 'domain-request' step as domain_request_url %}
|
||||||
{% if domain_request.submitter is not None %}
|
{% if domain_request.creator is not None %}
|
||||||
{% with title=form_titles|get_item:step value=domain_request.submitter %}
|
{% with title=form_titles|get_item:step value=domain_request.creator %}
|
||||||
{% include "includes/summary_item.html" with title=title value=value heading_level=heading_level editable=True edit_link=domain_request_url contact='true' %}
|
{% include "includes/summary_item.html" with title=title value=value heading_level=heading_level editable=True edit_link=domain_request_url contact='true' %}
|
||||||
{% endwith %}
|
{% endwith %}
|
||||||
{% else %}
|
{% else %}
|
||||||
|
|
|
@ -109,8 +109,8 @@
|
||||||
{% include "includes/summary_item.html" with title='Purpose of your domain' value=DomainRequest.purpose heading_level=heading_level %}
|
{% include "includes/summary_item.html" with title='Purpose of your domain' value=DomainRequest.purpose heading_level=heading_level %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if DomainRequest.submitter and not has_profile_feature_flag %}
|
{% if DomainRequest.creator and not has_profile_feature_flag %}
|
||||||
{% include "includes/summary_item.html" with title='Your contact information' value=DomainRequest.submitter contact='true' heading_level=heading_level %}
|
{% include "includes/summary_item.html" with title='Your contact information' value=DomainRequest.creator contact='true' heading_level=heading_level %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if DomainRequest.other_contacts.all %}
|
{% if DomainRequest.other_contacts.all %}
|
||||||
|
|
|
@ -375,7 +375,7 @@ class DomainRequestWizard(DomainRequestWizardPermissionView, TemplateView):
|
||||||
),
|
),
|
||||||
"dotgov_domain": self.domain_request.requested_domain is not None,
|
"dotgov_domain": self.domain_request.requested_domain is not None,
|
||||||
"purpose": self.domain_request.purpose is not None,
|
"purpose": self.domain_request.purpose is not None,
|
||||||
"your_contact": self.domain_request.submitter is not None,
|
"your_contact": self.domain_request.creator is not None,
|
||||||
"other_contacts": (
|
"other_contacts": (
|
||||||
self.domain_request.other_contacts.exists()
|
self.domain_request.other_contacts.exists()
|
||||||
or self.domain_request.no_other_contacts_rationale is not None
|
or self.domain_request.no_other_contacts_rationale is not None
|
||||||
|
@ -813,7 +813,7 @@ class DomainRequestDeleteView(DomainRequestPermissionDeleteView):
|
||||||
|
|
||||||
# After a delete occurs, do a second sweep on any returned duplicates.
|
# After a delete occurs, do a second sweep on any returned duplicates.
|
||||||
# This determines if any of these three fields share a contact, which is used for
|
# This determines if any of these three fields share a contact, which is used for
|
||||||
# the edge case where the same user may be an SO, and a submitter, for example.
|
# the edge case where the same user may be an SO, and a creator, for example.
|
||||||
if len(duplicates) > 0:
|
if len(duplicates) > 0:
|
||||||
duplicates_to_delete, _ = self._get_orphaned_contacts(domain_request, check_db=True)
|
duplicates_to_delete, _ = self._get_orphaned_contacts(domain_request, check_db=True)
|
||||||
Contact.objects.filter(id__in=duplicates_to_delete).delete()
|
Contact.objects.filter(id__in=duplicates_to_delete).delete()
|
||||||
|
@ -826,7 +826,7 @@ class DomainRequestDeleteView(DomainRequestPermissionDeleteView):
|
||||||
Collects all orphaned contacts associated with a given DomainRequest object.
|
Collects all orphaned contacts associated with a given DomainRequest object.
|
||||||
|
|
||||||
An orphaned contact is defined as a contact that is associated with the domain request,
|
An orphaned contact is defined as a contact that is associated with the domain request,
|
||||||
but not with any other domain_request. This includes the senior official, the submitter,
|
but not with any other domain_request. This includes the senior official, the creator,
|
||||||
and any other contacts linked to the domain_request.
|
and any other contacts linked to the domain_request.
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
|
@ -842,18 +842,18 @@ class DomainRequestDeleteView(DomainRequestPermissionDeleteView):
|
||||||
|
|
||||||
# Get each contact object on the DomainRequest object
|
# Get each contact object on the DomainRequest object
|
||||||
so = domain_request.senior_official
|
so = domain_request.senior_official
|
||||||
submitter = domain_request.submitter
|
creator = domain_request.creator
|
||||||
other_contacts = list(domain_request.other_contacts.all())
|
other_contacts = list(domain_request.other_contacts.all())
|
||||||
other_contact_ids = domain_request.other_contacts.all().values_list("id", flat=True)
|
other_contact_ids = domain_request.other_contacts.all().values_list("id", flat=True)
|
||||||
|
|
||||||
# Check if the desired item still exists in the DB
|
# Check if the desired item still exists in the DB
|
||||||
if check_db:
|
if check_db:
|
||||||
so = self._get_contacts_by_id([so.id]).first() if so is not None else None
|
so = self._get_contacts_by_id([so.id]).first() if so is not None else None
|
||||||
submitter = self._get_contacts_by_id([submitter.id]).first() if submitter is not None else None
|
creator = self._get_contacts_by_id([creator.id]).first() if creator is not None else None
|
||||||
other_contacts = self._get_contacts_by_id(other_contact_ids)
|
other_contacts = self._get_contacts_by_id(other_contact_ids)
|
||||||
|
|
||||||
# Pair each contact with its db related name for use in checking if it has joins
|
# Pair each contact with its db related name for use in checking if it has joins
|
||||||
checked_contacts = [(so, "senior_official"), (submitter, "submitted_domain_requests")]
|
checked_contacts = [(so, "senior_official"), (creator, "submitted_domain_requests")]
|
||||||
checked_contacts.extend((contact, "contact_domain_requests") for contact in other_contacts)
|
checked_contacts.extend((contact, "contact_domain_requests") for contact in other_contacts)
|
||||||
|
|
||||||
for contact, related_name in checked_contacts:
|
for contact, related_name in checked_contacts:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue