Odstranění deadlinů zadrátovaných v čísle
This commit is contained in:
		
							parent
							
								
									9e05e0dc0f
								
							
						
					
					
						commit
						c2a38ece60
					
				
					 3 changed files with 51 additions and 23 deletions
				
			
		
							
								
								
									
										50
									
								
								seminar/migrations/0105_odstraneni_deadlinu_cisla.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								seminar/migrations/0105_odstraneni_deadlinu_cisla.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,50 @@ | |||
| # Generated by Django 3.2.15 on 2022-10-09 10:14 | ||||
| 
 | ||||
| from django.db import migrations | ||||
| from seminar.models import Deadline | ||||
| 
 | ||||
| 
 | ||||
| def vrat_deadliny(apps, schema_editor): | ||||
|     Cislo = apps.get_model('seminar', 'Cislo') | ||||
| 
 | ||||
|     for cislo in Cislo.objects.all(): | ||||
|         prvni_deadline = cislo.deadline_v_cisle.filter(typ=Deadline.TYP_PRVNI).last() | ||||
|         sous_deadline = cislo.deadline_v_cisle.filter(typ=Deadline.TYP_SOUS).last() | ||||
|         prvni_a_sous_deadline = cislo.deadline_v_cisle.filter(typ=Deadline.TYP_PRVNI_A_SOUS).last() | ||||
|         posledni_deadline = cislo.deadline_v_cisle.filter(typ=Deadline.TYP_CISLA).last() | ||||
| 
 | ||||
|         if prvni_a_sous_deadline is not None: | ||||
|             cislo.datum_deadline_soustredeni = prvni_a_sous_deadline.deadline.date() | ||||
|             cislo.datum_preddeadline = prvni_a_sous_deadline.deadline.date() | ||||
|         else: | ||||
|             if sous_deadline is not None: | ||||
|                 cislo.datum_deadline_soustredeni = sous_deadline.deadline.date() | ||||
|             if prvni_deadline is not None: | ||||
|                 cislo.datum_preddeadline = prvni_deadline.deadline.date() | ||||
| 
 | ||||
|         if posledni_deadline: | ||||
|             cislo.datum_deadline = posledni_deadline.deadline.date() | ||||
| 
 | ||||
|         cislo.save() | ||||
| 
 | ||||
| class Migration(migrations.Migration): | ||||
| 
 | ||||
|     dependencies = [ | ||||
|         ('seminar', '0104_hodnoceni_deadline_body'), | ||||
|     ] | ||||
| 
 | ||||
|     operations = [ | ||||
|         migrations.RunPython(migrations.RunPython.noop, vrat_deadliny), | ||||
|         migrations.RemoveField( | ||||
|             model_name='cislo', | ||||
|             name='datum_deadline', | ||||
|         ), | ||||
|         migrations.RemoveField( | ||||
|             model_name='cislo', | ||||
|             name='datum_deadline_soustredeni', | ||||
|         ), | ||||
|         migrations.RemoveField( | ||||
|             model_name='cislo', | ||||
|             name='datum_preddeadline', | ||||
|         ), | ||||
|     ] | ||||
|  | @ -158,17 +158,6 @@ class Cislo(SeminarModelBase): | |||
| 	datum_vydani = models.DateField('datum vydání', blank=True, null=True, | ||||
| 		help_text='Datum vydání finální verze') | ||||
| 
 | ||||
| 	datum_deadline_soustredeni = models.DateField( | ||||
| 		'datum deadline soustředění', | ||||
| 		blank=True, null=True, | ||||
| 		help_text='Datum pro příjem řešení pro účast na soustředění') | ||||
|   | ||||
| 	datum_preddeadline = models.DateField('datum předdeadline', blank=True, null=True, | ||||
| 		help_text='Datum pro příjem řešení, která se otisknou v dalším čísle') | ||||
| 
 | ||||
| 	datum_deadline = models.DateField('datum deadline', blank=True, null=True, | ||||
| 		help_text='Datum pro příjem řešení úloh zadaných v tomto čísle') | ||||
| 
 | ||||
| 	verejne_db = models.BooleanField('číslo zveřejněno', | ||||
| 		db_column='verejne', default=False) | ||||
| 
 | ||||
|  | @ -317,17 +306,6 @@ class Cislo(SeminarModelBase): | |||
| 			from seminar.models.treenode import CisloNode | ||||
| 			CisloNode.objects.create(cislo=self) | ||||
| 
 | ||||
| 	def clean(self): | ||||
| 		# Finální deadline má být až poslední a je povinný, pokud nějaký deadline existuje. | ||||
| 		# Existence: | ||||
| 		if self.datum_deadline is None and (self.datum_preddeadline is not None or self.datum_deadline_soustredeni is not None): | ||||
| 			raise ValidationError({'datum_deadline': "Číslo musí mít finální deadline, pokud má nějaké deadliny"}) | ||||
| 		if self.datum_deadline is not None: | ||||
| 			if self.datum_preddeadline is not None and self.datum_preddeadline > self.datum_deadline: | ||||
| 				raise ValidationError({'datum_preddeadline': "Předdeadline musí předcházet finálnímu deadlinu"}) | ||||
| 			if self.datum_deadline_soustredeni is not None and self.datum_deadline_soustredeni > self.datum_deadline: | ||||
| 				raise ValidationError({'datum_deadline_soustredeni': "Soustřeďkový deadline musí předcházet finálnímu deadlinu"}) | ||||
| 
 | ||||
| 	def zlomovy_deadline_pro_papirove_cislo(self): | ||||
| 		prvni_deadline = Deadline.objects.filter(Q(typ=Deadline.TYP_PRVNI) | Q(typ=Deadline.TYP_PRVNI_A_SOUS), cislo=self).first() | ||||
| 		if prvni_deadline is None: | ||||
|  |  | |||
|  | @ -297,7 +297,7 @@ def gen_reseni_ulohy(rnd, cisla, uloha, pocet_resitelu, poradi_cisla, resitele_c | |||
| 			res_vyber.remove(resitele[0]) | ||||
| 
 | ||||
| 		# Vytvoření řešení. | ||||
| 		if uloha.cislo_zadani.datum_deadline is not None: | ||||
| 		if uloha.cislo_zadani.zlomovy_deadline_pro_papirove_cislo() is not None: | ||||
| 			# combine, abychom dostali plný čas a ne jen datum | ||||
| 			cas_doruceni = datetime.datetime.combine(uloha.cislo_zadani.datum_deadline, datetime.datetime.min.time()) - datetime.timedelta(days=random.randint(0, 40)) - datetime.timedelta(minutes=random.randint(0, 60*24)) | ||||
| 			# astimezone, protože jinak vyhazuje warning o nenastavené TZ | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue