Razmig Sarkissian 3 weeks ago
commit 0d330f3dcf
  1. 4
      sync/models/base.py
  2. 2
      sync/signals.py
  3. 4
      sync/views.py
  4. 4
      tournaments/admin.py
  5. 27
      tournaments/filters.py
  6. 2
      tournaments/signals.py

@ -190,7 +190,7 @@ class BaseModel(models.Model):
for parent in parents_by_model.values(): for parent in parents_by_model.values():
if isinstance(parent, BaseModel): if isinstance(parent, BaseModel):
if parent.related_user: if parent.related_user:
print(f'related_user found in {parent}') print(f'*** related_user found in {parent}')
return parent.related_user return parent.related_user
else: else:
return parent.find_related_user(processed_objects) return parent.find_related_user(processed_objects)
@ -226,7 +226,7 @@ class BaseModel(models.Model):
def get_shared_children_from_relationships(self, relationships, processed_objects): def get_shared_children_from_relationships(self, relationships, processed_objects):
print(f'>>> {self.__class__.__name__} : relationships = {relationships}') # print(f'>>> {self.__class__.__name__} : relationships = {relationships}')
current = [self] current = [self]
for relationship in relationships: for relationship in relationships:
# print(f'> relationship = {relationship}') # print(f'> relationship = {relationship}')

@ -74,7 +74,7 @@ def synchronization_notifications(sender, instance, created=False, **kwargs):
def notify_impacted_users(instance): def notify_impacted_users(instance):
device_id = device_registry.get_device_id(instance.id) device_id = device_registry.get_device_id(instance.id)
users = related_users_registry.get_users(instance.id) users = related_users_registry.get_users(instance.id)
# logger.info(f'>>> notify_impacted_users: {users} for {instance.id}') logger.info(f'>>> notify_impacted_users: {users} for {instance.id}')
if users: if users:
user_ids = [user.id for user in users] user_ids = [user.id for user in users]

@ -287,7 +287,6 @@ class LogProcessingResult:
def process_logs(self, logs): def process_logs(self, logs):
"""Process logs to collect basic operations and handle grant/revoke efficiently.""" """Process logs to collect basic operations and handle grant/revoke efficiently."""
for log in logs: for log in logs:
self.last_log_date = log.date
try: try:
if log.operation in ['POST', 'PUT', 'RELATIONSHIP_SET']: if log.operation in ['POST', 'PUT', 'RELATIONSHIP_SET']:
data = get_serialized_data_by_id(log.model_name, log.model_id) data = get_serialized_data_by_id(log.model_name, log.model_id)
@ -324,7 +323,10 @@ class LogProcessingResult:
self.shared_relationship_sets[log.model_name][log.model_id] = data self.shared_relationship_sets[log.model_name][log.model_id] = data
elif log.operation == 'SHARED_RELATIONSHIP_REMOVED': elif log.operation == 'SHARED_RELATIONSHIP_REMOVED':
self.shared_relationship_removals[log.model_name].append(log.data_identifier_dict()) self.shared_relationship_removals[log.model_name].append(log.data_identifier_dict())
self.last_log_date = log.date # set dates after having retrieved informations
except ObjectDoesNotExist: except ObjectDoesNotExist:
logger.warning(f'log processing failed, unable to find {log.model_name} : {log.model_id}')
pass pass
# Convert updates dict to list for each model # Convert updates dict to list for each model

@ -13,7 +13,7 @@ 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 .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 .forms import CustomUserCreationForm, CustomUserChangeForm
from .filters import TeamScoreTournamentListFilter, MatchTournamentListFilter, SimpleTournamentListFilter, MatchTypeListFilter, SimpleIndexListFilter, StartDateRangeFilter, UserWithEventsFilter, UserWithPurchasesFilter, UserWithProspectFilter from .filters import TeamScoreTournamentListFilter, MatchTournamentListFilter, SimpleTournamentListFilter, MatchTypeListFilter, SimpleIndexListFilter, StartDateRangeFilter, UserWithEventsFilter, UserWithPurchasesFilter, UserWithProspectFilter, TeamScoreRoundIndexFilter
from sync.admin import SyncedObjectAdmin from sync.admin import SyncedObjectAdmin
import logging import logging
@ -365,7 +365,7 @@ class TeamRegistrationAdmin(SyncedObjectAdmin):
class TeamScoreAdmin(SyncedObjectAdmin): class TeamScoreAdmin(SyncedObjectAdmin):
list_display = ['team_registration', 'score', 'walk_out', 'match'] list_display = ['team_registration', 'score', 'walk_out', 'match']
list_filter = [TeamScoreTournamentListFilter] list_filter = [TeamScoreRoundIndexFilter, TeamScoreTournamentListFilter]
search_fields = ['id', 'team_registration__player_registrations__first_name', 'team_registration__player_registrations__last_name'] search_fields = ['id', 'team_registration__player_registrations__first_name', 'team_registration__player_registrations__last_name']
raw_id_fields = ['team_registration', 'match'] raw_id_fields = ['team_registration', 'match']
list_per_page = 50 # Controls pagination on the list view list_per_page = 50 # Controls pagination on the list view

@ -1,5 +1,5 @@
from django.contrib import admin from django.contrib import admin
from .models import Tournament, Match from .models import Tournament, Match, Round
from django.db.models import Q, Count from django.db.models import Q, Count
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django.utils import timezone from django.utils import timezone
@ -189,3 +189,28 @@ class UserWithProspectFilter(admin.SimpleListFilter):
prospect_emails = Prospect.objects.values_list('email', flat=True).filter(email__isnull=False) prospect_emails = Prospect.objects.values_list('email', flat=True).filter(email__isnull=False)
return queryset.exclude(email__in=prospect_emails) return queryset.exclude(email__in=prospect_emails)
return queryset return queryset
class TeamScoreRoundIndexFilter(admin.SimpleListFilter):
title = _("Round Index")
parameter_name = "round_index"
def lookups(self, request, model_admin):
# Get distinct round indexes from matches that have team scores
round_indexes = Round.objects.filter(
matches__team_scores__isnull=False
).values_list('index', flat=True).distinct().order_by('index')
# Create lookup tuples with round names
lookups = []
for index in round_indexes:
round_obj = Round.objects.filter(index=index, parent__isnull=True).first()
if round_obj:
lookups.append((index, round_obj.name()))
else:
lookups.append((index, f"Index {index}"))
return lookups
def queryset(self, request, queryset):
if self.value():
return queryset.filter(match__round__index=self.value())
return queryset

@ -161,7 +161,7 @@ def warn_team_walkout_status_change(sender, instance, **kwargs):
try: try:
previous_instance = TeamRegistration.objects.get(id=instance.id) previous_instance = TeamRegistration.objects.get(id=instance.id)
except TeamRegistration.DoesNotExist: except TeamRegistration.DoesNotExist:
print("TeamRegistration.DoesNotExist") print("warn_team_walkout > TeamRegistration.DoesNotExist")
return return
ttc = None ttc = None

Loading…
Cancel
Save