Compare commits

...

12 Commits

Author SHA1 Message Date
Phin Wolkwitz
a2dc467d0b Remove iteration over unnecessary transmission types 2025-12-18 16:56:19 +01:00
Phin Wolkwitz
dc1a115863 Hide info from invisible fields in confirmation step 2025-12-17 16:49:46 +01:00
Raphael Michel
d0d7670ca5 Data sync: Allow more flexibility on list separators (#5718) 2025-12-17 16:23:07 +01:00
Richard Schreiber
a17a098b15 Exclude data-dir from code style checks (#5725) 2025-12-17 16:22:42 +01:00
sandra r
40516ab8e0 Translations: Update Galician
Currently translated at 15.9% (983 of 6172 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/gl/

powered by weblate
2025-12-17 16:21:25 +01:00
sandra r
3ca343fabc Translations: Update Galician
Currently translated at 15.9% (982 of 6172 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/gl/

powered by weblate
2025-12-17 16:21:25 +01:00
Lachlan Struthers
7304b7f24b Translations: Update Albanian
Currently translated at 91.3% (232 of 254 strings)

Translation: pretix/pretix (JavaScript parts)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/sq/

powered by weblate
2025-12-17 16:21:25 +01:00
Lachlan Struthers
abaf968103 Translations: Update Albanian
Currently translated at 1.1% (71 of 6172 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/sq/

powered by weblate
2025-12-17 16:21:25 +01:00
Lachlan Struthers
86e2f5a155 Translations: Update Albanian
Currently translated at 69.6% (177 of 254 strings)

Translation: pretix/pretix (JavaScript parts)
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix-js/sq/

powered by weblate
2025-12-17 16:21:25 +01:00
Lachlan Struthers
4c64af02c1 Translations: Update Albanian
Currently translated at 0.8% (52 of 6172 strings)

Translation: pretix/pretix
Translate-URL: https://translate.pretix.eu/projects/pretix/pretix/sq/

powered by weblate
2025-12-17 16:21:25 +01:00
Phin Wolkwitz
11df4398e1 Fix presale date display in calendar (Z#23216645) (#5710)
Fix presale date display in calendar and introduce a template tag
2025-12-17 16:18:59 +01:00
Lukas Bockstaller
2e89fc0a94 Questions: filter answers by dateFrame (Z#23216406) (#5706)
* replace manual form with QuestionFilterForm

* move form to form/item.py

* filter using a dateFrameField

* rename QuestionFilterForm to QuestionAnswerFilterForm

Co-authored-by: Richard Schreiber <schreiber@pretix.eu>

* pass existing `opqs` into `filter_qs`

Co-authored-by: Richard Schreiber <schreiber@pretix.eu>

* clean up filters

* fix view errors

* add labels

* display validation failures on field/label

* fix linting issues

* adjust datetime comparisons from lte to lt & gte to gt

* Change filter-form layout similar to order-filter-form

* improve label texts

Co-authored-by: Richard Schreiber <schreiber@pretix.eu>

* use order constants

Co-authored-by: Richard Schreiber <schreiber@pretix.eu>

* use Order Constants in Form where possible

* Change phrasing from Subevent to Date

Co-authored-by: Richard Schreiber <schreiber@pretix.eu>

* include product variations in products filter

* repair time zone comparisons

* fix linting

* move filter form to form/filter.py

* remove references to timezone.utc

Co-authored-by: Richard Schreiber <schreiber@pretix.eu>

* remove manual class statements

Co-authored-by: Richard Schreiber <schreiber@pretix.eu>

* removes unnecessary check

Co-authored-by: Richard Schreiber <schreiber@pretix.eu>

* fix datetime comparison

* Add full stop to error message to match style

* unify var-names and code-indent

---------

Co-authored-by: Richard Schreiber <schreiber@pretix.eu>
Co-authored-by: Richard Schreiber <schreiber@rami.io>
2025-12-15 12:46:06 +01:00
19 changed files with 513 additions and 327 deletions

View File

@@ -90,6 +90,7 @@ StaticMapping = namedtuple('StaticMapping', ('id', 'pretix_model', 'external_obj
class OutboundSyncProvider:
max_attempts = 5
list_field_joiner = "," # set to None to keep native lists in properties
def __init__(self, event):
self.event = event
@@ -281,7 +282,8 @@ class OutboundSyncProvider:
'Please update value mapping for field "{field_name}" - option "{val}" not assigned'
).format(field_name=key, val=val)])
val = ",".join(val)
if self.list_field_joiner:
val = self.list_field_joiner.join(val)
return val
def get_properties(self, inputs: dict, property_mappings: List[dict]):

View File

@@ -71,15 +71,20 @@ def assign_properties(
return out
def _add_to_list(out, field_name, current_value, new_item, list_sep):
new_item = str(new_item)
def _add_to_list(out, field_name, current_value, new_item_input, list_sep):
if list_sep is not None:
new_item = new_item.replace(list_sep, "")
new_items = str(new_item_input).split(list_sep)
current_value = current_value.split(list_sep) if current_value else []
elif not isinstance(current_value, (list, tuple)):
current_value = [str(current_value)]
if new_item not in current_value:
new_list = current_value + [new_item]
else:
new_items = [str(new_item_input)]
if not isinstance(current_value, (list, tuple)):
current_value = [str(current_value)]
new_list = list(current_value)
for new_item in new_items:
if new_item not in current_value:
new_list.append(new_item)
if new_list != current_value:
if list_sep is not None:
new_list = list_sep.join(new_list)
out[field_name] = new_list

View File

@@ -0,0 +1,65 @@
#
# This file is part of pretix (Community Edition).
#
# Copyright (C) 2014-2020 Raphael Michel and contributors
# Copyright (C) 2020-today pretix GmbH and contributors
#
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General
# Public License as published by the Free Software Foundation in version 3 of the License.
#
# ADDITIONAL TERMS APPLY: Pursuant to Section 7 of the GNU Affero General Public License, additional terms are
# applicable granting you additional permissions and placing additional restrictions on your usage of this software.
# Please refer to the pretix LICENSE file to obtain the full terms applicable to this work. If you did not receive
# this file, see <https://pretix.eu/about/en/license>.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
# details.
#
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
# <https://www.gnu.org/licenses/>.
#
from datetime import datetime
from django import template
from django.utils.html import format_html
from django.utils.timezone import get_current_timezone
from pretix.base.i18n import LazyExpiresDate
from pretix.helpers.templatetags.date_fast import date_fast
register = template.Library()
@register.simple_tag
def html_time(value: datetime, dt_format: str = "SHORT_DATE_FORMAT", **kwargs):
"""
Building a <time datetime='{html-datetime}'>{human-readable datetime}</time> html string,
where the html-datetime as well as the human-readable datetime can be set
to a value from django's FORMAT_SETTINGS or "format_expires".
If attr_fmt isnt provided, it will be set to isoformat.
Usage example:
{% html_time event_start "SHORT_DATETIME_FORMAT" %}
or
{% html_time event_start "TIME_FORMAT" attr_fmt="H:i" %}
"""
if value in (None, ''):
return ''
value = value.astimezone(get_current_timezone())
attr_fmt = kwargs["attr_fmt"] if kwargs else None
try:
if not attr_fmt:
date_html = value.isoformat()
else:
date_html = date_fast(value, attr_fmt)
if dt_format == "format_expires":
date_human = LazyExpiresDate(value)
else:
date_human = date_fast(value, dt_format)
return format_html("<time datetime='{}'>{}</time>", date_html, date_human)
except AttributeError:
return ''

View File

@@ -61,6 +61,10 @@ from pretix.base.models import (
SubEvent, SubEventMetaValue, Team, TeamAPIToken, TeamInvite, Voucher,
)
from pretix.base.signals import register_payment_providers
from pretix.base.timeframes import (
DateFrameField,
resolve_timeframe_to_datetime_start_inclusive_end_exclusive,
)
from pretix.control.forms import SplitDateTimeField
from pretix.control.forms.widgets import Select2, Select2ItemVarQuota
from pretix.control.signals import order_search_filter_q
@@ -1219,6 +1223,129 @@ class OrderPaymentSearchFilterForm(forms.Form):
return qs
class QuestionAnswerFilterForm(forms.Form):
STATUS_VARIANTS = [
("", _("All orders")),
(Order.STATUS_PAID, _("Paid")),
(Order.STATUS_PAID + 'v', _("Paid or confirmed")),
(Order.STATUS_PENDING, _("Pending")),
(Order.STATUS_PENDING + Order.STATUS_PAID, _("Pending or paid")),
("o", _("Pending (overdue)")),
(Order.STATUS_EXPIRED, _("Expired")),
(Order.STATUS_PENDING + Order.STATUS_EXPIRED, _("Pending or expired")),
(Order.STATUS_CANCELED, _("Canceled"))
]
status = forms.ChoiceField(
choices=STATUS_VARIANTS,
required=False,
label=_("Order status"),
)
item = forms.ChoiceField(
choices=[],
required=False,
label=_("Products"),
)
subevent = forms.ModelChoiceField(
queryset=SubEvent.objects.none(),
required=False,
empty_label=pgettext_lazy('subevent', 'All dates'),
label=pgettext_lazy("subevent", "Date"),
)
date_range = DateFrameField(
required=False,
include_future_frames=True,
label=_('Event date'),
)
def __init__(self, *args, **kwargs):
self.event = kwargs.pop('event')
super().__init__(*args, **kwargs)
self.initial['status'] = Order.STATUS_PENDING + Order.STATUS_PAID
choices = [('', _('All products'))]
for i in self.event.items.prefetch_related('variations').all():
variations = list(i.variations.all())
if variations:
choices.append((str(i.pk), _('{product} Any variation').format(product=str(i))))
for v in variations:
choices.append(('%d-%d' % (i.pk, v.pk), '%s %s' % (str(i), v.value)))
else:
choices.append((str(i.pk), str(i)))
self.fields['item'].choices = choices
if self.event.has_subevents:
self.fields["subevent"].queryset = self.event.subevents.all()
self.fields['subevent'].widget = Select2(
attrs={
'data-model-select2': 'event',
'data-select2-url': reverse('control:event.subevents.select2', kwargs={
'event': self.event.slug,
'organizer': self.event.organizer.slug,
}),
'data-placeholder': pgettext_lazy('subevent', 'All dates')
}
)
self.fields['subevent'].widget.choices = self.fields['subevent'].choices
else:
del self.fields['subevent']
def clean(self):
cleaned_data = super().clean()
subevent = cleaned_data.get('subevent')
date_range = cleaned_data.get('date_range')
if subevent is not None and date_range is not None:
d_start, d_end = resolve_timeframe_to_datetime_start_inclusive_end_exclusive(now(), date_range, self.event.timezone)
if (
(d_start and not (d_start <= subevent.date_from)) or
(d_end and not (subevent.date_from < d_end))
):
self.add_error('subevent', pgettext_lazy('subevent', "Date doesn't start in selected date range."))
return cleaned_data
def filter_qs(self, opqs):
fdata = self.cleaned_data
subevent = fdata.get('subevent', None)
date_range = fdata.get('date_range', None)
if subevent is not None:
opqs = opqs.filter(subevent=subevent)
if date_range is not None:
d_start, d_end = resolve_timeframe_to_datetime_start_inclusive_end_exclusive(now(), date_range, self.event.timezone)
opqs = opqs.filter(
subevent__date_from__gte=d_start,
subevent__date_from__lt=d_end
)
s = fdata.get("status", Order.STATUS_PENDING + Order.STATUS_PAID)
if s != "":
if s == Order.STATUS_PENDING:
opqs = opqs.filter(order__status=Order.STATUS_PENDING,
order__expires__lt=now().replace(hour=0, minute=0, second=0))
elif s == Order.STATUS_PENDING + Order.STATUS_PAID:
opqs = opqs.filter(order__status__in=[Order.STATUS_PENDING, Order.STATUS_PAID])
elif s == Order.STATUS_PAID + 'v':
opqs = opqs.filter(
Q(order__status=Order.STATUS_PAID) |
Q(order__status=Order.STATUS_PENDING, order__valid_if_pending=True)
)
elif s == Order.STATUS_PENDING + Order.STATUS_EXPIRED:
opqs = opqs.filter(order__status__in=[Order.STATUS_PENDING, Order.STATUS_EXPIRED])
else:
opqs = opqs.filter(order__status=s)
if s not in (Order.STATUS_CANCELED, ""):
opqs = opqs.filter(canceled=False)
if fdata.get("item", "") != "":
i = fdata.get("item", "")
opqs = opqs.filter(item_id__in=(i,))
return opqs
class SubEventFilterForm(FilterForm):
orders = {
'date_from': 'date_from',

View File

@@ -20,35 +20,20 @@
</div>
<form class="panel-body filter-form" action="" method="get">
<div class="row">
<div class="col-lg-2 col-sm-6 col-xs-6">
<select name="status" class="form-control">
<option value="" {% if request.GET.status == "" %}selected="selected"{% endif %}>{% trans "All orders" %}</option>
<option value="p" {% if request.GET.status == "p" %}selected="selected"{% endif %}>{% trans "Paid" %}</option>
<option value="pv" {% if request.GET.status == "pv" %}selected="selected"{% endif %}>{% trans "Paid or confirmed" %}</option>
<option value="n" {% if request.GET.status == "n" %}selected="selected"{% endif %}>{% trans "Pending" %}</option>
<option value="np" {% if request.GET.status == "np" or "status" not in request.GET %}selected="selected"{% endif %}>{% trans "Pending or paid" %}</option>
<option value="o" {% if request.GET.status == "o" %}selected="selected"{% endif %}>{% trans "Pending (overdue)" %}</option>
<option value="e" {% if request.GET.status == "e" %}selected="selected"{% endif %}>{% trans "Expired" %}</option>
<option value="ne" {% if request.GET.status == "ne" %}selected="selected"{% endif %}>{% trans "Pending or expired" %}</option>
<option value="c" {% if request.GET.status == "c" %}selected="selected"{% endif %}>{% trans "Canceled" %}</option>
</select>
<div class="col-md-2 col-xs-6">
{% bootstrap_field form.status %}
</div>
<div class="col-md-3 col-xs-6">
{% bootstrap_field form.item %}
</div>
{% if has_subevents %}
<div class="col-md-3 col-xs-6">
{% bootstrap_field form.subevent %}
</div>
<div class="col-lg-5 col-sm-6 col-xs-6">
<select name="item" class="form-control">
<option value="">{% trans "All products" %}</option>
{% for item in items %}
<option value="{{ item.id }}"
{% if request.GET.item|add:0 == item.id %}selected="selected"{% endif %}>
{{ item.name }}
</option>
{% endfor %}
</select>
<div class="col-md-4 col-xs-6">
{% bootstrap_field form.date_range %}
</div>
{% if request.event.has_subevents %}
<div class="col-lg-5 col-sm-6 col-xs-6">
{% include "pretixcontrol/event/fragment_subevent_choice_simple.html" %}
</div>
{% endif %}
{% endif %}
</div>
<div class="text-right">
<button class="btn btn-primary btn-lg" type="submit">

View File

@@ -65,7 +65,7 @@ from pretix.api.serializers.item import (
)
from pretix.base.forms import I18nFormSet
from pretix.base.models import (
CartPosition, Item, ItemCategory, ItemProgramTime, ItemVariation, Order,
CartPosition, Item, ItemCategory, ItemProgramTime, ItemVariation,
OrderPosition, Question, QuestionAnswer, QuestionOption, Quota,
SeatCategoryMapping, Voucher,
)
@@ -74,6 +74,7 @@ from pretix.base.models.items import ItemAddOn, ItemBundle, ItemMetaValue
from pretix.base.services.quotas import QuotaAvailability
from pretix.base.services.tickets import invalidate_cache
from pretix.base.signals import quota_availability
from pretix.control.forms.filter import QuestionAnswerFilterForm
from pretix.control.forms.item import (
CategoryForm, ItemAddOnForm, ItemAddOnsFormSet, ItemBundleForm,
ItemBundleFormSet, ItemCreateForm, ItemMetaValueForm, ItemProgramTimeForm,
@@ -660,46 +661,26 @@ class QuestionMixin:
return ctx
class QuestionView(EventPermissionRequiredMixin, QuestionMixin, ChartContainingView, DetailView):
class QuestionView(EventPermissionRequiredMixin, ChartContainingView, DetailView):
model = Question
template_name = 'pretixcontrol/items/question.html'
permission = 'can_change_items'
template_name_field = 'question'
@cached_property
def filter_form(self):
return QuestionAnswerFilterForm(event=self.request.event, data=self.request.GET)
def get_answer_statistics(self):
opqs = OrderPosition.objects.filter(
order__event=self.request.event,
)
if self.filter_form.is_valid():
opqs = self.filter_form.filter_qs(opqs)
qs = QuestionAnswer.objects.filter(
question=self.object, orderposition__isnull=False,
)
if self.request.GET.get("subevent", "") != "":
opqs = opqs.filter(subevent=self.request.GET["subevent"])
s = self.request.GET.get("status", "np")
if s != "":
if s == 'o':
opqs = opqs.filter(order__status=Order.STATUS_PENDING,
order__expires__lt=now().replace(hour=0, minute=0, second=0))
elif s == 'np':
opqs = opqs.filter(order__status__in=[Order.STATUS_PENDING, Order.STATUS_PAID])
elif s == 'pv':
opqs = opqs.filter(
Q(order__status=Order.STATUS_PAID) |
Q(order__status=Order.STATUS_PENDING, order__valid_if_pending=True)
)
elif s == 'ne':
opqs = opqs.filter(order__status__in=[Order.STATUS_PENDING, Order.STATUS_EXPIRED])
else:
opqs = opqs.filter(order__status=s)
if s not in (Order.STATUS_CANCELED, ""):
opqs = opqs.filter(canceled=False)
if self.request.GET.get("item", "") != "":
i = self.request.GET.get("item", "")
opqs = opqs.filter(item_id__in=(i,))
qs = qs.filter(orderposition__in=opqs)
op_cnt = opqs.filter(item__in=self.object.items.all()).count()
@@ -746,9 +727,11 @@ class QuestionView(EventPermissionRequiredMixin, QuestionMixin, ChartContainingV
def get_context_data(self, **kwargs):
ctx = super().get_context_data()
ctx['items'] = self.object.items.all()
ctx['items'] = self.object.items.exists()
ctx['has_subevents'] = self.request.event.has_subevents
stats = self.get_answer_statistics()
ctx['stats'], ctx['total'] = stats
ctx['form'] = self.filter_form
return ctx
def get_object(self, queryset=None) -> Question:

View File

@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-11-27 13:57+0000\n"
"PO-Revision-Date: 2025-12-05 18:00+0000\n"
"PO-Revision-Date: 2025-12-15 20:00+0000\n"
"Last-Translator: sandra r <sandrarial@gestiontickets.online>\n"
"Language-Team: Galician <https://translate.pretix.eu/projects/pretix/pretix/"
"gl/>\n"
@@ -6506,7 +6506,6 @@ msgstr "pendiente"
#: pretix/base/models/orders.py:203 pretix/base/payment.py:570
#: pretix/base/services/invoices.py:581
#, fuzzy
msgid "paid"
msgstr "pagado"
@@ -6840,9 +6839,8 @@ msgid "This reference will be printed on your invoice for your convenience."
msgstr "Esta referencia imprimirase na súa factura para a súa conveniencia."
#: pretix/base/models/orders.py:3534
#, fuzzy
msgid "Transmission type"
msgstr "digo de transacción"
msgstr "Medio de contacto"
#: pretix/base/models/orders.py:3632
#: pretix/plugins/badges/templates/pretixplugins/badges/control_order_position_buttons.html:9
@@ -9295,10 +9293,10 @@ msgid "Your exported data exceeded the size limit for scheduled exports."
msgstr ""
#: pretix/base/services/invoices.py:116
#, fuzzy, python-brace-format
#, python-brace-format
msgctxt "invoice"
msgid "Please complete your payment before {expire_date}."
msgstr "Por favor complete su pago antes de {expire_date}."
msgstr "Complete o seu pago antes de {expire_date}."
#: pretix/base/services/invoices.py:128
#, python-brace-format
@@ -21609,9 +21607,8 @@ msgid "Placed order"
msgstr "Pedido realizado"
#: pretix/control/templates/pretixcontrol/event/mail.html:93
#, fuzzy
msgid "Paid order"
msgstr "Orden de pago"
msgstr "Pedido pagado"
#: pretix/control/templates/pretixcontrol/event/mail.html:96
msgid "Free order"
@@ -24216,9 +24213,8 @@ msgstr "Sí, aprobar la orden"
#: pretix/control/templates/pretixcontrol/order/index.html:166
#: pretix/presale/templates/pretixpresale/event/order.html:483
#: pretix/presale/templates/pretixpresale/event/order_cancel.html:7
#, fuzzy
msgid "Cancel order"
msgstr "Cancelar orden"
msgstr "Cancelar a orde"
#: pretix/control/templates/pretixcontrol/order/cancel.html:12
#: pretix/control/templates/pretixcontrol/order/deny.html:11
@@ -24978,9 +24974,8 @@ msgstr "Cambiar"
#: pretix/control/templates/pretixcontrol/order/index.html:1034
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:90
#: pretix/presale/templates/pretixpresale/event/order.html:318
#, fuzzy
msgid "ZIP code and city"
msgstr "Código postal y ciudad"
msgstr "Código postal e cidade"
#: pretix/control/templates/pretixcontrol/order/index.html:1047
#, fuzzy
@@ -25437,9 +25432,8 @@ msgid "Preview refund amount"
msgstr "Reembolso"
#: pretix/control/templates/pretixcontrol/orders/cancel.html:88
#, fuzzy
msgid "Cancel all orders"
msgstr "Cancelar orden"
msgstr "Cancelar todos os pedidos"
#: pretix/control/templates/pretixcontrol/orders/cancel_confirm.html:13
#, fuzzy
@@ -33254,9 +33248,8 @@ msgid "Payment reversed."
msgstr "Pago anulado."
#: pretix/plugins/paypal2/signals.py:62
#, fuzzy
msgid "Payment pending."
msgstr "Pago pendiente."
msgstr "Pago pendente."
#: pretix/plugins/paypal2/signals.py:63
#, fuzzy
@@ -33398,9 +33391,8 @@ msgstr "Por favor, inténtalo de nuevo."
#: pretix/plugins/paypal2/templates/pretixplugins/paypal2/pay.html:29
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html:57
#, fuzzy
msgid "Please select how you want to pay."
msgstr "Por favor, seleccione cómo desea pagar."
msgstr "Por favor, seleccione cómo desexa pagar."
#: pretix/plugins/paypal2/templates/pretixplugins/paypal2/pending.html:10
#, fuzzy
@@ -34550,7 +34542,7 @@ msgstr ""
#: pretix/plugins/stripe/payment.py:337
msgid "Credit card payments"
msgstr "Pagos con cartón de crédito"
msgstr "Pagos con tarxeta de crédito"
#: pretix/plugins/stripe/payment.py:342 pretix/plugins/stripe/payment.py:1527
msgid "iDEAL"
@@ -35103,18 +35095,12 @@ msgstr "Titular de la cuenta"
#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple.html:7
#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple_messaging_noform.html:13
#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_simple_noform.html:5
#, fuzzy
#| msgid ""
#| "After you submitted your order, we will redirect you to the payment "
#| "service provider to complete your payment. You will then be redirected "
#| "back here to get your tickets."
msgid ""
"After you submitted your order, we will redirect you to the payment service "
"provider to complete your payment. You will then be redirected back here."
msgstr ""
"Despois de que enviase o seu pedido, redirixirémoslle ao provedor de "
"servizos de pago para completar o seu pago. A continuación, redirixiráselle "
"de novo aquí para obter as súas entradas."
"Despois de enviar o teu pedido, redirixirémoste ao provedor de servizos de "
"pagamento para completar o pago. Despois, serás redirixido de novo aquí."
#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_card.html:9
msgid ""
@@ -35490,9 +35476,8 @@ msgid "Download tickets (PDF)"
msgstr "Descargar tickets (PDF)"
#: pretix/plugins/ticketoutputpdf/ticketoutput.py:66
#, fuzzy
msgid "Download ticket (PDF)"
msgstr "Descargar ticket"
msgstr "Descargar ticket (PDF)"
#: pretix/plugins/ticketoutputpdf/views.py:62
#, fuzzy
@@ -35631,7 +35616,6 @@ msgstr ""
"selecciona un método de pago."
#: pretix/presale/checkoutflow.py:1393 pretix/presale/views/order.py:679
#, fuzzy
msgid "Please select a payment method."
msgstr "Por favor seleccione un método de pago."
@@ -36092,9 +36076,8 @@ msgid "Cart expired"
msgstr "O carro da compra caducou"
#: pretix/presale/templates/pretixpresale/event/checkout_base.html:36
#, fuzzy
msgid "Show full cart"
msgstr "Mostrar información"
msgstr "Mostrar o carro completo"
#: pretix/presale/templates/pretixpresale/event/checkout_base.html:52
#: pretix/presale/templates/pretixpresale/event/index.html:86
@@ -36186,9 +36169,8 @@ msgstr ""
"un enlace que puede utilizar para pagar."
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:215
#, fuzzy
msgid "Place binding order"
msgstr "Colocar orden de compra"
msgstr "Realizar orde"
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:217
msgid "Submit registration"
@@ -36787,9 +36769,9 @@ msgstr[0] "Unha entrada"
msgstr[1] "%(num)s entradas"
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:485
#, fuzzy, python-format
#, python-format
msgid "incl. %(tax_sum)s taxes"
msgstr "incl. %(tax_sum)s impuestos"
msgstr "incl. %(tax_sum)s IVE"
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:505
#, python-format
@@ -37112,9 +37094,8 @@ msgid "Confirmed"
msgstr "Confirmado"
#: pretix/presale/templates/pretixpresale/event/fragment_order_status.html:15
#, fuzzy
msgid "Payment pending"
msgstr "Pago pendiente"
msgstr "Pago pendente"
#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:21
#, fuzzy
@@ -37138,11 +37119,11 @@ msgstr ""
#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:131
#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:288
#, fuzzy, python-format
#, python-format
msgid "%(amount)s× in your cart"
msgid_plural "%(amount)s× in your cart"
msgstr[0] "%(count)s elementos"
msgstr[1] "%(count)s elementos"
msgstr[0] "%(amount)s× no teu carro"
msgstr[1] "%(amount)s× no teu carro"
#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:209
#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:374
@@ -37373,9 +37354,9 @@ msgstr "O seu pedido foi procesado con éxito! Ver abaixo para máis detalles."
#: pretix/presale/templates/pretixpresale/event/order.html:19
#: pretix/presale/templates/pretixpresale/event/order.html:50
#, fuzzy
msgid "We successfully received your payment. See below for details."
msgstr "Hemos recibido con éxito su pago. Ver abajo para más detalles."
msgstr ""
"Recibimos o teu pagamento correctamente. Consulta os detalles a continuación."
#: pretix/presale/templates/pretixpresale/event/order.html:35
#, fuzzy
@@ -37396,24 +37377,18 @@ msgstr ""
"organizador del evento antes de que pueda pagar y completar este pedido."
#: pretix/presale/templates/pretixpresale/event/order.html:43
#, fuzzy
msgid "Please note that we still await your payment to complete the process."
msgstr "Tenga en cuenta que aún esperamos su pago para completar el proceso."
msgstr "Ten en conta que aínda agardamos o teu pago para completar o proceso."
#: pretix/presale/templates/pretixpresale/event/order.html:55
#, fuzzy
#| msgid ""
#| "Please bookmark or save the link to this exact page if you want to access "
#| "your order later. We also sent you an email containing the link to the "
#| "address you specified."
msgid ""
"Please bookmark or save the link to this exact page if you want to access "
"your order later. We also sent you an email to the address you specified "
"containing the link to this page."
msgstr ""
"Por favor, marque ou garde a ligazón a esta páxina exacta se desexa acceder "
"ao seu pedido máis tarde. Tamén lle enviamos un correo electrónico coa "
"ligazón ao enderezo que vostede especificou."
"Por favor, garda a ligazón a esta páxina exacta se queres acceder ao teu "
"pedido máis tarde. Tamén che enviamos un correo electrónico ao enderezo que "
"especificaches coa ligazón a esta páxina."
#: pretix/presale/templates/pretixpresale/event/order.html:59
#, fuzzy
@@ -37435,9 +37410,9 @@ msgid "View in backend"
msgstr "Ver en el backend"
#: pretix/presale/templates/pretixpresale/event/order.html:91
#, fuzzy, python-format
#, python-format
msgid "A payment of %(total)s is still pending for this order."
msgstr "Un pago de %(total)s todavía está pendiente para esta orden."
msgstr "Un pago de %(total)s aínda está pendente para esta orde."
#: pretix/presale/templates/pretixpresale/event/order.html:96
#, fuzzy, python-format
@@ -37546,10 +37521,9 @@ msgid "Change your order"
msgstr "Cancelar orden"
#: pretix/presale/templates/pretixpresale/event/order.html:358
#, fuzzy
msgctxt "action"
msgid "Cancel your order"
msgstr "Cancelar orden"
msgstr "Cancela o teu pedido"
#: pretix/presale/templates/pretixpresale/event/order.html:366
msgid ""
@@ -37665,9 +37639,9 @@ msgid "Request cancellation: %(code)s"
msgstr "Pedido cancelado: %(code)s"
#: pretix/presale/templates/pretixpresale/event/order_cancel.html:15
#, fuzzy, python-format
#, python-format
msgid "Cancel order: %(code)s"
msgstr "Cancelar orden: %(code)s"
msgstr "Cancelar orde: %(code)s"
#: pretix/presale/templates/pretixpresale/event/order_cancel.html:38
msgid ""
@@ -37753,14 +37727,12 @@ msgid "Modify order: %(code)s"
msgstr "Modificar pedido: %(code)s"
#: pretix/presale/templates/pretixpresale/event/order_modify.html:18
#, fuzzy
msgid ""
"Modifying your invoice address will not automatically generate a new "
"invoice. Please contact us if you need a new invoice."
msgstr ""
"La modificación de la dirección de facturación no generará automáticamente "
"una nueva factura. Póngase en contacto con nosotros si necesita una nueva "
"factura."
"A modificación do enderezo de facturación non xerará automaticamente unha "
"nova factura. Póñase en contacto connosco se precisa unha nova factura."
#: pretix/presale/templates/pretixpresale/event/order_modify.html:88
#: pretix/presale/templates/pretixpresale/event/position_modify.html:49
@@ -38609,10 +38581,8 @@ msgid "Your cart is now empty."
msgstr "Baleirouse o seu pedido."
#: pretix/presale/views/cart.py:569
#, fuzzy
#| msgid "Your cart has been updated."
msgid "Your cart timeout was extended."
msgstr "O seu pedido actualizouse."
msgstr "Ampliouse o tempo de espera do teu carro."
#: pretix/presale/views/cart.py:584
msgid "The products have been successfully added to your cart."

View File

@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-11-27 13:57+0000\n"
"PO-Revision-Date: 2025-12-09 22:00+0000\n"
"PO-Revision-Date: 2025-12-14 00:00+0000\n"
"Last-Translator: Lachlan Struthers <lachlan.struthers@om.org>\n"
"Language-Team: Albanian <https://translate.pretix.eu/projects/pretix/pretix/"
"sq/>\n"
@@ -25,19 +25,19 @@ msgstr "Anglisht"
#: pretix/_base_settings.py:88
msgid "German"
msgstr ""
msgstr "Gjermanisht"
#: pretix/_base_settings.py:89
msgid "German (informal)"
msgstr ""
msgstr "Gjermanisht (joformale)"
#: pretix/_base_settings.py:90
msgid "Arabic"
msgstr ""
msgstr "Arabisht"
#: pretix/_base_settings.py:91
msgid "Basque"
msgstr ""
msgstr "Baskisht"
#: pretix/_base_settings.py:92
msgid "Catalan"
@@ -2954,7 +2954,7 @@ msgstr ""
#: pretix/plugins/reports/accountingreport.py:105
#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_list.html:67
msgid "All"
msgstr ""
msgstr "Të gjitha"
#: pretix/base/exporters/orderlist.py:1329 pretix/control/forms/filter.py:1450
msgid "Live"
@@ -7434,7 +7434,7 @@ msgstr ""
#: pretix/base/pdf.py:278 pretix/base/pdf.py:307
#: pretix/base/services/checkin.py:362 pretix/control/forms/filter.py:1271
msgid "Friday"
msgstr ""
msgstr "E Premte"
#: pretix/base/pdf.py:282
msgid "Event end date and time"
@@ -8132,27 +8132,27 @@ msgstr ""
#: pretix/base/services/checkin.py:358 pretix/control/forms/filter.py:1267
msgid "Monday"
msgstr ""
msgstr "E Hënë"
#: pretix/base/services/checkin.py:359 pretix/control/forms/filter.py:1268
msgid "Tuesday"
msgstr ""
msgstr "E Martë"
#: pretix/base/services/checkin.py:360 pretix/control/forms/filter.py:1269
msgid "Wednesday"
msgstr ""
msgstr "E Mërkurë"
#: pretix/base/services/checkin.py:361 pretix/control/forms/filter.py:1270
msgid "Thursday"
msgstr ""
msgstr "E Enjte"
#: pretix/base/services/checkin.py:363 pretix/control/forms/filter.py:1272
msgid "Saturday"
msgstr ""
msgstr "E Shtunë"
#: pretix/base/services/checkin.py:364 pretix/control/forms/filter.py:1273
msgid "Sunday"
msgstr ""
msgstr "E Diel"
#: pretix/base/services/checkin.py:368
#, python-brace-format
@@ -13044,7 +13044,7 @@ msgstr ""
#: pretix/control/forms/filter.py:2052 pretix/control/forms/filter.py:2054
#: pretix/control/forms/filter.py:2620 pretix/control/forms/filter.py:2622
msgid "Search query"
msgstr ""
msgstr "Kërkim"
#: pretix/control/forms/filter.py:1528 pretix/control/forms/filter.py:1600
#: pretix/control/templates/pretixcontrol/organizers/customer.html:47
@@ -18274,7 +18274,7 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/device_logs.html:50
#: pretix/control/templates/pretixcontrol/organizers/logs.html:80
msgid "No results"
msgstr ""
msgstr "S'ka rezultate"
#: pretix/control/templates/pretixcontrol/event/mail.html:7
#: pretix/control/templates/pretixcontrol/organizers/mail.html:11
@@ -19326,51 +19326,51 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/global_sysreport.html:16
msgid "January"
msgstr ""
msgstr "Janar"
#: pretix/control/templates/pretixcontrol/global_sysreport.html:17
msgid "February"
msgstr ""
msgstr "Shkurt"
#: pretix/control/templates/pretixcontrol/global_sysreport.html:18
msgid "March"
msgstr ""
msgstr "Mars"
#: pretix/control/templates/pretixcontrol/global_sysreport.html:19
msgid "April"
msgstr ""
msgstr "Prill"
#: pretix/control/templates/pretixcontrol/global_sysreport.html:20
msgid "May"
msgstr ""
msgstr "Maj"
#: pretix/control/templates/pretixcontrol/global_sysreport.html:21
msgid "June"
msgstr ""
msgstr "Qershor"
#: pretix/control/templates/pretixcontrol/global_sysreport.html:22
msgid "July"
msgstr ""
msgstr "Korrik"
#: pretix/control/templates/pretixcontrol/global_sysreport.html:23
msgid "August"
msgstr ""
msgstr "Gusht"
#: pretix/control/templates/pretixcontrol/global_sysreport.html:24
msgid "September"
msgstr ""
msgstr "Shtator"
#: pretix/control/templates/pretixcontrol/global_sysreport.html:25
msgid "October"
msgstr ""
msgstr "Tetor"
#: pretix/control/templates/pretixcontrol/global_sysreport.html:26
msgid "November"
msgstr ""
msgstr "Nëntor"
#: pretix/control/templates/pretixcontrol/global_sysreport.html:27
msgid "December"
msgstr ""
msgstr "Dhjetor"
#: pretix/control/templates/pretixcontrol/global_sysreport.html:32
msgid "Generate report"
@@ -20098,7 +20098,7 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/items/question.html:91
msgid "Count"
msgstr ""
msgstr "Sasia"
#: pretix/control/templates/pretixcontrol/items/question.html:92
#, python-format
@@ -23098,7 +23098,7 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/pdf/index.html:52
msgid "Text box"
msgstr ""
msgstr "Kutia teksti"
#: pretix/control/templates/pretixcontrol/pdf/index.html:59
msgid "QR Code"
@@ -29765,7 +29765,7 @@ msgstr ""
#: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:23
msgid "Ticket design"
msgstr ""
msgstr "Dizajni i biletës"
#: pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/edit.html:27
msgid "You can modify the design after you saved this page."
@@ -30328,7 +30328,7 @@ msgstr ""
#: pretix/presale/templates/pretixpresale/event/checkout_confirm.html:27
#: pretix/presale/templates/pretixpresale/event/fragment_cart_box.html:18
msgid "Cart expired"
msgstr ""
msgstr "Shporta juaj u skadua"
#: pretix/presale/templates/pretixpresale/event/checkout_base.html:36
msgid "Show full cart"
@@ -30936,11 +30936,13 @@ msgid ""
"The items in your cart are no longer reserved for you. You can still "
"complete your order as long as theyre available."
msgstr ""
"Sendet në shportën tuaj nuk janë të rezervuar më për ju. Ju mund t'a "
"përmbushni porosinë tuaj derisa janë ende të disponueshëm."
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:514
#: pretix/presale/templates/pretixpresale/fragment_modals.html:48
msgid "Renew reservation"
msgstr ""
msgstr "Rivendosni rezervimin"
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:526
msgid "Reservation renewed"

View File

@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-11-20 10:37+0000\n"
"PO-Revision-Date: 2025-12-09 22:00+0000\n"
"PO-Revision-Date: 2025-12-14 00:00+0000\n"
"Last-Translator: Lachlan Struthers <lachlan.struthers@om.org>\n"
"Language-Team: Albanian <https://translate.pretix.eu/projects/pretix/"
"pretix-js/sq/>\n"
@@ -597,356 +597,367 @@ msgstr "Kodi QR për check-in"
#: pretix/static/pretixcontrol/js/ui/editor.js:549
msgid "The PDF background file could not be loaded for the following reason:"
msgstr ""
msgstr "Faili bazë PDF nuk mund të shkarkohej për këto arsye:"
#: pretix/static/pretixcontrol/js/ui/editor.js:904
msgid "Group of objects"
msgstr ""
msgstr "Grupi i sendeve"
#: pretix/static/pretixcontrol/js/ui/editor.js:909
msgid "Text object (deprecated)"
msgstr ""
msgstr "Objekt teksti (i dalë nga përdorimi)"
#: pretix/static/pretixcontrol/js/ui/editor.js:911
msgid "Text box"
msgstr ""
msgstr "Kutia teksti"
#: pretix/static/pretixcontrol/js/ui/editor.js:913
msgid "Barcode area"
msgstr ""
msgstr "Zona e barkodit"
#: pretix/static/pretixcontrol/js/ui/editor.js:915
msgid "Image area"
msgstr ""
msgstr "Zona për imazhe"
#: pretix/static/pretixcontrol/js/ui/editor.js:917
msgid "Powered by pretix"
msgstr ""
msgstr "Mundësuar nga pretix"
#: pretix/static/pretixcontrol/js/ui/editor.js:919
msgid "Object"
msgstr ""
msgstr "Objekt"
#: pretix/static/pretixcontrol/js/ui/editor.js:923
msgid "Ticket design"
msgstr ""
msgstr "Dizajni i biletës"
#: pretix/static/pretixcontrol/js/ui/editor.js:1292
msgid "Saving failed."
msgstr ""
msgstr "Ruajtja nuk u krye."
#: pretix/static/pretixcontrol/js/ui/editor.js:1361
#: pretix/static/pretixcontrol/js/ui/editor.js:1412
msgid "Error while uploading your PDF file, please try again."
msgstr ""
msgstr "Pati gabim në ngarkimin e failit tuaj PDF, ju lutemi, provoni përsëri."
#: pretix/static/pretixcontrol/js/ui/editor.js:1395
msgid "Do you really want to leave the editor without saving your changes?"
msgstr ""
msgstr "A vërtetë dëshironi të dilni nga redaktori pa ruajtur ndryshimet tuaja?"
#: pretix/static/pretixcontrol/js/ui/mail.js:19
msgid "An error has occurred."
msgstr ""
msgstr "Një gabim ka ndodhur."
#: pretix/static/pretixcontrol/js/ui/mail.js:52
msgid "Generating messages …"
msgstr ""
msgstr "Duke prodhuar mesazhe …"
#: pretix/static/pretixcontrol/js/ui/main.js:69
msgid "Unknown error."
msgstr ""
msgstr "Gabim i panjohur."
#: pretix/static/pretixcontrol/js/ui/main.js:309
msgid "Your color has great contrast and will provide excellent accessibility."
msgstr ""
"Ngjyra juaj ka kontrast shumë të mirë dhe do të ofrojë aksesueshmëri të "
"shkëlqyer."
#: pretix/static/pretixcontrol/js/ui/main.js:313
msgid ""
"Your color has decent contrast and is sufficient for minimum accessibility "
"requirements."
msgstr ""
"Ngjyra juaj ka kontrast të mirë dhe përmbush kërkesat minimale të "
"aksesueshmërisë."
#: pretix/static/pretixcontrol/js/ui/main.js:317
msgid ""
"Your color has insufficient contrast to white. Accessibility of your site "
"will be impacted."
msgstr ""
"Ngjyra juaj nuk ka kontrast të mjaftueshëm me të bardhën. Kjo mund të "
"ndikojë në aksesueshmërinë e faqes suaj."
#: pretix/static/pretixcontrol/js/ui/main.js:443
#: pretix/static/pretixcontrol/js/ui/main.js:463
msgid "Search query"
msgstr ""
msgstr "Kërkim"
#: pretix/static/pretixcontrol/js/ui/main.js:461
msgid "All"
msgstr ""
msgstr "Të gjitha"
#: pretix/static/pretixcontrol/js/ui/main.js:462
msgid "None"
msgstr ""
msgstr "Asnjë"
#: pretix/static/pretixcontrol/js/ui/main.js:466
msgid "Selected only"
msgstr ""
msgstr "Vetëm të zghedhura"
#: pretix/static/pretixcontrol/js/ui/main.js:839
msgid "Enter page number between 1 and %(max)s."
msgstr ""
msgstr "Shkruani numrin e faqes midis 1 dhe %(max)s."
#: pretix/static/pretixcontrol/js/ui/main.js:842
msgid "Invalid page number."
msgstr ""
msgstr "Numër faqe i pavlefshëm."
#: pretix/static/pretixcontrol/js/ui/main.js:1000
msgid "Use a different name internally"
msgstr ""
msgstr "Përdorni një emër tjetër brenda sistemit"
#: pretix/static/pretixcontrol/js/ui/main.js:1040
msgid "Click to close"
msgstr ""
msgstr "Shtypni për të mbyllur"
#: pretix/static/pretixcontrol/js/ui/main.js:1121
msgid "You have unsaved changes!"
msgstr ""
msgstr "Ju keni ndryshime të paruajtur!"
#: pretix/static/pretixcontrol/js/ui/orderchange.js:25
msgid "Calculating default price…"
msgstr ""
msgstr "Duke e llogaritur çmimin e parazgjedhur…"
#: pretix/static/pretixcontrol/js/ui/plugins.js:69
msgid "No results"
msgstr ""
msgstr "S'ka rezultate"
#: pretix/static/pretixcontrol/js/ui/question.js:41
msgid "Others"
msgstr ""
msgstr "Të tjera"
#: pretix/static/pretixcontrol/js/ui/question.js:81
msgid "Count"
msgstr ""
msgstr "Sasia"
#: pretix/static/pretixcontrol/js/ui/subevent.js:112
msgid "(one more date)"
msgid_plural "({num} more dates)"
msgstr[0] ""
msgstr[1] ""
msgstr[0] "(edhe një datë)"
msgstr[1] "(edhe {num} më shumë data)"
#: pretix/static/pretixpresale/js/ui/cart.js:47
msgid ""
"The items in your cart are no longer reserved for you. You can still "
"complete your order as long as theyre available."
msgstr ""
"Sendet në shportën tuaj nuk janë të rezervuar më për ju. Ju mund t'a "
"përmbushni porosinë tuaj derisa janë ende të disponueshëm."
#: pretix/static/pretixpresale/js/ui/cart.js:49
msgid "Cart expired"
msgstr ""
msgstr "Shporta juaj u skadua"
#: pretix/static/pretixpresale/js/ui/cart.js:58
#: pretix/static/pretixpresale/js/ui/cart.js:84
msgid "Your cart is about to expire."
msgstr ""
msgstr "Shporta juaj do të skadohet së shpejti."
#: pretix/static/pretixpresale/js/ui/cart.js:62
msgid "The items in your cart are reserved for you for one minute."
msgid_plural "The items in your cart are reserved for you for {num} minutes."
msgstr[0] ""
msgstr[1] ""
msgstr[0] "Sendet në shportën tuaj janë të rezervuar për ju për një minutë."
msgstr[1] "Sendet në shportën tuaj janë të rezervuar për ju për {num} minuta."
#: pretix/static/pretixpresale/js/ui/cart.js:83
msgid "Your cart has expired."
msgstr ""
msgstr "Shporta juaj është skaduar."
#: pretix/static/pretixpresale/js/ui/cart.js:86
msgid ""
"The items in your cart are no longer reserved for you. You can still "
"complete your order as long as they're available."
msgstr ""
"Sendet në shportën tuaj nuk janë të rezervuar më për ju. Ju mund t'a "
"përmbushni porosinë derisa janë ende të disponueshëm."
#: pretix/static/pretixpresale/js/ui/cart.js:87
msgid "Do you want to renew the reservation period?"
msgstr ""
msgstr "A dëshironi t'a rivendosni periudhën e rezervimit?"
#: pretix/static/pretixpresale/js/ui/cart.js:90
msgid "Renew reservation"
msgstr ""
msgstr "Rivendosni rezervimin"
#: pretix/static/pretixpresale/js/ui/main.js:194
msgid "The organizer keeps %(currency)s %(amount)s"
msgstr ""
msgstr "Organizatori mban %(currency)s %(amount)s"
#: pretix/static/pretixpresale/js/ui/main.js:202
msgid "You get %(currency)s %(amount)s back"
msgstr ""
msgstr "Ju merrni %(currency)s %(amount)s kusur"
#: pretix/static/pretixpresale/js/ui/main.js:218
msgid "Please enter the amount the organizer can keep."
msgstr ""
msgstr "Ju lutemi të shkruani shumën që mund të mbajë organizatori."
#: pretix/static/pretixpresale/js/ui/main.js:577
msgid "Your local time:"
msgstr ""
msgstr "Koha juaj vendase:"
#: pretix/static/pretixpresale/js/walletdetection.js:39
#, fuzzy
msgid "Google Pay"
msgstr ""
msgstr "Google Pay"
#: pretix/static/pretixpresale/js/widget/widget.js:16
msgctxt "widget"
msgid "Quantity"
msgstr ""
msgstr "Sasi"
#: pretix/static/pretixpresale/js/widget/widget.js:17
msgctxt "widget"
msgid "Decrease quantity"
msgstr ""
msgstr "Ulni sasinë"
#: pretix/static/pretixpresale/js/widget/widget.js:18
msgctxt "widget"
msgid "Increase quantity"
msgstr ""
msgstr "Rrisni sasinë"
#: pretix/static/pretixpresale/js/widget/widget.js:19
msgctxt "widget"
msgid "Filter events by"
msgstr ""
msgstr "Filtroni ngjarjet nga"
#: pretix/static/pretixpresale/js/widget/widget.js:20
msgctxt "widget"
msgid "Filter"
msgstr ""
msgstr "Filtri"
#: pretix/static/pretixpresale/js/widget/widget.js:21
msgctxt "widget"
msgid "Price"
msgstr ""
msgstr "Çmimi"
#: pretix/static/pretixpresale/js/widget/widget.js:22
#, javascript-format
msgctxt "widget"
msgid "Original price: %s"
msgstr ""
msgstr "Çmimi origjinal:%s"
#: pretix/static/pretixpresale/js/widget/widget.js:23
#, javascript-format
msgctxt "widget"
msgid "New price: %s"
msgstr ""
msgstr "Çmimi i ri:%s"
#: pretix/static/pretixpresale/js/widget/widget.js:24
msgctxt "widget"
msgid "Select"
msgstr ""
msgstr "Zgjidhni"
#: pretix/static/pretixpresale/js/widget/widget.js:25
#, javascript-format
msgctxt "widget"
msgid "Select %s"
msgstr ""
msgstr "Zgjidhni%s"
#: pretix/static/pretixpresale/js/widget/widget.js:26
#, javascript-format
msgctxt "widget"
msgid "Select variant %s"
msgstr ""
msgstr "Zgjidhni variant %s"
#: pretix/static/pretixpresale/js/widget/widget.js:27
msgctxt "widget"
msgid "Sold out"
msgstr ""
msgstr "Shitur të gjitha"
#: pretix/static/pretixpresale/js/widget/widget.js:28
msgctxt "widget"
msgid "Buy"
msgstr ""
msgstr "Blini"
#: pretix/static/pretixpresale/js/widget/widget.js:29
msgctxt "widget"
msgid "Register"
msgstr ""
msgstr "Regjistrohuni"
#: pretix/static/pretixpresale/js/widget/widget.js:30
msgctxt "widget"
msgid "Reserved"
msgstr ""
msgstr "Të rezervuar"
#: pretix/static/pretixpresale/js/widget/widget.js:31
msgctxt "widget"
msgid "FREE"
msgstr ""
msgstr "FALAS"
#: pretix/static/pretixpresale/js/widget/widget.js:32
msgctxt "widget"
msgid "from %(currency)s %(price)s"
msgstr ""
msgstr "nga %(currency)s %(price)s"
#: pretix/static/pretixpresale/js/widget/widget.js:33
#, javascript-format
msgctxt "widget"
msgid "Image of %s"
msgstr ""
msgstr "Imazh i %s"
#: pretix/static/pretixpresale/js/widget/widget.js:34
msgctxt "widget"
msgid "incl. %(rate)s% %(taxname)s"
msgstr ""
msgstr "përfsh. %(rate)s% %(taxname)s"
#: pretix/static/pretixpresale/js/widget/widget.js:35
msgctxt "widget"
msgid "plus %(rate)s% %(taxname)s"
msgstr ""
msgstr "shtesë %(rate)s% %(taxname)s"
#: pretix/static/pretixpresale/js/widget/widget.js:36
msgctxt "widget"
msgid "incl. taxes"
msgstr ""
msgstr "përfsh. taksat"
#: pretix/static/pretixpresale/js/widget/widget.js:37
msgctxt "widget"
msgid "plus taxes"
msgstr ""
msgstr "duke shtuar taksat"
#: pretix/static/pretixpresale/js/widget/widget.js:38
#, javascript-format
msgctxt "widget"
msgid "currently available: %s"
msgstr ""
msgstr "aktualisht të disponueshëm: %s"
#: pretix/static/pretixpresale/js/widget/widget.js:39
msgctxt "widget"
msgid "Only available with a voucher"
msgstr ""
msgstr "Të disponueshëm vetëm me një kupon"
#: pretix/static/pretixpresale/js/widget/widget.js:40
#: pretix/static/pretixpresale/js/widget/widget.js:43
msgctxt "widget"
msgid "Not yet available"
msgstr ""
msgstr "Të padisponushëm ende"
#: pretix/static/pretixpresale/js/widget/widget.js:41
msgctxt "widget"
msgid "Not available anymore"
msgstr ""
msgstr "Nuk është të disponueshëm më"
#: pretix/static/pretixpresale/js/widget/widget.js:42
msgctxt "widget"
msgid "Currently not available"
msgstr ""
msgstr "Të padisponueshëm për momentin"
#: pretix/static/pretixpresale/js/widget/widget.js:44
#, javascript-format
msgctxt "widget"
msgid "minimum amount to order: %s"
msgstr ""
msgstr "sasia minimale për porosi: %s"
#: pretix/static/pretixpresale/js/widget/widget.js:45
msgctxt "widget"
msgid "Close ticket shop"
msgstr ""
msgstr "Mbyllni dyqanin e biletave"
#: pretix/static/pretixpresale/js/widget/widget.js:46
msgctxt "widget"
msgid "The ticket shop could not be loaded."
msgstr ""
msgstr "Dyqani i biletave nuk mund të hapej."
#: pretix/static/pretixpresale/js/widget/widget.js:47
msgctxt "widget"
@@ -954,21 +965,23 @@ msgid ""
"There are currently a lot of users in this ticket shop. Please open the shop "
"in a new tab to continue."
msgstr ""
"Ka shumë përdorës në dyqanin e biletave tani. Ju lutemi, hapni dyqanin në "
"një skedë të re për të vazhduar."
#: pretix/static/pretixpresale/js/widget/widget.js:49
msgctxt "widget"
msgid "Open ticket shop"
msgstr ""
msgstr "Hapni dyqanin e biletave"
#: pretix/static/pretixpresale/js/widget/widget.js:50
msgctxt "widget"
msgid "Checkout"
msgstr ""
msgstr "Pagesa"
#: pretix/static/pretixpresale/js/widget/widget.js:51
msgctxt "widget"
msgid "The cart could not be created. Please try again later"
msgstr ""
msgstr "Shporta juaj nuk mund të krijohej. Ju lutemi, provoni përsëri më vonë"
#: pretix/static/pretixpresale/js/widget/widget.js:52
msgctxt "widget"
@@ -976,11 +989,14 @@ msgid ""
"We could not create your cart, since there are currently too many users in "
"this ticket shop. Please click \"Continue\" to retry in a new tab."
msgstr ""
"Nuk mund të krijonim shportën tuaj sepse ka më tepër përdorës në këtë dyqan "
"të biletave. Ju lutemi, shtypni \"Vazhdoni\" të provoni përsëri në një skedë "
"të re."
#: pretix/static/pretixpresale/js/widget/widget.js:54
msgctxt "widget"
msgid "Waiting list"
msgstr ""
msgstr "Lista e pritjes"
#: pretix/static/pretixpresale/js/widget/widget.js:55
msgctxt "widget"
@@ -988,96 +1004,98 @@ msgid ""
"You currently have an active cart for this event. If you select more "
"products, they will be added to your existing cart."
msgstr ""
"Ju keni tashmë një shportë aktive për këtë ngjarje. Nëse zgjidhni më shumë "
"produkte, do të shtohen në shportën tuaj aktuale."
#: pretix/static/pretixpresale/js/widget/widget.js:57
msgctxt "widget"
msgid "Resume checkout"
msgstr ""
msgstr "Vazhdoni pagesën"
#: pretix/static/pretixpresale/js/widget/widget.js:58
msgctxt "widget"
msgid "Redeem a voucher"
msgstr ""
msgstr "Përdorni një kupon"
#: pretix/static/pretixpresale/js/widget/widget.js:59
msgctxt "widget"
msgid "Redeem"
msgstr ""
msgstr "Përdorni"
#: pretix/static/pretixpresale/js/widget/widget.js:60
msgctxt "widget"
msgid "Voucher code"
msgstr ""
msgstr "Kodi i kuponit"
#: pretix/static/pretixpresale/js/widget/widget.js:61
msgctxt "widget"
msgid "Close"
msgstr ""
msgstr "Mbyllni"
#: pretix/static/pretixpresale/js/widget/widget.js:62
msgctxt "widget"
msgid "Close checkout"
msgstr ""
msgstr "Kthehuni nga pagesa"
#: pretix/static/pretixpresale/js/widget/widget.js:63
msgctxt "widget"
msgid "You cannot cancel this operation. Please wait for loading to finish."
msgstr ""
msgstr "Ju nuk mund t'a anuloni këtë veprim. Ju lutemi, prisni për ngarkimin."
#: pretix/static/pretixpresale/js/widget/widget.js:64
msgctxt "widget"
msgid "Continue"
msgstr ""
msgstr "Vazhdoni"
#: pretix/static/pretixpresale/js/widget/widget.js:65
msgctxt "widget"
msgid "Show variants"
msgstr ""
msgstr "Tregoni variantet"
#: pretix/static/pretixpresale/js/widget/widget.js:66
msgctxt "widget"
msgid "Hide variants"
msgstr ""
msgstr "Fshehni variantet"
#: pretix/static/pretixpresale/js/widget/widget.js:67
msgctxt "widget"
msgid "Choose a different event"
msgstr ""
msgstr "Zgjidhni një ngjarje tjetër"
#: pretix/static/pretixpresale/js/widget/widget.js:68
msgctxt "widget"
msgid "Choose a different date"
msgstr ""
msgstr "Zgjidhni një datë tjetër"
#: pretix/static/pretixpresale/js/widget/widget.js:69
msgctxt "widget"
msgid "Back"
msgstr ""
msgstr "Kthehuni"
#: pretix/static/pretixpresale/js/widget/widget.js:70
msgctxt "widget"
msgid "Next month"
msgstr ""
msgstr "Muaji tjetër"
#: pretix/static/pretixpresale/js/widget/widget.js:71
msgctxt "widget"
msgid "Previous month"
msgstr ""
msgstr "Muaji i fundit"
#: pretix/static/pretixpresale/js/widget/widget.js:72
msgctxt "widget"
msgid "Next week"
msgstr ""
msgstr "Java tjetër"
#: pretix/static/pretixpresale/js/widget/widget.js:73
msgctxt "widget"
msgid "Previous week"
msgstr ""
msgstr "Java e fundit"
#: pretix/static/pretixpresale/js/widget/widget.js:74
msgctxt "widget"
msgid "Open seat selection"
msgstr ""
msgstr "Hapni zgjedhjen e sendileve"
#: pretix/static/pretixpresale/js/widget/widget.js:75
msgctxt "widget"
@@ -1086,112 +1104,115 @@ msgid ""
"add yourself to the waiting list. We will then notify if seats are available "
"again."
msgstr ""
"Disa ose të gjitha kategoritë e biletave janë të shitura. Nëse dëshironi, "
"mund të shtoheni në listën e pritjes. Ne do t'ju njoftojmë nëse sendile "
"bëhen të disponueshme përsëri."
#: pretix/static/pretixpresale/js/widget/widget.js:76
msgctxt "widget"
msgid "Load more"
msgstr ""
msgstr "Ngarkoni më shumë"
#: pretix/static/pretixpresale/js/widget/widget.js:78
msgid "Mo"
msgstr ""
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:79
msgid "Tu"
msgstr ""
msgstr "Ma"
#: pretix/static/pretixpresale/js/widget/widget.js:80
msgid "We"
msgstr ""
msgstr ""
#: pretix/static/pretixpresale/js/widget/widget.js:81
msgid "Th"
msgstr ""
msgstr "En"
#: pretix/static/pretixpresale/js/widget/widget.js:82
msgid "Fr"
msgstr ""
msgstr "Pr"
#: pretix/static/pretixpresale/js/widget/widget.js:83
msgid "Sa"
msgstr ""
msgstr "Sh"
#: pretix/static/pretixpresale/js/widget/widget.js:84
msgid "Su"
msgstr ""
msgstr "Di"
#: pretix/static/pretixpresale/js/widget/widget.js:85
msgid "Monday"
msgstr ""
msgstr "E Hënë"
#: pretix/static/pretixpresale/js/widget/widget.js:86
msgid "Tuesday"
msgstr ""
msgstr "E Martë"
#: pretix/static/pretixpresale/js/widget/widget.js:87
msgid "Wednesday"
msgstr ""
msgstr "E Mërkurë"
#: pretix/static/pretixpresale/js/widget/widget.js:88
msgid "Thursday"
msgstr ""
msgstr "E Enjte"
#: pretix/static/pretixpresale/js/widget/widget.js:89
msgid "Friday"
msgstr ""
msgstr "E Premte"
#: pretix/static/pretixpresale/js/widget/widget.js:90
msgid "Saturday"
msgstr ""
msgstr "E Shtunë"
#: pretix/static/pretixpresale/js/widget/widget.js:91
msgid "Sunday"
msgstr ""
msgstr "E Diel"
#: pretix/static/pretixpresale/js/widget/widget.js:94
msgid "January"
msgstr ""
msgstr "Janar"
#: pretix/static/pretixpresale/js/widget/widget.js:95
msgid "February"
msgstr ""
msgstr "Shkurt"
#: pretix/static/pretixpresale/js/widget/widget.js:96
msgid "March"
msgstr ""
msgstr "Mars"
#: pretix/static/pretixpresale/js/widget/widget.js:97
msgid "April"
msgstr ""
msgstr "Prill"
#: pretix/static/pretixpresale/js/widget/widget.js:98
msgid "May"
msgstr ""
msgstr "Maj"
#: pretix/static/pretixpresale/js/widget/widget.js:99
msgid "June"
msgstr ""
msgstr "Qershor"
#: pretix/static/pretixpresale/js/widget/widget.js:100
msgid "July"
msgstr ""
msgstr "Korrik"
#: pretix/static/pretixpresale/js/widget/widget.js:101
msgid "August"
msgstr ""
msgstr "Gusht"
#: pretix/static/pretixpresale/js/widget/widget.js:102
msgid "September"
msgstr ""
msgstr "Shtator"
#: pretix/static/pretixpresale/js/widget/widget.js:103
msgid "October"
msgstr ""
msgstr "Tetor"
#: pretix/static/pretixpresale/js/widget/widget.js:104
msgid "November"
msgstr ""
msgstr "Nëntor"
#: pretix/static/pretixpresale/js/widget/widget.js:105
msgid "December"
msgstr ""
msgstr "Dhjetor"

View File

@@ -56,6 +56,7 @@ from django.utils.translation import (
from django.views.generic.base import TemplateResponseMixin
from django_scopes import scopes_disabled
from pretix.base.invoicing.transmission import transmission_types
from pretix.base.models import Customer, Membership, Order
from pretix.base.models.items import Question
from pretix.base.models.orders import (
@@ -1506,6 +1507,20 @@ class ConfirmStep(CartMixin, AsyncAction, TemplateFlowStep):
label = pgettext_lazy('checkoutflow', 'Review order')
icon = 'eye'
def _default_invisible(self, transmission_type):
# reusing hack from questions.py for default transmission -- this should at least be fast
for k, __ in transmission_type.invoice_address_form_fields.items():
if (
transmission_type.identifier == "email" and
k in ("transmission_email_other", "transmission_email_address") and
(
self.event.settings.invoice_generate == "False" or
not self.event.settings.invoice_email_attachment
)
):
return True
return False
def is_applicable(self, request):
return True
@@ -1545,6 +1560,15 @@ class ConfirmStep(CartMixin, AsyncAction, TemplateFlowStep):
ctx['invoice_address_asked'] = self.address_asked
ctx['customer'] = self.cart_customer
transmission_fields = []
transmission_type, __ = transmission_types.get(identifier=self.invoice_address.transmission_type)
if not self._default_invisible(transmission_type) and transmission_type.invoice_address_form_fields_visible(
country=self.invoice_address.country, is_business=self.invoice_address.is_business
):
for line in self.invoice_address.describe_transmission():
transmission_fields.append(line)
ctx['transmission_fields'] = transmission_fields
self.cart_session['shown_total'] = str(ctx['cart']['total'])
email = self.cart_session.get('contact_form_data', {}).get('email')

View File

@@ -111,7 +111,7 @@
<dt>{% trans "Internal reference" %}</dt>
<dd>{{ addr.internal_reference }}</dd>
{% endif %}
{% for k, v in addr.describe_transmission %}
{% for k, v in transmission_fields %}
<dt>{{ k }}</dt>
<dd>{{ v }}</dd>
{% endfor %}

View File

@@ -1,3 +1,4 @@
{% load html_time %}
{% load i18n %}
{% load icon %}
{% load eventurl %}
@@ -21,20 +22,18 @@
{% if event.settings.show_times %}
<br>
<span data-time="{{ ev.date_from.isoformat }}" data-timezone="{{ request.event.timezone }}">
{% with time_human=ev.date_from|date:"TIME_FORMAT" time_24=ev.date_from|time:"H:i" %}
{% blocktrans trimmed with time='<time datetime="'|add:time_24|add:'">'|add:time_human|add:"</time>"|safe %}
Begin: {{ time }}
{% endblocktrans %}
{% endwith %}
{% html_time ev.date_from "TIME_FORMAT" attr_fmt="H:i" as time%}
{% blocktrans with time=time %}
Begin: {{ time }}
{% endblocktrans %}
</span>
{% if event.settings.show_date_to and ev.date_to %}
<br>
<span data-time="{{ ev.date_to.isoformat }}" data-timezone="{{ request.event.timezone }}">
{% with time_human=ev.date_to|date:"TIME_FORMAT" time_24=ev.date_to|time:"H:i" %}
{% blocktrans trimmed with time='<time datetime="'|add:time_24|add:'">'|add:time_human|add:"</time>"|safe %}
End: {{ time }}
{% endblocktrans %}
{% endwith %}
{% html_time ev.date_to "TIME_FORMAT" attr_fmt="H:i" as time%}
{% blocktrans with time=time %}
End: {{ time }}
{% endblocktrans %}
</span>
{% endif %}
{% endif %}
@@ -42,19 +41,17 @@
<br>
{% if ev.date_admission|date:"SHORT_DATE_FORMAT" == ev.date_from|date:"SHORT_DATE_FORMAT" %}
<span data-time="{{ ev.date_admission.isoformat }}" data-timezone="{{ request.event.timezone }}">
{% with time_human=ev.date_admission|date:"TIME_FORMAT" time_24=ev.date_admission|time:"H:i" %}
{% blocktrans trimmed with time='<time datetime="'|add:time_24|add:'">'|add:time_human|add:"</time>"|safe %}
Admission: {{ time }}
{% endblocktrans %}
{% endwith %}
{% html_time ev.date_admission "TIME_FORMAT" attr_fmt="H:i" as time%}
{% blocktrans trimmed with time=time %}
Admission: {{ time }}
{% endblocktrans %}
</span>
{% else %}
<span data-time="{{ ev.date_admission.isoformat }}" data-timezone="{{ request.event.timezone }}">
{% with datetime_human=ev.date_admission|date:"SHORT_DATETIME_FORMAT" datetime_iso=ev.date_admission|time:"Y-m-d H:i" %}
{% blocktrans trimmed with datetime='<time datetime="'|add:datetime_iso|add:'">'|add:datetime_human|add:"</time>"|safe %}
Admission: {{ datetime }}
{% endblocktrans %}
{% endwith %}
{% html_time ev.date_admission "SHORT_DATETIME_FORMAT" attr_fmt="Y-m-d H:i" as datetime%}
{% blocktrans trimmed with datetime=datetime %}
Admission: {{ datetime }}
{% endblocktrans %}
</span>
{% endif %}
{% endif %}

View File

@@ -1,4 +1,5 @@
{% extends "pretixpresale/event/base.html" %}
{% load html_time %}
{% load i18n %}
{% load bootstrap3 %}
{% load eventsignal %}
@@ -92,11 +93,10 @@
A payment of {{ total }} is still pending for this order.
{% endblocktrans %}</strong>
<strong>
{% with date_human=order|format_expires|safe date_iso=order.expires|date:"c" %}
{% blocktrans trimmed with date='<time datetime="'|add:date_iso|add:'">'|add:date_human|add:"</time>"|safe %}
{% html_time order.expires "format_expires" as date %}
{% blocktrans trimmed with date=date %}
Please complete your payment before {{ date }}
{% endblocktrans %}
{% endwith %}
</strong>
</p>
{% if last_payment %}

View File

@@ -1,3 +1,4 @@
{% load html_time %}
{% load i18n %}
{% load date_fast %}
{% load calendarhead %}
@@ -55,7 +56,7 @@
running
{% elif event.event.presale_has_ended %}
over
{% elif event.event.settings.presale_start_show_date and event.event.presale_start %}
{% elif event.event.settings.presale_start_show_date and event.event.effective_presale_start %}
soon
{% else %}
soon
@@ -108,13 +109,12 @@
<span class="fa fa-ticket" aria-hidden="true"></span> {% trans "Book now" %}
{% elif event.event.presale_has_ended %}
{% trans "Sale over" %}
{% elif event.event.settings.presale_start_show_date and event.event.presale_start %}
{% elif event.event.settings.presale_start_show_date and event.event.effective_presale_start %}
<span class="fa fa-ticket" aria-hidden="true"></span>
{% with date_human=event.event.presale_start|date_fast:"SHORT_DATE_FORMAT" date_iso=event.event.presale_start|date_fast:"c" %}
{% blocktrans with start_date="<time datetime='"|add:date_iso|add:"'>"|add:date_human|add:"</time>"|safe %}
{% html_time event.event.effective_presale_start "SHORT_DATE_FORMAT" as start_date %}
{% blocktrans with start_date=start_date %}
from {{ start_date }}
{% endblocktrans %}
{% endwith %}
{% else %}
<span class="fa fa-ticket" aria-hidden="true"></span> {% trans "Soon" %}
{% endif %}

View File

@@ -1,3 +1,4 @@
{% load html_time %}
{% load i18n %}
{% load eventurl %}
<div class="day-calendar cal-size-{{ raster_to_shortest_ratio }}{% if no_headlines %} no-headlines{% endif %}"
@@ -52,7 +53,7 @@
running
{% elif event.event.presale_has_ended %}
over
{% elif event.event.settings.presale_start_show_date and event.event.presale_start %}
{% elif event.event.settings.presale_start_show_date and event.event.effective_presale_start %}
soon
{% else %}
soon
@@ -114,9 +115,10 @@
<span class="fa fa-ticket" aria-hidden="true"></span> {% trans "Book now" %}
{% elif event.event.presale_has_ended %}
<span class="fa fa-ticket" aria-hidden="true"></span> {% trans "Sale over" %}
{% elif event.event.settings.presale_start_show_date and event.event.presale_start %}
{% elif event.event.settings.presale_start_show_date and event.event.effective_presale_start %}
<span class="fa fa-ticket" aria-hidden="true"></span>
{% blocktrans with start_date=event.event.presale_start|date:"SHORT_DATE_FORMAT" %}
{% html_time event.event.effective_presale_start "SHORT_DATE_FORMAT" as start_date %}
{% blocktrans with start_date=start_date %}
from {{ start_date }}
{% endblocktrans %}
{% else %}

View File

@@ -1,3 +1,4 @@
{% load html_time %}
{% load i18n %}
{% load icon %}
{% load textbubble %}
@@ -52,11 +53,10 @@
{% endtextbubble %}
{% if event.settings.presale_start_show_date %}
<br><span class="text-muted">
{% with date_iso=event.effective_presale_start.isoformat date_human=event.effective_presale_start|date:"SHORT_DATE_FORMAT" %}
{% blocktrans trimmed with date='<time datetime="'|add:date_iso|add:'">'|add:date_human|add:"</time>"|safe %}
{% html_time event.event.effective_presale_start "SHORT_DATE_FORMAT" as date %}
{% blocktrans with date=date %}
Sale starts {{ date }}
{% endblocktrans %}
{% endwith %}
</span>
{% endif %}
{% endif %}

View File

@@ -1,3 +1,4 @@
{% load html_time %}
{% load i18n %}
{% load date_fast %}
<div class="week-calendar">
@@ -24,7 +25,7 @@
running
{% elif event.event.presale_has_ended %}
over
{% elif event.event.settings.presale_start_show_date and event.event.presale_start %}
{% elif event.event.settings.presale_start_show_date and event.event.effective_presale_start %}
soon
{% else %}
soon
@@ -77,9 +78,10 @@
<span class="fa fa-ticket" aria-hidden="true"></span> {% trans "Book now" %}
{% elif event.event.presale_has_ended %}
{% trans "Sale over" %}
{% elif event.event.settings.presale_start_show_date and event.event.presale_start %}
{% elif event.event.settings.presale_start_show_date and event.event.effective_presale_start %}
<span class="fa fa-ticket" aria-hidden="true"></span>
{% blocktrans with start_date=event.event.presale_start|date_fast:"SHORT_DATE_FORMAT" %}
{% html_time event.event.effective_presale_start "SHORT_DATE_FORMAT" as start_date %}
{% blocktrans with start_date=start_date %}
from {{ start_date }}
{% endblocktrans %}
{% else %}

View File

@@ -471,10 +471,11 @@ class WidgetAPIProductList(EventListMixin, View):
availability['color'] = 'red'
availability['text'] = gettext('Sale over')
availability['reason'] = 'over'
elif event.settings.presale_start_show_date and ev.presale_start:
elif event.settings.presale_start_show_date and ev.effective_presale_start:
availability['color'] = 'orange'
availability['text'] = gettext('from %(start_date)s') % {
'start_date': date_format(ev.presale_start.astimezone(tz or event.timezone), "SHORT_DATE_FORMAT")
'start_date': date_format(ev.effective_presale_start.astimezone(tz or event.timezone),
"SHORT_DATE_FORMAT")
}
availability['reason'] = 'soon'
else:

View File

@@ -1,7 +1,7 @@
[flake8]
ignore = N802,W503,E402,C901,E722,W504,E252,N812,N806,N818,E741
max-line-length = 160
exclude = migrations,.ropeproject,static,mt940.py,_static,build,make_testdata.py,*/testutils/settings.py,tests/settings.py,pretix/base/models/__init__.py,pretix/base/secretgenerators/pretix_sig1_pb2.py,.eggs/*
exclude = data/*,migrations,.ropeproject,static,mt940.py,_static,build,make_testdata.py,*/testutils/settings.py,tests/settings.py,pretix/base/models/__init__.py,pretix/base/secretgenerators/pretix_sig1_pb2.py,.eggs/*
max-complexity = 11
[isort]
@@ -13,7 +13,7 @@ extra_standard_library = typing,enum,mimetypes
multi_line_output = 5
line_length = 79
honor_noqa = true
skip_glob = make_testdata.py,wsgi.py,bootstrap,celery_app.py,pretix/settings.py,tests/settings.py,pretix/testutils/settings.py,.eggs/**
skip_glob = data/**,make_testdata.py,wsgi.py,bootstrap,celery_app.py,pretix/settings.py,tests/settings.py,pretix/testutils/settings.py,.eggs/**
[tool:pytest]
DJANGO_SETTINGS_MODULE = tests.settings