From c22ad7ca30a9cfe6e1dff660f65ba2eecb05f8b9 Mon Sep 17 00:00:00 2001 From: Nazar Kotiuk Date: Tue, 30 Dec 2014 12:54:18 +0200 Subject: [PATCH] Calendar --- accounts/views.py | 38 +++++++++++++++++++ .../includes/accounts/calendar_table.html | 22 +++++++++-- 2 files changed, 57 insertions(+), 3 deletions(-) diff --git a/accounts/views.py b/accounts/views.py index ab511004..f39782ac 100644 --- a/accounts/views.py +++ b/accounts/views.py @@ -30,6 +30,13 @@ class SettingsView(TemplateView): context['email_announcement_form'] = EmailAnnouncementForm() return context +def dates_range(date1, date2): + delta = date2 - date1 + dates = [] + for i in range(delta.days + 1): + dates.append(date1 + datetime.timedelta(days=i)) + return dates + class CalendarView(TemplateView): """ display template with user calendar(one month) @@ -79,6 +86,37 @@ class CalendarView(TemplateView): # events in current month context['events'] = calendar.events_by_month(now) + + events = context['events'] + days = context['days'] + event_in_day = False + counter = 0 + dates_with_events = [] + for event in events: + dates_with_events += dates_range(event.data_begin, event.data_end) + + dates_with_events = list(set(dates_with_events)) + day_colspan = {} + for day in days: + if day.date() in dates_with_events: + day_colspan[day] = {'event': True} + else: + day_colspan[day] = {'event': False} + previous_day = day - datetime.timedelta(days=1) + if previous_day not in days: + day_colspan[day]['start'] = day + else: + if day_colspan[previous_day]['event']: + day_colspan[day]['start'] = day + else: + day_colspan[day]['start'] = day_colspan[previous_day]['start'] + if day_colspan[day_colspan[day]['start']].get('counter'): + + day_colspan[day_colspan[day]['start']]['counter'] += 1 + else: + day_colspan[day_colspan[day]['start']]['counter'] = 1 + context['day_colspan'] = day_colspan + return context diff --git a/templates/client/includes/accounts/calendar_table.html b/templates/client/includes/accounts/calendar_table.html index a89e6d6d..5ca68211 100644 --- a/templates/client/includes/accounts/calendar_table.html +++ b/templates/client/includes/accounts/calendar_table.html @@ -40,12 +40,28 @@ {# первый ряд с отображениями дней где нет событий #} {% for day in days %} - {% if day|in_events:events %} - + + {% if day_colspan|get_item:day|get_item:'event' %} + {% ifnotequal day current_day %} + + {% else %} + + {% endifnotequal %} + {% else %} -  {# нет событий в эти дни #} + {% if day_colspan|get_item:day|get_item:'counter' %} + {# здесь ячейка с днями без событий #} + +
+
{% trans "Нет отмеченых событий" %}
+
+ + + {% endif %} + {% endif %} + {% endfor %}