Adds a contact_again field for prospects

apikeys
Laurent 2 months ago
parent bcf5017169
commit debf60bc9b
  1. 8
      biz/admin.py
  2. 18
      biz/filters.py
  3. 18
      biz/migrations/0004_prospect_contact_again.py
  4. 3
      biz/models.py

@ -14,7 +14,7 @@ import logging
from .models import Entity, Prospect, Activity, Status, ActivityType, EmailTemplate, DeclinationReason
from .forms import FileImportForm, EmailTemplateSelectionForm
from .filters import ProspectStatusFilter, StaffUserFilter, ProspectProfileFilter, ProspectDeclineReasonFilter
from .filters import ContactAgainFilter, ProspectStatusFilter, StaffUserFilter, ProspectProfileFilter, ProspectDeclineReasonFilter
from tournaments.models import CustomUser
from tournaments.models.enums import UserOrigin
@ -109,12 +109,12 @@ class ProspectAdmin(SyncedObjectAdmin):
readonly_fields = ['related_activities', 'entity_names', 'current_status', 'id']
fieldsets = [
(None, {
'fields': ['related_activities', 'id', 'entity_names', 'first_name', 'last_name', 'email', 'phone', 'official_user', 'name_unsure', 'entities', 'related_user']
'fields': ['related_activities', 'id', 'entity_names', 'first_name', 'last_name', 'email', 'phone', 'contact_again', 'official_user', 'name_unsure', 'entities', 'related_user']
}),
]
list_display = ('first_name', 'last_name', 'entity_names', 'last_update_date', 'current_status', 'current_text')
list_display = ('first_name', 'last_name', 'entity_names', 'last_update_date', 'current_status', 'current_text', 'contact_again')
list_filter = (ProspectStatusFilter, ProspectDeclineReasonFilter, 'creation_date', StaffUserFilter, 'source', ProspectProfileFilter)
list_filter = (ContactAgainFilter, ProspectStatusFilter, ProspectDeclineReasonFilter, 'creation_date', StaffUserFilter, 'source', ProspectProfileFilter)
search_fields = ('first_name', 'last_name', 'email', 'entities__name')
date_hierarchy = 'creation_date'
change_list_template = "admin/biz/prospect/change_list.html"

@ -96,7 +96,6 @@ class ProspectDeclineReasonFilter(admin.SimpleListFilter):
def lookups(self, request, model_admin):
return [(tag.name, tag.value) for tag in DeclinationReason]
def queryset(self, request, queryset):
if self.value():
# Get prospects whose most recent activity has the selected status
@ -110,3 +109,20 @@ class ProspectDeclineReasonFilter(admin.SimpleListFilter):
).distinct()
else:
return queryset
class ContactAgainFilter(admin.SimpleListFilter):
title = 'Contact again' # or whatever you want
parameter_name = 'contact_again'
def lookups(self, request, model_admin):
return (
('1', 'Should be contacted'),
# ('0', 'Is null'),
)
def queryset(self, request, queryset):
if self.value() == '1':
return queryset.filter(contact_again__isnull=False)
# if self.value() == '0':
# return queryset.filter(my_field__isnull=True)
return queryset

@ -0,0 +1,18 @@
# Generated by Django 5.1 on 2025-09-04 12:42
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('biz', '0003_alter_activity_status'),
]
operations = [
migrations.AddField(
model_name='prospect',
name='contact_again',
field=models.DateTimeField(blank=True, null=True),
),
]

@ -68,6 +68,7 @@ class Prospect(BaseModel):
entities = models.ManyToManyField(Entity, blank=True, related_name='prospects')
source = models.CharField(max_length=100, null=True, blank=True)
contact_again = models.DateTimeField(null=True, blank=True)
def delete_dependencies(self):
pass
@ -154,7 +155,7 @@ class Activity(BaseModel):
@receiver(m2m_changed, sender=Activity.prospects.through)
def update_prospect_last_update(sender, instance, action, pk_set, **kwargs):
instance.prospects.update(last_update=timezone.now())
instance.prospects.update(last_update=timezone.now(),contact_again=None)
class EmailTemplate(BaseModel):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=True)

Loading…
Cancel
Save