Implementovaná doregistrace řešitelů, asi
This commit is contained in:
		
							parent
							
								
									1526cfd0cc
								
							
						
					
					
						commit
						f79ea57165
					
				
					 2 changed files with 56 additions and 5 deletions
				
			
		|  | @ -103,10 +103,14 @@ class PrihlaskaForm(PasswordResetForm): | |||
| 		err_logger = logging.getLogger('seminar.prihlaska.problem') | ||||
| 		email = self.cleaned_data.get('email') | ||||
| 		try: | ||||
| 			Osoba.objects.get(email=email) | ||||
| 			osoba = Osoba.objects.get(email=email) | ||||
| 			msg = "Email {} exists".format(email) | ||||
| 			err_logger.info(msg) | ||||
| 			raise forms.ValidationError('E-mail je již použit') | ||||
| 			if osoba.user is not None: | ||||
| 				err_logger.info(msg) | ||||
| 				raise forms.ValidationError('E-mail je již použit') | ||||
| 			else: | ||||
| 				msg += ', but currently has no User, so allowing registration.' | ||||
| 				err_logger.info(msg) | ||||
| 
 | ||||
| 		except ObjectDoesNotExist: | ||||
| 			pass | ||||
|  |  | |||
|  | @ -1241,6 +1241,7 @@ def prihlaskaView(request): | |||
| 					psc = fcd.get('psc',''), | ||||
| 					poznamka = str(fcd) | ||||
| 					) | ||||
| 
 | ||||
| 				if fcd.get('spam',False): | ||||
| 					o.datum_souhlasu_zasilani = date.today() | ||||
| 				if fcd.get('stat','') in ('CZ','SK'): | ||||
|  | @ -1250,6 +1251,32 @@ def prihlaskaView(request): | |||
| 					msg = "Unknown country {}".format(fcd['stat_text']) | ||||
| 					err_logger.warn(msg + str(form_hash)) | ||||
| 
 | ||||
| 				 | ||||
| 				# Dovolujeme doregistraci uživatele pro existující mail, takže naopak chceme doplnit/aktualizovat údaje do stávajícího objektu | ||||
| 				try: | ||||
| 					orig_osoba = m.Osoba.objects.get(email=fcd['email']) | ||||
| 					orig_osoba.poznamka += f'\nDOREGISTRACE K EXISTUJÍCÍMU E-MAILU, diff níže.' | ||||
| 				except m.Osoba.DoesNotExist: | ||||
| 					# Trik: Budeme aktualizovat údaje nové osoby, takže se asi nic nezmění, ale fungovat to bude. | ||||
| 					orig_osoba = o | ||||
| 
 | ||||
| 				# Porovnání údajů | ||||
| 				assert orig_osoba.user is None, "Právě-registrující-se osoba už má Uživatele!" | ||||
| 				osoba_attrs = ['jmeno', 'prijmeni', 'pohlavi_muz', 'email', 'telefon', 'datum_narozeni', 'ulice', 'mesto', 'psc', 'stat', 'datum_souhlasu_udaje', 'datum_souhlasu_zasilani', 'datum_registrace'] | ||||
| 				diffattrs = [] | ||||
| 				for attr in osoba_attrs: | ||||
| 					new = getattr(o, attr) | ||||
| 					old = getattr(orig_osoba, attr) | ||||
| 					if new != old: | ||||
| 						orig_osoba.poznamka += f'\nRozdíl v {attr}: Původní {old}, nový {new}' | ||||
| 						diffattrs.append(f'Osoba.{attr}') | ||||
| 						setattr(orig_osoba, attr, new) | ||||
| 				# Datum registrace chceme původní / nižší: | ||||
| 				orig_osoba.datum_registrace = min(orig_osoba.datum_registrace, o.datum_registrace) | ||||
| 
 | ||||
| 				# Od této chvíle dál je správná osoba ta "původní", novou podle formuláře si ale zachováme | ||||
| 				o, o_form = orig_osoba, o | ||||
| 
 | ||||
| 				o.save() | ||||
| 				o.user = u | ||||
| 				o.save() | ||||
|  | @ -1260,15 +1287,35 @@ def prihlaskaView(request): | |||
| 					zasilat_cislo_emailem = fcd['zasilat_cislo_emailem'] | ||||
| 					) | ||||
| 
 | ||||
| 				r.save() | ||||
| 				r.osoba = o | ||||
| 				if fcd.get('skola'): | ||||
| 					r.skola = fcd['skola'] | ||||
| 				else: | ||||
| 					# Unknown school - log it | ||||
| 					msg = "Unknown school {}, {}".format(fcd['skola_nazev'],fcd['skola_adresa']) | ||||
| 					err_logger.warn(msg + str(form_hash)) | ||||
| 
 | ||||
| 				# Porovnání údajů u řešitele | ||||
| 				try: | ||||
| 					orig_resitel = o.resitel | ||||
| 					orig_resitel.poznamka += f'\nDOREGISTRACE ŘEŠITELE, diff:' | ||||
| 				except m.Resitel.DoesNotExist: | ||||
| 					# Stejný trik: | ||||
| 					orig_resitel = r | ||||
| 				resitel_attrs = ['skola', 'poznamka', 'rok_maturity', 'zasilat', 'zasilat_cislo_emailem'] | ||||
| 				for attr in resitel_attrs: | ||||
| 					new = getattr(r, attr) | ||||
| 					old = getattr(orig_resitel, attr) | ||||
| 					if new != old: | ||||
| 						orig_resitel.poznamka += f'\nRozdíl v {attr}: Původní {old}, nový {new}' | ||||
| 						diffattrs.append(f'Resitel.{attr}') | ||||
| 						setattr(orig_resitel, attr, new) | ||||
| 				r, r_form = orig_resitel, r | ||||
| 
 | ||||
| 				r.save() | ||||
| 				r.osoba = o	# Tohle by mělo být bezpečné… | ||||
| 				r.save() | ||||
| 
 | ||||
| 				if diffattrs: err_logger.warning(f'Different fields when matching Řešitel id {r.id} or Osoba id {o.id}: {diffattrs}') | ||||
| 
 | ||||
| 			uid = urlsafe_base64_encode(force_bytes(u.pk)) | ||||
| 			token = PasswordResetTokenGenerator().make_token(u) | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 MaM Web user
						MaM Web user