mirror of
https://github.com/pretix/pretix.git
synced 2026-01-23 00:22:29 +00:00
Compare commits
15 Commits
export-ove
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4f989cbe8a | ||
|
|
23559e0711 | ||
|
|
8787f79274 | ||
|
|
a7072d3b5b | ||
|
|
ff47ee7d68 | ||
|
|
2c321f401d | ||
|
|
180b92c87f | ||
|
|
c99751b319 | ||
|
|
1f4205a9d9 | ||
|
|
9e694982cf | ||
|
|
ea5dbb05c2 | ||
|
|
e2ede76468 | ||
|
|
498f5760af | ||
|
|
3b9ae7e560 | ||
|
|
c08e3c054a |
@@ -65,7 +65,7 @@ dependencies = [
|
||||
"kombu==5.6.*",
|
||||
"libsass==0.23.*",
|
||||
"lxml",
|
||||
"markdown==3.10", # 3.3.5 requires importlib-metadata>=4.4, but django-bootstrap3 requires importlib-metadata<3.
|
||||
"markdown==3.10.1", # 3.3.5 requires importlib-metadata>=4.4, but django-bootstrap3 requires importlib-metadata<3.
|
||||
# We can upgrade markdown again once django-bootstrap3 upgrades or once we drop Python 3.6 and 3.7
|
||||
"mt-940==4.30.*",
|
||||
"oauthlib==3.3.*",
|
||||
@@ -80,7 +80,7 @@ dependencies = [
|
||||
"protobuf==6.33.*",
|
||||
"psycopg2-binary",
|
||||
"pycountry",
|
||||
"pycparser==2.23",
|
||||
"pycparser==3.0",
|
||||
"pycryptodome==3.23.*",
|
||||
"pypdf==6.5.*",
|
||||
"python-bidi==0.6.*", # Support for Arabic in reportlab
|
||||
@@ -92,7 +92,7 @@ dependencies = [
|
||||
"redis==7.1.*",
|
||||
"reportlab==4.4.*",
|
||||
"requests==2.32.*",
|
||||
"sentry-sdk==2.49.*",
|
||||
"sentry-sdk==2.50.*",
|
||||
"sepaxml==2.7.*",
|
||||
"stripe==7.9.*",
|
||||
"text-unidecode==1.*",
|
||||
|
||||
@@ -617,6 +617,7 @@ class OrderListExporter(MultiSheetListExporter):
|
||||
_('Country'),
|
||||
pgettext('address', 'State'),
|
||||
_('Voucher'),
|
||||
_('Voucher budget usage'),
|
||||
_('Pseudonymization ID'),
|
||||
_('Ticket secret'),
|
||||
_('Seat ID'),
|
||||
@@ -734,6 +735,7 @@ class OrderListExporter(MultiSheetListExporter):
|
||||
op.country if op.country else '',
|
||||
op.state_for_address or '',
|
||||
op.voucher.code if op.voucher else '',
|
||||
op.voucher_budget_use if op.voucher_budget_use else '',
|
||||
op.pseudonymization_id,
|
||||
op.secret,
|
||||
]
|
||||
|
||||
@@ -112,8 +112,7 @@ def dictsum(*dicts) -> dict:
|
||||
|
||||
def order_overview(
|
||||
event: Event, subevent: SubEvent=None, date_filter='', date_from=None, date_until=None, fees=False,
|
||||
admission_only=False, base_qs=None, base_fees_qs=None, subevent_date_from=None, subevent_date_until=None,
|
||||
skip_empty_lines=False,
|
||||
admission_only=False, base_qs=None, base_fees_qs=None, subevent_date_from=None, subevent_date_until=None
|
||||
) -> Tuple[List[Tuple[ItemCategory, List[Item]]], Dict[str, Tuple[Decimal, Decimal]]]:
|
||||
items = event.items.all().select_related(
|
||||
'category', # for re-grouping
|
||||
@@ -206,21 +205,13 @@ def order_overview(
|
||||
for l in states.keys():
|
||||
var.num[l] = num[l].get((item.id, variid), (0, 0, 0))
|
||||
var.num['total'] = num['total'].get((item.id, variid), (0, 0, 0))
|
||||
var._skip = all(v[0] == 0 for v in var.num.values())
|
||||
for l in states.keys():
|
||||
item.num[l] = tuplesum(var.num[l] for var in item.all_variations)
|
||||
item.num['total'] = tuplesum(var.num['total'] for var in item.all_variations)
|
||||
if skip_empty_lines:
|
||||
item.all_variations = [v for v in item.all_variations if not v._skip]
|
||||
item._skip = not item.all_variations
|
||||
else:
|
||||
for l in states.keys():
|
||||
item.num[l] = num[l].get((item.id, None), (0, 0, 0))
|
||||
item.num['total'] = num['total'].get((item.id, None), (0, 0, 0))
|
||||
item._skip = all(v[0] == 0 for v in item.num.values())
|
||||
|
||||
if skip_empty_lines:
|
||||
items = [i for i in items if not i._skip]
|
||||
|
||||
nonecat = ItemCategory(name=_('Uncategorized'))
|
||||
# Regroup those by category
|
||||
|
||||
@@ -2790,7 +2790,16 @@ class ExportView(EventPermissionRequiredMixin, ExportMixin, ListView):
|
||||
@transaction.atomic()
|
||||
def post(self, request, *args, **kwargs):
|
||||
if request.POST.get("schedule") == "save":
|
||||
if self.exporter.form.is_valid() and self.rrule_form.is_valid() and self.schedule_form.is_valid():
|
||||
if not self.has_permission():
|
||||
messages.error(
|
||||
self.request,
|
||||
_(
|
||||
"Your user account does not have sufficient permission to run this report, therefore "
|
||||
"you cannot schedule it."
|
||||
)
|
||||
)
|
||||
return super().get(request, *args, **kwargs)
|
||||
elif self.exporter.form.is_valid() and self.rrule_form.is_valid() and self.schedule_form.is_valid():
|
||||
self.schedule_form.instance.export_identifier = self.exporter.identifier
|
||||
self.schedule_form.instance.export_form_data = self.exporter.form.cleaned_data
|
||||
self.schedule_form.instance.schedule_rrule = str(self.rrule_form.to_rrule())
|
||||
@@ -2869,17 +2878,8 @@ class ExportView(EventPermissionRequiredMixin, ExportMixin, ListView):
|
||||
def get_context_data(self, **kwargs):
|
||||
ctx = super().get_context_data(**kwargs)
|
||||
if "schedule" in self.request.POST or self.scheduled:
|
||||
if "schedule" in self.request.POST and not self.has_permission():
|
||||
messages.error(
|
||||
self.request,
|
||||
_(
|
||||
"Your user account does not have sufficient permission to run this report, therefore "
|
||||
"you cannot schedule it."
|
||||
)
|
||||
)
|
||||
else:
|
||||
ctx['schedule_form'] = self.schedule_form
|
||||
ctx['rrule_form'] = self.rrule_form
|
||||
ctx['schedule_form'] = self.schedule_form
|
||||
ctx['rrule_form'] = self.rrule_form
|
||||
elif not self.exporter:
|
||||
for s in ctx['scheduled']:
|
||||
try:
|
||||
|
||||
@@ -2113,7 +2113,16 @@ class ExportView(OrganizerPermissionRequiredMixin, ExportMixin, ListView):
|
||||
@transaction.atomic()
|
||||
def post(self, request, *args, **kwargs):
|
||||
if request.POST.get("schedule") == "save":
|
||||
if self.exporter.form.is_valid() and self.rrule_form.is_valid() and self.schedule_form.is_valid():
|
||||
if not self.has_permission():
|
||||
messages.error(
|
||||
self.request,
|
||||
_(
|
||||
"Your user account does not have sufficient permission to run this report, therefore "
|
||||
"you cannot schedule it."
|
||||
)
|
||||
)
|
||||
return super().get(request, *args, **kwargs)
|
||||
elif self.exporter.form.is_valid() and self.rrule_form.is_valid() and self.schedule_form.is_valid():
|
||||
self.schedule_form.instance.export_identifier = self.exporter.identifier
|
||||
self.schedule_form.instance.export_form_data = self.exporter.form.cleaned_data
|
||||
self.schedule_form.instance.schedule_rrule = str(self.rrule_form.to_rrule())
|
||||
@@ -2200,17 +2209,8 @@ class ExportView(OrganizerPermissionRequiredMixin, ExportMixin, ListView):
|
||||
def get_context_data(self, **kwargs):
|
||||
ctx = super().get_context_data(**kwargs)
|
||||
if "schedule" in self.request.POST or self.scheduled:
|
||||
if "schedule" in self.request.POST and not self.has_permission():
|
||||
messages.error(
|
||||
self.request,
|
||||
_(
|
||||
"Your user account does not have sufficient permission to run this report, therefore "
|
||||
"you cannot schedule it."
|
||||
)
|
||||
)
|
||||
else:
|
||||
ctx['schedule_form'] = self.schedule_form
|
||||
ctx['rrule_form'] = self.rrule_form
|
||||
ctx['schedule_form'] = self.schedule_form
|
||||
ctx['rrule_form'] = self.rrule_form
|
||||
elif not self.exporter:
|
||||
for s in ctx['scheduled']:
|
||||
try:
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-01-05 12:12+0000\n"
|
||||
"PO-Revision-Date: 2026-01-11 22:00+0000\n"
|
||||
"PO-Revision-Date: 2026-01-21 21:00+0000\n"
|
||||
"Last-Translator: Jiří Pastrňák <jiri@pastrnak.email>\n"
|
||||
"Language-Team: Czech <https://translate.pretix.eu/projects/pretix/pretix/cs/>"
|
||||
"\n"
|
||||
@@ -17,7 +17,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 5.15.1\n"
|
||||
"X-Generator: Weblate 5.15.2\n"
|
||||
|
||||
#: pretix/_base_settings.py:87
|
||||
msgid "English"
|
||||
@@ -1623,7 +1623,7 @@ msgstr "Čas konce události"
|
||||
#: pretix/base/models/event.py:1536 pretix/control/forms/subevents.py:494
|
||||
#: pretix/control/templates/pretixcontrol/subevents/bulk.html:274
|
||||
msgid "Admission time"
|
||||
msgstr "Vstupní čas"
|
||||
msgstr "Vstup"
|
||||
|
||||
#: pretix/base/exporters/events.py:65 pretix/base/models/event.py:634
|
||||
#: pretix/base/models/event.py:1545 pretix/control/forms/subevents.py:93
|
||||
@@ -14592,7 +14592,7 @@ msgstr "Zaplaceno do"
|
||||
#: pretix/plugins/reports/exporters.py:396
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_order_status.html:23
|
||||
msgid "Paid"
|
||||
msgstr "Placené"
|
||||
msgstr "Zaplaceno"
|
||||
|
||||
#: pretix/control/forms/filter.py:1304
|
||||
msgctxt "subevent"
|
||||
@@ -35218,10 +35218,8 @@ msgid "Save selection"
|
||||
msgstr "Uložit volbu"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/fragment_modals.html:145
|
||||
#, fuzzy
|
||||
#| msgid "You did not select any products."
|
||||
msgid "You didn't select any ticket."
|
||||
msgstr "Nevybrali jste žádné produkty."
|
||||
msgstr "Nevybrali jste žádné vstupenky."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/fragment_modals.html:146
|
||||
msgid ""
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -7,8 +7,8 @@ msgstr ""
|
||||
"Project-Id-Version: 1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-01-05 12:13+0000\n"
|
||||
"PO-Revision-Date: 2025-06-10 04:00+0000\n"
|
||||
"Last-Translator: Tim Maurizio Dullaart <Tim.maurizio@gmail.com>\n"
|
||||
"PO-Revision-Date: 2026-01-21 21:00+0000\n"
|
||||
"Last-Translator: Ruud Hendrickx <ruud@leckxicon.eu>\n"
|
||||
"Language-Team: Dutch <https://translate.pretix.eu/projects/pretix/pretix-js/"
|
||||
"nl/>\n"
|
||||
"Language: nl\n"
|
||||
@@ -16,7 +16,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.11.4\n"
|
||||
"X-Generator: Weblate 5.15.2\n"
|
||||
|
||||
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56
|
||||
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62
|
||||
@@ -564,11 +564,11 @@ msgstr "afwezig"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:289
|
||||
msgid "Error: Product not found!"
|
||||
msgstr ""
|
||||
msgstr "Fout: product niet gevonden!"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:296
|
||||
msgid "Error: Variation not found!"
|
||||
msgstr ""
|
||||
msgstr "Fout: variant niet gevonden!"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/editor.js:171
|
||||
msgid "Check-in QR"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -8,8 +8,8 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-01-05 12:12+0000\n"
|
||||
"PO-Revision-Date: 2026-01-16 09:22+0000\n"
|
||||
"Last-Translator: Richard Schreiber <schreiber@rami.io>\n"
|
||||
"PO-Revision-Date: 2026-01-16 22:00+0000\n"
|
||||
"Last-Translator: Linnea Thelander <linnea@coeo.events>\n"
|
||||
"Language-Team: Swedish <https://translate.pretix.eu/projects/pretix/pretix/"
|
||||
"sv/>\n"
|
||||
"Language: sv\n"
|
||||
@@ -35839,9 +35839,11 @@ msgid "A payment of %(total)s is still pending for this order."
|
||||
msgstr "Tack för din bokning på %(total)s."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/order.html:97
|
||||
#, fuzzy, python-format
|
||||
#, python-format
|
||||
msgid "Please complete your payment before %(date)s"
|
||||
msgstr "Tack för din bokning!"
|
||||
msgstr ""
|
||||
"Om din betalning inte gick igenom, se till att uppdatera din "
|
||||
"betalningsinformation innan %(date)s via knappen nedan."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/order.html:108
|
||||
msgid "Re-try payment or choose another payment method"
|
||||
|
||||
@@ -337,8 +337,7 @@ class OverviewReport(Report):
|
||||
date_until=d_end,
|
||||
subevent_date_from=sd_start,
|
||||
subevent_date_until=sd_end,
|
||||
fees=True,
|
||||
skip_empty_lines=form_data.get("skip_empty_lines")
|
||||
fees=True
|
||||
)
|
||||
|
||||
def _table_story(self, doc, form_data, net=False):
|
||||
@@ -479,10 +478,6 @@ class OverviewReport(Report):
|
||||
'Use the "Accounting report" in the export section instead.'
|
||||
))
|
||||
)
|
||||
f.fields['skip_empty_lines'] = forms.BooleanField(
|
||||
label=_("Skip empty lines"),
|
||||
required=False,
|
||||
)
|
||||
return f.fields
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user