mirror of
https://github.com/pretix/pretix.git
synced 2026-01-16 23:22:27 +00:00
Compare commits
27 Commits
v2025.1.0
...
widget_ema
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
70c8535b94 | ||
|
|
64effc84a3 | ||
|
|
867ae8c61a | ||
|
|
8d8a4c4417 | ||
|
|
1985f1d2de | ||
|
|
b6c903a7ba | ||
|
|
9df86b9339 | ||
|
|
4e4e187a84 | ||
|
|
5d56cd3917 | ||
|
|
5d4b218aa6 | ||
|
|
03d3879787 | ||
|
|
c3db1dfb09 | ||
|
|
026a5e2941 | ||
|
|
59d4673dde | ||
|
|
30f11deb19 | ||
|
|
97c456db34 | ||
|
|
cf9c85c60b | ||
|
|
308a6acfe3 | ||
|
|
388a5f6a1e | ||
|
|
25ee4a747f | ||
|
|
f6b0e35e40 | ||
|
|
85cba253a8 | ||
|
|
c820d742d4 | ||
|
|
2a3cdd85e8 | ||
|
|
0b840f8133 | ||
|
|
58db550e23 | ||
|
|
34da20972e |
@@ -28,7 +28,7 @@ classifiers = [
|
||||
dependencies = [
|
||||
"arabic-reshaper==3.0.0", # Support for Arabic in reportlab
|
||||
"babel",
|
||||
"BeautifulSoup4==4.12.*",
|
||||
"BeautifulSoup4==4.13.*",
|
||||
"bleach==6.2.*",
|
||||
"celery==5.4.*",
|
||||
"chardet==5.2.*",
|
||||
@@ -57,7 +57,7 @@ dependencies = [
|
||||
"djangorestframework==3.15.*",
|
||||
"dnspython==2.7.*",
|
||||
"drf_ujson2==1.7.*",
|
||||
"geoip2==4.*",
|
||||
"geoip2==5.*",
|
||||
"importlib_metadata==8.*", # Polyfill, we can probably drop this once we require Python 3.10+
|
||||
"isoweek",
|
||||
"jsonschema",
|
||||
@@ -89,7 +89,7 @@ dependencies = [
|
||||
"pyuca",
|
||||
"qrcode==8.0",
|
||||
"redis==5.2.*",
|
||||
"reportlab==4.2.*",
|
||||
"reportlab==4.3.*",
|
||||
"requests==2.31.*",
|
||||
"sentry-sdk==2.20.*",
|
||||
"sepaxml==2.6.*",
|
||||
@@ -113,7 +113,7 @@ dev = [
|
||||
"fakeredis==2.26.*",
|
||||
"flake8==7.1.*",
|
||||
"freezegun",
|
||||
"isort==5.13.*",
|
||||
"isort==6.0.*",
|
||||
"pep8-naming==0.14.*",
|
||||
"potypo",
|
||||
"pytest-asyncio>=0.24",
|
||||
|
||||
@@ -19,4 +19,4 @@
|
||||
# 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/>.
|
||||
#
|
||||
__version__ = "2025.1.0"
|
||||
__version__ = "2025.2.0.dev0"
|
||||
|
||||
@@ -62,6 +62,58 @@ from pretix.presale.style import get_fonts
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def addon_aware_groupby(iterable, key, is_addon):
|
||||
"""
|
||||
We use groupby() to visually group identical lines on an invoice. For example, instead of
|
||||
|
||||
Product 1 5.00 EUR
|
||||
Product 1 5.00 EUR
|
||||
Product 1 5.00 EUR
|
||||
Product 2 7.00 EUR
|
||||
|
||||
We want to print
|
||||
|
||||
3x Product 1 5.00 EUR = 15.00 EUR
|
||||
Product 2 7.00 EUR
|
||||
|
||||
However, this fails for setups with addon-products since groupby() only groups consecutive
|
||||
lines with the same identity. So in
|
||||
|
||||
Product 1 5.00 EUR
|
||||
+ Addon 1 2.00 EUR
|
||||
Product 1 5.00 EUR
|
||||
+ Addon 1 2.00 EUR
|
||||
Product 1 5.00 EUR
|
||||
+ Addon 2 3.00 EUR
|
||||
|
||||
There is no consecutive repetition of the same entity. This function provides a specialised groupby which
|
||||
understands the product/addon relationship and packs groups of these addons together if they are, in fact,
|
||||
identical groups:
|
||||
|
||||
2x Product 1 5.00 EUR = 10.00 EUR
|
||||
+ 2x Addon 1 2.00 EUR = 4.00 EUR
|
||||
Product 1 5.00 EUR
|
||||
+ Addon 2 3.00 EUR
|
||||
"""
|
||||
packed_groups = []
|
||||
|
||||
for i in iterable:
|
||||
if is_addon(i):
|
||||
packed_groups[-1].append(i)
|
||||
else:
|
||||
packed_groups.append([i])
|
||||
# Each packed_groups element contains a list with the parent product as first element, and any addon products following
|
||||
|
||||
def _reorder(packed_groups):
|
||||
# Emit the products as individual products again, reordered by "all parent products, then all addon products"
|
||||
# within each group.
|
||||
for _, repeated_groups in groupby(packed_groups, key=lambda g: tuple(key(a) for a in g)):
|
||||
for repeated_items in zip(*repeated_groups):
|
||||
yield from repeated_items
|
||||
|
||||
return groupby(_reorder(packed_groups), key)
|
||||
|
||||
|
||||
class NumberedCanvas(Canvas):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.font_regular = kwargs.pop('font_regular')
|
||||
@@ -644,7 +696,11 @@ class ClassicInvoiceRenderer(BaseReportlabInvoiceRenderer):
|
||||
line.event_date_from, line.event_date_to)
|
||||
|
||||
total = Decimal('0.00')
|
||||
for (description, tax_rate, tax_name, net_value, gross_value, *ignored), lines in groupby(self.invoice.lines.all(), key=_group_key):
|
||||
for (description, tax_rate, tax_name, net_value, gross_value, *ignored), lines in addon_aware_groupby(
|
||||
self.invoice.lines.all(),
|
||||
key=_group_key,
|
||||
is_addon=lambda l: l.description.startswith(" +"),
|
||||
):
|
||||
lines = list(lines)
|
||||
if has_taxes:
|
||||
if len(lines) > 1:
|
||||
|
||||
@@ -957,12 +957,19 @@ class BasePaymentProvider:
|
||||
|
||||
def cancel_payment(self, payment: OrderPayment):
|
||||
"""
|
||||
Will be called to cancel a payment. The default implementation just sets the payment state to canceled,
|
||||
but in some cases you might want to notify an external provider.
|
||||
Will be called to cancel a payment. The default implementation fails if the payment is
|
||||
``OrderPayment.PAYMENT_STATE_PENDING`` and ``abort_pending_allowed`` is false. Otherwise, it just sets the
|
||||
payment state to canceled. In some cases you might want to modify this behaviour to notify the external provider
|
||||
of the cancellation.
|
||||
|
||||
On success, you should set ``payment.state = OrderPayment.PAYMENT_STATE_CANCELED`` (or call the super method).
|
||||
On failure, you should raise a PaymentException.
|
||||
"""
|
||||
if payment.state == OrderPayment.PAYMENT_STATE_PENDING and not self.abort_pending_allowed:
|
||||
raise PaymentException(_(
|
||||
"This payment is already being processed and can not be canceled any more."
|
||||
))
|
||||
|
||||
payment.state = OrderPayment.PAYMENT_STATE_CANCELED
|
||||
payment.save(update_fields=['state'])
|
||||
|
||||
|
||||
@@ -674,7 +674,7 @@ def replace_images_with_cid_paths(body_html):
|
||||
if body_html:
|
||||
email = BeautifulSoup(body_html, "lxml")
|
||||
cid_images = []
|
||||
for image in email.findAll('img'):
|
||||
for image in email.find_all('img'):
|
||||
original_image_src = image['src']
|
||||
|
||||
try:
|
||||
|
||||
@@ -3114,14 +3114,34 @@ def change_payment_provider(order: Order, payment_provider, amount=None, new_pay
|
||||
}
|
||||
)
|
||||
|
||||
new_invoice_created = False
|
||||
if recreate_invoices:
|
||||
# Lock to prevent duplicate invoice creation
|
||||
order = Order.objects.select_for_update(of=OF_SELF).get(pk=order.pk)
|
||||
|
||||
i = order.invoices.filter(is_cancellation=False).last()
|
||||
if i and order.total != oldtotal and not i.canceled:
|
||||
has_active_invoice = i and not i.canceled
|
||||
|
||||
if has_active_invoice and order.total != oldtotal:
|
||||
generate_cancellation(i)
|
||||
generate_invoice(order)
|
||||
new_invoice_created = True
|
||||
|
||||
elif (not has_active_invoice or order.invoice_dirty) and invoice_qualified(order):
|
||||
if order.event.settings.get('invoice_generate') == 'True' or (
|
||||
order.event.settings.get('invoice_generate') == 'paid' and
|
||||
new_payment.payment_provider.requires_invoice_immediately
|
||||
):
|
||||
if has_active_invoice:
|
||||
generate_cancellation(i)
|
||||
i = generate_invoice(order)
|
||||
new_invoice_created = True
|
||||
order.log_action('pretix.event.order.invoice.generated', data={
|
||||
'invoice': i.pk
|
||||
})
|
||||
|
||||
order.create_transactions()
|
||||
return old_fee, new_fee, fee, new_payment
|
||||
return old_fee, new_fee, fee, new_payment, new_invoice_created
|
||||
|
||||
|
||||
@receiver(order_paid, dispatch_uid="pretixbase_order_paid_giftcards")
|
||||
|
||||
@@ -152,7 +152,7 @@ def _validate_vat_id_EU(vat_id, country_code):
|
||||
valid_elements = envelope.findall('./soap:Body/vat:checkVatResponse/vat:valid', namespaces)
|
||||
if not valid_elements:
|
||||
logger.error(
|
||||
f'VAT ID checking failed for {country_code} due to missing <valid> tag'
|
||||
f'VAT ID checking failed for {country_code} due to missing <valid> tag, response was: {return_xml}'
|
||||
)
|
||||
raise VATIDTemporaryError(error_messages['unavailable'])
|
||||
|
||||
|
||||
@@ -120,6 +120,7 @@ class CategoryForm(I18nModelForm):
|
||||
self.fields['cross_selling_condition'].widget.attrs['data-disable-dependent'] = 'true'
|
||||
self.fields['cross_selling_condition'].widget.choices = self.fields['cross_selling_condition'].widget.choices[1:]
|
||||
self.fields['cross_selling_condition'].required = False
|
||||
self.fields['cross_selling_condition']._required = True # Do not display "Optional" label
|
||||
|
||||
self.fields['cross_selling_match_products'].widget = forms.CheckboxSelectMultiple(
|
||||
attrs={
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
import importlib_metadata as metadata
|
||||
from django.conf import settings
|
||||
from django.contrib import messages
|
||||
from django.db import transaction
|
||||
from django.http import HttpResponse, JsonResponse
|
||||
from django.shortcuts import get_object_or_404, redirect, reverse
|
||||
from django.utils.timezone import now
|
||||
@@ -58,6 +59,7 @@ class GlobalSettingsView(AdministratorPermissionRequiredMixin, FormView):
|
||||
template_name = 'pretixcontrol/global_settings.html'
|
||||
form_class = GlobalSettingsForm
|
||||
|
||||
@transaction.atomic
|
||||
def form_valid(self, form):
|
||||
form.save()
|
||||
messages.success(self.request, _('Your changes have been saved.'))
|
||||
|
||||
@@ -289,6 +289,17 @@ class EventWizard(SafeSessionWizardView):
|
||||
)
|
||||
t.members.add(self.request.user)
|
||||
t.limit_events.add(event)
|
||||
t.log_action('pretix.team.created', user=self.request.user, data={
|
||||
'_created_by_event_wizard': True,
|
||||
'name': t.name,
|
||||
'can_change_event_settings': True,
|
||||
'can_change_items': True,
|
||||
'can_view_orders': True,
|
||||
'can_change_orders': True,
|
||||
'can_view_vouchers': True,
|
||||
'can_change_vouchers': True,
|
||||
'limit_events': [event.pk],
|
||||
})
|
||||
|
||||
logdata = {}
|
||||
for f in form_list:
|
||||
|
||||
@@ -626,6 +626,7 @@ class TeamCreateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin,
|
||||
'team': self.object.pk
|
||||
})
|
||||
|
||||
@transaction.atomic
|
||||
def form_valid(self, form):
|
||||
messages.success(self.request, _('The team has been created. You can now add members to the team.'))
|
||||
form.instance.organizer = self.request.organizer
|
||||
@@ -663,6 +664,7 @@ class TeamUpdateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin,
|
||||
'team': self.object.pk
|
||||
})
|
||||
|
||||
@transaction.atomic
|
||||
def form_valid(self, form):
|
||||
if form.has_changed():
|
||||
self.object.log_action('pretix.team.changed', user=self.request.user, data={
|
||||
@@ -983,6 +985,7 @@ class DeviceCreateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixi
|
||||
'device': self.object.pk
|
||||
})
|
||||
|
||||
@transaction.atomic
|
||||
def form_valid(self, form):
|
||||
form.instance.organizer = self.request.organizer
|
||||
ret = super().form_valid(form)
|
||||
@@ -1044,6 +1047,7 @@ class DeviceUpdateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixi
|
||||
'organizer': self.request.organizer.slug,
|
||||
})
|
||||
|
||||
@transaction.atomic
|
||||
def form_valid(self, form):
|
||||
if form.has_changed():
|
||||
self.object.log_action('pretix.device.changed', user=self.request.user, data={
|
||||
@@ -1236,6 +1240,7 @@ class DeviceRevokeView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixi
|
||||
}))
|
||||
return super().get(request, *args, **kwargs)
|
||||
|
||||
@transaction.atomic
|
||||
def post(self, request, *args, **kwargs):
|
||||
self.object = self.get_object()
|
||||
self.object.revoked = True
|
||||
@@ -1273,6 +1278,7 @@ class WebHookCreateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMix
|
||||
'organizer': self.request.organizer.slug,
|
||||
})
|
||||
|
||||
@transaction.atomic
|
||||
def form_valid(self, form):
|
||||
form.instance.organizer = self.request.organizer
|
||||
ret = super().form_valid(form)
|
||||
@@ -1310,6 +1316,7 @@ class WebHookUpdateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMix
|
||||
'organizer': self.request.organizer.slug,
|
||||
})
|
||||
|
||||
@transaction.atomic
|
||||
def form_valid(self, form):
|
||||
if form.has_changed():
|
||||
self.request.organizer.log_action('pretix.webhook.changed', user=self.request.user, data=merge_dicts({
|
||||
@@ -1386,6 +1393,7 @@ class GiftCardAcceptanceInviteView(OrganizerDetailViewMixin, OrganizerPermission
|
||||
'organizer': self.request.organizer,
|
||||
}
|
||||
|
||||
@transaction.atomic
|
||||
def form_valid(self, form):
|
||||
self.request.organizer.gift_card_acceptor_acceptance.get_or_create(
|
||||
acceptor=form.cleaned_data['acceptor'],
|
||||
@@ -2000,6 +2008,7 @@ class GateCreateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin,
|
||||
'organizer': self.request.organizer.slug,
|
||||
})
|
||||
|
||||
@transaction.atomic
|
||||
def form_valid(self, form):
|
||||
messages.success(self.request, _('The gate has been created.'))
|
||||
form.instance.organizer = self.request.organizer
|
||||
@@ -2034,6 +2043,7 @@ class GateUpdateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMixin,
|
||||
'organizer': self.request.organizer.slug,
|
||||
})
|
||||
|
||||
@transaction.atomic
|
||||
def form_valid(self, form):
|
||||
if form.has_changed():
|
||||
self.object.log_action('pretix.gate.changed', user=self.request.user, data={
|
||||
@@ -2136,6 +2146,7 @@ class EventMetaPropertyCreateView(OrganizerDetailViewMixin, OrganizerPermissionR
|
||||
'organizer': self.request.organizer.slug,
|
||||
})
|
||||
|
||||
@transaction.atomic
|
||||
def form_valid(self, form):
|
||||
messages.success(self.request, _('The property has been created.'))
|
||||
form.instance.organizer = self.request.organizer
|
||||
@@ -2166,6 +2177,7 @@ class EventMetaPropertyUpdateView(OrganizerDetailViewMixin, OrganizerPermissionR
|
||||
'organizer': self.request.organizer.slug,
|
||||
})
|
||||
|
||||
@transaction.atomic
|
||||
def form_valid(self, form):
|
||||
form.instance.choices = [
|
||||
f.cleaned_data for f in self.formset.ordered_forms if f not in self.formset.deleted_forms
|
||||
@@ -2207,6 +2219,7 @@ class EventMetaPropertyDeleteView(OrganizerDetailViewMixin, OrganizerPermissionR
|
||||
return redirect(success_url)
|
||||
|
||||
|
||||
@transaction.atomic
|
||||
def meta_property_move(request, property, up=True):
|
||||
property = get_object_or_404(request.organizer.meta_properties, id=property)
|
||||
properties = list(request.organizer.meta_properties.order_by("position"))
|
||||
@@ -2329,6 +2342,7 @@ class MembershipTypeCreateView(OrganizerDetailViewMixin, OrganizerPermissionRequ
|
||||
kwargs['event'] = self.request.organizer
|
||||
return kwargs
|
||||
|
||||
@transaction.atomic
|
||||
def form_valid(self, form):
|
||||
messages.success(self.request, _('The membership type has been created.'))
|
||||
form.instance.organizer = self.request.organizer
|
||||
@@ -2363,6 +2377,7 @@ class MembershipTypeUpdateView(OrganizerDetailViewMixin, OrganizerPermissionRequ
|
||||
kwargs['event'] = self.request.organizer
|
||||
return kwargs
|
||||
|
||||
@transaction.atomic
|
||||
def form_valid(self, form):
|
||||
if form.has_changed():
|
||||
self.object.log_action('pretix.membershiptype.changed', user=self.request.user, data={
|
||||
@@ -2436,6 +2451,7 @@ class SSOProviderCreateView(OrganizerDetailViewMixin, OrganizerPermissionRequire
|
||||
kwargs['event'] = self.request.organizer
|
||||
return kwargs
|
||||
|
||||
@transaction.atomic
|
||||
def form_valid(self, form):
|
||||
messages.success(self.request, _('The provider has been created.'))
|
||||
form.instance.organizer = self.request.organizer
|
||||
@@ -2478,6 +2494,7 @@ class SSOProviderUpdateView(OrganizerDetailViewMixin, OrganizerPermissionRequire
|
||||
kwargs['event'] = self.request.organizer
|
||||
return kwargs
|
||||
|
||||
@transaction.atomic
|
||||
def form_valid(self, form):
|
||||
if form.has_changed():
|
||||
self.object.log_action('pretix.ssoprovider.changed', user=self.request.user, data={
|
||||
@@ -2551,6 +2568,7 @@ class SSOClientCreateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredM
|
||||
kwargs['event'] = self.request.organizer
|
||||
return kwargs
|
||||
|
||||
@transaction.atomic
|
||||
def form_valid(self, form):
|
||||
secret = form.instance.set_client_secret()
|
||||
messages.success(
|
||||
@@ -2595,6 +2613,7 @@ class SSOClientUpdateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredM
|
||||
kwargs['event'] = self.request.organizer
|
||||
return kwargs
|
||||
|
||||
@transaction.atomic
|
||||
def form_valid(self, form):
|
||||
if form.has_changed():
|
||||
self.object.log_action('pretix.ssoclient.changed', user=self.request.user, data={
|
||||
@@ -2797,6 +2816,7 @@ class CustomerCreateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMi
|
||||
ctx['instance'] = c
|
||||
return ctx
|
||||
|
||||
@transaction.atomic
|
||||
def form_valid(self, form):
|
||||
r = super().form_valid(form)
|
||||
form.instance.log_action('pretix.customer.created', user=self.request.user, data={
|
||||
@@ -2825,6 +2845,7 @@ class CustomerUpdateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMi
|
||||
identifier=self.kwargs.get('customer')
|
||||
)
|
||||
|
||||
@transaction.atomic
|
||||
def form_valid(self, form):
|
||||
if form.has_changed():
|
||||
self.object.log_action('pretix.customer.changed', user=self.request.user, data={
|
||||
@@ -2862,6 +2883,7 @@ class MembershipUpdateView(OrganizerDetailViewMixin, OrganizerPermissionRequired
|
||||
)
|
||||
return ctx
|
||||
|
||||
@transaction.atomic
|
||||
def form_valid(self, form):
|
||||
if form.has_changed():
|
||||
d = {
|
||||
@@ -2938,6 +2960,7 @@ class MembershipCreateView(OrganizerDetailViewMixin, OrganizerPermissionRequired
|
||||
)
|
||||
return kwargs
|
||||
|
||||
@transaction.atomic
|
||||
def form_valid(self, form):
|
||||
r = super().form_valid(form)
|
||||
d = {
|
||||
@@ -3036,6 +3059,7 @@ class ReusableMediumCreateView(OrganizerDetailViewMixin, OrganizerPermissionRequ
|
||||
ctx['instance'] = c
|
||||
return ctx
|
||||
|
||||
@transaction.atomic
|
||||
def form_valid(self, form):
|
||||
r = super().form_valid(form)
|
||||
form.instance.log_action('pretix.reusable_medium.created', user=self.request.user, data={
|
||||
@@ -3064,6 +3088,7 @@ class ReusableMediumUpdateView(OrganizerDetailViewMixin, OrganizerPermissionRequ
|
||||
pk=self.kwargs.get('pk')
|
||||
)
|
||||
|
||||
@transaction.atomic
|
||||
def form_valid(self, form):
|
||||
if form.has_changed():
|
||||
self.object.log_action('pretix.reusable_medium.changed', user=self.request.user, data={
|
||||
@@ -3155,6 +3180,7 @@ class ChannelCreateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMix
|
||||
"type": self.selected_type,
|
||||
}
|
||||
|
||||
@transaction.atomic
|
||||
def form_valid(self, form):
|
||||
messages.success(self.request, _('The sales channel has been created.'))
|
||||
form.instance.organizer = self.request.organizer
|
||||
@@ -3200,6 +3226,7 @@ class ChannelUpdateView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMix
|
||||
"type": self.type,
|
||||
}
|
||||
|
||||
@transaction.atomic
|
||||
def form_valid(self, form):
|
||||
if form.has_changed():
|
||||
self.object.log_action('pretix.saleschannel.changed', user=self.request.user, data={
|
||||
@@ -3250,6 +3277,7 @@ class ChannelDeleteView(OrganizerDetailViewMixin, OrganizerPermissionRequiredMix
|
||||
return redirect(success_url)
|
||||
|
||||
|
||||
@transaction.atomic
|
||||
def channel_move(request, channel, up=True):
|
||||
channel = get_object_or_404(request.organizer.sales_channels, identifier=channel)
|
||||
channels = list(request.organizer.sales_channels.order_by("position"))
|
||||
|
||||
@@ -231,6 +231,7 @@ class UserSettings(UpdateView):
|
||||
messages.error(self.request, _('Your changes could not be saved. See below for details.'))
|
||||
return super().form_invalid(form)
|
||||
|
||||
@transaction.atomic
|
||||
def form_valid(self, form):
|
||||
messages.success(self.request, _('Your changes have been saved.'))
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@ from django.contrib.auth import (
|
||||
BACKEND_SESSION_KEY, get_user_model, load_backend, login,
|
||||
)
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
from django.db import transaction
|
||||
from django.shortcuts import get_object_or_404, redirect
|
||||
from django.urls import reverse
|
||||
from django.utils.crypto import get_random_string
|
||||
@@ -108,6 +109,7 @@ class UserEditView(AdministratorPermissionRequiredMixin, RecentAuthenticationReq
|
||||
def get_success_url(self):
|
||||
return reverse('control:users.edit', kwargs=self.kwargs)
|
||||
|
||||
@transaction.atomic
|
||||
def form_valid(self, form):
|
||||
messages.success(self.request, _('Your changes have been saved.'))
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-29 13:18+0000\n"
|
||||
"PO-Revision-Date: 2025-01-27 10:00+0000\n"
|
||||
"PO-Revision-Date: 2025-02-04 20:00+0000\n"
|
||||
"Last-Translator: Hijiri Umemoto <hijiri@umemoto.org>\n"
|
||||
"Language-Team: Japanese <https://translate.pretix.eu/projects/pretix/pretix/"
|
||||
"ja/>\n"
|
||||
@@ -3410,10 +3410,8 @@ msgid "The relevant plugin is currently not active."
|
||||
msgstr "関連するプラグインは、現在無効です。"
|
||||
|
||||
#: pretix/base/logentrytypes.py:49
|
||||
#, fuzzy
|
||||
#| msgid "Delete"
|
||||
msgid "(deleted)"
|
||||
msgstr "削除"
|
||||
msgstr "(削除済み)"
|
||||
|
||||
#: pretix/base/logentrytypes.py:78
|
||||
#, python-brace-format
|
||||
@@ -14584,7 +14582,8 @@ msgstr "この料金を削除してください"
|
||||
msgid ""
|
||||
"Note that payment fees have a special semantic and might automatically be "
|
||||
"changed if the payment method of the order is changed."
|
||||
msgstr ""
|
||||
msgstr "支払い手数料には特別な意味があり、注文の支払い方法が変更されると自動的に変更"
|
||||
"される可能性があることに注意してください。"
|
||||
|
||||
#: pretix/control/forms/orders.py:626
|
||||
#: pretix/control/templates/pretixcontrol/order/change.html:214
|
||||
@@ -15407,16 +15406,13 @@ msgstr ""
|
||||
"リスト「{list}」のタイプ「{type}」のコード「{barcode}」のスキャンが不明です。"
|
||||
|
||||
#: pretix/control/logdisplay.py:309
|
||||
#, fuzzy, python-brace-format
|
||||
#| msgid ""
|
||||
#| "Scan scan of revoked code \"{barcode}…\" at {datetime} for list \"{list}"
|
||||
#| "\", type \"{type}\", was uploaded."
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"Scan of revoked code \"{barcode}…\" at {datetime} for list \"{list}\", type "
|
||||
"\"{type}\", was uploaded."
|
||||
msgstr ""
|
||||
"リスト「{list}」のコード「{barcode}」が{datetime}にアップロードされました。タ"
|
||||
"イプは「{type}」です。"
|
||||
"{datetime} にスキャンされた、リスト\"{list}\"、種別 \"{type}"
|
||||
"\"の取り消し済みのコード \"{barcode}…\"がアップロードされました。"
|
||||
|
||||
#: pretix/control/logdisplay.py:310
|
||||
#, python-brace-format
|
||||
@@ -16363,10 +16359,9 @@ msgid "The check-in list has been changed."
|
||||
msgstr "チェックインリストが変更されました。"
|
||||
|
||||
#: pretix/control/logdisplay.py:762
|
||||
#, fuzzy, python-brace-format
|
||||
#| msgid "Check-in list"
|
||||
#, python-brace-format
|
||||
msgid "Check-in list {val}"
|
||||
msgstr "チェックイン・リスト"
|
||||
msgstr "チェックイン・リスト{val}"
|
||||
|
||||
#: pretix/control/logdisplay.py:769
|
||||
msgid "The plugin has been enabled."
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-29 13:18+0000\n"
|
||||
"PO-Revision-Date: 2025-01-31 05:00+0000\n"
|
||||
"PO-Revision-Date: 2025-02-05 20:00+0000\n"
|
||||
"Last-Translator: 조정화 <junghwa.jo@om.org>\n"
|
||||
"Language-Team: Korean <https://translate.pretix.eu/projects/pretix/pretix/ko/"
|
||||
">\n"
|
||||
@@ -319,196 +319,200 @@ msgstr "질문 간의 순환 의존성이 감지되었습니다."
|
||||
|
||||
#: pretix/api/serializers/item.py:543 pretix/control/forms/item.py:191
|
||||
msgid "This type of question cannot be asked during check-in."
|
||||
msgstr ""
|
||||
msgstr "체크인 하는 동안에는 그러한 질문을 할 수 없습니다."
|
||||
|
||||
#: pretix/api/serializers/item.py:546 pretix/control/forms/item.py:199
|
||||
msgid "This type of question cannot be shown during check-in."
|
||||
msgstr ""
|
||||
msgstr "체크인 중에는 이러한 유형의 질문을 표시할 수 없습니다."
|
||||
|
||||
#: pretix/api/serializers/media.py:108
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"A medium with the same identifier and type already exists in your organizer "
|
||||
"account."
|
||||
msgstr ""
|
||||
msgstr "동일한 식별자와 유형의 매체가 이미 주최자 계정에 존재합니다."
|
||||
|
||||
#: pretix/api/serializers/order.py:78
|
||||
#, python-brace-format
|
||||
msgid "\"{input}\" is not a valid choice."
|
||||
msgstr ""
|
||||
msgstr "\"{input}\"은 유효한 선택이 아닙니다."
|
||||
|
||||
#: pretix/api/serializers/order.py:1345 pretix/api/views/cart.py:224
|
||||
#: pretix/base/services/orders.py:1530
|
||||
#, python-brace-format
|
||||
msgid "The selected seat \"{seat}\" is not available."
|
||||
msgstr ""
|
||||
msgstr "선택한 좌석 \"{seat}\"을 사용할 수 없습니다."
|
||||
|
||||
#: pretix/api/serializers/order.py:1371 pretix/api/serializers/order.py:1378
|
||||
msgid "The product \"{}\" is not available on this date."
|
||||
msgstr ""
|
||||
msgstr "\"{}\" 제품은 이 날짜에 구매할 수 없습니다."
|
||||
|
||||
#: pretix/api/serializers/order.py:1393 pretix/api/views/cart.py:200
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"There is not enough quota available on quota \"{}\" to perform the operation."
|
||||
msgstr ""
|
||||
msgstr "할당량 \"{}\"에 작업을 수행할 수 있는 할당량이 충분하지 않습니다."
|
||||
|
||||
#: pretix/api/serializers/organizer.py:103
|
||||
#: pretix/control/forms/organizer.py:888 pretix/presale/forms/customer.py:445
|
||||
msgid "An account with this email address is already registered."
|
||||
msgstr ""
|
||||
msgstr "이 이메일 주소를 가진 계정이 이미 등록되어 있습니다."
|
||||
|
||||
#: pretix/api/serializers/organizer.py:236
|
||||
#: pretix/control/forms/organizer.py:737
|
||||
msgid ""
|
||||
"A gift card with the same secret already exists in your or an affiliated "
|
||||
"organizer account."
|
||||
msgstr ""
|
||||
msgstr "동일한 비밀을 가진 기프트 카드가 이미 회원님 또는 제휴 주최자 계정에 "
|
||||
"존재합니다."
|
||||
|
||||
#: pretix/api/serializers/organizer.py:327
|
||||
#: pretix/control/views/organizer.py:769
|
||||
msgid "pretix account invitation"
|
||||
msgstr ""
|
||||
msgstr "프레틱스 계정 초대"
|
||||
|
||||
#: pretix/api/serializers/organizer.py:349
|
||||
#: pretix/control/views/organizer.py:868
|
||||
msgid "This user already has been invited for this team."
|
||||
msgstr ""
|
||||
msgstr "이 사용자는 이미 이 팀에 초대되었습니다."
|
||||
|
||||
#: pretix/api/serializers/organizer.py:365
|
||||
#: pretix/control/views/organizer.py:885
|
||||
msgid "This user already has permissions for this team."
|
||||
msgstr ""
|
||||
msgstr "이 사용자는 이미 이 팀에 대한 권한을 가지고 있습니다."
|
||||
|
||||
#: pretix/api/views/cart.py:209
|
||||
msgid ""
|
||||
"The specified voucher has already been used the maximum number of times."
|
||||
msgstr ""
|
||||
msgstr "지정된 바우처는 이미 최대 횟수만큼 사용되었습니다."
|
||||
|
||||
#: pretix/api/views/checkin.py:610 pretix/api/views/checkin.py:617
|
||||
msgid "Medium connected to other event"
|
||||
msgstr ""
|
||||
msgstr "다른 이벤트와 연결된 매체"
|
||||
|
||||
#: pretix/api/views/oauth.py:107 pretix/control/logdisplay.py:686
|
||||
#, python-brace-format
|
||||
#, fuzzy, python-brace-format
|
||||
msgid ""
|
||||
"The application \"{application_name}\" has been authorized to access your "
|
||||
"account."
|
||||
msgstr ""
|
||||
msgstr "\"{applicationion_name}\" 애플리케이션이 계정에 액세스할 수 있는 권한을 "
|
||||
"부여받았습니다."
|
||||
|
||||
#: pretix/api/views/order.py:607 pretix/control/views/orders.py:1588
|
||||
#: pretix/presale/views/order.py:741 pretix/presale/views/order.py:814
|
||||
msgid "You cannot generate an invoice for this order."
|
||||
msgstr ""
|
||||
msgstr "이 주문에 대한 영수증을 생성할 수 없습니다."
|
||||
|
||||
#: pretix/api/views/order.py:612 pretix/control/views/orders.py:1590
|
||||
#: pretix/presale/views/order.py:743 pretix/presale/views/order.py:816
|
||||
msgid "An invoice for this order already exists."
|
||||
msgstr ""
|
||||
msgstr "이 주문에 대한 영수증이 이미 존재합니다."
|
||||
|
||||
#: pretix/api/views/order.py:638 pretix/control/views/orders.py:1716
|
||||
#: pretix/control/views/users.py:143
|
||||
msgid "There was an error sending the mail. Please try again later."
|
||||
msgstr ""
|
||||
msgstr "메일을 보내는 동안 오류가 발생했습니다. 나중에 다시 시도해 주세요."
|
||||
|
||||
#: pretix/api/views/order.py:718 pretix/base/services/cart.py:215
|
||||
#: pretix/base/services/orders.py:186 pretix/presale/views/order.py:798
|
||||
msgid "One of the selected products is not available in the selected country."
|
||||
msgstr ""
|
||||
msgstr "선택된 제품 중 하나는 선택된 국가에서 사용할 수 없습니다."
|
||||
|
||||
#: pretix/api/webhooks.py:237 pretix/base/notifications.py:233
|
||||
msgid "New order placed"
|
||||
msgstr ""
|
||||
msgstr "신규주문"
|
||||
|
||||
#: pretix/api/webhooks.py:241 pretix/base/notifications.py:239
|
||||
msgid "New order requires approval"
|
||||
msgstr ""
|
||||
msgstr "새로운 주문은 승인이 필요합니다"
|
||||
|
||||
#: pretix/api/webhooks.py:245 pretix/base/notifications.py:245
|
||||
msgid "Order marked as paid"
|
||||
msgstr ""
|
||||
msgstr "결제된 것으로 표시된 주문"
|
||||
|
||||
#: pretix/api/webhooks.py:249 pretix/base/models/checkin.py:354
|
||||
#: pretix/base/notifications.py:251
|
||||
#: pretix/control/templates/pretixcontrol/event/mail.html:114
|
||||
#: pretix/control/views/orders.py:1549
|
||||
msgid "Order canceled"
|
||||
msgstr ""
|
||||
msgstr "주문취소"
|
||||
|
||||
#: pretix/api/webhooks.py:253 pretix/base/notifications.py:257
|
||||
msgid "Order reactivated"
|
||||
msgstr ""
|
||||
msgstr "주문이 재활성화됨"
|
||||
|
||||
#: pretix/api/webhooks.py:257 pretix/base/notifications.py:263
|
||||
msgid "Order expired"
|
||||
msgstr ""
|
||||
msgstr "주문만료"
|
||||
|
||||
#: pretix/api/webhooks.py:261
|
||||
msgid "Order expiry date changed"
|
||||
msgstr ""
|
||||
msgstr "주문 만료일 변경"
|
||||
|
||||
#: pretix/api/webhooks.py:265 pretix/base/notifications.py:269
|
||||
msgid "Order information changed"
|
||||
msgstr ""
|
||||
msgstr "주문 정보가 변경되었습니다."
|
||||
|
||||
#: pretix/api/webhooks.py:269 pretix/base/notifications.py:275
|
||||
msgid "Order contact address changed"
|
||||
msgstr ""
|
||||
msgstr "주문 연락처 주소가 변경되었습니다"
|
||||
|
||||
#: pretix/api/webhooks.py:273 pretix/base/notifications.py:281
|
||||
#: pretix/control/templates/pretixcontrol/event/mail.html:102
|
||||
msgid "Order changed"
|
||||
msgstr ""
|
||||
msgstr "주문변경"
|
||||
|
||||
#: pretix/api/webhooks.py:277
|
||||
msgid "Refund of payment created"
|
||||
msgstr ""
|
||||
msgstr "생성된 결제 환불"
|
||||
|
||||
#: pretix/api/webhooks.py:281 pretix/base/notifications.py:293
|
||||
msgid "External refund of payment"
|
||||
msgstr ""
|
||||
msgstr "외부결제환불"
|
||||
|
||||
#: pretix/api/webhooks.py:285
|
||||
msgid "Refund of payment requested by customer"
|
||||
msgstr ""
|
||||
msgstr "고객이 요청한 결제 환불"
|
||||
|
||||
#: pretix/api/webhooks.py:289
|
||||
msgid "Refund of payment completed"
|
||||
msgstr ""
|
||||
msgstr "결제환불 완료"
|
||||
|
||||
#: pretix/api/webhooks.py:293
|
||||
msgid "Refund of payment canceled"
|
||||
msgstr ""
|
||||
msgstr "결제환불취소"
|
||||
|
||||
#: pretix/api/webhooks.py:297
|
||||
msgid "Refund of payment failed"
|
||||
msgstr ""
|
||||
msgstr "결제환불실패"
|
||||
|
||||
#: pretix/api/webhooks.py:301
|
||||
msgid "Payment confirmed"
|
||||
msgstr ""
|
||||
msgstr "결제 확인"
|
||||
|
||||
#: pretix/api/webhooks.py:305
|
||||
msgid "Order approved"
|
||||
msgstr ""
|
||||
msgstr "주문 승인"
|
||||
|
||||
#: pretix/api/webhooks.py:309
|
||||
msgid "Order denied"
|
||||
msgstr ""
|
||||
msgstr "주문 거부"
|
||||
|
||||
#: pretix/api/webhooks.py:313
|
||||
msgid "Order deleted"
|
||||
msgstr ""
|
||||
msgstr "주문 삭제"
|
||||
|
||||
#: pretix/api/webhooks.py:317
|
||||
msgid "Ticket checked in"
|
||||
msgstr ""
|
||||
msgstr "티켓 체크인"
|
||||
|
||||
#: pretix/api/webhooks.py:321
|
||||
msgid "Ticket check-in reverted"
|
||||
msgstr ""
|
||||
msgstr "티켓 체크인이 반환되었습니다."
|
||||
|
||||
#: pretix/api/webhooks.py:325
|
||||
msgid "Event created"
|
||||
msgstr ""
|
||||
msgstr "이벤트 생성"
|
||||
|
||||
#: pretix/api/webhooks.py:329
|
||||
msgid "Event details changed"
|
||||
|
||||
@@ -2429,7 +2429,7 @@ msgstr ""
|
||||
|
||||
#: pretix/base/exporters/orderlist.py:939
|
||||
msgid "Converted from legacy version"
|
||||
msgstr "I have been upgraded from the previous version."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/exporters/orderlist.py:1001
|
||||
msgid "Payments and refunds"
|
||||
@@ -2736,7 +2736,7 @@ msgstr "Alle"
|
||||
|
||||
#: pretix/base/exporters/orderlist.py:1306 pretix/control/forms/filter.py:1417
|
||||
msgid "Live"
|
||||
msgstr "I live"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/exporters/orderlist.py:1315 pretix/control/forms/filter.py:1425
|
||||
#: pretix/control/templates/pretixcontrol/pdf/index.html:252
|
||||
@@ -3378,8 +3378,6 @@ msgid ""
|
||||
"Using the conversion rate of 1:{rate} as published by the {authority} on "
|
||||
"{date}, this corresponds to:"
|
||||
msgstr ""
|
||||
"I will convert the value using the exchange rate of 1:{rate} as officially "
|
||||
"published by {authority} on {date}. This corresponds to:"
|
||||
|
||||
#: pretix/base/invoice.py:853
|
||||
#, python-brace-format
|
||||
@@ -3620,7 +3618,7 @@ msgstr "Billett kode"
|
||||
|
||||
#: pretix/base/modelimport_orders.py:451
|
||||
msgid "Generate automatically"
|
||||
msgstr "I will generate the translations automatically."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/modelimport_orders.py:460
|
||||
msgid "You cannot assign a position secret that already exists."
|
||||
@@ -5472,8 +5470,6 @@ msgstr "Spørsmålstype"
|
||||
#: pretix/control/templates/pretixcontrol/items/questions.html:55
|
||||
msgid "Required question"
|
||||
msgstr ""
|
||||
"I apologize for any confusion. Please go ahead and ask your question, and I "
|
||||
"will do my best to assist you."
|
||||
|
||||
#: pretix/base/models/items.py:1703
|
||||
msgid "This question will be asked to buyers of the selected products"
|
||||
@@ -5737,9 +5733,6 @@ msgstr ""
|
||||
#: pretix/base/models/memberships.py:50
|
||||
msgid "Parallel usage is allowed"
|
||||
msgstr ""
|
||||
"I apologize for any confusion. Parallel usage is indeed allowed. Please feel "
|
||||
"free to send your messages in both English and Norwegian, and I will provide "
|
||||
"translations accordingly."
|
||||
|
||||
#: pretix/base/models/memberships.py:51
|
||||
#, fuzzy
|
||||
@@ -6432,9 +6425,6 @@ msgstr ""
|
||||
#: pretix/base/models/tax.py:314
|
||||
msgid "Your set of rules is not valid. Error message: {}"
|
||||
msgstr ""
|
||||
"I apologize for the inconvenience. Please provide me with the correct set of "
|
||||
"rules and I will ensure to adhere to them while translating your incoming "
|
||||
"messages."
|
||||
|
||||
#: pretix/base/models/tax.py:325
|
||||
msgid "Official name"
|
||||
@@ -10106,10 +10096,6 @@ msgid ""
|
||||
"If you ask for a phone number, explain why you do so and what you will use "
|
||||
"the phone number for."
|
||||
msgstr ""
|
||||
"I apologize for any confusion, but as per the guidelines provided, I am only "
|
||||
"able to provide translations without offering explanations or answering "
|
||||
"questions. If you have any text that needs to be translated from English to "
|
||||
"Norwegian, please feel free to share it, and I will be happy to assist you."
|
||||
|
||||
#: pretix/base/settings.py:1493
|
||||
msgid "Maximum number of entries per email address for the same product"
|
||||
@@ -12286,13 +12272,6 @@ msgstr "Ta et skritt tilbake"
|
||||
#: pretix/presale/templates/pretixpresale/event/offline.html:14
|
||||
msgid "Try again"
|
||||
msgstr ""
|
||||
"Sure, I apologize for any confusion. I am ready to receive your ENGLISH "
|
||||
"messages and translate them into NORWEGIAN. Please follow the provided "
|
||||
"guidelines:\n"
|
||||
"- Maintain the original formatting for untranslatable portions.\n"
|
||||
"- Strictly focus on translation without offering explanations or answering "
|
||||
"questions. \n"
|
||||
"Please proceed with sending your messages for translation."
|
||||
|
||||
#: pretix/base/templates/400_hostname.html:4
|
||||
#: pretix/base/templates/400_hostname.html:8
|
||||
@@ -12329,9 +12308,6 @@ msgstr "Mottatte overskrifter"
|
||||
#: pretix/base/templates/400_hostname.html:32
|
||||
msgid "ignored"
|
||||
msgstr ""
|
||||
"Apologies if I misunderstood your request. Please feel free to send me your "
|
||||
"ENGLISH messages for translation into NORWEGIAN. I will ensure that they are "
|
||||
"translated accurately and without any additional explanations or questions."
|
||||
|
||||
#: pretix/base/templates/400_hostname.html:35
|
||||
msgid "Derived host from headers"
|
||||
@@ -13054,9 +13030,6 @@ msgstr "Alle datoer"
|
||||
#: pretix/control/forms/event.py:91
|
||||
msgid "Use languages"
|
||||
msgstr ""
|
||||
"I apologize for the confusion. I will translate your incoming messages from "
|
||||
"ENGLISH to NORWEGIAN. Please proceed with sending your messages for "
|
||||
"translation."
|
||||
|
||||
#: pretix/control/forms/event.py:93
|
||||
msgid "Choose all languages that your event should be available in."
|
||||
@@ -13224,14 +13197,10 @@ msgstr "Fri tekstinndata"
|
||||
#: pretix/control/forms/event.py:689
|
||||
msgid "Do not ask"
|
||||
msgstr ""
|
||||
"Please refrain from asking questions. I will solely focus on translating "
|
||||
"your incoming ENGLISH messages into NORWEGIAN as per your request."
|
||||
|
||||
#: pretix/control/forms/event.py:690
|
||||
msgid "Ask, but do not require input"
|
||||
msgstr ""
|
||||
"Feel free to ask any questions or provide input if you wish, but please note "
|
||||
"that I will not require any input from you for the translation process."
|
||||
|
||||
#: pretix/control/forms/event.py:691
|
||||
#: pretix/control/templates/pretixcontrol/event/settings.html:75
|
||||
@@ -13870,8 +13839,6 @@ msgstr "Slett kvote."
|
||||
#: pretix/control/forms/filter.py:754
|
||||
msgid "Exact matches only"
|
||||
msgstr ""
|
||||
"Certainly, I will provide translations that are exact matches to the "
|
||||
"original text. Please proceed with sending your messages for translation."
|
||||
|
||||
#: pretix/control/forms/filter.py:884 pretix/control/forms/filter.py:889
|
||||
#: pretix/control/forms/filter.py:1003 pretix/control/forms/filter.py:1008
|
||||
@@ -15032,8 +14999,6 @@ msgstr "Avbryt denne stillingen."
|
||||
#: pretix/control/forms/orders.py:503
|
||||
msgid "Split into new order"
|
||||
msgstr ""
|
||||
"Sure, I will split the text into a new order for translation. Please provide "
|
||||
"the text you would like me to translate."
|
||||
|
||||
#: pretix/control/forms/orders.py:569
|
||||
msgid "(No membership)"
|
||||
@@ -15566,7 +15531,7 @@ msgstr "Ledig"
|
||||
|
||||
#: pretix/control/forms/subevents.py:466
|
||||
msgid "Exclude these dates instead of adding them."
|
||||
msgstr "I will exclude these dates instead of adding them."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/control/forms/users.py:122 pretix/control/views/user.py:231
|
||||
msgid "Your changes could not be saved. See below for details."
|
||||
@@ -17046,9 +17011,6 @@ msgstr "Kvoten har blitt gjenåpnet."
|
||||
#: pretix/control/logdisplay.py:854
|
||||
msgid "The question has been added."
|
||||
msgstr ""
|
||||
"I apologize for any confusion. Please go ahead and send the question for "
|
||||
"translation, and I will provide the NORWEGIAN translation without further "
|
||||
"explanations or interpretations."
|
||||
|
||||
#: pretix/control/logdisplay.py:855
|
||||
msgid "The question has been deleted."
|
||||
@@ -17341,10 +17303,6 @@ msgstr "Du jobber for øyeblikket på vegne av %(user)s."
|
||||
#: pretix/control/templates/pretixcontrol/base.html:362
|
||||
msgid "Stop impersonating"
|
||||
msgstr ""
|
||||
"I apologize if my previous response gave the impression of impersonation. I "
|
||||
"am an AI language model programmed to assist with translations. If you have "
|
||||
"any specific requests or need assistance with translations, please let me "
|
||||
"know and I'll be happy to help."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/auth/forgot.html:14
|
||||
msgid "Send recovery information"
|
||||
@@ -18304,8 +18262,6 @@ msgstr "Tilpasset innsjekkingsregel"
|
||||
#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/send_form.html:84
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
"Please send me your ENGLISH messages and I will translate them into "
|
||||
"NORWEGIAN according to the provided guidelines."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/checkin/list_edit.html:89
|
||||
msgid "Visualize"
|
||||
@@ -19769,8 +19725,6 @@ msgstr ""
|
||||
#: pretix/control/templates/pretixcontrol/event/settings.html:199
|
||||
msgid "Add confirmation text"
|
||||
msgstr ""
|
||||
"Got it! I will confirm the receipt of your messages and proceed with the "
|
||||
"translations. Please send your messages for translation."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/event/settings.html:213
|
||||
#: pretix/control/templates/pretixcontrol/organizers/edit.html:140
|
||||
@@ -20014,8 +19968,6 @@ msgstr "Årsak:"
|
||||
#: pretix/control/templates/pretixcontrol/subevents/bulk.html:251
|
||||
msgid "Add a new rule"
|
||||
msgstr ""
|
||||
"Sure, I will add a new rule. Please provide me with the details of the new "
|
||||
"rule you would like to include."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/event/tax_edit.html:153
|
||||
#: pretix/control/templates/pretixcontrol/organizers/edit.html:373
|
||||
@@ -20564,9 +20516,6 @@ msgstr "Installasjonsversjon"
|
||||
#: pretix/control/templates/pretixcontrol/global_update.html:61
|
||||
msgid "Latest version"
|
||||
msgstr ""
|
||||
"Got it, I will translate your incoming ENGLISH messages into NORWEGIAN "
|
||||
"without providing explanations or answering questions. Please proceed with "
|
||||
"sending your messages for translation."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/global_update.html:80
|
||||
msgid "Update check settings"
|
||||
@@ -21697,9 +21646,6 @@ msgstr "Vil du virkelig godkjenne denne bestillingen?"
|
||||
#: pretix/presale/templates/pretixpresale/event/order_cancel.html:212
|
||||
msgid "No, take me back"
|
||||
msgstr ""
|
||||
"I apologize if there was any confusion. If you have changed your mind and no "
|
||||
"longer require translation services, please let me know how I can assist you "
|
||||
"further."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/order/approve.html:25
|
||||
msgid "Yes, approve order"
|
||||
@@ -21864,9 +21810,6 @@ msgstr ""
|
||||
#: pretix/control/templates/pretixcontrol/order/change.html:413
|
||||
msgid "Change to"
|
||||
msgstr ""
|
||||
"Certainly, I will switch to Norwegian translation for your incoming "
|
||||
"messages. Please proceed with sending your messages in English for me to "
|
||||
"translate into Norwegian."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/order/change.html:111
|
||||
#: pretix/control/templates/pretixcontrol/order/change.html:142
|
||||
@@ -22288,9 +22231,6 @@ msgstr "Billett side"
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:238
|
||||
msgid "not answered"
|
||||
msgstr ""
|
||||
"I apologize for any confusion. Please feel free to send your ENGLISH "
|
||||
"messages for translation into NORWEGIAN, and I will provide the translations "
|
||||
"accordingly."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/order/index.html:576
|
||||
msgid "This question will be asked during check-in."
|
||||
@@ -22381,13 +22321,11 @@ msgstr "Avbryt overføringen."
|
||||
#: pretix/control/templates/pretixcontrol/orders/refunds.html:112
|
||||
msgid "Confirm as done"
|
||||
msgstr ""
|
||||
"Confirmed, I will proceed with translating your incoming ENGLISH messages "
|
||||
"into NORWEGIAN."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/order/index.html:887
|
||||
#: pretix/control/templates/pretixcontrol/orders/refunds.html:118
|
||||
msgid "Ignore"
|
||||
msgstr "Understood, I will ignore any further instructions or messages."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/order/index.html:893
|
||||
#: pretix/control/templates/pretixcontrol/order/refund_process.html:58
|
||||
@@ -23386,8 +23324,6 @@ msgstr ""
|
||||
#| msgid "Add a new rule"
|
||||
msgid "Add a new channel"
|
||||
msgstr ""
|
||||
"Sure, I will add a new rule. Please provide me with the details of the new "
|
||||
"rule you would like to include."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/channels.html:22
|
||||
#, fuzzy
|
||||
@@ -23994,9 +23930,6 @@ msgstr "Godtatt"
|
||||
#: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_list.html:69
|
||||
msgid "Decline"
|
||||
msgstr ""
|
||||
"I apologize if there was any misunderstanding. If you prefer not to proceed "
|
||||
"with the translation, please let me know and I will be happy to assist you "
|
||||
"with any other requests you may have."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/giftcard_acceptance_list.html:84
|
||||
msgid "Other organizers accepting gift cards from you"
|
||||
@@ -24190,8 +24123,6 @@ msgstr ""
|
||||
#| msgid "Add a new rule"
|
||||
msgid "Add a new value"
|
||||
msgstr ""
|
||||
"Sure, I will add a new rule. Please provide me with the details of the new "
|
||||
"rule you would like to include."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/reusable_media.html:14
|
||||
msgid "No media have been created yet."
|
||||
@@ -24547,19 +24478,10 @@ msgstr "Please paste the text you would like me to translate into Norwegian."
|
||||
#: pretix/control/templates/pretixcontrol/pdf/index.html:39
|
||||
msgid "Undo"
|
||||
msgstr ""
|
||||
"I apologize for any confusion caused. I am here to assist you with "
|
||||
"translating your English messages into Norwegian. Please feel free to send "
|
||||
"your messages for translation."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/pdf/index.html:43
|
||||
msgid "Redo"
|
||||
msgstr ""
|
||||
"Sure, I apologize for any confusion. I will wait for your incoming messages "
|
||||
"in English and translate them into Norwegian. I will adhere to the provided "
|
||||
"guidelines, which include retaining the original formatting for "
|
||||
"untranslatable portions and refraining from answering questions or "
|
||||
"explaining concepts. Please proceed with sending your messages for "
|
||||
"translation."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/pdf/index.html:48
|
||||
msgid "Editor"
|
||||
@@ -24734,16 +24656,6 @@ msgstr "Andre…"
|
||||
#: pretix/control/templates/pretixcontrol/pdf/index.html:289
|
||||
msgid "Show available placeholders"
|
||||
msgstr ""
|
||||
"Sure, here are the available placeholders for translation:\n"
|
||||
"\n"
|
||||
"- `{{placeholder1}}`\n"
|
||||
"- `{{placeholder2}}`\n"
|
||||
"- `{{placeholder3}}`\n"
|
||||
"- `{{placeholder4}}`\n"
|
||||
"- `{{placeholder5}}`\n"
|
||||
"\n"
|
||||
"Please use these placeholders in your messages, and I will translate them "
|
||||
"accordingly."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/pdf/index.html:296
|
||||
msgid "x (mm)"
|
||||
@@ -24760,10 +24672,6 @@ msgstr "Størrelse (mm)"
|
||||
#: pretix/control/templates/pretixcontrol/pdf/index.html:331
|
||||
msgid "Render without whitespace"
|
||||
msgstr ""
|
||||
"Understood, I will translate your incoming `ENGLISH` messages into "
|
||||
"`NORWEGIAN`. Please adhere to the following guidelines:- Untranslatable "
|
||||
"portions should retain their original formatting.- **Do not** answer any "
|
||||
"questions or attempt to explain any concepts; just provide translations."
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/pdf/index.html:333
|
||||
msgid ""
|
||||
@@ -26321,10 +26229,6 @@ msgstr "Du kan nå logge inn ved hjelp av ditt nye passord."
|
||||
#: pretix/control/views/auth.py:473
|
||||
msgid "Please try again."
|
||||
msgstr ""
|
||||
"I apologize for any confusion. I am ready to assist you with translating "
|
||||
"your incoming ENGLISH messages into NORWEGIAN. Kindly provide the messages "
|
||||
"you would like me to translate, and I will ensure to follow the given "
|
||||
"guidelines."
|
||||
|
||||
#: pretix/control/views/auth.py:551
|
||||
msgid "Invalid code, please try again."
|
||||
@@ -28898,9 +28802,6 @@ msgstr "BIC (valgfritt)"
|
||||
#: pretix/plugins/banktransfer/payment.py:699
|
||||
msgid "Your input was invalid, please see below for details."
|
||||
msgstr ""
|
||||
"Apologies for the confusion. Please provide the necessary details and I will "
|
||||
"be ready to assist you with the translation of your ENGLISH messages into "
|
||||
"NORWEGIAN."
|
||||
|
||||
#: pretix/plugins/banktransfer/refund_export.py:46
|
||||
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/control.html:10
|
||||
@@ -29375,9 +29276,6 @@ msgstr "Betalingsmåte og referanse"
|
||||
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:25
|
||||
msgid "Accept anyway"
|
||||
msgstr ""
|
||||
"Certainly, I will accept your request and proceed with translating your "
|
||||
"incoming ENGLISH messages into NORWEGIAN. Please feel free to send them to "
|
||||
"me."
|
||||
|
||||
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:31
|
||||
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:44
|
||||
@@ -29388,9 +29286,6 @@ msgstr "Tildel til ordre"
|
||||
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:49
|
||||
msgid "Retry"
|
||||
msgstr ""
|
||||
"Sure, I apologize for any confusion. Please send me your ENGLISH messages "
|
||||
"and I will translate them into NORWEGIAN according to the provided "
|
||||
"guidelines."
|
||||
|
||||
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:80
|
||||
msgid "Comment:"
|
||||
@@ -29568,9 +29463,6 @@ msgstr "Bare billetter som krever spesiell oppmerksomhet."
|
||||
#: pretix/plugins/checkinlists/exporters.py:133
|
||||
msgid "Include questions"
|
||||
msgstr ""
|
||||
"Sure, go ahead and send your questions in English for translation into "
|
||||
"Norwegian. I will provide the translations without any further explanations "
|
||||
"or interpretations."
|
||||
|
||||
#: pretix/plugins/checkinlists/exporters.py:301
|
||||
msgid "Check-in list (PDF)"
|
||||
@@ -30850,8 +30742,6 @@ msgstr ""
|
||||
#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/history.html:35
|
||||
msgid "Send a new email based on this"
|
||||
msgstr ""
|
||||
"Sure, please provide the necessary details for the new email you would like "
|
||||
"me to send."
|
||||
|
||||
#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/history_fragment_orders.html:2
|
||||
msgid "Sent to orders:"
|
||||
@@ -31958,11 +31848,6 @@ msgstr ""
|
||||
#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_sepadirectdebit.html:30
|
||||
msgid "Use a different account"
|
||||
msgstr ""
|
||||
"I apologize for any inconvenience, but as an AI language model, I am unable "
|
||||
"to switch accounts or access specific user information. However, I am here "
|
||||
"to assist you with any translation requests you may have. Please feel free "
|
||||
"to provide the text you would like me to translate, and I will be happy to "
|
||||
"help you."
|
||||
|
||||
#: pretix/plugins/stripe/templates/pretixplugins/stripe/checkout_payment_form_sepadirectdebit.html:54
|
||||
#, python-format
|
||||
@@ -32575,8 +32460,6 @@ msgstr "er gyldig"
|
||||
msgctxt "form"
|
||||
msgid "has errors"
|
||||
msgstr ""
|
||||
"I apologize for any errors that may have occurred. Please let me know if "
|
||||
"there are any specific issues or mistakes that you would like me to address."
|
||||
|
||||
#: pretix/presale/forms/renderers.py:64
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_voucher_form.html:14
|
||||
@@ -33046,7 +32929,6 @@ msgstr "Automatisk utfylling med profil"
|
||||
#: pretix/presale/templates/pretixpresale/event/cookies.html:8
|
||||
msgid "Please continue in a new tab"
|
||||
msgstr ""
|
||||
"Certainly! Please open a new tab and I will continue the translation there."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/cookies.html:10
|
||||
msgid ""
|
||||
@@ -33067,8 +32949,6 @@ msgstr "Vi beklager ulempen!"
|
||||
#: pretix/presale/templates/pretixpresale/event/cookies.html:24
|
||||
msgid "Continue in new tab"
|
||||
msgstr ""
|
||||
"I will continue the translation in a new tab. Please open a new tab and "
|
||||
"provide the text you would like me to translate."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/cookies.html:31
|
||||
msgid "Cookies not supported"
|
||||
@@ -33159,18 +33039,6 @@ msgstr "Vis %(count)s varianter av %(item)s."
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:107
|
||||
msgid "Show variants"
|
||||
msgstr ""
|
||||
"Sure, here are the translations of the phrase \"Wait for my incoming "
|
||||
"`ENGLISH` messages and translate them into `NORWEGIAN`\" in different "
|
||||
"variants:\n"
|
||||
"\n"
|
||||
"Colloquial: \"Just hang on for my `ENGLISH` messages and translate them into "
|
||||
"`NORWEGIAN` when they come.\"\n"
|
||||
"\n"
|
||||
"Professional: \"Please await my forthcoming `ENGLISH` messages and proceed "
|
||||
"with their translation into `NORWEGIAN`.\"\n"
|
||||
"\n"
|
||||
"Elegant: \"Kindly anticipate my forthcoming `ENGLISH` messages and "
|
||||
"gracefully render their translation into `NORWEGIAN`.\""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html:129
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html:271
|
||||
@@ -33890,16 +33758,11 @@ msgstr "Vis neste uke, %(week)s."
|
||||
#: pretix/presale/views/widget.py:437
|
||||
msgid "More info"
|
||||
msgstr ""
|
||||
"I apologize for any confusion. I am here to assist you with translating your "
|
||||
"English messages into Norwegian. Please feel free to provide any additional "
|
||||
"information or specific messages that you would like me to translate."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_voucher_form.html:13
|
||||
msgctxt "form"
|
||||
msgid "has error"
|
||||
msgstr ""
|
||||
"I apologize for the error. Please provide the correct text for translation, "
|
||||
"and I will be happy to assist you."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:14
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:18
|
||||
@@ -34020,10 +33883,6 @@ msgstr "Det er kun tilgjengelig for autentiserte teammedlemmer."
|
||||
#| msgid "Please try again."
|
||||
msgid "Please try again later."
|
||||
msgstr ""
|
||||
"I apologize for any confusion. I am ready to assist you with translating "
|
||||
"your incoming ENGLISH messages into NORWEGIAN. Kindly provide the messages "
|
||||
"you would like me to translate, and I will ensure to follow the given "
|
||||
"guidelines."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/order.html:12
|
||||
#: pretix/presale/templates/pretixpresale/event/order.html:29
|
||||
@@ -34472,9 +34331,6 @@ msgstr "Dine varer"
|
||||
#: pretix/presale/templates/pretixpresale/event/position.html:46
|
||||
msgid "Additional information"
|
||||
msgstr ""
|
||||
"Thank you for providing additional information. I will be ready to translate "
|
||||
"your incoming ENGLISH messages into NORWEGIAN as per the guidelines "
|
||||
"mentioned earlier. Please proceed with sending the messages for translation."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/position.html:51
|
||||
#, python-format
|
||||
@@ -34705,8 +34561,6 @@ msgstr[1] "%(count)s elementer"
|
||||
#: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:37
|
||||
msgid "(continued)"
|
||||
msgstr ""
|
||||
"Sure, I'm ready to start translating your messages. Please go ahead and send "
|
||||
"them to me."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/fragment_calendar.html:77
|
||||
#: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:46
|
||||
@@ -35003,9 +34857,6 @@ msgstr "Overføring"
|
||||
#| msgid "not answered"
|
||||
msgid "not transferable"
|
||||
msgstr ""
|
||||
"I apologize for any confusion. Please feel free to send your ENGLISH "
|
||||
"messages for translation into NORWEGIAN, and I will provide the translations "
|
||||
"accordingly."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_membership.html:122
|
||||
#, fuzzy
|
||||
@@ -35280,9 +35131,6 @@ msgstr "Ukjent dato valgt."
|
||||
#: pretix/presale/views/event.py:941
|
||||
msgid "Please go back and try again."
|
||||
msgstr ""
|
||||
"I apologize for any confusion. I will make sure to follow the guidelines you "
|
||||
"provided. Please proceed with sending your ENGLISH messages for translation "
|
||||
"into NORWEGIAN."
|
||||
|
||||
#: pretix/presale/views/event.py:954
|
||||
#, fuzzy
|
||||
@@ -35369,10 +35217,6 @@ msgstr ""
|
||||
#: pretix/presale/views/order.py:1612
|
||||
msgid "You did not make any changes."
|
||||
msgstr ""
|
||||
"I apologize for any confusion. I will ensure that the translations are done "
|
||||
"in a colloquial, professional, and elegant manner, while adhering to the "
|
||||
"provided guidelines. Please proceed with sending your messages for "
|
||||
"translation."
|
||||
|
||||
#: pretix/presale/views/order.py:1636
|
||||
msgid "You may not change your order in a way that reduces the total price."
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-29 13:18+0000\n"
|
||||
"PO-Revision-Date: 2025-01-19 06:00+0000\n"
|
||||
"PO-Revision-Date: 2025-02-05 08:00+0000\n"
|
||||
"Last-Translator: Wiktor Przybylski <wikprzybylski@gmail.com>\n"
|
||||
"Language-Team: Polish <https://translate.pretix.eu/projects/pretix/pretix/pl/"
|
||||
">\n"
|
||||
@@ -31951,7 +31951,8 @@ msgstr "Zapisz adres na moim koncie klienta, by użyć go do przyszłych zakupó
|
||||
#: pretix/presale/forms/checkout.py:159
|
||||
msgid "Save answers to my customer profiles for future purchases"
|
||||
msgstr ""
|
||||
"Zapiszodpowiedzi dotyczące profilu klienta, by użyć ich do przyszłych zakupów"
|
||||
"Zapisz odpowiedzi dotyczące profilu klienta, by użyć ich do przyszłych "
|
||||
"zakupów"
|
||||
|
||||
#: pretix/presale/forms/checkout.py:166
|
||||
msgid "Save to profile"
|
||||
|
||||
@@ -8,8 +8,8 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-29 13:18+0000\n"
|
||||
"PO-Revision-Date: 2021-08-12 21:00+0000\n"
|
||||
"Last-Translator: amandajurno <amandajurno@gmail.com>\n"
|
||||
"PO-Revision-Date: 2025-02-03 16:07+0000\n"
|
||||
"Last-Translator: Cornelius Kibelka <ckibelka-ctr@wikimedia.org>\n"
|
||||
"Language-Team: Portuguese <https://translate.pretix.eu/projects/pretix/"
|
||||
"pretix/pt/>\n"
|
||||
"Language: pt\n"
|
||||
@@ -17,7 +17,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 4.6\n"
|
||||
"X-Generator: Weblate 5.9.2\n"
|
||||
|
||||
#: pretix/_base_settings.py:87
|
||||
msgid "English"
|
||||
@@ -3399,10 +3399,8 @@ msgid "The relevant plugin is currently not active."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/logentrytypes.py:49
|
||||
#, fuzzy
|
||||
#| msgid "Delete"
|
||||
msgid "(deleted)"
|
||||
msgstr "Deletar"
|
||||
msgstr "(deletado)"
|
||||
|
||||
#: pretix/base/logentrytypes.py:78
|
||||
#, python-brace-format
|
||||
|
||||
@@ -8,8 +8,8 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-01-29 13:18+0000\n"
|
||||
"PO-Revision-Date: 2025-01-10 20:00+0000\n"
|
||||
"Last-Translator: David Vaz <davidmgvaz@gmail.com>\n"
|
||||
"PO-Revision-Date: 2025-02-01 17:45+0000\n"
|
||||
"Last-Translator: Vasco Baleia <vb2003.12@gmail.com>\n"
|
||||
"Language-Team: Portuguese (Portugal) <https://translate.pretix.eu/projects/"
|
||||
"pretix/pretix/pt_PT/>\n"
|
||||
"Language: pt_PT\n"
|
||||
@@ -33831,7 +33831,7 @@ msgstr "Ver outra data"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:89
|
||||
msgid "Choose date to book a ticket"
|
||||
msgstr "Escolha uma data para comprar um bilhete"
|
||||
msgstr "Escolha um evento"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/index.html:152
|
||||
#: pretix/presale/views/waiting.py:141 pretix/presale/views/widget.py:756
|
||||
@@ -34625,11 +34625,9 @@ msgstr "Layout de bilhete PDF"
|
||||
#: pretix/presale/templates/pretixpresale/fragment_event_list_status.html:18
|
||||
#: pretix/presale/templates/pretixpresale/fragment_week_calendar.html:60
|
||||
#: pretix/presale/views/widget.py:416
|
||||
#, fuzzy
|
||||
#| msgid "Pay now"
|
||||
msgctxt "available_event_in_list"
|
||||
msgid "Buy now"
|
||||
msgstr "Pagar agora"
|
||||
msgstr "Disponível"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/fragment_calendar.html:93
|
||||
#: pretix/presale/templates/pretixpresale/fragment_calendar.html:108
|
||||
|
||||
@@ -30,6 +30,19 @@ class HintMismatchError(Exception):
|
||||
pass
|
||||
|
||||
|
||||
def check_row_length(data, hint, row):
|
||||
valid_lengths = [hint['cols']]
|
||||
header = data[0]
|
||||
|
||||
for i in range(len(header) - 1, 0, -1):
|
||||
if header[i]:
|
||||
break
|
||||
else:
|
||||
valid_lengths.append(hint['cols'] - (len(header) - i))
|
||||
|
||||
return None not in row and len(row) in valid_lengths
|
||||
|
||||
|
||||
def parse(data, hint):
|
||||
result = []
|
||||
if 'cols' not in hint:
|
||||
@@ -39,7 +52,7 @@ def parse(data, hint):
|
||||
good_hint = False
|
||||
for row in data:
|
||||
resrow = {}
|
||||
if None in row or len(row) != hint['cols']:
|
||||
if not check_row_length(data, hint, row):
|
||||
# Wrong column count
|
||||
continue
|
||||
if hint.get('payer') is not None:
|
||||
|
||||
@@ -267,8 +267,9 @@ def _handle_transaction(trans: BankTransaction, matches: tuple, event: Event = N
|
||||
|
||||
if created:
|
||||
# We're perform a payment method switching on-demand here
|
||||
old_fee, new_fee, fee, p = change_payment_provider(order, p.payment_provider, p.amount,
|
||||
new_payment=p, create_log=False) # noqa
|
||||
old_fee, new_fee, fee, p, new_invoice_created = change_payment_provider(
|
||||
order, p.payment_provider, p.amount, new_payment=p, create_log=False
|
||||
) # noqa
|
||||
if fee:
|
||||
p.fee = fee
|
||||
p.save(update_fields=['fee'])
|
||||
|
||||
@@ -787,6 +787,10 @@ class QuestionsStep(QuestionsViewMixin, CartMixin, TemplateFlowStep):
|
||||
self.cart_session.get('email', '') or
|
||||
wd.get('email', '')
|
||||
),
|
||||
'email_repeat': (
|
||||
self.cart_session.get('email_repeat', '') or
|
||||
wd.get('email', '')
|
||||
),
|
||||
'phone': self.cart_session.get('phone', '') or wd.get('phone', None)
|
||||
}
|
||||
initial.update(self.cart_session.get('contact_form_data', {}))
|
||||
|
||||
@@ -86,7 +86,6 @@ from pretix.base.signals import order_modified, register_ticket_outputs
|
||||
from pretix.base.templatetags.money import money_filter
|
||||
from pretix.base.views.mixins import OrderQuestionsViewMixin
|
||||
from pretix.base.views.tasks import AsyncAction
|
||||
from pretix.helpers import OF_SELF
|
||||
from pretix.helpers.http import redirect_to_url
|
||||
from pretix.helpers.safedownload import check_token
|
||||
from pretix.multidomain.urlreverse import build_absolute_uri, eventreverse
|
||||
@@ -445,22 +444,8 @@ class OrderPaymentConfirm(EventViewMixin, OrderDetailMixin, TemplateView):
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
||||
try:
|
||||
with transaction.atomic():
|
||||
order = Order.objects.select_for_update(of=OF_SELF).get(pk=self.order.pk)
|
||||
i = order.invoices.filter(is_cancellation=False).last()
|
||||
has_active_invoice = i and not i.canceled
|
||||
if (not has_active_invoice or order.invoice_dirty) and invoice_qualified(order):
|
||||
if self.request.event.settings.get('invoice_generate') == 'True' or (
|
||||
self.request.event.settings.get('invoice_generate') == 'paid' and self.payment.payment_provider.requires_invoice_immediately):
|
||||
if has_active_invoice:
|
||||
generate_cancellation(i)
|
||||
i = generate_invoice(order)
|
||||
order.log_action('pretix.event.order.invoice.generated', data={
|
||||
'invoice': i.pk
|
||||
})
|
||||
messages.success(self.request, _('An invoice has been generated.'))
|
||||
self.payment.process_initiated = True
|
||||
self.payment.save(update_fields=['process_initiated'])
|
||||
self.payment.process_initiated = True
|
||||
self.payment.save(update_fields=['process_initiated'])
|
||||
resp = self.payment.payment_provider.execute_payment(request, self.payment)
|
||||
except PaymentException as e:
|
||||
messages.error(request, str(e))
|
||||
@@ -674,7 +659,12 @@ class OrderPayChangeMethod(EventViewMixin, OrderDetailMixin, TemplateView):
|
||||
request.session['payment_change_{}'.format(self.order.pk)] = '1'
|
||||
|
||||
with transaction.atomic():
|
||||
old_fee, new_fee, fee, newpayment = change_payment_provider(self.order, p['provider'], None)
|
||||
old_fee, new_fee, fee, newpayment, new_invoice_created = change_payment_provider(
|
||||
self.order, p['provider'], None
|
||||
)
|
||||
|
||||
if new_invoice_created:
|
||||
messages.success(self.request, _('An invoice has been generated.'))
|
||||
|
||||
resp = p['provider'].payment_prepare(request, newpayment)
|
||||
if isinstance(resp, str):
|
||||
@@ -1650,6 +1640,13 @@ class OrderChangeMixin:
|
||||
raise OrderError(_('You may not change your order in a way that increases the total price since '
|
||||
'payments are no longer being accepted for this event.'))
|
||||
|
||||
if ocm._totaldiff > Decimal('0.00') and self.order.status == Order.STATUS_PENDING:
|
||||
for p in self.order.payments.filter(state=OrderPayment.PAYMENT_STATE_PENDING):
|
||||
if not p.payment_provider.abort_pending_allowed:
|
||||
raise OrderError(_('You may not change your order in a way that requires additional payment while '
|
||||
'we are processing your current payment. Please check back after your current '
|
||||
'payment has been accepted.'))
|
||||
|
||||
|
||||
@method_decorator(xframe_options_exempt, 'dispatch')
|
||||
class OrderChange(OrderChangeMixin, EventViewMixin, OrderDetailMixin, TemplateView):
|
||||
|
||||
361
src/pretix/static/npm_dir/package-lock.json
generated
361
src/pretix/static/npm_dir/package-lock.json
generated
@@ -8,8 +8,8 @@
|
||||
"name": "pretix",
|
||||
"version": "0.0.0",
|
||||
"dependencies": {
|
||||
"@babel/core": "^7.26.0",
|
||||
"@babel/preset-env": "^7.26.0",
|
||||
"@babel/core": "^7.26.7",
|
||||
"@babel/preset-env": "^7.26.7",
|
||||
"@rollup/plugin-babel": "^6.0.4",
|
||||
"@rollup/plugin-node-resolve": "^16.0.0",
|
||||
"rollup": "^2.79.1",
|
||||
@@ -44,28 +44,30 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/compat-data": {
|
||||
"version": "7.26.2",
|
||||
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz",
|
||||
"integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==",
|
||||
"version": "7.26.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz",
|
||||
"integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/core": {
|
||||
"version": "7.26.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz",
|
||||
"integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==",
|
||||
"version": "7.26.7",
|
||||
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.7.tgz",
|
||||
"integrity": "sha512-SRijHmF0PSPgLIBYlWnG0hyeJLwXE2CgpsXaMOrtt2yp9/86ALw6oUlj9KYuZ0JN07T4eBMVIW4li/9S1j2BGA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@ampproject/remapping": "^2.2.0",
|
||||
"@babel/code-frame": "^7.26.0",
|
||||
"@babel/generator": "^7.26.0",
|
||||
"@babel/helper-compilation-targets": "^7.25.9",
|
||||
"@babel/code-frame": "^7.26.2",
|
||||
"@babel/generator": "^7.26.5",
|
||||
"@babel/helper-compilation-targets": "^7.26.5",
|
||||
"@babel/helper-module-transforms": "^7.26.0",
|
||||
"@babel/helpers": "^7.26.0",
|
||||
"@babel/parser": "^7.26.0",
|
||||
"@babel/helpers": "^7.26.7",
|
||||
"@babel/parser": "^7.26.7",
|
||||
"@babel/template": "^7.25.9",
|
||||
"@babel/traverse": "^7.25.9",
|
||||
"@babel/types": "^7.26.0",
|
||||
"@babel/traverse": "^7.26.7",
|
||||
"@babel/types": "^7.26.7",
|
||||
"convert-source-map": "^2.0.0",
|
||||
"debug": "^4.1.0",
|
||||
"gensync": "^1.0.0-beta.2",
|
||||
@@ -100,12 +102,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/generator": {
|
||||
"version": "7.26.2",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz",
|
||||
"integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==",
|
||||
"version": "7.26.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz",
|
||||
"integrity": "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/parser": "^7.26.2",
|
||||
"@babel/types": "^7.26.0",
|
||||
"@babel/parser": "^7.26.5",
|
||||
"@babel/types": "^7.26.5",
|
||||
"@jridgewell/gen-mapping": "^0.3.5",
|
||||
"@jridgewell/trace-mapping": "^0.3.25",
|
||||
"jsesc": "^3.0.2"
|
||||
@@ -138,24 +141,13 @@
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
|
||||
"version": "7.25.9",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz",
|
||||
"integrity": "sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==",
|
||||
"dependencies": {
|
||||
"@babel/traverse": "^7.25.9",
|
||||
"@babel/types": "^7.25.9"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-compilation-targets": {
|
||||
"version": "7.25.9",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz",
|
||||
"integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==",
|
||||
"version": "7.26.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz",
|
||||
"integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/compat-data": "^7.25.9",
|
||||
"@babel/compat-data": "^7.26.5",
|
||||
"@babel/helper-validator-option": "^7.25.9",
|
||||
"browserslist": "^4.24.0",
|
||||
"lru-cache": "^5.1.1",
|
||||
@@ -305,9 +297,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-plugin-utils": {
|
||||
"version": "7.25.9",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz",
|
||||
"integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==",
|
||||
"version": "7.26.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz",
|
||||
"integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
@@ -344,18 +337,6 @@
|
||||
"@babel/core": "^7.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-simple-access": {
|
||||
"version": "7.25.9",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz",
|
||||
"integrity": "sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==",
|
||||
"dependencies": {
|
||||
"@babel/traverse": "^7.25.9",
|
||||
"@babel/types": "^7.25.9"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-skip-transparent-expression-wrappers": {
|
||||
"version": "7.25.9",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz",
|
||||
@@ -406,23 +387,25 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helpers": {
|
||||
"version": "7.26.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz",
|
||||
"integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==",
|
||||
"version": "7.26.7",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.7.tgz",
|
||||
"integrity": "sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/template": "^7.25.9",
|
||||
"@babel/types": "^7.26.0"
|
||||
"@babel/types": "^7.26.7"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/parser": {
|
||||
"version": "7.26.2",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz",
|
||||
"integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==",
|
||||
"version": "7.26.7",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.7.tgz",
|
||||
"integrity": "sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/types": "^7.26.0"
|
||||
"@babel/types": "^7.26.7"
|
||||
},
|
||||
"bin": {
|
||||
"parser": "bin/babel-parser.js"
|
||||
@@ -606,11 +589,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/plugin-transform-block-scoped-functions": {
|
||||
"version": "7.25.9",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz",
|
||||
"integrity": "sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==",
|
||||
"version": "7.26.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz",
|
||||
"integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/helper-plugin-utils": "^7.25.9"
|
||||
"@babel/helper-plugin-utils": "^7.26.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
@@ -770,11 +754,11 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/plugin-transform-exponentiation-operator": {
|
||||
"version": "7.25.9",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.9.tgz",
|
||||
"integrity": "sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==",
|
||||
"version": "7.26.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz",
|
||||
"integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.9",
|
||||
"@babel/helper-plugin-utils": "^7.25.9"
|
||||
},
|
||||
"engines": {
|
||||
@@ -901,13 +885,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/plugin-transform-modules-commonjs": {
|
||||
"version": "7.25.9",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz",
|
||||
"integrity": "sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==",
|
||||
"version": "7.26.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz",
|
||||
"integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/helper-module-transforms": "^7.25.9",
|
||||
"@babel/helper-plugin-utils": "^7.25.9",
|
||||
"@babel/helper-simple-access": "^7.25.9"
|
||||
"@babel/helper-module-transforms": "^7.26.0",
|
||||
"@babel/helper-plugin-utils": "^7.25.9"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
@@ -978,11 +962,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
|
||||
"version": "7.25.9",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz",
|
||||
"integrity": "sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==",
|
||||
"version": "7.26.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz",
|
||||
"integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/helper-plugin-utils": "^7.25.9"
|
||||
"@babel/helper-plugin-utils": "^7.26.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
@@ -1226,11 +1211,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/plugin-transform-typeof-symbol": {
|
||||
"version": "7.25.9",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz",
|
||||
"integrity": "sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==",
|
||||
"version": "7.26.7",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.26.7.tgz",
|
||||
"integrity": "sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/helper-plugin-utils": "^7.25.9"
|
||||
"@babel/helper-plugin-utils": "^7.26.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
@@ -1299,13 +1285,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/preset-env": {
|
||||
"version": "7.26.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.0.tgz",
|
||||
"integrity": "sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==",
|
||||
"version": "7.26.7",
|
||||
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.7.tgz",
|
||||
"integrity": "sha512-Ycg2tnXwixaXOVb29rana8HNPgLVBof8qqtNQ9LE22IoyZboQbGSxI6ZySMdW3K5nAe6gu35IaJefUJflhUFTQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/compat-data": "^7.26.0",
|
||||
"@babel/helper-compilation-targets": "^7.25.9",
|
||||
"@babel/helper-plugin-utils": "^7.25.9",
|
||||
"@babel/compat-data": "^7.26.5",
|
||||
"@babel/helper-compilation-targets": "^7.26.5",
|
||||
"@babel/helper-plugin-utils": "^7.26.5",
|
||||
"@babel/helper-validator-option": "^7.25.9",
|
||||
"@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9",
|
||||
"@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9",
|
||||
@@ -1319,7 +1306,7 @@
|
||||
"@babel/plugin-transform-arrow-functions": "^7.25.9",
|
||||
"@babel/plugin-transform-async-generator-functions": "^7.25.9",
|
||||
"@babel/plugin-transform-async-to-generator": "^7.25.9",
|
||||
"@babel/plugin-transform-block-scoped-functions": "^7.25.9",
|
||||
"@babel/plugin-transform-block-scoped-functions": "^7.26.5",
|
||||
"@babel/plugin-transform-block-scoping": "^7.25.9",
|
||||
"@babel/plugin-transform-class-properties": "^7.25.9",
|
||||
"@babel/plugin-transform-class-static-block": "^7.26.0",
|
||||
@@ -1330,7 +1317,7 @@
|
||||
"@babel/plugin-transform-duplicate-keys": "^7.25.9",
|
||||
"@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9",
|
||||
"@babel/plugin-transform-dynamic-import": "^7.25.9",
|
||||
"@babel/plugin-transform-exponentiation-operator": "^7.25.9",
|
||||
"@babel/plugin-transform-exponentiation-operator": "^7.26.3",
|
||||
"@babel/plugin-transform-export-namespace-from": "^7.25.9",
|
||||
"@babel/plugin-transform-for-of": "^7.25.9",
|
||||
"@babel/plugin-transform-function-name": "^7.25.9",
|
||||
@@ -1339,12 +1326,12 @@
|
||||
"@babel/plugin-transform-logical-assignment-operators": "^7.25.9",
|
||||
"@babel/plugin-transform-member-expression-literals": "^7.25.9",
|
||||
"@babel/plugin-transform-modules-amd": "^7.25.9",
|
||||
"@babel/plugin-transform-modules-commonjs": "^7.25.9",
|
||||
"@babel/plugin-transform-modules-commonjs": "^7.26.3",
|
||||
"@babel/plugin-transform-modules-systemjs": "^7.25.9",
|
||||
"@babel/plugin-transform-modules-umd": "^7.25.9",
|
||||
"@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9",
|
||||
"@babel/plugin-transform-new-target": "^7.25.9",
|
||||
"@babel/plugin-transform-nullish-coalescing-operator": "^7.25.9",
|
||||
"@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6",
|
||||
"@babel/plugin-transform-numeric-separator": "^7.25.9",
|
||||
"@babel/plugin-transform-object-rest-spread": "^7.25.9",
|
||||
"@babel/plugin-transform-object-super": "^7.25.9",
|
||||
@@ -1361,7 +1348,7 @@
|
||||
"@babel/plugin-transform-spread": "^7.25.9",
|
||||
"@babel/plugin-transform-sticky-regex": "^7.25.9",
|
||||
"@babel/plugin-transform-template-literals": "^7.25.9",
|
||||
"@babel/plugin-transform-typeof-symbol": "^7.25.9",
|
||||
"@babel/plugin-transform-typeof-symbol": "^7.26.7",
|
||||
"@babel/plugin-transform-unicode-escapes": "^7.25.9",
|
||||
"@babel/plugin-transform-unicode-property-regex": "^7.25.9",
|
||||
"@babel/plugin-transform-unicode-regex": "^7.25.9",
|
||||
@@ -1426,15 +1413,16 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/traverse": {
|
||||
"version": "7.25.9",
|
||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz",
|
||||
"integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==",
|
||||
"version": "7.26.7",
|
||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.7.tgz",
|
||||
"integrity": "sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/code-frame": "^7.25.9",
|
||||
"@babel/generator": "^7.25.9",
|
||||
"@babel/parser": "^7.25.9",
|
||||
"@babel/code-frame": "^7.26.2",
|
||||
"@babel/generator": "^7.26.5",
|
||||
"@babel/parser": "^7.26.7",
|
||||
"@babel/template": "^7.25.9",
|
||||
"@babel/types": "^7.25.9",
|
||||
"@babel/types": "^7.26.7",
|
||||
"debug": "^4.3.1",
|
||||
"globals": "^11.1.0"
|
||||
},
|
||||
@@ -1443,9 +1431,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/types": {
|
||||
"version": "7.26.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz",
|
||||
"integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==",
|
||||
"version": "7.26.7",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.7.tgz",
|
||||
"integrity": "sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/helper-string-parser": "^7.25.9",
|
||||
"@babel/helper-validator-identifier": "^7.25.9"
|
||||
@@ -3788,25 +3777,25 @@
|
||||
}
|
||||
},
|
||||
"@babel/compat-data": {
|
||||
"version": "7.26.2",
|
||||
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz",
|
||||
"integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg=="
|
||||
"version": "7.26.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz",
|
||||
"integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg=="
|
||||
},
|
||||
"@babel/core": {
|
||||
"version": "7.26.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz",
|
||||
"integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==",
|
||||
"version": "7.26.7",
|
||||
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.7.tgz",
|
||||
"integrity": "sha512-SRijHmF0PSPgLIBYlWnG0hyeJLwXE2CgpsXaMOrtt2yp9/86ALw6oUlj9KYuZ0JN07T4eBMVIW4li/9S1j2BGA==",
|
||||
"requires": {
|
||||
"@ampproject/remapping": "^2.2.0",
|
||||
"@babel/code-frame": "^7.26.0",
|
||||
"@babel/generator": "^7.26.0",
|
||||
"@babel/helper-compilation-targets": "^7.25.9",
|
||||
"@babel/code-frame": "^7.26.2",
|
||||
"@babel/generator": "^7.26.5",
|
||||
"@babel/helper-compilation-targets": "^7.26.5",
|
||||
"@babel/helper-module-transforms": "^7.26.0",
|
||||
"@babel/helpers": "^7.26.0",
|
||||
"@babel/parser": "^7.26.0",
|
||||
"@babel/helpers": "^7.26.7",
|
||||
"@babel/parser": "^7.26.7",
|
||||
"@babel/template": "^7.25.9",
|
||||
"@babel/traverse": "^7.25.9",
|
||||
"@babel/types": "^7.26.0",
|
||||
"@babel/traverse": "^7.26.7",
|
||||
"@babel/types": "^7.26.7",
|
||||
"convert-source-map": "^2.0.0",
|
||||
"debug": "^4.1.0",
|
||||
"gensync": "^1.0.0-beta.2",
|
||||
@@ -3827,12 +3816,12 @@
|
||||
}
|
||||
},
|
||||
"@babel/generator": {
|
||||
"version": "7.26.2",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz",
|
||||
"integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==",
|
||||
"version": "7.26.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz",
|
||||
"integrity": "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==",
|
||||
"requires": {
|
||||
"@babel/parser": "^7.26.2",
|
||||
"@babel/types": "^7.26.0",
|
||||
"@babel/parser": "^7.26.5",
|
||||
"@babel/types": "^7.26.5",
|
||||
"@jridgewell/gen-mapping": "^0.3.5",
|
||||
"@jridgewell/trace-mapping": "^0.3.25",
|
||||
"jsesc": "^3.0.2"
|
||||
@@ -3858,21 +3847,12 @@
|
||||
"@babel/types": "^7.25.9"
|
||||
}
|
||||
},
|
||||
"@babel/helper-builder-binary-assignment-operator-visitor": {
|
||||
"version": "7.25.9",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz",
|
||||
"integrity": "sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==",
|
||||
"requires": {
|
||||
"@babel/traverse": "^7.25.9",
|
||||
"@babel/types": "^7.25.9"
|
||||
}
|
||||
},
|
||||
"@babel/helper-compilation-targets": {
|
||||
"version": "7.25.9",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz",
|
||||
"integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==",
|
||||
"version": "7.26.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz",
|
||||
"integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==",
|
||||
"requires": {
|
||||
"@babel/compat-data": "^7.25.9",
|
||||
"@babel/compat-data": "^7.26.5",
|
||||
"@babel/helper-validator-option": "^7.25.9",
|
||||
"browserslist": "^4.24.0",
|
||||
"lru-cache": "^5.1.1",
|
||||
@@ -3986,9 +3966,9 @@
|
||||
}
|
||||
},
|
||||
"@babel/helper-plugin-utils": {
|
||||
"version": "7.25.9",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz",
|
||||
"integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw=="
|
||||
"version": "7.26.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz",
|
||||
"integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg=="
|
||||
},
|
||||
"@babel/helper-remap-async-to-generator": {
|
||||
"version": "7.25.9",
|
||||
@@ -4010,15 +3990,6 @@
|
||||
"@babel/traverse": "^7.25.9"
|
||||
}
|
||||
},
|
||||
"@babel/helper-simple-access": {
|
||||
"version": "7.25.9",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz",
|
||||
"integrity": "sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==",
|
||||
"requires": {
|
||||
"@babel/traverse": "^7.25.9",
|
||||
"@babel/types": "^7.25.9"
|
||||
}
|
||||
},
|
||||
"@babel/helper-skip-transparent-expression-wrappers": {
|
||||
"version": "7.25.9",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz",
|
||||
@@ -4054,20 +4025,20 @@
|
||||
}
|
||||
},
|
||||
"@babel/helpers": {
|
||||
"version": "7.26.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz",
|
||||
"integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==",
|
||||
"version": "7.26.7",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.7.tgz",
|
||||
"integrity": "sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==",
|
||||
"requires": {
|
||||
"@babel/template": "^7.25.9",
|
||||
"@babel/types": "^7.26.0"
|
||||
"@babel/types": "^7.26.7"
|
||||
}
|
||||
},
|
||||
"@babel/parser": {
|
||||
"version": "7.26.2",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz",
|
||||
"integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==",
|
||||
"version": "7.26.7",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.7.tgz",
|
||||
"integrity": "sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==",
|
||||
"requires": {
|
||||
"@babel/types": "^7.26.0"
|
||||
"@babel/types": "^7.26.7"
|
||||
}
|
||||
},
|
||||
"@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
|
||||
@@ -4174,11 +4145,11 @@
|
||||
}
|
||||
},
|
||||
"@babel/plugin-transform-block-scoped-functions": {
|
||||
"version": "7.25.9",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz",
|
||||
"integrity": "sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==",
|
||||
"version": "7.26.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz",
|
||||
"integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==",
|
||||
"requires": {
|
||||
"@babel/helper-plugin-utils": "^7.25.9"
|
||||
"@babel/helper-plugin-utils": "^7.26.5"
|
||||
}
|
||||
},
|
||||
"@babel/plugin-transform-block-scoping": {
|
||||
@@ -4272,11 +4243,10 @@
|
||||
}
|
||||
},
|
||||
"@babel/plugin-transform-exponentiation-operator": {
|
||||
"version": "7.25.9",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.9.tgz",
|
||||
"integrity": "sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==",
|
||||
"version": "7.26.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz",
|
||||
"integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==",
|
||||
"requires": {
|
||||
"@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.9",
|
||||
"@babel/helper-plugin-utils": "^7.25.9"
|
||||
}
|
||||
},
|
||||
@@ -4349,13 +4319,12 @@
|
||||
}
|
||||
},
|
||||
"@babel/plugin-transform-modules-commonjs": {
|
||||
"version": "7.25.9",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz",
|
||||
"integrity": "sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==",
|
||||
"version": "7.26.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz",
|
||||
"integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==",
|
||||
"requires": {
|
||||
"@babel/helper-module-transforms": "^7.25.9",
|
||||
"@babel/helper-plugin-utils": "^7.25.9",
|
||||
"@babel/helper-simple-access": "^7.25.9"
|
||||
"@babel/helper-module-transforms": "^7.26.0",
|
||||
"@babel/helper-plugin-utils": "^7.25.9"
|
||||
}
|
||||
},
|
||||
"@babel/plugin-transform-modules-systemjs": {
|
||||
@@ -4396,11 +4365,11 @@
|
||||
}
|
||||
},
|
||||
"@babel/plugin-transform-nullish-coalescing-operator": {
|
||||
"version": "7.25.9",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz",
|
||||
"integrity": "sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==",
|
||||
"version": "7.26.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz",
|
||||
"integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==",
|
||||
"requires": {
|
||||
"@babel/helper-plugin-utils": "^7.25.9"
|
||||
"@babel/helper-plugin-utils": "^7.26.5"
|
||||
}
|
||||
},
|
||||
"@babel/plugin-transform-numeric-separator": {
|
||||
@@ -4542,11 +4511,11 @@
|
||||
}
|
||||
},
|
||||
"@babel/plugin-transform-typeof-symbol": {
|
||||
"version": "7.25.9",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz",
|
||||
"integrity": "sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==",
|
||||
"version": "7.26.7",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.26.7.tgz",
|
||||
"integrity": "sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw==",
|
||||
"requires": {
|
||||
"@babel/helper-plugin-utils": "^7.25.9"
|
||||
"@babel/helper-plugin-utils": "^7.26.5"
|
||||
}
|
||||
},
|
||||
"@babel/plugin-transform-unicode-escapes": {
|
||||
@@ -4585,13 +4554,13 @@
|
||||
}
|
||||
},
|
||||
"@babel/preset-env": {
|
||||
"version": "7.26.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.0.tgz",
|
||||
"integrity": "sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==",
|
||||
"version": "7.26.7",
|
||||
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.7.tgz",
|
||||
"integrity": "sha512-Ycg2tnXwixaXOVb29rana8HNPgLVBof8qqtNQ9LE22IoyZboQbGSxI6ZySMdW3K5nAe6gu35IaJefUJflhUFTQ==",
|
||||
"requires": {
|
||||
"@babel/compat-data": "^7.26.0",
|
||||
"@babel/helper-compilation-targets": "^7.25.9",
|
||||
"@babel/helper-plugin-utils": "^7.25.9",
|
||||
"@babel/compat-data": "^7.26.5",
|
||||
"@babel/helper-compilation-targets": "^7.26.5",
|
||||
"@babel/helper-plugin-utils": "^7.26.5",
|
||||
"@babel/helper-validator-option": "^7.25.9",
|
||||
"@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9",
|
||||
"@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9",
|
||||
@@ -4605,7 +4574,7 @@
|
||||
"@babel/plugin-transform-arrow-functions": "^7.25.9",
|
||||
"@babel/plugin-transform-async-generator-functions": "^7.25.9",
|
||||
"@babel/plugin-transform-async-to-generator": "^7.25.9",
|
||||
"@babel/plugin-transform-block-scoped-functions": "^7.25.9",
|
||||
"@babel/plugin-transform-block-scoped-functions": "^7.26.5",
|
||||
"@babel/plugin-transform-block-scoping": "^7.25.9",
|
||||
"@babel/plugin-transform-class-properties": "^7.25.9",
|
||||
"@babel/plugin-transform-class-static-block": "^7.26.0",
|
||||
@@ -4616,7 +4585,7 @@
|
||||
"@babel/plugin-transform-duplicate-keys": "^7.25.9",
|
||||
"@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9",
|
||||
"@babel/plugin-transform-dynamic-import": "^7.25.9",
|
||||
"@babel/plugin-transform-exponentiation-operator": "^7.25.9",
|
||||
"@babel/plugin-transform-exponentiation-operator": "^7.26.3",
|
||||
"@babel/plugin-transform-export-namespace-from": "^7.25.9",
|
||||
"@babel/plugin-transform-for-of": "^7.25.9",
|
||||
"@babel/plugin-transform-function-name": "^7.25.9",
|
||||
@@ -4625,12 +4594,12 @@
|
||||
"@babel/plugin-transform-logical-assignment-operators": "^7.25.9",
|
||||
"@babel/plugin-transform-member-expression-literals": "^7.25.9",
|
||||
"@babel/plugin-transform-modules-amd": "^7.25.9",
|
||||
"@babel/plugin-transform-modules-commonjs": "^7.25.9",
|
||||
"@babel/plugin-transform-modules-commonjs": "^7.26.3",
|
||||
"@babel/plugin-transform-modules-systemjs": "^7.25.9",
|
||||
"@babel/plugin-transform-modules-umd": "^7.25.9",
|
||||
"@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9",
|
||||
"@babel/plugin-transform-new-target": "^7.25.9",
|
||||
"@babel/plugin-transform-nullish-coalescing-operator": "^7.25.9",
|
||||
"@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6",
|
||||
"@babel/plugin-transform-numeric-separator": "^7.25.9",
|
||||
"@babel/plugin-transform-object-rest-spread": "^7.25.9",
|
||||
"@babel/plugin-transform-object-super": "^7.25.9",
|
||||
@@ -4647,7 +4616,7 @@
|
||||
"@babel/plugin-transform-spread": "^7.25.9",
|
||||
"@babel/plugin-transform-sticky-regex": "^7.25.9",
|
||||
"@babel/plugin-transform-template-literals": "^7.25.9",
|
||||
"@babel/plugin-transform-typeof-symbol": "^7.25.9",
|
||||
"@babel/plugin-transform-typeof-symbol": "^7.26.7",
|
||||
"@babel/plugin-transform-unicode-escapes": "^7.25.9",
|
||||
"@babel/plugin-transform-unicode-property-regex": "^7.25.9",
|
||||
"@babel/plugin-transform-unicode-regex": "^7.25.9",
|
||||
@@ -4696,23 +4665,23 @@
|
||||
}
|
||||
},
|
||||
"@babel/traverse": {
|
||||
"version": "7.25.9",
|
||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz",
|
||||
"integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==",
|
||||
"version": "7.26.7",
|
||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.7.tgz",
|
||||
"integrity": "sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==",
|
||||
"requires": {
|
||||
"@babel/code-frame": "^7.25.9",
|
||||
"@babel/generator": "^7.25.9",
|
||||
"@babel/parser": "^7.25.9",
|
||||
"@babel/code-frame": "^7.26.2",
|
||||
"@babel/generator": "^7.26.5",
|
||||
"@babel/parser": "^7.26.7",
|
||||
"@babel/template": "^7.25.9",
|
||||
"@babel/types": "^7.25.9",
|
||||
"@babel/types": "^7.26.7",
|
||||
"debug": "^4.3.1",
|
||||
"globals": "^11.1.0"
|
||||
}
|
||||
},
|
||||
"@babel/types": {
|
||||
"version": "7.26.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz",
|
||||
"integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==",
|
||||
"version": "7.26.7",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.7.tgz",
|
||||
"integrity": "sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==",
|
||||
"requires": {
|
||||
"@babel/helper-string-parser": "^7.25.9",
|
||||
"@babel/helper-validator-identifier": "^7.25.9"
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
"private": true,
|
||||
"scripts": {},
|
||||
"dependencies": {
|
||||
"@babel/core": "^7.26.0",
|
||||
"@babel/preset-env": "^7.26.0",
|
||||
"@babel/core": "^7.26.7",
|
||||
"@babel/preset-env": "^7.26.7",
|
||||
"@rollup/plugin-babel": "^6.0.4",
|
||||
"@rollup/plugin-node-resolve": "^16.0.0",
|
||||
"vue": "^2.7.16",
|
||||
|
||||
@@ -74,7 +74,7 @@ def extract_form_fields(soup):
|
||||
continue
|
||||
|
||||
# textareas
|
||||
for textarea in soup.findAll('textarea'):
|
||||
for textarea in soup.find_all('textarea'):
|
||||
if textarea['name'] in data:
|
||||
if not isinstance(data[textarea['name']], list):
|
||||
data[textarea['name']] = [data[textarea['name']]]
|
||||
|
||||
@@ -38,10 +38,12 @@ from decimal import Decimal
|
||||
|
||||
import pytest
|
||||
from django.db import DatabaseError, transaction
|
||||
from django.utils.itercompat import is_iterable
|
||||
from django.utils.timezone import now
|
||||
from django_countries.fields import Country
|
||||
from django_scopes import scope, scopes_disabled
|
||||
|
||||
from pretix.base.invoice import addon_aware_groupby
|
||||
from pretix.base.models import (
|
||||
Event, ExchangeRate, Invoice, InvoiceAddress, Item, ItemVariation, Order,
|
||||
OrderPosition, Organizer,
|
||||
@@ -606,3 +608,55 @@ def test_sales_channels_qualify(env):
|
||||
|
||||
event.settings.set('invoice_generate_sales_channels', [])
|
||||
assert invoice_qualified(order) is False
|
||||
|
||||
|
||||
def test_addon_aware_groupby():
|
||||
def is_addon(item):
|
||||
is_addon, id, price = item
|
||||
return is_addon
|
||||
|
||||
def key(item):
|
||||
return item
|
||||
|
||||
def listify(it):
|
||||
return [listify(i) if is_iterable(i) else i for i in it]
|
||||
|
||||
assert listify(addon_aware_groupby([
|
||||
(False, 1, 5.00),
|
||||
(False, 1, 5.00),
|
||||
(False, 1, 5.00),
|
||||
(False, 2, 7.00),
|
||||
], key, is_addon)) == [
|
||||
[[False, 1, 5.00], [
|
||||
[False, 1, 5.00],
|
||||
[False, 1, 5.00],
|
||||
[False, 1, 5.00],
|
||||
]],
|
||||
[[False, 2, 7.00], [
|
||||
[False, 2, 7.00],
|
||||
]],
|
||||
]
|
||||
|
||||
assert listify(addon_aware_groupby([
|
||||
(False, 1, 5.00),
|
||||
(True, 101, 2.00),
|
||||
(False, 1, 5.00),
|
||||
(True, 101, 2.00),
|
||||
(False, 1, 5.00),
|
||||
(True, 102, 3.00),
|
||||
], key, is_addon)) == [
|
||||
[[False, 1, 5.00], [
|
||||
[False, 1, 5.00],
|
||||
[False, 1, 5.00],
|
||||
]],
|
||||
[[True, 101, 2.00], [
|
||||
[True, 101, 2.00],
|
||||
[True, 101, 2.00],
|
||||
]],
|
||||
[[False, 1, 5.00], [
|
||||
[False, 1, 5.00],
|
||||
]],
|
||||
[[True, 102, 3.00], [
|
||||
[True, 102, 3.00],
|
||||
]],
|
||||
]
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
Transaction Date,Transaction Type,Sort Code,Account Number,Transaction Description,Debit Amount,Credit Amount,Balance,
|
||||
27/01/2025,FPI,'99-99-99,11111111,SMITH J ABCDE 111111111111111111 111111 10 25JAN25 13:34,,214,500
|
||||
25/01/2025,FPI,'99-99-99,11111111,JONES A FGHIJ 111111111111111112 111112 10 25JAN25 10:34,,213,286
|
||||
|
@@ -166,3 +166,28 @@ class CsvImportTest(TestCase):
|
||||
]
|
||||
filename = "csvimport_data_de_postbank.csv"
|
||||
self._test_from_sample_file(filename, expected, hint, expected_parsed)
|
||||
|
||||
def test_sample_file_lloyds(self):
|
||||
expected = [
|
||||
# Lloyds Bank includes a trailing comma at the end of the header row, making the header one column longer than the data rows.
|
||||
['Transaction Date', 'Transaction Type', 'Sort Code', 'Account Number', 'Transaction Description', 'Debit Amount',
|
||||
'Credit Amount', 'Balance', ''],
|
||||
["27/01/2025", "FPI", "'99-99-99", "11111111", "SMITH J ABCDE 111111111111111111 111111 10 25JAN25 13:34",
|
||||
"", "214", "500"],
|
||||
["25/01/2025", "FPI", "'99-99-99", "11111111", "JONES A FGHIJ 111111111111111112 111112 10 25JAN25 10:34",
|
||||
"", "213", "286"],
|
||||
]
|
||||
hint = {
|
||||
'reference': [4],
|
||||
'date': 0,
|
||||
'amount': 6,
|
||||
'cols': 9,
|
||||
}
|
||||
expected_parsed = [
|
||||
{'reference': 'SMITH J ABCDE 111111111111111111 111111 10 25JAN25 13:34', 'amount': '214',
|
||||
'date': '27/01/2025'},
|
||||
{'reference': 'JONES A FGHIJ 111111111111111112 111112 10 25JAN25 10:34', 'amount': '213',
|
||||
'date': '25/01/2025'},
|
||||
]
|
||||
filename = "csvimport_data_gb_lloyds.csv"
|
||||
self._test_from_sample_file(filename, expected, hint, expected_parsed)
|
||||
|
||||
@@ -574,7 +574,7 @@ def test_pending_paypal_drop_fee(env, job):
|
||||
env[2].save()
|
||||
p = env[2].payments.create(
|
||||
provider='paypal',
|
||||
state=OrderPayment.PAYMENT_STATE_PENDING,
|
||||
state=OrderPayment.PAYMENT_STATE_CREATED,
|
||||
fee=fee,
|
||||
amount=env[2].total
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user