Mergovadlo Resitelu
This commit is contained in:
		
							parent
							
								
									14efcbbe25
								
							
						
					
					
						commit
						049eec24c9
					
				
					 1 changed files with 81 additions and 0 deletions
				
			
		
							
								
								
									
										81
									
								
								seminar/tools.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								seminar/tools.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,81 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| 
 | ||||
| import logging as log | ||||
| from .models import Resitel | ||||
| import reversion | ||||
| 
 | ||||
| def merge_props(r1, r2, prop, pretend=True, smaller=False, equal=True): | ||||
|     """Merge r2.`prop` into r1.`prop`. | ||||
| 
 | ||||
|     If r1.`prop` unset, use r1.`prop`=r2.`prop`. | ||||
|     If both set and equal=True, warn if not equal. | ||||
|     If both set and smaller=True, use the smaller one. | ||||
|     With pretend=True does not modify r1. | ||||
|     """ | ||||
|     a1 = r1.__getattribute__(prop) | ||||
|     a2 = r2.__getattribute__(prop) | ||||
|     if not a1: | ||||
|         if not pretend: | ||||
|             r1.__setattr__(prop, a2) | ||||
|     elif a2: | ||||
|         if equal and a1 != a2: | ||||
|             log.warn(u"merge: Ruzna %s: %s VS %s", prop, a1, a2) | ||||
|         if smaller: | ||||
|             if not pretend: | ||||
|                 r1.__setattr__(prop, min(a1, a2)) | ||||
| 
 | ||||
| 
 | ||||
| def merge_Resitel(rbase, rmerge, pretend=True): | ||||
|     """Zahrne data a vztahy Resitele rmerge do Resitele rbase, pak smaze rmerge. | ||||
| 
 | ||||
|     Selze pro uzivatele s user!=NULL. S pretend=True nezmeni databazi. | ||||
|     """ | ||||
|     # Ma relace: skola | ||||
|     # Je v relaci: user, reseni, soustredeni_ucastnici, vysledky_base(VIEW) | ||||
| 
 | ||||
|     log.info(u"merge: %s <- %s", unicode(rbase), unicode(rmerge)) | ||||
| 
 | ||||
|     assert not rbase.user | ||||
|     assert not rmerge.user | ||||
|     assert rbase != rmerge | ||||
| 
 | ||||
|     if (rbase.jmeno != rmerge.jmeno) or (rbase.prijmeni != rmerge.prijmeni): | ||||
|         log.error(u"merge: Ruzna jmena: %s VS %s", rbase, rmerge) | ||||
|     if rbase.rok_maturity != rmerge.rok_maturity: | ||||
|         log.error(u"merge: Ruzne roky maturity: %s VS %s", rbase.rok_maturity, rmerge.rok_maturity) | ||||
| 
 | ||||
|     with reversion.create_revision(): | ||||
|         reversion.set_comment('Merge duplicitnich Resitelu: %r <- %r' % (rbase.pk, rmerge.pk)) | ||||
| 
 | ||||
|         merge_props(rbase, rmerge, 'skola', pretend=pretend) | ||||
|         merge_props(rbase, rmerge, 'datum_narozeni', pretend=pretend) | ||||
|         merge_props(rbase, rmerge, 'datum_prihlaseni', pretend=pretend) | ||||
|         merge_props(rbase, rmerge, 'datum_souhlasu_zasilani', pretend=pretend, smaller=True, equal=False) | ||||
|         merge_props(rbase, rmerge, 'datum_souhlasu_udaje', pretend=pretend, smaller=True, equal=False) | ||||
|         merge_props(rbase, rmerge, 'email', pretend=pretend) | ||||
|         if rmerge.import_mamoper_id and not pretend: | ||||
|             rbase.import_mamoper_id += ' ' + rmerge.import_mamoper_id | ||||
|         if rmerge.poznamka and not pretend: | ||||
|             rbase.poznamka += ' ' + rmerge.poznamka | ||||
|         merge_props(rbase, rmerge, 'mesto', pretend=pretend) | ||||
|         merge_props(rbase, rmerge, 'pohlavi_muz', pretend=pretend) | ||||
|         merge_props(rbase, rmerge, 'psc', pretend=pretend) | ||||
|         merge_props(rbase, rmerge, 'stat', pretend=pretend) | ||||
|         merge_props(rbase, rmerge, 'telefon', pretend=pretend) | ||||
|         merge_props(rbase, rmerge, 'ulice', pretend=pretend) | ||||
|         merge_props(rbase, rmerge, 'zasilat', pretend=pretend) | ||||
| 
 | ||||
|         for res in rmerge.reseni.all(): | ||||
|             if not pretend: | ||||
|                 res.resitel = rbase | ||||
|                 res.save() | ||||
| 
 | ||||
|         for uc in rmerge.soustredeni_ucastnici_set.all(): | ||||
|             if not pretend: | ||||
|                 uc.resitel = rbase | ||||
|                 uc.save() | ||||
| 
 | ||||
|         if not pretend: | ||||
|             rmerge.delete() | ||||
|          | ||||
| 
 | ||||
		Loading…
	
		Reference in a new issue
	
	 Tomas Gavenciak
						Tomas Gavenciak