diff --git a/src/tixlbase/models.py b/src/tixlbase/models.py index cd4621c7d3..8f3f00ad46 100644 --- a/src/tixlbase/models.py +++ b/src/tixlbase/models.py @@ -51,10 +51,24 @@ class Versionable(BaseVersionable): earlier_version.version_end_date = forced_version_date earlier_version.save() + for field in earlier_version._meta.many_to_many: + earlier_version.clone_relations_shallow(later_version, field.attname, forced_version_date) + + if hasattr(earlier_version._meta, 'many_to_many_related'): + for rel in earlier_version._meta.many_to_many_related: + earlier_version.clone_relations_shallow(later_version, rel.via_field_name, forced_version_date) + later_version.save() return later_version + def clone_relations_shallow(self, clone, manager_field_name, forced_version_date): + # Source: the original object, where relations are currently pointing to + source = getattr(self, manager_field_name) # returns a VersionedRelatedManager instance + # Destination: the clone, where the cloned relations should point to + source.through.objects.filter(**{source.source_field.attname: clone.id}).update(**{ + source.source_field.attname: self.id}) + class UserManager(BaseUserManager): """ @@ -156,11 +170,11 @@ class User(AbstractBaseUser, PermissionsMixin): return self.identifier def save(self, *args, **kwargs): - if self.identifier is None: + if not self.identifier: if self.event is None: self.identifier = self.email.lower() else: - self.identifier = "%s@%d.event.tixl" % (self.username.lower(), self.event.id) + self.identifier = "%s@%s.event.tixl" % (self.username.lower(), self.event.id) if not self.pk: self.identifier = self.identifier.lower() super().save(*args, **kwargs) @@ -179,7 +193,7 @@ class User(AbstractBaseUser, PermissionsMixin): elif not self.givenname and self.familyname: return self.familyname elif self.familyname and self.givenname: - return '%(family)s, %(given)s' % { + return _('%(family)s, %(given)s') % { 'family': self.familyname, 'given': self.givenname } diff --git a/src/tixlbase/tests/test_middleware.py b/src/tixlbase/tests/test_middleware.py index eadd26b511..a379328148 100644 --- a/src/tixlbase/tests/test_middleware.py +++ b/src/tixlbase/tests/test_middleware.py @@ -38,6 +38,12 @@ class LocaleDeterminationTest(TestCase): language = response['Content-Language'] self.assertEqual(language, self.TEST_LOCALE) + def test_unknown_browser_default(self): + c = Client(HTTP_ACCEPT_LANGUAGE='sjn') + response = c.get('/control/') + language = response['Content-Language'] + self.assertEqual(language, settings.LANGUAGE_CODE) + def test_cookie_settings(self): c = Client() cookies = c.cookies diff --git a/src/tixlbase/tests/test_models.py b/src/tixlbase/tests/test_models.py index 90d5ac4630..8d33e34cd5 100644 --- a/src/tixlbase/tests/test_models.py +++ b/src/tixlbase/tests/test_models.py @@ -3,7 +3,7 @@ from django.utils.timezone import now from tixlbase.models import ( Event, Organizer, Item, ItemVariation, - Property, PropertyValue + Property, PropertyValue, User ) from tixlbase.types import VariationDict @@ -139,3 +139,41 @@ class ItemVariationsTest(TestCase): ['L', 'blue'], ])) self.assertEqual(num_variations, 1) + + +class VersionableTestCase(TestCase): + + def test_shallow_cone(self): + o = Organizer.objects.create(name='Dummy', slug='dummy') + event = Event.objects.create( + organizer=o, name='Dummy', slug='dummy', + date_from=now(), + ) + old = Item.objects.create(event=event, name='Dummy', default_price=14) + prop = Property.objects.create(event=event, name='Size') + old.properties.add(prop) + new = old.clone_shallow() + self.assertIsNone(new.version_end_date) + self.assertIsNotNone(old.version_end_date) + self.assertEqual(new.properties.count(), 0) + self.assertEqual(old.properties.count(), 1) + + +class UserTestCase(TestCase): + + def test_identifier_local(self): + o = Organizer.objects.create(name='Dummy', slug='dummy') + event = Event.objects.create( + organizer=o, name='Dummy', slug='dummy', + date_from=now(), + ) + u = User(event=event, username='tester') + u.set_password("test") + u.save() + self.assertEqual(u.identifier, "%s@%s.event.tixl" % (u.username.lower(), event.id)) + + def test_identifier_global(self): + u = User(email='test@example.com') + u.set_password("test") + u.save() + self.assertEqual(u.identifier, "test@example.com") diff --git a/src/tixlcontrol/templates/tixlcontrol/item/base.html b/src/tixlcontrol/templates/tixlcontrol/item/base.html index 8f9dc3058e..ac20434a87 100644 --- a/src/tixlcontrol/templates/tixlcontrol/item/base.html +++ b/src/tixlcontrol/templates/tixlcontrol/item/base.html @@ -2,12 +2,19 @@ {% load i18n %} {% block title %}{{ item.name }} :: {% trans "Item" %}{% endblock %} {% block content %} -
{% blocktrans trimmed %} + You will be able to adjust further settings in the next step. + {% endblocktrans %}
+ {% endif %} {% if item.identity and not item.quotas.exists %}+ {% trans "Create new item" %} +
| {{ i.name }} | -{{ i.category }} | +{% if i.category %}{{ i.category }}{% endif %} |