misc: improve string representation of time period exceptions (#18996)
This commit is contained in:
parent
8eb2f3d5b6
commit
6b2d77ef88
|
@ -26,7 +26,6 @@ from django.core.exceptions import ValidationError
|
|||
from django.core.urlresolvers import reverse
|
||||
from django.db import models, transaction
|
||||
from django.db.models import Q
|
||||
from django.utils.dateformat import DateFormat
|
||||
from django.utils.dates import WEEKDAYS
|
||||
from django.utils.encoding import force_text
|
||||
from django.utils.formats import date_format, get_format
|
||||
|
@ -527,13 +526,29 @@ class TimePeriodException(models.Model):
|
|||
ordering = ['start_datetime']
|
||||
|
||||
def __unicode__(self):
|
||||
date_format = get_format('SHORT_DATETIME_FORMAT')
|
||||
if is_midnight(self.start_datetime) or is_midnight(self.end_datetime):
|
||||
date_format = get_format('SHORT_DATE_FORMAT')
|
||||
exc_repr = u'%s → %s' % (DateFormat(localtime(self.start_datetime)).format(date_format),
|
||||
DateFormat(localtime(self.end_datetime)).format(date_format))
|
||||
if is_midnight(self.start_datetime) and is_midnight(self.end_datetime):
|
||||
# if both dates are at midnight don't include the time part
|
||||
if self.end_datetime == self.start_datetime + datetime.timedelta(days=1):
|
||||
# a single day
|
||||
exc_repr = u'%s' % date_format(localtime(self.start_datetime), 'SHORT_DATE_FORMAT')
|
||||
else:
|
||||
exc_repr = u'%s → %s' % (
|
||||
date_format(localtime(self.start_datetime), 'SHORT_DATE_FORMAT'),
|
||||
date_format(localtime(self.end_datetime), 'SHORT_DATE_FORMAT'))
|
||||
else:
|
||||
if localtime(self.start_datetime).date() == localtime(self.end_datetime).date():
|
||||
# same day
|
||||
exc_repr = u'%s → %s' % (
|
||||
date_format(localtime(self.start_datetime), 'SHORT_DATETIME_FORMAT'),
|
||||
date_format(localtime(self.end_datetime), 'TIME_FORMAT'))
|
||||
else:
|
||||
exc_repr = u'%s → %s' % (
|
||||
date_format(localtime(self.start_datetime), 'SHORT_DATETIME_FORMAT'),
|
||||
date_format(localtime(self.end_datetime), 'SHORT_DATETIME_FORMAT'))
|
||||
|
||||
if self.label:
|
||||
exc_repr = u'%s (%s)' % (self.label, exc_repr)
|
||||
|
||||
return exc_repr
|
||||
|
||||
def clean(self):
|
||||
|
|
|
@ -1,9 +1,12 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
import datetime
|
||||
import pytest
|
||||
|
||||
from django.test import override_settings
|
||||
from django.utils.timezone import make_aware
|
||||
|
||||
from chrono.agendas.models import Agenda, TimePeriod, MeetingType, Desk
|
||||
from chrono.agendas.models import Agenda, TimePeriod, TimePeriodException, MeetingType, Desk
|
||||
|
||||
pytestmark = pytest.mark.django_db
|
||||
|
||||
|
@ -96,3 +99,30 @@ def test_timeperiod_time_slots():
|
|||
assert events[0].start_datetime.timetuple()[:5] == (2016, 9, 3, 9, 0)
|
||||
assert events[-1].start_datetime.timetuple()[:5] == (2016, 9, 24, 11, 30)
|
||||
assert len(events) == 24
|
||||
|
||||
|
||||
@override_settings(LANGUAGE_CODE='fr-fr')
|
||||
def test_time_period_exception_as_string():
|
||||
# single day
|
||||
assert unicode(TimePeriodException(
|
||||
start_datetime=make_aware(datetime.datetime(2018, 1, 18)),
|
||||
end_datetime=make_aware(datetime.datetime(2018, 1, 19)))
|
||||
) == u'18 jan. 2018'
|
||||
|
||||
# multiple full days
|
||||
assert unicode(TimePeriodException(
|
||||
start_datetime=make_aware(datetime.datetime(2018, 1, 18)),
|
||||
end_datetime=make_aware(datetime.datetime(2018, 1, 20)))
|
||||
) == u'18 jan. 2018 → 20 jan. 2018'
|
||||
|
||||
# a few hours in a day
|
||||
assert unicode(TimePeriodException(
|
||||
start_datetime=make_aware(datetime.datetime(2018, 1, 18, 10, 0)),
|
||||
end_datetime=make_aware(datetime.datetime(2018, 1, 18, 12, 0)))
|
||||
) == u'18 jan. 2018 10:00 → 12:00'
|
||||
|
||||
# multiple days and different times
|
||||
assert unicode(TimePeriodException(
|
||||
start_datetime=make_aware(datetime.datetime(2018, 1, 18, 10, 0)),
|
||||
end_datetime=make_aware(datetime.datetime(2018, 1, 20, 12, 0)))
|
||||
) == u'18 jan. 2018 10:00 → 20 jan. 2018 12:00'
|
||||
|
|
Loading…
Reference in New Issue