Merge branch 'data_migrations' of gimli.ms.mff.cuni.cz:/akce/mam/git/mamweb into data_migrations
This commit is contained in:
		
						commit
						e7e57140af
					
				
					 12 changed files with 55 additions and 70 deletions
				
			
		|  | @ -1,7 +1,5 @@ | ||||||
| # -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- | ||||||
| 
 | 
 | ||||||
| from __future__ import unicode_literals |  | ||||||
| 
 |  | ||||||
| from autocomplete_light import shortcuts as autocomplete_light | from autocomplete_light import shortcuts as autocomplete_light | ||||||
| 
 | 
 | ||||||
| from .models import Obrazek, Galerie | from .models import Obrazek, Galerie | ||||||
|  |  | ||||||
|  | @ -30,7 +30,7 @@ def obrazek_filename_velky(): | ||||||
| 
 | 
 | ||||||
| def obrazek_filename(self, filename): | def obrazek_filename(self, filename): | ||||||
| 	gal = self.galerie | 	gal = self.galerie | ||||||
| 	cislo_gal = force_unicode(gal.pk) | 	cislo_gal = gal.pk | ||||||
| 
 | 
 | ||||||
| 	# najdi kořenovou galerii | 	# najdi kořenovou galerii | ||||||
| 	while (gal.galerie_up): | 	while (gal.galerie_up): | ||||||
|  | @ -39,8 +39,8 @@ def obrazek_filename(self, filename): | ||||||
| 	# soustředění je v cestě jen pokud galerie pod nějaké patří | 	# soustředění je v cestě jen pokud galerie pod nějaké patří | ||||||
| 	cesta = ( | 	cesta = ( | ||||||
| 		['Galerie'] + | 		['Galerie'] + | ||||||
| 		(["soustredeni_" + force_unicode(gal.soustredeni.pk)] if gal.soustredeni else []) + | 		(["soustredeni_" + gal.soustredeni.pk] if gal.soustredeni else []) + | ||||||
| 		["galerie_" + cislo_gal, force_unicode(self.nazev)] | 		["galerie_" + cislo_gal, self.nazev] | ||||||
| 	) | 	) | ||||||
| 
 | 
 | ||||||
| 	return os.path.join(*cesta) | 	return os.path.join(*cesta) | ||||||
|  | @ -60,8 +60,8 @@ class Obrazek(models.Model): | ||||||
| 	galerie = models.ForeignKey('Galerie', blank=True, null=True, on_delete=models.SET_NULL) | 	galerie = models.ForeignKey('Galerie', blank=True, null=True, on_delete=models.SET_NULL) | ||||||
| 	poradi = models.IntegerField('Pořadí', blank=True, null=True) | 	poradi = models.IntegerField('Pořadí', blank=True, null=True) | ||||||
| 
 | 
 | ||||||
| 	def __unicode__(self): | 	def __str__(self): | ||||||
| 			return unicode(self.obrazek_velky.name) | 			return self.obrazek_velky.name | ||||||
| 
 | 
 | ||||||
| 	class Meta: | 	class Meta: | ||||||
| 		verbose_name = 'Obrázek' | 		verbose_name = 'Obrázek' | ||||||
|  | @ -94,7 +94,7 @@ class Galerie(models.Model): | ||||||
| 		on_delete=models.PROTECT) | 		on_delete=models.PROTECT) | ||||||
| 	poradi = models.IntegerField('Pořadí', blank = True, null = True) | 	poradi = models.IntegerField('Pořadí', blank = True, null = True) | ||||||
| 
 | 
 | ||||||
| 	def __unicode__(self): | 	def __str__(self): | ||||||
| 		return self.nazev | 		return self.nazev | ||||||
| 	class Meta: | 	class Meta: | ||||||
| 		verbose_name = 'Galerie' | 		verbose_name = 'Galerie' | ||||||
|  |  | ||||||
|  | @ -3,7 +3,6 @@ import os | ||||||
| from django.db import models | from django.db import models | ||||||
| from django.utils import timezone | from django.utils import timezone | ||||||
| from django.conf import settings | from django.conf import settings | ||||||
| from django.utils.encoding import python_2_unicode_compatible |  | ||||||
| from django.utils.encoding import force_text | from django.utils.encoding import force_text | ||||||
| from django.core.exceptions import ObjectDoesNotExist | from django.core.exceptions import ObjectDoesNotExist | ||||||
| from django.utils.text import get_valid_filename | from django.utils.text import get_valid_filename | ||||||
|  | @ -29,7 +28,6 @@ def generate_filename(self, filename): | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #@reversion.register(ignore_duplicates=True) | #@reversion.register(ignore_duplicates=True) | ||||||
| #@python_2_unicode_compatible |  | ||||||
| class KorekturovanePDF(models.Model): | class KorekturovanePDF(models.Model): | ||||||
| 	class Meta: | 	class Meta: | ||||||
| 		ordering = ['-cas'] | 		ordering = ['-cas'] | ||||||
|  | @ -112,7 +110,6 @@ class KorekturovanePDF(models.Model): | ||||||
| 		self.convert() | 		self.convert() | ||||||
| 
 | 
 | ||||||
| @reversion.register(ignore_duplicates=True) | @reversion.register(ignore_duplicates=True) | ||||||
| @python_2_unicode_compatible |  | ||||||
| class Oprava(models.Model): | class Oprava(models.Model): | ||||||
| 	class Meta: | 	class Meta: | ||||||
| 		db_table = 'opravy' | 		db_table = 'opravy' | ||||||
|  | @ -159,7 +156,6 @@ class Oprava(models.Model): | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @reversion.register(ignore_duplicates=True) | @reversion.register(ignore_duplicates=True) | ||||||
| @python_2_unicode_compatible |  | ||||||
| class Komentar(models.Model): | class Komentar(models.Model): | ||||||
| 	class Meta: | 	class Meta: | ||||||
| 		db_table = 'komentare' | 		db_table = 'komentare' | ||||||
|  |  | ||||||
|  | @ -13,7 +13,6 @@ from .forms import OpravaForm | ||||||
| import subprocess | import subprocess | ||||||
| import shutil | import shutil | ||||||
| import os | import os | ||||||
| import unicodedata |  | ||||||
| 
 | 
 | ||||||
| class KorekturyHelpView(generic.TemplateView): | class KorekturyHelpView(generic.TemplateView): | ||||||
| 	template_name = 'korektury/help.html' | 	template_name = 'korektury/help.html' | ||||||
|  |  | ||||||
|  | @ -24,6 +24,7 @@ INSTALLED_APPS += ( | ||||||
| 
 | 
 | ||||||
| # SECURITY WARNING: don't run with debug turned on in production! | # SECURITY WARNING: don't run with debug turned on in production! | ||||||
| DEBUG = True | DEBUG = True | ||||||
|  | INTERNAL_IPS = ['127.0.0.1'] | ||||||
| 
 | 
 | ||||||
| TEMPLATES[0]['OPTIONS']['debug'] = True | TEMPLATES[0]['OPTIONS']['debug'] = True | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,4 @@ | ||||||
| from django.urls import path, include | from django.urls import path, include | ||||||
| from django.conf.urls.i18n import i18n_patterns |  | ||||||
| from django.contrib.staticfiles.urls import staticfiles_urlpatterns | from django.contrib.staticfiles.urls import staticfiles_urlpatterns | ||||||
| from django.contrib import admin | from django.contrib import admin | ||||||
| from django.conf import settings | from django.conf import settings | ||||||
|  | @ -9,30 +8,32 @@ from django.urls import path # As per docs. | ||||||
| 
 | 
 | ||||||
| urlpatterns = [ | urlpatterns = [ | ||||||
| 
 | 
 | ||||||
|     # Admin a nastroje | 	# Admin a nastroje | ||||||
|     path('admin/', admin.site.urls),  # NOQA | 	path('admin/', admin.site.urls),  # NOQA | ||||||
|     path('ckeditor/', include('ckeditor_uploader.urls')), | 	path('ckeditor/', include('ckeditor_uploader.urls')), | ||||||
|     path('autocomplete/', include('autocomplete_light.urls')), | 	path('autocomplete/', include('autocomplete_light.urls')), | ||||||
| 
 | 
 | ||||||
|     # Seminarova aplikace (ma vlastni podadresare) | 	# Seminarova aplikace (ma vlastni podadresare) | ||||||
|     path('', include('seminar.urls')), | 	path('', include('seminar.urls')), | ||||||
|      | 	 | ||||||
|     # Korekturovaci aplikace (ma vlastni podadresare) | 	# Korekturovaci aplikace (ma vlastni podadresare) | ||||||
|     path('', include('korektury.urls')), | 	path('', include('korektury.urls')), | ||||||
|      | 	 | ||||||
|     # Prednaskova aplikace (ma vlastni podadresare) | 	# Prednaskova aplikace (ma vlastni podadresare) | ||||||
|     path('', include('prednasky.urls')), | 	path('', include('prednasky.urls')), | ||||||
| 
 | 
 | ||||||
|     # Comments (interni i verejne) | 	# Comments (interni i verejne) | ||||||
|     path('comments_dj/', include('django_comments.urls')), | 	path('comments_dj/', include('django_comments.urls')), | ||||||
|     path('comments_fl/', include('fluent_comments.urls')), | 	path('comments_fl/', include('fluent_comments.urls')), | ||||||
| 
 | 
 | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
| # This is only needed when using runserver. | # This is only needed when using runserver. | ||||||
| if settings.DEBUG: | if settings.DEBUG: | ||||||
|     urlpatterns += [ | 	import debug_toolbar | ||||||
|         path('media/<path:path>', views.static.serve,  # NOQA | 	urlpatterns += [ | ||||||
|             {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}), | 		path('media/<path:path>', views.static.serve,  # NOQA | ||||||
|         ] | 			{'document_root': settings.MEDIA_ROOT, 'show_indexes': True}), | ||||||
|     urlpatterns += staticfiles_urlpatterns() | 	path('__debug__/', include(debug_toolbar.urls)), | ||||||
|  | 		] | ||||||
|  | 	urlpatterns += staticfiles_urlpatterns() | ||||||
|  |  | ||||||
|  | @ -1,7 +1,6 @@ | ||||||
| # -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- | ||||||
| 
 | 
 | ||||||
| from django.db import models | from django.db import models | ||||||
| from django.utils.encoding import python_2_unicode_compatible |  | ||||||
| from django.utils.encoding import force_text | from django.utils.encoding import force_text | ||||||
| 
 | 
 | ||||||
| from seminar.models import Organizator, Soustredeni | from seminar.models import Organizator, Soustredeni | ||||||
|  | @ -16,7 +15,6 @@ STAV_CHOICES = ( | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @python_2_unicode_compatible |  | ||||||
| class Seznam(models.Model): | class Seznam(models.Model): | ||||||
| 	class Meta: | 	class Meta: | ||||||
| 		db_table = 'prednasky_seznam' | 		db_table = 'prednasky_seznam' | ||||||
|  | @ -30,8 +28,8 @@ class Seznam(models.Model): | ||||||
| 	stav = models.IntegerField('Stav',choices=STAV_CHOICES,default = STAV_NAVRH) | 	stav = models.IntegerField('Stav',choices=STAV_CHOICES,default = STAV_NAVRH) | ||||||
| 
 | 
 | ||||||
| 	def __str__(self): | 	def __str__(self): | ||||||
| 			return force_unicode("Seznam {}přednášek na {}".format("návrhů "  | 			return "Seznam {}přednášek na {}".format("návrhů "  | ||||||
| 					if self.stav == STAV_NAVRH else "", self.soustredeni)) | 					if self.stav == STAV_NAVRH else "", self.soustredeni) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| CHOICES_OBTIZNOST = ( | CHOICES_OBTIZNOST = ( | ||||||
|  | @ -46,7 +44,6 @@ CHOICES_BODY = ( | ||||||
| 		(1, '1'), | 		(1, '1'), | ||||||
| 		) | 		) | ||||||
| 
 | 
 | ||||||
| @python_2_unicode_compatible |  | ||||||
| class Prednaska(models.Model): | class Prednaska(models.Model): | ||||||
| 	class Meta: | 	class Meta: | ||||||
| 		db_table = 'prednasky_prednaska' | 		db_table = 'prednasky_prednaska' | ||||||
|  | @ -65,10 +62,9 @@ class Prednaska(models.Model): | ||||||
| 	seznamy = models.ManyToManyField(Seznam) | 	seznamy = models.ManyToManyField(Seznam) | ||||||
| 
 | 
 | ||||||
| 	def __str__(self): | 	def __str__(self): | ||||||
| 		return force_unicode(u"{} ({})".format(self.nazev, self.org)) | 		return "{} ({})".format(self.nazev, self.org) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @python_2_unicode_compatible |  | ||||||
| class Hlasovani(models.Model): | class Hlasovani(models.Model): | ||||||
| 	class Meta: | 	class Meta: | ||||||
| 		db_table = 'prednasky_hlasovani' | 		db_table = 'prednasky_hlasovani' | ||||||
|  | @ -82,6 +78,6 @@ class Hlasovani(models.Model): | ||||||
| 	seznam = models.ForeignKey(Seznam,null=True,on_delete=models.SET_NULL) | 	seznam = models.ForeignKey(Seznam,null=True,on_delete=models.SET_NULL) | ||||||
| 
 | 
 | ||||||
| 	def __str__(self): | 	def __str__(self): | ||||||
| 		return force_unicode("{} dal {} bodů {} v seznamu {}".format(self.ucastnik,  | 		return "{} dal {} bodů {} v seznamu {}".format(self.ucastnik,  | ||||||
| 					self.body, self.prednaska, self.seznam)) | 					self.body, self.prednaska, self.seznam) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -28,13 +28,13 @@ django-imagekit | ||||||
| 
 | 
 | ||||||
| # Comments | # Comments | ||||||
| akismet==1.0.1 | akismet==1.0.1 | ||||||
| django-fluent-comments==2.0.2 | django-fluent-comments==2.1 | ||||||
| django-threadedcomments==1.2 | django-threadedcomments==1.2 | ||||||
| django-contrib-comments==1.9.0 | django-contrib-comments==1.9.0 | ||||||
| 
 | 
 | ||||||
| # debug tools/extensions | # debug tools/extensions | ||||||
| 
 | 
 | ||||||
| django-debug-toolbar==1.9.1 | django-debug-toolbar==1.11 | ||||||
| django-extensions==2.1.9 | django-extensions==2.1.9 | ||||||
| sqlparse==0.2.4 | sqlparse==0.2.4 | ||||||
| Werkzeug==0.14.1 | Werkzeug==0.14.1 | ||||||
|  |  | ||||||
|  | @ -6,7 +6,6 @@ from django.db import models | ||||||
| from django.contrib import auth | from django.contrib import auth | ||||||
| from django.utils import timezone | from django.utils import timezone | ||||||
| from django.conf import settings | from django.conf import settings | ||||||
| from django.utils.encoding import python_2_unicode_compatible |  | ||||||
| from django.utils.encoding import force_text | from django.utils.encoding import force_text | ||||||
| from django.utils.text import slugify | from django.utils.text import slugify | ||||||
| from django.urls import reverse | from django.urls import reverse | ||||||
|  | @ -301,7 +300,7 @@ class Resitel(SeminarModelBase): | ||||||
| 			return 'Prof.' | 			return 'Prof.' | ||||||
| 		else: | 		else: | ||||||
| 			return 'Akad.' | 			return 'Akad.' | ||||||
| 	def __str__(): | 	def __str__(self): | ||||||
| 		return self.osoba.plne_jmeno() | 		return self.osoba.plne_jmeno() | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -488,7 +487,7 @@ class Organizator(SeminarModelBase): | ||||||
| 
 | 
 | ||||||
| 	studuje = models.CharField('Studium aj.', max_length = 256, | 	studuje = models.CharField('Studium aj.', max_length = 256, | ||||||
| 			null = True, blank = True, | 			null = True, blank = True, | ||||||
| 			help_text=u"Např. 'Studuje Obecnou fyziku (Bc.), 3. ročník', " | 			help_text="Např. 'Studuje Obecnou fyziku (Bc.), 3. ročník', " | ||||||
| 			"'Vystudovala Diskrétní modely a algoritmy (Mgr.)' nebo " | 			"'Vystudovala Diskrétní modely a algoritmy (Mgr.)' nebo " | ||||||
| 			"'Přednáší na MFF'") | 			"'Přednáší na MFF'") | ||||||
| 
 | 
 | ||||||
|  | @ -496,7 +495,7 @@ class Organizator(SeminarModelBase): | ||||||
| 			null = True, blank = True) | 			null = True, blank = True) | ||||||
| 
 | 
 | ||||||
| 	skola = models.CharField('Škola, kterou studuje', max_length = 256, null=True, blank=True, | 	skola = models.CharField('Škola, kterou studuje', max_length = 256, null=True, blank=True, | ||||||
| 		help_text=u"Škola, např. MFF, VŠCHT, VUT, ... prostě aby se nemuselo psát do studuje" | 		help_text="Škola, např. MFF, VŠCHT, VUT, ... prostě aby se nemuselo psát do studuje" | ||||||
| 		"školu, ale jen obor, možnost zobrazit zvlášť") | 		"školu, ale jen obor, možnost zobrazit zvlášť") | ||||||
| 
 | 
 | ||||||
| 	def __str__(self): | 	def __str__(self): | ||||||
|  | @ -642,8 +641,8 @@ class Problem(SeminarModelBase): | ||||||
| 	def kod_v_rocniku(self): | 	def kod_v_rocniku(self): | ||||||
| 		if self.stav == 'zadany': | 		if self.stav == 'zadany': | ||||||
| 			if self.nadproblem: | 			if self.nadproblem: | ||||||
| 				return force_unicode(self.nadproblem.kod_v_rocniku()+".{}".format(self.kod)) | 				return self.nadproblem.kod_v_rocniku()+".{}".format(self.kod) | ||||||
| 			return force_unicode(str(self.kod)) | 			return str(self.kod) | ||||||
| 		return '<Není zadaný>' | 		return '<Není zadaný>' | ||||||
| 
 | 
 | ||||||
| 	def verejne(self): | 	def verejne(self): | ||||||
|  | @ -712,7 +711,7 @@ class Clanek(Problem): | ||||||
| 		if self.stav == 'zadany': | 		if self.stav == 'zadany': | ||||||
| # Nemělo by být potřeba | # Nemělo by být potřeba | ||||||
| #			if self.nadproblem: | #			if self.nadproblem: | ||||||
| #				return force_unicode(self.nadproblem.kod_v_rocniku()+".c{}".format(self.kod)) | #				return self.nadproblem.kod_v_rocniku()+".c{}".format(self.kod) | ||||||
| 			return "c{}".format(self.kod) | 			return "c{}".format(self.kod) | ||||||
| 		return '<Není zadaný>' | 		return '<Není zadaný>' | ||||||
| 
 | 
 | ||||||
|  | @ -913,7 +912,7 @@ class PrilohaReseni(SeminarModelBase): | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class Pohadka(SeminarModelBase): | class Pohadka(SeminarModelBase): | ||||||
| 	u"""Kus pohádky před/za úlohou v čísle""" | 	"""Kus pohádky před/za úlohou v čísle""" | ||||||
| 
 | 
 | ||||||
| 	class Meta: | 	class Meta: | ||||||
| 		db_table = 'seminar_pohadky' | 		db_table = 'seminar_pohadky' | ||||||
|  | @ -1252,7 +1251,6 @@ class TextNode(TreeNode): | ||||||
| 		verbose_name = 'text') | 		verbose_name = 'text') | ||||||
| 
 | 
 | ||||||
| ## FIXME: Logiku přesunout do views. | ## FIXME: Logiku přesunout do views. | ||||||
| #@python_2_unicode_compatible |  | ||||||
| #class VysledkyBase(SeminarModelBase): | #class VysledkyBase(SeminarModelBase): | ||||||
| # | # | ||||||
| #	class Meta: | #	class Meta: | ||||||
|  | @ -1275,8 +1273,8 @@ class TextNode(TreeNode): | ||||||
| #			verbose_name='body za číslo') | #			verbose_name='body za číslo') | ||||||
| # | # | ||||||
| #	def __str__(self): | #	def __str__(self): | ||||||
| #		return force_unicode(u"%s: %sb (%s)".format(self.resitel.plne_jmeno(), self.body,  | #		return "%s: %sb (%s)".format(self.resitel.plne_jmeno(), self.body,  | ||||||
| #		str(self.cislo))) | #		str(self.cislo)) | ||||||
| #		# NOTE: DB zatez pri vypisu (ale nepouzivany) | #		# NOTE: DB zatez pri vypisu (ale nepouzivany) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -1314,7 +1312,6 @@ class TextNode(TreeNode): | ||||||
| # | # | ||||||
| # | # | ||||||
| ## FIXME: Logiku přesunout do views. | ## FIXME: Logiku přesunout do views. | ||||||
| #@python_2_unicode_compatible |  | ||||||
| #class VysledkyCelkemKCislu(VysledkyBase): | #class VysledkyCelkemKCislu(VysledkyBase): | ||||||
| # | # | ||||||
| #	class Meta: | #	class Meta: | ||||||
|  | @ -1327,12 +1324,11 @@ class TextNode(TreeNode): | ||||||
| # | # | ||||||
| #	def __str__(self): | #	def __str__(self): | ||||||
| #		# NOTE: DB HOG (ale nepouzivany) | #		# NOTE: DB HOG (ale nepouzivany) | ||||||
| #		return force_unicode(u"%s: %sb / %sb (do %s)" % (self.resitel.plne_jmeno(), self.body, self.body_celkem, str(self.cislo))) | #		return "%s: %sb / %sb (do %s)" % (self.resitel.plne_jmeno(), self.body, self.body_celkem, str(self.cislo)) | ||||||
| ##mozna potreba upravit | ##mozna potreba upravit | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @reversion.register(ignore_duplicates=True) | @reversion.register(ignore_duplicates=True) | ||||||
| @python_2_unicode_compatible |  | ||||||
| class Nastaveni(SingletonModel): | class Nastaveni(SingletonModel): | ||||||
| 
 | 
 | ||||||
| 	class Meta: | 	class Meta: | ||||||
|  | @ -1356,7 +1352,6 @@ class Nastaveni(SingletonModel): | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @reversion.register(ignore_duplicates=True) | @reversion.register(ignore_duplicates=True) | ||||||
| @python_2_unicode_compatible |  | ||||||
| class Novinky(models.Model): | class Novinky(models.Model): | ||||||
| 
 | 
 | ||||||
| 	class Meta: | 	class Meta: | ||||||
|  |  | ||||||
|  | @ -1 +1 @@ | ||||||
| {% for sous_ucast in object_list %}{{ sous_ucast.resitel.email }}{% if not forloop.last %}, {% endif %}{% endfor %} | {% for sous_ucast in object_list %}{{ sous_ucast.resitel.osoba.email }}{% if not forloop.last %}, {% endif %}{% endfor %} | ||||||
|  |  | ||||||
|  | @ -19,7 +19,7 @@ def merge_props(r1, r2, prop, pretend=True, smaller=False, equal=True): | ||||||
| 			r1.__setattr__(prop, a2) | 			r1.__setattr__(prop, a2) | ||||||
| 	elif a2: | 	elif a2: | ||||||
| 		if equal and a1 != a2: | 		if equal and a1 != a2: | ||||||
| 			log.warn(u"merge: Ruzna %s: %s VS %s", prop, a1, a2) | 			log.warn("merge: Ruzna %s: %s VS %s", prop, a1, a2) | ||||||
| 		if smaller: | 		if smaller: | ||||||
| 			if not pretend: | 			if not pretend: | ||||||
| 				r1.__setattr__(prop, min(a1, a2)) | 				r1.__setattr__(prop, min(a1, a2)) | ||||||
|  | @ -33,16 +33,16 @@ def merge_Resitel(rbase, rmerge, pretend=True): | ||||||
| 	# Ma relace: skola | 	# Ma relace: skola | ||||||
| 	# Je v relaci: user, reseni, soustredeni_ucastnici, vysledky_base(VIEW) | 	# Je v relaci: user, reseni, soustredeni_ucastnici, vysledky_base(VIEW) | ||||||
| 
 | 
 | ||||||
| 	log.info(u"merge: %s <- %s", unicode(rbase), unicode(rmerge)) | 	log.info("merge: %s <- %s", unicode(rbase), unicode(rmerge)) | ||||||
| 
 | 
 | ||||||
| 	assert not rbase.user | 	assert not rbase.user | ||||||
| 	assert not rmerge.user | 	assert not rmerge.user | ||||||
| 	assert rbase != rmerge | 	assert rbase != rmerge | ||||||
| 
 | 
 | ||||||
| 	if (rbase.jmeno != rmerge.jmeno) or (rbase.prijmeni != rmerge.prijmeni): | 	if (rbase.jmeno != rmerge.jmeno) or (rbase.prijmeni != rmerge.prijmeni): | ||||||
| 		log.error(u"merge: Ruzna jmena: %s VS %s", rbase, rmerge) | 		log.error("merge: Ruzna jmena: %s VS %s", rbase, rmerge) | ||||||
| 	if rbase.rok_maturity != rmerge.rok_maturity: | 	if rbase.rok_maturity != rmerge.rok_maturity: | ||||||
| 		log.error(u"merge: Ruzne roky maturity: %s VS %s", rbase.rok_maturity, rmerge.rok_maturity) | 		log.error("merge: Ruzne roky maturity: %s VS %s", rbase.rok_maturity, rmerge.rok_maturity) | ||||||
| 
 | 
 | ||||||
| 	with reversion.create_revision(): | 	with reversion.create_revision(): | ||||||
| 		reversion.set_comment('Merge duplicitnich Resitelu: %r <- %r' % (rbase.pk, rmerge.pk)) | 		reversion.set_comment('Merge duplicitnich Resitelu: %r <- %r' % (rbase.pk, rmerge.pk)) | ||||||
|  |  | ||||||
|  | @ -14,7 +14,6 @@ from django.contrib.auth import authenticate, login | ||||||
| from .models import Problem, Cislo, Reseni, Nastaveni, Rocnik, Soustredeni, Organizator, Resitel, Novinky, Soustredeni_Ucastnici, Pohadka, Tema, Clanek | from .models import Problem, Cislo, Reseni, Nastaveni, Rocnik, Soustredeni, Organizator, Resitel, Novinky, Soustredeni_Ucastnici, Pohadka, Tema, Clanek | ||||||
| #from .models import VysledkyZaCislo, VysledkyKCisluZaRocnik, VysledkyKCisluOdjakziva | #from .models import VysledkyZaCislo, VysledkyKCisluZaRocnik, VysledkyKCisluOdjakziva | ||||||
| from . import utils | from . import utils | ||||||
| from .unicodecsv import UnicodeWriter |  | ||||||
| from .forms import NameForm | from .forms import NameForm | ||||||
| 
 | 
 | ||||||
| from datetime import timedelta, date, datetime | from datetime import timedelta, date, datetime | ||||||
|  | @ -35,7 +34,7 @@ import csv | ||||||
| def verejna_temata(rocnik): | def verejna_temata(rocnik): | ||||||
| 	"""Vrací queryset zveřejněných témat v daném ročníku. | 	"""Vrací queryset zveřejněných témat v daném ročníku. | ||||||
| 	""" | 	""" | ||||||
| 	return Problem.objects.filter(typ=Problem.TYP_TEMA, cislo_zadani__rocnik=rocnik, cislo_zadani__verejne_db=True).order_by('kod') | 	return Tema.objects.filter(rocnik=rocnik).order_by('kod') #FIXME Ještě je potřeba zjistit, jestli je tematko verejne. | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def AktualniZadaniView(request): | def AktualniZadaniView(request): | ||||||
|  | @ -629,10 +628,10 @@ def soustredeniUcastniciExportView(request,soustredeni): | ||||||
| 	response = HttpResponse(content_type='text/csv') | 	response = HttpResponse(content_type='text/csv') | ||||||
| 	response['Content-Disposition'] = 'attachment; filename="ucastnici.csv"' | 	response['Content-Disposition'] = 'attachment; filename="ucastnici.csv"' | ||||||
| 
 | 
 | ||||||
| 	writer = UnicodeWriter(response) | 	writer = csv.writer(response) | ||||||
| 	writer.writerow(["jmeno", "prijmeni", "rok_maturity", "telefon", "email", "ulice", "mesto", "psc","stat"]) | 	writer.writerow(["jmeno", "prijmeni", "rok_maturity", "telefon", "email", "ulice", "mesto", "psc","stat"]) | ||||||
| 	for u in ucastnici: | 	for u in ucastnici: | ||||||
| 		writer.writerow([u.jmeno, u.prijmeni, str(u.rok_maturity), u.telefon, u.email, u.ulice, u.mesto, u.psc, u.stat.name]) | 		writer.writerow([u.osoba.jmeno, u.osoba.prijmeni, str(u.rok_maturity), u.osoba.telefon, u.osoba.email, u.osoba.ulice, u.osoba.mesto, u.osoba.psc, u.osoba.stat.name]) | ||||||
| 	return response | 	return response | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -642,7 +641,7 @@ def soustredeniUcastniciExportView(request,soustredeni): | ||||||
| class ClankyResitelView(generic.ListView): | class ClankyResitelView(generic.ListView): | ||||||
| 	model = Problem | 	model = Problem | ||||||
| 	template_name = 'seminar/clanky/resitelske_clanky.html' | 	template_name = 'seminar/clanky/resitelske_clanky.html' | ||||||
| 	queryset = Clanek.objects.filter(stav=Problem.STAV_ZADANY).select_related('cislo_zadani__rocnik').order_by('-cislo_zadani__rocnik__rocnik', 'kod') | 	queryset = Clanek.objects.filter(stav=Problem.STAV_ZADANY).select_related('cislo__rocnik').order_by('-cislo__rocnik__rocnik', 'kod') | ||||||
| 
 | 
 | ||||||
| # FIXME: pokud chceme orgoclanky, tak nejak zavest do modelu a podle toho odkomentovat a upravit | # FIXME: pokud chceme orgoclanky, tak nejak zavest do modelu a podle toho odkomentovat a upravit | ||||||
| #class ClankyOrganizatorView(generic.ListView)<F12>: | #class ClankyOrganizatorView(generic.ListView)<F12>: | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Tomáš Domes
						Tomáš Domes