diff --git a/biz/admin.py b/biz/admin.py index a429fba..23c521b 100644 --- a/biz/admin.py +++ b/biz/admin.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" diff --git a/biz/filters.py b/biz/filters.py index fb23d22..9c3f6a2 100644 --- a/biz/filters.py +++ b/biz/filters.py @@ -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 diff --git a/biz/migrations/0004_prospect_contact_again.py b/biz/migrations/0004_prospect_contact_again.py new file mode 100644 index 0000000..4cbee4f --- /dev/null +++ b/biz/migrations/0004_prospect_contact_again.py @@ -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), + ), + ] diff --git a/biz/models.py b/biz/models.py index 5702f0e..e406541 100644 --- a/biz/models.py +++ b/biz/models.py @@ -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)