You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

88 lines
3.2 KiB

from django.contrib import admin
from django.contrib.auth.models import Group
from django_reverse_admin import ReverseModelAdmin
from django.contrib.messages import WARNING, ERROR, SUCCESS
import seminar.models as m
from datetime import datetime
@admin.action(description="Sjednoť telefony")
def sjednot_telefony(admin, request, queryset):
for o in queryset:
try:
telefon = int(o.telefon.replace(" ", "").replace("+", ""))
# 6 míst
if len(str(telefon)) == 9:
o.telefon = "+420 " + str(telefon)[0:3] + " " + str(telefon)[3:6] + " " + str(telefon)[6:9]
o.save()
# 12 míst
elif len(str(telefon)) == 12:
o.telefon = "+" + str(telefon)[0:3] + " " + str(telefon)[3:6] + " " + str(telefon)[6:9] + " " + str(telefon)[9:12]
o.save()
else:
raise ValueError
except:
admin.message_user(request, f"{o.jmeno} {o.prijmeni} (id: {o.id}) má divný telefon: {o.telefon}", level=ERROR)
admin.message_user(request, "Telefony sjednoceny.", level=SUCCESS)
# Tohle chceme umět použít i z ResitelAdmin
@admin.action(description="Udělej z vybraných osob organizátory")
def udelej_orgem(admin, request, queryset):
org_group = Group.objects.get(name='org')
uspesne_vytvoreni_orgove = 0
for o in queryset:
if m.Organizator.objects.filter(osoba=o).exists():
# Ref: https://docs.djangoproject.com/en/3.2/ref/contrib/admin/#django.contrib.admin.ModelAdmin.message_user
admin.message_user(request, f"Osoba {o} už je org, přeskakuji.", level=WARNING)
continue
user = o.user
if user is None:
admin.message_user(request, f"Osoba {o} nemá uživatele! Přeskakuji.", level=ERROR)
continue
user.groups.add(org_group)
user.is_staff = True
user.save()
org = m.Organizator.objects.create(osoba=o, organizuje_od=datetime.now())
org.save()
uspesne_vytvoreni_orgove += 1
admin.message_user(request, f'Úspěšně vytvořeno {uspesne_vytvoreni_orgove} orgů.', level=SUCCESS)
@admin.register(m.Osoba)
class OsobaAdmin(admin.ModelAdmin):
actions = ['synchronizuj_maily', udelej_orgem, sjednot_telefony]
search_fields = ['jmeno', 'prijmeni', 'prezdivka']
def synchronizuj_maily(self, request, queryset):
for o in queryset:
if o.user is not None:
u = o.user
u.email = o.email
u.save()
self.message_user(request, "E-maily synchronizovány.")
synchronizuj_maily.short_description = "Synchronizuj vybraným osobám e-maily do uživatelů"
class OsobaInline(admin.TabularInline):
model = m.Osoba
3 years ago
@admin.register(m.Organizator)
class OrganizatorAdmin(ReverseModelAdmin):
search_fields = ['osoba__jmeno', 'osoba__prijmeni', 'osoba__prezdivka']
inline_type = 'stacked'
inline_reverse = ['osoba']
@admin.register(m.Resitel)
class ResitelAdmin(ReverseModelAdmin):
search_fields = ['osoba__jmeno', 'osoba__prijmeni', 'osoba__prezdivka']
list_filter = ['zasilat', 'zasilat_cislo_papirove', 'zasilat_cislo_emailem', 'rok_maturity']
ordering = ('osoba__prijmeni', 'osoba__jmeno')
inline_type = 'stacked'
inline_reverse = ['osoba']
actions = ['udelej_resitele_orgem']
@admin.action(description="Udělej z řešitelů organizátory")
def udelej_resitele_orgem(self, req, qs):
osoby = m.Osoba.objects.filter(resitel__in=qs)
udelej_orgem(self, req, osoby)
admin.site.register(m.Skola)
admin.site.register(m.Prijemce)