Compare commits

..

29 Commits

Author SHA1 Message Date
Raphael Michel
510c4850a5 Merge branch 'Add-Promptpay-for-stripe' (#5670) 2025-12-12 09:08:12 +01:00
Raphael Michel
b13368d614 Event creation: Do not declare tax rate as optional (fixes #4794) (#5619) 2025-12-12 08:59:07 +01:00
Ana Rute Pacheco Vivas
b5cc8b368b Translations: Update Portuguese (Portugal)
Currently translated at 83.2% (5140 of 6172 strings)

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

powered by weblate
2025-12-12 08:59:04 +01:00
Renne Rocha
87c30d0acb Translations: Update Portuguese (Brazil)
Currently translated at 90.4% (5585 of 6172 strings)

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

powered by weblate
2025-12-12 08:59:04 +01:00
Raphael Michel
ffed8b29b1 Bank transfer: Allow CAMT import (#5601) 2025-12-12 08:58:52 +01:00
Ana Rute Pacheco Vivas
53fbb64225 Translations: Update Portuguese (Portugal)
Currently translated at 50.3% (128 of 254 strings)

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

powered by weblate
2025-12-10 17:02:20 +01:00
Ana Rute Pacheco Vivas
e10ec4074b Translations: Update Portuguese (Portugal)
Currently translated at 83.1% (5135 of 6172 strings)

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

powered by weblate
2025-12-10 17:02:20 +01:00
Lachlan Struthers
7f2dc77aca Translations: Update Albanian
Currently translated at 41.3% (105 of 254 strings)

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

powered by weblate
2025-12-10 17:02:20 +01:00
Lachlan Struthers
199a3bf1e7 Translations: Update Albanian
Currently translated at 0.6% (39 of 6172 strings)

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

powered by weblate
2025-12-10 17:02:20 +01:00
Raphael Michel
904aa807a3 Footer link form: Add placeholder (Z#23217115) 2025-12-10 16:49:09 +01:00
Praveen Kathirvasan
0e41353a0e Add "Pay by bank" option for UK customers via Stripe (#5648)
* Add support for 'Pay by bank (UK)' payment method via Stripe

* Add 'Pay by bank' payment provider to Stripe integration

* Enhance Stripe integration: Allow UK bank payments and update imports

* Remove UK-specific payment method options from StripePayByBank integration

* Remove some UK references

---------

Co-authored-by: Raphael Michel <michel@rami.io>
2025-12-09 13:25:52 +01:00
Raphael Michel
82ca50c7ff Fix templates 2025-12-09 12:42:47 +01:00
Daniel
3437b64947 Add PromptPay support (#5)
* Handle PromptPay QR flow

* Send billing email for PromptPay

* fix isort

* Update payment.py

* Update signals.py

---------

Co-authored-by: Chondaen <chondaen12@1000WA>
2025-12-09 12:28:28 +01:00
Raphael Michel
b895d9bbca Import large package lazily to speed up startup (#5636)
* Import large package lazily to speed up startup

* Make all jsonschema imports lazy
2025-12-09 09:52:53 +01:00
Raphael Michel
f214edaf34 Timeline: Fix incorrect string formatting (fixes #5614) (#5617) 2025-12-09 08:52:09 +01:00
Raphael Michel
165a47b593 Bank transfer: Auto-ignore all 0-valued transactions (fixes #5168) (#5620)
* Bank transfer: Auto-ignore all 0-valued transactions (fixes #5168)

* Fix failing test
2025-12-09 08:50:04 +01:00
Renne Rocha
e06f281f1e Translations: Update Portuguese (Brazil)
Currently translated at 90.3% (5575 of 6172 strings)

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

powered by weblate
2025-12-09 08:49:57 +01:00
Renne Rocha
203c7e660d Translations: Update Portuguese (Brazil)
Currently translated at 100.0% (254 of 254 strings)

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

powered by weblate
2025-12-09 08:49:57 +01:00
Renne Rocha
8c360b8754 Translations: Update Portuguese (Brazil)
Currently translated at 90.2% (5572 of 6172 strings)

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

powered by weblate
2025-12-09 08:49:57 +01:00
Ruud Hendrickx
90b6511d11 Translations: Update Dutch (informal) (nl_Informal)
Currently translated at 64.0% (3951 of 6172 strings)

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

powered by weblate
2025-12-09 08:49:57 +01:00
Ruud Hendrickx
bb356257cb Translations: Update Dutch
Currently translated at 96.3% (5945 of 6172 strings)

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

powered by weblate
2025-12-09 08:49:57 +01:00
sandra r
e1950e408e Translations: Update Galician
Currently translated at 15.5% (958 of 6172 strings)

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

powered by weblate
2025-12-09 08:49:57 +01:00
Yasunobu YesNo Kawaguchi
99d5722ce1 Translations: Update Japanese
Currently translated at 99.9% (6166 of 6172 strings)

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

powered by weblate
2025-12-09 08:49:57 +01:00
luelista
324eeb8d40 Fix crash when imported CSV has invalid syntax (#5702) 2025-12-09 08:09:34 +01:00
Raphael Michel
449e8dc905 Event cancel form: Add missing rich=True flag 2025-12-08 09:58:54 +01:00
Raphael Michel
c491c8232e Bank transfer: Allow dashes in event slug to be missing (Z#23216859) (#5682)
* Bank transfer: Allow dashes in event slug to be missing (Z#23216859)

* Update src/pretix/plugins/banktransfer/tasks.py

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

* Update src/pretix/plugins/banktransfer/tasks.py

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

* Apply suggestions from code review

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

---------

Co-authored-by: Richard Schreiber <schreiber@pretix.eu>
2025-12-05 10:54:03 +01:00
sandra r
aa02cc7968 Translations: Update Galician
Currently translated at 15.5% (961 of 6172 strings)

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

powered by weblate
2025-12-05 10:36:32 +01:00
Renne Rocha
cfa13d6b9d Translations: Update Portuguese (Brazil)
Currently translated at 90.2% (5572 of 6172 strings)

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

powered by weblate
2025-12-05 10:36:32 +01:00
Raphael Michel
af4eabc800 URL generation: Fix bug if plugins declare both event_urls and organizer_urls (#5688)
* URL generation: Fix bug if plugins declare both event_urls and organizer_urls

* Add missing file

* Add license header
2025-12-05 10:22:28 +01:00
45 changed files with 2648 additions and 640 deletions

View File

@@ -3,7 +3,7 @@ name = "pretix"
dynamic = ["version"] dynamic = ["version"]
description = "Reinventing presales, one ticket at a time" description = "Reinventing presales, one ticket at a time"
readme = "README.rst" readme = "README.rst"
requires-python = ">=3.10" requires-python = ">=3.9"
license = {file = "LICENSE"} license = {file = "LICENSE"}
keywords = ["tickets", "web", "shop", "ecommerce"] keywords = ["tickets", "web", "shop", "ecommerce"]
authors = [ authors = [
@@ -22,7 +22,7 @@ classifiers = [
"Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.11",
"Framework :: Django :: 5.2", "Framework :: Django :: 4.2",
] ]
dependencies = [ dependencies = [
@@ -36,7 +36,7 @@ dependencies = [
"css-inline==0.18.*", "css-inline==0.18.*",
"defusedcsv>=1.1.0", "defusedcsv>=1.1.0",
"dnspython==2.*", "dnspython==2.*",
"Django[argon2]==5.2.*", "Django[argon2]==4.2.*,>=4.2.26",
"django-bootstrap3==25.2", "django-bootstrap3==25.2",
"django-compressor==4.5.1", "django-compressor==4.5.1",
"django-countries==7.6.*", "django-countries==7.6.*",

View File

@@ -53,7 +53,6 @@ from django.utils.timezone import now
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django_otp.models import Device from django_otp.models import Device
from django_scopes import scopes_disabled from django_scopes import scopes_disabled
from webauthn.helpers.structs import PublicKeyCredentialDescriptor
from pretix.base.i18n import language from pretix.base.i18n import language
from pretix.helpers.urls import build_absolute_uri from pretix.helpers.urls import build_absolute_uri
@@ -708,6 +707,8 @@ class U2FDevice(Device):
@property @property
def webauthndevice(self): def webauthndevice(self):
from webauthn.helpers.structs import PublicKeyCredentialDescriptor
d = json.loads(self.json_data) d = json.loads(self.json_data)
return PublicKeyCredentialDescriptor(websafe_decode(d['keyHandle'])) return PublicKeyCredentialDescriptor(websafe_decode(d['keyHandle']))
@@ -737,6 +738,8 @@ class WebAuthnDevice(Device):
@property @property
def webauthndevice(self): def webauthndevice(self):
from webauthn.helpers.structs import PublicKeyCredentialDescriptor
return PublicKeyCredentialDescriptor(websafe_decode(self.credential_id)) return PublicKeyCredentialDescriptor(websafe_decode(self.credential_id))
@property @property

View File

@@ -22,7 +22,6 @@
import json import json
from collections import namedtuple from collections import namedtuple
import jsonschema
from django.contrib.staticfiles import finders from django.contrib.staticfiles import finders
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.db import models from django.db import models
@@ -38,6 +37,8 @@ from pretix.base.models import Event, Item, LoggedModel, Organizer, SubEvent
@deconstructible @deconstructible
class SeatingPlanLayoutValidator: class SeatingPlanLayoutValidator:
def __call__(self, value): def __call__(self, value):
import jsonschema
if not isinstance(value, dict): if not isinstance(value, dict):
try: try:
val = json.loads(value) val = json.loads(value)

View File

@@ -23,7 +23,6 @@ import json
from decimal import Decimal from decimal import Decimal
from typing import Optional from typing import Optional
import jsonschema
from django.contrib.staticfiles import finders from django.contrib.staticfiles import finders
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.core.validators import MaxValueValidator, MinValueValidator from django.core.validators import MaxValueValidator, MinValueValidator
@@ -298,6 +297,8 @@ def cc_to_vat_prefix(country_code):
@deconstructible @deconstructible
class CustomRulesValidator: class CustomRulesValidator:
def __call__(self, value): def __call__(self, value):
import jsonschema
if not isinstance(value, dict): if not isinstance(value, dict):
try: try:
val = json.loads(value) val = json.loads(value)

View File

@@ -47,7 +47,6 @@ from collections import OrderedDict, defaultdict
from functools import partial from functools import partial
from io import BytesIO from io import BytesIO
import jsonschema
import pypdf import pypdf
import pypdf.generic import pypdf.generic
import reportlab.rl_config import reportlab.rl_config
@@ -1311,6 +1310,8 @@ def _correct_page_media_box(page: pypdf.PageObject):
@deconstructible @deconstructible
class PdfLayoutValidator: class PdfLayoutValidator:
def __call__(self, value): def __call__(self, value):
import jsonschema
if not isinstance(value, dict): if not isinstance(value, dict):
try: try:
val = json.loads(value) val = json.loads(value)

View File

@@ -47,7 +47,6 @@ from urllib.parse import urljoin, urlparse
from zoneinfo import ZoneInfo from zoneinfo import ZoneInfo
import requests import requests
from bs4 import BeautifulSoup
from celery import chain from celery import chain
from celery.exceptions import MaxRetriesExceededError from celery.exceptions import MaxRetriesExceededError
from django.conf import settings from django.conf import settings
@@ -764,6 +763,8 @@ def render_mail(template, context, placeholder_mode=SafeFormatter.MODE_RICH_TO_P
def replace_images_with_cid_paths(body_html): def replace_images_with_cid_paths(body_html):
from bs4 import BeautifulSoup
if body_html: if body_html:
email = BeautifulSoup(body_html, "lxml") email = BeautifulSoup(body_html, "lxml")
cid_images = [] cid_images = []

View File

@@ -60,25 +60,23 @@ def _populate_app_cache():
def get_defining_app(o): def get_defining_app(o):
# If sentry packed this in a wrapper, unpack that # If sentry packed this in a wrapper, unpack that
module = getattr(o, "__module__", None) if "sentry" in o.__module__:
if module and "sentry" in module:
o = o.__wrapped__ o = o.__wrapped__
if hasattr(o, "__mocked_app"): if hasattr(o, "__mocked_app"):
return o.__mocked_app return o.__mocked_app
# Find the Django application this belongs to # Find the Django application this belongs to
searchpath = module or getattr(o.__class__, "__module__", None) or "" searchpath = o.__module__
# Core modules are always active # Core modules are always active
if searchpath and any(searchpath.startswith(cm) for cm in settings.CORE_MODULES): if any(searchpath.startswith(cm) for cm in settings.CORE_MODULES):
return 'CORE' return 'CORE'
if not app_cache: if not app_cache:
_populate_app_cache() _populate_app_cache()
app = None while True:
while searchpath:
app = app_cache.get(searchpath) app = app_cache.get(searchpath)
if "." not in searchpath or app: if "." not in searchpath or app:
break break
@@ -159,11 +157,7 @@ class PluginSignal(Generic[T], django.dispatch.Signal):
if not app_cache: if not app_cache:
_populate_app_cache() _populate_app_cache()
for receiver in self._sorted_receivers(sender)[0]: for receiver in self._sorted_receivers(sender):
if self._is_receiver_active(sender, receiver):
response = receiver(signal=self, sender=sender, **named)
responses.append((receiver, response))
for receiver in self._sorted_receivers(sender)[1]:
if self._is_receiver_active(sender, receiver): if self._is_receiver_active(sender, receiver):
response = receiver(signal=self, sender=sender, **named) response = receiver(signal=self, sender=sender, **named)
responses.append((receiver, response)) responses.append((receiver, response))
@@ -185,11 +179,7 @@ class PluginSignal(Generic[T], django.dispatch.Signal):
if not app_cache: if not app_cache:
_populate_app_cache() _populate_app_cache()
for receiver in self._sorted_receivers(sender)[0]: for receiver in self._sorted_receivers(sender):
if self._is_receiver_active(sender, receiver):
named[chain_kwarg_name] = response
response = receiver(signal=self, sender=sender, **named)
for receiver in self._sorted_receivers(sender)[1]:
if self._is_receiver_active(sender, receiver): if self._is_receiver_active(sender, receiver):
named[chain_kwarg_name] = response named[chain_kwarg_name] = response
response = receiver(signal=self, sender=sender, **named) response = receiver(signal=self, sender=sender, **named)
@@ -214,15 +204,7 @@ class PluginSignal(Generic[T], django.dispatch.Signal):
if not app_cache: if not app_cache:
_populate_app_cache() _populate_app_cache()
for receiver in self._sorted_receivers(sender)[0]: for receiver in self._sorted_receivers(sender):
if self._is_receiver_active(sender, receiver):
try:
response = receiver(signal=self, sender=sender, **named)
except Exception as err:
responses.append((receiver, err))
else:
responses.append((receiver, response))
for receiver in self._sorted_receivers(sender)[1]:
if self._is_receiver_active(sender, receiver): if self._is_receiver_active(sender, receiver):
try: try:
response = receiver(signal=self, sender=sender, **named) response = receiver(signal=self, sender=sender, **named)
@@ -233,33 +215,16 @@ class PluginSignal(Generic[T], django.dispatch.Signal):
return responses return responses
def _sorted_receivers(self, sender): def _sorted_receivers(self, sender):
orig_list_sync = self._live_receivers(sender)[0] orig_list = self._live_receivers(sender)
# todo: _live_receivers changed return value from [] to [], [] sorted_list = sorted(
orig_list_async = self._live_receivers(sender)[1] orig_list,
def _receiver_module(receiver):
return getattr(receiver, "__module__", receiver.__class__.__module__)
def _receiver_name(receiver):
return getattr(receiver, "__name__", receiver.__class__.__name__)
sorted_list_sync = sorted(
orig_list_sync,
key=lambda receiver: ( key=lambda receiver: (
0 if any(_receiver_module(receiver).startswith(m) for m in settings.CORE_MODULES) else 1, 0 if any(receiver.__module__.startswith(m) for m in settings.CORE_MODULES) else 1,
_receiver_module(receiver), receiver.__module__,
_receiver_name(receiver), receiver.__name__,
) )
) )
sorted_list_async = sorted( return sorted_list
orig_list_async,
key=lambda receiver: (
0 if any(_receiver_module(receiver).startswith(m) for m in settings.CORE_MODULES) else 1,
_receiver_module(receiver),
_receiver_name(receiver),
)
)
return sorted_list_sync, sorted_list_async
class EventPluginSignal(PluginSignal[Event]): class EventPluginSignal(PluginSignal[Event]):

View File

@@ -93,7 +93,9 @@ def timeline_for_event(event, subevent=None):
description=format_lazy( description=format_lazy(
'{} ({})', '{} ({})',
pgettext_lazy('timeline', 'End of ticket sales'), pgettext_lazy('timeline', 'End of ticket sales'),
pgettext_lazy('timeline', 'automatically because the event is over and no end of presale has been configured') if not ev.presale_end else "" pgettext_lazy('timeline', 'automatically because the event is over and no end of presale has been configured')
) if not ev.presale_end else (
pgettext_lazy('timeline', 'End of ticket sales')
), ),
edit_url=ev_edit_url + '#id_presale_end_0' edit_url=ev_edit_url + '#id_presale_end_0'
)) ))

View File

@@ -207,6 +207,7 @@ class EventWizardBasicsForm(I18nModelForm):
'Sample Conference Center\nHeidelberg, Germany' 'Sample Conference Center\nHeidelberg, Germany'
) )
self.fields['slug'].widget.prefix = build_absolute_uri(self.organizer, 'presale:organizer.index') self.fields['slug'].widget.prefix = build_absolute_uri(self.organizer, 'presale:organizer.index')
self.fields['tax_rate']._required = True # Do not render as optional because it is conditionally required
if self.has_subevents: if self.has_subevents:
del self.fields['presale_start'] del self.fields['presale_start']
del self.fields['presale_end'] del self.fields['presale_end']
@@ -1958,6 +1959,13 @@ class EventFooterLinkForm(I18nModelForm):
class Meta: class Meta:
model = EventFooterLink model = EventFooterLink
fields = ('label', 'url') fields = ('label', 'url')
widgets = {
"url": forms.URLInput(
attrs={
"placeholder": "https://..."
}
)
}
class BaseEventFooterLinkFormSet(I18nFormSetMixin, forms.BaseInlineFormSet): class BaseEventFooterLinkFormSet(I18nFormSetMixin, forms.BaseInlineFormSet):

View File

@@ -974,7 +974,7 @@ class EventCancelForm(FormPlaceholderMixin, forms.Form):
self._set_field_placeholders('send_subject', ['event_or_subevent', 'refund_amount', 'position_or_address', self._set_field_placeholders('send_subject', ['event_or_subevent', 'refund_amount', 'position_or_address',
'order', 'event']) 'order', 'event'])
self._set_field_placeholders('send_message', ['event_or_subevent', 'refund_amount', 'position_or_address', self._set_field_placeholders('send_message', ['event_or_subevent', 'refund_amount', 'position_or_address',
'order', 'event']) 'order', 'event'], rich=True)
self.fields['send_waitinglist_subject'] = I18nFormField( self.fields['send_waitinglist_subject'] = I18nFormField(
label=_("Subject"), label=_("Subject"),
required=True, required=True,
@@ -998,7 +998,7 @@ class EventCancelForm(FormPlaceholderMixin, forms.Form):
)) ))
) )
self._set_field_placeholders('send_waitinglist_subject', ['event_or_subevent', 'event']) self._set_field_placeholders('send_waitinglist_subject', ['event_or_subevent', 'event'])
self._set_field_placeholders('send_waitinglist_message', ['event_or_subevent', 'event']) self._set_field_placeholders('send_waitinglist_message', ['event_or_subevent', 'event'], rich=True)
if self.event.has_subevents: if self.event.has_subevents:
self.fields['subevent'].queryset = self.event.subevents.all() self.fields['subevent'].queryset = self.event.subevents.all()

View File

@@ -1024,6 +1024,13 @@ class OrganizerFooterLinkForm(I18nModelForm):
class Meta: class Meta:
model = OrganizerFooterLink model = OrganizerFooterLink
fields = ('label', 'url') fields = ('label', 'url')
widgets = {
"url": forms.URLInput(
attrs={
"placeholder": "https://..."
}
)
}
class BaseOrganizerFooterLinkFormSet(I18nFormSetMixin, forms.BaseInlineFormSet): class BaseOrganizerFooterLinkFormSet(I18nFormSetMixin, forms.BaseInlineFormSet):

View File

@@ -60,7 +60,6 @@ from pretix.base.models import (
) )
from pretix.base.services.quotas import QuotaAvailability from pretix.base.services.quotas import QuotaAvailability
from pretix.base.timeline import timeline_for_event from pretix.base.timeline import timeline_for_event
from pretix.control.forms.event import CommentForm
from pretix.control.signals import ( from pretix.control.signals import (
event_dashboard_widgets, user_dashboard_widgets, event_dashboard_widgets, user_dashboard_widgets,
) )
@@ -341,6 +340,8 @@ def welcome_wizard_widget(sender, **kwargs):
def event_index(request, organizer, event): def event_index(request, organizer, event):
from pretix.control.forms.event import CommentForm
subevent = None subevent = None
if request.GET.get("subevent", "") != "" and request.event.has_subevents: if request.GET.get("subevent", "") != "" and request.event.has_subevents:
i = request.GET.get("subevent", "") i = request.GET.get("subevent", "")

View File

@@ -98,7 +98,6 @@ from pretix.control.views.mailsetup import MailSettingsSetupView
from pretix.control.views.user import RecentAuthenticationRequiredMixin from pretix.control.views.user import RecentAuthenticationRequiredMixin
from pretix.helpers.database import rolledback_transaction from pretix.helpers.database import rolledback_transaction
from pretix.multidomain.urlreverse import build_absolute_uri, get_event_domain from pretix.multidomain.urlreverse import build_absolute_uri, get_event_domain
from pretix.plugins.stripe.payment import StripeSettingsHolder
from pretix.presale.views.widget import ( from pretix.presale.views.widget import (
version_default as widget_version_default, version_default as widget_version_default,
) )
@@ -1666,6 +1665,8 @@ class QuickSetupView(FormView):
'or take your event live to start selling!')) 'or take your event live to start selling!'))
if form.cleaned_data.get('payment_stripe__enabled', False): if form.cleaned_data.get('payment_stripe__enabled', False):
from pretix.plugins.stripe.payment import StripeSettingsHolder
self.request.session['payment_stripe_oauth_enable'] = True self.request.session['payment_stripe_oauth_enable'] = True
return redirect(StripeSettingsHolder(self.request.event).get_connect_url(self.request)) return redirect(StripeSettingsHolder(self.request.event).get_connect_url(self.request))

View File

@@ -156,7 +156,7 @@ class BaseProcessView(AsyncAction, FormView):
) )
) )
reader = parse_csv(self.file.file, 1024 * 1024, "replace", charset=charset) reader = parse_csv(self.file.file, 1024 * 1024, "replace", charset=charset)
if reader._had_duplicates: if reader and reader._had_duplicates:
messages.warning( messages.warning(
self.request, self.request,
_( _(

View File

@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-11-27 13:57+0000\n" "POT-Creation-Date: 2025-11-27 13:57+0000\n"
"PO-Revision-Date: 2025-12-03 23:00+0000\n" "PO-Revision-Date: 2025-12-05 18:00+0000\n"
"Last-Translator: sandra r <sandrarial@gestiontickets.online>\n" "Last-Translator: sandra r <sandrarial@gestiontickets.online>\n"
"Language-Team: Galician <https://translate.pretix.eu/projects/pretix/pretix/" "Language-Team: Galician <https://translate.pretix.eu/projects/pretix/pretix/"
"gl/>\n" "gl/>\n"
@@ -721,7 +721,7 @@ msgid_plural ""
msgstr[0] "O teu contrasinal non sexa o mesmo que o teu contrasinal anterior." msgstr[0] "O teu contrasinal non sexa o mesmo que o teu contrasinal anterior."
msgstr[1] "" msgstr[1] ""
"O teu contrasinal non sexa o mesmo que un dos teus contrasinais anteriores " "O teu contrasinal non sexa o mesmo que un dos teus contrasinais anteriores "
"de %(history_length)." "de %(history_length)s."
#: pretix/base/channels.py:168 #: pretix/base/channels.py:168
msgid "Online shop" msgid "Online shop"
@@ -3329,42 +3329,48 @@ msgid ""
"Upload a valid image. The file you uploaded was either not an image or a " "Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image." "corrupted image."
msgstr "" msgstr ""
"Carga unha imaxe válida. O ficheiro que cargaches ou non era unha imaxe ou "
"estaba danado."
#: pretix/base/forms/questions.py:653 pretix/base/forms/questions.py:662 #: pretix/base/forms/questions.py:653 pretix/base/forms/questions.py:662
msgid "" msgid ""
"If you keep this empty, the ticket will be valid starting at the time of " "If you keep this empty, the ticket will be valid starting at the time of "
"purchase." "purchase."
msgstr "" msgstr ""
"Se o deixas baleiro, o billete será válido a partir do momento da compra."
#: pretix/base/forms/questions.py:709 pretix/base/forms/questions.py:1102 #: pretix/base/forms/questions.py:709 pretix/base/forms/questions.py:1102
#, fuzzy
msgid "Street and Number" msgid "Street and Number"
msgstr "Calle y número" msgstr "Rúa e Número"
#: pretix/base/forms/questions.py:1166 #: pretix/base/forms/questions.py:1166
msgid "" msgid ""
"Optional, but depending on the country you reside in we might need to charge " "Optional, but depending on the country you reside in we might need to charge "
"you additional taxes if you do not enter it." "you additional taxes if you do not enter it."
msgstr "" msgstr ""
"Opcional, pero dependendo do país no que residas, pode que teñamos que "
"cobrarche impostos adicionais se non o introduces."
#: pretix/base/forms/questions.py:1168 pretix/base/forms/questions.py:1174 #: pretix/base/forms/questions.py:1168 pretix/base/forms/questions.py:1174
msgid "If you are registered in Switzerland, you can enter your UID instead." msgid "If you are registered in Switzerland, you can enter your UID instead."
msgstr "" msgstr ""
"Se estás rexistrado/a en Suíza, podes introducir o teu UID no seu lugar."
#: pretix/base/forms/questions.py:1172 #: pretix/base/forms/questions.py:1172
msgid "" msgid ""
"Optional, but it might be required for you to claim tax benefits on your " "Optional, but it might be required for you to claim tax benefits on your "
"invoice depending on your and the sellers country of residence." "invoice depending on your and the sellers country of residence."
msgstr "" msgstr ""
"Opcional, pero pode ser necesario para que solicites beneficios fiscais na "
"túa factura dependendo do teu país de residencia e do vendedor."
#: pretix/base/forms/questions.py:1181 #: pretix/base/forms/questions.py:1181
#, fuzzy
msgid "No invoice requested" msgid "No invoice requested"
msgstr "Tarifa de cancelación" msgstr "Non se solicitou factura"
#: pretix/base/forms/questions.py:1183 #: pretix/base/forms/questions.py:1183
msgid "Invoice transmission method" msgid "Invoice transmission method"
msgstr "" msgstr "Método de transmisión de facturas"
#: pretix/base/forms/questions.py:1329 #: pretix/base/forms/questions.py:1329
msgid "You need to provide a company name." msgid "You need to provide a company name."
@@ -3379,111 +3385,101 @@ msgid ""
"If you enter an invoice address, you also need to select an invoice " "If you enter an invoice address, you also need to select an invoice "
"transmission method." "transmission method."
msgstr "" msgstr ""
"Se introduces un enderezo de facturación, tamén debes seleccionar un método "
"de transmisión da factura."
#: pretix/base/forms/questions.py:1385 #: pretix/base/forms/questions.py:1385
#, fuzzy
msgid "" msgid ""
"The selected transmission type is not available in your country or for your " "The selected transmission type is not available in your country or for your "
"type of address." "type of address."
msgstr "El producto seleccionado no está activo o no tiene precio fijo." msgstr ""
"O tipo de transmisión seleccionado non está dispoñible no seu país nin para "
"o seu tipo de enderezo."
#: pretix/base/forms/questions.py:1394 #: pretix/base/forms/questions.py:1394
msgid "" msgid ""
"The selected type of invoice transmission requires a field that is currently " "The selected type of invoice transmission requires a field that is currently "
"not available, please reach out to the organizer." "not available, please reach out to the organizer."
msgstr "" msgstr ""
"O tipo de transmisión de factura seleccionado require un campo que non está "
"dispoñible actualmente. Ponte en contacto co organizador."
#: pretix/base/forms/questions.py:1398 #: pretix/base/forms/questions.py:1398
msgid "This field is required for the selected type of invoice transmission." msgid "This field is required for the selected type of invoice transmission."
msgstr "" msgstr ""
"Este campo é obrigatorio para o tipo de transmisión de factura seleccionado."
#: pretix/base/forms/user.py:54 pretix/control/forms/organizer.py:458 #: pretix/base/forms/user.py:54 pretix/control/forms/organizer.py:458
#: pretix/control/forms/users.py:58 #: pretix/control/forms/users.py:58
#, fuzzy
msgid "Default timezone" msgid "Default timezone"
msgstr "Zona horaria predefinida" msgstr "Fuso horario predeterminado"
#: pretix/base/forms/user.py:55 pretix/control/forms/users.py:59 #: pretix/base/forms/user.py:55 pretix/control/forms/users.py:59
#, fuzzy
msgid "" msgid ""
"Only used for views that are not bound to an event. For all event views, the " "Only used for views that are not bound to an event. For all event views, the "
"event timezone is used instead." "event timezone is used instead."
msgstr "" msgstr ""
"Sólo se utiliza para vistas que no están vinculadas a un evento. Para todas " "Só se usa para vistas que non están vinculadas a un evento. Para todas as "
"las vistas de eventos, se utiliza la zona horaria de eventos." "vistas de eventos, úsase o fuso horario do evento."
#: pretix/base/forms/user.py:77 #: pretix/base/forms/user.py:77
#, fuzzy
#| msgid "Attendee email address"
msgid "Change email address" msgid "Change email address"
msgstr "Correo electrónico do participante" msgstr "Cambiar enderezo de correo electrónico"
#: pretix/base/forms/user.py:83 #: pretix/base/forms/user.py:83
msgid "Device name" msgid "Device name"
msgstr "Nombre do dispositivo" msgstr "Nombre do dispositivo"
#: pretix/base/forms/user.py:84 #: pretix/base/forms/user.py:84
#, fuzzy
msgid "Device type" msgid "Device type"
msgstr "Tipo de dispositivo" msgstr "Tipo de dispositivo"
#: pretix/base/forms/user.py:85 #: pretix/base/forms/user.py:85
#, fuzzy
msgid "Smartphone with the Authenticator application" msgid "Smartphone with the Authenticator application"
msgstr "Celular con aplicación de autenticación" msgstr "Teléfono intelixente coa aplicación Authenticator"
#: pretix/base/forms/user.py:86 #: pretix/base/forms/user.py:86
#, fuzzy
msgid "WebAuthn-compatible hardware token (e.g. Yubikey)" msgid "WebAuthn-compatible hardware token (e.g. Yubikey)"
msgstr "Hardware compatible con token WebAuthn (p. ej. Yubikey)" msgstr "Token de hardware compatible con WebAuthn (por exemplo, Yubikey)"
#: pretix/base/forms/user.py:92 pretix/presale/forms/customer.py:383 #: pretix/base/forms/user.py:92 pretix/presale/forms/customer.py:383
#: pretix/presale/forms/customer.py:456 #: pretix/presale/forms/customer.py:456
#, fuzzy
msgid "The current password you entered was not correct." msgid "The current password you entered was not correct."
msgstr "La contraseña actual que ingresó no es correcta." msgstr "O contrasinal actual que introduciches non era correcto."
#: pretix/base/forms/user.py:95 #: pretix/base/forms/user.py:95
msgid "Please choose a password different to your current one." msgid "Please choose a password different to your current one."
msgstr "" msgstr "Escolle un contrasinal diferente ao teu actual."
#: pretix/base/forms/user.py:105 pretix/presale/forms/customer.py:392 #: pretix/base/forms/user.py:105 pretix/presale/forms/customer.py:392
#: pretix/presale/forms/customer.py:461 #: pretix/presale/forms/customer.py:461
#, fuzzy
msgid "Your current password" msgid "Your current password"
msgstr "Su contraseña actual" msgstr "O teu contrasinal actual"
#: pretix/base/forms/user.py:111 pretix/control/forms/users.py:50 #: pretix/base/forms/user.py:111 pretix/control/forms/users.py:50
#: pretix/presale/forms/customer.py:397 #: pretix/presale/forms/customer.py:397
#, fuzzy
msgid "New password" msgid "New password"
msgstr "Nueva contraseña" msgstr "New password"
#: pretix/base/forms/user.py:117 pretix/control/forms/users.py:54 #: pretix/base/forms/user.py:117 pretix/control/forms/users.py:54
#, fuzzy
msgid "Repeat new password" msgid "Repeat new password"
msgstr "Repetir la nueva contraseña" msgstr "Repita o novo contrasinal"
#: pretix/base/forms/user.py:176 pretix/control/forms/users.py:43 #: pretix/base/forms/user.py:176 pretix/control/forms/users.py:43
#, fuzzy
msgid "" msgid ""
"There already is an account associated with this email address. Please " "There already is an account associated with this email address. Please "
"choose a different one." "choose a different one."
msgstr "" msgstr ""
"Ya existe una cuenta asociada a este correo electrónico. Por favor, escoja " "Xa existe unha conta asociada a este enderezo de correo electrónico. Escolle "
"otro." "unha diferente."
#: pretix/base/forms/user.py:179 #: pretix/base/forms/user.py:179
#, fuzzy
#| msgid "Email address"
msgid "Old email address" msgid "Old email address"
msgstr "Correo electrónico" msgstr "Enderezo de correo electrónico antigo"
#: pretix/base/forms/user.py:180 #: pretix/base/forms/user.py:180
#, fuzzy
#| msgid "Email address"
msgid "New email address" msgid "New email address"
msgstr "Correo electrónico" msgstr "Novo enderezo de correo electrónico"
#: pretix/base/forms/validators.py:51 #: pretix/base/forms/validators.py:51
msgid "" msgid ""
@@ -3492,29 +3488,32 @@ msgid ""
"up. Please note: to use literal \"{\" or \"}\", you need to double them as " "up. Please note: to use literal \"{\" or \"}\", you need to double them as "
"\"{{\" and \"}}\"." "\"{{\" and \"}}\"."
msgstr "" msgstr ""
"Hai un erro coa sintaxe dos marcadores de posición. Comproba que as "
"corchetes de apertura \"{\" e de peche \"}\" dos marcadores de posición "
"coincidan. Ten en conta que para usar \"{\" ou \"}\" literal, debes "
"duplicalos como \"{{\" e \"}}\"."
#: pretix/base/forms/validators.py:72 pretix/control/views/event.py:870 #: pretix/base/forms/validators.py:72 pretix/control/views/event.py:870
#, fuzzy, python-format #, python-format
msgid "Invalid placeholder: {%(value)s}" msgid "Invalid placeholder: {%(value)s}"
msgstr "Persona(s) interesada(s) inválida(s): %(value)s" msgstr "Marcador de posición non válido: {%(value)s}"
#: pretix/base/forms/widgets.py:68 #: pretix/base/forms/widgets.py:68
#, fuzzy, python-format #, python-format
msgid "Sample: %s" msgid "Sample: %s"
msgstr "Ciudad de ejemplo" msgstr "Mostra: %s"
#: pretix/base/forms/widgets.py:71 #: pretix/base/forms/widgets.py:71
#, python-brace-format #, python-brace-format
msgid "Available placeholders: {list}" msgid "Available placeholders: {list}"
msgstr "" msgstr "Marcadores de posición dispoñibles: {list}"
#: pretix/base/forms/widgets.py:214 pretix/base/models/items.py:1655 #: pretix/base/forms/widgets.py:214 pretix/base/models/items.py:1655
#: pretix/plugins/checkinlists/exporters.py:757 #: pretix/plugins/checkinlists/exporters.py:757
#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_create.html:40 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_create.html:40
#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_update.html:54 #: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_update.html:54
#, fuzzy
msgid "Time" msgid "Time"
msgstr "Hora" msgstr "Tempo"
#: pretix/base/forms/widgets.py:234 pretix/base/forms/widgets.py:239 #: pretix/base/forms/widgets.py:234 pretix/base/forms/widgets.py:239
msgid "Business or institutional customer" msgid "Business or institutional customer"
@@ -3527,53 +3526,49 @@ msgstr "Cliente individual"
#: pretix/base/invoicing/email.py:50 #: pretix/base/invoicing/email.py:50
msgid "Email invoice directly to accounting department" msgid "Email invoice directly to accounting department"
msgstr "" msgstr ""
"Enviar factura por correo electrónico directamente ao departamento de "
"contabilidade"
#: pretix/base/invoicing/email.py:51 #: pretix/base/invoicing/email.py:51
#, fuzzy
#| msgid "Please enter the same email address twice."
msgid "" msgid ""
"If not selected, the invoice will be sent to you using the email address " "If not selected, the invoice will be sent to you using the email address "
"listed above." "listed above."
msgstr "Introduce o mesmo enderezo de correo electrónico dúas veces." msgstr ""
"Se non se selecciona, a factura enviaraseche usando o enderezo de correo "
"electrónico indicado anteriormente."
#: pretix/base/invoicing/email.py:55 #: pretix/base/invoicing/email.py:55
#, fuzzy
#| msgid "Email address verified"
msgid "Email address for invoice" msgid "Email address for invoice"
msgstr "Correo electrónico verificado" msgstr "Enderezo de correo electrónico para factura"
#: pretix/base/invoicing/email.py:91 #: pretix/base/invoicing/email.py:91
#, fuzzy
msgid "PDF via email" msgid "PDF via email"
msgstr "Vista previa del correo electrónico" msgstr "PDF por correo electrónico"
#: pretix/base/invoicing/national.py:37 #: pretix/base/invoicing/national.py:37
msgctxt "italian_invoice" msgctxt "italian_invoice"
msgid "Italian Exchange System (SdI)" msgid "Italian Exchange System (SdI)"
msgstr "" msgstr "Sistema de intercambio italiano (SdI)"
#: pretix/base/invoicing/national.py:38 #: pretix/base/invoicing/national.py:38
msgctxt "italian_invoice" msgctxt "italian_invoice"
msgid "Exchange System (SdI)" msgid "Exchange System (SdI)"
msgstr "" msgstr "Sistema de intercambio (SdI)"
#: pretix/base/invoicing/national.py:49 #: pretix/base/invoicing/national.py:49
#, fuzzy
#| msgid "Gift card code"
msgctxt "italian_invoice" msgctxt "italian_invoice"
msgid "Fiscal code" msgid "Fiscal code"
msgstr "Código da tarxeta de regalo" msgstr "Código fiscal"
#: pretix/base/invoicing/national.py:53 #: pretix/base/invoicing/national.py:53
msgctxt "italian_invoice" msgctxt "italian_invoice"
msgid "Address for certified electronic mail" msgid "Address for certified electronic mail"
msgstr "" msgstr "Enderezo para correo electrónico certificado"
#: pretix/base/invoicing/national.py:57 #: pretix/base/invoicing/national.py:57
#, fuzzy
msgctxt "italian_invoice" msgctxt "italian_invoice"
msgid "Recipient code" msgid "Recipient code"
msgstr "Destinatario" msgstr "Código do destinatario"
#: pretix/base/invoicing/national.py:81 #: pretix/base/invoicing/national.py:81
msgctxt "italian_invoice" msgctxt "italian_invoice"
@@ -3583,75 +3578,68 @@ msgid ""
"in accordance with the procedures and terms set forth in No. 89757/2018 of " "in accordance with the procedures and terms set forth in No. 89757/2018 of "
"April 30, 2018, issued by the Director of the Revenue Agency." "April 30, 2018, issued by the Director of the Revenue Agency."
msgstr "" msgstr ""
"Este documento PDF é unha copia visual da factura e non constitúe unha "
"factura para efectos do IVE. A factura emítese en formato XML, transmitida "
"de acordo cos procedementos e termos establecidos no Regulamento n.º 89757/"
"2018, do 30 de abril de 2018, emitido polo Director da Axencia Tributaria."
#: pretix/base/invoicing/pdf.py:143 #: pretix/base/invoicing/pdf.py:143
#, fuzzy, python-format #, python-format
msgctxt "invoice" msgctxt "invoice"
msgid "Page %d of %d" msgid "Page %d of %d"
msgstr "Página %d de %d" msgstr "Páxina %d de %d"
#: pretix/base/invoicing/pdf.py:384 #: pretix/base/invoicing/pdf.py:384
#, fuzzy
msgctxt "invoice" msgctxt "invoice"
msgid "Classic renderer (pretix 1.0)" msgid "Classic renderer (pretix 1.0)"
msgstr "Versión clásica (pretix 1.0)" msgstr "Renderizador clásico (pretix 1.0)"
#: pretix/base/invoicing/pdf.py:428 #: pretix/base/invoicing/pdf.py:428
#, fuzzy
msgctxt "invoice" msgctxt "invoice"
msgid "Invoice from" msgid "Invoice from"
msgstr "Factura de" msgstr "Factura dende"
#: pretix/base/invoicing/pdf.py:434 #: pretix/base/invoicing/pdf.py:434
#, fuzzy
msgctxt "invoice" msgctxt "invoice"
msgid "Invoice to" msgid "Invoice to"
msgstr "Factura para" msgstr "Factura ata"
#: pretix/base/invoicing/pdf.py:471 pretix/base/invoicing/pdf.py:1222 #: pretix/base/invoicing/pdf.py:471 pretix/base/invoicing/pdf.py:1222
#, fuzzy
msgctxt "invoice" msgctxt "invoice"
msgid "Order code" msgid "Order code"
msgstr "Código de la orden" msgstr "Código de pedido"
#: pretix/base/invoicing/pdf.py:480 pretix/base/invoicing/pdf.py:1235 #: pretix/base/invoicing/pdf.py:480 pretix/base/invoicing/pdf.py:1235
#, fuzzy
msgctxt "invoice" msgctxt "invoice"
msgid "Cancellation number" msgid "Cancellation number"
msgstr "Número de cancelación" msgstr "Número de cancelación"
#: pretix/base/invoicing/pdf.py:486 pretix/base/invoicing/pdf.py:1237 #: pretix/base/invoicing/pdf.py:486 pretix/base/invoicing/pdf.py:1237
#, fuzzy
msgctxt "invoice" msgctxt "invoice"
msgid "Original invoice" msgid "Original invoice"
msgstr "Factura original" msgstr "Factura orixinal"
#: pretix/base/invoicing/pdf.py:491 pretix/base/invoicing/pdf.py:1242 #: pretix/base/invoicing/pdf.py:491 pretix/base/invoicing/pdf.py:1242
#, fuzzy
msgctxt "invoice" msgctxt "invoice"
msgid "Invoice number" msgid "Invoice number"
msgstr "Número de factura" msgstr "Número de factura"
#: pretix/base/invoicing/pdf.py:499 pretix/base/invoicing/pdf.py:1257 #: pretix/base/invoicing/pdf.py:499 pretix/base/invoicing/pdf.py:1257
#, fuzzy
msgctxt "invoice" msgctxt "invoice"
msgid "Cancellation date" msgid "Cancellation date"
msgstr "Fecha de cancelación" msgstr "Data de cancelación"
#: pretix/base/invoicing/pdf.py:505 #: pretix/base/invoicing/pdf.py:505
#, fuzzy
msgctxt "invoice" msgctxt "invoice"
msgid "Original invoice date" msgid "Original invoice date"
msgstr "Fecha original de la factura" msgstr "Data orixinal da factura"
#: pretix/base/invoicing/pdf.py:512 pretix/base/invoicing/pdf.py:1259 #: pretix/base/invoicing/pdf.py:512 pretix/base/invoicing/pdf.py:1259
#, fuzzy
msgctxt "invoice" msgctxt "invoice"
msgid "Invoice date" msgid "Invoice date"
msgstr "Fecha de la factura" msgstr "Data da factura"
#: pretix/base/invoicing/pdf.py:528 #: pretix/base/invoicing/pdf.py:528
#, fuzzy
msgctxt "invoice" msgctxt "invoice"
msgid "Event" msgid "Event"
msgstr "Evento" msgstr "Evento"
@@ -3667,7 +3655,7 @@ msgstr ""
" ata {to_date}" " ata {to_date}"
#: pretix/base/invoicing/pdf.py:609 pretix/base/services/mail.py:512 #: pretix/base/invoicing/pdf.py:609 pretix/base/services/mail.py:512
#, fuzzy, python-brace-format #, python-brace-format
msgctxt "invoice" msgctxt "invoice"
msgid "Invoice {num}" msgid "Invoice {num}"
msgstr "Factura {num}" msgstr "Factura {num}"
@@ -3679,25 +3667,21 @@ msgid "Customer reference: {reference}"
msgstr "Referencia do cliente: {reference}" msgstr "Referencia do cliente: {reference}"
#: pretix/base/invoicing/pdf.py:669 #: pretix/base/invoicing/pdf.py:669
#, fuzzy
msgctxt "invoice" msgctxt "invoice"
msgid "Customer VAT ID" msgid "Customer VAT ID"
msgstr "Cliente VAT ID" msgstr "CIF do cliente"
#: pretix/base/invoicing/pdf.py:676 #: pretix/base/invoicing/pdf.py:676
#, fuzzy
msgctxt "invoice" msgctxt "invoice"
msgid "Beneficiary" msgid "Beneficiary"
msgstr "Beneficiario" msgstr "Beneficiario"
#: pretix/base/invoicing/pdf.py:709 #: pretix/base/invoicing/pdf.py:709
#, fuzzy
msgctxt "invoice" msgctxt "invoice"
msgid "Tax Invoice" msgid "Tax Invoice"
msgstr "Impuesto de la factura" msgstr "Factura fiscal"
#: pretix/base/invoicing/pdf.py:710 #: pretix/base/invoicing/pdf.py:710
#, fuzzy
msgctxt "invoice" msgctxt "invoice"
msgid "Invoice" msgid "Invoice"
msgstr "Factura" msgstr "Factura"
@@ -3706,7 +3690,6 @@ msgstr "Factura"
#: pretix/control/templates/pretixcontrol/order/index.html:272 #: pretix/control/templates/pretixcontrol/order/index.html:272
#: pretix/control/templates/pretixcontrol/order/mail_history.html:70 #: pretix/control/templates/pretixcontrol/order/mail_history.html:70
#: pretix/presale/templates/pretixpresale/event/order.html:244 #: pretix/presale/templates/pretixpresale/event/order.html:244
#, fuzzy
msgctxt "invoice" msgctxt "invoice"
msgid "Cancellation" msgid "Cancellation"
msgstr "Cancelación" msgstr "Cancelación"
@@ -3724,110 +3707,97 @@ msgid "Qty"
msgstr "Cant." msgstr "Cant."
#: pretix/base/invoicing/pdf.py:735 pretix/base/invoicing/pdf.py:1039 #: pretix/base/invoicing/pdf.py:735 pretix/base/invoicing/pdf.py:1039
#, fuzzy
msgctxt "invoice" msgctxt "invoice"
msgid "Tax rate" msgid "Tax rate"
msgstr "Tasa de impuestos" msgstr "Tipo impositivo"
#: pretix/base/invoicing/pdf.py:736 #: pretix/base/invoicing/pdf.py:736
#, fuzzy
msgctxt "invoice" msgctxt "invoice"
msgid "Net" msgid "Net"
msgstr "Neto" msgstr "Neto"
#: pretix/base/invoicing/pdf.py:737 #: pretix/base/invoicing/pdf.py:737
#, fuzzy
msgctxt "invoice" msgctxt "invoice"
msgid "Gross" msgid "Gross"
msgstr "Bruto" msgstr "Bruto"
#: pretix/base/invoicing/pdf.py:743 #: pretix/base/invoicing/pdf.py:743
#, fuzzy
msgctxt "invoice" msgctxt "invoice"
msgid "Amount" msgid "Amount"
msgstr "Monto" msgstr "Cantidade"
#: pretix/base/invoicing/pdf.py:870 #: pretix/base/invoicing/pdf.py:870
#, python-brace-format #, python-brace-format
msgctxt "invoice" msgctxt "invoice"
msgid "Single price: {net_price} net / {gross_price} gross" msgid "Single price: {net_price} net / {gross_price} gross"
msgstr "" msgstr "Prezo único: {net_price} neto / {gross_price} bruto"
#: pretix/base/invoicing/pdf.py:901 #: pretix/base/invoicing/pdf.py:901
#, fuzzy, python-brace-format #, python-brace-format
msgctxt "invoice" msgctxt "invoice"
msgid "Single price: {price}" msgid "Single price: {price}"
msgstr "Precio original" msgstr "Prezo único: {price}"
#: pretix/base/invoicing/pdf.py:944 pretix/base/invoicing/pdf.py:949 #: pretix/base/invoicing/pdf.py:944 pretix/base/invoicing/pdf.py:949
#, fuzzy
msgctxt "invoice" msgctxt "invoice"
msgid "Invoice total" msgid "Invoice total"
msgstr "Total de la factura" msgstr "Total da factura"
#: pretix/base/invoicing/pdf.py:958 #: pretix/base/invoicing/pdf.py:958
#, fuzzy
msgctxt "invoice" msgctxt "invoice"
msgid "Received payments" msgid "Received payments"
msgstr "Pagos recibidos" msgstr "Pagos recibidos"
#: pretix/base/invoicing/pdf.py:963 #: pretix/base/invoicing/pdf.py:963
#, fuzzy
msgctxt "invoice" msgctxt "invoice"
msgid "Outstanding payments" msgid "Outstanding payments"
msgstr "Pagos no válidos" msgstr "Pagos pendentes"
#: pretix/base/invoicing/pdf.py:980 #: pretix/base/invoicing/pdf.py:980
#, fuzzy
msgctxt "invoice" msgctxt "invoice"
msgid "Paid by gift card" msgid "Paid by gift card"
msgstr "Tarjeta de crédito" msgstr "Pago con tarxeta regalo"
#: pretix/base/invoicing/pdf.py:985 #: pretix/base/invoicing/pdf.py:985
#, fuzzy
msgctxt "invoice" msgctxt "invoice"
msgid "Remaining amount" msgid "Remaining amount"
msgstr "Monto pendiente" msgstr "Cantidade restante"
#: pretix/base/invoicing/pdf.py:1009 #: pretix/base/invoicing/pdf.py:1009
#, fuzzy, python-brace-format #, python-brace-format
msgctxt "invoice" msgctxt "invoice"
msgid "Invoice period: {daterange}" msgid "Invoice period: {daterange}"
msgstr "Rango de fechas de evento" msgstr "Período de facturación: {daterange}"
#: pretix/base/invoicing/pdf.py:1040 #: pretix/base/invoicing/pdf.py:1040
#, fuzzy
msgctxt "invoice" msgctxt "invoice"
msgid "Net value" msgid "Net value"
msgstr "Valor neto" msgstr "Valor neto"
#: pretix/base/invoicing/pdf.py:1041 #: pretix/base/invoicing/pdf.py:1041
#, fuzzy
msgctxt "invoice" msgctxt "invoice"
msgid "Gross value" msgid "Gross value"
msgstr "Valor bruto" msgstr "Valor bruto"
#: pretix/base/invoicing/pdf.py:1042 #: pretix/base/invoicing/pdf.py:1042
#, fuzzy
msgctxt "invoice" msgctxt "invoice"
msgid "Tax" msgid "Tax"
msgstr "Impuesto" msgstr "Imposto"
#: pretix/base/invoicing/pdf.py:1072 #: pretix/base/invoicing/pdf.py:1072
#, fuzzy
msgctxt "invoice" msgctxt "invoice"
msgid "Included taxes" msgid "Included taxes"
msgstr "Impuestos incluidos" msgstr "Impostos incluídos"
#: pretix/base/invoicing/pdf.py:1100 #: pretix/base/invoicing/pdf.py:1100
#, fuzzy, python-brace-format #, python-brace-format
msgctxt "invoice" msgctxt "invoice"
msgid "" msgid ""
"Using the conversion rate of 1:{rate} as published by the {authority} on " "Using the conversion rate of 1:{rate} as published by the {authority} on "
"{date}, this corresponds to:" "{date}, this corresponds to:"
msgstr "" msgstr ""
"Utilizando el tipo de conversión de 1:{rate} publicado por el Banco Central " "Usando a taxa de conversión de 1:{rate} tal e como a publicou {authority} o "
"Europeo el {date}, esto corresponde a:" "{date}, isto corresponde a:"
#: pretix/base/invoicing/pdf.py:1115 #: pretix/base/invoicing/pdf.py:1115
#, fuzzy, python-brace-format #, fuzzy, python-brace-format
@@ -3836,33 +3806,34 @@ msgid ""
"Using the conversion rate of 1:{rate} as published by the {authority} on " "Using the conversion rate of 1:{rate} as published by the {authority} on "
"{date}, the invoice total corresponds to {total}." "{date}, the invoice total corresponds to {total}."
msgstr "" msgstr ""
"Utilizando el tipo de conversión de 1:{rate} publicado por el Banco Central " "Usando a taxa de conversión de 1:{rate} publicada pola {authority} o {date}, "
"Europeo el {date}, el total de la factura corresponde a {total}." "o total da factura corresponde a {total}."
#: pretix/base/invoicing/pdf.py:1129 #: pretix/base/invoicing/pdf.py:1129
msgid "Default invoice renderer (European-style letter)" msgid "Default invoice renderer (European-style letter)"
msgstr "" msgstr "Renderizador de facturas predeterminado (carta de estilo europeo)"
#: pretix/base/invoicing/pdf.py:1218 #: pretix/base/invoicing/pdf.py:1218
#, fuzzy
msgctxt "invoice" msgctxt "invoice"
msgid "(Please quote at all times.)" msgid "(Please quote at all times.)"
msgstr "Por favor, seleccione una cuota." msgstr "(Por favor, cite en todo momento.)"
#: pretix/base/invoicing/pdf.py:1265 #: pretix/base/invoicing/pdf.py:1265
msgid "Simplified invoice renderer" msgid "Simplified invoice renderer"
msgstr "" msgstr "Renderizador de facturas simplificado"
#: pretix/base/invoicing/pdf.py:1284 #: pretix/base/invoicing/pdf.py:1284
#, fuzzy, python-brace-format #, fuzzy, python-brace-format
msgctxt "invoice" msgctxt "invoice"
msgid "Event date: {date_range}" msgid "Event date: {date_range}"
msgstr "Rango de fechas de evento" msgstr "Data do evento: {date_range}"
#: pretix/base/invoicing/peppol.py:128 #: pretix/base/invoicing/peppol.py:128
msgid "" msgid ""
"A Peppol participant ID always starts with a prefix, followed by a colon (:)." "A Peppol participant ID always starts with a prefix, followed by a colon (:)."
msgstr "" msgstr ""
"Un ID de participante de Peppol sempre comeza cun prefixo, seguido de dous "
"puntos (:)."
#: pretix/base/invoicing/peppol.py:132 #: pretix/base/invoicing/peppol.py:132
#, python-format #, python-format
@@ -3870,6 +3841,8 @@ msgid ""
"The Peppol participant ID prefix %(number)s is not known to our system. " "The Peppol participant ID prefix %(number)s is not known to our system. "
"Please reach out to us if you are sure this ID is correct." "Please reach out to us if you are sure this ID is correct."
msgstr "" msgstr ""
"O noso sistema descoñece o prefixo do ID de participante de Peppol %(number)"
"s. Ponte en contacto connosco se estás seguro de que este ID é correcto."
#: pretix/base/invoicing/peppol.py:136 #: pretix/base/invoicing/peppol.py:136
#, python-format #, python-format
@@ -3877,17 +3850,18 @@ msgid ""
"The Peppol participant ID does not match the validation rules for the prefix " "The Peppol participant ID does not match the validation rules for the prefix "
"%(number)s. Please reach out to us if you are sure this ID is correct." "%(number)s. Please reach out to us if you are sure this ID is correct."
msgstr "" msgstr ""
"O ID de participante de Peppol non coincide coas regras de validación para o "
"prefixo %(number)s. Ponte en contacto connosco se estás seguro de que este "
"ID é correcto."
#: pretix/base/invoicing/peppol.py:156 #: pretix/base/invoicing/peppol.py:156
msgid "Peppol participant ID" msgid "Peppol participant ID"
msgstr "" msgstr "Identificación de participante de Peppol"
#: pretix/base/invoicing/peppol.py:170 #: pretix/base/invoicing/peppol.py:170
#, fuzzy
#| msgid "Gift card code"
msgctxt "peppol_invoice" msgctxt "peppol_invoice"
msgid "Visual copy" msgid "Visual copy"
msgstr "Código da tarxeta de regalo" msgstr "Copia visual"
#: pretix/base/invoicing/peppol.py:175 #: pretix/base/invoicing/peppol.py:175
msgctxt "peppol_invoice" msgctxt "peppol_invoice"
@@ -3896,27 +3870,30 @@ msgid ""
"invoice for VAT purposes. The original invoice is issued in XML format and " "invoice for VAT purposes. The original invoice is issued in XML format and "
"transmitted through the Peppol network." "transmitted through the Peppol network."
msgstr "" msgstr ""
"Este documento PDF é unha copia visual da factura e non constitúe unha "
"factura para efectos do IVE. A factura orixinal emítese en formato XML e "
"transmítese a través da rede Peppol."
#: pretix/base/logentrytype_registry.py:43 #: pretix/base/logentrytype_registry.py:43
msgid "" msgid ""
"The relevant plugin is currently not active. To activate it, click here to " "The relevant plugin is currently not active. To activate it, click here to "
"go to the plugin settings." "go to the plugin settings."
msgstr "" msgstr ""
"O plugin relevante non está activo actualmente. Para activalo, fai clic aquí "
"para ir á configuración do plugin."
#: pretix/base/logentrytype_registry.py:53 #: pretix/base/logentrytype_registry.py:53
#, fuzzy
msgid "The relevant plugin is currently not active." msgid "The relevant plugin is currently not active."
msgstr "La taquilla seleccionada no está disponible en este momento." msgstr "O plugin relevante non está activo actualmente."
#: pretix/base/logentrytypes.py:49 #: pretix/base/logentrytypes.py:49
#, fuzzy
msgid "(deleted)" msgid "(deleted)"
msgstr "Eliminar" msgstr "(eliminado)"
#: pretix/base/logentrytypes.py:78 #: pretix/base/logentrytypes.py:78
#, fuzzy, python-brace-format #, python-brace-format
msgid "Order {val}" msgid "Order {val}"
msgstr "Orden {val}" msgstr "Orde {val}"
#: pretix/base/logentrytypes.py:90 #: pretix/base/logentrytypes.py:90
#, fuzzy, python-brace-format #, fuzzy, python-brace-format

View File

@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-11-27 13:57+0000\n" "POT-Creation-Date: 2025-11-27 13:57+0000\n"
"PO-Revision-Date: 2025-11-26 17:00+0000\n" "PO-Revision-Date: 2025-12-05 18:00+0000\n"
"Last-Translator: Yasunobu YesNo Kawaguchi <kawaguti@gmail.com>\n" "Last-Translator: Yasunobu YesNo Kawaguchi <kawaguti@gmail.com>\n"
"Language-Team: Japanese <https://translate.pretix.eu/projects/pretix/pretix/" "Language-Team: Japanese <https://translate.pretix.eu/projects/pretix/pretix/"
"ja/>\n" "ja/>\n"
@@ -2149,7 +2149,7 @@ msgstr "クライアントID"
#: pretix/base/exporters/items.py:91 pretix/base/models/items.py:667 #: pretix/base/exporters/items.py:91 pretix/base/models/items.py:667
#: pretix/base/models/items.py:1168 #: pretix/base/models/items.py:1168
msgid "Original price" msgid "Original price"
msgstr "元の価格" msgstr "通常価格"
#: pretix/base/exporters/items.py:92 pretix/base/models/items.py:684 #: pretix/base/exporters/items.py:92 pretix/base/models/items.py:684
msgid "This product is a gift card" msgid "This product is a gift card"
@@ -22741,9 +22741,8 @@ msgid ""
"This position has been created with a voucher with a limited budget. If you " "This position has been created with a voucher with a limited budget. If you "
"change the price or item, the discount will still be calculated from the " "change the price or item, the discount will still be calculated from the "
"original price at the time of purchase." "original price at the time of purchase."
msgstr "" msgstr "このポジションは限られた予算のバウチャーで作成されました。価格やアイテムを変"
"このポジションは限られた予算のバウチャーで作成されました。価格やアイテムを変" "更しても、割引は購入時の通常価格から計算されます。"
"更しても、割引は購入時の元の価格から計算されます。"
#: pretix/control/templates/pretixcontrol/order/change.html:101 #: pretix/control/templates/pretixcontrol/order/change.html:101
#: pretix/control/templates/pretixcontrol/order/change.html:413 #: pretix/control/templates/pretixcontrol/order/change.html:413
@@ -33770,7 +33769,7 @@ msgstr "バリエーションを表示する"
#: pretix/presale/templates/pretixpresale/event/voucher.html:147 #: pretix/presale/templates/pretixpresale/event/voucher.html:147
#: pretix/presale/templates/pretixpresale/event/voucher.html:304 #: pretix/presale/templates/pretixpresale/event/voucher.html:304
msgid "Original price:" msgid "Original price:"
msgstr "元の価格:" msgstr "通常価格:"
#: pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html:136 #: pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html:136
#: pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html:278 #: pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html:278

View File

@@ -7,16 +7,16 @@ msgstr ""
"Project-Id-Version: 1\n" "Project-Id-Version: 1\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-11-27 13:57+0000\n" "POT-Creation-Date: 2025-11-27 13:57+0000\n"
"PO-Revision-Date: 2025-10-26 18:00+0000\n" "PO-Revision-Date: 2025-12-08 07:00+0000\n"
"Last-Translator: Jan Van Haver <jan.van.haver@gmail.com>\n" "Last-Translator: Ruud Hendrickx <ruud@leckxicon.eu>\n"
"Language-Team: Dutch <https://translate.pretix.eu/projects/pretix/pretix/nl/" "Language-Team: Dutch <https://translate.pretix.eu/projects/pretix/pretix/nl/>"
">\n" "\n"
"Language: nl\n" "Language: nl\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.14\n" "X-Generator: Weblate 5.14.3\n"
#: pretix/_base_settings.py:87 #: pretix/_base_settings.py:87
msgid "English" msgid "English"
@@ -44,7 +44,7 @@ msgstr "Catalaans"
#: pretix/_base_settings.py:93 #: pretix/_base_settings.py:93
msgid "Chinese (simplified)" msgid "Chinese (simplified)"
msgstr "Chinees (versimpeld)" msgstr "Chinees (vereenvoudigd)"
#: pretix/_base_settings.py:94 #: pretix/_base_settings.py:94
msgid "Chinese (traditional)" msgid "Chinese (traditional)"

View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-11-27 13:57+0000\n" "POT-Creation-Date: 2025-11-27 13:57+0000\n"
"PO-Revision-Date: 2024-02-13 16:00+0000\n" "PO-Revision-Date: 2025-12-08 07:00+0000\n"
"Last-Translator: Wessel Stam <info@wesselstam.nl>\n" "Last-Translator: Ruud Hendrickx <ruud@leckxicon.eu>\n"
"Language-Team: Dutch (informal) <https://translate.pretix.eu/projects/pretix/" "Language-Team: Dutch (informal) <https://translate.pretix.eu/projects/pretix/"
"pretix/nl_Informal/>\n" "pretix/nl_Informal/>\n"
"Language: nl_Informal\n" "Language: nl_Informal\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.3.1\n" "X-Generator: Weblate 5.14.3\n"
#: pretix/_base_settings.py:87 #: pretix/_base_settings.py:87
msgid "English" msgid "English"
@@ -37,15 +37,15 @@ msgstr "Arabisch"
#: pretix/_base_settings.py:91 #: pretix/_base_settings.py:91
msgid "Basque" msgid "Basque"
msgstr "" msgstr "Baskisch"
#: pretix/_base_settings.py:92 #: pretix/_base_settings.py:92
msgid "Catalan" msgid "Catalan"
msgstr "" msgstr "Catalaans"
#: pretix/_base_settings.py:93 #: pretix/_base_settings.py:93
msgid "Chinese (simplified)" msgid "Chinese (simplified)"
msgstr "Chinees (versimpeld)" msgstr "Chinees (vereenvoudigd)"
#: pretix/_base_settings.py:94 #: pretix/_base_settings.py:94
msgid "Chinese (traditional)" msgid "Chinese (traditional)"
@@ -57,7 +57,7 @@ msgstr "Tsjechisch"
#: pretix/_base_settings.py:96 #: pretix/_base_settings.py:96
msgid "Croatian" msgid "Croatian"
msgstr "" msgstr "Kroatisch"
#: pretix/_base_settings.py:97 #: pretix/_base_settings.py:97
msgid "Danish" msgid "Danish"
@@ -89,7 +89,7 @@ msgstr "Grieks"
#: pretix/_base_settings.py:104 #: pretix/_base_settings.py:104
msgid "Hebrew" msgid "Hebrew"
msgstr "" msgstr "Hebreeuws"
#: pretix/_base_settings.py:105 #: pretix/_base_settings.py:105
msgid "Indonesian" msgid "Indonesian"
@@ -101,7 +101,7 @@ msgstr "Italiaans"
#: pretix/_base_settings.py:107 #: pretix/_base_settings.py:107
msgid "Japanese" msgid "Japanese"
msgstr "" msgstr "Japans"
#: pretix/_base_settings.py:108 #: pretix/_base_settings.py:108
msgid "Latvian" msgid "Latvian"
@@ -133,11 +133,11 @@ msgstr "Russisch"
#: pretix/_base_settings.py:115 #: pretix/_base_settings.py:115
msgid "Slovak" msgid "Slovak"
msgstr "" msgstr "Slowaaks"
#: pretix/_base_settings.py:116 #: pretix/_base_settings.py:116
msgid "Swedish" msgid "Swedish"
msgstr "" msgstr "Zweeds"
#: pretix/_base_settings.py:117 #: pretix/_base_settings.py:117
msgid "Spanish" msgid "Spanish"
@@ -145,7 +145,7 @@ msgstr "Spaans"
#: pretix/_base_settings.py:118 #: pretix/_base_settings.py:118
msgid "Spanish (Latin America)" msgid "Spanish (Latin America)"
msgstr "" msgstr "Spaans (Latijns-Amerika)"
#: pretix/_base_settings.py:119 #: pretix/_base_settings.py:119
msgid "Turkish" msgid "Turkish"
@@ -261,7 +261,7 @@ msgstr ""
#: pretix/api/serializers/event.py:234 pretix/api/serializers/event.py:554 #: pretix/api/serializers/event.py:234 pretix/api/serializers/event.py:554
#, python-brace-format #, python-brace-format
msgid "Meta data property '{name}' does not exist." msgid "Meta data property '{name}' does not exist."
msgstr "Metadataeigenschap '{name}' bestaat niet." msgstr "Metadata-eigenschap '{name}' bestaat niet."
#: pretix/api/serializers/event.py:237 pretix/api/serializers/event.py:557 #: pretix/api/serializers/event.py:237 pretix/api/serializers/event.py:557
#, python-brace-format #, python-brace-format
@@ -32970,7 +32970,7 @@ msgstr ""
#: pretix/plugins/reports/exporters.py:257 #: pretix/plugins/reports/exporters.py:257
msgctxt "export_category" msgctxt "export_category"
msgid "Analysis" msgid "Analysis"
msgstr "" msgstr "Analyse"
#: pretix/plugins/reports/accountingreport.py:83 #: pretix/plugins/reports/accountingreport.py:83
#, fuzzy #, fuzzy

View File

@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-11-27 13:57+0000\n" "POT-Creation-Date: 2025-11-27 13:57+0000\n"
"PO-Revision-Date: 2025-09-10 05:00+0000\n" "PO-Revision-Date: 2025-12-11 01:00+0000\n"
"Last-Translator: Renne Rocha <renne@rocha.dev.br>\n" "Last-Translator: Renne Rocha <renne@rocha.dev.br>\n"
"Language-Team: Portuguese (Brazil) <https://translate.pretix.eu/projects/" "Language-Team: Portuguese (Brazil) <https://translate.pretix.eu/projects/"
"pretix/pretix/pt_BR/>\n" "pretix/pretix/pt_BR/>\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n" "Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.13.2\n" "X-Generator: Weblate 5.14.3\n"
#: pretix/_base_settings.py:87 #: pretix/_base_settings.py:87
msgid "English" msgid "English"
@@ -253,9 +253,8 @@ msgid ""
"Events cannot be created as 'live'. Quotas and payment must be added to the " "Events cannot be created as 'live'. Quotas and payment must be added to the "
"event before sales can go live." "event before sales can go live."
msgstr "" msgstr ""
"Os eventos não podem ser criados como 'ativo'. As cotas e métodos de " "Eventos não podem ser criados como 'ativo'. Cotas e métodos de pagamento "
"pagamento devem ser adicionados ao evento antes que as vendas possam ser " "devem ser adicionados ao evento antes que as vendas se iniciem."
"iniciadas."
#: pretix/api/serializers/event.py:234 pretix/api/serializers/event.py:554 #: pretix/api/serializers/event.py:234 pretix/api/serializers/event.py:554
#, python-brace-format #, python-brace-format
@@ -358,7 +357,8 @@ msgstr ""
#: pretix/api/serializers/item.py:587 pretix/control/forms/item.py:177 #: pretix/api/serializers/item.py:587 pretix/control/forms/item.py:177
msgid "Question cannot depend on a question asked during check-in." msgid "Question cannot depend on a question asked during check-in."
msgstr "A pergunta não pode depender de uma pergunta feita durante o check-in." msgstr ""
"A pergunta não pode depender de outra pergunta feita durante o check-in."
#: pretix/api/serializers/item.py:592 pretix/control/forms/item.py:182 #: pretix/api/serializers/item.py:592 pretix/control/forms/item.py:182
msgid "Circular dependency between questions detected." msgid "Circular dependency between questions detected."
@@ -816,28 +816,22 @@ msgstr ""
"confirme primeiro o endereço de email na sua conta." "confirme primeiro o endereço de email na sua conta."
#: pretix/base/datasync/datasync.py:263 #: pretix/base/datasync/datasync.py:263
#, fuzzy, python-brace-format #, python-brace-format
#| msgid ""
#| "Field \"{field_name}\" is not valid for {available_inputs}. Please check "
#| "your {provider_name} settings."
msgid "" msgid ""
"Field \"{field_name}\" does not exist. Please check your {provider_name} " "Field \"{field_name}\" does not exist. Please check your {provider_name} "
"settings." "settings."
msgstr "" msgstr ""
"O campo \"{field_name}\" não é válido para {available_inputs}. Verifique as " "O campo \"{field_name}\" não existe. Por favor, verifique as configurações "
"configurações de {provider_name}." "de {provider_name}."
#: pretix/base/datasync/datasync.py:270 #: pretix/base/datasync/datasync.py:270
#, fuzzy, python-brace-format #, python-brace-format
#| msgid ""
#| "Field \"{field_name}\" is not valid for {available_inputs}. Please check "
#| "your {provider_name} settings."
msgid "" msgid ""
"Field \"{field_name}\" requires {required_input}, but only got " "Field \"{field_name}\" requires {required_input}, but only got "
"{available_inputs}. Please check your {provider_name} settings." "{available_inputs}. Please check your {provider_name} settings."
msgstr "" msgstr ""
"O campo \"{field_name}\" não é válido para {available_inputs}. Verifique as " "Campo \"{field_name}\" exige {required_input}, mas apenas {available_inputs} "
"configurações de {provider_name}." "foram fornecidas. Por favor, verifique as configurações de {provider_name}."
#: pretix/base/datasync/datasync.py:281 #: pretix/base/datasync/datasync.py:281
#, python-brace-format #, python-brace-format
@@ -2137,7 +2131,7 @@ msgstr "Comprar este produto requer aprovação"
#: pretix/base/exporters/items.py:85 pretix/base/models/items.py:627 #: pretix/base/exporters/items.py:85 pretix/base/models/items.py:627
msgid "Only sell this product as part of a bundle" msgid "Only sell this product as part of a bundle"
msgstr "Disponível apenas como parte de um pacote" msgstr "Venda este produto apenas como parte de um pacote"
#: pretix/base/exporters/items.py:86 pretix/base/models/items.py:634 #: pretix/base/exporters/items.py:86 pretix/base/models/items.py:634
msgid "Allow product to be canceled or changed" msgid "Allow product to be canceled or changed"
@@ -2839,7 +2833,7 @@ msgstr "Código de Status"
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_assign.html:25 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/import_assign.html:25
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:13 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:13
msgid "Amount" msgid "Amount"
msgstr "Valor" msgstr "Quantidade"
#: pretix/base/exporters/orderlist.py:1098 #: pretix/base/exporters/orderlist.py:1098
#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:102 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:102
@@ -3286,10 +3280,8 @@ msgid "Repeat password"
msgstr "Repita a senha" msgstr "Repita a senha"
#: pretix/base/forms/auth.py:220 pretix/base/forms/user.py:99 #: pretix/base/forms/auth.py:220 pretix/base/forms/user.py:99
#, fuzzy
#| msgid "Email address"
msgid "Your email address" msgid "Your email address"
msgstr "Endereço de email" msgstr "Seu endereço de e-mail"
#: pretix/base/forms/auth.py:327 pretix/control/forms/orders.py:1041 #: pretix/base/forms/auth.py:327 pretix/control/forms/orders.py:1041
#: pretix/control/templates/pretixcontrol/shredder/download.html:53 #: pretix/control/templates/pretixcontrol/shredder/download.html:53
@@ -3400,6 +3392,8 @@ msgid ""
"If you enter an invoice address, you also need to select an invoice " "If you enter an invoice address, you also need to select an invoice "
"transmission method." "transmission method."
msgstr "" msgstr ""
"Se você informar um endereço para a fatura, você também deverá selecionar um "
"método para transmissão da fatura."
#: pretix/base/forms/questions.py:1385 #: pretix/base/forms/questions.py:1385
msgid "" msgid ""
@@ -3414,6 +3408,8 @@ msgid ""
"The selected type of invoice transmission requires a field that is currently " "The selected type of invoice transmission requires a field that is currently "
"not available, please reach out to the organizer." "not available, please reach out to the organizer."
msgstr "" msgstr ""
"O tipo de transmissão de fatura selecionado exige um campo que não está "
"disponível atualmente. Por favor, entre em contato com a organização."
#: pretix/base/forms/questions.py:1398 #: pretix/base/forms/questions.py:1398
msgid "This field is required for the selected type of invoice transmission." msgid "This field is required for the selected type of invoice transmission."
@@ -3433,10 +3429,8 @@ msgstr ""
"as exibições de eventos, o fuso horário do evento é usado." "as exibições de eventos, o fuso horário do evento é usado."
#: pretix/base/forms/user.py:77 #: pretix/base/forms/user.py:77
#, fuzzy
#| msgid "Attendee email address"
msgid "Change email address" msgid "Change email address"
msgstr "Email do participante" msgstr "Alterar endereço de e-mail"
#: pretix/base/forms/user.py:83 #: pretix/base/forms/user.py:83
msgid "Device name" msgid "Device name"
@@ -3486,16 +3480,12 @@ msgstr ""
"um diferente." "um diferente."
#: pretix/base/forms/user.py:179 #: pretix/base/forms/user.py:179
#, fuzzy
#| msgid "Email address"
msgid "Old email address" msgid "Old email address"
msgstr "Endereço de email" msgstr "Endereço de e-mail antigo"
#: pretix/base/forms/user.py:180 #: pretix/base/forms/user.py:180
#, fuzzy
#| msgid "Email address"
msgid "New email address" msgid "New email address"
msgstr "Endereço de email" msgstr "Endereço de e-mail novo"
#: pretix/base/forms/validators.py:51 #: pretix/base/forms/validators.py:51
msgid "" msgid ""
@@ -3540,22 +3530,17 @@ msgid "Individual customer"
msgstr "Cliente pessoa física" msgstr "Cliente pessoa física"
#: pretix/base/invoicing/email.py:50 #: pretix/base/invoicing/email.py:50
#, fuzzy
#| msgid ""
#| "To send the invoice directly to your accounting department, please enter "
#| "their email address:"
msgid "Email invoice directly to accounting department" msgid "Email invoice directly to accounting department"
msgstr "" msgstr ""
"Para enviar a fatura diretamente ao seu departamento de contabilidade, " "Enviar e-mail com a fatura diretamente para departamento de contabilidade"
"insira o endereço de e-mail:"
#: pretix/base/invoicing/email.py:51 #: pretix/base/invoicing/email.py:51
#, fuzzy
#| msgid "The invoice was sent to the designated email address."
msgid "" msgid ""
"If not selected, the invoice will be sent to you using the email address " "If not selected, the invoice will be sent to you using the email address "
"listed above." "listed above."
msgstr "A fatura foi enviada para o endereço de e-mail designado." msgstr ""
"Se não selecionado, a fatura será enviada para o endereço de e-mail listado "
"a seguir."
#: pretix/base/invoicing/email.py:55 #: pretix/base/invoicing/email.py:55
msgid "Email address for invoice" msgid "Email address for invoice"
@@ -3778,12 +3763,10 @@ msgid "Remaining amount"
msgstr "Valor restante" msgstr "Valor restante"
#: pretix/base/invoicing/pdf.py:1009 #: pretix/base/invoicing/pdf.py:1009
#, fuzzy, python-brace-format #, python-brace-format
#| msgctxt "invoice"
#| msgid "Event date: {date_range}"
msgctxt "invoice" msgctxt "invoice"
msgid "Invoice period: {daterange}" msgid "Invoice period: {daterange}"
msgstr "Data do evento: {date_range}" msgstr "Período da fatura: {daterange}"
#: pretix/base/invoicing/pdf.py:1040 #: pretix/base/invoicing/pdf.py:1040
msgctxt "invoice" msgctxt "invoice"
@@ -3868,12 +3851,9 @@ msgid "Peppol participant ID"
msgstr "" msgstr ""
#: pretix/base/invoicing/peppol.py:170 #: pretix/base/invoicing/peppol.py:170
#, fuzzy
#| msgctxt "italian_invoice"
#| msgid "Fiscal code"
msgctxt "peppol_invoice" msgctxt "peppol_invoice"
msgid "Visual copy" msgid "Visual copy"
msgstr "Código fiscal" msgstr "Cópia visual"
#: pretix/base/invoicing/peppol.py:175 #: pretix/base/invoicing/peppol.py:175
msgctxt "peppol_invoice" msgctxt "peppol_invoice"
@@ -4357,10 +4337,8 @@ msgid ""
msgstr "" msgstr ""
#: pretix/base/models/auth.py:392 #: pretix/base/models/auth.py:392
#, fuzzy
#| msgid "Confirmation code"
msgid "pretix confirmation code" msgid "pretix confirmation code"
msgstr "Código de confirmação" msgstr "código de confirmação do pretix"
#: pretix/base/models/auth.py:435 #: pretix/base/models/auth.py:435
#: pretix/control/templates/pretixcontrol/auth/forgot.html:7 #: pretix/control/templates/pretixcontrol/auth/forgot.html:7
@@ -4862,11 +4840,11 @@ msgid ""
"you can also choose to use a random value. This will be used in URLs, order " "you can also choose to use a random value. This will be used in URLs, order "
"codes, invoice numbers, and bank transfer references." "codes, invoice numbers, and bank transfer references."
msgstr "" msgstr ""
"Deve ser curts, conter apenas letras minúsculas, números, pontos e traços, e " "Deve conter apenas letras minúsculas, números, pontos e traços, sendo "
"ser exclusiva entre seus eventos. Recomendamos algum tipo de abreviação ou " "exclusiva para suas eventos. Recomendamos uma abreviação ou data com menos "
"uma data com menos de 10 caracteres que sejam facilmente lembradas, mas você " "de 10 caracteres e que seja facilmente lembrada, mas você também pode usar "
"também pode usar um valor aleatório. Esta informação será usada em URLs, " "um valor aleatório. Esta informação será usada em URLs, códigos de pedido, "
"códigos de pedido, números de fatura e referências de transferência bancária." "número de faturas e referências de transações bancárias."
#: pretix/base/models/event.py:607 pretix/base/models/organizer.py:89 #: pretix/base/models/event.py:607 pretix/base/models/organizer.py:89
msgid "The slug may only contain letters, numbers, dots and dashes." msgid "The slug may only contain letters, numbers, dots and dashes."
@@ -5394,24 +5372,16 @@ msgstr ""
"não tiver variações, este preço será usado." "não tiver variações, este preço será usado."
#: pretix/base/models/items.py:506 #: pretix/base/models/items.py:506
#, fuzzy
#| msgid ""
#| "If this option is active, your users can choose the price themselves. The "
#| "price configured above is then interpreted as the minimum price a user "
#| "has to enter. You could use this e.g. to collect additional donations for "
#| "your event. This is currently not supported for products that are bought "
#| "as an add-on to other products."
msgid "" msgid ""
"If this option is active, your users can choose the price themselves. The " "If this option is active, your users can choose the price themselves. The "
"price configured above is then interpreted as the minimum price a user has " "price configured above is then interpreted as the minimum price a user has "
"to enter. You could use this e.g. to collect additional donations for your " "to enter. You could use this e.g. to collect additional donations for your "
"event." "event."
msgstr "" msgstr ""
"Se esta opção estiver ativa, seus usuários podem escolher o próprio preço. O " "Se esta opção está selecionada, os usuários poderão pagar o preço que "
"preço configurado acima é então interpretado como o preço mínimo que um " "desejarem. O preço padrão acima será interpretado como o preço mínimo que o "
"usuário deve inserir. Você pode usar isso, por exemplo, para coletar doações " "usuário deverá pagar. Você pode usar esta opção, por exemplo, para coletar "
"adicionais para o seu evento. No momento, isto não é suportado por produtos " "doações adicionais para o seu evento."
"comprados como um complemento de outros produtos."
#: pretix/base/models/items.py:511 pretix/base/models/items.py:1175 #: pretix/base/models/items.py:511 pretix/base/models/items.py:1175
msgid "Suggested price" msgid "Suggested price"
@@ -6298,9 +6268,6 @@ msgstr ""
"insira um valor possível por linha." "insira um valor possível por linha."
#: pretix/base/models/items.py:2310 #: pretix/base/models/items.py:2310
#, fuzzy
#| msgctxt "timeframe"
#| msgid "Start"
msgid "Start" msgid "Start"
msgstr "Início" msgstr "Início"
@@ -7912,10 +7879,8 @@ msgid "123.45 EUR"
msgstr "123.45 BRL" msgstr "123.45 BRL"
#: pretix/base/pdf.py:166 #: pretix/base/pdf.py:166
#, fuzzy
#| msgid "Price including add-ons"
msgid "Price including bundled products" msgid "Price including bundled products"
msgstr "Preço incluindo complementos" msgstr "Preços incluindo produtos empacotados"
#: pretix/base/pdf.py:175 #: pretix/base/pdf.py:175
#, fuzzy #, fuzzy
@@ -9878,10 +9843,8 @@ msgid "Require a phone number per order"
msgstr "Exigir um número de telefone por pedido" msgstr "Exigir um número de telefone por pedido"
#: pretix/base/settings.py:482 #: pretix/base/settings.py:482
#, fuzzy
#| msgid "including all taxes"
msgid "Rounding of taxes" msgid "Rounding of taxes"
msgstr "incluindo todos os impostos" msgstr "Arredondamento dos impostos"
#: pretix/base/settings.py:486 #: pretix/base/settings.py:486
msgid "" msgid ""
@@ -10424,18 +10387,12 @@ msgid "Automatic, but prefer invoice date over event date"
msgstr "" msgstr ""
#: pretix/base/settings.py:1142 pretix/base/settings.py:1153 #: pretix/base/settings.py:1142 pretix/base/settings.py:1153
#, fuzzy
#| msgctxt "invoice"
#| msgid "Invoice date"
msgid "Invoice date" msgid "Invoice date"
msgstr "Data da fatura" msgstr "Data da fatura"
#: pretix/base/settings.py:1146 #: pretix/base/settings.py:1146
#, fuzzy
#| msgctxt "subevent"
#| msgid "Date ordering"
msgid "Date of service" msgid "Date of service"
msgstr "Ordenação de datas" msgstr "Data do serviço"
#: pretix/base/settings.py:1155 #: pretix/base/settings.py:1155
msgid "" msgid ""
@@ -11299,8 +11256,8 @@ msgstr "Endereço de contato"
#: pretix/base/settings.py:2161 pretix/control/forms/event.py:1824 #: pretix/base/settings.py:2161 pretix/control/forms/event.py:1824
msgid "We'll show this publicly to allow attendees to contact you." msgid "We'll show this publicly to allow attendees to contact you."
msgstr "" msgstr ""
"Mostraremos isso publicamente para permitir que os participantes entrem em " "Será exibido publicamente para que participantes possam entrar em contato "
"contato com você." "com você."
#: pretix/base/settings.py:2169 pretix/control/forms/event.py:1816 #: pretix/base/settings.py:2169 pretix/control/forms/event.py:1816
msgid "Imprint URL" msgid "Imprint URL"
@@ -12166,17 +12123,7 @@ msgid "Invoice {invoice_number}"
msgstr "Fatura {invoice_number}" msgstr "Fatura {invoice_number}"
#: pretix/base/settings.py:2789 #: pretix/base/settings.py:2789
#, fuzzy, python-brace-format #, python-brace-format
#| msgid ""
#| "Hello,\n"
#| "\n"
#| "somebody requested a list of your orders for {event}.\n"
#| "The list is as follows:\n"
#| "\n"
#| "{orders}\n"
#| "\n"
#| "Best regards, \n"
#| "Your {event} team"
msgid "" msgid ""
"Hello,\n" "Hello,\n"
"\n" "\n"
@@ -12189,12 +12136,12 @@ msgid ""
msgstr "" msgstr ""
"Olá,\n" "Olá,\n"
"\n" "\n"
"Segue anexo uma nova fatura para o pedido {code} para {evento} . Este pedido " "Em anexo você encontrará uma nova fatura para o pedido {code} para {event}. "
"foi feito por {order_email}.\n" "Este pedido foi feito por {order_email}.\n"
"\n" "\n"
"Atenciosamente, \n" "Atenciosamente, \n"
"\n" "\n"
"Equipe organizadora de {event}" "Organização {event}"
#: pretix/base/settings.py:2807 pretix/base/settings.py:2823 #: pretix/base/settings.py:2807 pretix/base/settings.py:2823
#, python-brace-format #, python-brace-format
@@ -13256,13 +13203,13 @@ msgid "Contact:"
msgstr "Contato:" msgstr "Contato:"
#: pretix/base/templates/pretixbase/email/order_details.html:54 #: pretix/base/templates/pretixbase/email/order_details.html:54
#, fuzzy, python-format #, python-format
#| msgid ""
#| "You are receiving this email because you placed an order for {event}."
msgid "" msgid ""
"You are receiving this email because you placed an order for " "You are receiving this email because you placed an order for "
"<strong>%(event)s</strong>." "<strong>%(event)s</strong>."
msgstr "Você está recebendo este email porque fez um pedido para {event}." msgstr ""
"Você está recebendo este email por ter realizado um pedido para <strong>%"
"(event)s</strong>."
#: pretix/base/templates/pretixbase/email/order_details.html:93 #: pretix/base/templates/pretixbase/email/order_details.html:93
#: pretix/control/templates/pretixcontrol/organizers/customer.html:23 #: pretix/control/templates/pretixcontrol/organizers/customer.html:23
@@ -13937,7 +13884,7 @@ msgstr "Padrão ({value})"
#: pretix/control/forms/event.py:380 #: pretix/control/forms/event.py:380
msgid "The currency cannot be changed because orders already exist." msgid "The currency cannot be changed because orders already exist."
msgstr "" msgstr "A moeda não pode ser alterada pois já foram realizados pedidos."
#: pretix/control/forms/event.py:391 pretix/control/forms/event.py:404 #: pretix/control/forms/event.py:391 pretix/control/forms/event.py:404
msgid "Domain" msgid "Domain"
@@ -14023,21 +13970,16 @@ msgstr ""
"que o cartão-presente é emitido." "que o cartão-presente é emitido."
#: pretix/control/forms/event.py:813 #: pretix/control/forms/event.py:813
#, fuzzy
#| msgid "including all taxes"
msgid "Prices including tax" msgid "Prices including tax"
msgstr "incluindo todos os impostos" msgstr "Preços incluindo impostos"
#: pretix/control/forms/event.py:814 #: pretix/control/forms/event.py:814
msgid "Recommended if you sell tickets at least partly to consumers." msgid "Recommended if you sell tickets at least partly to consumers."
msgstr "" msgstr ""
#: pretix/control/forms/event.py:818 #: pretix/control/forms/event.py:818
#, fuzzy
#| msgctxt "reporting_timeframe"
#| msgid "All future (excluding today)"
msgid "Prices excluding tax" msgid "Prices excluding tax"
msgstr "Todos os futuros (excluindo hoje)" msgstr "Preços excluindo impostos"
#: pretix/control/forms/event.py:819 #: pretix/control/forms/event.py:819
msgid "Recommended only if you sell tickets primarily to business customers." msgid "Recommended only if you sell tickets primarily to business customers."
@@ -17401,19 +17343,14 @@ msgid "Your account has been disabled."
msgstr "Sua conta foi desativada." msgstr "Sua conta foi desativada."
#: pretix/control/logdisplay.py:672 #: pretix/control/logdisplay.py:672
#, fuzzy, python-brace-format #, python-brace-format
#| msgid ""
#| "The email address has been changed from \"{old_email}\" to \"{new_email}"
#| "\"."
msgid "Your email address has been changed from {old_email} to {email}." msgid "Your email address has been changed from {old_email} to {email}."
msgstr "" msgstr "Seu endereço de email foi modificado de {old_email} para {email}."
"O endereço de e-mail foi alterado de \"{old_email}\" para \"{new_email}\"."
#: pretix/control/logdisplay.py:673 #: pretix/control/logdisplay.py:673
#, fuzzy, python-brace-format #, python-brace-format
#| msgid "Your email address has been updated."
msgid "Your email address {email} has been confirmed." msgid "Your email address {email} has been confirmed."
msgstr "Seu endereço de email foi atualizado." msgstr "Seu endereço de e-mail {email} foi confirmado."
#: pretix/control/logdisplay.py:685 #: pretix/control/logdisplay.py:685
#, python-brace-format #, python-brace-format
@@ -19690,6 +19627,20 @@ msgid ""
"Best regards,\n" "Best regards,\n"
"Your pretix team\n" "Your pretix team\n"
msgstr "" msgstr ""
"Olá,\n"
"\n"
"%(reason)s\n"
"\n"
" %(code)s\n"
"\n"
"Por favor, nunca forneça este código para outra pessoa. Nosso time de "
"suporte nunca irá solicitar este código.\n"
"\n"
"Se você não solicitou este código, por favor entre em contato conosco "
"imediatamente.\n"
"\n"
"Atenciosamente,\n"
"Time pretix\n"
#: pretix/control/templates/pretixcontrol/email/email_setup.txt:1 #: pretix/control/templates/pretixcontrol/email/email_setup.txt:1
#, python-format #, python-format
@@ -21314,10 +21265,8 @@ msgid "with custom rules"
msgstr "Regras personalizadas" msgstr "Regras personalizadas"
#: pretix/control/templates/pretixcontrol/event/tax.html:110 #: pretix/control/templates/pretixcontrol/event/tax.html:110
#, fuzzy
#| msgid "Base settings"
msgid "Tax settings" msgid "Tax settings"
msgstr "Configurações base" msgstr "Configurações de impostos"
#: pretix/control/templates/pretixcontrol/event/tax_delete.html:4 #: pretix/control/templates/pretixcontrol/event/tax_delete.html:4
#: pretix/control/templates/pretixcontrol/event/tax_delete.html:6 #: pretix/control/templates/pretixcontrol/event/tax_delete.html:6
@@ -21980,6 +21929,9 @@ msgid ""
"your event. By default, we will only offer ticket downloads for these " "your event. By default, we will only offer ticket downloads for these "
"products." "products."
msgstr "" msgstr ""
"Cada compra deste produto representa uma pessoa que terá permissão de entrar "
"no seu evento. Por padrão, só oferecemos o download de ingressos para estes "
"produtos."
#: pretix/control/templates/pretixcontrol/item/create.html:33 #: pretix/control/templates/pretixcontrol/item/create.html:33
#: pretix/control/templates/pretixcontrol/item/index.html:41 #: pretix/control/templates/pretixcontrol/item/index.html:41
@@ -26144,7 +26096,7 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/shredder/download.html:29 #: pretix/control/templates/pretixcontrol/shredder/download.html:29
msgid "Download data" msgid "Download data"
msgstr "" msgstr "Baixar dados"
#: pretix/control/templates/pretixcontrol/shredder/download.html:34 #: pretix/control/templates/pretixcontrol/shredder/download.html:34
msgid "Step 2: Confirm deletion" msgid "Step 2: Confirm deletion"
@@ -26475,7 +26427,7 @@ msgstr "Adicionar um dispositivo de autenticação de dois fatores"
#: pretix/control/templates/pretixcontrol/user/2fa_confirm_totp.html:8 #: pretix/control/templates/pretixcontrol/user/2fa_confirm_totp.html:8
msgid "To set up this device, please follow the following steps:" msgid "To set up this device, please follow the following steps:"
msgstr "" msgstr "Para configurar este dispositivo, por favor siga os passos a seguir:"
#: pretix/control/templates/pretixcontrol/user/2fa_confirm_totp.html:12 #: pretix/control/templates/pretixcontrol/user/2fa_confirm_totp.html:12
msgid "Download the Google Authenticator application to your phone:" msgid "Download the Google Authenticator application to your phone:"
@@ -26901,11 +26853,11 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/user/staff_session_edit.html:6 #: pretix/control/templates/pretixcontrol/user/staff_session_edit.html:6
msgid "Session notes" msgid "Session notes"
msgstr "" msgstr "Notas de sessão"
#: pretix/control/templates/pretixcontrol/user/staff_session_edit.html:17 #: pretix/control/templates/pretixcontrol/user/staff_session_edit.html:17
msgid "Audit log" msgid "Audit log"
msgstr "" msgstr "Log de auditoria"
#: pretix/control/templates/pretixcontrol/user/staff_session_edit.html:30 #: pretix/control/templates/pretixcontrol/user/staff_session_edit.html:30
msgid "Method" msgid "Method"
@@ -27949,7 +27901,7 @@ msgstr ""
#: pretix/control/views/item.py:237 #: pretix/control/views/item.py:237
msgid "The selected category has been deleted." msgid "The selected category has been deleted."
msgstr "" msgstr "A categoria selecionada foi excluída"
#: pretix/control/views/item.py:322 #: pretix/control/views/item.py:322
msgid "The new category has been created." msgid "The new category has been created."
@@ -29874,7 +29826,7 @@ msgstr ""
#: pretix/plugins/banktransfer/payment.py:239 #: pretix/plugins/banktransfer/payment.py:239
msgid "Please fill out your bank account details." msgid "Please fill out your bank account details."
msgstr "" msgstr "Por favor, preencha os detalhes da sua conta bancária."
#: pretix/plugins/banktransfer/payment.py:243 #: pretix/plugins/banktransfer/payment.py:243
msgid "Please enter your bank account details." msgid "Please enter your bank account details."
@@ -30175,7 +30127,7 @@ msgstr ""
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:122 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:122
msgid "Scan the QR code with your banking app" msgid "Scan the QR code with your banking app"
msgstr "" msgstr "Escanear o QR Code com o seu aplicativo bancário"
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/refund_export.html:5 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/refund_export.html:5
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/refund_export.html:7 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/refund_export.html:7
@@ -30746,6 +30698,8 @@ msgid ""
"We're waiting for an answer from PayPal regarding your payment. Please " "We're waiting for an answer from PayPal regarding your payment. Please "
"contact us, if this takes more than a few hours." "contact us, if this takes more than a few hours."
msgstr "" msgstr ""
"Estamos aguardando por informações do PayPal referentes ao seu pagamento. "
"Por favor, entre em contato conosco se isso demorar mais que algumas horas."
#: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:17 #: pretix/plugins/paypal/templates/pretixplugins/paypal/redirect.html:17
#: pretix/plugins/paypal2/templates/pretixplugins/paypal2/redirect.html:17 #: pretix/plugins/paypal2/templates/pretixplugins/paypal2/redirect.html:17
@@ -33370,19 +33324,17 @@ msgstr "Organizador: {organizer}"
#: pretix/presale/ical.py:139 #: pretix/presale/ical.py:139
#, python-brace-format #, python-brace-format
msgid "{event} - {item}" msgid "{event} - {item}"
msgstr "" msgstr "{event} - {item}"
#: pretix/presale/ical.py:147 #: pretix/presale/ical.py:147
#, fuzzy, python-brace-format #, python-brace-format
#| msgid "Start date"
msgid "Start: {datetime}" msgid "Start: {datetime}"
msgstr "Data inicial" msgstr "Início: {datetime}"
#: pretix/presale/ical.py:150 #: pretix/presale/ical.py:150
#, fuzzy, python-brace-format #, python-brace-format
#| msgid "Admission: {datetime}"
msgid "End: {datetime}" msgid "End: {datetime}"
msgstr "Admissão: {datetime}" msgstr "Término: {datetime}"
#: pretix/presale/templates/pretixpresale/base.html:44 #: pretix/presale/templates/pretixpresale/base.html:44
#, fuzzy #, fuzzy
@@ -33774,12 +33726,11 @@ msgstr "Selecione como deseja pagar o saldo restante:"
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html:82 #: pretix/presale/templates/pretixpresale/event/checkout_payment.html:82
#: pretix/presale/templates/pretixpresale/event/order_pay_change.html:45 #: pretix/presale/templates/pretixpresale/event/order_pay_change.html:45
#, fuzzy, python-format #, python-format
#| msgid "%(num)s available"
msgid "(%(count)s available)" msgid "(%(count)s available)"
msgid_plural "(%(count)s available)" msgid_plural "(%(count)s available)"
msgstr[0] "%(num)s disponíveis" msgstr[0] "(%(count)s disponível)"
msgstr[1] "%(num)s disponíveis" msgstr[1] "(%(count)s disponíveis)"
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html:101 #: pretix/presale/templates/pretixpresale/event/checkout_payment.html:101
msgid "This sales channel does not provide support for test mode." msgid "This sales channel does not provide support for test mode."
@@ -34558,13 +34509,11 @@ msgstr "Mostrar imagem em tamanho real de %(item)s"
#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:131 #: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:131
#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:288 #: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:288
#, fuzzy, python-format #, python-format
#| msgid "%(count)s event"
#| msgid_plural "%(count)s events"
msgid "%(amount)s× in your cart" msgid "%(amount)s× in your cart"
msgid_plural "%(amount)s× in your cart" msgid_plural "%(amount)s× in your cart"
msgstr[0] "%(count)s evento" msgstr[0] "%(amount)s× no seu carrinho"
msgstr[1] "%(count)s events" msgstr[1] "%(amount)s× no seu carrinho"
#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:209 #: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:209
#: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:374 #: pretix/presale/templates/pretixpresale/event/fragment_product_list.html:374
@@ -35632,10 +35581,8 @@ msgid "The following gift cards are available in your customer account:"
msgstr "" msgstr ""
#: pretix/presale/templates/pretixpresale/giftcard/checkout.html:24 #: pretix/presale/templates/pretixpresale/giftcard/checkout.html:24
#, fuzzy
#| msgid "Issued gift cards"
msgid "Use gift card" msgid "Use gift card"
msgstr "Cartões-presente emitidos" msgstr "Usar cartão-presente"
#: pretix/presale/templates/pretixpresale/giftcard/checkout_confirm.html:4 #: pretix/presale/templates/pretixpresale/giftcard/checkout_confirm.html:4
#, python-format #, python-format
@@ -35652,7 +35599,7 @@ msgid ""
"This is a self-hosted installation of <a %(a_attr)s>pretix, your free and " "This is a self-hosted installation of <a %(a_attr)s>pretix, your free and "
"open source ticket sales software</a>." "open source ticket sales software</a>."
msgstr "" msgstr ""
"Está é uma instalação self-hosted do <a %(a_attr)s>pretix, seu aplicativo " "Esta é uma instalação auto-hospedada do <a %(a_attr)s>pretix, seu aplicativo "
"livre e de código aberto para venda de ingressos.</a>." "livre e de código aberto para venda de ingressos.</a>."
#: pretix/presale/templates/pretixpresale/index.html:15 #: pretix/presale/templates/pretixpresale/index.html:15
@@ -35748,22 +35695,18 @@ msgid "Issued on %(date)s"
msgstr "Leitura negada: %(date)s" msgstr "Leitura negada: %(date)s"
#: pretix/presale/templates/pretixpresale/organizers/customer_giftcards.html:38 #: pretix/presale/templates/pretixpresale/organizers/customer_giftcards.html:38
#, fuzzy, python-format #, python-format
#| msgid "Expired since"
msgid "Expired since %(date)s" msgid "Expired since %(date)s"
msgstr "Expirado desde" msgstr "Expirado desde %(date)s"
#: pretix/presale/templates/pretixpresale/organizers/customer_giftcards.html:46 #: pretix/presale/templates/pretixpresale/organizers/customer_giftcards.html:46
#, fuzzy, python-format #, python-format
#| msgid "Valid until %(datetime)s"
msgid "Valid until %(date)s" msgid "Valid until %(date)s"
msgstr "Válido até %(datetime)s" msgstr "Válido até %(date)s"
#: pretix/presale/templates/pretixpresale/organizers/customer_giftcards.html:66 #: pretix/presale/templates/pretixpresale/organizers/customer_giftcards.html:66
#, fuzzy
#| msgid "Remaining balance"
msgid "Remaining value:" msgid "Remaining value:"
msgstr "Saldo restante" msgstr "Valor restante:"
#: pretix/presale/templates/pretixpresale/organizers/customer_giftcards.html:76 #: pretix/presale/templates/pretixpresale/organizers/customer_giftcards.html:76
#, fuzzy #, fuzzy
@@ -36287,10 +36230,8 @@ msgid "The selected date does not exist in this event series."
msgstr "A data selecionada não existe nesta série de eventos." msgstr "A data selecionada não existe nesta série de eventos."
#: pretix/presale/views/widget.py:412 #: pretix/presale/views/widget.py:412
#, fuzzy
#| msgid "The selected seat \"{seat}\" is not available."
msgid "The selected date is not available." msgid "The selected date is not available."
msgstr "O assento selecionado \"{seat}\" não está disponível." msgstr "A data selecionada não está disponível."
#: pretix/presale/views/widget.py:476 #: pretix/presale/views/widget.py:476
#, python-format #, python-format

View File

@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-11-20 10:37+0000\n" "POT-Creation-Date: 2025-11-20 10:37+0000\n"
"PO-Revision-Date: 2025-08-28 13:43+0000\n" "PO-Revision-Date: 2025-12-09 00:47+0000\n"
"Last-Translator: Renne Rocha <renne@rocha.dev.br>\n" "Last-Translator: Renne Rocha <renne@rocha.dev.br>\n"
"Language-Team: Portuguese (Brazil) <https://translate.pretix.eu/projects/" "Language-Team: Portuguese (Brazil) <https://translate.pretix.eu/projects/"
"pretix/pretix-js/pt_BR/>\n" "pretix/pretix-js/pt_BR/>\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n" "Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.13\n" "X-Generator: Weblate 5.14.3\n"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56 #: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62 #: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62
@@ -566,11 +566,11 @@ msgstr "ausente"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:289 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:289
msgid "Error: Product not found!" msgid "Error: Product not found!"
msgstr "" msgstr "Erro: Produto não encontrado!"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:296 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:296
msgid "Error: Variation not found!" msgid "Error: Variation not found!"
msgstr "" msgstr "Erro: Variação não encontrada!"
#: pretix/static/pretixcontrol/js/ui/editor.js:171 #: pretix/static/pretixcontrol/js/ui/editor.js:171
msgid "Check-in QR" msgid "Check-in QR"

View File

@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-11-27 13:57+0000\n" "POT-Creation-Date: 2025-11-27 13:57+0000\n"
"PO-Revision-Date: 2025-12-02 16:47+0000\n" "PO-Revision-Date: 2025-12-11 01:00+0000\n"
"Last-Translator: Ana Rute Pacheco Vivas <rute.vivas@om.org>\n" "Last-Translator: Ana Rute Pacheco Vivas <rute.vivas@om.org>\n"
"Language-Team: Portuguese (Portugal) <https://translate.pretix.eu/projects/" "Language-Team: Portuguese (Portugal) <https://translate.pretix.eu/projects/"
"pretix/pretix/pt_PT/>\n" "pretix/pretix/pt_PT/>\n"
@@ -3522,8 +3522,7 @@ msgstr "Participante individual"
#: pretix/base/invoicing/email.py:50 #: pretix/base/invoicing/email.py:50
msgid "Email invoice directly to accounting department" msgid "Email invoice directly to accounting department"
msgstr "" msgstr "Envia a fatura diretamente por e-mail para o departamento financeiro"
"Envie a fatura diretamente por e-mail para o departamento de contabilidade"
#: pretix/base/invoicing/email.py:51 #: pretix/base/invoicing/email.py:51
msgid "" msgid ""
@@ -6702,10 +6701,8 @@ msgstr ""
"tua fatura, caso assim o desejes." "tua fatura, caso assim o desejes."
#: pretix/base/models/orders.py:3534 #: pretix/base/models/orders.py:3534
#, fuzzy
#| msgid "Transaction time"
msgid "Transmission type" msgid "Transmission type"
msgstr "Hora de transação" msgstr "Modo de comunicação"
#: pretix/base/models/orders.py:3632 #: pretix/base/models/orders.py:3632
#: pretix/plugins/badges/templates/pretixplugins/badges/control_order_position_buttons.html:9 #: pretix/plugins/badges/templates/pretixplugins/badges/control_order_position_buttons.html:9
@@ -20186,8 +20183,8 @@ msgid ""
"email address is owned by you. Please enter the verification code below:" "email address is owned by you. Please enter the verification code below:"
msgstr "" msgstr ""
"Enviamos um e-mail para %(recp)s com um código de confirmação para verificar " "Enviamos um e-mail para %(recp)s com um código de confirmação para verificar "
"se este endereço de e-mail é da sua propriedade. Por favor, insira o código " "se este endereço de e-mail te pertence. Por favor, indica o código de "
"de verificação abaixo:" "verificação abaixo:"
#: pretix/control/templates/pretixcontrol/email_setup_simple.html:63 #: pretix/control/templates/pretixcontrol/email_setup_simple.html:63
msgid "Verification code" msgid "Verification code"
@@ -27454,6 +27451,9 @@ msgid ""
"We will send a confirmation code to your new email address, which you need " "We will send a confirmation code to your new email address, which you need "
"to enter in the next step to confirm the email address is correct." "to enter in the next step to confirm the email address is correct."
msgstr "" msgstr ""
"Enviaremos um código de confirmação para o teu novo endereço de e-mail, que "
"precisas de inserir na próxima etapa para confirmar que o endereço de e-mail "
"está correto."
#: pretix/control/templates/pretixcontrol/user/change_password.html:4 #: pretix/control/templates/pretixcontrol/user/change_password.html:4
#: pretix/control/templates/pretixcontrol/user/change_password.html:8 #: pretix/control/templates/pretixcontrol/user/change_password.html:8
@@ -27567,6 +27567,9 @@ msgid ""
"confirm your email address using a confirmation code we will send to your " "confirm your email address using a confirmation code we will send to your "
"email address." "email address."
msgstr "" msgstr ""
"O teu endereço de e-mail ainda não foi confirmado. Para proteger a tua "
"conta, confirma o teu endereço de e-mail usando um código de confirmação que "
"te enviaremos."
#: pretix/control/templates/pretixcontrol/user/settings.html:18 #: pretix/control/templates/pretixcontrol/user/settings.html:18
#, fuzzy #, fuzzy
@@ -28878,7 +28881,7 @@ msgstr ""
#: pretix/control/views/mailsetup.py:216 #: pretix/control/views/mailsetup.py:216
msgid "The verification code was incorrect, please try again." msgid "The verification code was incorrect, please try again."
msgstr "O código de verificação estava incorreto, tente novamente." msgstr "O código de verificação estava incorreto, tenta novamente."
#: pretix/control/views/mailsetup.py:221 #: pretix/control/views/mailsetup.py:221
msgid "Sender address verification" msgid "Sender address verification"
@@ -29937,6 +29940,8 @@ msgid ""
"Please enter the confirmation code we sent to your email address " "Please enter the confirmation code we sent to your email address "
"<strong>{email}</strong>." "<strong>{email}</strong>."
msgstr "" msgstr ""
"Indica o código de confirmação que enviámos para o teu endereço de e-mail "
"<strong>{email}</strong>."
#: pretix/control/views/user.py:947 #: pretix/control/views/user.py:947
#, fuzzy #, fuzzy
@@ -34939,7 +34944,7 @@ msgstr ""
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:9 #: pretix/presale/templates/pretixpresale/event/checkout_questions.html:9
msgid "Before we continue, we need you to answer some questions." msgid "Before we continue, we need you to answer some questions."
msgstr "Antes de continuarmos, precisamos que respondas a algumas perguntas." msgstr "Antes de continuares, precisamos que respondas a algumas perguntas."
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:49 #: pretix/presale/templates/pretixpresale/event/checkout_questions.html:49
msgid "Auto-fill with address" msgid "Auto-fill with address"
@@ -35374,10 +35379,8 @@ msgstr ""
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:514 #: pretix/presale/templates/pretixpresale/event/fragment_cart.html:514
#: pretix/presale/templates/pretixpresale/fragment_modals.html:48 #: pretix/presale/templates/pretixpresale/fragment_modals.html:48
#, fuzzy
#| msgid "Event description"
msgid "Renew reservation" msgid "Renew reservation"
msgstr "Descrição do Evento" msgstr "Renovar a reserva"
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:526 #: pretix/presale/templates/pretixpresale/event/fragment_cart.html:526
#, fuzzy #, fuzzy
@@ -35962,8 +35965,8 @@ msgid ""
"Please note that we still await approval by the event organizer before you " "Please note that we still await approval by the event organizer before you "
"can pay and complete this order." "can pay and complete this order."
msgstr "" msgstr ""
"Por favor, note que a aprovação ainda aguardam pelo organizador do evento " "Por favor, nota que ainda estamos à espera da aprovação do organizador do "
"antes que pode pagar e concluir este pedido." "evento antes de poderes pagar e concluir esta encomenda."
#: pretix/presale/templates/pretixpresale/event/order.html:43 #: pretix/presale/templates/pretixpresale/event/order.html:43
msgid "Please note that we still await your payment to complete the process." msgid "Please note that we still await your payment to complete the process."
@@ -35972,19 +35975,14 @@ msgstr ""
"processo." "processo."
#: pretix/presale/templates/pretixpresale/event/order.html:55 #: pretix/presale/templates/pretixpresale/event/order.html:55
#, fuzzy
#| msgid ""
#| "Please bookmark or save the link to this exact page if you want to access "
#| "your order later. We also sent you an email containing the link to the "
#| "address you specified."
msgid "" msgid ""
"Please bookmark or save the link to this exact page if you want to access " "Please bookmark or save the link to this exact page if you want to access "
"your order later. We also sent you an email to the address you specified " "your order later. We also sent you an email to the address you specified "
"containing the link to this page." "containing the link to this page."
msgstr "" msgstr ""
"Por favor, guarda o link para esta página, caso queiras aceder ao teu pedido " "Por favor, guarda o link desta página, se quiseres aceder à tua encomenda "
"mais tarde. Também iremos enviar-te um email com o link para o endereço que " "mais tarde. Também enviámos um e-mail para o endereço que indicaste com o "
"indicaste." "link para esta página."
#: pretix/presale/templates/pretixpresale/event/order.html:59 #: pretix/presale/templates/pretixpresale/event/order.html:59
#, fuzzy #, fuzzy

View File

@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-11-20 10:37+0000\n" "POT-Creation-Date: 2025-11-20 10:37+0000\n"
"PO-Revision-Date: 2025-11-11 21:00+0000\n" "PO-Revision-Date: 2025-12-10 15:49+0000\n"
"Last-Translator: Ana Rute Pacheco Vivas <rute.vivas@om.org>\n" "Last-Translator: Ana Rute Pacheco Vivas <rute.vivas@om.org>\n"
"Language-Team: Portuguese (Portugal) <https://translate.pretix.eu/projects/" "Language-Team: Portuguese (Portugal) <https://translate.pretix.eu/projects/"
"pretix/pretix-js/pt_PT/>\n" "pretix/pretix-js/pt_PT/>\n"
@@ -798,7 +798,7 @@ msgstr ""
#: pretix/static/pretixpresale/js/ui/cart.js:90 #: pretix/static/pretixpresale/js/ui/cart.js:90
msgid "Renew reservation" msgid "Renew reservation"
msgstr "" msgstr "Renovar a reserva"
#: pretix/static/pretixpresale/js/ui/main.js:194 #: pretix/static/pretixpresale/js/ui/main.js:194
msgid "The organizer keeps %(currency)s %(amount)s" msgid "The organizer keeps %(currency)s %(amount)s"

View File

@@ -8,18 +8,20 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-11-27 13:57+0000\n" "POT-Creation-Date: 2025-11-27 13:57+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: 2025-12-09 22:00+0000\n"
"Last-Translator: Automatically generated\n" "Last-Translator: Lachlan Struthers <lachlan.struthers@om.org>\n"
"Language-Team: none\n" "Language-Team: Albanian <https://translate.pretix.eu/projects/pretix/pretix/"
"sq/>\n"
"Language: sq\n" "Language: sq\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.14.3\n"
#: pretix/_base_settings.py:87 #: pretix/_base_settings.py:87
msgid "English" msgid "English"
msgstr "" msgstr "Anglisht"
#: pretix/_base_settings.py:88 #: pretix/_base_settings.py:88
msgid "German" msgid "German"
@@ -450,7 +452,7 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/event/mail.html:114 #: pretix/control/templates/pretixcontrol/event/mail.html:114
#: pretix/control/views/orders.py:1569 #: pretix/control/views/orders.py:1569
msgid "Order canceled" msgid "Order canceled"
msgstr "" msgstr "Porositja ësthë anuluar"
#: pretix/api/webhooks.py:278 pretix/base/notifications.py:257 #: pretix/api/webhooks.py:278 pretix/base/notifications.py:257
msgid "Order reactivated" msgid "Order reactivated"
@@ -1407,7 +1409,7 @@ msgstr ""
#: pretix/plugins/checkinlists/exporters.py:827 #: pretix/plugins/checkinlists/exporters.py:827
#: pretix/plugins/checkinlists/exporters.py:828 #: pretix/plugins/checkinlists/exporters.py:828
msgid "Yes" msgid "Yes"
msgstr "" msgstr "Po"
#: pretix/base/exporters/customers.py:100 #: pretix/base/exporters/customers.py:100
#: pretix/base/exporters/customers.py:101 pretix/base/exporters/events.py:83 #: pretix/base/exporters/customers.py:101 pretix/base/exporters/events.py:83
@@ -1431,7 +1433,7 @@ msgstr ""
#: pretix/plugins/checkinlists/exporters.py:827 #: pretix/plugins/checkinlists/exporters.py:827
#: pretix/plugins/checkinlists/exporters.py:828 #: pretix/plugins/checkinlists/exporters.py:828
msgid "No" msgid "No"
msgstr "" msgstr "Jo"
#: pretix/base/exporters/dekodi.py:42 pretix/base/exporters/invoices.py:66 #: pretix/base/exporters/dekodi.py:42 pretix/base/exporters/invoices.py:66
msgctxt "export_category" msgctxt "export_category"
@@ -2445,7 +2447,7 @@ msgstr ""
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:12 #: pretix/presale/templates/pretixpresale/event/fragment_cart.html:12
#: pretix/presale/templates/pretixpresale/organizers/customer_membership.html:91 #: pretix/presale/templates/pretixpresale/organizers/customer_membership.html:91
msgid "Product" msgid "Product"
msgstr "" msgstr "Produkti"
#: pretix/base/exporters/orderlist.py:619 pretix/base/models/vouchers.py:315 #: pretix/base/exporters/orderlist.py:619 pretix/base/models/vouchers.py:315
#: pretix/control/templates/pretixcontrol/vouchers/bulk.html:5 #: pretix/control/templates/pretixcontrol/vouchers/bulk.html:5
@@ -2783,7 +2785,7 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/event/cancel.html:20 #: pretix/control/templates/pretixcontrol/event/cancel.html:20
#: pretix/control/views/item.py:971 #: pretix/control/views/item.py:971
msgid "Paid orders" msgid "Paid orders"
msgstr "" msgstr "Porositje të paguara"
#: pretix/base/exporters/orderlist.py:1155 pretix/control/views/item.py:976 #: pretix/base/exporters/orderlist.py:1155 pretix/control/views/item.py:976
msgid "Pending orders" msgid "Pending orders"
@@ -3879,7 +3881,7 @@ msgstr ""
#: pretix/base/modelimport_vouchers.py:205 pretix/base/models/items.py:1256 #: pretix/base/modelimport_vouchers.py:205 pretix/base/models/items.py:1256
#: pretix/base/models/vouchers.py:266 pretix/base/models/waitinglist.py:99 #: pretix/base/models/vouchers.py:266 pretix/base/models/waitinglist.py:99
msgid "Product variation" msgid "Product variation"
msgstr "" msgstr "Varianti i produktit"
#: pretix/base/modelimport_orders.py:161 #: pretix/base/modelimport_orders.py:161
msgid "The variation can be specified by its internal ID or full name." msgid "The variation can be specified by its internal ID or full name."
@@ -4278,19 +4280,19 @@ msgstr ""
#: pretix/base/models/checkin.py:336 #: pretix/base/models/checkin.py:336
msgid "Entry" msgid "Entry"
msgstr "" msgstr "Hyrje"
#: pretix/base/models/checkin.py:337 #: pretix/base/models/checkin.py:337
msgid "Exit" msgid "Exit"
msgstr "" msgstr "Dalje"
#: pretix/base/models/checkin.py:356 #: pretix/base/models/checkin.py:356
msgid "Unknown ticket" msgid "Unknown ticket"
msgstr "" msgstr "Biletë e panjohur"
#: pretix/base/models/checkin.py:357 #: pretix/base/models/checkin.py:357
msgid "Ticket not paid" msgid "Ticket not paid"
msgstr "" msgstr "Bileta nuk është paguar"
#: pretix/base/models/checkin.py:358 #: pretix/base/models/checkin.py:358
msgid "Forbidden by custom rule" msgid "Forbidden by custom rule"
@@ -4298,23 +4300,23 @@ msgstr ""
#: pretix/base/models/checkin.py:359 #: pretix/base/models/checkin.py:359
msgid "Ticket code revoked/changed" msgid "Ticket code revoked/changed"
msgstr "" msgstr "Kodi i biletës është anuluar/ndryshuar"
#: pretix/base/models/checkin.py:360 #: pretix/base/models/checkin.py:360
msgid "Information required" msgid "Information required"
msgstr "" msgstr "Informacion i domosdoshëm"
#: pretix/base/models/checkin.py:361 #: pretix/base/models/checkin.py:361
msgid "Ticket already used" msgid "Ticket already used"
msgstr "" msgstr "Bileta tashmë është përdorur"
#: pretix/base/models/checkin.py:362 #: pretix/base/models/checkin.py:362
msgid "Ticket type not allowed here" msgid "Ticket type not allowed here"
msgstr "" msgstr "Ky lloj bilete nuk lejohet këtu"
#: pretix/base/models/checkin.py:363 #: pretix/base/models/checkin.py:363
msgid "Ticket code is ambiguous on list" msgid "Ticket code is ambiguous on list"
msgstr "" msgstr "Kodi i biletës është e paqartë në listë"
#: pretix/base/models/checkin.py:364 #: pretix/base/models/checkin.py:364
msgid "Server error" msgid "Server error"
@@ -4322,15 +4324,15 @@ msgstr ""
#: pretix/base/models/checkin.py:365 #: pretix/base/models/checkin.py:365
msgid "Ticket blocked" msgid "Ticket blocked"
msgstr "" msgstr "Bileta u bllokua"
#: pretix/base/models/checkin.py:366 #: pretix/base/models/checkin.py:366
msgid "Order not approved" msgid "Order not approved"
msgstr "" msgstr "Porositje nuk është aprovuar"
#: pretix/base/models/checkin.py:367 #: pretix/base/models/checkin.py:367
msgid "Ticket not valid at this time" msgid "Ticket not valid at this time"
msgstr "" msgstr "Bileta nuk është e vlefshme për momentin"
#: pretix/base/models/checkin.py:368 #: pretix/base/models/checkin.py:368
msgid "Check-in annulled" msgid "Check-in annulled"
@@ -4460,7 +4462,7 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/organizers/gates.html:16 #: pretix/control/templates/pretixcontrol/organizers/gates.html:16
#: pretix/plugins/checkinlists/exporters.py:769 #: pretix/plugins/checkinlists/exporters.py:769
msgid "Gate" msgid "Gate"
msgstr "" msgstr "Porta"
#: pretix/base/models/devices.py:131 #: pretix/base/models/devices.py:131
#: pretix/control/templates/pretixcontrol/organizers/devices.html:83 #: pretix/control/templates/pretixcontrol/organizers/devices.html:83
@@ -5928,7 +5930,7 @@ msgstr ""
#: pretix/presale/templates/pretixpresale/organizers/customer_membership.html:34 #: pretix/presale/templates/pretixpresale/organizers/customer_membership.html:34
#: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:44 #: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:44
msgid "Canceled" msgid "Canceled"
msgstr "" msgstr "e anuluar"
#: pretix/base/models/memberships.py:134 #: pretix/base/models/memberships.py:134
#: pretix/control/templates/pretixcontrol/organizers/customer.html:117 #: pretix/control/templates/pretixcontrol/organizers/customer.html:117
@@ -6671,7 +6673,7 @@ msgstr ""
#: pretix/base/models/vouchers.py:204 pretix/control/views/vouchers.py:120 #: pretix/base/models/vouchers.py:204 pretix/control/views/vouchers.py:120
msgid "Redeemed" msgid "Redeemed"
msgstr "" msgstr "e përdorur"
#: pretix/base/models/vouchers.py:209 #: pretix/base/models/vouchers.py:209
msgid "" msgid ""
@@ -7704,15 +7706,15 @@ msgstr ""
#: pretix/base/reldate.py:38 #: pretix/base/reldate.py:38
msgid "Event start" msgid "Event start"
msgstr "" msgstr "Fillimi i eventit"
#: pretix/base/reldate.py:39 #: pretix/base/reldate.py:39
msgid "Event end" msgid "Event end"
msgstr "" msgstr "Mbarimi i eventit"
#: pretix/base/reldate.py:40 #: pretix/base/reldate.py:40
msgid "Event admission" msgid "Event admission"
msgstr "" msgstr "Hyrja në event"
#: pretix/base/reldate.py:41 #: pretix/base/reldate.py:41
msgid "Presale start" msgid "Presale start"
@@ -12889,7 +12891,7 @@ msgstr ""
#: pretix/plugins/reports/exporters.py:391 #: pretix/plugins/reports/exporters.py:391
#: pretix/presale/templates/pretixpresale/event/fragment_order_status.html:7 #: pretix/presale/templates/pretixpresale/event/fragment_order_status.html:7
msgid "Approval pending" msgid "Approval pending"
msgstr "" msgstr "Duke pritur aprovimin"
#: pretix/control/forms/filter.py:247 #: pretix/control/forms/filter.py:247
msgid "Follow-up configured" msgid "Follow-up configured"
@@ -13157,7 +13159,7 @@ msgstr ""
#: pretix/control/forms/filter.py:2117 #: pretix/control/forms/filter.py:2117
#: pretix/presale/templates/pretixpresale/organizers/customer_giftcards.html:51 #: pretix/presale/templates/pretixpresale/organizers/customer_giftcards.html:51
msgid "Valid" msgid "Valid"
msgstr "" msgstr "e vlefshme"
#: pretix/control/forms/filter.py:2118 #: pretix/control/forms/filter.py:2118
msgid "Unredeemed" msgid "Unredeemed"
@@ -16427,7 +16429,7 @@ msgstr ""
#: pretix/presale/templates/pretixpresale/event/order_pay_change.html:75 #: pretix/presale/templates/pretixpresale/event/order_pay_change.html:75
#: pretix/presale/templates/pretixpresale/event/position_change.html:29 #: pretix/presale/templates/pretixpresale/event/position_change.html:29
msgid "Continue" msgid "Continue"
msgstr "" msgstr "Vazhdoni"
#: pretix/control/templates/pretixcontrol/auth/oauth_authorization.html:8 #: pretix/control/templates/pretixcontrol/auth/oauth_authorization.html:8
msgid "Authorize an application" msgid "Authorize an application"
@@ -16675,7 +16677,7 @@ msgstr ""
#: pretix/presale/templates/pretixpresale/postmessage.html:27 #: pretix/presale/templates/pretixpresale/postmessage.html:27
#: pretix/presale/templates/pretixpresale/waiting.html:42 #: pretix/presale/templates/pretixpresale/waiting.html:42
msgid "If this takes longer than a few minutes, please contact us." msgid "If this takes longer than a few minutes, please contact us."
msgstr "" msgstr "Nëse kalon më shumë se disa minuta, ju lutemi t'na kontaktoni."
#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:4 #: pretix/control/templates/pretixcontrol/boxoffice/payment.html:4
#: pretix/control/templates/pretixcontrol/organizers/devices.html:71 #: pretix/control/templates/pretixcontrol/organizers/devices.html:71
@@ -16905,7 +16907,7 @@ msgstr[1] ""
#: pretix/presale/templates/pretixpresale/event/position_change.html:24 #: pretix/presale/templates/pretixpresale/event/position_change.html:24
#: pretix/presale/templates/pretixpresale/event/position_modify.html:44 #: pretix/presale/templates/pretixpresale/event/position_modify.html:44
msgid "Cancel" msgid "Cancel"
msgstr "" msgstr "Anuloni"
#: pretix/control/templates/pretixcontrol/checkin/bulk_revert_confirm.html:27 #: pretix/control/templates/pretixcontrol/checkin/bulk_revert_confirm.html:27
#: pretix/control/templates/pretixcontrol/checkin/list_delete.html:24 #: pretix/control/templates/pretixcontrol/checkin/list_delete.html:24
@@ -17019,7 +17021,7 @@ msgstr ""
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:14 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:14
#: pretix/plugins/checkinlists/exporters.py:770 #: pretix/plugins/checkinlists/exporters.py:770
msgid "Result" msgid "Result"
msgstr "" msgstr "Rezultati"
#: pretix/control/templates/pretixcontrol/checkin/checkins.html:78 #: pretix/control/templates/pretixcontrol/checkin/checkins.html:78
#: pretix/control/templates/pretixcontrol/order/index.html:437 #: pretix/control/templates/pretixcontrol/order/index.html:437
@@ -17363,7 +17365,7 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/checkin/simulator.html:68 #: pretix/control/templates/pretixcontrol/checkin/simulator.html:68
msgid "Additional information required" msgid "Additional information required"
msgstr "" msgstr "Më shumë informacione kërkohen"
#: pretix/control/templates/pretixcontrol/checkin/simulator.html:70 #: pretix/control/templates/pretixcontrol/checkin/simulator.html:70
msgid "" msgid ""
@@ -18477,7 +18479,7 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/event/plugins.html:34 #: pretix/control/templates/pretixcontrol/event/plugins.html:34
#: pretix/control/templates/pretixcontrol/organizers/plugins.html:34 #: pretix/control/templates/pretixcontrol/organizers/plugins.html:34
msgid "Search results" msgid "Search results"
msgstr "" msgstr "Rezultatet e kërkimit"
#: pretix/control/templates/pretixcontrol/event/plugins.html:56 #: pretix/control/templates/pretixcontrol/event/plugins.html:56
#: pretix/control/templates/pretixcontrol/organizers/plugins.html:56 #: pretix/control/templates/pretixcontrol/organizers/plugins.html:56
@@ -19743,7 +19745,7 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/subevents/bulk.html:355 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:355
#: pretix/control/templates/pretixcontrol/subevents/bulk.html:364 #: pretix/control/templates/pretixcontrol/subevents/bulk.html:364
msgid "minutes" msgid "minutes"
msgstr "" msgstr "minuta"
#: pretix/control/templates/pretixcontrol/item/index.html:229 #: pretix/control/templates/pretixcontrol/item/index.html:229
msgid "hours" msgid "hours"
@@ -21014,7 +21016,7 @@ msgstr ""
#: pretix/plugins/reports/exporters.py:969 #: pretix/plugins/reports/exporters.py:969
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:469 #: pretix/presale/templates/pretixpresale/event/fragment_cart.html:469
msgid "Total" msgid "Total"
msgstr "" msgstr "Shuma totale"
#: pretix/control/templates/pretixcontrol/order/index.html:789 #: pretix/control/templates/pretixcontrol/order/index.html:789
#: pretix/presale/templates/pretixpresale/event/order.html:210 #: pretix/presale/templates/pretixpresale/event/order.html:210
@@ -23135,7 +23137,7 @@ msgstr ""
#: pretix/control/templates/pretixcontrol/pdf/index.html:107 #: pretix/control/templates/pretixcontrol/pdf/index.html:107
msgid "Duplicate" msgid "Duplicate"
msgstr "" msgstr "Kopjoni"
#: pretix/control/templates/pretixcontrol/pdf/index.html:117 #: pretix/control/templates/pretixcontrol/pdf/index.html:117
msgid "Undo" msgid "Undo"
@@ -27329,7 +27331,7 @@ msgstr ""
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:80 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:80
msgid "Comment:" msgid "Comment:"
msgstr "" msgstr "Komente:"
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:98 #: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:98
msgid "No order code detected" msgid "No order code detected"
@@ -27572,7 +27574,7 @@ msgstr ""
#: pretix/plugins/paypal2/payment.py:1097 #: pretix/plugins/paypal2/payment.py:1097
#: pretix/plugins/paypal2/payment.py:1098 pretix/plugins/stripe/payment.py:1816 #: pretix/plugins/paypal2/payment.py:1098 pretix/plugins/stripe/payment.py:1816
msgid "PayPal" msgid "PayPal"
msgstr "" msgstr "PayPal"
#: pretix/plugins/paypal/apps.py:53 #: pretix/plugins/paypal/apps.py:53
msgid "" msgid ""
@@ -29012,8 +29014,9 @@ msgid "Credit card payments"
msgstr "" msgstr ""
#: pretix/plugins/stripe/payment.py:342 pretix/plugins/stripe/payment.py:1527 #: pretix/plugins/stripe/payment.py:342 pretix/plugins/stripe/payment.py:1527
#, fuzzy
msgid "iDEAL" msgid "iDEAL"
msgstr "" msgstr "iDEAL"
#: pretix/plugins/stripe/payment.py:344 pretix/plugins/stripe/payment.py:352 #: pretix/plugins/stripe/payment.py:344 pretix/plugins/stripe/payment.py:352
#: pretix/plugins/stripe/payment.py:360 pretix/plugins/stripe/payment.py:395 #: pretix/plugins/stripe/payment.py:360 pretix/plugins/stripe/payment.py:395
@@ -29032,12 +29035,14 @@ msgid "Alipay"
msgstr "" msgstr ""
#: pretix/plugins/stripe/payment.py:358 pretix/plugins/stripe/payment.py:1564 #: pretix/plugins/stripe/payment.py:358 pretix/plugins/stripe/payment.py:1564
#, fuzzy
msgid "Bancontact" msgid "Bancontact"
msgstr "" msgstr "Bancontact"
#: pretix/plugins/stripe/payment.py:366 #: pretix/plugins/stripe/payment.py:366
#, fuzzy
msgid "SEPA Direct Debit" msgid "SEPA Direct Debit"
msgstr "" msgstr "Debit direkt me SEPA"
#: pretix/plugins/stripe/payment.py:369 #: pretix/plugins/stripe/payment.py:369
msgid "" msgid ""
@@ -29072,12 +29077,14 @@ msgid "Multibanco"
msgstr "" msgstr ""
#: pretix/plugins/stripe/payment.py:409 pretix/plugins/stripe/payment.py:1730 #: pretix/plugins/stripe/payment.py:409 pretix/plugins/stripe/payment.py:1730
#, fuzzy
msgid "Przelewy24" msgid "Przelewy24"
msgstr "" msgstr "Przelewy24"
#: pretix/plugins/stripe/payment.py:417 pretix/plugins/stripe/payment.py:1769 #: pretix/plugins/stripe/payment.py:417 pretix/plugins/stripe/payment.py:1769
#, fuzzy
msgid "WeChat Pay" msgid "WeChat Pay"
msgstr "" msgstr "WeChat Pay"
#: pretix/plugins/stripe/payment.py:433 pretix/plugins/stripe/payment.py:1824 #: pretix/plugins/stripe/payment.py:433 pretix/plugins/stripe/payment.py:1824
msgid "Swish" msgid "Swish"
@@ -29221,8 +29228,9 @@ msgid "giropay via Stripe"
msgstr "" msgstr ""
#: pretix/plugins/stripe/payment.py:1480 #: pretix/plugins/stripe/payment.py:1480
#, fuzzy
msgid "giropay" msgid "giropay"
msgstr "" msgstr "giropay"
#: pretix/plugins/stripe/payment.py:1483 #: pretix/plugins/stripe/payment.py:1483
msgid "" msgid ""
@@ -32444,7 +32452,7 @@ msgstr ""
#: pretix/presale/templates/pretixpresale/postmessage.html:21 #: pretix/presale/templates/pretixpresale/postmessage.html:21
#: pretix/presale/templates/pretixpresale/waiting.html:22 #: pretix/presale/templates/pretixpresale/waiting.html:22
msgid "We are processing your request …" msgid "We are processing your request …"
msgstr "" msgstr "Ne po e proçesojmë kërkesën tuaj …"
#: pretix/presale/utils.py:271 pretix/presale/utils.py:417 #: pretix/presale/utils.py:271 pretix/presale/utils.py:417
#: pretix/presale/utils.py:418 #: pretix/presale/utils.py:418

View File

@@ -3,137 +3,159 @@
# This file is distributed under the same license as the PACKAGE package. # This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
# #
#, fuzzy
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-11-20 10:37+0000\n" "POT-Creation-Date: 2025-11-20 10:37+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: 2025-12-09 22:00+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: Lachlan Struthers <lachlan.struthers@om.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: Albanian <https://translate.pretix.eu/projects/pretix/"
"Language: \n" "pretix-js/sq/>\n"
"Language: sq\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.14.3\n"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56 #: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62 #: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:68 #: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:68
msgid "Marked as paid" msgid "Marked as paid"
msgstr "" msgstr "Shënuar se u pagua"
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:76 #: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:76
msgid "Comment:" msgid "Comment:"
msgstr "" msgstr "Komente:"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:34 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:34
msgid "PayPal" msgid "PayPal"
msgstr "" msgstr "PayPal"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:35 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:35
msgid "Venmo" msgid "Venmo"
msgstr "" msgstr "Venmo"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:36 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:36
#: pretix/static/pretixpresale/js/walletdetection.js:38 #: pretix/static/pretixpresale/js/walletdetection.js:38
#, fuzzy
msgid "Apple Pay" msgid "Apple Pay"
msgstr "" msgstr "Apple Pay"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:37 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:37
#, fuzzy
msgid "Itaú" msgid "Itaú"
msgstr "" msgstr "Itaú"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:38 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:38
#, fuzzy
msgid "PayPal Credit" msgid "PayPal Credit"
msgstr "" msgstr "PayPal Credit"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:39 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:39
msgid "Credit Card" msgid "Credit Card"
msgstr "" msgstr "Kartë Krediti"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:40 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:40
msgid "PayPal Pay Later" msgid "PayPal Pay Later"
msgstr "" msgstr "Bëj PayPal Pay më vonë"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:41 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:41
#, fuzzy
msgid "iDEAL" msgid "iDEAL"
msgstr "" msgstr "iDEAL"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:42 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:42
#, fuzzy
msgid "SEPA Direct Debit" msgid "SEPA Direct Debit"
msgstr "" msgstr "Debit direkt me SEPA"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:43 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:43
#, fuzzy
msgid "Bancontact" msgid "Bancontact"
msgstr "" msgstr "Bancontact"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:44 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:44
#, fuzzy
msgid "giropay" msgid "giropay"
msgstr "" msgstr "giropay"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:45 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:45
#, fuzzy
msgid "SOFORT" msgid "SOFORT"
msgstr "" msgstr "SOFORT"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:46 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:46
#, fuzzy
msgid "eps" msgid "eps"
msgstr "" msgstr "eps"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:47 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:47
#, fuzzy
msgid "MyBank" msgid "MyBank"
msgstr "" msgstr "MyBank"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:48 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:48
#, fuzzy
msgid "Przelewy24" msgid "Przelewy24"
msgstr "" msgstr "Przelewy24"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:49 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:49
#, fuzzy
msgid "Verkkopankki" msgid "Verkkopankki"
msgstr "" msgstr "Verkkopankki"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:50 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:50
#, fuzzy
msgid "PayU" msgid "PayU"
msgstr "" msgstr "PayU"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:51 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:51
#, fuzzy
msgid "BLIK" msgid "BLIK"
msgstr "" msgstr "BLIK"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:52 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:52
#, fuzzy
msgid "Trustly" msgid "Trustly"
msgstr "" msgstr "Trustly"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:53 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:53
#, fuzzy
msgid "Zimpler" msgid "Zimpler"
msgstr "" msgstr "Zimpler"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:54 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:54
#, fuzzy
msgid "Maxima" msgid "Maxima"
msgstr "" msgstr "Maxima"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:55 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:55
#, fuzzy
msgid "OXXO" msgid "OXXO"
msgstr "" msgstr "OXXO"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:56 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:56
#, fuzzy
msgid "Boleto" msgid "Boleto"
msgstr "" msgstr "Boleto"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:57 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:57
#, fuzzy
msgid "WeChat Pay" msgid "WeChat Pay"
msgstr "" msgstr "WeChat Pay"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:58 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:58
#, fuzzy
msgid "Mercado Pago" msgid "Mercado Pago"
msgstr "" msgstr "Mercado Pago"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:167 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:167
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:50 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:50
#: pretix/static/pretixpresale/js/ui/cart.js:89 #: pretix/static/pretixpresale/js/ui/cart.js:89
msgid "Continue" msgid "Continue"
msgstr "" msgstr "Vazhdoni"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:244 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:244
@@ -142,222 +164,224 @@ msgstr ""
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:317 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:317
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:341 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:341
msgid "Confirming your payment …" msgid "Confirming your payment …"
msgstr "" msgstr "Duke e konfirmuar pagesën …"
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:254 #: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:254
msgid "Payment method unavailable" msgid "Payment method unavailable"
msgstr "" msgstr "Metodë e padisponueshme të pagesës"
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:15 #: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:15
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:39 #: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:39
msgid "Placed orders" msgid "Placed orders"
msgstr "" msgstr "Porositje të bëra"
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:15 #: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:15
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:39 #: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:39
msgid "Paid orders" msgid "Paid orders"
msgstr "" msgstr "Porositje të paguara"
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:27 #: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:27
msgid "Total revenue" msgid "Total revenue"
msgstr "" msgstr "Të ardhurat totale"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15
msgid "Contacting Stripe …" msgid "Contacting Stripe …"
msgstr "" msgstr "Duke e kontaktuar Stripe …"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72
msgid "Total" msgid "Total"
msgstr "" msgstr "Shuma totale"
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:291 #: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:291
msgid "Contacting your bank …" msgid "Contacting your bank …"
msgstr "" msgstr "Duke e kontaktuar bankën tuaj …"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:30 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:30
msgid "Select a check-in list" msgid "Select a check-in list"
msgstr "" msgstr "Zgjidhni një listë check-in"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:31 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:31
msgid "No active check-in lists found." msgid "No active check-in lists found."
msgstr "" msgstr "Nuk u gjet asnjë listë check-in."
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:32 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:32
msgid "Switch check-in list" msgid "Switch check-in list"
msgstr "" msgstr "Shkëmbeni listë check-in"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:33 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:33
msgid "Search results" msgid "Search results"
msgstr "" msgstr "Rezultatet e kërkimit"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:34 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:34
msgid "No tickets found" msgid "No tickets found"
msgstr "" msgstr "Nuk u gjetën bileta"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:35 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:35
msgid "Result" msgid "Result"
msgstr "" msgstr "Rezultati"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:36 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:36
msgid "This ticket requires special attention" msgid "This ticket requires special attention"
msgstr "" msgstr "Kjo biletë duhet kujdes të veçantë"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:37 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:37
msgid "Switch direction" msgid "Switch direction"
msgstr "" msgstr "Ndryshoni drejtimin"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:38 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:38
msgid "Entry" msgid "Entry"
msgstr "" msgstr "Hyrje"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:39 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:39
msgid "Exit" msgid "Exit"
msgstr "" msgstr "Dalje"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:40 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:40
msgid "Scan a ticket or search and press return…" msgid "Scan a ticket or search and press return…"
msgstr "" msgstr "Skanoni një biletë ose kërkoni dhe shtypni butonin 'Enter'…"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:41 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:41
msgid "Load more" msgid "Load more"
msgstr "" msgstr "Ngarkoni më shumë"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:42 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:42
msgid "Valid" msgid "Valid"
msgstr "" msgstr "e vlefshme"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:43 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:43
msgid "Unpaid" msgid "Unpaid"
msgstr "" msgstr "e papaguar"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:44 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:44
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:45 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:45
msgid "Canceled" msgid "Canceled"
msgstr "" msgstr "e anuluar"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:46 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:46
msgid "Confirmed" msgid "Confirmed"
msgstr "" msgstr "e konfirmuar"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:47 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:47
msgid "Approval pending" msgid "Approval pending"
msgstr "" msgstr "Duke pritur aprovimin"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
msgid "Redeemed" msgid "Redeemed"
msgstr "" msgstr "e përdorur"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:49 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:49
msgid "Cancel" msgid "Cancel"
msgstr "" msgstr "Anuloni"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:51 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:51
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:60 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:60
msgid "Ticket not paid" msgid "Ticket not paid"
msgstr "" msgstr "Bileta nuk është paguar"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:52 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:52
msgid "This ticket is not yet paid. Do you want to continue anyways?" msgid "This ticket is not yet paid. Do you want to continue anyways?"
msgstr "" msgstr "Kjo biletë ende nuk është paguar. A dëshironi të vazhdoni gjithsesi?"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:53 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:53
msgid "Additional information required" msgid "Additional information required"
msgstr "" msgstr "Më shumë informacione kërkohen"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:54 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:54
msgid "Valid ticket" msgid "Valid ticket"
msgstr "" msgstr "Biletë të vlefshme"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:55 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:55
msgid "Exit recorded" msgid "Exit recorded"
msgstr "" msgstr "Dalja u regjistrua"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:56 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:56
msgid "Ticket already used" msgid "Ticket already used"
msgstr "" msgstr "Bileta tashmë është përdorur"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:57 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:57
msgid "Information required" msgid "Information required"
msgstr "" msgstr "Informacion i domosdoshëm"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:58 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:58
msgid "Unknown ticket" msgid "Unknown ticket"
msgstr "" msgstr "Biletë e panjohur"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:59 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:59
msgid "Ticket type not allowed here" msgid "Ticket type not allowed here"
msgstr "" msgstr "Ky lloj bilete nuk lejohet këtu"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:61 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:61
msgid "Entry not allowed" msgid "Entry not allowed"
msgstr "" msgstr "Hyrja nuk lejohet"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:62 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:62
msgid "Ticket code revoked/changed" msgid "Ticket code revoked/changed"
msgstr "" msgstr "Kodi i biletës është anuluar/ndryshuar"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:63 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:63
msgid "Ticket blocked" msgid "Ticket blocked"
msgstr "" msgstr "Bileta u bllokua"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:64 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:64
msgid "Ticket not valid at this time" msgid "Ticket not valid at this time"
msgstr "" msgstr "Bileta nuk është e vlefshme për momentin"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:65 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:65
msgid "Order canceled" msgid "Order canceled"
msgstr "" msgstr "Porositja ësthë anuluar"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:66 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:66
msgid "Ticket code is ambiguous on list" msgid "Ticket code is ambiguous on list"
msgstr "" msgstr "Kodi i biletës është e paqartë në listë"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:67 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:67
msgid "Order not approved" msgid "Order not approved"
msgstr "" msgstr "Porositje nuk është aprovuar"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:68 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:68
msgid "Checked-in Tickets" msgid "Checked-in Tickets"
msgstr "" msgstr "Bileta të regjistruara"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:69 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:69
msgid "Valid Tickets" msgid "Valid Tickets"
msgstr "" msgstr "Bileta të vlefshme"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:70 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:70
msgid "Currently inside" msgid "Currently inside"
msgstr "" msgstr "Aktualisht brenda"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:71 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:71
#: pretix/static/pretixcontrol/js/ui/question.js:136 #: pretix/static/pretixcontrol/js/ui/question.js:136
#: pretix/static/pretixpresale/js/ui/questions.js:271 #: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "Yes" msgid "Yes"
msgstr "" msgstr "Po"
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:72 #: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:72
#: pretix/static/pretixcontrol/js/ui/question.js:137 #: pretix/static/pretixcontrol/js/ui/question.js:137
#: pretix/static/pretixpresale/js/ui/questions.js:271 #: pretix/static/pretixpresale/js/ui/questions.js:271
msgid "No" msgid "No"
msgstr "" msgstr "Jo"
#: pretix/static/lightbox/js/lightbox.js:96 #: pretix/static/lightbox/js/lightbox.js:96
msgid "close" msgid "close"
msgstr "" msgstr "Mbyllni"
#: pretix/static/pretixbase/js/addressform.js:98 #: pretix/static/pretixbase/js/addressform.js:98
#: pretix/static/pretixpresale/js/ui/main.js:529 #: pretix/static/pretixpresale/js/ui/main.js:529
msgid "required" msgid "required"
msgstr "" msgstr "të domosdoshme"
#: pretix/static/pretixbase/js/asynctask.js:13 #: pretix/static/pretixbase/js/asynctask.js:13
msgid "" msgid ""
"Your request is currently being processed. Depending on the size of your " "Your request is currently being processed. Depending on the size of your "
"event, this might take up to a few minutes." "event, this might take up to a few minutes."
msgstr "" msgstr ""
"Këkesa juaj po proçesohet tani. Në varësi të masës së eventit tuaj, mund të "
"kërkojë disa minuta."
#: pretix/static/pretixbase/js/asynctask.js:17 #: pretix/static/pretixbase/js/asynctask.js:17
msgid "Your request has been queued on the server and will soon be processed." msgid "Your request has been queued on the server and will soon be processed."
msgstr "" msgstr "Kërkesa juaj është në pritje në server dhe do të proçesohet së shpejti."
#: pretix/static/pretixbase/js/asynctask.js:21 #: pretix/static/pretixbase/js/asynctask.js:21
msgid "" msgid ""
@@ -365,34 +389,41 @@ msgid ""
"If this takes longer than two minutes, please contact us or go back in your " "If this takes longer than two minutes, please contact us or go back in your "
"browser and try again." "browser and try again."
msgstr "" msgstr ""
"Kërkesa juaj arriti në server por ende presim të proçesohet. Nëse kalon më "
"shumë se dy minuta, ju lutemi t'na kontaktoni ose të ktheheni më përpara dhe "
"të provoni përsëri."
#: pretix/static/pretixbase/js/asynctask.js:125 #: pretix/static/pretixbase/js/asynctask.js:125
#: pretix/static/pretixbase/js/asynctask.js:182 #: pretix/static/pretixbase/js/asynctask.js:182
#: pretix/static/pretixbase/js/asynctask.js:186 #: pretix/static/pretixbase/js/asynctask.js:186
#: pretix/static/pretixcontrol/js/ui/mail.js:24 #: pretix/static/pretixcontrol/js/ui/mail.js:24
msgid "An error of type {code} occurred." msgid "An error of type {code} occurred."
msgstr "" msgstr "Një gabim të llojit {kodi} ka ndodhur."
#: pretix/static/pretixbase/js/asynctask.js:128 #: pretix/static/pretixbase/js/asynctask.js:128
msgid "" msgid ""
"We currently cannot reach the server, but we keep trying. Last error code: " "We currently cannot reach the server, but we keep trying. Last error code: "
"{code}" "{code}"
msgstr "" msgstr ""
"Nuk mund t'a kontaktojmë serverin për momentin, por vazhdojmë t'a provojmë. "
"Kodi gabimi i fundit: {kodi}"
#: pretix/static/pretixbase/js/asynctask.js:162 #: pretix/static/pretixbase/js/asynctask.js:162
#: pretix/static/pretixcontrol/js/ui/mail.js:21 #: pretix/static/pretixcontrol/js/ui/mail.js:21
msgid "The request took too long. Please try again." msgid "The request took too long. Please try again."
msgstr "" msgstr "Kërkesa juaj kërkonte tepër kohë. Ju lutemi të provoni përsëri."
#: pretix/static/pretixbase/js/asynctask.js:188 #: pretix/static/pretixbase/js/asynctask.js:188
#: pretix/static/pretixcontrol/js/ui/mail.js:26 #: pretix/static/pretixcontrol/js/ui/mail.js:26
msgid "" msgid ""
"We currently cannot reach the server. Please try again. Error code: {code}" "We currently cannot reach the server. Please try again. Error code: {code}"
msgstr "" msgstr ""
"Nuk mund t'a kontaktojmë serverin për momentin. Ju lutemi, provoni përsëri. "
"Kodi gabimi i fundit: {kodi}"
#: pretix/static/pretixbase/js/asynctask.js:216 #: pretix/static/pretixbase/js/asynctask.js:216
msgid "We are processing your request …" msgid "We are processing your request …"
msgstr "" msgstr "Ne po e proçesojmë kërkesën tuaj …"
#: pretix/static/pretixbase/js/asynctask.js:219 #: pretix/static/pretixbase/js/asynctask.js:219
msgid "" msgid ""
@@ -400,166 +431,169 @@ msgid ""
"than one minute, please check your internet connection and then reload this " "than one minute, please check your internet connection and then reload this "
"page and try again." "page and try again."
msgstr "" msgstr ""
"Tani po e dërgojmë kërkesën tuaj në server. Nëse kalon më shumë se një "
"minutë, ju lutemi t'a kontrolloni lidhjen tuaj në internet dhe pastak t'a "
"rifreskoni këtë faqe që të provoni përsëri."
#: pretix/static/pretixbase/js/asynctask.js:276 #: pretix/static/pretixbase/js/asynctask.js:276
msgid "If this takes longer than a few minutes, please contact us." msgid "If this takes longer than a few minutes, please contact us."
msgstr "" msgstr "Nëse kalon më shumë se disa minuta, ju lutemi t'na kontaktoni."
#: pretix/static/pretixbase/js/asynctask.js:331 #: pretix/static/pretixbase/js/asynctask.js:331
msgid "Close message" msgid "Close message"
msgstr "" msgstr "Mbyllni mesazhin"
#: pretix/static/pretixcontrol/js/clipboard.js:23 #: pretix/static/pretixcontrol/js/clipboard.js:23
msgid "Copied!" msgid "Copied!"
msgstr "" msgstr "E kopjuar!"
#: pretix/static/pretixcontrol/js/clipboard.js:29 #: pretix/static/pretixcontrol/js/clipboard.js:29
msgid "Press Ctrl-C to copy!" msgid "Press Ctrl-C to copy!"
msgstr "" msgstr "Shtypni Ctrl+C për të kopjuar!"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:12 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:12
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:18 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:18
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:24 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:24
msgid "is one of" msgid "is one of"
msgstr "" msgstr "është një nga"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:30 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:30
msgid "is before" msgid "is before"
msgstr "" msgstr "është para"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:34 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:34
msgid "is after" msgid "is after"
msgstr "" msgstr "është pas"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:40 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:40
msgid "=" msgid "="
msgstr "" msgstr "="
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
msgid "Product" msgid "Product"
msgstr "" msgstr "Produkti"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
msgid "Product variation" msgid "Product variation"
msgstr "" msgstr "Varianti i produktit"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
msgid "Gate" msgid "Gate"
msgstr "" msgstr "Porta"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:111 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:111
msgid "Current date and time" msgid "Current date and time"
msgstr "" msgstr "Datë dhe orë aktuale"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:115 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:115
msgid "Current day of the week (1 = Monday, 7 = Sunday)" msgid "Current day of the week (1 = Monday, 7 = Sunday)"
msgstr "" msgstr "Dita aktuale e javës (1 = Të hënën, 7 = Të dielën)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:119 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:119
msgid "Current entry status" msgid "Current entry status"
msgstr "" msgstr "Gjendja aktuale e hyrjes"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:123 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:123
msgid "Number of previous entries" msgid "Number of previous entries"
msgstr "" msgstr "Shuma e hyrjeve të mëparshme"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:127 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:127
msgid "Number of previous entries since midnight" msgid "Number of previous entries since midnight"
msgstr "" msgstr "Shuma e hyrjeve të mëparshme nga mesnata"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:131 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:131
msgid "Number of previous entries since" msgid "Number of previous entries since"
msgstr "" msgstr "Shuma e hyrjeve të mëparshme nga"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:135 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:135
msgid "Number of previous entries before" msgid "Number of previous entries before"
msgstr "" msgstr "Shuma e hyrjeve të mëparshme përpara"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:139 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:139
msgid "Number of days with a previous entry" msgid "Number of days with a previous entry"
msgstr "" msgstr "Shuma e ditëve me një hyrje të mëparshme"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:143 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:143
msgid "Number of days with a previous entry since" msgid "Number of days with a previous entry since"
msgstr "" msgstr "Shuma e ditëve me një hyrje të mëparshme nga"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:147 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:147
msgid "Number of days with a previous entry before" msgid "Number of days with a previous entry before"
msgstr "" msgstr "Shuma e ditëve me një hyrje të mëparshme përpara"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:151 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:151
msgid "Minutes since last entry (-1 on first entry)" msgid "Minutes since last entry (-1 on first entry)"
msgstr "" msgstr "Minuta nga hyrja e fundit (-1 në hyrjen e parë)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:155 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:155
msgid "Minutes since first entry (-1 on first entry)" msgid "Minutes since first entry (-1 on first entry)"
msgstr "" msgstr "Minuta nga hyrja e parë (-1 në hyrjen e parë)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:182 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:182
msgid "All of the conditions below (AND)" msgid "All of the conditions below (AND)"
msgstr "" msgstr "Të gjitha gjendjet më poshtë (DHE)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:183 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:183
msgid "At least one of the conditions below (OR)" msgid "At least one of the conditions below (OR)"
msgstr "" msgstr "Të paktën një nga gjendjet më poshtë (OSE)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:184 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:184
msgid "Event start" msgid "Event start"
msgstr "" msgstr "Fillimi i eventit"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:185 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:185
msgid "Event end" msgid "Event end"
msgstr "" msgstr "Mbarimi i eventit"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:186 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:186
msgid "Event admission" msgid "Event admission"
msgstr "" msgstr "Hyrja në event"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:187 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:187
msgid "custom date and time" msgid "custom date and time"
msgstr "" msgstr "datë dhe orë e kustomizuar"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:188 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:188
msgid "custom time" msgid "custom time"
msgstr "" msgstr "orë e kustomizuar"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:189 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:189
msgid "Tolerance (minutes)" msgid "Tolerance (minutes)"
msgstr "" msgstr "Toleranca (minuta)"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:190 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:190
msgid "Add condition" msgid "Add condition"
msgstr "" msgstr "Shtoni gjendje"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:191 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:191
msgid "minutes" msgid "minutes"
msgstr "" msgstr "minuta"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:192 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:192
msgid "Duplicate" msgid "Duplicate"
msgstr "" msgstr "Kopjoni"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:193 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:193
msgctxt "entry_status" msgctxt "entry_status"
msgid "present" msgid "present"
msgstr "" msgstr "pranishëm"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:194 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:194
msgctxt "entry_status" msgctxt "entry_status"
msgid "absent" msgid "absent"
msgstr "" msgstr "munguar"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:289 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:289
msgid "Error: Product not found!" msgid "Error: Product not found!"
msgstr "" msgstr "Gabim: Produkti nuk u gjet!"
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:296 #: pretix/static/pretixcontrol/js/ui/checkinrules.js:296
msgid "Error: Variation not found!" msgid "Error: Variation not found!"
msgstr "" msgstr "Gabim: Varianti nuk u gjet!"
#: pretix/static/pretixcontrol/js/ui/editor.js:171 #: pretix/static/pretixcontrol/js/ui/editor.js:171
msgid "Check-in QR" msgid "Check-in QR"
msgstr "" msgstr "Kodi QR për check-in"
#: pretix/static/pretixcontrol/js/ui/editor.js:549 #: pretix/static/pretixcontrol/js/ui/editor.js:549
msgid "The PDF background file could not be loaded for the following reason:" msgid "The PDF background file could not be loaded for the following reason:"

View File

@@ -41,15 +41,20 @@ for app in apps.get_app_configs():
if hasattr(app, 'PretixPluginMeta'): if hasattr(app, 'PretixPluginMeta'):
if importlib.util.find_spec(app.name + '.urls'): if importlib.util.find_spec(app.name + '.urls'):
urlmod = importlib.import_module(app.name + '.urls') urlmod = importlib.import_module(app.name + '.urls')
single_plugin_patterns = []
if hasattr(urlmod, 'event_patterns'): if hasattr(urlmod, 'event_patterns'):
patterns = plugin_event_urls(urlmod.event_patterns, plugin=app.name) patterns = plugin_event_urls(urlmod.event_patterns, plugin=app.name)
raw_plugin_patterns.append( single_plugin_patterns.append(
re_path(r'^(?P<event>[^/]+)/', include((patterns, app.label))) re_path(r'^(?P<event>[^/]+)/', include(patterns))
) )
if hasattr(urlmod, 'organizer_patterns'): if hasattr(urlmod, 'organizer_patterns'):
patterns = plugin_event_urls(urlmod.organizer_patterns, plugin=app.name) single_plugin_patterns += plugin_event_urls(urlmod.organizer_patterns, plugin=app.name)
if single_plugin_patterns:
raw_plugin_patterns.append( raw_plugin_patterns.append(
re_path(r'', include((patterns, app.label))) re_path(r'', include((single_plugin_patterns, app.label)))
) )
plugin_patterns = [ plugin_patterns = [

View File

@@ -42,15 +42,20 @@ for app in apps.get_app_configs():
if hasattr(app, 'PretixPluginMeta'): if hasattr(app, 'PretixPluginMeta'):
if importlib.util.find_spec(app.name + '.urls'): if importlib.util.find_spec(app.name + '.urls'):
urlmod = importlib.import_module(app.name + '.urls') urlmod = importlib.import_module(app.name + '.urls')
if hasattr(urlmod, 'event_patterns'): single_plugin_patterns = []
patterns = plugin_event_urls(urlmod.event_patterns, plugin=app.name)
raw_plugin_patterns.append(
re_path(r'^(?P<event>[^/]+)/', include((patterns, app.label)))
)
if hasattr(urlmod, 'organizer_patterns'): if hasattr(urlmod, 'organizer_patterns'):
patterns = plugin_event_urls(urlmod.organizer_patterns, plugin=app.name) single_plugin_patterns += plugin_event_urls(urlmod.organizer_patterns, plugin=app.name)
if hasattr(urlmod, 'event_patterns'):
plugin_event_patterns = plugin_event_urls(urlmod.event_patterns, plugin=app.name)
single_plugin_patterns.append(
re_path(r'^(?P<event>[^/]+)/', include(plugin_event_patterns))
)
if single_plugin_patterns:
raw_plugin_patterns.append( raw_plugin_patterns.append(
re_path(r'', include((patterns, app.label))) re_path(r'', include((single_plugin_patterns, app.label)))
) )
plugin_patterns = [ plugin_patterns = [

View File

@@ -0,0 +1,71 @@
#
# This file is part of pretix (Community Edition).
#
# Copyright (C) 2014-2020 Raphael Michel and contributors
# Copyright (C) 2020-today pretix GmbH and contributors
#
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General
# Public License as published by the Free Software Foundation in version 3 of the License.
#
# ADDITIONAL TERMS APPLY: Pursuant to Section 7 of the GNU Affero General Public License, additional terms are
# applicable granting you additional permissions and placing additional restrictions on your usage of this software.
# Please refer to the pretix LICENSE file to obtain the full terms applicable to this work. If you did not receive
# this file, see <https://pretix.eu/about/en/license>.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
# details.
#
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
# <https://www.gnu.org/licenses/>.
#
from django.utils.translation import gettext_lazy as _
from lxml import etree
def parse(file):
# Spec: https://www.ebics.de/de/datenformate
data = file.read()
root = etree.fromstring(data)
statements = root.findall("{*}BkToCstmrStmt/{*}Stmt")
if not statements:
raise ValueError(_("Empty file or unknown format."))
def get_text(findall_result):
if len(findall_result) == 1:
return findall_result[0].text
return ""
rows = []
for stmt in statements:
for ntry in stmt.findall("{*}Ntry"):
minus = ""
otherparty = "Dbtr"
if ntry.findall("{*}CdtDbtInd")[0].text == "DBIT":
otherparty = "Cdtr"
minus = "-"
reference_parts = [
get_text(ntry.findall("{*}NtryDtls/{*}TxDtls/{*}RmtInf/{*}Ustrd")),
get_text(ntry.findall("{*}NtryDtls/{*}TxDtls/{*}Refs/{*}EndToEndId")),
get_text(ntry.findall("{*}NtryDtls/{*}TxDtls/{*}Refs/{*}InstructionIdentification")),
]
if ntry.findall("{*}NtryDtls/{*}Btch"):
# Batch booking, we do not support splitting yet
reference_parts.insert(0, get_text(ntry.findall("{*}NtryDtls/{*}Btch/{*}PmtInfId")))
row = {
'amount': minus + ntry.findall("{*}Amt")[0].text,
'date': get_text(ntry.findall("{*}BookgDt/{*}Dt")),
'reference': "\n".join(filter(lambda a: bool(a) and a != "NOTPROVIDED", reference_parts))
}
if ext_id := get_text(ntry.findall("{*}AcctSvcrRef")):
row['external_id'] = ext_id
if iban := get_text(ntry.findall(f"{{*}}NtryDtls/{{*}}TxDtls/{{*}}RltdPties/{{*}}{otherparty}Acct/{{*}}Id/{{*}}IBAN")):
row['iban'] = iban
if bic := get_text(ntry.findall(f"{{*}}NtryDtls/{{*}}TxDtls/{{*}}RltdAgts/{{*}}{otherparty}Agt/{{*}}FinInstnId/{{*}}BICFI")):
row['bic'] = bic
if payer := get_text(ntry.findall(f"{{*}}NtryDtls/{{*}}TxDtls/{{*}}RltdPties/{{*}}{otherparty}/{{*}}Nm")):
row['payer'] = payer
rows.append(row)
return rows

View File

@@ -34,8 +34,10 @@
import json import json
import logging import logging
import operator
import re import re
from decimal import Decimal from decimal import Decimal
from functools import reduce
import dateutil.parser import dateutil.parser
from celery.exceptions import MaxRetriesExceededError from celery.exceptions import MaxRetriesExceededError
@@ -117,20 +119,26 @@ def _find_order_for_code(base_qs, code):
pass pass
def _find_order_for_invoice_id(base_qs, prefix, number): def _find_order_for_invoice_id(base_qs, prefixes, number):
try: try:
# Working with __iregex here is an experiment, if this turns out to be too slow in production # Working with __iregex here is an experiment, if this turns out to be too slow in production
# we might need to switch to a different approach. # we might need to switch to a different approach.
r = [
Q(
prefix__istartswith=prefix, # redundant, but hopefully makes it a little faster
full_invoice_no__iregex=prefix + r'[\- ]*0*' + number
)
for prefix in set(prefixes)
]
return base_qs.select_related('order').get( return base_qs.select_related('order').get(
prefix__istartswith=prefix, # redundant, but hopefully makes it a little faster reduce(operator.or_, r)
full_invoice_no__iregex=prefix + r'[\- ]*0*' + number
).order ).order
except (Invoice.DoesNotExist, Invoice.MultipleObjectsReturned): except (Invoice.DoesNotExist, Invoice.MultipleObjectsReturned):
pass pass
@transaction.atomic @transaction.atomic
def _handle_transaction(trans: BankTransaction, matches: tuple, event: Event = None, organizer: Organizer = None): def _handle_transaction(trans: BankTransaction, matches: tuple, regex_match_to_slug, event: Event = None, organizer: Organizer = None):
orders = [] orders = []
if event: if event:
for slug, code in matches: for slug, code in matches:
@@ -139,18 +147,19 @@ def _handle_transaction(trans: BankTransaction, matches: tuple, event: Event = N
if order.code not in {o.code for o in orders}: if order.code not in {o.code for o in orders}:
orders.append(order) orders.append(order)
else: else:
order = _find_order_for_invoice_id(Invoice.objects.filter(event=event), slug, code) order = _find_order_for_invoice_id(Invoice.objects.filter(event=event), (slug, regex_match_to_slug.get(slug, slug)), code)
if order and order.code not in {o.code for o in orders}: if order and order.code not in {o.code for o in orders}:
orders.append(order) orders.append(order)
else: else:
qs = Order.objects.filter(event__organizer=organizer) qs = Order.objects.filter(event__organizer=organizer)
for slug, code in matches: for slug, code in matches:
order = _find_order_for_code(qs.filter(event__slug__iexact=slug), code) original_slug = regex_match_to_slug.get(slug, slug)
order = _find_order_for_code(qs.filter(Q(event__slug__iexact=slug) | Q(event__slug__iexact=original_slug)), code)
if order: if order:
if order.code not in {o.code for o in orders}: if order.code not in {o.code for o in orders}:
orders.append(order) orders.append(order)
else: else:
order = _find_order_for_invoice_id(Invoice.objects.filter(event__organizer=organizer), slug, code) order = _find_order_for_invoice_id(Invoice.objects.filter(event__organizer=organizer), (slug, original_slug), code)
if order and order.code not in {o.code for o in orders}: if order and order.code not in {o.code for o in orders}:
orders.append(order) orders.append(order)
@@ -366,22 +375,37 @@ def process_banktransfers(self, job: int, data: list) -> None:
transactions = _get_unknown_transactions(job, data, **job.owner_kwargs) transactions = _get_unknown_transactions(job, data, **job.owner_kwargs)
# Match order codes # Match order codes
regex_match_to_slug = {}
code_len_agg = Order.objects.filter(event__organizer=job.organizer).annotate( code_len_agg = Order.objects.filter(event__organizer=job.organizer).annotate(
clen=Length('code') clen=Length('code')
).aggregate(min=Min('clen'), max=Max('clen')) ).aggregate(min=Min('clen'), max=Max('clen'))
if job.event: if job.event:
prefixes = {job.event.slug.upper()} prefixes = {job.event.slug.upper(), job.event.slug.upper().replace("-", "")}
if "-" in job.event.slug:
regex_match_to_slug[job.event.slug.upper().replace("-", "")] = job.event.slug
else: else:
prefixes = {e.slug.upper() for e in job.organizer.events.all()} prefixes = set()
for e in job.organizer.events.all():
prefixes.add(e.slug.upper())
if "-" in e.slug:
prefixes.add(e.slug.upper().replace("-", ""))
regex_match_to_slug[e.slug.upper().replace("-", "")] = e.slug
# Match invoice numbers # Match invoice numbers
inr_len_agg = Invoice.objects.filter(event__organizer=job.organizer).annotate( inr_len_agg = Invoice.objects.filter(event__organizer=job.organizer).annotate(
clen=Length('invoice_no') clen=Length('invoice_no')
).aggregate(min=Min('clen'), max=Max('clen')) ).aggregate(min=Min('clen'), max=Max('clen'))
if job.event: if job.event:
prefixes |= {p.rstrip(' -') for p in Invoice.objects.filter(event=job.event).distinct().values_list('prefix', flat=True)} invoice_prefixes = Invoice.objects.filter(event=job.event)
else: else:
prefixes |= {p.rstrip(' -') for p in Invoice.objects.filter(event__organizer=job.organizer).distinct().values_list('prefix', flat=True)} invoice_prefixes = Invoice.objects.filter(event__organizer=job.organizer)
for p in invoice_prefixes.order_by().distinct().values_list('prefix', flat=True):
prefix = p.rstrip(" -")
prefixes.add(prefix)
if "-" in prefix:
prefix_nodash = prefix.replace("-", "")
prefixes.add(prefix_nodash)
regex_match_to_slug[prefix_nodash] = prefix
pattern = re.compile( pattern = re.compile(
"(%s)[ \\-_]*([A-Z0-9]{%s,%s})" % ( "(%s)[ \\-_]*([A-Z0-9]{%s,%s})" % (
@@ -395,6 +419,11 @@ def process_banktransfers(self, job: int, data: list) -> None:
) )
for trans in transactions: for trans in transactions:
if trans.amount == Decimal("0.00"):
# Ignore all zero-valued transactions
trans.state = BankTransaction.STATE_DISCARDED
trans.save()
continue
# Whitespace in references is unreliable since linebreaks and spaces can occur almost anywhere, e.g. # Whitespace in references is unreliable since linebreaks and spaces can occur almost anywhere, e.g.
# DEMOCON-123\n45 should be matched to DEMOCON-12345. However, sometimes whitespace is important, # DEMOCON-123\n45 should be matched to DEMOCON-12345. However, sometimes whitespace is important,
# e.g. when there are two references. "DEMOCON-12345 DEMOCON-45678" would otherwise be parsed as # e.g. when there are two references. "DEMOCON-12345 DEMOCON-45678" would otherwise be parsed as
@@ -409,9 +438,9 @@ def process_banktransfers(self, job: int, data: list) -> None:
if matches: if matches:
if job.event: if job.event:
_handle_transaction(trans, matches, event=job.event) _handle_transaction(trans, matches, regex_match_to_slug, event=job.event)
else: else:
_handle_transaction(trans, matches, organizer=job.organizer) _handle_transaction(trans, matches, regex_match_to_slug, organizer=job.organizer)
else: else:
trans.state = BankTransaction.STATE_NOMATCH trans.state = BankTransaction.STATE_NOMATCH
trans.save() trans.save()

View File

@@ -66,7 +66,7 @@ from pretix.control.permissions import (
) )
from pretix.control.views.organizer import OrganizerDetailViewMixin from pretix.control.views.organizer import OrganizerDetailViewMixin
from pretix.helpers.json import CustomJSONEncoder from pretix.helpers.json import CustomJSONEncoder
from pretix.plugins.banktransfer import csvimport, mt940import from pretix.plugins.banktransfer import camtimport, csvimport, mt940import
from pretix.plugins.banktransfer.models import ( from pretix.plugins.banktransfer.models import (
BankImportJob, BankTransaction, RefundExport, BankImportJob, BankTransaction, RefundExport,
) )
@@ -419,6 +419,9 @@ class ImportView(ListView):
): ):
return self.process_mt940() return self.process_mt940()
elif 'file' in self.request.FILES and '.xml' in self.request.FILES.get('file').name.lower():
return self.process_camt()
elif self.request.FILES.get('file') is None: elif self.request.FILES.get('file') is None:
messages.error(self.request, _('You must choose a file to import.')) messages.error(self.request, _('You must choose a file to import.'))
return self.redirect_back() return self.redirect_back()
@@ -432,6 +435,14 @@ class ImportView(ListView):
def settings(self): def settings(self):
return SettingsSandbox('payment', 'banktransfer', getattr(self.request, 'event', self.request.organizer)) return SettingsSandbox('payment', 'banktransfer', getattr(self.request, 'event', self.request.organizer))
def process_camt(self):
try:
return self.start_processing(camtimport.parse(self.request.FILES.get('file')))
except:
logger.exception('Failed to import CAMT file')
messages.error(self.request, _('We were unable to process your input.'))
return self.redirect_back()
def process_mt940(self): def process_mt940(self):
try: try:
return self.start_processing(mt940import.parse(self.request.FILES.get('file'))) return self.start_processing(mt940import.parse(self.request.FILES.get('file')))

View File

@@ -137,7 +137,7 @@ logger = logging.getLogger('pretix.plugins.stripe')
# Real-time payments # Real-time payments
# - Swish: ✓ # - Swish: ✓
# - PayNow: ✗ # - PayNow: ✗
# - PromptPay: # - PromptPay:
# - Pix: ✗ # - Pix: ✗
# #
# Vouchers # Vouchers
@@ -412,6 +412,18 @@ class StripeSettingsHolder(BasePaymentProvider):
'before they work properly.'), 'before they work properly.'),
required=False, required=False,
)), )),
('method_pay_by_bank',
forms.BooleanField(
label=_('Pay by bank'),
disabled=self.event.currency not in ['EUR', 'GBP'],
help_text=' '.join([
str(_('Some payment methods might need to be enabled in the settings of your Stripe account '
'before they work properly.')),
str(_('Currently only available for charges in GBP and customers with UK bank accounts, and '
'in private preview for France and Germany.'))
]),
required=False,
)),
('method_wechatpay', ('method_wechatpay',
forms.BooleanField( forms.BooleanField(
label=_('WeChat Pay'), label=_('WeChat Pay'),
@@ -428,6 +440,14 @@ class StripeSettingsHolder(BasePaymentProvider):
'before they work properly.'), 'before they work properly.'),
required=False, required=False,
)), )),
('method_promptpay',
forms.BooleanField(
label='PromptPay',
disabled=self.event.currency != 'THB',
help_text=_('Some payment methods might need to be enabled in the settings of your Stripe account '
'before they work properly.'),
required=False,
)),
('method_swish', ('method_swish',
forms.BooleanField( forms.BooleanField(
label=_('Swish'), label=_('Swish'),
@@ -1810,6 +1830,32 @@ class StripeRevolutPay(StripeRedirectMethod):
} }
class StripePayByBank(StripeRedirectMethod):
identifier = 'stripe_pay_by_bank'
verbose_name = _('Pay by bank via Stripe')
public_name = _('Pay by bank')
method = 'pay_by_bank'
redirect_in_widget_allowed = False
confirmation_method = 'automatic'
explanation = _(
'Pay by bank allows you to authorize a secure Open Banking payment from your banking app. Currently available '
'only with a UK bank account.'
)
def is_allowed(self, request: HttpRequest, total: Decimal=None) -> bool:
return super().is_allowed(request, total) and self.event.currency == 'GBP'
def _payment_intent_kwargs(self, request, payment):
return {
"payment_method_data": {
"type": "pay_by_bank",
"billing_details": {
"email": payment.order.email,
},
},
}
class StripePayPal(StripeRedirectMethod): class StripePayPal(StripeRedirectMethod):
identifier = 'stripe_paypal' identifier = 'stripe_paypal'
verbose_name = _('PayPal via Stripe') verbose_name = _('PayPal via Stripe')
@@ -1842,6 +1888,30 @@ class StripeSwish(StripeRedirectMethod):
} }
class StripePromptPay(StripeRedirectMethod):
identifier = 'stripe_promptpay'
verbose_name = _('PromptPay via Stripe')
public_name = 'PromptPay'
method = 'promptpay'
confirmation_method = 'automatic'
explanation = _(
'This payment method is available to PromptPay users in Thailand. Please have your app ready.'
)
def is_allowed(self, request: HttpRequest, total: Decimal=None) -> bool:
return super().is_allowed(request, total) and request.event.currency == "THB"
def _payment_intent_kwargs(self, request, payment):
return {
"payment_method_data": {
"type": "promptpay",
"billing_details": {
"email": payment.order.email,
},
},
}
class StripeTwint(StripeRedirectMethod): class StripeTwint(StripeRedirectMethod):
identifier = 'stripe_twint' identifier = 'stripe_twint'
verbose_name = _('TWINT via Stripe') verbose_name = _('TWINT via Stripe')

View File

@@ -38,7 +38,6 @@ from pretix.base.signals import (
) )
from pretix.control.signals import nav_organizer from pretix.control.signals import nav_organizer
from pretix.plugins.stripe.forms import StripeKeyValidator from pretix.plugins.stripe.forms import StripeKeyValidator
from pretix.plugins.stripe.payment import StripeMethod
from pretix.presale.signals import html_head, process_response from pretix.presale.signals import html_head, process_response
@@ -47,15 +46,17 @@ def register_payment_provider(sender, **kwargs):
from .payment import ( from .payment import (
StripeAffirm, StripeAlipay, StripeBancontact, StripeCC, StripeEPS, StripeAffirm, StripeAlipay, StripeBancontact, StripeCC, StripeEPS,
StripeGiropay, StripeIdeal, StripeKlarna, StripeMobilePay, StripeGiropay, StripeIdeal, StripeKlarna, StripeMobilePay,
StripeMultibanco, StripePayPal, StripePrzelewy24, StripeRevolutPay, StripeMultibanco, StripePayByBank, StripePayPal, StripePromptPay,
StripeSEPADirectDebit, StripeSettingsHolder, StripeSofort, StripeSwish, StripePrzelewy24, StripeRevolutPay, StripeSEPADirectDebit,
StripeTwint, StripeWeChatPay, StripeSettingsHolder, StripeSofort, StripeSwish, StripeTwint,
StripeWeChatPay,
) )
return [ return [
StripeSettingsHolder, StripeCC, StripeGiropay, StripeIdeal, StripeAlipay, StripeBancontact, StripeSettingsHolder, StripeCC, StripeGiropay, StripeIdeal, StripeAlipay, StripeBancontact,
StripeSofort, StripeEPS, StripeMultibanco, StripePrzelewy24, StripeRevolutPay, StripeWeChatPay, StripeSofort, StripeEPS, StripeMultibanco, StripePayByBank, StripePrzelewy24, StripePromptPay, StripeRevolutPay,
StripeSEPADirectDebit, StripeAffirm, StripeKlarna, StripePayPal, StripeSwish, StripeTwint, StripeMobilePay StripeWeChatPay, StripeSEPADirectDebit, StripeAffirm, StripeKlarna, StripePayPal, StripeSwish,
StripeTwint, StripeMobilePay
] ]
@@ -189,6 +190,8 @@ def nav_o(sender, request, organizer, **kwargs):
@receiver(signal=process_response, dispatch_uid="stripe_middleware_resp") @receiver(signal=process_response, dispatch_uid="stripe_middleware_resp")
def signal_process_response(sender, request: HttpRequest, response: HttpResponse, **kwargs): def signal_process_response(sender, request: HttpRequest, response: HttpResponse, **kwargs):
from pretix.plugins.stripe.payment import StripeMethod
provider = StripeMethod(sender) provider = StripeMethod(sender)
url = resolve(request.path_info) url = resolve(request.path_info)

View File

@@ -79,3 +79,9 @@
.vcenter { .vcenter {
margin: auto; margin: auto;
} }
.stripe-qr-code {
max-width: 80%;
width: 200px;
height: auto;
}

View File

@@ -325,6 +325,8 @@ $(function () {
} else if ($("#stripe_payment_intent_next_action_redirect_url").length) { } else if ($("#stripe_payment_intent_next_action_redirect_url").length) {
let payment_intent_next_action_redirect_url = $.trim($("#stripe_payment_intent_next_action_redirect_url").html()); let payment_intent_next_action_redirect_url = $.trim($("#stripe_payment_intent_next_action_redirect_url").html());
pretixstripe.handlePaymentRedirectAction(payment_intent_next_action_redirect_url); pretixstripe.handlePaymentRedirectAction(payment_intent_next_action_redirect_url);
} else if ($.trim($("#stripe_payment_intent_action_type").html()) === "promptpay_display_qr_code") {
waitingDialog.hide();
} else if ($.trim($("#stripe_payment_intent_action_type").html()) === "wechat_pay_display_qr_code") { } else if ($.trim($("#stripe_payment_intent_action_type").html()) === "wechat_pay_display_qr_code") {
let payment_intent_client_secret = $.trim($("#stripe_payment_intent_client_secret").html()); let payment_intent_client_secret = $.trim($("#stripe_payment_intent_client_secret").html());
pretixstripe.handleWechatAction(payment_intent_client_secret); pretixstripe.handleWechatAction(payment_intent_client_secret);

View File

@@ -22,7 +22,6 @@
import logging import logging
from urllib.parse import urlsplit from urllib.parse import urlsplit
import stripe
from django.conf import settings from django.conf import settings
from pretix.base.services.tasks import EventTask from pretix.base.services.tasks import EventTask
@@ -50,7 +49,10 @@ def get_stripe_account_key(prov):
@app.task(base=EventTask, max_retries=5, default_retry_delay=1) @app.task(base=EventTask, max_retries=5, default_retry_delay=1)
def stripe_verify_domain(event, domain): def stripe_verify_domain(event, domain):
import stripe
from pretix.plugins.stripe.payment import StripeCC from pretix.plugins.stripe.payment import StripeCC
prov = StripeCC(event) prov = StripeCC(event)
account = get_stripe_account_key(prov) account = get_stripe_account_key(prov)

View File

@@ -27,9 +27,21 @@
<div class="stripe-errors sr-only panel-body"> <div class="stripe-errors sr-only panel-body">
</div> </div>
<div class="panel-body embed-responsive embed-responsive-sca" id="scacontainer"> {% if payment_intent_promptpay_image_url %}
<div class="panel-body">
</div> <p>{% blocktrans trimmed %}
Please scan the QR code below to complete your PromptPay payment.
Once you have completed your payment, you can refresh this page.
{% endblocktrans %}</p>
<div class="text-center">
<img src="{{ payment_intent_promptpay_image_url }}" alt="{% trans 'PromptPay QR code' %}"
class="stripe-qr-code" />
</div>
</div>
{% else %}
<div class="panel-body embed-responsive embed-responsive-sca" id="scacontainer">
</div>
{% endif %}
</div> </div>
<div class="row checkout-button-row"> <div class="row checkout-button-row">
<div class="col-md-4"> <div class="col-md-4">

View File

@@ -37,7 +37,6 @@ import logging
import urllib.parse import urllib.parse
import requests import requests
import stripe
from django.contrib import messages from django.contrib import messages
from django.core import signing from django.core import signing
from django.db import transaction from django.db import transaction
@@ -68,7 +67,6 @@ from pretix.helpers.http import redirect_to_url
from pretix.multidomain.urlreverse import build_absolute_uri, eventreverse from pretix.multidomain.urlreverse import build_absolute_uri, eventreverse
from pretix.plugins.stripe.forms import OrganizerStripeSettingsForm from pretix.plugins.stripe.forms import OrganizerStripeSettingsForm
from pretix.plugins.stripe.models import ReferencedStripeObject from pretix.plugins.stripe.models import ReferencedStripeObject
from pretix.plugins.stripe.payment import StripeCC, StripeSettingsHolder
from pretix.plugins.stripe.tasks import ( from pretix.plugins.stripe.tasks import (
get_domain_for_event, stripe_verify_domain, get_domain_for_event, stripe_verify_domain,
) )
@@ -100,6 +98,8 @@ def redirect_view(request, *args, **kwargs):
@scopes_disabled() @scopes_disabled()
def oauth_return(request, *args, **kwargs): def oauth_return(request, *args, **kwargs):
import stripe
if 'payment_stripe_oauth_event' not in request.session: if 'payment_stripe_oauth_event' not in request.session:
messages.error(request, _('An error occurred during connecting with Stripe, please try again.')) messages.error(request, _('An error occurred during connecting with Stripe, please try again.'))
return redirect('control:index') return redirect('control:index')
@@ -268,6 +268,10 @@ SOURCE_TYPES = {
def charge_webhook(event, event_json, charge_id, rso): def charge_webhook(event, event_json, charge_id, rso):
import stripe
from pretix.plugins.stripe.payment import StripeCC
prov = StripeCC(event) prov = StripeCC(event)
prov._init_api() prov._init_api()
@@ -371,6 +375,10 @@ def charge_webhook(event, event_json, charge_id, rso):
def source_webhook(event, event_json, source_id, rso): def source_webhook(event, event_json, source_id, rso):
import stripe
from pretix.plugins.stripe.payment import StripeCC
prov = StripeCC(event) prov = StripeCC(event)
prov._init_api() prov._init_api()
try: try:
@@ -440,6 +448,10 @@ def source_webhook(event, event_json, source_id, rso):
def paymentintent_webhook(event, event_json, paymentintent_id, rso): def paymentintent_webhook(event, event_json, paymentintent_id, rso):
import stripe
from pretix.plugins.stripe.payment import StripeCC
prov = StripeCC(event) prov = StripeCC(event)
prov._init_api() prov._init_api()
@@ -516,6 +528,8 @@ class StripeOrderView:
@method_decorator(xframe_options_exempt, 'dispatch') @method_decorator(xframe_options_exempt, 'dispatch')
class ReturnView(StripeOrderView, View): class ReturnView(StripeOrderView, View):
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
import stripe
prov = self.pprov prov = self.pprov
prov._init_api() prov._init_api()
try: try:
@@ -568,6 +582,10 @@ class ReturnView(StripeOrderView, View):
class ScaView(StripeOrderView, View): class ScaView(StripeOrderView, View):
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
import stripe
from pretix.plugins.stripe.payment import StripeSettingsHolder
prov = self.pprov prov = self.pprov
prov._init_api() prov._init_api()
@@ -595,7 +613,7 @@ class ScaView(StripeOrderView, View):
if intent.status == 'requires_action' and intent.next_action.type in [ if intent.status == 'requires_action' and intent.next_action.type in [
'use_stripe_sdk', 'redirect_to_url', 'alipay_handle_redirect', 'wechat_pay_display_qr_code', 'use_stripe_sdk', 'redirect_to_url', 'alipay_handle_redirect', 'wechat_pay_display_qr_code',
'swish_handle_redirect_or_display_qr_code', 'multibanco_display_details', 'swish_handle_redirect_or_display_qr_code', 'multibanco_display_details', 'promptpay_display_qr_code',
]: ]:
ctx = { ctx = {
'order': self.order, 'order': self.order,
@@ -613,6 +631,8 @@ class ScaView(StripeOrderView, View):
elif intent.next_action.type == 'multibanco_display_details': elif intent.next_action.type == 'multibanco_display_details':
ctx['payment_intent_next_action_redirect_url'] = intent.next_action.multibanco_display_details['hosted_voucher_url'] ctx['payment_intent_next_action_redirect_url'] = intent.next_action.multibanco_display_details['hosted_voucher_url']
ctx['payment_intent_redirect_action_handling'] = 'iframe' ctx['payment_intent_redirect_action_handling'] = 'iframe'
elif intent.next_action.type == 'promptpay_display_qr_code':
ctx['payment_intent_promptpay_image_url'] = intent.next_action.promptpay_display_qr_code['image_url_svg']
r = render(request, 'pretixplugins/stripe/sca.html', ctx) r = render(request, 'pretixplugins/stripe/sca.html', ctx)
r._csp_ignore = True r._csp_ignore = True

View File

@@ -49,7 +49,7 @@ from django.views.decorators.cache import cache_page
from django.views.decorators.gzip import gzip_page from django.views.decorators.gzip import gzip_page
from django.views.decorators.http import condition from django.views.decorators.http import condition
from django.views.i18n import ( from django.views.i18n import (
JavaScriptCatalog, get_formats, builtin_template_path, JavaScriptCatalog, get_formats, js_catalog_template,
) )
from lxml import html from lxml import html
@@ -168,8 +168,7 @@ def generate_widget_js(version, lang):
'September', 'October', 'November', 'December' 'September', 'October', 'November', 'December'
) )
catalog = dict((k, v) for k, v in catalog.items() if k.startswith('widget\u0004') or k in str_wl) catalog = dict((k, v) for k, v in catalog.items() if k.startswith('widget\u0004') or k in str_wl)
with builtin_template_path("i18n_catalog.js").open(encoding="utf-8") as fh: template = Engine().from_string(js_catalog_template)
template = Engine().from_string(fh.read())
context = Context({ context = Context({
'catalog_str': indent(json.dumps( 'catalog_str': indent(json.dumps(
catalog, sort_keys=True, indent=2)) if catalog else None, catalog, sort_keys=True, indent=2)) if catalog else None,

View File

@@ -530,7 +530,6 @@ X_FRAME_OPTIONS = 'DENY'
# URL settings # URL settings
ROOT_URLCONF = 'pretix.multidomain.maindomain_urlconf' ROOT_URLCONF = 'pretix.multidomain.maindomain_urlconf'
FORMS_URLFIELD_ASSUME_HTTPS = True # transitional for django 6.0
WSGI_APPLICATION = 'pretix.wsgi.application' WSGI_APPLICATION = 'pretix.wsgi.application'

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 163 KiB

View File

@@ -45,6 +45,8 @@ def env():
def test_event_main_domain_front_page(env): def test_event_main_domain_front_page(env):
assert eventreverse(env[1], 'presale:event.index') == '/mrmcd/2015/' assert eventreverse(env[1], 'presale:event.index') == '/mrmcd/2015/'
assert eventreverse(env[0], 'presale:organizer.index') == '/mrmcd/' assert eventreverse(env[0], 'presale:organizer.index') == '/mrmcd/'
assert eventreverse(env[1], 'plugins:testdummy:view') == '/mrmcd/2015/testdummy'
assert eventreverse(env[0], 'plugins:testdummy:view') == '/mrmcd/testdummy'
@pytest.mark.django_db @pytest.mark.django_db
@@ -52,12 +54,16 @@ def test_event_custom_domain_kwargs(env):
KnownDomain.objects.create(domainname='foobar', organizer=env[0]) KnownDomain.objects.create(domainname='foobar', organizer=env[0])
KnownDomain.objects.create(domainname='barfoo', organizer=env[0], event=env[1]) KnownDomain.objects.create(domainname='barfoo', organizer=env[0], event=env[1])
assert eventreverse(env[1], 'presale:event.checkout', {'step': 'payment'}) == 'http://barfoo/checkout/payment/' assert eventreverse(env[1], 'presale:event.checkout', {'step': 'payment'}) == 'http://barfoo/checkout/payment/'
assert eventreverse(env[0], 'plugins:testdummy:view') == 'http://foobar/testdummy'
assert eventreverse(env[1], 'plugins:testdummy:view') == 'http://barfoo/testdummy'
@pytest.mark.django_db @pytest.mark.django_db
def test_event_org_domain_kwargs(env): def test_event_org_domain_kwargs(env):
KnownDomain.objects.create(domainname='foobar', organizer=env[0]) KnownDomain.objects.create(domainname='foobar', organizer=env[0])
assert eventreverse(env[1], 'presale:event.checkout', {'step': 'payment'}) == 'http://foobar/2015/checkout/payment/' assert eventreverse(env[1], 'presale:event.checkout', {'step': 'payment'}) == 'http://foobar/2015/checkout/payment/'
assert eventreverse(env[0], 'plugins:testdummy:view') == 'http://foobar/testdummy'
assert eventreverse(env[1], 'plugins:testdummy:view') == 'http://foobar/2015/testdummy'
@pytest.mark.django_db @pytest.mark.django_db
@@ -65,9 +71,13 @@ def test_event_org_alt_domain_kwargs(env):
KnownDomain.objects.create(domainname='foobar', organizer=env[0]) KnownDomain.objects.create(domainname='foobar', organizer=env[0])
d = KnownDomain.objects.create(domainname='altfoo', organizer=env[0], mode=KnownDomain.MODE_ORG_ALT_DOMAIN) d = KnownDomain.objects.create(domainname='altfoo', organizer=env[0], mode=KnownDomain.MODE_ORG_ALT_DOMAIN)
assert eventreverse(env[1], 'presale:event.checkout', {'step': 'payment'}) == 'http://foobar/2015/checkout/payment/' assert eventreverse(env[1], 'presale:event.checkout', {'step': 'payment'}) == 'http://foobar/2015/checkout/payment/'
assert eventreverse(env[1], 'plugins:testdummy:view') == 'http://foobar/2015/testdummy'
d.event_assignments.create(event=env[1]) d.event_assignments.create(event=env[1])
with scopes_disabled(): with scopes_disabled():
assert eventreverse(Event.objects.get(pk=env[1].pk), 'presale:event.checkout', {'step': 'payment'}) == 'http://altfoo/2015/checkout/payment/' event = Event.objects.get(pk=env[1].pk)
assert eventreverse(event, 'presale:event.checkout', {'step': 'payment'}) == 'http://altfoo/2015/checkout/payment/'
assert eventreverse(env[0], 'plugins:testdummy:view') == 'http://foobar/testdummy'
assert eventreverse(event, 'plugins:testdummy:view') == 'http://altfoo/2015/testdummy'
@pytest.mark.django_db @pytest.mark.django_db

View File

@@ -0,0 +1,756 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--Beispielnachricht_camt.053_BankToCustomerStatement_via_EBICS-->
<!-- Source https://www.bundesbank.de/de/startseite/beispieldateien-zur-bereitstellung-der-elektronischen-kontoinformationen-zu-dotationskonten-von-banken-im-format-camt-052-und-camt-053-bei-kommunikation-via-ebics-example-files-for-the-provision-of-electronic-account-information-for-cash-handling-accounts-of-banks-in-camt-052-and-camt-053-format-when-communicating-via-ebics-943090 -->
<Document xmlns:n0="urn:iso:std:iso:20022:tech:xsd:camt.053.001.08">
<BkToCstmrStmt>
<GrpHdr>
<MsgId>20240313C0098170</MsgId>
<CreDtTm>2024-03-13T18:40:42.8734727+01:00</CreDtTm>
</GrpHdr>
<Stmt>
<Id>20240313C0098170</Id>
<StmtPgntn>
<PgNb>00001</PgNb>
<LastPgInd>true</LastPgInd>
</StmtPgntn>
<ElctrncSeqNb>1</ElctrncSeqNb>
<CreDtTm>2024-03-13T18:40:42.8734727+01:00</CreDtTm>
<Acct>
<Id>
<IBAN>DE00IBANdesDotationskontos</IBAN>
</Id>
<Tp>
<Cd>CACC</Cd>
</Tp>
<Ccy>EUR</Ccy>
<Nm>Testbank, Hamburg</Nm>
<Ownr>
<Nm>Testbank-Inhaber</Nm>
</Ownr>
<Svcr>
<FinInstnId>
<BICFI>MARKDEF1200</BICFI>
<ClrSysMmbId>
<ClrSysId>
<Cd>DEBLZ</Cd>
</ClrSysId>
<MmbId>20000000</MmbId>
</ClrSysMmbId>
<Nm>Deutsche Bundesbank</Nm>
<Othr>
<Id>DE114103555</Id>
<Issr>UmsStId</Issr>
</Othr>
</FinInstnId>
<BrnchId>
<Nm>Filiale Hamburg</Nm>
</BrnchId>
</Svcr>
</Acct>
<Bal>
<Tp>
<CdOrPrtry>
<Cd>OPBD</Cd>
</CdOrPrtry>
</Tp>
<Amt Ccy="EUR">0.00</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
<Dt>
<Dt>2024-03-13</Dt>
</Dt>
</Bal>
<Bal>
<Tp>
<CdOrPrtry>
<Cd>CLBD</Cd>
</CdOrPrtry>
</Tp>
<Amt Ccy="EUR">0.00</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
<Dt>
<Dt>2024-03-13</Dt>
</Dt>
</Bal>
<Ntry>
<NtryRef>2000000011240313</NtryRef>
<Amt Ccy="EUR">100000.00</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
<Sts>
<Cd>BOOK</Cd>
</Sts>
<BookgDt>
<Dt>2024-03-13</Dt>
</BookgDt>
<ValDt>
<Dt>2024-03-13</Dt>
</ValDt>
<AcctSvcrRef>103600002791/0019200002</AcctSvcrRef>
<BkTxCd>
<Domn>
<Cd>PMNT</Cd>
<Fmly>
<Cd>CNTR</Cd>
<SubFmlyCd>CDPT</SubFmlyCd>
</Fmly>
</Domn>
<Prtry>
<Cd>NCMI+082+0019200002</Cd>
<Issr>DK</Issr>
</Prtry>
</BkTxCd>
<NtryDtls>
<TxDtls>
<Refs>
<AcctSvcrRef>2000000011240313</AcctSvcrRef>
</Refs>
<Amt Ccy="EUR">100000.00</Amt>
<BkTxCd>
<Domn>
<Cd>PMNT</Cd>
<Fmly>
<Cd>CNTR</Cd>
<SubFmlyCd>CDPT</SubFmlyCd>
</Fmly>
</Domn>
<Prtry>
<Cd>NCMI+082+0019200002</Cd>
<Issr>DK</Issr>
</Prtry>
</BkTxCd>
<Purp>
<Prtry>Einzahlung</Prtry>
</Purp>
<AddtlTxInf>Einzahlungen</AddtlTxInf>
</TxDtls>
</NtryDtls>
<AddtlNtryInf>Einzahlungen</AddtlNtryInf>
</Ntry>
<Ntry>
<NtryRef>2000000012240313</NtryRef>
<Amt Ccy="EUR">25000.00</Amt>
<CdtDbtInd>DBIT</CdtDbtInd>
<Sts>
<Cd>BOOK</Cd>
</Sts>
<BookgDt>
<Dt>2024-03-13</Dt>
</BookgDt>
<ValDt>
<Dt>2024-03-13</Dt>
</ValDt>
<AcctSvcrRef>049000039704/0019000002</AcctSvcrRef>
<BkTxCd>
<Domn>
<Cd>PMNT</Cd>
<Fmly>
<Cd>CNTR</Cd>
<SubFmlyCd>CWDL</SubFmlyCd>
</Fmly>
</Domn>
<Prtry>
<Cd>NCMI+083+0019000002</Cd>
<Issr>DK</Issr>
</Prtry>
</BkTxCd>
<NtryDtls>
<TxDtls>
<Refs>
<AcctSvcrRef>2000000012240313</AcctSvcrRef>
<InstrId>9998770</InstrId>
<ChqNb>9998770</ChqNb>
</Refs>
<Amt Ccy="EUR">25000.00</Amt>
<BkTxCd>
<Domn>
<Cd>PMNT</Cd>
<Fmly>
<Cd>CNTR</Cd>
<SubFmlyCd>CWDL</SubFmlyCd>
</Fmly>
</Domn>
<Prtry>
<Cd>NCMI+083+0019000002</Cd>
<Issr>DK</Issr>
</Prtry>
</BkTxCd>
<Purp>
<Prtry>Auszahlung</Prtry>
</Purp>
<AddtlTxInf>Auszahlungen</AddtlTxInf>
</TxDtls>
</NtryDtls>
<AddtlNtryInf>Auszahlungen</AddtlNtryInf>
</Ntry>
<Ntry>
<Amt Ccy="EUR">20000.00</Amt>
<CdtDbtInd>DBIT</CdtDbtInd>
<Sts>
<Cd>BOOK</Cd>
</Sts>
<BookgDt>
<Dt>2024-03-13</Dt>
</BookgDt>
<ValDt>
<Dt>2024-03-13</Dt>
</ValDt>
<AcctSvcrRef>047200003598/0002000001</AcctSvcrRef>
<BkTxCd>
<Domn>
<Cd>PMNT</Cd>
<Fmly>
<Cd>ICHQ</Cd>
<SubFmlyCd>CCHQ</SubFmlyCd>
</Fmly>
</Domn>
<Prtry>
<Cd>NCHK+101+0002000001</Cd>
<Issr>DK</Issr>
</Prtry>
</BkTxCd>
<NtryDtls>
<TxDtls>
<Refs>
<InstrId>9998771</InstrId>
<ChqNb>9998771</ChqNb>
</Refs>
<Amt Ccy="EUR">250000.00</Amt>
<BkTxCd>
<Domn>
<Cd>PMNT</Cd>
<Fmly>
<Cd>ICHQ</Cd>
<SubFmlyCd>CCHQ</SubFmlyCd>
</Fmly>
</Domn>
<Prtry>
<Cd>NCHK+101+0002000001</Cd>
<Issr>DK</Issr>
</Prtry>
</BkTxCd>
<RltdPties>
<Cdtr>
<Pty>
<Nm>Deutsche Bundesbank KBS HMS Hamburg</Nm>
</Pty>
</Cdtr>
<CdtrAcct>
<Id>
<IBAN>DE98200000000020002633</IBAN>
</Id>
</CdtrAcct>
</RltdPties>
<RltdAgts>
<CdtrAgt>
<FinInstnId>
<ClrSysMmbId>
<ClrSysId>
<Cd>DEBLZ</Cd>
</ClrSysId>
<MmbId>20000000</MmbId>
</ClrSysMmbId>
</FinInstnId>
</CdtrAgt>
</RltdAgts>
<Purp>
<Prtry>LS bestätigter Scheck</Prtry>
</Purp>
<RmtInf>
<Ustrd>Bestätigter Scheck vom 13.03.2024</Ustrd>
<Ustrd>Scheck Nr. 135469</Ustrd>
</RmtInf>
<AddtlTxInf>Inhaberscheck</AddtlTxInf>
</TxDtls>
</NtryDtls>
<AddtlNtryInf>Inhaberscheck</AddtlNtryInf>
</Ntry>
<Ntry>
<Amt Ccy="EUR">15.00</Amt>
<CdtDbtInd>DBIT</CdtDbtInd>
<Sts>
<Cd>BOOK</Cd>
</Sts>
<BookgDt>
<Dt>2024-03-13</Dt>
</BookgDt>
<ValDt>
<Dt>2024-03-13</Dt>
</ValDt>
<AcctSvcrRef>047200003598/0002000001</AcctSvcrRef>
<BkTxCd>
<Domn>
<Cd>ACMT</Cd>
<Fmly>
<Cd>MDOP</Cd>
<SubFmlyCd>CHRG</SubFmlyCd>
</Fmly>
</Domn>
<Prtry>
<Cd>NCHG+808+0002000001</Cd>
<Issr>DK</Issr>
</Prtry>
</BkTxCd>
<NtryDtls>
<TxDtls>
<Amt Ccy="EUR">15.00</Amt>
<BkTxCd>
<Domn>
<Cd>ACMT</Cd>
<Fmly>
<Cd>MDOP</Cd>
<SubFmlyCd>CHRG</SubFmlyCd>
</Fmly>
</Domn>
<Prtry>
<Cd>NCHG+808+0002000001</Cd>
<Issr>DK</Issr>
</Prtry>
</BkTxCd>
<Purp>
<Prtry>LS Entgelte Giro, SchE</Prtry>
</Purp>
<AddtlTxInf>Gebühren</AddtlTxInf>
</TxDtls>
</NtryDtls>
<AddtlNtryInf>Gebühren</AddtlNtryInf>
</Ntry>
<Ntry>
<NtryRef>H202403135000000107</NtryRef>
<Amt Ccy="EUR">145015.00</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
<Sts>
<Cd>BOOK</Cd>
</Sts>
<BookgDt>
<Dt>2024-03-13</Dt>
</BookgDt>
<ValDt>
<Dt>2024-03-13</Dt>
</ValDt>
<AcctSvcrRef>051500000059/0019000003</AcctSvcrRef>
<BkTxCd>
<Domn>
<Cd>PMNT</Cd>
<Fmly>
<Cd>RCDT</Cd>
<SubFmlyCd>SDVA</SubFmlyCd>
</Fmly>
</Domn>
<Prtry>
<Cd>NTRF+088+0019000003</Cd>
<Issr>DK</Issr>
</Prtry>
</BkTxCd>
<NtryDtls>
<TxDtls>
<Refs>
<AcctSvcrRef>H202403135000000107</AcctSvcrRef>
<InstrId>H202403135000000107</InstrId>
</Refs>
<Amt Ccy="EUR">145015.00</Amt>
<BkTxCd>
<Domn>
<Cd>PMNT</Cd>
<Fmly>
<Cd>RCDT</Cd>
<SubFmlyCd>SDVA</SubFmlyCd>
</Fmly>
</Domn>
<Prtry>
<Cd>NTRF+088+0019000003</Cd>
<Issr>DK</Issr>
</Prtry>
</BkTxCd>
<Purp>
<Prtry>Überw Prior1/SWI</Prtry>
</Purp>
<AddtlTxInf>Überweisungsgutschrift mit Festvaluta</AddtlTxInf>
</TxDtls>
</NtryDtls>
<AddtlNtryInf>Überweisungsgutschrift mit Festvaluta</AddtlNtryInf>
</Ntry>
<Ntry>
<NtryRef>H202403135000000108</NtryRef>
<Amt Ccy="EUR">50000.00</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
<Sts>
<Cd>BOOK</Cd>
</Sts>
<BookgDt>
<Dt>2024-03-13</Dt>
</BookgDt>
<ValDt>
<Dt>2024-03-13</Dt>
</ValDt>
<AcctSvcrRef>105600004525/0019200003</AcctSvcrRef>
<BkTxCd>
<Domn>
<Cd>PMNT</Cd>
<Fmly>
<Cd>RCDT</Cd>
<SubFmlyCd>SDVA</SubFmlyCd>
</Fmly>
</Domn>
<Prtry>
<Cd>NTRF+088+0019200003</Cd>
<Issr>DK</Issr>
</Prtry>
</BkTxCd>
<NtryDtls>
<TxDtls>
<Refs>
<AcctSvcrRef>H202403135000000108</AcctSvcrRef>
<InstrId>H202403135000000108</InstrId>
</Refs>
<Amt Ccy="EUR">50000.00</Amt>
<AmtDtls>
<InstdAmt>
<Amt Ccy="EUR">50000.00</Amt>
</InstdAmt>
</AmtDtls>
<BkTxCd>
<Domn>
<Cd>PMNT</Cd>
<Fmly>
<Cd>RCDT</Cd>
<SubFmlyCd>SDVA</SubFmlyCd>
</Fmly>
</Domn>
<Prtry>
<Cd>NTRF+088+0019200003</Cd>
<Issr>DK</Issr>
</Prtry>
</BkTxCd>
<RltdPties>
<Dbtr>
<Pty>
<Nm>Testbank</Nm>
</Pty>
</Dbtr>
<DbtrAcct>
<Id>
<Othr>
<Id>0123456789</Id>
</Othr>
</Id>
</DbtrAcct>
</RltdPties>
<Purp>
<Prtry>Überw Prior1/SWI</Prtry>
</Purp>
<RmtInf>
<Ustrd>VWZ pacs008 RTGS nach DOTA</Ustrd>
</RmtInf>
<AddtlTxInf>Überweisungsgutschrift mit Festvaluta</AddtlTxInf>
</TxDtls>
</NtryDtls>
<AddtlNtryInf>Überweisungsgutschrift mit Festvaluta</AddtlNtryInf>
</Ntry>
<Ntry>
<NtryRef>H202403135000000109</NtryRef>
<Amt Ccy="EUR">80000.00</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
<Sts>
<Cd>BOOK</Cd>
</Sts>
<BookgDt>
<Dt>2024-03-13</Dt>
</BookgDt>
<ValDt>
<Dt>2024-03-13</Dt>
</ValDt>
<AcctSvcrRef>051800000156/0019000004</AcctSvcrRef>
<BkTxCd>
<Domn>
<Cd>PMNT</Cd>
<Fmly>
<Cd>RCDT</Cd>
<SubFmlyCd>SDVA</SubFmlyCd>
</Fmly>
</Domn>
<Prtry>
<Cd>NTRF+088+0019000004</Cd>
<Issr>DK</Issr>
</Prtry>
</BkTxCd>
<NtryDtls>
<TxDtls>
<Refs>
<AcctSvcrRef>H202403135000000109</AcctSvcrRef>
<InstrId>pacs009-EndToEndId-00004</InstrId>
</Refs>
<Amt Ccy="EUR">80000.00</Amt>
<BkTxCd>
<Domn>
<Cd>PMNT</Cd>
<Fmly>
<Cd>RCDT</Cd>
<SubFmlyCd>SDVA</SubFmlyCd>
</Fmly>
</Domn>
<Prtry>
<Cd>NTRF+088+0019000004</Cd>
<Issr>DK</Issr>
</Prtry>
</BkTxCd>
<Purp>
<Prtry>Überw Prior1/SWI</Prtry>
</Purp>
<RmtInf>
<Ustrd>VWZ pacs009 RTGS nach DOTA</Ustrd>
</RmtInf>
<AddtlTxInf>Überweisungsgutschrift mit Festvaluta</AddtlTxInf>
</TxDtls>
</NtryDtls>
<AddtlNtryInf>Überweisungsgutschrift mit Festvaluta</AddtlNtryInf>
</Ntry>
<Ntry>
<NtryRef>pacs009-InstrId-00005</NtryRef>
<Amt Ccy="EUR">30000.00</Amt>
<CdtDbtInd>DBIT</CdtDbtInd>
<Sts>
<Cd>BOOK</Cd>
</Sts>
<BookgDt>
<Dt>2024-03-13</Dt>
</BookgDt>
<ValDt>
<Dt>2024-03-13</Dt>
</ValDt>
<AcctSvcrRef>055100000086/0019000005</AcctSvcrRef>
<BkTxCd>
<Domn>
<Cd>PMNT</Cd>
<Fmly>
<Cd>ICDT</Cd>
<SubFmlyCd>SDVA</SubFmlyCd>
</Fmly>
</Domn>
<Prtry>
<Cd>NTRF+087+0019000005</Cd>
<Issr>DK</Issr>
</Prtry>
</BkTxCd>
<NtryDtls>
<TxDtls>
<Refs>
<AcctSvcrRef>pacs009-InstrId-00005</AcctSvcrRef>
<InstrId>pacs009-InstrId-00005</InstrId>
</Refs>
<Amt Ccy="EUR">30000.00</Amt>
<BkTxCd>
<Domn>
<Cd>PMNT</Cd>
<Fmly>
<Cd>ICDT</Cd>
<SubFmlyCd>SDVA</SubFmlyCd>
</Fmly>
</Domn>
<Prtry>
<Cd>NTRF+087+0019000005</Cd>
<Issr>DK</Issr>
</Prtry>
</BkTxCd>
<Purp>
<Prtry>Überw Prior1/SWI</Prtry>
</Purp>
<RmtInf>
<Ustrd>VWZ pacs009 DOTA nach MCA</Ustrd>
</RmtInf>
<AddtlTxInf>Eilüberweisung</AddtlTxInf>
</TxDtls>
</NtryDtls>
<AddtlNtryInf>Eilüberweisung</AddtlNtryInf>
</Ntry>
<Ntry>
<NtryRef>pacs009-InstrId-00006</NtryRef>
<Amt Ccy="EUR">120000.00</Amt>
<CdtDbtInd>DBIT</CdtDbtInd>
<Sts>
<Cd>BOOK</Cd>
</Sts>
<BookgDt>
<Dt>2024-03-13</Dt>
</BookgDt>
<ValDt>
<Dt>2024-03-13</Dt>
</ValDt>
<AcctSvcrRef>001400001221/0019000006</AcctSvcrRef>
<BkTxCd>
<Domn>
<Cd>PMNT</Cd>
<Fmly>
<Cd>ICDT</Cd>
<SubFmlyCd>SDVA</SubFmlyCd>
</Fmly>
</Domn>
<Prtry>
<Cd>NTRF+087+0019000006</Cd>
<Issr>DK</Issr>
</Prtry>
</BkTxCd>
<NtryDtls>
<TxDtls>
<Refs>
<AcctSvcrRef>pacs009-InstrId-00006</AcctSvcrRef>
<InstrId>pacs009-InstrId-00006</InstrId>
</Refs>
<Amt Ccy="EUR">120000.00</Amt>
<BkTxCd>
<Domn>
<Cd>PMNT</Cd>
<Fmly>
<Cd>ICDT</Cd>
<SubFmlyCd>SDVA</SubFmlyCd>
</Fmly>
</Domn>
<Prtry>
<Cd>NTRF+087+0019000006</Cd>
<Issr>DK</Issr>
</Prtry>
</BkTxCd>
<Purp>
<Prtry>Überw Prior1/SWI</Prtry>
</Purp>
<RmtInf>
<Ustrd>VWZ pacs009 DOTA nach RTGS</Ustrd>
</RmtInf>
<AddtlTxInf>Eilüberweisung</AddtlTxInf>
</TxDtls>
</NtryDtls>
<AddtlNtryInf>Eilüberweisung</AddtlNtryInf>
</Ntry>
<Ntry>
<Amt Ccy="EUR">100000.00</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
<Sts>
<Cd>BOOK</Cd>
</Sts>
<BookgDt>
<Dt>2024-03-13</Dt>
</BookgDt>
<ValDt>
<Dt>2024-03-13</Dt>
</ValDt>
<AcctSvcrRef>016900004681/0002000002</AcctSvcrRef>
<BkTxCd>
<Prtry>
<Cd>NCHK+070+0002000002</Cd>
<Issr>DK</Issr>
</Prtry>
</BkTxCd>
<NtryDtls>
<TxDtls>
<Amt Ccy="EUR">100000.00</Amt>
<BkTxCd>
<Prtry>
<Cd>NCHK+070+0002000002</Cd>
<Issr>DK</Issr>
</Prtry>
</BkTxCd>
<RltdPties>
<Dbtr>
<Pty>
<Nm>Deutsche Bundesbank / 22772 Hamburg</Nm>
</Pty>
</Dbtr>
<DbtrAcct>
<Id>
<IBAN>DE98200000000020002633</IBAN>
</Id>
</DbtrAcct>
</RltdPties>
<RltdAgts>
<DbtrAgt>
<FinInstnId>
<ClrSysMmbId>
<ClrSysId>
<Cd>DEBLZ</Cd>
</ClrSysId>
<MmbId>20000000</MmbId>
</ClrSysMmbId>
</FinInstnId>
</DbtrAgt>
</RltdAgts>
<Purp>
<Prtry>GS bestätigter Scheck</Prtry>
</Purp>
<RmtInf>
<Ustrd>Rückgabe Best. Scheck vom 28.02.2024</Ustrd>
<Ustrd>Scheck Nr. 135468</Ustrd>
</RmtInf>
</TxDtls>
</NtryDtls>
</Ntry>
<Ntry>
<NtryRef>pacs008-InstrId-00007</NtryRef>
<Amt Ccy="EUR">280000.00</Amt>
<CdtDbtInd>DBIT</CdtDbtInd>
<Sts>
<Cd>BOOK</Cd>
</Sts>
<BookgDt>
<Dt>2024-03-13</Dt>
</BookgDt>
<ValDt>
<Dt>2024-03-13</Dt>
</ValDt>
<AcctSvcrRef>010300005153/0019000007</AcctSvcrRef>
<BkTxCd>
<Domn>
<Cd>PMNT</Cd>
<Fmly>
<Cd>ICDT</Cd>
<SubFmlyCd>SDVA</SubFmlyCd>
</Fmly>
</Domn>
<Prtry>
<Cd>NTRF+087+0019000007</Cd>
<Issr>DK</Issr>
</Prtry>
</BkTxCd>
<NtryDtls>
<TxDtls>
<Refs>
<AcctSvcrRef>pacs008-InstrId-00007</AcctSvcrRef>
<InstrId>pacs008-InstrId-00007</InstrId>
</Refs>
<Amt Ccy="EUR">280000.00</Amt>
<BkTxCd>
<Domn>
<Cd>PMNT</Cd>
<Fmly>
<Cd>ICDT</Cd>
<SubFmlyCd>SDVA</SubFmlyCd>
</Fmly>
</Domn>
<Prtry>
<Cd>NTRF+087+0019000007</Cd>
<Issr>DK</Issr>
</Prtry>
</BkTxCd>
<RltdPties>
<Cdtr>
<Pty>
<Nm>Testbank, Hamburg</Nm>
</Pty>
</Cdtr>
<CdtrAcct>
<Id>
<IBAN>DE00IBANbeiTestbank</IBAN>
</Id>
</CdtrAcct>
</RltdPties>
<Purp>
<Prtry>Überw Prior1/SWI</Prtry>
</Purp>
<RmtInf>
<Ustrd>VWZ pacs008 DOTA nach RTGS</Ustrd>
</RmtInf>
<AddtlTxInf>Eilüberweisung</AddtlTxInf>
</TxDtls>
</NtryDtls>
<AddtlNtryInf>Eilüberweisung</AddtlNtryInf>
</Ntry>
</Stmt>
</BkToCstmrStmt>
</Document>

View File

@@ -0,0 +1,312 @@
<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.053.001.02" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:camt.053.001.02 camt.053.001.02.xsd">
<BkToCstmrStmt>
<GrpHdr>
<MsgId>053D2013-12-27T22:05:03.0N130000005</MsgId>
<CreDtTm>2013-12-27T22:04:52.0+01:00</CreDtTm>
<MsgPgntn>
<PgNb>1</PgNb>
<LastPgInd>true</LastPgInd>
</MsgPgntn>
</GrpHdr>
<Stmt>
<Id>0352C5320131227220503</Id>
<ElctrncSeqNb>130000005</ElctrncSeqNb>
<CreDtTm>2013-12-27T22:04:52.0+01:00</CreDtTm>
<Acct>
<Id>
<IBAN>DE14740618130000033626</IBAN>
</Id>
<Ccy>EUR</Ccy>
<Ownr>
<Nm>Testkonto Nummer 1</Nm>
</Ownr>
<Svcr>
<FinInstnId>
<BIC>GENODEF1PFK</BIC>
<Nm>VR-Bank Rottal-Inn eG</Nm>
<Othr>
<Id>DE 129267947</Id>
<Issr>UmsStId</Issr>
</Othr>
</FinInstnId>
</Svcr>
</Acct>
<Bal>
<Tp>
<CdOrPrtry>
<Cd>PRCD</Cd>
</CdOrPrtry>
</Tp>
<Amt Ccy="EUR">33.06</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
<Dt>
<Dt>2013-12-27</Dt>
</Dt>
</Bal>
<Bal>
<Tp>
<CdOrPrtry>
<Cd>CLBD</Cd>
</CdOrPrtry>
</Tp>
<Amt Ccy="EUR">23.06</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
<Dt>
<Dt>2013-12-27</Dt>
</Dt>
</Bal>
<Ntry>
<Amt Ccy="EUR">2.00</Amt>
<CdtDbtInd>DBIT</CdtDbtInd>
<Sts>BOOK</Sts>
<BookgDt>
<Dt>2013-12-27</Dt>
</BookgDt>
<ValDt>
<Dt>2013-12-27</Dt>
</ValDt>
<AcctSvcrRef>2013122710583450000</AcctSvcrRef>
<BkTxCd/>
<NtryDtls>
<TxDtls>
<BkTxCd>
<Prtry>
<Cd>NTRF+020</Cd>
<Issr>ZKA</Issr>
</Prtry>
</BkTxCd>
<RltdPties>
<Cdtr>
<Nm>Testkonto Nummer 2</Nm>
</Cdtr>
<CdtrAcct>
<Id>
<Othr>
<Id> 740618130100033626</Id>
<SchmeNm>
<Cd>BBAN</Cd>
</SchmeNm>
</Othr>
</Id>
</CdtrAcct>
</RltdPties>
<RmtInf>
<Ustrd>TEST BERWEISUNG MITTELS BLZUND KONTONUMMER - DTA</Ustrd>
</RmtInf>
</TxDtls>
</NtryDtls>
</Ntry>
<Ntry>
<Amt Ccy="EUR">3.00</Amt>
<CdtDbtInd>DBIT</CdtDbtInd>
<Sts>BOOK</Sts>
<BookgDt>
<Dt>2013-12-27</Dt>
</BookgDt>
<ValDt>
<Dt>2013-12-27</Dt>
</ValDt>
<AcctSvcrRef>2013122710583600000</AcctSvcrRef>
<BkTxCd/>
<NtryDtls>
<TxDtls>
<Refs>
<MsgId>CCTI/VRNWSW/b044f24cddb92a502b8a1b5</MsgId>
<EndToEndId>NOTPROVIDED</EndToEndId>
</Refs>
<BkTxCd>
<Prtry>
<Cd>NMSC+201</Cd>
<Issr>ZKA</Issr>
</Prtry>
</BkTxCd>
<RltdPties>
<Dbtr>
<Nm>Testkonto Nummer 1</Nm>
</Dbtr>
<DbtrAcct>
<Id>
<IBAN>DE14740618130000033626</IBAN>
</Id>
</DbtrAcct>
<UltmtDbtr>
<Nm>keine Information vorhanden</Nm>
</UltmtDbtr>
<Cdtr>
<Nm>Testkonto Nummer 2</Nm>
</Cdtr>
<CdtrAcct>
<Id>
<IBAN>DE58740618130100033626</IBAN>
</Id>
</CdtrAcct>
<UltmtCdtr>
<Nm>keine Information vorhanden</Nm>
</UltmtCdtr>
</RltdPties>
<RltdAgts>
<CdtrAgt>
<FinInstnId>
<BIC>GENODEF1PFK</BIC>
</FinInstnId>
</CdtrAgt>
</RltdAgts>
<RmtInf>
<Ustrd>Test+berweisung mit BIC und IBAN SEPA IBAN: DE58740618130100033626 BIC: GENODEF1PFK</Ustrd>
</RmtInf>
</TxDtls>
</NtryDtls>
</Ntry>
<Ntry>
<Amt Ccy="EUR">1.00</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
<Sts>BOOK</Sts>
<BookgDt>
<Dt>2013-12-27</Dt>
</BookgDt>
<ValDt>
<Dt>2013-12-27</Dt>
</ValDt>
<AcctSvcrRef>2013122711085260000</AcctSvcrRef>
<BkTxCd/>
<NtryDtls>
<TxDtls>
<BkTxCd>
<Prtry>
<Cd>NMSC+051</Cd>
<Issr>ZKA</Issr>
</Prtry>
</BkTxCd>
<RltdPties>
<Dbtr>
<Nm>Testkonto Nummer 2</Nm>
</Dbtr>
<DbtrAcct>
<Id>
<Othr>
<Id> 740618130100033626</Id>
<SchmeNm>
<Cd>BBAN</Cd>
</SchmeNm>
</Othr>
</Id>
</DbtrAcct>
</RltdPties>
<RmtInf>
<Ustrd>R CKBUCHUNG</Ustrd>
</RmtInf>
</TxDtls>
</NtryDtls>
</Ntry>
<Ntry>
<Amt Ccy="EUR">6.00</Amt>
<CdtDbtInd>DBIT</CdtDbtInd>
<Sts>BOOK</Sts>
<BookgDt>
<Dt>2013-12-27</Dt>
</BookgDt>
<ValDt>
<Dt>2013-12-27</Dt>
</ValDt>
<AcctSvcrRef>2013122711513230000</AcctSvcrRef>
<BkTxCd/>
<NtryDtls>
<Btch>
<PmtInfId>STZV-PmInf27122013-11:02-2</PmtInfId>
<NbOfTxs>2</NbOfTxs>
</Btch>
<TxDtls>
<Refs>
<MsgId>STZV-Msg27122013-11:02</MsgId>
<EndToEndId>STZV-EtE27122013-11:02-1</EndToEndId>
</Refs>
<AmtDtls>
<TxAmt>
<Amt Ccy="EUR">3.50</Amt>
</TxAmt>
</AmtDtls>
<BkTxCd>
<Prtry>
<Cd>NMSC+201</Cd>
<Issr>ZKA</Issr>
</Prtry>
</BkTxCd>
<RltdPties>
<Dbtr>
<Nm>Testkonto Nummer 2</Nm>
</Dbtr>
<DbtrAcct>
<Id>
<IBAN>DE58740618130100033626</IBAN>
</Id>
</DbtrAcct>
<UltmtDbtr>
<Nm>keine Information vorhanden</Nm>
</UltmtDbtr>
<Cdtr>
<Nm>Testkonto Nummer 1</Nm>
</Cdtr>
<CdtrAcct>
<Id>
<IBAN>DE14740618130000033626</IBAN>
</Id>
</CdtrAcct>
<UltmtCdtr>
<Nm>Testkonto</Nm>
</UltmtCdtr>
</RltdPties>
<RmtInf>
<Ustrd>Sammelueberwseisung 2. Zahlung TAN:283044 </Ustrd>
</RmtInf>
</TxDtls>
<TxDtls>
<Refs>
<MsgId>STZV-Msg27122013-11:02</MsgId>
<EndToEndId>STZV-EtE27122013-11:02-2</EndToEndId>
</Refs>
<AmtDtls>
<TxAmt>
<Amt Ccy="EUR">2.50</Amt>
</TxAmt>
</AmtDtls>
<BkTxCd>
<Prtry>
<Cd>NMSC+201</Cd>
<Issr>ZKA</Issr>
</Prtry>
</BkTxCd>
<RltdPties>
<Dbtr>
<Nm>Testkonto Nummer 2</Nm>
</Dbtr>
<DbtrAcct>
<Id>
<IBAN>DE58740618130100033626</IBAN>
</Id>
</DbtrAcct>
<UltmtDbtr>
<Nm>keine Information vorhanden</Nm>
</UltmtDbtr>
<Cdtr>
<Nm>Testkonto Nummer 1</Nm>
</Cdtr>
<CdtrAcct>
<Id>
<IBAN>DE14740618130000033626</IBAN>
</Id>
</CdtrAcct>
<UltmtCdtr>
<Nm>Testkonto</Nm>
</UltmtCdtr>
</RltdPties>
<RmtInf>
<Ustrd>Sammelueberweisung 1. Zahlung TAN:283044 </Ustrd>
</RmtInf>
</TxDtls>
</NtryDtls>
</Ntry>
</Stmt>
</BkToCstmrStmt>
</Document>

View File

@@ -0,0 +1,146 @@
#
# This file is part of pretix (Community Edition).
#
# Copyright (C) 2014-2020 Raphael Michel and contributors
# Copyright (C) 2020-today pretix GmbH and contributors
#
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General
# Public License as published by the Free Software Foundation in version 3 of the License.
#
# ADDITIONAL TERMS APPLY: Pursuant to Section 7 of the GNU Affero General Public License, additional terms are
# applicable granting you additional permissions and placing additional restrictions on your usage of this software.
# Please refer to the pretix LICENSE file to obtain the full terms applicable to this work. If you did not receive
# this file, see <https://pretix.eu/about/en/license>.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
# details.
#
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
# <https://www.gnu.org/licenses/>.
#
import os.path
from django.test import TestCase
from pretix.plugins.banktransfer import camtimport
DATA_DIR = os.path.dirname(__file__)
class CamtImportTest(TestCase):
def _test_from_sample_file(self, filename, expected_parsed):
with open(os.path.join(DATA_DIR, filename), "rb") as f:
parsed = camtimport.parse(f)
print(parsed)
self.assertEqual(parsed, expected_parsed)
def test_sample_file_sepatools(self):
expected_parsed = [
{
"amount": "-2.00",
"date": "2013-12-27",
"reference": "TEST BERWEISUNG MITTELS BLZUND KONTONUMMER - DTA",
"external_id": "2013122710583450000",
"payer": "Testkonto Nummer 2",
},
{
"amount": "-3.00",
"date": "2013-12-27",
"reference": "Test+berweisung mit BIC und IBAN SEPA IBAN: DE58740618130100033626 BIC: GENODEF1PFK",
"external_id": "2013122710583600000",
"iban": "DE58740618130100033626",
"payer": "Testkonto Nummer 2",
},
{
"amount": "1.00",
"date": "2013-12-27",
"reference": "R CKBUCHUNG",
"external_id": "2013122711085260000",
"payer": "Testkonto Nummer 2",
},
{
"amount": "-6.00",
"date": "2013-12-27",
"reference": "STZV-PmInf27122013-11:02-2",
"external_id": "2013122711513230000",
},
]
filename = "camt.053_sepatools.xml"
self._test_from_sample_file(filename, expected_parsed)
def test_sample_file_bundesbank(self):
expected_parsed = [
{
"amount": "100000.00",
"date": "2024-03-13",
"reference": "",
"external_id": "103600002791/0019200002",
},
{
"amount": "-25000.00",
"date": "2024-03-13",
"reference": "",
"external_id": "049000039704/0019000002",
},
{
"amount": "-20000.00",
"date": "2024-03-13",
"reference": "",
"external_id": "047200003598/0002000001",
"iban": "DE98200000000020002633",
},
{
"amount": "-15.00",
"date": "2024-03-13",
"reference": "",
"external_id": "047200003598/0002000001",
},
{
"amount": "145015.00",
"date": "2024-03-13",
"reference": "",
"external_id": "051500000059/0019000003",
},
{
"amount": "50000.00",
"date": "2024-03-13",
"reference": "VWZ pacs008 RTGS nach DOTA",
"external_id": "105600004525/0019200003",
},
{
"amount": "80000.00",
"date": "2024-03-13",
"reference": "VWZ pacs009 RTGS nach DOTA",
"external_id": "051800000156/0019000004",
},
{
"amount": "-30000.00",
"date": "2024-03-13",
"reference": "VWZ pacs009 DOTA nach MCA",
"external_id": "055100000086/0019000005",
},
{
"amount": "-120000.00",
"date": "2024-03-13",
"reference": "VWZ pacs009 DOTA nach RTGS",
"external_id": "001400001221/0019000006",
},
{
"amount": "100000.00",
"date": "2024-03-13",
"reference": "",
"external_id": "016900004681/0002000002",
"iban": "DE98200000000020002633",
},
{
"amount": "-280000.00",
"date": "2024-03-13",
"reference": "VWZ pacs008 DOTA nach RTGS",
"external_id": "010300005153/0019000007",
"iban": "DE00IBANbeiTestbank",
},
]
filename = "camt.053_bundesbank.xml"
self._test_from_sample_file(filename, expected_parsed)

View File

@@ -385,6 +385,20 @@ def test_mark_paid_organizer_dash_in_slug(env, orga_job):
assert env[2].status == Order.STATUS_PAID assert env[2].status == Order.STATUS_PAID
@pytest.mark.django_db
def test_mark_paid_organizer_dash_in_slug_missing(env, orga_job):
env[0].slug = "foo-bar"
env[0].save()
process_banktransfers(orga_job, [{
'payer': 'Karla Kundin',
'reference': 'Bestellung FOOBAR1234S',
'date': '2016-01-26',
'amount': '23.00'
}])
env[2].refresh_from_db()
assert env[2].status == Order.STATUS_PAID
@pytest.mark.django_db @pytest.mark.django_db
def test_mark_paid_organizer_varying_order_code_length(env, orga_job): def test_mark_paid_organizer_varying_order_code_length(env, orga_job):
env[2].code = "123412341234" env[2].code = "123412341234"
@@ -490,7 +504,7 @@ def test_valid_plus_invalid_match(env, orga_job):
'payer': 'Karla Kundin', 'payer': 'Karla Kundin',
'reference': 'Bestellungen DUMMY-1Z3AS DUMMY-99999', 'reference': 'Bestellungen DUMMY-1Z3AS DUMMY-99999',
'date': '2016-01-26', 'date': '2016-01-26',
'amount': '.00' 'amount': '2.00'
}]) }])
with scopes_disabled(): with scopes_disabled():
job = BankImportJob.objects.last() job = BankImportJob.objects.last()

View File

@@ -0,0 +1,52 @@
#
# This file is part of pretix (Community Edition).
#
# Copyright (C) 2014-2020 Raphael Michel and contributors
# Copyright (C) 2020-today pretix GmbH and contributors
#
# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General
# Public License as published by the Free Software Foundation in version 3 of the License.
#
# ADDITIONAL TERMS APPLY: Pursuant to Section 7 of the GNU Affero General Public License, additional terms are
# applicable granting you additional permissions and placing additional restrictions on your usage of this software.
# Please refer to the pretix LICENSE file to obtain the full terms applicable to this work. If you did not receive
# this file, see <https://pretix.eu/about/en/license>.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
# details.
#
# You should have received a copy of the GNU Affero General Public License along with this program. If not, see
# <https://www.gnu.org/licenses/>.
#
from django.http import HttpResponse
from django.urls import path
def view(request):
return HttpResponse("")
urlpatterns = [
path(
"testdummy",
view,
name="view",
),
]
organizer_patterns = [
path(
"testdummy",
view,
name="view",
),
]
event_patterns = [
path(
"testdummy",
view,
name="view",
),
]