mirror of
https://github.com/pretix/pretix.git
synced 2025-12-13 12:42:26 +00:00
Compare commits
30 Commits
update-dja
...
recovery-c
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
45bff138d7 | ||
|
|
510c4850a5 | ||
|
|
b13368d614 | ||
|
|
b5cc8b368b | ||
|
|
87c30d0acb | ||
|
|
ffed8b29b1 | ||
|
|
53fbb64225 | ||
|
|
e10ec4074b | ||
|
|
7f2dc77aca | ||
|
|
199a3bf1e7 | ||
|
|
904aa807a3 | ||
|
|
0e41353a0e | ||
|
|
82ca50c7ff | ||
|
|
3437b64947 | ||
|
|
b895d9bbca | ||
|
|
f214edaf34 | ||
|
|
165a47b593 | ||
|
|
e06f281f1e | ||
|
|
203c7e660d | ||
|
|
8c360b8754 | ||
|
|
90b6511d11 | ||
|
|
bb356257cb | ||
|
|
e1950e408e | ||
|
|
99d5722ce1 | ||
|
|
324eeb8d40 | ||
|
|
449e8dc905 | ||
|
|
c491c8232e | ||
|
|
aa02cc7968 | ||
|
|
cfa13d6b9d | ||
|
|
af4eabc800 |
@@ -3,7 +3,7 @@ name = "pretix"
|
||||
dynamic = ["version"]
|
||||
description = "Reinventing presales, one ticket at a time"
|
||||
readme = "README.rst"
|
||||
requires-python = ">=3.10"
|
||||
requires-python = ">=3.9"
|
||||
license = {file = "LICENSE"}
|
||||
keywords = ["tickets", "web", "shop", "ecommerce"]
|
||||
authors = [
|
||||
@@ -22,7 +22,7 @@ classifiers = [
|
||||
"Programming Language :: Python :: 3.9",
|
||||
"Programming Language :: Python :: 3.10",
|
||||
"Programming Language :: Python :: 3.11",
|
||||
"Framework :: Django :: 5.2",
|
||||
"Framework :: Django :: 4.2",
|
||||
]
|
||||
|
||||
dependencies = [
|
||||
@@ -36,7 +36,7 @@ dependencies = [
|
||||
"css-inline==0.18.*",
|
||||
"defusedcsv>=1.1.0",
|
||||
"dnspython==2.*",
|
||||
"Django[argon2]==5.2.*",
|
||||
"Django[argon2]==4.2.*,>=4.2.26",
|
||||
"django-bootstrap3==25.2",
|
||||
"django-compressor==4.5.1",
|
||||
"django-countries==7.6.*",
|
||||
|
||||
@@ -53,7 +53,6 @@ from django.utils.timezone import now
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from django_otp.models import Device
|
||||
from django_scopes import scopes_disabled
|
||||
from webauthn.helpers.structs import PublicKeyCredentialDescriptor
|
||||
|
||||
from pretix.base.i18n import language
|
||||
from pretix.helpers.urls import build_absolute_uri
|
||||
@@ -708,6 +707,8 @@ class U2FDevice(Device):
|
||||
|
||||
@property
|
||||
def webauthndevice(self):
|
||||
from webauthn.helpers.structs import PublicKeyCredentialDescriptor
|
||||
|
||||
d = json.loads(self.json_data)
|
||||
return PublicKeyCredentialDescriptor(websafe_decode(d['keyHandle']))
|
||||
|
||||
@@ -737,6 +738,8 @@ class WebAuthnDevice(Device):
|
||||
|
||||
@property
|
||||
def webauthndevice(self):
|
||||
from webauthn.helpers.structs import PublicKeyCredentialDescriptor
|
||||
|
||||
return PublicKeyCredentialDescriptor(websafe_decode(self.credential_id))
|
||||
|
||||
@property
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
import json
|
||||
from collections import namedtuple
|
||||
|
||||
import jsonschema
|
||||
from django.contrib.staticfiles import finders
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.db import models
|
||||
@@ -38,6 +37,8 @@ from pretix.base.models import Event, Item, LoggedModel, Organizer, SubEvent
|
||||
@deconstructible
|
||||
class SeatingPlanLayoutValidator:
|
||||
def __call__(self, value):
|
||||
import jsonschema
|
||||
|
||||
if not isinstance(value, dict):
|
||||
try:
|
||||
val = json.loads(value)
|
||||
|
||||
@@ -23,7 +23,6 @@ import json
|
||||
from decimal import Decimal
|
||||
from typing import Optional
|
||||
|
||||
import jsonschema
|
||||
from django.contrib.staticfiles import finders
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.core.validators import MaxValueValidator, MinValueValidator
|
||||
@@ -298,6 +297,8 @@ def cc_to_vat_prefix(country_code):
|
||||
@deconstructible
|
||||
class CustomRulesValidator:
|
||||
def __call__(self, value):
|
||||
import jsonschema
|
||||
|
||||
if not isinstance(value, dict):
|
||||
try:
|
||||
val = json.loads(value)
|
||||
|
||||
@@ -47,7 +47,6 @@ from collections import OrderedDict, defaultdict
|
||||
from functools import partial
|
||||
from io import BytesIO
|
||||
|
||||
import jsonschema
|
||||
import pypdf
|
||||
import pypdf.generic
|
||||
import reportlab.rl_config
|
||||
@@ -1311,6 +1310,8 @@ def _correct_page_media_box(page: pypdf.PageObject):
|
||||
@deconstructible
|
||||
class PdfLayoutValidator:
|
||||
def __call__(self, value):
|
||||
import jsonschema
|
||||
|
||||
if not isinstance(value, dict):
|
||||
try:
|
||||
val = json.loads(value)
|
||||
|
||||
@@ -47,7 +47,6 @@ from urllib.parse import urljoin, urlparse
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
import requests
|
||||
from bs4 import BeautifulSoup
|
||||
from celery import chain
|
||||
from celery.exceptions import MaxRetriesExceededError
|
||||
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):
|
||||
from bs4 import BeautifulSoup
|
||||
|
||||
if body_html:
|
||||
email = BeautifulSoup(body_html, "lxml")
|
||||
cid_images = []
|
||||
|
||||
@@ -60,25 +60,23 @@ def _populate_app_cache():
|
||||
|
||||
def get_defining_app(o):
|
||||
# If sentry packed this in a wrapper, unpack that
|
||||
module = getattr(o, "__module__", None)
|
||||
if module and "sentry" in module:
|
||||
if "sentry" in o.__module__:
|
||||
o = o.__wrapped__
|
||||
|
||||
if hasattr(o, "__mocked_app"):
|
||||
return o.__mocked_app
|
||||
|
||||
# Find the Django application this belongs to
|
||||
searchpath = module or getattr(o.__class__, "__module__", None) or ""
|
||||
searchpath = o.__module__
|
||||
|
||||
# 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'
|
||||
|
||||
if not app_cache:
|
||||
_populate_app_cache()
|
||||
|
||||
app = None
|
||||
while searchpath:
|
||||
while True:
|
||||
app = app_cache.get(searchpath)
|
||||
if "." not in searchpath or app:
|
||||
break
|
||||
@@ -159,11 +157,7 @@ class PluginSignal(Generic[T], django.dispatch.Signal):
|
||||
if not app_cache:
|
||||
_populate_app_cache()
|
||||
|
||||
for receiver in self._sorted_receivers(sender)[0]:
|
||||
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]:
|
||||
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))
|
||||
@@ -185,11 +179,7 @@ class PluginSignal(Generic[T], django.dispatch.Signal):
|
||||
if not app_cache:
|
||||
_populate_app_cache()
|
||||
|
||||
for receiver in self._sorted_receivers(sender)[0]:
|
||||
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]:
|
||||
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)
|
||||
@@ -214,15 +204,7 @@ class PluginSignal(Generic[T], django.dispatch.Signal):
|
||||
if not app_cache:
|
||||
_populate_app_cache()
|
||||
|
||||
for receiver in self._sorted_receivers(sender)[0]:
|
||||
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]:
|
||||
for receiver in self._sorted_receivers(sender):
|
||||
if self._is_receiver_active(sender, receiver):
|
||||
try:
|
||||
response = receiver(signal=self, sender=sender, **named)
|
||||
@@ -233,33 +215,16 @@ class PluginSignal(Generic[T], django.dispatch.Signal):
|
||||
return responses
|
||||
|
||||
def _sorted_receivers(self, sender):
|
||||
orig_list_sync = self._live_receivers(sender)[0]
|
||||
# todo: _live_receivers changed return value from [] to [], []
|
||||
orig_list_async = self._live_receivers(sender)[1]
|
||||
|
||||
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,
|
||||
orig_list = self._live_receivers(sender)
|
||||
sorted_list = sorted(
|
||||
orig_list,
|
||||
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),
|
||||
0 if any(receiver.__module__.startswith(m) for m in settings.CORE_MODULES) else 1,
|
||||
receiver.__module__,
|
||||
receiver.__name__,
|
||||
)
|
||||
)
|
||||
sorted_list_async = sorted(
|
||||
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
|
||||
return sorted_list
|
||||
|
||||
|
||||
class EventPluginSignal(PluginSignal[Event]):
|
||||
|
||||
@@ -93,7 +93,9 @@ def timeline_for_event(event, subevent=None):
|
||||
description=format_lazy(
|
||||
'{} ({})',
|
||||
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'
|
||||
))
|
||||
|
||||
@@ -207,6 +207,7 @@ class EventWizardBasicsForm(I18nModelForm):
|
||||
'Sample Conference Center\nHeidelberg, Germany'
|
||||
)
|
||||
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:
|
||||
del self.fields['presale_start']
|
||||
del self.fields['presale_end']
|
||||
@@ -1958,6 +1959,13 @@ class EventFooterLinkForm(I18nModelForm):
|
||||
class Meta:
|
||||
model = EventFooterLink
|
||||
fields = ('label', 'url')
|
||||
widgets = {
|
||||
"url": forms.URLInput(
|
||||
attrs={
|
||||
"placeholder": "https://..."
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
class BaseEventFooterLinkFormSet(I18nFormSetMixin, forms.BaseInlineFormSet):
|
||||
|
||||
@@ -974,7 +974,7 @@ class EventCancelForm(FormPlaceholderMixin, forms.Form):
|
||||
self._set_field_placeholders('send_subject', ['event_or_subevent', 'refund_amount', 'position_or_address',
|
||||
'order', 'event'])
|
||||
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(
|
||||
label=_("Subject"),
|
||||
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_message', ['event_or_subevent', 'event'])
|
||||
self._set_field_placeholders('send_waitinglist_message', ['event_or_subevent', 'event'], rich=True)
|
||||
|
||||
if self.event.has_subevents:
|
||||
self.fields['subevent'].queryset = self.event.subevents.all()
|
||||
|
||||
@@ -1024,6 +1024,13 @@ class OrganizerFooterLinkForm(I18nModelForm):
|
||||
class Meta:
|
||||
model = OrganizerFooterLink
|
||||
fields = ('label', 'url')
|
||||
widgets = {
|
||||
"url": forms.URLInput(
|
||||
attrs={
|
||||
"placeholder": "https://..."
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
class BaseOrganizerFooterLinkFormSet(I18nFormSetMixin, forms.BaseInlineFormSet):
|
||||
|
||||
@@ -57,6 +57,7 @@ from django.views.decorators.csrf import csrf_exempt
|
||||
from django.views.decorators.http import require_http_methods
|
||||
from django.views.generic import TemplateView
|
||||
from django_otp import match_token
|
||||
from django_otp.plugins.otp_static.models import StaticDevice
|
||||
from webauthn.helpers import generate_challenge
|
||||
|
||||
from pretix.base.auth import get_auth_backends
|
||||
@@ -538,6 +539,10 @@ class Login2FAView(TemplateView):
|
||||
break
|
||||
else:
|
||||
valid = match_token(self.user, token)
|
||||
if isinstance(valid, StaticDevice):
|
||||
self.user.send_security_notice([
|
||||
_("A recovery code for two-factor authentification was used to log in.")
|
||||
])
|
||||
|
||||
if valid:
|
||||
logger.info(f"Backend login successful for user {self.user.pk} with 2FA.")
|
||||
|
||||
@@ -60,7 +60,6 @@ from pretix.base.models import (
|
||||
)
|
||||
from pretix.base.services.quotas import QuotaAvailability
|
||||
from pretix.base.timeline import timeline_for_event
|
||||
from pretix.control.forms.event import CommentForm
|
||||
from pretix.control.signals import (
|
||||
event_dashboard_widgets, user_dashboard_widgets,
|
||||
)
|
||||
@@ -341,6 +340,8 @@ def welcome_wizard_widget(sender, **kwargs):
|
||||
|
||||
|
||||
def event_index(request, organizer, event):
|
||||
from pretix.control.forms.event import CommentForm
|
||||
|
||||
subevent = None
|
||||
if request.GET.get("subevent", "") != "" and request.event.has_subevents:
|
||||
i = request.GET.get("subevent", "")
|
||||
|
||||
@@ -98,7 +98,6 @@ from pretix.control.views.mailsetup import MailSettingsSetupView
|
||||
from pretix.control.views.user import RecentAuthenticationRequiredMixin
|
||||
from pretix.helpers.database import rolledback_transaction
|
||||
from pretix.multidomain.urlreverse import build_absolute_uri, get_event_domain
|
||||
from pretix.plugins.stripe.payment import StripeSettingsHolder
|
||||
from pretix.presale.views.widget import (
|
||||
version_default as widget_version_default,
|
||||
)
|
||||
@@ -1666,6 +1665,8 @@ class QuickSetupView(FormView):
|
||||
'or take your event live to start selling!'))
|
||||
|
||||
if form.cleaned_data.get('payment_stripe__enabled', False):
|
||||
from pretix.plugins.stripe.payment import StripeSettingsHolder
|
||||
|
||||
self.request.session['payment_stripe_oauth_enable'] = True
|
||||
return redirect(StripeSettingsHolder(self.request.event).get_connect_url(self.request))
|
||||
|
||||
|
||||
@@ -156,7 +156,7 @@ class BaseProcessView(AsyncAction, FormView):
|
||||
)
|
||||
)
|
||||
reader = parse_csv(self.file.file, 1024 * 1024, "replace", charset=charset)
|
||||
if reader._had_duplicates:
|
||||
if reader and reader._had_duplicates:
|
||||
messages.warning(
|
||||
self.request,
|
||||
_(
|
||||
|
||||
@@ -165,6 +165,9 @@ class UserEmergencyTokenView(AdministratorPermissionRequiredMixin, RecentAuthent
|
||||
d, __ = StaticDevice.objects.get_or_create(user=self.object, name='emergency')
|
||||
token = d.token_set.create(token=get_random_string(length=12, allowed_chars='1234567890'))
|
||||
self.object.log_action('pretix.user.settings.2fa.emergency', user=self.request.user)
|
||||
self.object.send_security_notice([
|
||||
_('A two-factor emergency code has been generated by a system administrator.')
|
||||
])
|
||||
|
||||
messages.success(request, _(
|
||||
'The emergency token for this user is "{token}". It can only be used once. Please make sure to transmit '
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-11-27 13:57+0000\n"
|
||||
"PO-Revision-Date: 2025-12-03 23:00+0000\n"
|
||||
"PO-Revision-Date: 2025-12-05 18:00+0000\n"
|
||||
"Last-Translator: sandra r <sandrarial@gestiontickets.online>\n"
|
||||
"Language-Team: Galician <https://translate.pretix.eu/projects/pretix/pretix/"
|
||||
"gl/>\n"
|
||||
@@ -721,7 +721,7 @@ msgid_plural ""
|
||||
msgstr[0] "O teu contrasinal non sexa o mesmo que o teu contrasinal anterior."
|
||||
msgstr[1] ""
|
||||
"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
|
||||
msgid "Online shop"
|
||||
@@ -3329,42 +3329,48 @@ msgid ""
|
||||
"Upload a valid image. The file you uploaded was either not an image or a "
|
||||
"corrupted image."
|
||||
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
|
||||
msgid ""
|
||||
"If you keep this empty, the ticket will be valid starting at the time of "
|
||||
"purchase."
|
||||
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
|
||||
#, fuzzy
|
||||
msgid "Street and Number"
|
||||
msgstr "Calle y número"
|
||||
msgstr "Rúa e Número"
|
||||
|
||||
#: pretix/base/forms/questions.py:1166
|
||||
msgid ""
|
||||
"Optional, but depending on the country you reside in we might need to charge "
|
||||
"you additional taxes if you do not enter it."
|
||||
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
|
||||
msgid "If you are registered in Switzerland, you can enter your UID instead."
|
||||
msgstr ""
|
||||
"Se estás rexistrado/a en Suíza, podes introducir o teu UID no seu lugar."
|
||||
|
||||
#: pretix/base/forms/questions.py:1172
|
||||
msgid ""
|
||||
"Optional, but it might be required for you to claim tax benefits on your "
|
||||
"invoice depending on your and the seller’s country of residence."
|
||||
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
|
||||
#, fuzzy
|
||||
msgid "No invoice requested"
|
||||
msgstr "Tarifa de cancelación"
|
||||
msgstr "Non se solicitou factura"
|
||||
|
||||
#: pretix/base/forms/questions.py:1183
|
||||
msgid "Invoice transmission method"
|
||||
msgstr ""
|
||||
msgstr "Método de transmisión de facturas"
|
||||
|
||||
#: pretix/base/forms/questions.py:1329
|
||||
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 "
|
||||
"transmission method."
|
||||
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
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The selected transmission type is not available in your country or for your "
|
||||
"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
|
||||
msgid ""
|
||||
"The selected type of invoice transmission requires a field that is currently "
|
||||
"not available, please reach out to the organizer."
|
||||
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
|
||||
msgid "This field is required for the selected type of invoice transmission."
|
||||
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/control/forms/users.py:58
|
||||
#, fuzzy
|
||||
msgid "Default timezone"
|
||||
msgstr "Zona horaria predefinida"
|
||||
msgstr "Fuso horario predeterminado"
|
||||
|
||||
#: pretix/base/forms/user.py:55 pretix/control/forms/users.py:59
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Only used for views that are not bound to an event. For all event views, the "
|
||||
"event timezone is used instead."
|
||||
msgstr ""
|
||||
"Sólo se utiliza para vistas que no están vinculadas a un evento. Para todas "
|
||||
"las vistas de eventos, se utiliza la zona horaria de eventos."
|
||||
"Só se usa para vistas que non están vinculadas a un evento. Para todas as "
|
||||
"vistas de eventos, úsase o fuso horario do evento."
|
||||
|
||||
#: pretix/base/forms/user.py:77
|
||||
#, fuzzy
|
||||
#| msgid "Attendee 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
|
||||
msgid "Device name"
|
||||
msgstr "Nombre do dispositivo"
|
||||
|
||||
#: pretix/base/forms/user.py:84
|
||||
#, fuzzy
|
||||
msgid "Device type"
|
||||
msgstr "Tipo de dispositivo"
|
||||
|
||||
#: pretix/base/forms/user.py:85
|
||||
#, fuzzy
|
||||
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
|
||||
#, fuzzy
|
||||
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/presale/forms/customer.py:456
|
||||
#, fuzzy
|
||||
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
|
||||
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/presale/forms/customer.py:461
|
||||
#, fuzzy
|
||||
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/presale/forms/customer.py:397
|
||||
#, fuzzy
|
||||
msgid "New password"
|
||||
msgstr "Nueva contraseña"
|
||||
msgstr "New password"
|
||||
|
||||
#: pretix/base/forms/user.py:117 pretix/control/forms/users.py:54
|
||||
#, fuzzy
|
||||
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
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"There already is an account associated with this email address. Please "
|
||||
"choose a different one."
|
||||
msgstr ""
|
||||
"Ya existe una cuenta asociada a este correo electrónico. Por favor, escoja "
|
||||
"otro."
|
||||
"Xa existe unha conta asociada a este enderezo de correo electrónico. Escolle "
|
||||
"unha diferente."
|
||||
|
||||
#: pretix/base/forms/user.py:179
|
||||
#, fuzzy
|
||||
#| msgid "Email address"
|
||||
msgid "Old email address"
|
||||
msgstr "Correo electrónico"
|
||||
msgstr "Enderezo de correo electrónico antigo"
|
||||
|
||||
#: pretix/base/forms/user.py:180
|
||||
#, fuzzy
|
||||
#| msgid "Email address"
|
||||
msgid "New email address"
|
||||
msgstr "Correo electrónico"
|
||||
msgstr "Novo enderezo de correo electrónico"
|
||||
|
||||
#: pretix/base/forms/validators.py:51
|
||||
msgid ""
|
||||
@@ -3492,29 +3488,32 @@ msgid ""
|
||||
"up. Please note: to use literal \"{\" or \"}\", you need to double them as "
|
||||
"\"{{\" and \"}}\"."
|
||||
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
|
||||
#, fuzzy, python-format
|
||||
#, python-format
|
||||
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
|
||||
#, fuzzy, python-format
|
||||
#, python-format
|
||||
msgid "Sample: %s"
|
||||
msgstr "Ciudad de ejemplo"
|
||||
msgstr "Mostra: %s"
|
||||
|
||||
#: pretix/base/forms/widgets.py:71
|
||||
#, python-brace-format
|
||||
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/plugins/checkinlists/exporters.py:757
|
||||
#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_create.html:40
|
||||
#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_update.html:54
|
||||
#, fuzzy
|
||||
msgid "Time"
|
||||
msgstr "Hora"
|
||||
msgstr "Tempo"
|
||||
|
||||
#: pretix/base/forms/widgets.py:234 pretix/base/forms/widgets.py:239
|
||||
msgid "Business or institutional customer"
|
||||
@@ -3527,53 +3526,49 @@ msgstr "Cliente individual"
|
||||
#: pretix/base/invoicing/email.py:50
|
||||
msgid "Email invoice directly to accounting department"
|
||||
msgstr ""
|
||||
"Enviar factura por correo electrónico directamente ao departamento de "
|
||||
"contabilidade"
|
||||
|
||||
#: pretix/base/invoicing/email.py:51
|
||||
#, fuzzy
|
||||
#| msgid "Please enter the same email address twice."
|
||||
msgid ""
|
||||
"If not selected, the invoice will be sent to you using the email address "
|
||||
"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
|
||||
#, fuzzy
|
||||
#| msgid "Email address verified"
|
||||
msgid "Email address for invoice"
|
||||
msgstr "Correo electrónico verificado"
|
||||
msgstr "Enderezo de correo electrónico para factura"
|
||||
|
||||
#: pretix/base/invoicing/email.py:91
|
||||
#, fuzzy
|
||||
msgid "PDF via email"
|
||||
msgstr "Vista previa del correo electrónico"
|
||||
msgstr "PDF por correo electrónico"
|
||||
|
||||
#: pretix/base/invoicing/national.py:37
|
||||
msgctxt "italian_invoice"
|
||||
msgid "Italian Exchange System (SdI)"
|
||||
msgstr ""
|
||||
msgstr "Sistema de intercambio italiano (SdI)"
|
||||
|
||||
#: pretix/base/invoicing/national.py:38
|
||||
msgctxt "italian_invoice"
|
||||
msgid "Exchange System (SdI)"
|
||||
msgstr ""
|
||||
msgstr "Sistema de intercambio (SdI)"
|
||||
|
||||
#: pretix/base/invoicing/national.py:49
|
||||
#, fuzzy
|
||||
#| msgid "Gift card code"
|
||||
msgctxt "italian_invoice"
|
||||
msgid "Fiscal code"
|
||||
msgstr "Código da tarxeta de regalo"
|
||||
msgstr "Código fiscal"
|
||||
|
||||
#: pretix/base/invoicing/national.py:53
|
||||
msgctxt "italian_invoice"
|
||||
msgid "Address for certified electronic mail"
|
||||
msgstr ""
|
||||
msgstr "Enderezo para correo electrónico certificado"
|
||||
|
||||
#: pretix/base/invoicing/national.py:57
|
||||
#, fuzzy
|
||||
msgctxt "italian_invoice"
|
||||
msgid "Recipient code"
|
||||
msgstr "Destinatario"
|
||||
msgstr "Código do destinatario"
|
||||
|
||||
#: pretix/base/invoicing/national.py:81
|
||||
msgctxt "italian_invoice"
|
||||
@@ -3583,75 +3578,68 @@ msgid ""
|
||||
"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."
|
||||
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
|
||||
#, fuzzy, python-format
|
||||
#, python-format
|
||||
msgctxt "invoice"
|
||||
msgid "Page %d of %d"
|
||||
msgstr "Página %d de %d"
|
||||
msgstr "Páxina %d de %d"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:384
|
||||
#, fuzzy
|
||||
msgctxt "invoice"
|
||||
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
|
||||
#, fuzzy
|
||||
msgctxt "invoice"
|
||||
msgid "Invoice from"
|
||||
msgstr "Factura de"
|
||||
msgstr "Factura dende"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:434
|
||||
#, fuzzy
|
||||
msgctxt "invoice"
|
||||
msgid "Invoice to"
|
||||
msgstr "Factura para"
|
||||
msgstr "Factura ata"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:471 pretix/base/invoicing/pdf.py:1222
|
||||
#, fuzzy
|
||||
msgctxt "invoice"
|
||||
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
|
||||
#, fuzzy
|
||||
msgctxt "invoice"
|
||||
msgid "Cancellation number"
|
||||
msgstr "Número de cancelación"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:486 pretix/base/invoicing/pdf.py:1237
|
||||
#, fuzzy
|
||||
msgctxt "invoice"
|
||||
msgid "Original invoice"
|
||||
msgstr "Factura original"
|
||||
msgstr "Factura orixinal"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:491 pretix/base/invoicing/pdf.py:1242
|
||||
#, fuzzy
|
||||
msgctxt "invoice"
|
||||
msgid "Invoice number"
|
||||
msgstr "Número de factura"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:499 pretix/base/invoicing/pdf.py:1257
|
||||
#, fuzzy
|
||||
msgctxt "invoice"
|
||||
msgid "Cancellation date"
|
||||
msgstr "Fecha de cancelación"
|
||||
msgstr "Data de cancelación"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:505
|
||||
#, fuzzy
|
||||
msgctxt "invoice"
|
||||
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
|
||||
#, fuzzy
|
||||
msgctxt "invoice"
|
||||
msgid "Invoice date"
|
||||
msgstr "Fecha de la factura"
|
||||
msgstr "Data da factura"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:528
|
||||
#, fuzzy
|
||||
msgctxt "invoice"
|
||||
msgid "Event"
|
||||
msgstr "Evento"
|
||||
@@ -3667,7 +3655,7 @@ msgstr ""
|
||||
" ata {to_date}"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:609 pretix/base/services/mail.py:512
|
||||
#, fuzzy, python-brace-format
|
||||
#, python-brace-format
|
||||
msgctxt "invoice"
|
||||
msgid "Invoice {num}"
|
||||
msgstr "Factura {num}"
|
||||
@@ -3679,25 +3667,21 @@ msgid "Customer reference: {reference}"
|
||||
msgstr "Referencia do cliente: {reference}"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:669
|
||||
#, fuzzy
|
||||
msgctxt "invoice"
|
||||
msgid "Customer VAT ID"
|
||||
msgstr "Cliente VAT ID"
|
||||
msgstr "CIF do cliente"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:676
|
||||
#, fuzzy
|
||||
msgctxt "invoice"
|
||||
msgid "Beneficiary"
|
||||
msgstr "Beneficiario"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:709
|
||||
#, fuzzy
|
||||
msgctxt "invoice"
|
||||
msgid "Tax Invoice"
|
||||
msgstr "Impuesto de la factura"
|
||||
msgstr "Factura fiscal"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:710
|
||||
#, fuzzy
|
||||
msgctxt "invoice"
|
||||
msgid "Invoice"
|
||||
msgstr "Factura"
|
||||
@@ -3706,7 +3690,6 @@ msgstr "Factura"
|
||||
#: pretix/control/templates/pretixcontrol/order/index.html:272
|
||||
#: pretix/control/templates/pretixcontrol/order/mail_history.html:70
|
||||
#: pretix/presale/templates/pretixpresale/event/order.html:244
|
||||
#, fuzzy
|
||||
msgctxt "invoice"
|
||||
msgid "Cancellation"
|
||||
msgstr "Cancelación"
|
||||
@@ -3724,110 +3707,97 @@ msgid "Qty"
|
||||
msgstr "Cant."
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:735 pretix/base/invoicing/pdf.py:1039
|
||||
#, fuzzy
|
||||
msgctxt "invoice"
|
||||
msgid "Tax rate"
|
||||
msgstr "Tasa de impuestos"
|
||||
msgstr "Tipo impositivo"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:736
|
||||
#, fuzzy
|
||||
msgctxt "invoice"
|
||||
msgid "Net"
|
||||
msgstr "Neto"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:737
|
||||
#, fuzzy
|
||||
msgctxt "invoice"
|
||||
msgid "Gross"
|
||||
msgstr "Bruto"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:743
|
||||
#, fuzzy
|
||||
msgctxt "invoice"
|
||||
msgid "Amount"
|
||||
msgstr "Monto"
|
||||
msgstr "Cantidade"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:870
|
||||
#, python-brace-format
|
||||
msgctxt "invoice"
|
||||
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
|
||||
#, fuzzy, python-brace-format
|
||||
#, python-brace-format
|
||||
msgctxt "invoice"
|
||||
msgid "Single price: {price}"
|
||||
msgstr "Precio original"
|
||||
msgstr "Prezo único: {price}"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:944 pretix/base/invoicing/pdf.py:949
|
||||
#, fuzzy
|
||||
msgctxt "invoice"
|
||||
msgid "Invoice total"
|
||||
msgstr "Total de la factura"
|
||||
msgstr "Total da factura"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:958
|
||||
#, fuzzy
|
||||
msgctxt "invoice"
|
||||
msgid "Received payments"
|
||||
msgstr "Pagos recibidos"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:963
|
||||
#, fuzzy
|
||||
msgctxt "invoice"
|
||||
msgid "Outstanding payments"
|
||||
msgstr "Pagos no válidos"
|
||||
msgstr "Pagos pendentes"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:980
|
||||
#, fuzzy
|
||||
msgctxt "invoice"
|
||||
msgid "Paid by gift card"
|
||||
msgstr "Tarjeta de crédito"
|
||||
msgstr "Pago con tarxeta regalo"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:985
|
||||
#, fuzzy
|
||||
msgctxt "invoice"
|
||||
msgid "Remaining amount"
|
||||
msgstr "Monto pendiente"
|
||||
msgstr "Cantidade restante"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:1009
|
||||
#, fuzzy, python-brace-format
|
||||
#, python-brace-format
|
||||
msgctxt "invoice"
|
||||
msgid "Invoice period: {daterange}"
|
||||
msgstr "Rango de fechas de evento"
|
||||
msgstr "Período de facturación: {daterange}"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:1040
|
||||
#, fuzzy
|
||||
msgctxt "invoice"
|
||||
msgid "Net value"
|
||||
msgstr "Valor neto"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:1041
|
||||
#, fuzzy
|
||||
msgctxt "invoice"
|
||||
msgid "Gross value"
|
||||
msgstr "Valor bruto"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:1042
|
||||
#, fuzzy
|
||||
msgctxt "invoice"
|
||||
msgid "Tax"
|
||||
msgstr "Impuesto"
|
||||
msgstr "Imposto"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:1072
|
||||
#, fuzzy
|
||||
msgctxt "invoice"
|
||||
msgid "Included taxes"
|
||||
msgstr "Impuestos incluidos"
|
||||
msgstr "Impostos incluídos"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:1100
|
||||
#, fuzzy, python-brace-format
|
||||
#, python-brace-format
|
||||
msgctxt "invoice"
|
||||
msgid ""
|
||||
"Using the conversion rate of 1:{rate} as published by the {authority} on "
|
||||
"{date}, this corresponds to:"
|
||||
msgstr ""
|
||||
"Utilizando el tipo de conversión de 1:{rate} publicado por el Banco Central "
|
||||
"Europeo el {date}, esto corresponde a:"
|
||||
"Usando a taxa de conversión de 1:{rate} tal e como a publicou {authority} o "
|
||||
"{date}, isto corresponde a:"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:1115
|
||||
#, fuzzy, python-brace-format
|
||||
@@ -3836,33 +3806,34 @@ msgid ""
|
||||
"Using the conversion rate of 1:{rate} as published by the {authority} on "
|
||||
"{date}, the invoice total corresponds to {total}."
|
||||
msgstr ""
|
||||
"Utilizando el tipo de conversión de 1:{rate} publicado por el Banco Central "
|
||||
"Europeo el {date}, el total de la factura corresponde a {total}."
|
||||
"Usando a taxa de conversión de 1:{rate} publicada pola {authority} o {date}, "
|
||||
"o total da factura corresponde a {total}."
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:1129
|
||||
msgid "Default invoice renderer (European-style letter)"
|
||||
msgstr ""
|
||||
msgstr "Renderizador de facturas predeterminado (carta de estilo europeo)"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:1218
|
||||
#, fuzzy
|
||||
msgctxt "invoice"
|
||||
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
|
||||
msgid "Simplified invoice renderer"
|
||||
msgstr ""
|
||||
msgstr "Renderizador de facturas simplificado"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:1284
|
||||
#, fuzzy, python-brace-format
|
||||
msgctxt "invoice"
|
||||
msgid "Event date: {date_range}"
|
||||
msgstr "Rango de fechas de evento"
|
||||
msgstr "Data do evento: {date_range}"
|
||||
|
||||
#: pretix/base/invoicing/peppol.py:128
|
||||
msgid ""
|
||||
"A Peppol participant ID always starts with a prefix, followed by a colon (:)."
|
||||
msgstr ""
|
||||
"Un ID de participante de Peppol sempre comeza cun prefixo, seguido de dous "
|
||||
"puntos (:)."
|
||||
|
||||
#: pretix/base/invoicing/peppol.py:132
|
||||
#, python-format
|
||||
@@ -3870,6 +3841,8 @@ msgid ""
|
||||
"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."
|
||||
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
|
||||
#, python-format
|
||||
@@ -3877,17 +3850,18 @@ msgid ""
|
||||
"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."
|
||||
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
|
||||
msgid "Peppol participant ID"
|
||||
msgstr ""
|
||||
msgstr "Identificación de participante de Peppol"
|
||||
|
||||
#: pretix/base/invoicing/peppol.py:170
|
||||
#, fuzzy
|
||||
#| msgid "Gift card code"
|
||||
msgctxt "peppol_invoice"
|
||||
msgid "Visual copy"
|
||||
msgstr "Código da tarxeta de regalo"
|
||||
msgstr "Copia visual"
|
||||
|
||||
#: pretix/base/invoicing/peppol.py:175
|
||||
msgctxt "peppol_invoice"
|
||||
@@ -3896,27 +3870,30 @@ msgid ""
|
||||
"invoice for VAT purposes. The original invoice is issued in XML format and "
|
||||
"transmitted through the Peppol network."
|
||||
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
|
||||
msgid ""
|
||||
"The relevant plugin is currently not active. To activate it, click here to "
|
||||
"go to the plugin settings."
|
||||
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
|
||||
#, fuzzy
|
||||
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
|
||||
#, fuzzy
|
||||
msgid "(deleted)"
|
||||
msgstr "Eliminar"
|
||||
msgstr "(eliminado)"
|
||||
|
||||
#: pretix/base/logentrytypes.py:78
|
||||
#, fuzzy, python-brace-format
|
||||
#, python-brace-format
|
||||
msgid "Order {val}"
|
||||
msgstr "Orden {val}"
|
||||
msgstr "Orde {val}"
|
||||
|
||||
#: pretix/base/logentrytypes.py:90
|
||||
#, fuzzy, python-brace-format
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-11-27 13:57+0000\n"
|
||||
"PO-Revision-Date: 2025-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"
|
||||
"Language-Team: Japanese <https://translate.pretix.eu/projects/pretix/pretix/"
|
||||
"ja/>\n"
|
||||
@@ -2149,7 +2149,7 @@ msgstr "クライアントID"
|
||||
#: pretix/base/exporters/items.py:91 pretix/base/models/items.py:667
|
||||
#: pretix/base/models/items.py:1168
|
||||
msgid "Original price"
|
||||
msgstr "元の価格"
|
||||
msgstr "通常価格"
|
||||
|
||||
#: pretix/base/exporters/items.py:92 pretix/base/models/items.py:684
|
||||
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 "
|
||||
"change the price or item, the discount will still be calculated from the "
|
||||
"original price at the time of purchase."
|
||||
msgstr ""
|
||||
"このポジションは限られた予算のバウチャーで作成されました。価格やアイテムを変"
|
||||
"更しても、割引は購入時の元の価格から計算されます。"
|
||||
msgstr "このポジションは限られた予算のバウチャーで作成されました。価格やアイテムを変"
|
||||
"更しても、割引は購入時の通常価格から計算されます。"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/order/change.html:101
|
||||
#: 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:304
|
||||
msgid "Original price:"
|
||||
msgstr "元の価格:"
|
||||
msgstr "通常価格:"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html:136
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html:278
|
||||
|
||||
@@ -7,16 +7,16 @@ msgstr ""
|
||||
"Project-Id-Version: 1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-11-27 13:57+0000\n"
|
||||
"PO-Revision-Date: 2025-10-26 18:00+0000\n"
|
||||
"Last-Translator: Jan Van Haver <jan.van.haver@gmail.com>\n"
|
||||
"Language-Team: Dutch <https://translate.pretix.eu/projects/pretix/pretix/nl/"
|
||||
">\n"
|
||||
"PO-Revision-Date: 2025-12-08 07:00+0000\n"
|
||||
"Last-Translator: Ruud Hendrickx <ruud@leckxicon.eu>\n"
|
||||
"Language-Team: Dutch <https://translate.pretix.eu/projects/pretix/pretix/nl/>"
|
||||
"\n"
|
||||
"Language: nl\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.14\n"
|
||||
"X-Generator: Weblate 5.14.3\n"
|
||||
|
||||
#: pretix/_base_settings.py:87
|
||||
msgid "English"
|
||||
@@ -44,7 +44,7 @@ msgstr "Catalaans"
|
||||
|
||||
#: pretix/_base_settings.py:93
|
||||
msgid "Chinese (simplified)"
|
||||
msgstr "Chinees (versimpeld)"
|
||||
msgstr "Chinees (vereenvoudigd)"
|
||||
|
||||
#: pretix/_base_settings.py:94
|
||||
msgid "Chinese (traditional)"
|
||||
|
||||
@@ -8,8 +8,8 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-11-27 13:57+0000\n"
|
||||
"PO-Revision-Date: 2024-02-13 16:00+0000\n"
|
||||
"Last-Translator: Wessel Stam <info@wesselstam.nl>\n"
|
||||
"PO-Revision-Date: 2025-12-08 07:00+0000\n"
|
||||
"Last-Translator: Ruud Hendrickx <ruud@leckxicon.eu>\n"
|
||||
"Language-Team: Dutch (informal) <https://translate.pretix.eu/projects/pretix/"
|
||||
"pretix/nl_Informal/>\n"
|
||||
"Language: nl_Informal\n"
|
||||
@@ -17,7 +17,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.3.1\n"
|
||||
"X-Generator: Weblate 5.14.3\n"
|
||||
|
||||
#: pretix/_base_settings.py:87
|
||||
msgid "English"
|
||||
@@ -37,15 +37,15 @@ msgstr "Arabisch"
|
||||
|
||||
#: pretix/_base_settings.py:91
|
||||
msgid "Basque"
|
||||
msgstr ""
|
||||
msgstr "Baskisch"
|
||||
|
||||
#: pretix/_base_settings.py:92
|
||||
msgid "Catalan"
|
||||
msgstr ""
|
||||
msgstr "Catalaans"
|
||||
|
||||
#: pretix/_base_settings.py:93
|
||||
msgid "Chinese (simplified)"
|
||||
msgstr "Chinees (versimpeld)"
|
||||
msgstr "Chinees (vereenvoudigd)"
|
||||
|
||||
#: pretix/_base_settings.py:94
|
||||
msgid "Chinese (traditional)"
|
||||
@@ -57,7 +57,7 @@ msgstr "Tsjechisch"
|
||||
|
||||
#: pretix/_base_settings.py:96
|
||||
msgid "Croatian"
|
||||
msgstr ""
|
||||
msgstr "Kroatisch"
|
||||
|
||||
#: pretix/_base_settings.py:97
|
||||
msgid "Danish"
|
||||
@@ -89,7 +89,7 @@ msgstr "Grieks"
|
||||
|
||||
#: pretix/_base_settings.py:104
|
||||
msgid "Hebrew"
|
||||
msgstr ""
|
||||
msgstr "Hebreeuws"
|
||||
|
||||
#: pretix/_base_settings.py:105
|
||||
msgid "Indonesian"
|
||||
@@ -101,7 +101,7 @@ msgstr "Italiaans"
|
||||
|
||||
#: pretix/_base_settings.py:107
|
||||
msgid "Japanese"
|
||||
msgstr ""
|
||||
msgstr "Japans"
|
||||
|
||||
#: pretix/_base_settings.py:108
|
||||
msgid "Latvian"
|
||||
@@ -133,11 +133,11 @@ msgstr "Russisch"
|
||||
|
||||
#: pretix/_base_settings.py:115
|
||||
msgid "Slovak"
|
||||
msgstr ""
|
||||
msgstr "Slowaaks"
|
||||
|
||||
#: pretix/_base_settings.py:116
|
||||
msgid "Swedish"
|
||||
msgstr ""
|
||||
msgstr "Zweeds"
|
||||
|
||||
#: pretix/_base_settings.py:117
|
||||
msgid "Spanish"
|
||||
@@ -145,7 +145,7 @@ msgstr "Spaans"
|
||||
|
||||
#: pretix/_base_settings.py:118
|
||||
msgid "Spanish (Latin America)"
|
||||
msgstr ""
|
||||
msgstr "Spaans (Latijns-Amerika)"
|
||||
|
||||
#: pretix/_base_settings.py:119
|
||||
msgid "Turkish"
|
||||
@@ -261,7 +261,7 @@ msgstr ""
|
||||
#: pretix/api/serializers/event.py:234 pretix/api/serializers/event.py:554
|
||||
#, python-brace-format
|
||||
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
|
||||
#, python-brace-format
|
||||
@@ -32970,7 +32970,7 @@ msgstr ""
|
||||
#: pretix/plugins/reports/exporters.py:257
|
||||
msgctxt "export_category"
|
||||
msgid "Analysis"
|
||||
msgstr ""
|
||||
msgstr "Analyse"
|
||||
|
||||
#: pretix/plugins/reports/accountingreport.py:83
|
||||
#, fuzzy
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-11-27 13:57+0000\n"
|
||||
"PO-Revision-Date: 2025-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"
|
||||
"Language-Team: Portuguese (Brazil) <https://translate.pretix.eu/projects/"
|
||||
"pretix/pretix/pt_BR/>\n"
|
||||
@@ -17,7 +17,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 5.13.2\n"
|
||||
"X-Generator: Weblate 5.14.3\n"
|
||||
|
||||
#: pretix/_base_settings.py:87
|
||||
msgid "English"
|
||||
@@ -253,9 +253,8 @@ msgid ""
|
||||
"Events cannot be created as 'live'. Quotas and payment must be added to the "
|
||||
"event before sales can go live."
|
||||
msgstr ""
|
||||
"Os eventos não podem ser criados como 'ativo'. As cotas e métodos de "
|
||||
"pagamento devem ser adicionados ao evento antes que as vendas possam ser "
|
||||
"iniciadas."
|
||||
"Eventos não podem ser criados como 'ativo'. Cotas e métodos de pagamento "
|
||||
"devem ser adicionados ao evento antes que as vendas se iniciem."
|
||||
|
||||
#: pretix/api/serializers/event.py:234 pretix/api/serializers/event.py:554
|
||||
#, python-brace-format
|
||||
@@ -358,7 +357,8 @@ msgstr ""
|
||||
|
||||
#: pretix/api/serializers/item.py:587 pretix/control/forms/item.py:177
|
||||
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
|
||||
msgid "Circular dependency between questions detected."
|
||||
@@ -816,28 +816,22 @@ msgstr ""
|
||||
"confirme primeiro o endereço de email na sua conta."
|
||||
|
||||
#: pretix/base/datasync/datasync.py:263
|
||||
#, fuzzy, python-brace-format
|
||||
#| msgid ""
|
||||
#| "Field \"{field_name}\" is not valid for {available_inputs}. Please check "
|
||||
#| "your {provider_name} settings."
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"Field \"{field_name}\" does not exist. Please check your {provider_name} "
|
||||
"settings."
|
||||
msgstr ""
|
||||
"O campo \"{field_name}\" não é válido para {available_inputs}. Verifique as "
|
||||
"configurações de {provider_name}."
|
||||
"O campo \"{field_name}\" não existe. Por favor, verifique as configurações "
|
||||
"de {provider_name}."
|
||||
|
||||
#: pretix/base/datasync/datasync.py:270
|
||||
#, fuzzy, python-brace-format
|
||||
#| msgid ""
|
||||
#| "Field \"{field_name}\" is not valid for {available_inputs}. Please check "
|
||||
#| "your {provider_name} settings."
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"Field \"{field_name}\" requires {required_input}, but only got "
|
||||
"{available_inputs}. Please check your {provider_name} settings."
|
||||
msgstr ""
|
||||
"O campo \"{field_name}\" não é válido para {available_inputs}. Verifique as "
|
||||
"configurações de {provider_name}."
|
||||
"Campo \"{field_name}\" exige {required_input}, mas apenas {available_inputs} "
|
||||
"foram fornecidas. Por favor, verifique as configurações de {provider_name}."
|
||||
|
||||
#: pretix/base/datasync/datasync.py:281
|
||||
#, 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
|
||||
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
|
||||
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/transaction_list.html:13
|
||||
msgid "Amount"
|
||||
msgstr "Valor"
|
||||
msgstr "Quantidade"
|
||||
|
||||
#: pretix/base/exporters/orderlist.py:1098
|
||||
#: pretix/control/templates/pretixcontrol/boxoffice/payment.html:102
|
||||
@@ -3286,10 +3280,8 @@ msgid "Repeat password"
|
||||
msgstr "Repita a senha"
|
||||
|
||||
#: pretix/base/forms/auth.py:220 pretix/base/forms/user.py:99
|
||||
#, fuzzy
|
||||
#| msgid "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/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 "
|
||||
"transmission method."
|
||||
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
|
||||
msgid ""
|
||||
@@ -3414,6 +3408,8 @@ msgid ""
|
||||
"The selected type of invoice transmission requires a field that is currently "
|
||||
"not available, please reach out to the organizer."
|
||||
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
|
||||
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."
|
||||
|
||||
#: pretix/base/forms/user.py:77
|
||||
#, fuzzy
|
||||
#| msgid "Attendee email address"
|
||||
msgid "Change email address"
|
||||
msgstr "Email do participante"
|
||||
msgstr "Alterar endereço de e-mail"
|
||||
|
||||
#: pretix/base/forms/user.py:83
|
||||
msgid "Device name"
|
||||
@@ -3486,16 +3480,12 @@ msgstr ""
|
||||
"um diferente."
|
||||
|
||||
#: pretix/base/forms/user.py:179
|
||||
#, fuzzy
|
||||
#| msgid "Email address"
|
||||
msgid "Old email address"
|
||||
msgstr "Endereço de email"
|
||||
msgstr "Endereço de e-mail antigo"
|
||||
|
||||
#: pretix/base/forms/user.py:180
|
||||
#, fuzzy
|
||||
#| msgid "Email address"
|
||||
msgid "New email address"
|
||||
msgstr "Endereço de email"
|
||||
msgstr "Endereço de e-mail novo"
|
||||
|
||||
#: pretix/base/forms/validators.py:51
|
||||
msgid ""
|
||||
@@ -3540,22 +3530,17 @@ msgid "Individual customer"
|
||||
msgstr "Cliente pessoa física"
|
||||
|
||||
#: 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"
|
||||
msgstr ""
|
||||
"Para enviar a fatura diretamente ao seu departamento de contabilidade, "
|
||||
"insira o endereço de e-mail:"
|
||||
"Enviar e-mail com a fatura diretamente para departamento de contabilidade"
|
||||
|
||||
#: pretix/base/invoicing/email.py:51
|
||||
#, fuzzy
|
||||
#| msgid "The invoice was sent to the designated email address."
|
||||
msgid ""
|
||||
"If not selected, the invoice will be sent to you using the email address "
|
||||
"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
|
||||
msgid "Email address for invoice"
|
||||
@@ -3778,12 +3763,10 @@ msgid "Remaining amount"
|
||||
msgstr "Valor restante"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:1009
|
||||
#, fuzzy, python-brace-format
|
||||
#| msgctxt "invoice"
|
||||
#| msgid "Event date: {date_range}"
|
||||
#, python-brace-format
|
||||
msgctxt "invoice"
|
||||
msgid "Invoice period: {daterange}"
|
||||
msgstr "Data do evento: {date_range}"
|
||||
msgstr "Período da fatura: {daterange}"
|
||||
|
||||
#: pretix/base/invoicing/pdf.py:1040
|
||||
msgctxt "invoice"
|
||||
@@ -3868,12 +3851,9 @@ msgid "Peppol participant ID"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/invoicing/peppol.py:170
|
||||
#, fuzzy
|
||||
#| msgctxt "italian_invoice"
|
||||
#| msgid "Fiscal code"
|
||||
msgctxt "peppol_invoice"
|
||||
msgid "Visual copy"
|
||||
msgstr "Código fiscal"
|
||||
msgstr "Cópia visual"
|
||||
|
||||
#: pretix/base/invoicing/peppol.py:175
|
||||
msgctxt "peppol_invoice"
|
||||
@@ -4357,10 +4337,8 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/models/auth.py:392
|
||||
#, fuzzy
|
||||
#| msgid "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/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 "
|
||||
"codes, invoice numbers, and bank transfer references."
|
||||
msgstr ""
|
||||
"Deve ser curts, conter apenas letras minúsculas, números, pontos e traços, e "
|
||||
"ser exclusiva entre seus eventos. Recomendamos algum tipo de abreviação ou "
|
||||
"uma data com menos de 10 caracteres que sejam facilmente lembradas, mas você "
|
||||
"também pode usar um valor aleatório. Esta informação será usada em URLs, "
|
||||
"códigos de pedido, números de fatura e referências de transferência bancária."
|
||||
"Deve conter apenas letras minúsculas, números, pontos e traços, sendo "
|
||||
"exclusiva para suas eventos. Recomendamos uma abreviação ou data com menos "
|
||||
"de 10 caracteres e que seja facilmente lembrada, mas você também pode usar "
|
||||
"um valor aleatório. Esta informação será usada em URLs, códigos de pedido, "
|
||||
"número de faturas e referências de transações bancárias."
|
||||
|
||||
#: pretix/base/models/event.py:607 pretix/base/models/organizer.py:89
|
||||
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."
|
||||
|
||||
#: 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 ""
|
||||
"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."
|
||||
msgstr ""
|
||||
"Se esta opção estiver ativa, seus usuários podem escolher o próprio preço. O "
|
||||
"preço configurado acima é então interpretado como o preço mínimo que um "
|
||||
"usuário deve inserir. Você pode usar isso, por exemplo, para coletar doações "
|
||||
"adicionais para o seu evento. No momento, isto não é suportado por produtos "
|
||||
"comprados como um complemento de outros produtos."
|
||||
"Se esta opção está selecionada, os usuários poderão pagar o preço que "
|
||||
"desejarem. O preço padrão acima será interpretado como o preço mínimo que o "
|
||||
"usuário deverá pagar. Você pode usar esta opção, por exemplo, para coletar "
|
||||
"doações adicionais para o seu evento."
|
||||
|
||||
#: pretix/base/models/items.py:511 pretix/base/models/items.py:1175
|
||||
msgid "Suggested price"
|
||||
@@ -6298,9 +6268,6 @@ msgstr ""
|
||||
"insira um valor possível por linha."
|
||||
|
||||
#: pretix/base/models/items.py:2310
|
||||
#, fuzzy
|
||||
#| msgctxt "timeframe"
|
||||
#| msgid "Start"
|
||||
msgid "Start"
|
||||
msgstr "Início"
|
||||
|
||||
@@ -7912,10 +7879,8 @@ msgid "123.45 EUR"
|
||||
msgstr "123.45 BRL"
|
||||
|
||||
#: pretix/base/pdf.py:166
|
||||
#, fuzzy
|
||||
#| msgid "Price including add-ons"
|
||||
msgid "Price including bundled products"
|
||||
msgstr "Preço incluindo complementos"
|
||||
msgstr "Preços incluindo produtos empacotados"
|
||||
|
||||
#: pretix/base/pdf.py:175
|
||||
#, fuzzy
|
||||
@@ -9878,10 +9843,8 @@ msgid "Require a phone number per order"
|
||||
msgstr "Exigir um número de telefone por pedido"
|
||||
|
||||
#: pretix/base/settings.py:482
|
||||
#, fuzzy
|
||||
#| msgid "including all taxes"
|
||||
msgid "Rounding of taxes"
|
||||
msgstr "incluindo todos os impostos"
|
||||
msgstr "Arredondamento dos impostos"
|
||||
|
||||
#: pretix/base/settings.py:486
|
||||
msgid ""
|
||||
@@ -10424,18 +10387,12 @@ msgid "Automatic, but prefer invoice date over event date"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/base/settings.py:1142 pretix/base/settings.py:1153
|
||||
#, fuzzy
|
||||
#| msgctxt "invoice"
|
||||
#| msgid "Invoice date"
|
||||
msgid "Invoice date"
|
||||
msgstr "Data da fatura"
|
||||
|
||||
#: pretix/base/settings.py:1146
|
||||
#, fuzzy
|
||||
#| msgctxt "subevent"
|
||||
#| msgid "Date ordering"
|
||||
msgid "Date of service"
|
||||
msgstr "Ordenação de datas"
|
||||
msgstr "Data do serviço"
|
||||
|
||||
#: pretix/base/settings.py:1155
|
||||
msgid ""
|
||||
@@ -11299,8 +11256,8 @@ msgstr "Endereço de contato"
|
||||
#: pretix/base/settings.py:2161 pretix/control/forms/event.py:1824
|
||||
msgid "We'll show this publicly to allow attendees to contact you."
|
||||
msgstr ""
|
||||
"Mostraremos isso publicamente para permitir que os participantes entrem em "
|
||||
"contato com você."
|
||||
"Será exibido publicamente para que participantes possam entrar em contato "
|
||||
"com você."
|
||||
|
||||
#: pretix/base/settings.py:2169 pretix/control/forms/event.py:1816
|
||||
msgid "Imprint URL"
|
||||
@@ -12166,17 +12123,7 @@ msgid "Invoice {invoice_number}"
|
||||
msgstr "Fatura {invoice_number}"
|
||||
|
||||
#: pretix/base/settings.py:2789
|
||||
#, fuzzy, 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"
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"Hello,\n"
|
||||
"\n"
|
||||
@@ -12189,12 +12136,12 @@ msgid ""
|
||||
msgstr ""
|
||||
"Olá,\n"
|
||||
"\n"
|
||||
"Segue anexo uma nova fatura para o pedido {code} para {evento} . Este pedido "
|
||||
"foi feito por {order_email}.\n"
|
||||
"Em anexo você encontrará uma nova fatura para o pedido {code} para {event}. "
|
||||
"Este pedido foi feito por {order_email}.\n"
|
||||
"\n"
|
||||
"Atenciosamente, \n"
|
||||
"\n"
|
||||
"Equipe organizadora de {event}"
|
||||
"Organização {event}"
|
||||
|
||||
#: pretix/base/settings.py:2807 pretix/base/settings.py:2823
|
||||
#, python-brace-format
|
||||
@@ -13256,13 +13203,13 @@ msgid "Contact:"
|
||||
msgstr "Contato:"
|
||||
|
||||
#: pretix/base/templates/pretixbase/email/order_details.html:54
|
||||
#, fuzzy, python-format
|
||||
#| msgid ""
|
||||
#| "You are receiving this email because you placed an order for {event}."
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You are receiving this email because you placed an order for "
|
||||
"<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/control/templates/pretixcontrol/organizers/customer.html:23
|
||||
@@ -13937,7 +13884,7 @@ msgstr "Padrão ({value})"
|
||||
|
||||
#: pretix/control/forms/event.py:380
|
||||
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
|
||||
msgid "Domain"
|
||||
@@ -14023,21 +13970,16 @@ msgstr ""
|
||||
"que o cartão-presente é emitido."
|
||||
|
||||
#: pretix/control/forms/event.py:813
|
||||
#, fuzzy
|
||||
#| msgid "including all taxes"
|
||||
msgid "Prices including tax"
|
||||
msgstr "incluindo todos os impostos"
|
||||
msgstr "Preços incluindo impostos"
|
||||
|
||||
#: pretix/control/forms/event.py:814
|
||||
msgid "Recommended if you sell tickets at least partly to consumers."
|
||||
msgstr ""
|
||||
|
||||
#: pretix/control/forms/event.py:818
|
||||
#, fuzzy
|
||||
#| msgctxt "reporting_timeframe"
|
||||
#| msgid "All future (excluding today)"
|
||||
msgid "Prices excluding tax"
|
||||
msgstr "Todos os futuros (excluindo hoje)"
|
||||
msgstr "Preços excluindo impostos"
|
||||
|
||||
#: pretix/control/forms/event.py:819
|
||||
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."
|
||||
|
||||
#: pretix/control/logdisplay.py:672
|
||||
#, fuzzy, python-brace-format
|
||||
#| msgid ""
|
||||
#| "The email address has been changed from \"{old_email}\" to \"{new_email}"
|
||||
#| "\"."
|
||||
#, python-brace-format
|
||||
msgid "Your email address has been changed from {old_email} to {email}."
|
||||
msgstr ""
|
||||
"O endereço de e-mail foi alterado de \"{old_email}\" para \"{new_email}\"."
|
||||
msgstr "Seu endereço de email foi modificado de {old_email} para {email}."
|
||||
|
||||
#: pretix/control/logdisplay.py:673
|
||||
#, fuzzy, python-brace-format
|
||||
#| msgid "Your email address has been updated."
|
||||
#, python-brace-format
|
||||
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
|
||||
#, python-brace-format
|
||||
@@ -19690,6 +19627,20 @@ msgid ""
|
||||
"Best regards,\n"
|
||||
"Your pretix team\n"
|
||||
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
|
||||
#, python-format
|
||||
@@ -21314,10 +21265,8 @@ msgid "with custom rules"
|
||||
msgstr "Regras personalizadas"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/event/tax.html:110
|
||||
#, fuzzy
|
||||
#| msgid "Base 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:6
|
||||
@@ -21980,6 +21929,9 @@ msgid ""
|
||||
"your event. By default, we will only offer ticket downloads for these "
|
||||
"products."
|
||||
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/index.html:41
|
||||
@@ -26144,7 +26096,7 @@ msgstr ""
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/shredder/download.html:29
|
||||
msgid "Download data"
|
||||
msgstr ""
|
||||
msgstr "Baixar dados"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/shredder/download.html:34
|
||||
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
|
||||
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
|
||||
msgid "Download the Google Authenticator application to your phone:"
|
||||
@@ -26901,11 +26853,11 @@ msgstr ""
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/user/staff_session_edit.html:6
|
||||
msgid "Session notes"
|
||||
msgstr ""
|
||||
msgstr "Notas de sessão"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/user/staff_session_edit.html:17
|
||||
msgid "Audit log"
|
||||
msgstr ""
|
||||
msgstr "Log de auditoria"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/user/staff_session_edit.html:30
|
||||
msgid "Method"
|
||||
@@ -27949,7 +27901,7 @@ msgstr ""
|
||||
|
||||
#: pretix/control/views/item.py:237
|
||||
msgid "The selected category has been deleted."
|
||||
msgstr ""
|
||||
msgstr "A categoria selecionada foi excluída"
|
||||
|
||||
#: pretix/control/views/item.py:322
|
||||
msgid "The new category has been created."
|
||||
@@ -29874,7 +29826,7 @@ msgstr ""
|
||||
|
||||
#: pretix/plugins/banktransfer/payment.py:239
|
||||
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
|
||||
msgid "Please enter your bank account details."
|
||||
@@ -30175,7 +30127,7 @@ msgstr ""
|
||||
|
||||
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/pending.html:122
|
||||
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:7
|
||||
@@ -30746,6 +30698,8 @@ msgid ""
|
||||
"We're waiting for an answer from PayPal regarding your payment. Please "
|
||||
"contact us, if this takes more than a few hours."
|
||||
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/paypal2/templates/pretixplugins/paypal2/redirect.html:17
|
||||
@@ -33370,19 +33324,17 @@ msgstr "Organizador: {organizer}"
|
||||
#: pretix/presale/ical.py:139
|
||||
#, python-brace-format
|
||||
msgid "{event} - {item}"
|
||||
msgstr ""
|
||||
msgstr "{event} - {item}"
|
||||
|
||||
#: pretix/presale/ical.py:147
|
||||
#, fuzzy, python-brace-format
|
||||
#| msgid "Start date"
|
||||
#, python-brace-format
|
||||
msgid "Start: {datetime}"
|
||||
msgstr "Data inicial"
|
||||
msgstr "Início: {datetime}"
|
||||
|
||||
#: pretix/presale/ical.py:150
|
||||
#, fuzzy, python-brace-format
|
||||
#| msgid "Admission: {datetime}"
|
||||
#, python-brace-format
|
||||
msgid "End: {datetime}"
|
||||
msgstr "Admissão: {datetime}"
|
||||
msgstr "Término: {datetime}"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/base.html:44
|
||||
#, 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/order_pay_change.html:45
|
||||
#, fuzzy, python-format
|
||||
#| msgid "%(num)s available"
|
||||
#, python-format
|
||||
msgid "(%(count)s available)"
|
||||
msgid_plural "(%(count)s available)"
|
||||
msgstr[0] "%(num)s disponíveis"
|
||||
msgstr[1] "%(num)s disponíveis"
|
||||
msgstr[0] "(%(count)s disponível)"
|
||||
msgstr[1] "(%(count)s disponíveis)"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/checkout_payment.html:101
|
||||
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:288
|
||||
#, fuzzy, python-format
|
||||
#| msgid "%(count)s event"
|
||||
#| msgid_plural "%(count)s events"
|
||||
#, python-format
|
||||
msgid "%(amount)s× in your cart"
|
||||
msgid_plural "%(amount)s× in your cart"
|
||||
msgstr[0] "%(count)s evento"
|
||||
msgstr[1] "%(count)s events"
|
||||
msgstr[0] "%(amount)s× no seu carrinho"
|
||||
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:374
|
||||
@@ -35632,10 +35581,8 @@ msgid "The following gift cards are available in your customer account:"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/giftcard/checkout.html:24
|
||||
#, fuzzy
|
||||
#| msgid "Issued gift cards"
|
||||
msgid "Use gift card"
|
||||
msgstr "Cartões-presente emitidos"
|
||||
msgstr "Usar cartão-presente"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/giftcard/checkout_confirm.html:4
|
||||
#, python-format
|
||||
@@ -35652,7 +35599,7 @@ msgid ""
|
||||
"This is a self-hosted installation of <a %(a_attr)s>pretix, your free and "
|
||||
"open source ticket sales software</a>."
|
||||
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>."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/index.html:15
|
||||
@@ -35748,22 +35695,18 @@ msgid "Issued on %(date)s"
|
||||
msgstr "Leitura negada: %(date)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_giftcards.html:38
|
||||
#, fuzzy, python-format
|
||||
#| msgid "Expired since"
|
||||
#, python-format
|
||||
msgid "Expired since %(date)s"
|
||||
msgstr "Expirado desde"
|
||||
msgstr "Expirado desde %(date)s"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_giftcards.html:46
|
||||
#, fuzzy, python-format
|
||||
#| msgid "Valid until %(datetime)s"
|
||||
#, python-format
|
||||
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
|
||||
#, fuzzy
|
||||
#| msgid "Remaining balance"
|
||||
msgid "Remaining value:"
|
||||
msgstr "Saldo restante"
|
||||
msgstr "Valor restante:"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_giftcards.html:76
|
||||
#, 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."
|
||||
|
||||
#: pretix/presale/views/widget.py:412
|
||||
#, fuzzy
|
||||
#| msgid "The selected seat \"{seat}\" 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
|
||||
#, python-format
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-11-20 10:37+0000\n"
|
||||
"PO-Revision-Date: 2025-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"
|
||||
"Language-Team: Portuguese (Brazil) <https://translate.pretix.eu/projects/"
|
||||
"pretix/pretix-js/pt_BR/>\n"
|
||||
@@ -17,7 +17,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 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:62
|
||||
@@ -566,11 +566,11 @@ msgstr "ausente"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:289
|
||||
msgid "Error: Product not found!"
|
||||
msgstr ""
|
||||
msgstr "Erro: Produto não encontrado!"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:296
|
||||
msgid "Error: Variation not found!"
|
||||
msgstr ""
|
||||
msgstr "Erro: Variação não encontrada!"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/editor.js:171
|
||||
msgid "Check-in QR"
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-11-27 13:57+0000\n"
|
||||
"PO-Revision-Date: 2025-12-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"
|
||||
"Language-Team: Portuguese (Portugal) <https://translate.pretix.eu/projects/"
|
||||
"pretix/pretix/pt_PT/>\n"
|
||||
@@ -3522,8 +3522,7 @@ msgstr "Participante individual"
|
||||
|
||||
#: pretix/base/invoicing/email.py:50
|
||||
msgid "Email invoice directly to accounting department"
|
||||
msgstr ""
|
||||
"Envie a fatura diretamente por e-mail para o departamento de contabilidade"
|
||||
msgstr "Envia a fatura diretamente por e-mail para o departamento financeiro"
|
||||
|
||||
#: pretix/base/invoicing/email.py:51
|
||||
msgid ""
|
||||
@@ -6702,10 +6701,8 @@ msgstr ""
|
||||
"tua fatura, caso assim o desejes."
|
||||
|
||||
#: pretix/base/models/orders.py:3534
|
||||
#, fuzzy
|
||||
#| msgid "Transaction time"
|
||||
msgid "Transmission type"
|
||||
msgstr "Hora de transação"
|
||||
msgstr "Modo de comunicação"
|
||||
|
||||
#: pretix/base/models/orders.py:3632
|
||||
#: 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:"
|
||||
msgstr ""
|
||||
"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 "
|
||||
"de verificação abaixo:"
|
||||
"se este endereço de e-mail te pertence. Por favor, indica o código de "
|
||||
"verificação abaixo:"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/email_setup_simple.html:63
|
||||
msgid "Verification code"
|
||||
@@ -27454,6 +27451,9 @@ msgid ""
|
||||
"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."
|
||||
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:8
|
||||
@@ -27567,6 +27567,9 @@ msgid ""
|
||||
"confirm your email address using a confirmation code we will send to your "
|
||||
"email address."
|
||||
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
|
||||
#, fuzzy
|
||||
@@ -28878,7 +28881,7 @@ msgstr ""
|
||||
|
||||
#: pretix/control/views/mailsetup.py:216
|
||||
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
|
||||
msgid "Sender address verification"
|
||||
@@ -29937,6 +29940,8 @@ msgid ""
|
||||
"Please enter the confirmation code we sent to your email address "
|
||||
"<strong>{email}</strong>."
|
||||
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
|
||||
#, fuzzy
|
||||
@@ -34939,7 +34944,7 @@ msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/checkout_questions.html:9
|
||||
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
|
||||
msgid "Auto-fill with address"
|
||||
@@ -35374,10 +35379,8 @@ msgstr ""
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:514
|
||||
#: pretix/presale/templates/pretixpresale/fragment_modals.html:48
|
||||
#, fuzzy
|
||||
#| msgid "Event description"
|
||||
msgid "Renew reservation"
|
||||
msgstr "Descrição do Evento"
|
||||
msgstr "Renovar a reserva"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:526
|
||||
#, fuzzy
|
||||
@@ -35962,8 +35965,8 @@ msgid ""
|
||||
"Please note that we still await approval by the event organizer before you "
|
||||
"can pay and complete this order."
|
||||
msgstr ""
|
||||
"Por favor, note que a aprovação ainda aguardam pelo organizador do evento "
|
||||
"antes que pode pagar e concluir este pedido."
|
||||
"Por favor, nota que ainda estamos à espera da aprovação do organizador do "
|
||||
"evento antes de poderes pagar e concluir esta encomenda."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/order.html:43
|
||||
msgid "Please note that we still await your payment to complete the process."
|
||||
@@ -35972,19 +35975,14 @@ msgstr ""
|
||||
"processo."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/order.html:55
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Please bookmark or save the link to this exact page if you want to access "
|
||||
#| "your order later. We also sent you an email containing the link to the "
|
||||
#| "address you specified."
|
||||
msgid ""
|
||||
"Please bookmark or save the link to this exact page if you want to access "
|
||||
"your order later. We also sent you an email to the address you specified "
|
||||
"containing the link to this page."
|
||||
msgstr ""
|
||||
"Por favor, guarda o link para esta página, caso queiras aceder ao teu pedido "
|
||||
"mais tarde. Também iremos enviar-te um email com o link para o endereço que "
|
||||
"indicaste."
|
||||
"Por favor, guarda o link desta página, se quiseres aceder à tua encomenda "
|
||||
"mais tarde. Também enviámos um e-mail para o endereço que indicaste com o "
|
||||
"link para esta página."
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/order.html:59
|
||||
#, fuzzy
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-11-20 10:37+0000\n"
|
||||
"PO-Revision-Date: 2025-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"
|
||||
"Language-Team: Portuguese (Portugal) <https://translate.pretix.eu/projects/"
|
||||
"pretix/pretix-js/pt_PT/>\n"
|
||||
@@ -798,7 +798,7 @@ msgstr ""
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:90
|
||||
msgid "Renew reservation"
|
||||
msgstr ""
|
||||
msgstr "Renovar a reserva"
|
||||
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:194
|
||||
msgid "The organizer keeps %(currency)s %(amount)s"
|
||||
|
||||
@@ -8,18 +8,20 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-11-27 13:57+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: none\n"
|
||||
"PO-Revision-Date: 2025-12-09 22:00+0000\n"
|
||||
"Last-Translator: Lachlan Struthers <lachlan.struthers@om.org>\n"
|
||||
"Language-Team: Albanian <https://translate.pretix.eu/projects/pretix/pretix/"
|
||||
"sq/>\n"
|
||||
"Language: sq\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.14.3\n"
|
||||
|
||||
#: pretix/_base_settings.py:87
|
||||
msgid "English"
|
||||
msgstr ""
|
||||
msgstr "Anglisht"
|
||||
|
||||
#: pretix/_base_settings.py:88
|
||||
msgid "German"
|
||||
@@ -450,7 +452,7 @@ msgstr ""
|
||||
#: pretix/control/templates/pretixcontrol/event/mail.html:114
|
||||
#: pretix/control/views/orders.py:1569
|
||||
msgid "Order canceled"
|
||||
msgstr ""
|
||||
msgstr "Porositja ësthë anuluar"
|
||||
|
||||
#: pretix/api/webhooks.py:278 pretix/base/notifications.py:257
|
||||
msgid "Order reactivated"
|
||||
@@ -1407,7 +1409,7 @@ msgstr ""
|
||||
#: pretix/plugins/checkinlists/exporters.py:827
|
||||
#: pretix/plugins/checkinlists/exporters.py:828
|
||||
msgid "Yes"
|
||||
msgstr ""
|
||||
msgstr "Po"
|
||||
|
||||
#: pretix/base/exporters/customers.py:100
|
||||
#: 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:828
|
||||
msgid "No"
|
||||
msgstr ""
|
||||
msgstr "Jo"
|
||||
|
||||
#: pretix/base/exporters/dekodi.py:42 pretix/base/exporters/invoices.py:66
|
||||
msgctxt "export_category"
|
||||
@@ -2445,7 +2447,7 @@ msgstr ""
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:12
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_membership.html:91
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
msgstr "Produkti"
|
||||
|
||||
#: pretix/base/exporters/orderlist.py:619 pretix/base/models/vouchers.py:315
|
||||
#: pretix/control/templates/pretixcontrol/vouchers/bulk.html:5
|
||||
@@ -2783,7 +2785,7 @@ msgstr ""
|
||||
#: pretix/control/templates/pretixcontrol/event/cancel.html:20
|
||||
#: pretix/control/views/item.py:971
|
||||
msgid "Paid orders"
|
||||
msgstr ""
|
||||
msgstr "Porositje të paguara"
|
||||
|
||||
#: pretix/base/exporters/orderlist.py:1155 pretix/control/views/item.py:976
|
||||
msgid "Pending orders"
|
||||
@@ -3879,7 +3881,7 @@ msgstr ""
|
||||
#: pretix/base/modelimport_vouchers.py:205 pretix/base/models/items.py:1256
|
||||
#: pretix/base/models/vouchers.py:266 pretix/base/models/waitinglist.py:99
|
||||
msgid "Product variation"
|
||||
msgstr ""
|
||||
msgstr "Varianti i produktit"
|
||||
|
||||
#: pretix/base/modelimport_orders.py:161
|
||||
msgid "The variation can be specified by its internal ID or full name."
|
||||
@@ -4278,19 +4280,19 @@ msgstr ""
|
||||
|
||||
#: pretix/base/models/checkin.py:336
|
||||
msgid "Entry"
|
||||
msgstr ""
|
||||
msgstr "Hyrje"
|
||||
|
||||
#: pretix/base/models/checkin.py:337
|
||||
msgid "Exit"
|
||||
msgstr ""
|
||||
msgstr "Dalje"
|
||||
|
||||
#: pretix/base/models/checkin.py:356
|
||||
msgid "Unknown ticket"
|
||||
msgstr ""
|
||||
msgstr "Biletë e panjohur"
|
||||
|
||||
#: pretix/base/models/checkin.py:357
|
||||
msgid "Ticket not paid"
|
||||
msgstr ""
|
||||
msgstr "Bileta nuk është paguar"
|
||||
|
||||
#: pretix/base/models/checkin.py:358
|
||||
msgid "Forbidden by custom rule"
|
||||
@@ -4298,23 +4300,23 @@ msgstr ""
|
||||
|
||||
#: pretix/base/models/checkin.py:359
|
||||
msgid "Ticket code revoked/changed"
|
||||
msgstr ""
|
||||
msgstr "Kodi i biletës është anuluar/ndryshuar"
|
||||
|
||||
#: pretix/base/models/checkin.py:360
|
||||
msgid "Information required"
|
||||
msgstr ""
|
||||
msgstr "Informacion i domosdoshëm"
|
||||
|
||||
#: pretix/base/models/checkin.py:361
|
||||
msgid "Ticket already used"
|
||||
msgstr ""
|
||||
msgstr "Bileta tashmë është përdorur"
|
||||
|
||||
#: pretix/base/models/checkin.py:362
|
||||
msgid "Ticket type not allowed here"
|
||||
msgstr ""
|
||||
msgstr "Ky lloj bilete nuk lejohet këtu"
|
||||
|
||||
#: pretix/base/models/checkin.py:363
|
||||
msgid "Ticket code is ambiguous on list"
|
||||
msgstr ""
|
||||
msgstr "Kodi i biletës është e paqartë në listë"
|
||||
|
||||
#: pretix/base/models/checkin.py:364
|
||||
msgid "Server error"
|
||||
@@ -4322,15 +4324,15 @@ msgstr ""
|
||||
|
||||
#: pretix/base/models/checkin.py:365
|
||||
msgid "Ticket blocked"
|
||||
msgstr ""
|
||||
msgstr "Bileta u bllokua"
|
||||
|
||||
#: pretix/base/models/checkin.py:366
|
||||
msgid "Order not approved"
|
||||
msgstr ""
|
||||
msgstr "Porositje nuk është aprovuar"
|
||||
|
||||
#: pretix/base/models/checkin.py:367
|
||||
msgid "Ticket not valid at this time"
|
||||
msgstr ""
|
||||
msgstr "Bileta nuk është e vlefshme për momentin"
|
||||
|
||||
#: pretix/base/models/checkin.py:368
|
||||
msgid "Check-in annulled"
|
||||
@@ -4460,7 +4462,7 @@ msgstr ""
|
||||
#: pretix/control/templates/pretixcontrol/organizers/gates.html:16
|
||||
#: pretix/plugins/checkinlists/exporters.py:769
|
||||
msgid "Gate"
|
||||
msgstr ""
|
||||
msgstr "Porta"
|
||||
|
||||
#: pretix/base/models/devices.py:131
|
||||
#: 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_memberships.html:44
|
||||
msgid "Canceled"
|
||||
msgstr ""
|
||||
msgstr "e anuluar"
|
||||
|
||||
#: pretix/base/models/memberships.py:134
|
||||
#: 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
|
||||
msgid "Redeemed"
|
||||
msgstr ""
|
||||
msgstr "e përdorur"
|
||||
|
||||
#: pretix/base/models/vouchers.py:209
|
||||
msgid ""
|
||||
@@ -7704,15 +7706,15 @@ msgstr ""
|
||||
|
||||
#: pretix/base/reldate.py:38
|
||||
msgid "Event start"
|
||||
msgstr ""
|
||||
msgstr "Fillimi i eventit"
|
||||
|
||||
#: pretix/base/reldate.py:39
|
||||
msgid "Event end"
|
||||
msgstr ""
|
||||
msgstr "Mbarimi i eventit"
|
||||
|
||||
#: pretix/base/reldate.py:40
|
||||
msgid "Event admission"
|
||||
msgstr ""
|
||||
msgstr "Hyrja në event"
|
||||
|
||||
#: pretix/base/reldate.py:41
|
||||
msgid "Presale start"
|
||||
@@ -12889,7 +12891,7 @@ msgstr ""
|
||||
#: pretix/plugins/reports/exporters.py:391
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_order_status.html:7
|
||||
msgid "Approval pending"
|
||||
msgstr ""
|
||||
msgstr "Duke pritur aprovimin"
|
||||
|
||||
#: pretix/control/forms/filter.py:247
|
||||
msgid "Follow-up configured"
|
||||
@@ -13157,7 +13159,7 @@ msgstr ""
|
||||
#: pretix/control/forms/filter.py:2117
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_giftcards.html:51
|
||||
msgid "Valid"
|
||||
msgstr ""
|
||||
msgstr "e vlefshme"
|
||||
|
||||
#: pretix/control/forms/filter.py:2118
|
||||
msgid "Unredeemed"
|
||||
@@ -16427,7 +16429,7 @@ msgstr ""
|
||||
#: pretix/presale/templates/pretixpresale/event/order_pay_change.html:75
|
||||
#: pretix/presale/templates/pretixpresale/event/position_change.html:29
|
||||
msgid "Continue"
|
||||
msgstr ""
|
||||
msgstr "Vazhdoni"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/auth/oauth_authorization.html:8
|
||||
msgid "Authorize an application"
|
||||
@@ -16675,7 +16677,7 @@ msgstr ""
|
||||
#: pretix/presale/templates/pretixpresale/postmessage.html:27
|
||||
#: pretix/presale/templates/pretixpresale/waiting.html:42
|
||||
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/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_modify.html:44
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
msgstr "Anuloni"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/checkin/bulk_revert_confirm.html:27
|
||||
#: 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/checkinlists/exporters.py:770
|
||||
msgid "Result"
|
||||
msgstr ""
|
||||
msgstr "Rezultati"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/checkin/checkins.html:78
|
||||
#: pretix/control/templates/pretixcontrol/order/index.html:437
|
||||
@@ -17363,7 +17365,7 @@ msgstr ""
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/checkin/simulator.html:68
|
||||
msgid "Additional information required"
|
||||
msgstr ""
|
||||
msgstr "Më shumë informacione kërkohen"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/checkin/simulator.html:70
|
||||
msgid ""
|
||||
@@ -18477,7 +18479,7 @@ msgstr ""
|
||||
#: pretix/control/templates/pretixcontrol/event/plugins.html:34
|
||||
#: pretix/control/templates/pretixcontrol/organizers/plugins.html:34
|
||||
msgid "Search results"
|
||||
msgstr ""
|
||||
msgstr "Rezultatet e kërkimit"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/event/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:364
|
||||
msgid "minutes"
|
||||
msgstr ""
|
||||
msgstr "minuta"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/item/index.html:229
|
||||
msgid "hours"
|
||||
@@ -21014,7 +21016,7 @@ msgstr ""
|
||||
#: pretix/plugins/reports/exporters.py:969
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:469
|
||||
msgid "Total"
|
||||
msgstr ""
|
||||
msgstr "Shuma totale"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/order/index.html:789
|
||||
#: pretix/presale/templates/pretixpresale/event/order.html:210
|
||||
@@ -23135,7 +23137,7 @@ msgstr ""
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/pdf/index.html:107
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
msgstr "Kopjoni"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/pdf/index.html:117
|
||||
msgid "Undo"
|
||||
@@ -27329,7 +27331,7 @@ msgstr ""
|
||||
|
||||
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:80
|
||||
msgid "Comment:"
|
||||
msgstr ""
|
||||
msgstr "Komente:"
|
||||
|
||||
#: pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/transaction_list.html:98
|
||||
msgid "No order code detected"
|
||||
@@ -27572,7 +27574,7 @@ msgstr ""
|
||||
#: pretix/plugins/paypal2/payment.py:1097
|
||||
#: pretix/plugins/paypal2/payment.py:1098 pretix/plugins/stripe/payment.py:1816
|
||||
msgid "PayPal"
|
||||
msgstr ""
|
||||
msgstr "PayPal"
|
||||
|
||||
#: pretix/plugins/paypal/apps.py:53
|
||||
msgid ""
|
||||
@@ -29012,8 +29014,9 @@ msgid "Credit card payments"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:342 pretix/plugins/stripe/payment.py:1527
|
||||
#, fuzzy
|
||||
msgid "iDEAL"
|
||||
msgstr ""
|
||||
msgstr "iDEAL"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:344 pretix/plugins/stripe/payment.py:352
|
||||
#: pretix/plugins/stripe/payment.py:360 pretix/plugins/stripe/payment.py:395
|
||||
@@ -29032,12 +29035,14 @@ msgid "Alipay"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:358 pretix/plugins/stripe/payment.py:1564
|
||||
#, fuzzy
|
||||
msgid "Bancontact"
|
||||
msgstr ""
|
||||
msgstr "Bancontact"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:366
|
||||
#, fuzzy
|
||||
msgid "SEPA Direct Debit"
|
||||
msgstr ""
|
||||
msgstr "Debit direkt me SEPA"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:369
|
||||
msgid ""
|
||||
@@ -29072,12 +29077,14 @@ msgid "Multibanco"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:409 pretix/plugins/stripe/payment.py:1730
|
||||
#, fuzzy
|
||||
msgid "Przelewy24"
|
||||
msgstr ""
|
||||
msgstr "Przelewy24"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:417 pretix/plugins/stripe/payment.py:1769
|
||||
#, fuzzy
|
||||
msgid "WeChat Pay"
|
||||
msgstr ""
|
||||
msgstr "WeChat Pay"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:433 pretix/plugins/stripe/payment.py:1824
|
||||
msgid "Swish"
|
||||
@@ -29221,8 +29228,9 @@ msgid "giropay via Stripe"
|
||||
msgstr ""
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1480
|
||||
#, fuzzy
|
||||
msgid "giropay"
|
||||
msgstr ""
|
||||
msgstr "giropay"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1483
|
||||
msgid ""
|
||||
@@ -32444,7 +32452,7 @@ msgstr ""
|
||||
#: pretix/presale/templates/pretixpresale/postmessage.html:21
|
||||
#: pretix/presale/templates/pretixpresale/waiting.html:22
|
||||
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:418
|
||||
|
||||
@@ -3,137 +3,159 @@
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-11-20 10:37+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"PO-Revision-Date: 2025-12-09 22:00+0000\n"
|
||||
"Last-Translator: Lachlan Struthers <lachlan.struthers@om.org>\n"
|
||||
"Language-Team: Albanian <https://translate.pretix.eu/projects/pretix/"
|
||||
"pretix-js/sq/>\n"
|
||||
"Language: sq\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\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:62
|
||||
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:68
|
||||
msgid "Marked as paid"
|
||||
msgstr ""
|
||||
msgstr "Shënuar se u pagua"
|
||||
|
||||
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:76
|
||||
msgid "Comment:"
|
||||
msgstr ""
|
||||
msgstr "Komente:"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:34
|
||||
msgid "PayPal"
|
||||
msgstr ""
|
||||
msgstr "PayPal"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:35
|
||||
msgid "Venmo"
|
||||
msgstr ""
|
||||
msgstr "Venmo"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:36
|
||||
#: pretix/static/pretixpresale/js/walletdetection.js:38
|
||||
#, fuzzy
|
||||
msgid "Apple Pay"
|
||||
msgstr ""
|
||||
msgstr "Apple Pay"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:37
|
||||
#, fuzzy
|
||||
msgid "Itaú"
|
||||
msgstr ""
|
||||
msgstr "Itaú"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:38
|
||||
#, fuzzy
|
||||
msgid "PayPal Credit"
|
||||
msgstr ""
|
||||
msgstr "PayPal Credit"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:39
|
||||
msgid "Credit Card"
|
||||
msgstr ""
|
||||
msgstr "Kartë Krediti"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:40
|
||||
msgid "PayPal Pay Later"
|
||||
msgstr ""
|
||||
msgstr "Bëj PayPal Pay më vonë"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:41
|
||||
#, fuzzy
|
||||
msgid "iDEAL"
|
||||
msgstr ""
|
||||
msgstr "iDEAL"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:42
|
||||
#, fuzzy
|
||||
msgid "SEPA Direct Debit"
|
||||
msgstr ""
|
||||
msgstr "Debit direkt me SEPA"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:43
|
||||
#, fuzzy
|
||||
msgid "Bancontact"
|
||||
msgstr ""
|
||||
msgstr "Bancontact"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:44
|
||||
#, fuzzy
|
||||
msgid "giropay"
|
||||
msgstr ""
|
||||
msgstr "giropay"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:45
|
||||
#, fuzzy
|
||||
msgid "SOFORT"
|
||||
msgstr ""
|
||||
msgstr "SOFORT"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:46
|
||||
#, fuzzy
|
||||
msgid "eps"
|
||||
msgstr ""
|
||||
msgstr "eps"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:47
|
||||
#, fuzzy
|
||||
msgid "MyBank"
|
||||
msgstr ""
|
||||
msgstr "MyBank"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:48
|
||||
#, fuzzy
|
||||
msgid "Przelewy24"
|
||||
msgstr ""
|
||||
msgstr "Przelewy24"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:49
|
||||
#, fuzzy
|
||||
msgid "Verkkopankki"
|
||||
msgstr ""
|
||||
msgstr "Verkkopankki"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:50
|
||||
#, fuzzy
|
||||
msgid "PayU"
|
||||
msgstr ""
|
||||
msgstr "PayU"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:51
|
||||
#, fuzzy
|
||||
msgid "BLIK"
|
||||
msgstr ""
|
||||
msgstr "BLIK"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:52
|
||||
#, fuzzy
|
||||
msgid "Trustly"
|
||||
msgstr ""
|
||||
msgstr "Trustly"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:53
|
||||
#, fuzzy
|
||||
msgid "Zimpler"
|
||||
msgstr ""
|
||||
msgstr "Zimpler"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:54
|
||||
#, fuzzy
|
||||
msgid "Maxima"
|
||||
msgstr ""
|
||||
msgstr "Maxima"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:55
|
||||
#, fuzzy
|
||||
msgid "OXXO"
|
||||
msgstr ""
|
||||
msgstr "OXXO"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:56
|
||||
#, fuzzy
|
||||
msgid "Boleto"
|
||||
msgstr ""
|
||||
msgstr "Boleto"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:57
|
||||
#, fuzzy
|
||||
msgid "WeChat Pay"
|
||||
msgstr ""
|
||||
msgstr "WeChat Pay"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:58
|
||||
#, fuzzy
|
||||
msgid "Mercado Pago"
|
||||
msgstr ""
|
||||
msgstr "Mercado Pago"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:167
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:50
|
||||
#: pretix/static/pretixpresale/js/ui/cart.js:89
|
||||
msgid "Continue"
|
||||
msgstr ""
|
||||
msgstr "Vazhdoni"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:225
|
||||
#: 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:341
|
||||
msgid "Confirming your payment …"
|
||||
msgstr ""
|
||||
msgstr "Duke e konfirmuar pagesën …"
|
||||
|
||||
#: pretix/plugins/paypal2/static/pretixplugins/paypal2/pretix-paypal.js:254
|
||||
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:39
|
||||
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:39
|
||||
msgid "Paid orders"
|
||||
msgstr ""
|
||||
msgstr "Porositje të paguara"
|
||||
|
||||
#: pretix/plugins/statistics/static/pretixplugins/statistics/statistics.js:27
|
||||
msgid "Total revenue"
|
||||
msgstr ""
|
||||
msgstr "Të ardhurat totale"
|
||||
|
||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:15
|
||||
msgid "Contacting Stripe …"
|
||||
msgstr ""
|
||||
msgstr "Duke e kontaktuar Stripe …"
|
||||
|
||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:72
|
||||
msgid "Total"
|
||||
msgstr ""
|
||||
msgstr "Shuma totale"
|
||||
|
||||
#: pretix/plugins/stripe/static/pretixplugins/stripe/pretix-stripe.js:291
|
||||
msgid "Contacting your bank …"
|
||||
msgstr ""
|
||||
msgstr "Duke e kontaktuar bankën tuaj …"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:30
|
||||
msgid "Select a check-in list"
|
||||
msgstr ""
|
||||
msgstr "Zgjidhni një listë check-in"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:31
|
||||
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
|
||||
msgid "Switch check-in list"
|
||||
msgstr ""
|
||||
msgstr "Shkëmbeni listë check-in"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:33
|
||||
msgid "Search results"
|
||||
msgstr ""
|
||||
msgstr "Rezultatet e kërkimit"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:34
|
||||
msgid "No tickets found"
|
||||
msgstr ""
|
||||
msgstr "Nuk u gjetën bileta"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:35
|
||||
msgid "Result"
|
||||
msgstr ""
|
||||
msgstr "Rezultati"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:36
|
||||
msgid "This ticket requires special attention"
|
||||
msgstr ""
|
||||
msgstr "Kjo biletë duhet kujdes të veçantë"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:37
|
||||
msgid "Switch direction"
|
||||
msgstr ""
|
||||
msgstr "Ndryshoni drejtimin"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:38
|
||||
msgid "Entry"
|
||||
msgstr ""
|
||||
msgstr "Hyrje"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:39
|
||||
msgid "Exit"
|
||||
msgstr ""
|
||||
msgstr "Dalje"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:40
|
||||
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
|
||||
msgid "Load more"
|
||||
msgstr ""
|
||||
msgstr "Ngarkoni më shumë"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:42
|
||||
msgid "Valid"
|
||||
msgstr ""
|
||||
msgstr "e vlefshme"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:43
|
||||
msgid "Unpaid"
|
||||
msgstr ""
|
||||
msgstr "e papaguar"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:44
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:45
|
||||
msgid "Canceled"
|
||||
msgstr ""
|
||||
msgstr "e anuluar"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:46
|
||||
msgid "Confirmed"
|
||||
msgstr ""
|
||||
msgstr "e konfirmuar"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:47
|
||||
msgid "Approval pending"
|
||||
msgstr ""
|
||||
msgstr "Duke pritur aprovimin"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
||||
msgid "Redeemed"
|
||||
msgstr ""
|
||||
msgstr "e përdorur"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:49
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
msgstr "Anuloni"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:51
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:60
|
||||
msgid "Ticket not paid"
|
||||
msgstr ""
|
||||
msgstr "Bileta nuk është paguar"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:52
|
||||
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
|
||||
msgid "Additional information required"
|
||||
msgstr ""
|
||||
msgstr "Më shumë informacione kërkohen"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:54
|
||||
msgid "Valid ticket"
|
||||
msgstr ""
|
||||
msgstr "Biletë të vlefshme"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:55
|
||||
msgid "Exit recorded"
|
||||
msgstr ""
|
||||
msgstr "Dalja u regjistrua"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:56
|
||||
msgid "Ticket already used"
|
||||
msgstr ""
|
||||
msgstr "Bileta tashmë është përdorur"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:57
|
||||
msgid "Information required"
|
||||
msgstr ""
|
||||
msgstr "Informacion i domosdoshëm"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:58
|
||||
msgid "Unknown ticket"
|
||||
msgstr ""
|
||||
msgstr "Biletë e panjohur"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:59
|
||||
msgid "Ticket type not allowed here"
|
||||
msgstr ""
|
||||
msgstr "Ky lloj bilete nuk lejohet këtu"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:61
|
||||
msgid "Entry not allowed"
|
||||
msgstr ""
|
||||
msgstr "Hyrja nuk lejohet"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:62
|
||||
msgid "Ticket code revoked/changed"
|
||||
msgstr ""
|
||||
msgstr "Kodi i biletës është anuluar/ndryshuar"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:63
|
||||
msgid "Ticket blocked"
|
||||
msgstr ""
|
||||
msgstr "Bileta u bllokua"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:64
|
||||
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
|
||||
msgid "Order canceled"
|
||||
msgstr ""
|
||||
msgstr "Porositja ësthë anuluar"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:66
|
||||
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
|
||||
msgid "Order not approved"
|
||||
msgstr ""
|
||||
msgstr "Porositje nuk është aprovuar"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:68
|
||||
msgid "Checked-in Tickets"
|
||||
msgstr ""
|
||||
msgstr "Bileta të regjistruara"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:69
|
||||
msgid "Valid Tickets"
|
||||
msgstr ""
|
||||
msgstr "Bileta të vlefshme"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:70
|
||||
msgid "Currently inside"
|
||||
msgstr ""
|
||||
msgstr "Aktualisht brenda"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:71
|
||||
#: pretix/static/pretixcontrol/js/ui/question.js:136
|
||||
#: pretix/static/pretixpresale/js/ui/questions.js:271
|
||||
msgid "Yes"
|
||||
msgstr ""
|
||||
msgstr "Po"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:72
|
||||
#: pretix/static/pretixcontrol/js/ui/question.js:137
|
||||
#: pretix/static/pretixpresale/js/ui/questions.js:271
|
||||
msgid "No"
|
||||
msgstr ""
|
||||
msgstr "Jo"
|
||||
|
||||
#: pretix/static/lightbox/js/lightbox.js:96
|
||||
msgid "close"
|
||||
msgstr ""
|
||||
msgstr "Mbyllni"
|
||||
|
||||
#: pretix/static/pretixbase/js/addressform.js:98
|
||||
#: pretix/static/pretixpresale/js/ui/main.js:529
|
||||
msgid "required"
|
||||
msgstr ""
|
||||
msgstr "të domosdoshme"
|
||||
|
||||
#: pretix/static/pretixbase/js/asynctask.js:13
|
||||
msgid ""
|
||||
"Your request is currently being processed. Depending on the size of your "
|
||||
"event, this might take up to a few minutes."
|
||||
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
|
||||
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
|
||||
msgid ""
|
||||
@@ -365,34 +389,41 @@ msgid ""
|
||||
"If this takes longer than two minutes, please contact us or go back in your "
|
||||
"browser and try again."
|
||||
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:182
|
||||
#: pretix/static/pretixbase/js/asynctask.js:186
|
||||
#: pretix/static/pretixcontrol/js/ui/mail.js:24
|
||||
msgid "An error of type {code} occurred."
|
||||
msgstr ""
|
||||
msgstr "Një gabim të llojit {kodi} ka ndodhur."
|
||||
|
||||
#: pretix/static/pretixbase/js/asynctask.js:128
|
||||
msgid ""
|
||||
"We currently cannot reach the server, but we keep trying. Last error code: "
|
||||
"{code}"
|
||||
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/pretixcontrol/js/ui/mail.js:21
|
||||
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/pretixcontrol/js/ui/mail.js:26
|
||||
msgid ""
|
||||
"We currently cannot reach the server. Please try again. Error code: {code}"
|
||||
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
|
||||
msgid "We are processing your request …"
|
||||
msgstr ""
|
||||
msgstr "Ne po e proçesojmë kërkesën tuaj …"
|
||||
|
||||
#: pretix/static/pretixbase/js/asynctask.js:219
|
||||
msgid ""
|
||||
@@ -400,166 +431,169 @@ msgid ""
|
||||
"than one minute, please check your internet connection and then reload this "
|
||||
"page and try again."
|
||||
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
|
||||
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
|
||||
msgid "Close message"
|
||||
msgstr ""
|
||||
msgstr "Mbyllni mesazhin"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/clipboard.js:23
|
||||
msgid "Copied!"
|
||||
msgstr ""
|
||||
msgstr "E kopjuar!"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/clipboard.js:29
|
||||
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:18
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:24
|
||||
msgid "is one of"
|
||||
msgstr ""
|
||||
msgstr "është një nga"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:30
|
||||
msgid "is before"
|
||||
msgstr ""
|
||||
msgstr "është para"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:34
|
||||
msgid "is after"
|
||||
msgstr ""
|
||||
msgstr "është pas"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:40
|
||||
msgid "="
|
||||
msgstr ""
|
||||
msgstr "="
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:99
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
msgstr "Produkti"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:103
|
||||
msgid "Product variation"
|
||||
msgstr ""
|
||||
msgstr "Varianti i produktit"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:107
|
||||
msgid "Gate"
|
||||
msgstr ""
|
||||
msgstr "Porta"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:111
|
||||
msgid "Current date and time"
|
||||
msgstr ""
|
||||
msgstr "Datë dhe orë aktuale"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:115
|
||||
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
|
||||
msgid "Current entry status"
|
||||
msgstr ""
|
||||
msgstr "Gjendja aktuale e hyrjes"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:123
|
||||
msgid "Number of previous entries"
|
||||
msgstr ""
|
||||
msgstr "Shuma e hyrjeve të mëparshme"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:127
|
||||
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
|
||||
msgid "Number of previous entries since"
|
||||
msgstr ""
|
||||
msgstr "Shuma e hyrjeve të mëparshme nga"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:135
|
||||
msgid "Number of previous entries before"
|
||||
msgstr ""
|
||||
msgstr "Shuma e hyrjeve të mëparshme përpara"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:139
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
msgid "All of the conditions below (AND)"
|
||||
msgstr ""
|
||||
msgstr "Të gjitha gjendjet më poshtë (DHE)"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:183
|
||||
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
|
||||
msgid "Event start"
|
||||
msgstr ""
|
||||
msgstr "Fillimi i eventit"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:185
|
||||
msgid "Event end"
|
||||
msgstr ""
|
||||
msgstr "Mbarimi i eventit"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:186
|
||||
msgid "Event admission"
|
||||
msgstr ""
|
||||
msgstr "Hyrja në event"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:187
|
||||
msgid "custom date and time"
|
||||
msgstr ""
|
||||
msgstr "datë dhe orë e kustomizuar"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:188
|
||||
msgid "custom time"
|
||||
msgstr ""
|
||||
msgstr "orë e kustomizuar"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:189
|
||||
msgid "Tolerance (minutes)"
|
||||
msgstr ""
|
||||
msgstr "Toleranca (minuta)"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:190
|
||||
msgid "Add condition"
|
||||
msgstr ""
|
||||
msgstr "Shtoni gjendje"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:191
|
||||
msgid "minutes"
|
||||
msgstr ""
|
||||
msgstr "minuta"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:192
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
msgstr "Kopjoni"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:193
|
||||
msgctxt "entry_status"
|
||||
msgid "present"
|
||||
msgstr ""
|
||||
msgstr "pranishëm"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:194
|
||||
msgctxt "entry_status"
|
||||
msgid "absent"
|
||||
msgstr ""
|
||||
msgstr "munguar"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:289
|
||||
msgid "Error: Product not found!"
|
||||
msgstr ""
|
||||
msgstr "Gabim: Produkti nuk u gjet!"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/checkinrules.js:296
|
||||
msgid "Error: Variation not found!"
|
||||
msgstr ""
|
||||
msgstr "Gabim: Varianti nuk u gjet!"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/editor.js:171
|
||||
msgid "Check-in QR"
|
||||
msgstr ""
|
||||
msgstr "Kodi QR për check-in"
|
||||
|
||||
#: pretix/static/pretixcontrol/js/ui/editor.js:549
|
||||
msgid "The PDF background file could not be loaded for the following reason:"
|
||||
|
||||
@@ -41,15 +41,20 @@ for app in apps.get_app_configs():
|
||||
if hasattr(app, 'PretixPluginMeta'):
|
||||
if importlib.util.find_spec(app.name + '.urls'):
|
||||
urlmod = importlib.import_module(app.name + '.urls')
|
||||
single_plugin_patterns = []
|
||||
|
||||
if hasattr(urlmod, 'event_patterns'):
|
||||
patterns = plugin_event_urls(urlmod.event_patterns, plugin=app.name)
|
||||
raw_plugin_patterns.append(
|
||||
re_path(r'^(?P<event>[^/]+)/', include((patterns, app.label)))
|
||||
single_plugin_patterns.append(
|
||||
re_path(r'^(?P<event>[^/]+)/', include(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(
|
||||
re_path(r'', include((patterns, app.label)))
|
||||
re_path(r'', include((single_plugin_patterns, app.label)))
|
||||
)
|
||||
|
||||
plugin_patterns = [
|
||||
|
||||
@@ -42,15 +42,20 @@ for app in apps.get_app_configs():
|
||||
if hasattr(app, 'PretixPluginMeta'):
|
||||
if importlib.util.find_spec(app.name + '.urls'):
|
||||
urlmod = importlib.import_module(app.name + '.urls')
|
||||
if hasattr(urlmod, 'event_patterns'):
|
||||
patterns = plugin_event_urls(urlmod.event_patterns, plugin=app.name)
|
||||
raw_plugin_patterns.append(
|
||||
re_path(r'^(?P<event>[^/]+)/', include((patterns, app.label)))
|
||||
)
|
||||
single_plugin_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(
|
||||
re_path(r'', include((patterns, app.label)))
|
||||
re_path(r'', include((single_plugin_patterns, app.label)))
|
||||
)
|
||||
|
||||
plugin_patterns = [
|
||||
|
||||
71
src/pretix/plugins/banktransfer/camtimport.py
Normal file
71
src/pretix/plugins/banktransfer/camtimport.py
Normal 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
|
||||
@@ -34,8 +34,10 @@
|
||||
|
||||
import json
|
||||
import logging
|
||||
import operator
|
||||
import re
|
||||
from decimal import Decimal
|
||||
from functools import reduce
|
||||
|
||||
import dateutil.parser
|
||||
from celery.exceptions import MaxRetriesExceededError
|
||||
@@ -117,20 +119,26 @@ def _find_order_for_code(base_qs, code):
|
||||
pass
|
||||
|
||||
|
||||
def _find_order_for_invoice_id(base_qs, prefix, number):
|
||||
def _find_order_for_invoice_id(base_qs, prefixes, number):
|
||||
try:
|
||||
# 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.
|
||||
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(
|
||||
prefix__istartswith=prefix, # redundant, but hopefully makes it a little faster
|
||||
full_invoice_no__iregex=prefix + r'[\- ]*0*' + number
|
||||
reduce(operator.or_, r)
|
||||
).order
|
||||
except (Invoice.DoesNotExist, Invoice.MultipleObjectsReturned):
|
||||
pass
|
||||
|
||||
|
||||
@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 = []
|
||||
if event:
|
||||
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}:
|
||||
orders.append(order)
|
||||
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}:
|
||||
orders.append(order)
|
||||
else:
|
||||
qs = Order.objects.filter(event__organizer=organizer)
|
||||
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.code not in {o.code for o in orders}:
|
||||
orders.append(order)
|
||||
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}:
|
||||
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)
|
||||
|
||||
# Match order codes
|
||||
regex_match_to_slug = {}
|
||||
code_len_agg = Order.objects.filter(event__organizer=job.organizer).annotate(
|
||||
clen=Length('code')
|
||||
).aggregate(min=Min('clen'), max=Max('clen'))
|
||||
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:
|
||||
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
|
||||
inr_len_agg = Invoice.objects.filter(event__organizer=job.organizer).annotate(
|
||||
clen=Length('invoice_no')
|
||||
).aggregate(min=Min('clen'), max=Max('clen'))
|
||||
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:
|
||||
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(
|
||||
"(%s)[ \\-_]*([A-Z0-9]{%s,%s})" % (
|
||||
@@ -395,6 +419,11 @@ def process_banktransfers(self, job: int, data: list) -> None:
|
||||
)
|
||||
|
||||
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.
|
||||
# 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
|
||||
@@ -409,9 +438,9 @@ def process_banktransfers(self, job: int, data: list) -> None:
|
||||
|
||||
if matches:
|
||||
if job.event:
|
||||
_handle_transaction(trans, matches, event=job.event)
|
||||
_handle_transaction(trans, matches, regex_match_to_slug, event=job.event)
|
||||
else:
|
||||
_handle_transaction(trans, matches, organizer=job.organizer)
|
||||
_handle_transaction(trans, matches, regex_match_to_slug, organizer=job.organizer)
|
||||
else:
|
||||
trans.state = BankTransaction.STATE_NOMATCH
|
||||
trans.save()
|
||||
|
||||
@@ -66,7 +66,7 @@ from pretix.control.permissions import (
|
||||
)
|
||||
from pretix.control.views.organizer import OrganizerDetailViewMixin
|
||||
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 (
|
||||
BankImportJob, BankTransaction, RefundExport,
|
||||
)
|
||||
@@ -419,6 +419,9 @@ class ImportView(ListView):
|
||||
):
|
||||
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:
|
||||
messages.error(self.request, _('You must choose a file to import.'))
|
||||
return self.redirect_back()
|
||||
@@ -432,6 +435,14 @@ class ImportView(ListView):
|
||||
def settings(self):
|
||||
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):
|
||||
try:
|
||||
return self.start_processing(mt940import.parse(self.request.FILES.get('file')))
|
||||
|
||||
@@ -137,7 +137,7 @@ logger = logging.getLogger('pretix.plugins.stripe')
|
||||
# Real-time payments
|
||||
# - Swish: ✓
|
||||
# - PayNow: ✗
|
||||
# - PromptPay: ✗
|
||||
# - PromptPay: ✓
|
||||
# - Pix: ✗
|
||||
#
|
||||
# Vouchers
|
||||
@@ -412,6 +412,18 @@ class StripeSettingsHolder(BasePaymentProvider):
|
||||
'before they work properly.'),
|
||||
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',
|
||||
forms.BooleanField(
|
||||
label=_('WeChat Pay'),
|
||||
@@ -428,6 +440,14 @@ class StripeSettingsHolder(BasePaymentProvider):
|
||||
'before they work properly.'),
|
||||
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',
|
||||
forms.BooleanField(
|
||||
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):
|
||||
identifier = 'stripe_paypal'
|
||||
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):
|
||||
identifier = 'stripe_twint'
|
||||
verbose_name = _('TWINT via Stripe')
|
||||
|
||||
@@ -38,7 +38,6 @@ from pretix.base.signals import (
|
||||
)
|
||||
from pretix.control.signals import nav_organizer
|
||||
from pretix.plugins.stripe.forms import StripeKeyValidator
|
||||
from pretix.plugins.stripe.payment import StripeMethod
|
||||
from pretix.presale.signals import html_head, process_response
|
||||
|
||||
|
||||
@@ -47,15 +46,17 @@ def register_payment_provider(sender, **kwargs):
|
||||
from .payment import (
|
||||
StripeAffirm, StripeAlipay, StripeBancontact, StripeCC, StripeEPS,
|
||||
StripeGiropay, StripeIdeal, StripeKlarna, StripeMobilePay,
|
||||
StripeMultibanco, StripePayPal, StripePrzelewy24, StripeRevolutPay,
|
||||
StripeSEPADirectDebit, StripeSettingsHolder, StripeSofort, StripeSwish,
|
||||
StripeTwint, StripeWeChatPay,
|
||||
StripeMultibanco, StripePayByBank, StripePayPal, StripePromptPay,
|
||||
StripePrzelewy24, StripeRevolutPay, StripeSEPADirectDebit,
|
||||
StripeSettingsHolder, StripeSofort, StripeSwish, StripeTwint,
|
||||
StripeWeChatPay,
|
||||
)
|
||||
|
||||
return [
|
||||
StripeSettingsHolder, StripeCC, StripeGiropay, StripeIdeal, StripeAlipay, StripeBancontact,
|
||||
StripeSofort, StripeEPS, StripeMultibanco, StripePrzelewy24, StripeRevolutPay, StripeWeChatPay,
|
||||
StripeSEPADirectDebit, StripeAffirm, StripeKlarna, StripePayPal, StripeSwish, StripeTwint, StripeMobilePay
|
||||
StripeSofort, StripeEPS, StripeMultibanco, StripePayByBank, StripePrzelewy24, StripePromptPay, StripeRevolutPay,
|
||||
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")
|
||||
def signal_process_response(sender, request: HttpRequest, response: HttpResponse, **kwargs):
|
||||
from pretix.plugins.stripe.payment import StripeMethod
|
||||
|
||||
provider = StripeMethod(sender)
|
||||
url = resolve(request.path_info)
|
||||
|
||||
|
||||
@@ -79,3 +79,9 @@
|
||||
.vcenter {
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.stripe-qr-code {
|
||||
max-width: 80%;
|
||||
width: 200px;
|
||||
height: auto;
|
||||
}
|
||||
@@ -325,6 +325,8 @@ $(function () {
|
||||
} 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());
|
||||
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") {
|
||||
let payment_intent_client_secret = $.trim($("#stripe_payment_intent_client_secret").html());
|
||||
pretixstripe.handleWechatAction(payment_intent_client_secret);
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
import logging
|
||||
from urllib.parse import urlsplit
|
||||
|
||||
import stripe
|
||||
from django.conf import settings
|
||||
|
||||
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)
|
||||
def stripe_verify_domain(event, domain):
|
||||
import stripe
|
||||
|
||||
from pretix.plugins.stripe.payment import StripeCC
|
||||
|
||||
prov = StripeCC(event)
|
||||
account = get_stripe_account_key(prov)
|
||||
|
||||
|
||||
@@ -27,9 +27,21 @@
|
||||
<div class="stripe-errors sr-only panel-body">
|
||||
|
||||
</div>
|
||||
<div class="panel-body embed-responsive embed-responsive-sca" id="scacontainer">
|
||||
|
||||
</div>
|
||||
{% if payment_intent_promptpay_image_url %}
|
||||
<div class="panel-body">
|
||||
<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 class="row checkout-button-row">
|
||||
<div class="col-md-4">
|
||||
|
||||
@@ -37,7 +37,6 @@ import logging
|
||||
import urllib.parse
|
||||
|
||||
import requests
|
||||
import stripe
|
||||
from django.contrib import messages
|
||||
from django.core import signing
|
||||
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.plugins.stripe.forms import OrganizerStripeSettingsForm
|
||||
from pretix.plugins.stripe.models import ReferencedStripeObject
|
||||
from pretix.plugins.stripe.payment import StripeCC, StripeSettingsHolder
|
||||
from pretix.plugins.stripe.tasks import (
|
||||
get_domain_for_event, stripe_verify_domain,
|
||||
)
|
||||
@@ -100,6 +98,8 @@ def redirect_view(request, *args, **kwargs):
|
||||
|
||||
@scopes_disabled()
|
||||
def oauth_return(request, *args, **kwargs):
|
||||
import stripe
|
||||
|
||||
if 'payment_stripe_oauth_event' not in request.session:
|
||||
messages.error(request, _('An error occurred during connecting with Stripe, please try again.'))
|
||||
return redirect('control:index')
|
||||
@@ -268,6 +268,10 @@ SOURCE_TYPES = {
|
||||
|
||||
|
||||
def charge_webhook(event, event_json, charge_id, rso):
|
||||
import stripe
|
||||
|
||||
from pretix.plugins.stripe.payment import StripeCC
|
||||
|
||||
prov = StripeCC(event)
|
||||
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):
|
||||
import stripe
|
||||
|
||||
from pretix.plugins.stripe.payment import StripeCC
|
||||
|
||||
prov = StripeCC(event)
|
||||
prov._init_api()
|
||||
try:
|
||||
@@ -440,6 +448,10 @@ def source_webhook(event, event_json, source_id, rso):
|
||||
|
||||
|
||||
def paymentintent_webhook(event, event_json, paymentintent_id, rso):
|
||||
import stripe
|
||||
|
||||
from pretix.plugins.stripe.payment import StripeCC
|
||||
|
||||
prov = StripeCC(event)
|
||||
prov._init_api()
|
||||
|
||||
@@ -516,6 +528,8 @@ class StripeOrderView:
|
||||
@method_decorator(xframe_options_exempt, 'dispatch')
|
||||
class ReturnView(StripeOrderView, View):
|
||||
def get(self, request, *args, **kwargs):
|
||||
import stripe
|
||||
|
||||
prov = self.pprov
|
||||
prov._init_api()
|
||||
try:
|
||||
@@ -568,6 +582,10 @@ class ReturnView(StripeOrderView, View):
|
||||
class ScaView(StripeOrderView, View):
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
import stripe
|
||||
|
||||
from pretix.plugins.stripe.payment import StripeSettingsHolder
|
||||
|
||||
prov = self.pprov
|
||||
prov._init_api()
|
||||
|
||||
@@ -595,7 +613,7 @@ class ScaView(StripeOrderView, View):
|
||||
|
||||
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',
|
||||
'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 = {
|
||||
'order': self.order,
|
||||
@@ -613,6 +631,8 @@ class ScaView(StripeOrderView, View):
|
||||
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_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._csp_ignore = True
|
||||
|
||||
@@ -49,7 +49,7 @@ from django.views.decorators.cache import cache_page
|
||||
from django.views.decorators.gzip import gzip_page
|
||||
from django.views.decorators.http import condition
|
||||
from django.views.i18n import (
|
||||
JavaScriptCatalog, get_formats, builtin_template_path,
|
||||
JavaScriptCatalog, get_formats, js_catalog_template,
|
||||
)
|
||||
from lxml import html
|
||||
|
||||
@@ -168,8 +168,7 @@ def generate_widget_js(version, lang):
|
||||
'September', 'October', 'November', 'December'
|
||||
)
|
||||
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(fh.read())
|
||||
template = Engine().from_string(js_catalog_template)
|
||||
context = Context({
|
||||
'catalog_str': indent(json.dumps(
|
||||
catalog, sort_keys=True, indent=2)) if catalog else None,
|
||||
|
||||
@@ -530,7 +530,6 @@ X_FRAME_OPTIONS = 'DENY'
|
||||
|
||||
# URL settings
|
||||
ROOT_URLCONF = 'pretix.multidomain.maindomain_urlconf'
|
||||
FORMS_URLFIELD_ASSUME_HTTPS = True # transitional for django 6.0
|
||||
|
||||
WSGI_APPLICATION = 'pretix.wsgi.application'
|
||||
|
||||
|
||||
536
src/pretix/static/pretixcontrol/img/auth-b.svg
Normal file
536
src/pretix/static/pretixcontrol/img/auth-b.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 163 KiB |
@@ -42,8 +42,10 @@ from django.contrib.auth.tokens import (
|
||||
)
|
||||
from django.core import mail as djmail
|
||||
from django.test import RequestFactory, TestCase, override_settings
|
||||
from django.utils.crypto import get_random_string
|
||||
from django.utils.timezone import now
|
||||
from django_otp.oath import TOTP
|
||||
from django_otp.plugins.otp_static.models import StaticDevice
|
||||
from django_otp.plugins.otp_totp.models import TOTPDevice
|
||||
from webauthn.authentication.verify_authentication_response import (
|
||||
VerifiedAuthentication,
|
||||
@@ -492,6 +494,20 @@ class Login2FAFormTest(TestCase):
|
||||
|
||||
m.undo()
|
||||
|
||||
def test_recovery_code_valid(self):
|
||||
djmail.outbox = []
|
||||
d, __ = StaticDevice.objects.get_or_create(user=self.user, name='emergency')
|
||||
token = d.token_set.create(token=get_random_string(length=12, allowed_chars='1234567890'))
|
||||
|
||||
response = self.client.get('/control/login/2fa')
|
||||
assert 'token' in response.content.decode()
|
||||
response = self.client.post('/control/login/2fa', {
|
||||
'token': token.token,
|
||||
})
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.assertIn('/control/', response['Location'])
|
||||
assert "recovery code" in djmail.outbox[0].body
|
||||
|
||||
|
||||
class FakeRedis(object):
|
||||
def get_redis_connection(self, connection_string):
|
||||
|
||||
@@ -45,6 +45,8 @@ def env():
|
||||
def test_event_main_domain_front_page(env):
|
||||
assert eventreverse(env[1], 'presale:event.index') == '/mrmcd/2015/'
|
||||
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
|
||||
@@ -52,12 +54,16 @@ def test_event_custom_domain_kwargs(env):
|
||||
KnownDomain.objects.create(domainname='foobar', organizer=env[0])
|
||||
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[0], 'plugins:testdummy:view') == 'http://foobar/testdummy'
|
||||
assert eventreverse(env[1], 'plugins:testdummy:view') == 'http://barfoo/testdummy'
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_event_org_domain_kwargs(env):
|
||||
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[0], 'plugins:testdummy:view') == 'http://foobar/testdummy'
|
||||
assert eventreverse(env[1], 'plugins:testdummy:view') == 'http://foobar/2015/testdummy'
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
@@ -65,9 +71,13 @@ def test_event_org_alt_domain_kwargs(env):
|
||||
KnownDomain.objects.create(domainname='foobar', organizer=env[0])
|
||||
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], 'plugins:testdummy:view') == 'http://foobar/2015/testdummy'
|
||||
d.event_assignments.create(event=env[1])
|
||||
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
|
||||
|
||||
756
src/tests/plugins/banktransfer/camt.053_bundesbank.xml
Normal file
756
src/tests/plugins/banktransfer/camt.053_bundesbank.xml
Normal 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>
|
||||
312
src/tests/plugins/banktransfer/camt.053_sepatools.xml
Normal file
312
src/tests/plugins/banktransfer/camt.053_sepatools.xml
Normal 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>
|
||||
146
src/tests/plugins/banktransfer/test_camt.py
Normal file
146
src/tests/plugins/banktransfer/test_camt.py
Normal 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)
|
||||
@@ -385,6 +385,20 @@ def test_mark_paid_organizer_dash_in_slug(env, orga_job):
|
||||
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
|
||||
def test_mark_paid_organizer_varying_order_code_length(env, orga_job):
|
||||
env[2].code = "123412341234"
|
||||
@@ -490,7 +504,7 @@ def test_valid_plus_invalid_match(env, orga_job):
|
||||
'payer': 'Karla Kundin',
|
||||
'reference': 'Bestellungen DUMMY-1Z3AS DUMMY-99999',
|
||||
'date': '2016-01-26',
|
||||
'amount': '.00'
|
||||
'amount': '2.00'
|
||||
}])
|
||||
with scopes_disabled():
|
||||
job = BankImportJob.objects.last()
|
||||
|
||||
52
src/tests/testdummy/urls.py
Normal file
52
src/tests/testdummy/urls.py
Normal 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",
|
||||
),
|
||||
]
|
||||
Reference in New Issue
Block a user