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, | 	datum_vydani = models.DateField('datum vydání', blank=True, null=True, | ||||||
| 		help_text='Datum vydání finální verze') | 		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', | 	verejne_db = models.BooleanField('číslo zveřejněno', | ||||||
| 		db_column='verejne', default=False) | 		db_column='verejne', default=False) | ||||||
| 
 | 
 | ||||||
|  | @ -317,17 +306,6 @@ class Cislo(SeminarModelBase): | ||||||
| 			from seminar.models.treenode import CisloNode | 			from seminar.models.treenode import CisloNode | ||||||
| 			CisloNode.objects.create(cislo=self) | 			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): | 	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() | 		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: | 		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]) | 			res_vyber.remove(resitele[0]) | ||||||
| 
 | 
 | ||||||
| 		# Vytvoření řešení. | 		# 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 | 			# 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)) | 			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 | 			# astimezone, protože jinak vyhazuje warning o nenastavené TZ | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue