Merge branch 'data_migrations' into test
This commit is contained in:
		
						commit
						a6928411fe
					
				
					 4 changed files with 43 additions and 11 deletions
				
			
		|  | @ -143,7 +143,7 @@ class PrihlaskaForm(forms.Form): | |||
| 				self.add_error('skola_adresa',forms.ValidationError('Je nutné vyplnit adresu školy')) | ||||
| 
 | ||||
| # Editační formulář bez řešitele. | ||||
| class ProfileEditFormPoMat(forms.Form): | ||||
| class ProfileEditFormPoMaturite(forms.Form): | ||||
| 	username = forms.CharField(label='Přihlašovací jméno', | ||||
| 			max_length=256, | ||||
| 			required=True) | ||||
|  |  | |||
|  | @ -107,12 +107,38 @@ def spoj_k_organizatorum_osoby(apps, scema_editor): | |||
| 	for org in Organizator.objects.all(): | ||||
| 		 | ||||
| 		# 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 | ||||
| 		resitele = Resitel.objects.filter(user=user) | ||||
| 		if resitele.count() != 0: | ||||
| 			osoba = resitele.first().osoba | ||||
| 		else: | ||||
| 		if user is None: | ||||
| 			logger.error(f'Org {org} nemá uživatele!') | ||||
| 			# Je to podezřelé, ale prostě vyrobíme novou osobu. | ||||
| 			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 | ||||
| 			# pro řešitele již v minule migraci | ||||
|  | @ -142,7 +168,10 @@ def fix_problem(apps, schema_editor): | |||
| 		else: | ||||
| 			pr.autor = 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() | ||||
| 
 | ||||
| def fix_pohadka(apps, schema_editor): | ||||
|  |  | |||
|  | @ -61,7 +61,7 @@ | |||
|        {% include "seminar/profil/prihlaska_field.html" with field=form.stat_text id="id_li_stat_text"%} | ||||
|      </table> | ||||
| 
 | ||||
| {% if not PoMat %} {# Vysloužilým účastníkům skrýt editaci školy apod. #} | ||||
| {% if not po_maturite %} {# Vysloužilým účastníkům skrýt editaci školy apod. #} | ||||
|  <hr> | ||||
| 
 | ||||
|     <h4> | ||||
|  |  | |||
|  | @ -26,7 +26,7 @@ import seminar.models as m | |||
| from seminar.models import Problem, Cislo, Reseni, Nastaveni, Rocnik, Soustredeni, Organizator, Resitel, Novinky, Soustredeni_Ucastnici, Pohadka, Tema, Clanek, Osoba, Skola # Tohle je stare a chceme se toho zbavit. Pouzivejte s.ToCoChci | ||||
| #from .models import VysledkyZaCislo, VysledkyKCisluZaRocnik, VysledkyKCisluOdjakziva | ||||
| from seminar import utils, treelib | ||||
| from seminar.forms import PrihlaskaForm, LoginForm, ProfileEditForm, ProfileEditFormPoMat | ||||
| from seminar.forms import PrihlaskaForm, LoginForm, ProfileEditForm, ProfileEditFormPoMaturite | ||||
| import seminar.forms as f | ||||
| import seminar.templatetags.treenodes as tnltt | ||||
| import seminar.views.views_rest as vr | ||||
|  | @ -1100,14 +1100,16 @@ def resitelEditView(request): | |||
| 		prefill_1.update(prefill_2) | ||||
| 	prefill_3=model_to_dict(osoba_edit) | ||||
| 	prefill_1.update(prefill_3) | ||||
| 	if 'datum_narozeni' in prefill_1: | ||||
| 		prefill_1['datum_narozeni'] = str(prefill_1['datum_narozeni']) | ||||
| 	if resitel_edit and resitel_edit.rok_maturity < date.today().year: | ||||
| 		form = ProfileEditFormPoMat(initial=prefill_1) | ||||
| 		form = ProfileEditFormPoMaturite(initial=prefill_1) | ||||
| 	else: | ||||
| 		form = ProfileEditForm(initial=prefill_1) | ||||
| 	## Změna údajů a jejich uložení | ||||
| 	if request.method == 'POST': | ||||
| 		if resitel_edit and resitel_edit.rok_maturity < date.today().year: | ||||
| 			form = ProfileEditFormPoMat(request.POST) | ||||
| 			form = ProfileEditFormPoMaturite(request.POST) | ||||
| 		else: | ||||
| 			form = ProfileEditForm(request.POST) | ||||
| 		if form.is_valid(): | ||||
|  | @ -1121,6 +1123,7 @@ def resitelEditView(request): | |||
| 			osoba_edit.ulice = fcd['ulice'] | ||||
| 			osoba_edit.mesto = fcd['mesto'] | ||||
| 			osoba_edit.psc = fcd['psc'] | ||||
| 			osoba_edit.datum_narozeni = fcd['datum_narozeni'] | ||||
| 			## Změny v osobě s podmínkami | ||||
| 			if fcd.get('spam',False): | ||||
| 				osoba_edit.datum_souhlasu_zasilani = date.today() | ||||
|  | @ -1146,7 +1149,7 @@ def resitelEditView(request): | |||
| 			return formularOKView(request) | ||||
| 	else: | ||||
| 		## Stránka před odeslaním formuláře = předvyplněný formulář | ||||
| 		return render(request, 'seminar/profil/edit.html', {'form': form, 'PoMat': resitel_edit and resitel_edit.rok_maturity < date.today().year}) | ||||
| 		return render(request, 'seminar/profil/edit.html', {'form': form, 'po_maturite': resitel_edit and resitel_edit.rok_maturity < date.today().year}) | ||||
| 
 | ||||
| def prihlaskaView(request): | ||||
| 	generic_logger = logging.getLogger('seminar.prihlaska') | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Pavel "LEdoian" Turinsky
						Pavel "LEdoian" Turinsky