diff --git a/core/utils.py b/core/utils.py index ee429eee..b6416222 100644 --- a/core/utils.py +++ b/core/utils.py @@ -2,10 +2,6 @@ import xlwt import datetime - -from exposition.models import Exposition -from conference.models import Conference - from django.core.exceptions import ObjectDoesNotExist HEADER_STYLE = xlwt.easyxf('font: bold on') @@ -42,11 +38,13 @@ def get_column_cell(obj, name): return ', '.join(unicode(x).strip() for x in attr.all()) return attr + def queryset_to_workbook(queryset, columns, header_style=None, default_style=None, cell_style_map=None): workbook = xlwt.Workbook() report_date = datetime.date.today() - sheet_name = 'Export {0}'.format(report_date.strftime('%Y-%m-%d')) + sheet_name = u'My calendar {0}'.format(report_date.strftime('%Y-%m-%d')) sheet = workbook.add_sheet(sheet_name) + sheet.insert_bitmap('') if not header_style: header_style = HEADER_STYLE @@ -57,14 +55,13 @@ def queryset_to_workbook(queryset, columns, header_style=None, default_style=Non obj = queryset[0] - for y, column in enumerate(columns): - header_list=[u'Название события',u'Страна',u'Город',u'Место проведения', u'Дата начала', u'Дата окончания'] - - sheet.write(0, y, header_list[y], header_style) + for i, column in enumerate(columns): + header_list=[u'#', u'Название события',u'Даты',u'Краткое описание',u'Место проведения', u'Заметка', u'Ссылка на событие'] + sheet.write(0, i, header_list[i], header_style) for x, obj in enumerate(queryset, start=1): for y, column in enumerate(columns): - value = get_column_cell(obj, column) + value = getattr(obj, column) style = default_style for value_type, cell_style in cell_style_map: if isinstance(value, value_type): diff --git a/core/views.py b/core/views.py index 1c53d73d..46172999 100644 --- a/core/views.py +++ b/core/views.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- -from django.shortcuts import render_to_response from country.models import Country from city.models import City from place_exposition.models import PlaceExposition @@ -253,34 +252,42 @@ class PageDetailed(DetailView): slug_url_kwarg = 'url' - - - # ------------ XLS Export ---------------- from django.http import HttpResponse +from django.utils.translation import get_language from .utils import queryset_to_workbook from exposition.models import Exposition from conference.models import Conference + def download_workbook(request): - data = [(36539, 'expo'),(36602, 'expo'), (3033, 'conf'), (3053, 'conf')] + lang = get_language() + data = [(36539, 'expo'),(36602, 'expo')]#, (3033, 'conf'), (3053, 'conf')] qs = [] for obj in data: if obj[1] == 'expo': - qs.append(Exposition.objects.get(id=obj[0])) - if obj[1] == 'conf': - qs.append(Conference.objects.get(id=obj[0])) + qs.append(Exposition.objects.language(lang).get(id=obj[0])) + + elif obj[1] == 'conf': + qs.append(Conference.objects.language(lang).get(id=obj[0])) + for i, obj in enumerate(qs, start=1): + setattr(obj, 'number', i) + setattr(obj, 'dates', u'%s - %s'%(obj.data_begin.strftime('%d %B %Y'),obj.data_end.strftime('%d %B %Y'))) + setattr(obj, 'full_place', u'%s, %s, %s' % (obj.country, obj.city, getattr(obj.place, 'name', ''))) + setattr(obj, 'link', u'expomap.ru%s'%obj.get_absolute_url()) + columns = ( + 'number', 'name', - 'country.name', - 'city.name', - 'place.name', - 'data_begin', - 'data_end') + 'dates', + 'main_title', + 'full_place', + 'participation_note', + 'link') workbook = queryset_to_workbook(qs, columns) response = HttpResponse(content_type='application/vnd.ms-excel') - response['Content-Disposition'] = 'attachment; filename="export.xls"' + response['Content-Disposition'] = 'attachment; filename="My calendar.xls"' workbook.save(response) return response