diff --git a/biz/admin.py b/biz/admin.py index c853ffb..8fd2989 100644 --- a/biz/admin.py +++ b/biz/admin.py @@ -12,9 +12,9 @@ import io import time import logging -from .models import Entity, Prospect, Activity, Status, ActivityType, EmailTemplate, DeclinationReason, Campaign +from .models import Entity, Prospect, Activity, Status, ActivityType, EmailTemplate, DeclinationReason, ProspectGroup from .forms import FileImportForm, EmailTemplateSelectionForm -from .filters import ContactAgainFilter, ProspectStatusFilter, StaffUserFilter, ProspectProfileFilter, ProspectDeclineReasonFilter, ProspectCampaignFilter +from .filters import ContactAgainFilter, ProspectStatusFilter, StaffUserFilter, ProspectProfileFilter, ProspectDeclineReasonFilter, ProspectGroupFilter from tournaments.models import CustomUser from tournaments.models.enums import UserOrigin @@ -118,7 +118,7 @@ class ProspectAdmin(SyncedObjectAdmin): ] list_display = ('first_name', 'last_name', 'entity_names', 'last_update_date', 'current_status', 'current_text', 'contact_again') - list_filter = (ContactAgainFilter, ProspectStatusFilter, ProspectDeclineReasonFilter, ProspectCampaignFilter, 'creation_date', StaffUserFilter, 'source', ProspectProfileFilter) + list_filter = (ContactAgainFilter, ProspectStatusFilter, ProspectDeclineReasonFilter, ProspectGroupFilter, '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" @@ -401,8 +401,8 @@ class ProspectAdmin(SyncedObjectAdmin): time.sleep(1) -@admin.register(Campaign) -class CampaignAdmin(SyncedObjectAdmin): +@admin.register(ProspectGroup) +class ProspectGroupAdmin(SyncedObjectAdmin): list_display = ('name', 'user_count') date_hierarchy = 'creation_date' diff --git a/biz/filters.py b/biz/filters.py index 6e10e8c..6a03c5a 100644 --- a/biz/filters.py +++ b/biz/filters.py @@ -7,7 +7,7 @@ from django.utils import timezone from dateutil.relativedelta import relativedelta -from .models import Activity, Prospect, Status, DeclinationReason, Campaign +from .models import Activity, Prospect, Status, DeclinationReason, ProspectGroup User = get_user_model() @@ -110,17 +110,17 @@ class ProspectDeclineReasonFilter(admin.SimpleListFilter): else: return queryset -class ProspectCampaignFilter(admin.SimpleListFilter): - title = 'Campaign' - parameter_name = 'campaign' +class ProspectGroupFilter(admin.SimpleListFilter): + title = 'ProspectGroup' + parameter_name = 'prospect_group' def lookups(self, request, model_admin): - campaigns = Campaign.objects.all().order_by('-creation_date') - return [(campaign.id, campaign.name) for campaign in campaigns] + prospect_groups = ProspectGroup.objects.all().order_by('-creation_date') + return [(group.id, group.name) for group in prospect_groups] def queryset(self, request, queryset): if self.value(): - return queryset.filter(campaigns__id=self.value()) + return queryset.filter(prospect_groups__id=self.value()) return queryset class ContactAgainFilter(admin.SimpleListFilter): diff --git a/biz/migrations/0007_prospectgroup_delete_campaign.py b/biz/migrations/0007_prospectgroup_delete_campaign.py new file mode 100644 index 0000000..4603934 --- /dev/null +++ b/biz/migrations/0007_prospectgroup_delete_campaign.py @@ -0,0 +1,37 @@ +# Generated by Django 5.1 on 2025-09-22 14:08 + +import django.db.models.deletion +import django.utils.timezone +import uuid +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('biz', '0006_alter_campaign_id'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='ProspectGroup', + fields=[ + ('creation_date', models.DateTimeField(default=django.utils.timezone.now, editable=False)), + ('last_update', models.DateTimeField(default=django.utils.timezone.now)), + ('data_access_ids', models.JSONField(default=list)), + ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), + ('name', models.CharField(blank=True, max_length=200, null=True)), + ('last_updated_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), + ('prospects', models.ManyToManyField(blank=True, related_name='prospect_groups', to='biz.prospect')), + ('related_user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), + ], + options={ + 'abstract': False, + }, + ), + migrations.DeleteModel( + name='Campaign', + ), + ] diff --git a/biz/models.py b/biz/models.py index e271b18..cc3eb0f 100644 --- a/biz/models.py +++ b/biz/models.py @@ -171,10 +171,10 @@ class EmailTemplate(BaseModel): def delete_dependencies(self): pass -class Campaign(BaseModel): +class ProspectGroup(BaseModel): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=True) name = models.CharField(max_length=200, null=True, blank=True) - prospects = models.ManyToManyField(Prospect, blank=True, related_name='campaigns') + prospects = models.ManyToManyField(Prospect, blank=True, related_name='prospect_groups') def user_count(self): return self.prospects.count() diff --git a/tournaments/admin.py b/tournaments/admin.py index 49d013f..c742a72 100644 --- a/tournaments/admin.py +++ b/tournaments/admin.py @@ -9,7 +9,7 @@ from django.shortcuts import render from django.db.models import Avg from datetime import timedelta, datetime -from biz.models import Prospect, Campaign +from biz.models import Prospect, ProspectGroup from .models import Club, TeamScore, Tournament, CustomUser, Event, Round, GroupStage, Match, TeamRegistration, PlayerRegistration, Purchase, Court, DateInterval, FailedApiCall, Log, DeviceToken, DrawLog, UnregisteredTeam, UnregisteredPlayer, Image from .forms import CustomUserCreationForm, CustomUserChangeForm