Merge branch 'fix_dvojosoby_orgu' into data_migrations
This commit is contained in:
commit
b4ebe51b88
2 changed files with 72 additions and 10 deletions
|
@ -107,12 +107,38 @@ def spoj_k_organizatorum_osoby(apps, scema_editor):
|
||||||
for org in Organizator.objects.all():
|
for org in Organizator.objects.all():
|
||||||
|
|
||||||
# Spárování organizátora s osobou
|
# Spárování organizátora s osobou
|
||||||
|
# Myšlenka: Když najdeme řešitele pro daného uživatele, tak se vezme Osoba příslušná uživateli,
|
||||||
|
# Pokud nenajdeme uživatele, tak ještě zkusíme dohledat Osobu podle e-mailu
|
||||||
user = org.user
|
user = org.user
|
||||||
resitele = Resitel.objects.filter(user=user)
|
if user is None:
|
||||||
if resitele.count() != 0:
|
logger.error(f'Org {org} nemá uživatele!')
|
||||||
osoba = resitele.first().osoba
|
# Je to podezřelé, ale prostě vyrobíme novou osobu.
|
||||||
else:
|
|
||||||
osoba = Osoba(user=user)
|
osoba = Osoba(user=user)
|
||||||
|
else:
|
||||||
|
logger.info(f'Org {org.user.email}(ID: {org.id}) má uživatele {user}')
|
||||||
|
# 💢💢💢 Python nemá goto, ale prý má výjimky… 💢💢💢
|
||||||
|
class EndException(Exception): pass
|
||||||
|
try:
|
||||||
|
# Hledáme podle uživatele
|
||||||
|
resitele = Resitel.objects.filter(user=user)
|
||||||
|
if resitele.count() != 0 and user is not None:
|
||||||
|
osoba = resitele.first().osoba
|
||||||
|
logger.info(f'Našel jsem řešitele {resitele.first().email} podle uživatele, používám jeho Osobu')
|
||||||
|
raise EndException
|
||||||
|
|
||||||
|
# Hledáme podle e-mailu
|
||||||
|
osoby = Osoba.objects.filter(email=user.email)
|
||||||
|
if osoby.count() != 0 and user.email != '':
|
||||||
|
osoba = osoby.first()
|
||||||
|
if osoba.user is None:
|
||||||
|
osoba.user = user
|
||||||
|
logger.info(f'Našel jsem Osobu {osoby.first().email} podle e-mailu')
|
||||||
|
raise EndException
|
||||||
|
|
||||||
|
# Fallback
|
||||||
|
logger.warning(f'Org neměl řešitele, zakládám novou Osobu.')
|
||||||
|
osoba = Osoba(user=user)
|
||||||
|
except EndException: pass
|
||||||
|
|
||||||
# Přesun informací z usera do osoby
|
# Přesun informací z usera do osoby
|
||||||
# pro řešitele již v minule migraci
|
# pro řešitele již v minule migraci
|
||||||
|
@ -142,7 +168,10 @@ def fix_problem(apps, schema_editor):
|
||||||
else:
|
else:
|
||||||
pr.autor = None
|
pr.autor = None
|
||||||
if pr.opravovatel is not None:
|
if pr.opravovatel is not None:
|
||||||
pr.opravovatele.add(Organizator.objects.filter(osoba__user=pr.opravovatel).first())
|
if Organizator.objects.filter(osoba__user=pr.opravovatel).first() is not None:
|
||||||
|
pr.opravovatele.add(Organizator.objects.filter(osoba__user=pr.opravovatel).first())
|
||||||
|
else:
|
||||||
|
logger.error(f'WTF, nespárovaný opravovatel {pr.opravovatel} problému {pr}')
|
||||||
pr.save()
|
pr.save()
|
||||||
|
|
||||||
def fix_pohadka(apps, schema_editor):
|
def fix_pohadka(apps, schema_editor):
|
||||||
|
|
|
@ -4,6 +4,10 @@ from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
def spoj_k_organizatorum_osoby(apps, scema_editor):
|
def spoj_k_organizatorum_osoby(apps, scema_editor):
|
||||||
Organizator = apps.get_model('seminar', 'Organizator')
|
Organizator = apps.get_model('seminar', 'Organizator')
|
||||||
Resitel = apps.get_model('seminar', 'Resitel')
|
Resitel = apps.get_model('seminar', 'Resitel')
|
||||||
|
@ -11,12 +15,38 @@ def spoj_k_organizatorum_osoby(apps, scema_editor):
|
||||||
for org in Organizator.objects.all():
|
for org in Organizator.objects.all():
|
||||||
|
|
||||||
# Spárování organizátora s osobou
|
# Spárování organizátora s osobou
|
||||||
|
# Myšlenka: Když najdeme řešitele pro daného uživatele, tak se vezme Osoba příslušná uživateli,
|
||||||
|
# Pokud nenajdeme uživatele, tak ještě zkusíme dohledat Osobu podle e-mailu
|
||||||
user = org.user
|
user = org.user
|
||||||
resitele = Resitel.objects.filter(user=user)
|
if user is None:
|
||||||
if resitele.count() != 0:
|
logger.error(f'Org {org} nemá uživatele!')
|
||||||
osoba = resitele.first().osoba
|
# Je to podezřelé, ale prostě vyrobíme novou osobu.
|
||||||
else:
|
|
||||||
osoba = Osoba(user=user)
|
osoba = Osoba(user=user)
|
||||||
|
else:
|
||||||
|
logger.info(f'Org {org.user.email}(ID: {org.id}) má uživatele {user}')
|
||||||
|
# 💢💢💢 Python nemá goto, ale prý má výjimky… 💢💢💢
|
||||||
|
class EndException(Exception): pass
|
||||||
|
try:
|
||||||
|
# Hledáme podle uživatele
|
||||||
|
resitele = Resitel.objects.filter(user=user)
|
||||||
|
if resitele.count() != 0 and user is not None:
|
||||||
|
osoba = resitele.first().osoba
|
||||||
|
logger.info(f'Našel jsem řešitele {resitele.first().email} podle uživatele, používám jeho Osobu')
|
||||||
|
raise EndException
|
||||||
|
|
||||||
|
# Hledáme podle e-mailu
|
||||||
|
osoby = Osoba.objects.filter(email=user.email)
|
||||||
|
if osoby.count() != 0 and user.email != '':
|
||||||
|
osoba = osoby.first()
|
||||||
|
if osoba.user is None:
|
||||||
|
osoba.user = user
|
||||||
|
logger.info(f'Našel jsem Osobu {osoby.first().email} podle e-mailu')
|
||||||
|
raise EndException
|
||||||
|
|
||||||
|
# Fallback
|
||||||
|
logger.warning(f'Org neměl řešitele, zakládám novou Osobu.')
|
||||||
|
osoba = Osoba(user=user)
|
||||||
|
except EndException: pass
|
||||||
|
|
||||||
# Přesun informací z usera do osoby
|
# Přesun informací z usera do osoby
|
||||||
# pro řešitele již v minule migraci
|
# pro řešitele již v minule migraci
|
||||||
|
@ -46,7 +76,10 @@ def fix_problem(apps, schema_editor):
|
||||||
else:
|
else:
|
||||||
pr.autor = None
|
pr.autor = None
|
||||||
if pr.opravovatel is not None:
|
if pr.opravovatel is not None:
|
||||||
pr.opravovatele.add(Organizator.objects.filter(osoba__user=pr.opravovatel).first())
|
if Organizator.objects.filter(osoba__user=pr.opravovatel).first() is not None:
|
||||||
|
pr.opravovatele.add(Organizator.objects.filter(osoba__user=pr.opravovatel).first())
|
||||||
|
else:
|
||||||
|
logger.error(f'WTF, nespárovaný opravovatel {pr.opravovatel} problému {pr}')
|
||||||
pr.save()
|
pr.save()
|
||||||
|
|
||||||
def fix_pohadka(apps, schema_editor):
|
def fix_pohadka(apps, schema_editor):
|
||||||
|
|
Loading…
Reference in a new issue