add action to convert users into prospects

mailing
Laurent 2 months ago
parent b2bd41b737
commit d5b2591925
  1. 2
      sync/admin.py
  2. 44
      tournaments/admin.py

@ -6,7 +6,7 @@ from .models import BaseModel, ModelLog, DataAccess
class SyncedObjectAdmin(admin.ModelAdmin):
exclude = ('data_access_ids',)
raw_id_fields = ['related_user']
raw_id_fields = ['related_user', 'last_updated_by']
def save_model(self, request, obj, form, change):
if isinstance(obj, BaseModel):

@ -1,19 +1,25 @@
from django.contrib import admin
from django.contrib import admin, messages
from django.contrib.auth.admin import UserAdmin
from django.utils import timezone
from django.contrib.admin.models import LogEntry, ADDITION, CHANGE, DELETION
from django.utils.html import escape
from django.urls import reverse, path # Add path import
from django.urls import reverse, path
from django.utils.safestring import mark_safe
from django.shortcuts import render # Add this import
from django.db.models import Sum, Count, Avg, Q # Add these imports
from datetime import datetime, timedelta # Add this import
from django.shortcuts import render
from django.db.models import Avg
from datetime import timedelta, datetime
from biz.models import Prospect
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
from .filters import TeamScoreTournamentListFilter, MatchTournamentListFilter, SimpleTournamentListFilter, MatchTypeListFilter, SimpleIndexListFilter, StartDateRangeFilter, UserWithEventsFilter, UserWithPurchasesFilter, UserWithProspectFilter
from sync.admin import SyncedObjectAdmin
import logging
logger = logging.getLogger(__name__)
class CustomUserAdmin(UserAdmin):
form = CustomUserChangeForm
@ -21,6 +27,7 @@ class CustomUserAdmin(UserAdmin):
model = CustomUser
search_fields = ['username', 'email', 'phone', 'first_name', 'last_name', 'licence_id']
filter_horizontal = ('clubs',)
actions = ['convert_to_prospect']
list_display = ['email', 'first_name', 'last_name', 'username', 'date_joined', 'latest_event_club_name', 'is_active', 'event_count', 'origin', 'registration_payment_mode', 'licence_id']
list_filter = ['is_active', 'origin', UserWithEventsFilter, UserWithPurchasesFilter, UserWithProspectFilter]
@ -52,6 +59,33 @@ class CustomUserAdmin(UserAdmin):
obj.last_update = timezone.now()
super().save_model(request, obj, form, change)
def convert_to_prospect(self, request, queryset):
created_count = 0
skipped_count = 0
source_value = f"user_conversion_{datetime.now().strftime('%Y%m%d_%H%M')}"
for user in queryset:
if user.email and Prospect.objects.filter(email=user.email).exists():
skipped_count += 1
continue
prospect = Prospect.objects.create(
first_name=user.first_name,
last_name=user.last_name,
email=user.email,
phone=user.phone,
official_user=user,
source=source_value
)
created_count += 1
if created_count > 0:
messages.success(request, f'{created_count} prospect(s) successfully created.')
if skipped_count > 0:
messages.warning(request, f'{skipped_count} user(s) skipped (prospect with same email already exists).')
convert_to_prospect.short_description = "Convert selected users to prospects"
class EventAdmin(SyncedObjectAdmin):
list_display = ['creation_date', 'name', 'club', 'creator', 'tenup_id', 'display_images']
list_filter = ['creator', 'club', 'tenup_id']

Loading…
Cancel
Save