mirror of
https://github.com/pretix/pretix.git
synced 2026-08-26 13:14:40 +00:00
Split OverviewReport into modular functions
This commit is contained in:
@@ -52,7 +52,8 @@ from django.utils.translation import gettext as _, gettext_lazy, pgettext
|
|||||||
from django_countries.fields import Country
|
from django_countries.fields import Country
|
||||||
from reportlab.lib import colors
|
from reportlab.lib import colors
|
||||||
from reportlab.lib.enums import TA_CENTER
|
from reportlab.lib.enums import TA_CENTER
|
||||||
from reportlab.platypus import PageBreak
|
from reportlab.platypus import PageBreak, Paragraph, Spacer, Table, TableStyle
|
||||||
|
from reportlab.lib.units import mm
|
||||||
|
|
||||||
from pretix.base.decimal import round_decimal
|
from pretix.base.decimal import round_decimal
|
||||||
from pretix.base.exporter import BaseExporter, MultiSheetListExporter
|
from pretix.base.exporter import BaseExporter, MultiSheetListExporter
|
||||||
@@ -210,19 +211,56 @@ class OverviewReport(Report):
|
|||||||
if form_data.get('date_until'):
|
if form_data.get('date_until'):
|
||||||
form_data['date_until'] = parse(form_data['date_until'])
|
form_data['date_until'] = parse(form_data['date_until'])
|
||||||
|
|
||||||
story = self._table_story(doc, form_data)
|
story = self._header_story(doc, form_data, net=False) + self._filter_story(doc, form_data, net=False) + self._table_story(doc, form_data)
|
||||||
if self.event.tax_rules.exists():
|
if self.event.tax_rules.exists():
|
||||||
story += [PageBreak()]
|
story += [PageBreak()]
|
||||||
|
story += self._header_story(doc, form_data, net=True)
|
||||||
|
story += self._filter_story(doc, form_data, net=True)
|
||||||
story += self._table_story(doc, form_data, net=True)
|
story += self._table_story(doc, form_data, net=True)
|
||||||
return story
|
return story
|
||||||
|
|
||||||
def _table_story(self, doc, form_data, net=False):
|
def _header_story(self, doc, form_data, net=False):
|
||||||
from reportlab.lib.units import mm
|
|
||||||
from reportlab.platypus import Paragraph, Spacer, Table, TableStyle
|
|
||||||
|
|
||||||
headlinestyle = self.get_style()
|
headlinestyle = self.get_style()
|
||||||
headlinestyle.fontSize = 15
|
headlinestyle.fontSize = 15
|
||||||
headlinestyle.fontName = 'OpenSansBd'
|
headlinestyle.fontName = 'OpenSansBd'
|
||||||
|
story = [
|
||||||
|
Paragraph(_('Orders by product') + ' ' + (_('(excl. taxes)') if net else _('(incl. taxes)')), headlinestyle),
|
||||||
|
Spacer(1, 5 * mm)
|
||||||
|
]
|
||||||
|
return story
|
||||||
|
|
||||||
|
def _filter_story(self, doc, form_data, net=False):
|
||||||
|
story = []
|
||||||
|
if form_data.get('date_axis') and (form_data.get('date_from') or form_data.get('date_until')):
|
||||||
|
story += [
|
||||||
|
Paragraph(_('{axis} between {start} and {end}').format(
|
||||||
|
axis=dict(OverviewFilterForm(event=self.event).fields['date_axis'].choices)[form_data.get('date_axis')],
|
||||||
|
start=date_format(form_data.get('date_from'), 'SHORT_DATE_FORMAT') if form_data.get('date_from') else '–',
|
||||||
|
end=date_format(form_data.get('date_until'), 'SHORT_DATE_FORMAT') if form_data.get('date_until') else '–',
|
||||||
|
), self.get_style()),
|
||||||
|
Spacer(1, 5 * mm)
|
||||||
|
]
|
||||||
|
|
||||||
|
if form_data.get('subevent'):
|
||||||
|
try:
|
||||||
|
subevent = self.event.subevents.get(pk=self.form_data.get('subevent'))
|
||||||
|
except SubEvent.DoesNotExist:
|
||||||
|
subevent = self.form_data.get('subevent')
|
||||||
|
story.append(Paragraph(pgettext('subevent', 'Date: {}').format(subevent), self.get_style()))
|
||||||
|
story.append(Spacer(1, 5 * mm))
|
||||||
|
return story
|
||||||
|
|
||||||
|
def _get_data(self, form_data):
|
||||||
|
return order_overview(
|
||||||
|
self.event,
|
||||||
|
subevent=form_data.get('subevent'),
|
||||||
|
date_filter=form_data.get('date_axis'),
|
||||||
|
date_from=form_data.get('date_from'),
|
||||||
|
date_until=form_data.get('date_until'),
|
||||||
|
fees=True
|
||||||
|
)
|
||||||
|
|
||||||
|
def _table_story(self, doc, form_data, net=False):
|
||||||
colwidths = [
|
colwidths = [
|
||||||
a * doc.width for a in (
|
a * doc.width for a in (
|
||||||
1 - (0.05 + 0.075) * 6,
|
1 - (0.05 + 0.075) * 6,
|
||||||
@@ -262,27 +300,6 @@ class OverviewReport(Report):
|
|||||||
tstyle_bold.fontName = 'OpenSansBd'
|
tstyle_bold.fontName = 'OpenSansBd'
|
||||||
tstyle_th = copy.copy(tstyle_bold)
|
tstyle_th = copy.copy(tstyle_bold)
|
||||||
tstyle_th.alignment = TA_CENTER
|
tstyle_th.alignment = TA_CENTER
|
||||||
story = [
|
|
||||||
Paragraph(_('Orders by product') + ' ' + (_('(excl. taxes)') if net else _('(incl. taxes)')), headlinestyle),
|
|
||||||
Spacer(1, 5 * mm)
|
|
||||||
]
|
|
||||||
if form_data.get('date_axis'):
|
|
||||||
story += [
|
|
||||||
Paragraph(_('{axis} between {start} and {end}').format(
|
|
||||||
axis=dict(OverviewFilterForm(event=self.event).fields['date_axis'].choices)[form_data.get('date_axis')],
|
|
||||||
start=date_format(form_data.get('date_from'), 'SHORT_DATE_FORMAT') if form_data.get('date_from') else '–',
|
|
||||||
end=date_format(form_data.get('date_until'), 'SHORT_DATE_FORMAT') if form_data.get('date_until') else '–',
|
|
||||||
), self.get_style()),
|
|
||||||
Spacer(1, 5 * mm)
|
|
||||||
]
|
|
||||||
|
|
||||||
if form_data.get('subevent'):
|
|
||||||
try:
|
|
||||||
subevent = self.event.subevents.get(pk=self.form_data.get('subevent'))
|
|
||||||
except SubEvent.DoesNotExist:
|
|
||||||
subevent = self.form_data.get('subevent')
|
|
||||||
story.append(Paragraph(pgettext('subevent', 'Date: {}').format(subevent), self.get_style()))
|
|
||||||
story.append(Spacer(1, 5 * mm))
|
|
||||||
tdata = [
|
tdata = [
|
||||||
[
|
[
|
||||||
_('Product'),
|
_('Product'),
|
||||||
@@ -309,14 +326,7 @@ class OverviewReport(Report):
|
|||||||
],
|
],
|
||||||
]
|
]
|
||||||
|
|
||||||
items_by_category, total = order_overview(
|
items_by_category, total = self._get_data(form_data)
|
||||||
self.event,
|
|
||||||
subevent=form_data.get('subevent'),
|
|
||||||
date_filter=form_data.get('date_axis'),
|
|
||||||
date_from=form_data.get('date_from'),
|
|
||||||
date_until=form_data.get('date_until'),
|
|
||||||
fees=True
|
|
||||||
)
|
|
||||||
places = settings.CURRENCY_PLACES.get(self.event.currency, 2)
|
places = settings.CURRENCY_PLACES.get(self.event.currency, 2)
|
||||||
states = (
|
states = (
|
||||||
('canceled', Order.STATUS_CANCELED),
|
('canceled', Order.STATUS_CANCELED),
|
||||||
@@ -360,8 +370,7 @@ class OverviewReport(Report):
|
|||||||
|
|
||||||
table = Table(tdata, colWidths=colwidths, repeatRows=3)
|
table = Table(tdata, colWidths=colwidths, repeatRows=3)
|
||||||
table.setStyle(TableStyle(tstyledata))
|
table.setStyle(TableStyle(tstyledata))
|
||||||
story.append(table)
|
return [table]
|
||||||
return story
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def export_form_fields(self) -> dict:
|
def export_form_fields(self) -> dict:
|
||||||
|
|||||||
Reference in New Issue
Block a user