mirror of
https://github.com/pretix/pretix.git
synced 2026-02-24 09:42:27 +00:00
Compare commits
5 Commits
error-mess
...
fix-multi-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
133faa67d4 | ||
|
|
2625f3ee80 | ||
|
|
eab7d81a51 | ||
|
|
b2dce51a24 | ||
|
|
5bd660a913 |
@@ -19,17 +19,44 @@
|
||||
# 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 import forms
|
||||
from django.urls import reverse
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from django_scopes.forms import SafeModelChoiceField
|
||||
from phonenumber_field.formfields import PhoneNumberField
|
||||
|
||||
from pretix.base.forms import I18nModelForm
|
||||
from pretix.base.forms.questions import (
|
||||
NamePartsFormField, WrappedPhoneNumberPrefixWidget,
|
||||
)
|
||||
from pretix.base.models import WaitingListEntry
|
||||
from pretix.control.forms.widgets import Select2
|
||||
|
||||
|
||||
class WaitingListEntryTransferForm(I18nModelForm):
|
||||
class WaitingListEntryEditForm(I18nModelForm):
|
||||
itemvar = forms.ChoiceField(
|
||||
error_messages={
|
||||
'invalid_choice': _("Select a valid choice.")
|
||||
}
|
||||
)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.instance = kwargs.get('instance', None)
|
||||
initial = kwargs.get('initial', {})
|
||||
|
||||
choices = []
|
||||
if self.instance and self.instance.pk and 'itemvar' not in initial:
|
||||
if self.instance.variation is not None:
|
||||
initial['itemvar'] = f'{self.instance.item.pk}-{self.instance.variation.pk}'
|
||||
if self.instance.variation.active is False:
|
||||
choices.append((initial['itemvar'], str(self.instance.variation)))
|
||||
else:
|
||||
initial['itemvar'] = self.instance.item.pk
|
||||
if self.instance.item.active is False:
|
||||
choices.append((initial['itemvar'], str(self.instance)))
|
||||
|
||||
kwargs['initial'] = initial
|
||||
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
if self.event.has_subevents:
|
||||
@@ -45,12 +72,73 @@ class WaitingListEntryTransferForm(I18nModelForm):
|
||||
}
|
||||
)
|
||||
self.fields['subevent'].widget.choices = self.fields['subevent'].choices
|
||||
else:
|
||||
del self.fields['subevent']
|
||||
|
||||
if self.event.settings.waiting_list_names_asked:
|
||||
self.fields['name_parts'] = NamePartsFormField(
|
||||
max_length=255,
|
||||
required=self.event.settings.waiting_list_names_required,
|
||||
scheme=self.event.organizer.settings.name_scheme,
|
||||
titles=self.event.organizer.settings.name_scheme_titles,
|
||||
label=_('Name'),
|
||||
)
|
||||
else:
|
||||
del self.fields['name_parts']
|
||||
|
||||
if not self.event.settings.waiting_list_phones_asked:
|
||||
del self.fields['phone']
|
||||
|
||||
items = self.event.items.filter(active=True).prefetch_related(
|
||||
'variations'
|
||||
)
|
||||
|
||||
for item in items:
|
||||
if len(item.variations.all()) > 0:
|
||||
for variation in item.variations.all():
|
||||
if variation.active:
|
||||
choices.append(
|
||||
('{}-{}'.format(item.pk, variation.pk), '{} - {}'.format(str(item), str(variation)))
|
||||
)
|
||||
else:
|
||||
choices.append(('{}'.format(item.pk), str(item)))
|
||||
|
||||
self.fields['itemvar'].label = _("Product")
|
||||
self.fields['itemvar'].help_text = _("Only includes active products.")
|
||||
self.fields['itemvar'].required = True
|
||||
self.fields['itemvar'].choices = choices
|
||||
|
||||
def clean(self):
|
||||
cleaned_data = super().clean()
|
||||
|
||||
if self.instance.voucher is not None:
|
||||
raise forms.ValidationError(_('A voucher for this waiting list entry was already sent out.'))
|
||||
|
||||
itemvar = cleaned_data.get('itemvar')
|
||||
if itemvar:
|
||||
self.instance.item = self.event.items.get(pk=itemvar.split('-')[0])
|
||||
if '-' in itemvar:
|
||||
self.instance.variation = self.instance.item.variations.get(pk=itemvar.split('-')[1])
|
||||
|
||||
if ((self.instance.item and not self.instance.item.active) or
|
||||
(self.instance.variation and not self.instance.variation.active)):
|
||||
self.add_error('itemvar', _('The selected product is not active.'))
|
||||
|
||||
return cleaned_data
|
||||
|
||||
class Meta:
|
||||
model = WaitingListEntry
|
||||
fields = [
|
||||
'email',
|
||||
'name_parts',
|
||||
'phone',
|
||||
'subevent',
|
||||
]
|
||||
field_classes = {
|
||||
'subevent': SafeModelChoiceField,
|
||||
'email': forms.EmailField,
|
||||
'phone': PhoneNumberField,
|
||||
}
|
||||
widgets = {
|
||||
'phone': WrappedPhoneNumberPrefixWidget,
|
||||
}
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
{% extends "pretixcontrol/event/base.html" %}
|
||||
{% load i18n %}
|
||||
{% load bootstrap3 %}
|
||||
{% block title %}{% trans "Edit entry" %}{% endblock %}
|
||||
{% block content %}
|
||||
<h1>{% trans "Edit entry" %}</h1>
|
||||
<form action="" method="post" class="form-horizontal">
|
||||
{% csrf_token %}
|
||||
|
||||
{% if form.subevent %}
|
||||
{% bootstrap_field form.subevent layout="control" %}
|
||||
{% endif %}
|
||||
|
||||
{% bootstrap_field form.email layout="control" %}
|
||||
|
||||
{% if form.name_parts %}
|
||||
{% bootstrap_field form.name_parts layout="control" %}
|
||||
{% endif %}
|
||||
|
||||
{% if form.phone %}
|
||||
{% bootstrap_field form.phone layout="control" %}
|
||||
{% endif %}
|
||||
{% bootstrap_field form.itemvar layout="control" %}
|
||||
<div class="form-group submit-group">
|
||||
<a href="{% url "control:event.orders.waitinglist" organizer=request.event.organizer.slug event=request.event.slug %}" class="btn btn-default btn-cancel">
|
||||
{% trans "Cancel" %}
|
||||
</a>
|
||||
<button type="submit" class="btn btn-primary btn-save">
|
||||
{% trans "Save" %}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
{% endblock %}
|
||||
@@ -124,6 +124,7 @@
|
||||
</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<input name="search" type="text" placeholder="{% trans "Search" %}" class="form-control" value="{{ request.GET.search }}">
|
||||
{% if request.event.has_subevents %}
|
||||
<select name="subevent" class="form-control">
|
||||
<option value="">{% trans "All dates" context "subevent" %}</option>
|
||||
@@ -267,13 +268,13 @@
|
||||
data-toggle="tooltip" title="{% trans "Move to the end of the list" %}">
|
||||
<span class="fa fa-thumbs-down"></span>
|
||||
</button>
|
||||
{% if request.event.has_subevents %}
|
||||
<a href="{% url "control:event.orders.waitinglist.transfer" organizer=request.event.organizer.slug event=request.event.slug entry=e.id %}"
|
||||
class="btn btn-default btn-sm" title="{% trans "Transfer to other date" context "subevent" %}"
|
||||
data-toggle="tooltip">
|
||||
<i class="fa fa-calendar" aria-hidden="true"></i>
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
<a href="{% url "control:event.orders.waitinglist.edit" organizer=request.event.organizer.slug event=request.event.slug entry=e.id %}"
|
||||
class="btn btn-default btn-sm" title="{% trans "Edit entry" %}"
|
||||
data-toggle="tooltip">
|
||||
<i class="fa fa-edit" aria-hidden="true"></i>
|
||||
</a>
|
||||
|
||||
<a href="{% url "control:event.orders.waitinglist.delete" organizer=request.event.organizer.slug event=request.event.slug entry=e.id %}?next={{ request.get_full_path|urlencode }}" class="btn btn-danger btn-sm"><i class="fa fa-trash"></i></a>
|
||||
{% else %}
|
||||
<button class="btn btn-default btn-sm disabled">
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
{% extends "pretixcontrol/event/base.html" %}
|
||||
{% load i18n %}
|
||||
{% load bootstrap3 %}
|
||||
{% block title %}{% trans "Transfer entry" %}{% endblock %}
|
||||
{% block content %}
|
||||
<h1>{% trans "Transfer entry" %}</h1>
|
||||
<form action="" method="post" class="form-horizontal">
|
||||
{% csrf_token %}
|
||||
<p>{% blocktrans trimmed context "subevent" %}
|
||||
Please select the date to which the following waiting list entry should be
|
||||
transferred: <strong>{{ entry }}</strong>?
|
||||
{% endblocktrans %}</p>
|
||||
{% bootstrap_field form.subevent layout="control" %}
|
||||
<div class="form-group submit-group">
|
||||
<a href="{% url "control:event.orders.waitinglist" organizer=request.event.organizer.slug event=request.event.slug %}" class="btn btn-default btn-cancel">
|
||||
{% trans "Cancel" %}
|
||||
</a>
|
||||
<button type="submit" class="btn btn-primary btn-save">
|
||||
{% trans "Transfer" %}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
{% endblock %}
|
||||
@@ -480,8 +480,8 @@ urlpatterns = [
|
||||
re_path(r'^waitinglist/auto_assign$', waitinglist.AutoAssign.as_view(), name='event.orders.waitinglist.auto'),
|
||||
re_path(r'^waitinglist/(?P<entry>\d+)/delete$', waitinglist.EntryDelete.as_view(),
|
||||
name='event.orders.waitinglist.delete'),
|
||||
re_path(r'^waitinglist/(?P<entry>\d+)/transfer$', waitinglist.EntryTransfer.as_view(),
|
||||
name='event.orders.waitinglist.transfer'),
|
||||
re_path(r'^waitinglist/(?P<entry>\d+)/edit$', waitinglist.EntryEdit.as_view(),
|
||||
name='event.orders.waitinglist.edit'),
|
||||
re_path(r'^checkins/$', checkin.CheckinListView.as_view(), name='event.orders.checkins'),
|
||||
re_path(r'^checkinlists/$', checkin.CheckinListList.as_view(), name='event.orders.checkinlists'),
|
||||
re_path(r'^checkinlists/add$', checkin.CheckinListCreate.as_view(), name='event.orders.checkinlists.add'),
|
||||
|
||||
@@ -53,7 +53,7 @@ from pretix.base.models import Item, LogEntry, Quota, WaitingListEntry
|
||||
from pretix.base.models.waitinglist import WaitingListException
|
||||
from pretix.base.services.waitinglist import assign_automatically
|
||||
from pretix.base.views.tasks import AsyncAction
|
||||
from pretix.control.forms.waitinglist import WaitingListEntryTransferForm
|
||||
from pretix.control.forms.waitinglist import WaitingListEntryEditForm
|
||||
from pretix.control.permissions import EventPermissionRequiredMixin
|
||||
from pretix.control.views import PaginationMixin
|
||||
|
||||
@@ -138,6 +138,17 @@ class WaitingListQuerySetMixin:
|
||||
elif force_filtered and '__ALL' not in self.request_data:
|
||||
qs = qs.none()
|
||||
|
||||
if self.request_data.get("search", "") != "":
|
||||
s = self.request_data.get("search", "")
|
||||
search_q = Q(email__icontains=s)
|
||||
|
||||
if self.request.event.settings.waiting_list_names_asked:
|
||||
search_q = search_q | Q(name_cached__icontains=s)
|
||||
if self.request.event.settings.waiting_list_phones_asked:
|
||||
search_q = search_q | Q(phone__icontains=s)
|
||||
|
||||
qs = qs.filter(search_q)
|
||||
|
||||
return qs
|
||||
|
||||
|
||||
@@ -238,7 +249,7 @@ class WaitingListView(EventPermissionRequiredMixin, WaitingListQuerySetMixin, Pa
|
||||
def get_context_data(self, **kwargs):
|
||||
ctx = super().get_context_data(**kwargs)
|
||||
ctx['items'] = Item.objects.filter(event=self.request.event)
|
||||
ctx['filtered'] = ("status" in self.request.GET or "item" in self.request.GET)
|
||||
ctx['filtered'] = any(param in self.request.GET for param in ("status", "item", "search"))
|
||||
|
||||
itemvar_cache = {}
|
||||
quota_cache = {}
|
||||
@@ -390,25 +401,20 @@ class EntryDelete(EventPermissionRequiredMixin, CompatDeleteView):
|
||||
})
|
||||
|
||||
|
||||
class EntryTransfer(EventPermissionRequiredMixin, UpdateView):
|
||||
class EntryEdit(EventPermissionRequiredMixin, UpdateView):
|
||||
model = WaitingListEntry
|
||||
template_name = 'pretixcontrol/waitinglist/transfer.html'
|
||||
template_name = 'pretixcontrol/waitinglist/edit.html'
|
||||
permission = 'can_change_orders'
|
||||
form_class = WaitingListEntryTransferForm
|
||||
form_class = WaitingListEntryEditForm
|
||||
context_object_name = 'entry'
|
||||
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
if not self.request.event.has_subevents:
|
||||
raise Http404(_("This is not an event series."))
|
||||
return super().dispatch(request, *args, **kwargs)
|
||||
|
||||
def get_object(self, queryset=None) -> WaitingListEntry:
|
||||
return get_object_or_404(WaitingListEntry, pk=self.kwargs['entry'], event=self.request.event, voucher__isnull=True)
|
||||
|
||||
@transaction.atomic
|
||||
def form_valid(self, form):
|
||||
messages.success(self.request, _('The waitinglist entry has been transferred.'))
|
||||
if form.has_changed():
|
||||
messages.success(self.request, _('The waitinglist entry has been changed.'))
|
||||
self.object.log_action(
|
||||
'pretix.event.orders.waitinglist.changed', user=self.request.user, data={
|
||||
k: form.cleaned_data.get(k) for k in form.changed_data
|
||||
|
||||
@@ -8,8 +8,8 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-02-20 12:53+0000\n"
|
||||
"PO-Revision-Date: 2026-02-12 20:00+0000\n"
|
||||
"Last-Translator: Yasunobu YesNo Kawaguchi <kawaguti@gmail.com>\n"
|
||||
"PO-Revision-Date: 2026-02-23 10:00+0000\n"
|
||||
"Last-Translator: Hijiri Umemoto <hijiri@umemoto.org>\n"
|
||||
"Language-Team: Japanese <https://translate.pretix.eu/projects/pretix/pretix/"
|
||||
"ja/>\n"
|
||||
"Language: ja\n"
|
||||
@@ -17,7 +17,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 5.15.2\n"
|
||||
"X-Generator: Weblate 5.16\n"
|
||||
|
||||
#: pretix/_base_settings.py:87
|
||||
msgid "English"
|
||||
@@ -641,22 +641,16 @@ msgid "Customer account anonymized"
|
||||
msgstr "顧客アカウントが匿名化されました"
|
||||
|
||||
#: pretix/api/webhooks.py:468
|
||||
#, fuzzy
|
||||
#| msgid "Gift card code"
|
||||
msgid "Gift card added"
|
||||
msgstr "ギフトカードのコード"
|
||||
msgstr "ギフトカードを追加済み"
|
||||
|
||||
#: pretix/api/webhooks.py:472
|
||||
#, fuzzy
|
||||
#| msgid "Gift card code"
|
||||
msgid "Gift card modified"
|
||||
msgstr "ギフトカードのコード"
|
||||
msgstr "ギフトカードを修正済み"
|
||||
|
||||
#: pretix/api/webhooks.py:476
|
||||
#, fuzzy
|
||||
#| msgid "Gift card transactions"
|
||||
msgid "Gift card used in transaction"
|
||||
msgstr "ギフトカード取引"
|
||||
msgstr "ギフトカードを取引で使用済み"
|
||||
|
||||
#: pretix/base/addressvalidation.py:100 pretix/base/addressvalidation.py:103
|
||||
#: pretix/base/addressvalidation.py:108 pretix/base/forms/questions.py:1054
|
||||
@@ -708,7 +702,7 @@ msgstr "{system} のユーザー"
|
||||
#: pretix/presale/templates/pretixpresale/event/checkout_customer.html:31
|
||||
#: pretix/presale/templates/pretixpresale/event/order.html:300
|
||||
msgid "Email"
|
||||
msgstr "メール"
|
||||
msgstr "電子メール"
|
||||
|
||||
#: pretix/base/auth.py:157 pretix/base/forms/auth.py:164
|
||||
#: pretix/base/forms/auth.py:226 pretix/base/models/auth.py:750
|
||||
@@ -921,7 +915,7 @@ msgstr "参加者"
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:172
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:175
|
||||
msgid "Attendee email"
|
||||
msgstr "参加者のメールアドレス"
|
||||
msgstr "参加者の電子メール"
|
||||
|
||||
#: pretix/base/datasync/sourcefields.py:219
|
||||
msgid "Attendee or order email"
|
||||
@@ -2316,7 +2310,7 @@ msgstr ""
|
||||
#: pretix/base/exporters/waitinglist.py:116 pretix/control/forms/event.py:1793
|
||||
#: pretix/control/forms/organizer.py:116
|
||||
msgid "Event slug"
|
||||
msgstr "イベントのスラッグ"
|
||||
msgstr "イベントのスラグ"
|
||||
|
||||
#: pretix/base/exporters/orderlist.py:283
|
||||
#: pretix/base/exporters/orderlist.py:481
|
||||
@@ -2359,7 +2353,7 @@ msgstr "イベントのスラッグ"
|
||||
#: pretix/plugins/sendmail/templates/pretixplugins/sendmail/rule_inspect.html:34
|
||||
#: pretix/plugins/stripe/templates/pretixplugins/stripe/control.html:79
|
||||
msgid "Status"
|
||||
msgstr "状態"
|
||||
msgstr "ステータス"
|
||||
|
||||
#: pretix/base/exporters/orderlist.py:284
|
||||
#: pretix/base/exporters/orderlist.py:484
|
||||
@@ -2493,7 +2487,7 @@ msgstr "税規則"
|
||||
#: pretix/base/exporters/orderlist.py:518
|
||||
#: pretix/base/exporters/orderlist.py:729 pretix/base/models/orders.py:205
|
||||
msgid "canceled"
|
||||
msgstr "キャンセルされました"
|
||||
msgstr "キャンセル済み"
|
||||
|
||||
#: pretix/base/exporters/orderlist.py:618
|
||||
#: pretix/base/exporters/orderlist.py:944
|
||||
@@ -2575,8 +2569,6 @@ msgid "Voucher budget usage"
|
||||
msgstr "バウチャー予算の使用状況"
|
||||
|
||||
#: pretix/base/exporters/orderlist.py:654
|
||||
#, fuzzy
|
||||
#| msgid "Voucher tags"
|
||||
msgid "Voucher tag"
|
||||
msgstr "バウチャータグ"
|
||||
|
||||
@@ -3395,39 +3387,34 @@ msgid "Street and Number"
|
||||
msgstr "町域番地"
|
||||
|
||||
#: pretix/base/forms/questions.py:893
|
||||
#, fuzzy, python-brace-format
|
||||
#| msgid "Please enter a shorter name."
|
||||
#, python-brace-format
|
||||
msgid "Please enter a date between {min} and {max}."
|
||||
msgstr "より短い名前を入力してください。"
|
||||
msgstr "{min} から {max}の範囲でデータを入力してください。"
|
||||
|
||||
#: pretix/base/forms/questions.py:899
|
||||
#, fuzzy, python-brace-format
|
||||
#| msgid "Please enter a valid sales channel."
|
||||
#, python-brace-format
|
||||
msgid "Please enter a date no earlier than {min}."
|
||||
msgstr "有効な販売チャネルを入力してください。"
|
||||
msgstr "{min}よりも後の日付を入力してください。"
|
||||
|
||||
#: pretix/base/forms/questions.py:904
|
||||
#, fuzzy, python-brace-format
|
||||
#| msgid "Please enter a shorter name."
|
||||
#, python-brace-format
|
||||
msgid "Please enter a date no later than {max}."
|
||||
msgstr "より短い名前を入力してください。"
|
||||
msgstr "{max}より短い日付を入力してください。"
|
||||
|
||||
#: pretix/base/forms/questions.py:942
|
||||
#, python-brace-format
|
||||
msgid "Please enter a date and time between {min} and {max}."
|
||||
msgstr ""
|
||||
msgstr "{min} から {max}の範囲内で日時を入力してください。"
|
||||
|
||||
#: pretix/base/forms/questions.py:948
|
||||
#, fuzzy, python-brace-format
|
||||
#| msgid "Please enter a valid sales channel."
|
||||
#, python-brace-format
|
||||
msgid "Please enter a date and time no earlier than {min}."
|
||||
msgstr "有効な販売チャネルを入力してください。"
|
||||
msgstr "{min}より後の日時を入力してください。"
|
||||
|
||||
#: pretix/base/forms/questions.py:953
|
||||
#, fuzzy, python-brace-format
|
||||
#| msgid "Please enter the correct result."
|
||||
#, python-brace-format
|
||||
msgid "Please enter a date and time no later than {max}."
|
||||
msgstr "正しい結果を入力してください。"
|
||||
msgstr "{max}より前の日時を入力してください。"
|
||||
|
||||
#: pretix/base/forms/questions.py:1172
|
||||
msgid ""
|
||||
@@ -3582,14 +3569,14 @@ msgstr "サンプル: %s"
|
||||
#: pretix/base/forms/widgets.py:71
|
||||
#, python-brace-format
|
||||
msgid "Available placeholders: {list}"
|
||||
msgstr "提供可能なプレースホルダー: {list}"
|
||||
msgstr "利用可能なプレースホルダー:{list}"
|
||||
|
||||
#: pretix/base/forms/widgets.py:214 pretix/base/models/items.py:1656
|
||||
#: 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
|
||||
msgid "Time"
|
||||
msgstr "時間"
|
||||
msgstr "時刻"
|
||||
|
||||
#: pretix/base/forms/widgets.py:234 pretix/base/forms/widgets.py:239
|
||||
msgid "Business or institutional customer"
|
||||
@@ -4293,22 +4280,19 @@ msgid "Price effect"
|
||||
msgstr "価格の効果"
|
||||
|
||||
#: pretix/base/modelimport_vouchers.py:150
|
||||
#, fuzzy, python-brace-format
|
||||
#| msgid "Could not parse {value} as a price mode, use one of {options}."
|
||||
#, python-brace-format
|
||||
msgid "Could not parse {value} as a price effect, use one of {options}."
|
||||
msgstr ""
|
||||
"{value}を価格モードとして解析できませんでした。{options}のいずれかを使用して"
|
||||
"ください。"
|
||||
"{value}を価格エフェクトとして解析できませんでした。{options}のいずれかを使用"
|
||||
"してください。"
|
||||
|
||||
#: pretix/base/modelimport_vouchers.py:160 pretix/base/models/vouchers.py:248
|
||||
msgid "Voucher value"
|
||||
msgstr "バウチャーの金額"
|
||||
|
||||
#: pretix/base/modelimport_vouchers.py:165
|
||||
#, fuzzy
|
||||
#| msgid "It is pointless to set a value without a price mode."
|
||||
msgid "It is pointless to set a value without a price effect."
|
||||
msgstr "価格モードなしに値を設定することは意味がありません。"
|
||||
msgstr "価格エフェクトなしに値を設定することは意味がありません。"
|
||||
|
||||
#: pretix/base/modelimport_vouchers.py:237 pretix/base/models/items.py:2121
|
||||
#: pretix/base/models/vouchers.py:275
|
||||
@@ -4445,7 +4429,7 @@ msgstr "全ての製品(新規に作成されたものを含む)"
|
||||
#: pretix/base/models/checkin.py:56 pretix/plugins/badges/exporters.py:436
|
||||
#: pretix/plugins/checkinlists/exporters.py:854
|
||||
msgid "Limit to products"
|
||||
msgstr "対象製品に限定"
|
||||
msgstr "商品の上限"
|
||||
|
||||
#: pretix/base/models/checkin.py:60
|
||||
msgid ""
|
||||
@@ -4861,12 +4845,12 @@ msgstr ""
|
||||
#: pretix/base/models/discount.py:177
|
||||
msgctxt "subevent"
|
||||
msgid "Available for dates starting from"
|
||||
msgstr "利用可能な開催日:開始日"
|
||||
msgstr "開始日として使用可能な日付の初期"
|
||||
|
||||
#: pretix/base/models/discount.py:182
|
||||
msgctxt "subevent"
|
||||
msgid "Available for dates starting until"
|
||||
msgstr "利用可能な開催日:終了日"
|
||||
msgstr "開始日として使用可能な日付の終期"
|
||||
|
||||
#: pretix/base/models/discount.py:214
|
||||
msgid ""
|
||||
@@ -5512,7 +5496,7 @@ msgstr "製品の写真"
|
||||
#: pretix/base/models/items.py:584
|
||||
msgctxt "hidden_if_available_legacy"
|
||||
msgid "Only show after sellout of"
|
||||
msgstr "完売後のみ表示:"
|
||||
msgstr "完売後のみ表示する"
|
||||
|
||||
#: pretix/base/models/items.py:585
|
||||
msgid ""
|
||||
@@ -6268,7 +6252,7 @@ msgstr ""
|
||||
#: pretix/control/templates/pretixcontrol/subevents/bulk_edit.html:185
|
||||
#: pretix/control/templates/pretixcontrol/subevents/detail.html:59
|
||||
msgid "Quotas"
|
||||
msgstr "クォータ(割り当て上限)"
|
||||
msgstr "クォータ"
|
||||
|
||||
#: pretix/base/models/items.py:2195
|
||||
msgid "All variations must belong to an item contained in the items list."
|
||||
@@ -6321,46 +6305,41 @@ msgstr "終了"
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mail.html:38
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mails.html:139
|
||||
msgid "queued"
|
||||
msgstr ""
|
||||
msgstr "キューに追加済み"
|
||||
|
||||
#: pretix/base/models/mail.py:53
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mail.html:40
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mails.html:141
|
||||
msgid "being sent"
|
||||
msgstr ""
|
||||
msgstr "送信対象"
|
||||
|
||||
#: pretix/base/models/mail.py:54
|
||||
#, fuzzy
|
||||
#| msgid "Waiting list entry"
|
||||
msgid "awaiting retry"
|
||||
msgstr "空席待ちリスト登録"
|
||||
msgstr "リトライ待ち"
|
||||
|
||||
#: pretix/base/models/mail.py:55
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mail.html:48
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mails.html:149
|
||||
msgid "withheld"
|
||||
msgstr ""
|
||||
msgstr "保留済み"
|
||||
|
||||
#: pretix/base/models/mail.py:57
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mail.html:50
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mails.html:151
|
||||
msgid "aborted"
|
||||
msgstr ""
|
||||
msgstr "中断済み"
|
||||
|
||||
#: pretix/base/models/mail.py:58
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mail.html:52
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mails.html:153
|
||||
#, fuzzy
|
||||
#| msgctxt "checkin state"
|
||||
#| msgid "Present"
|
||||
msgid "sent"
|
||||
msgstr "出席"
|
||||
msgstr "送信済み"
|
||||
|
||||
#: pretix/base/models/mail.py:59
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mail.html:46
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mails.html:147
|
||||
msgid "bounced"
|
||||
msgstr ""
|
||||
msgstr "差し戻し済み"
|
||||
|
||||
#: pretix/base/models/memberships.py:44
|
||||
#: pretix/presale/templates/pretixpresale/organizers/customer_memberships.html:28
|
||||
@@ -6415,7 +6394,7 @@ msgstr "会員タイプ"
|
||||
|
||||
#: pretix/base/models/orders.py:202
|
||||
msgid "pending"
|
||||
msgstr "保留"
|
||||
msgstr "保留中"
|
||||
|
||||
#: pretix/base/models/orders.py:203 pretix/base/payment.py:570
|
||||
#: pretix/base/services/invoices.py:592
|
||||
@@ -9639,6 +9618,8 @@ msgid ""
|
||||
"For business customers, compute taxes based on net total. For individuals, "
|
||||
"use line-based rounding"
|
||||
msgstr ""
|
||||
"顧客が事業者の場合は本体価格の合計に対して税金が計算されます。個人の場合は、"
|
||||
"品目単位で端数計算されます"
|
||||
|
||||
#: pretix/base/settings.py:85
|
||||
msgid "Compute taxes based on net total with stable gross prices"
|
||||
@@ -12252,30 +12233,12 @@ msgstr ""
|
||||
"{organizer}チーム"
|
||||
|
||||
#: pretix/base/settings.py:2955
|
||||
#, fuzzy, python-brace-format
|
||||
#| msgid "Activate your account at {organizer}"
|
||||
#, python-brace-format
|
||||
msgid "Changes to your account at {organizer}"
|
||||
msgstr "{organizer}でアカウントを有効化"
|
||||
msgstr "{organizer}でアカウントを変更"
|
||||
|
||||
#: pretix/base/settings.py:2959
|
||||
#, fuzzy, python-brace-format
|
||||
#| msgid ""
|
||||
#| "Hello {name},\n"
|
||||
#| "\n"
|
||||
#| "you requested to change the email address of your account at "
|
||||
#| "{organizer}!\n"
|
||||
#| "\n"
|
||||
#| "To confirm the change, please click here:\n"
|
||||
#| "\n"
|
||||
#| "{url}\n"
|
||||
#| "\n"
|
||||
#| "This link is valid for one day.\n"
|
||||
#| "\n"
|
||||
#| "If you did not request this, please ignore this email.\n"
|
||||
#| "\n"
|
||||
#| "Best regards, \n"
|
||||
#| "\n"
|
||||
#| "Your {organizer} team"
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"Hello {name},\n"
|
||||
"\n"
|
||||
@@ -12295,15 +12258,16 @@ msgid ""
|
||||
msgstr ""
|
||||
"こんにちは{name}様、\n"
|
||||
"\n"
|
||||
"あなたは{organizer}でのアカウントのメールアドレス変更をリクエストしました!\n"
|
||||
"{organizer}でのアカウントが以下の通り変更されました。\n"
|
||||
"\n"
|
||||
"変更を確認するためには、こちらをクリックしてください:\n"
|
||||
"{message}\n"
|
||||
"\n"
|
||||
"アカウントの変更内容は、こちらで確認できます:\n"
|
||||
"\n"
|
||||
"{url}\n"
|
||||
"\n"
|
||||
"このリンクは1日間有効です。\n"
|
||||
"\n"
|
||||
"もしリクエストをしていない場合は、このメールを無視してください。\n"
|
||||
"もしあなたがこのリクエストをしていない場合は、ただちに私たちにご連絡ください"
|
||||
"。\n"
|
||||
"\n"
|
||||
"よろしくお願いいたします。\n"
|
||||
"\n"
|
||||
@@ -13996,6 +13960,10 @@ msgid ""
|
||||
"business customers and consumers do not receive invoices. This can cause the "
|
||||
"payment amount to change when the invoice address is changed."
|
||||
msgstr ""
|
||||
"上記と同様ですが、ビジネス顧客にのみ適用されます。消費者向けに品目ごとの端数"
|
||||
"計算が行われます。E-invoicing がビジネス顧客のみで使用され、消費者が請求書を"
|
||||
"受け取らない場合に推奨されます。請求書の住所が変更されると、支払金額が変わる"
|
||||
"可能性があります。"
|
||||
|
||||
#: pretix/control/forms/event.py:876
|
||||
msgid ""
|
||||
@@ -14990,10 +14958,8 @@ msgid "Revoked devices"
|
||||
msgstr "取り消されたデバイス"
|
||||
|
||||
#: pretix/control/forms/filter.py:2827 pretix/control/forms/filter.py:2829
|
||||
#, fuzzy
|
||||
#| msgid "Require email addresses per ticket"
|
||||
msgid "Search email address or subject"
|
||||
msgstr "チケットごとにメールアドレスを必須にする"
|
||||
msgstr "メールアドレスまたはサブジェクトを検索する"
|
||||
|
||||
#: pretix/control/forms/global_settings.py:62
|
||||
msgid "Additional footer text"
|
||||
@@ -16185,7 +16151,7 @@ msgstr ""
|
||||
|
||||
#: pretix/control/forms/organizer.py:588
|
||||
msgid "Sensitive emails like password resets will not be sent in Bcc."
|
||||
msgstr ""
|
||||
msgstr "パスワードリセットなどの機微な内容の電子メールは、Bccで送信されません。"
|
||||
|
||||
#: pretix/control/forms/organizer.py:598
|
||||
msgid "This will be attached to every email."
|
||||
@@ -16663,10 +16629,8 @@ msgid "A fee has been added"
|
||||
msgstr "手数料が追加されました"
|
||||
|
||||
#: pretix/control/logdisplay.py:176
|
||||
#, fuzzy
|
||||
#| msgid "The new vouchers have been created."
|
||||
msgid "Taxes and rounding have been recomputed"
|
||||
msgstr "新しいバウチャーが作成されました。"
|
||||
msgstr "税と端数処理が再計算されました"
|
||||
|
||||
#: pretix/control/logdisplay.py:184
|
||||
#, python-brace-format
|
||||
@@ -17369,16 +17333,12 @@ msgid "A scheduled export has failed: {reason}."
|
||||
msgstr "スケジュールされたエクスポートが失敗しました:{reason}。"
|
||||
|
||||
#: pretix/control/logdisplay.py:708
|
||||
#, fuzzy
|
||||
#| msgid "The email has been queued to be sent."
|
||||
msgid "Failed emails have been scheduled to be retried."
|
||||
msgstr "メールが送信待ちキューに追加されました。"
|
||||
msgstr "失敗した電子メールがリトライ待ちにスケジュールされました。"
|
||||
|
||||
#: pretix/control/logdisplay.py:709
|
||||
#, fuzzy
|
||||
#| msgid "The order details have been changed."
|
||||
msgid "Queued emails have been aborted."
|
||||
msgstr "注文の詳細が変更されました。"
|
||||
msgstr "キューに入っていた電子メールが、破棄されました。"
|
||||
|
||||
#: pretix/control/logdisplay.py:710
|
||||
msgid "Gift card acceptance for another organizer has been added."
|
||||
@@ -17728,16 +17688,12 @@ msgid "A manual transaction has been performed."
|
||||
msgstr "手動取引が実行されました。"
|
||||
|
||||
#: pretix/control/logdisplay.py:804
|
||||
#, fuzzy
|
||||
#| msgid "This payment has been canceled."
|
||||
msgid "A payment has been performed."
|
||||
msgstr "この支払いはキャンセルされました。"
|
||||
msgstr "支払いが実行されました。"
|
||||
|
||||
#: pretix/control/logdisplay.py:805
|
||||
#, fuzzy
|
||||
#| msgid "The refund has been processed."
|
||||
msgid "A refund has been performed. "
|
||||
msgstr "払い戻しが処理されました。"
|
||||
msgstr "払い戻しが処理されました。 "
|
||||
|
||||
#: pretix/control/logdisplay.py:806
|
||||
#, python-brace-format
|
||||
@@ -18310,10 +18266,8 @@ msgstr "デバイス"
|
||||
|
||||
#: pretix/control/navigation.py:683
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mails.html:8
|
||||
#, fuzzy
|
||||
#| msgid "Send out emails"
|
||||
msgid "Outgoing emails"
|
||||
msgstr "メールを送る"
|
||||
msgstr "送信する電子メール"
|
||||
|
||||
#: pretix/control/permissions.py:72 pretix/control/permissions.py:109
|
||||
#: pretix/control/permissions.py:140 pretix/control/permissions.py:157
|
||||
@@ -25334,10 +25288,8 @@ msgid "Customer account password reset"
|
||||
msgstr "顧客アカウントのパスワードリセット"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/mail.html:69
|
||||
#, fuzzy
|
||||
#| msgid "Customer account registration"
|
||||
msgid "Customer account security notification"
|
||||
msgstr "顧客アカウントの登録"
|
||||
msgstr "顧客アカウントのセキュリティ通知"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/membershiptype_delete.html:5
|
||||
msgid "Delete membership type:"
|
||||
@@ -25380,87 +25332,72 @@ msgstr "これは年間パスや10枚券などの製品を有効にするため
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mail.html:10
|
||||
msgid "Outgoing email"
|
||||
msgstr ""
|
||||
msgstr "送信する電子メール"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mail.html:14
|
||||
#, fuzzy
|
||||
#| msgid "Email settings"
|
||||
msgid "Email details"
|
||||
msgstr "メール設定"
|
||||
msgstr "電子メールの詳細"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mail.html:21
|
||||
#, fuzzy
|
||||
#| msgctxt "mail_header"
|
||||
#| msgid "From"
|
||||
msgctxt "email"
|
||||
msgid "From"
|
||||
msgstr "From"
|
||||
msgstr "発信者"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mail.html:23
|
||||
msgctxt "email"
|
||||
msgid "To"
|
||||
msgstr ""
|
||||
msgstr "宛先"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mail.html:26
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mails.html:106
|
||||
msgctxt "email"
|
||||
msgid "Cc"
|
||||
msgstr ""
|
||||
msgstr "CC"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mail.html:30
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mails.html:109
|
||||
msgctxt "email"
|
||||
msgid "Bcc"
|
||||
msgstr ""
|
||||
msgstr "BCC"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mail.html:42
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mails.html:143
|
||||
#, fuzzy
|
||||
#| msgid "You will be refunded"
|
||||
msgid "will be retried"
|
||||
msgstr "返金されます"
|
||||
msgstr "再試行されます"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mail.html:55
|
||||
#, fuzzy
|
||||
#| msgid "Creation date"
|
||||
msgid "Creation"
|
||||
msgstr "作成日"
|
||||
msgstr "作成"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mail.html:58
|
||||
msgid "Sent"
|
||||
msgstr ""
|
||||
msgstr "送信済み"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mail.html:62
|
||||
msgid "Next attempt (estimate)"
|
||||
msgstr ""
|
||||
msgstr "次回の試行(予測)"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mail.html:142
|
||||
#, fuzzy
|
||||
#| msgid "Email content"
|
||||
msgid "HTML content"
|
||||
msgstr "メールコンテンツ"
|
||||
msgstr "HTMLコンテンツ"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mail.html:150
|
||||
#, fuzzy
|
||||
#| msgid "Image content"
|
||||
msgid "Text content"
|
||||
msgstr "画像の内容"
|
||||
msgstr "テキストの内容"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mail.html:156
|
||||
#, fuzzy
|
||||
#| msgid "Header image"
|
||||
msgid "Headers"
|
||||
msgstr "ヘッダー画像"
|
||||
msgstr "ヘッダー"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mail.html:180
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mail.html:199
|
||||
msgid "Sensitive content not shown for security reasons"
|
||||
msgstr ""
|
||||
msgstr "機微な内容は、セキュリティ上の理由で表示されません"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mail.html:213
|
||||
msgid ""
|
||||
"Additional headers will be added by the mail server and are not visible here."
|
||||
msgstr ""
|
||||
msgstr "追加のヘッダーはメールサーバによって追加され、ここでは表示されません。"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mails.html:11
|
||||
#, python-format
|
||||
@@ -25468,32 +25405,28 @@ msgid ""
|
||||
"This is an overview of all emails sent by your organizer account in the last "
|
||||
"%(days)s days."
|
||||
msgstr ""
|
||||
"これは、過去 %(days)s日間に主催者アカウントから送信されたすべてのメールの概要"
|
||||
"です。"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mails.html:18
|
||||
#, fuzzy
|
||||
#| msgid "You haven't created any rules yet."
|
||||
msgid "You haven't sent any emails recently."
|
||||
msgstr "まだルールを作成していません。"
|
||||
msgstr "まだ電子メールを送信していません。"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mails.html:63
|
||||
#, fuzzy
|
||||
#| msgid "Content"
|
||||
msgid "Context"
|
||||
msgstr "内容"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mails.html:160
|
||||
#, fuzzy
|
||||
#| msgid "Event:"
|
||||
msgid "Sent:"
|
||||
msgstr "イベント:"
|
||||
msgstr "送信済み:"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mails.html:175
|
||||
msgid "Retry (if failed or withheld)"
|
||||
msgstr ""
|
||||
msgstr "再試行(失敗または保留された場合)"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/outgoing_mails.html:179
|
||||
msgid "Abort (if queued, awaiting retry or withheld)"
|
||||
msgstr ""
|
||||
msgstr "中断(キューに入っているか、再試行待ち、または保留中)"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/organizers/plugin_events.html:6
|
||||
#: pretix/control/templates/pretixcontrol/organizers/plugin_events.html:12
|
||||
@@ -26912,31 +26845,24 @@ msgid "Emergency tokens"
|
||||
msgstr "緊急トークン"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/user/2fa_main.html:147
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "If you lose access to your devices, you can use one of the following keys "
|
||||
#| "to log in. We recommend to store them in a safe place, e.g. printed out "
|
||||
#| "or in a password manager. Every token can be used at most once."
|
||||
msgid ""
|
||||
"If you lose access to your devices, you can use one of your emergency tokens "
|
||||
"to log in. We recommend to store them in a safe place, e.g. printed out or "
|
||||
"in a password manager. Every token can be used at most once."
|
||||
msgstr ""
|
||||
"デバイスへのアクセスが失われた場合、次のキーのいずれかを使用してログインでき"
|
||||
"ます。安全な場所に保存することをお勧めします。例えば、印刷したりパスワードマ"
|
||||
"ネージャーに保存したりすることができます。各トークンは最大1回しか使用できませ"
|
||||
"ん。"
|
||||
"デバイスへのアクセスが失われた場合、緊急トークンを使用してログインできます。"
|
||||
"安全な場所に保存することをお勧めします。例えば、印刷したり"
|
||||
"パスワードマネージャーに保存したりすることができます。各トークンは最大1回しか"
|
||||
"使用できません。"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/user/2fa_main.html:155
|
||||
#, python-format
|
||||
msgid "You generated your emergency tokens on %(generation_date_time)s."
|
||||
msgstr ""
|
||||
msgstr "%(generation_date_time)sに緊急トークンを生成しました。"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/user/2fa_main.html:161
|
||||
#, fuzzy
|
||||
#| msgid "You don’t have any memberships in your account yet."
|
||||
msgid "You don't have any emergency tokens yet."
|
||||
msgstr "まだアカウントにメンバーシップはありません。"
|
||||
msgstr "まだアカウントに緊急トークンがありません。"
|
||||
|
||||
#: pretix/control/templates/pretixcontrol/user/2fa_main.html:166
|
||||
msgid "Generate new emergency tokens"
|
||||
@@ -28316,18 +28242,16 @@ msgid "The selected product has been deactivated."
|
||||
msgstr "選択された製品が無効化されました。"
|
||||
|
||||
#: pretix/control/views/mail.py:161
|
||||
#, fuzzy, python-brace-format
|
||||
#| msgid "Sending of an email has failed."
|
||||
#, python-brace-format
|
||||
msgid "A retry of one email was scheduled."
|
||||
msgid_plural "A retry of {num} emails was scheduled."
|
||||
msgstr[0] "メールの送信に失敗しました。"
|
||||
msgstr[0] "{num}通の電子メールの送信がスケジュールされていました。"
|
||||
|
||||
#: pretix/control/views/mail.py:185
|
||||
#, fuzzy, python-brace-format
|
||||
#| msgid "The email has been queued to be sent."
|
||||
#, python-brace-format
|
||||
msgid "One email was aborted and will not be sent."
|
||||
msgid_plural "{num} emails were aborted and will not be sent."
|
||||
msgstr[0] "メールが送信待ちキューに追加されました。"
|
||||
msgstr[0] "{num}通の電子メールが破棄され、今後送信されません。"
|
||||
|
||||
#: pretix/control/views/mailsetup.py:200
|
||||
msgid ""
|
||||
@@ -29341,10 +29265,6 @@ msgid "Two-factor authentication is now disabled for your account."
|
||||
msgstr "アカウントの二要素認証が無効になりました。"
|
||||
|
||||
#: pretix/control/views/user.py:633
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Your emergency codes have been newly generated. Remember to store them in "
|
||||
#| "a safe place in case you lose access to your devices."
|
||||
msgid ""
|
||||
"Your emergency codes have been newly generated. Remember to store them in a "
|
||||
"safe place in case you lose access to your devices. You will not be able to "
|
||||
@@ -29355,7 +29275,12 @@ msgid ""
|
||||
"- "
|
||||
msgstr ""
|
||||
"新しい緊急コードが生成されました。デバイスへのアクセスを失った場合に備えて、"
|
||||
"安全な場所に保存することを忘れないでください。"
|
||||
"安全な場所に保存することを忘れないでください。このコードはここで再度表示する"
|
||||
"ことはできません。\n"
|
||||
"\n"
|
||||
"あなたの緊急コード:\n"
|
||||
"-\n"
|
||||
"- "
|
||||
|
||||
#: pretix/control/views/user.py:650
|
||||
msgid "Your notifications have been disabled."
|
||||
@@ -31506,7 +31431,7 @@ msgstr "ページ%d"
|
||||
#: pretix/plugins/reports/exporters.py:212
|
||||
#, python-format
|
||||
msgid "Created: %s"
|
||||
msgstr "作成日:%s"
|
||||
msgstr "作成済み:%s"
|
||||
|
||||
#: pretix/plugins/reports/exporters.py:255
|
||||
msgid "Order overview (PDF)"
|
||||
@@ -32912,10 +32837,8 @@ msgstr ""
|
||||
"です。アプリを準備してください。"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1963
|
||||
#, fuzzy
|
||||
#| msgid "EPS via Stripe"
|
||||
msgid "WERO via Stripe"
|
||||
msgstr "Stripe経由でEPS"
|
||||
msgstr "Stripe経由でWERO"
|
||||
|
||||
#: pretix/plugins/stripe/payment.py:1968
|
||||
msgid ""
|
||||
@@ -32923,6 +32846,9 @@ msgid ""
|
||||
"banking institutions support WERO either through their native banking apps "
|
||||
"or through the WERO wallet app. Please have you app ready."
|
||||
msgstr ""
|
||||
"この支払い方法は、欧州のオンラインバンキング利用者で、金融機関がネイティブの"
|
||||
"銀行アプリまたはWEROウォレットアプリを通じてWEROをサポートしている方がご利用"
|
||||
"いただけます。アプリをご用意ください。"
|
||||
|
||||
#: pretix/plugins/stripe/signals.py:93
|
||||
msgid "Charge succeeded."
|
||||
@@ -34392,6 +34318,8 @@ msgid ""
|
||||
"There are products selected in this add-on category that currently cannot be "
|
||||
"changed because they are not on sale:"
|
||||
msgstr ""
|
||||
"このアドオンカテゴリで選択された製品の中には、現在セール対象外のため変更でき"
|
||||
"ない商品があります:"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_addon_choice.html:392
|
||||
msgid "There are no add-ons available for this product."
|
||||
@@ -34579,6 +34507,8 @@ msgid ""
|
||||
"exclusive price. Due to rounding, this caused a small change to the total "
|
||||
"price."
|
||||
msgstr ""
|
||||
"事業所の住所をご入力いただいたため、価格はVAT税抜き価格から算出されました。端"
|
||||
"数処理のため、総額に小さな変更が生じました。"
|
||||
|
||||
#: pretix/presale/templates/pretixpresale/event/fragment_cart.html:516
|
||||
#, python-format
|
||||
|
||||
@@ -8,8 +8,8 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-01-26 09:10+0000\n"
|
||||
"PO-Revision-Date: 2026-02-12 20:00+0000\n"
|
||||
"Last-Translator: Yasunobu YesNo Kawaguchi <kawaguti@gmail.com>\n"
|
||||
"PO-Revision-Date: 2026-02-23 10:00+0000\n"
|
||||
"Last-Translator: Hijiri Umemoto <hijiri@umemoto.org>\n"
|
||||
"Language-Team: Japanese <https://translate.pretix.eu/projects/pretix/pretix-"
|
||||
"js/ja/>\n"
|
||||
"Language: ja\n"
|
||||
@@ -17,7 +17,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 5.15.2\n"
|
||||
"X-Generator: Weblate 5.16\n"
|
||||
|
||||
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:56
|
||||
#: pretix/plugins/banktransfer/static/pretixplugins/banktransfer/ui.js:62
|
||||
@@ -256,7 +256,7 @@ msgstr "承認保留中"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:48
|
||||
msgid "Redeemed"
|
||||
msgstr "使用済"
|
||||
msgstr "引き換え済み"
|
||||
|
||||
#: pretix/plugins/webcheckin/static/pretixplugins/webcheckin/main.js:49
|
||||
msgid "Cancel"
|
||||
|
||||
@@ -531,6 +531,13 @@ def add_events_for_days(request, baseqs, before, after, ebd, timezones):
|
||||
date_to = event.date_to.astimezone(tz).date()
|
||||
d = max(date_from, before.date())
|
||||
while d <= date_to and d <= after.date():
|
||||
if (
|
||||
date_to != date_from
|
||||
and datetime_to.hour == 0 and datetime_to.minute == 0 and datetime_to.second == 0
|
||||
and (d == date_to or d == after.date())
|
||||
):
|
||||
# multi-day event, but special case ends midnight, so do not show on the day it ends
|
||||
break
|
||||
first = d == date_from
|
||||
ebd[d].append({
|
||||
'event': event,
|
||||
@@ -659,6 +666,13 @@ def add_subevents_for_days(qs, before, after, ebd, timezones, sales_channel, eve
|
||||
date_to = se.date_to.astimezone(tz).date()
|
||||
d = max(date_from, before.date())
|
||||
while d <= date_to and d <= after.date():
|
||||
if (
|
||||
date_to != date_from
|
||||
and datetime_to.hour == 0 and datetime_to.minute == 0 and datetime_to.second == 0
|
||||
and (d == date_to or d == after.date())
|
||||
):
|
||||
# multi-day event, but special case ends midnight, so do not show on the day it ends
|
||||
break
|
||||
first = d == date_from
|
||||
ebd[d].append({
|
||||
'continued': not first,
|
||||
|
||||
@@ -19,19 +19,6 @@
|
||||
# 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/>.
|
||||
#
|
||||
|
||||
# This file is based on an earlier version of pretix which was released under the Apache License 2.0. The full text of
|
||||
# the Apache License 2.0 can be obtained at <http://www.apache.org/licenses/LICENSE-2.0>.
|
||||
#
|
||||
# This file may have since been changed and any changes are released under the terms of AGPLv3 as described above. A
|
||||
# full history of changes and contributors is available at <https://github.com/pretix/pretix>.
|
||||
#
|
||||
# This file contains Apache-licensed contributions copyrighted by: Daniel
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software distributed under the Apache License 2.0 is
|
||||
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations under the License.
|
||||
|
||||
from datetime import timedelta
|
||||
|
||||
import pytest
|
||||
@@ -39,7 +26,8 @@ from django.utils.timezone import now
|
||||
from django_scopes import scopes_disabled
|
||||
|
||||
from pretix.base.models import (
|
||||
Event, Item, Organizer, Quota, Team, User, Voucher, WaitingListEntry,
|
||||
Event, Item, ItemVariation, Organizer, Quota, Team, User, Voucher,
|
||||
WaitingListEntry,
|
||||
)
|
||||
from pretix.control.views.dashboards import waitinglist_widgets
|
||||
|
||||
@@ -52,11 +40,12 @@ def env():
|
||||
date_from=now(), plugins='pretix.plugins.banktransfer,tests.testdummy'
|
||||
)
|
||||
event.settings.set('ticketoutput_testdummy__enabled', True)
|
||||
event.settings.set('waiting_list_names_asked', False)
|
||||
event.settings.set('waiting_list_names_required', False)
|
||||
event.settings.set('waiting_list_phones_asked', False)
|
||||
user = User.objects.create_user('dummy@dummy.dummy', 'dummy')
|
||||
item1 = Item.objects.create(event=event, name="Ticket", default_price=23,
|
||||
admission=True)
|
||||
item2 = Item.objects.create(event=event, name="Ticket", default_price=23,
|
||||
admission=True)
|
||||
item1 = Item.objects.create(event=event, name="Ticket", default_price=23, admission=True, allow_waitinglist=True)
|
||||
item2 = Item.objects.create(event=event, name="Ticket", default_price=23, admission=True)
|
||||
|
||||
for i in range(5):
|
||||
WaitingListEntry.objects.create(
|
||||
@@ -78,7 +67,16 @@ def env():
|
||||
t = Team.objects.create(organizer=o, can_view_orders=True, can_change_orders=True)
|
||||
t.members.add(user)
|
||||
t.limit_events.add(event)
|
||||
return event, user, o, item1
|
||||
|
||||
wle = WaitingListEntry.objects.filter(item=item1).first()
|
||||
variation = ItemVariation.objects.create(item=item1)
|
||||
|
||||
return {
|
||||
"event": event,
|
||||
"item1": item1,
|
||||
"wle": wle,
|
||||
"variation": variation,
|
||||
}
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
@@ -122,7 +120,7 @@ def test_list(client, env):
|
||||
assert 'foo0@bar.com' not in response.content.decode()
|
||||
assert 'valid@example.org' not in response.content.decode()
|
||||
|
||||
response = client.get('/control/event/dummy/dummy/waitinglist/?item=%d' % env[3].pk)
|
||||
response = client.get('/control/event/dummy/dummy/waitinglist/?item=%d' % env['item1'].pk)
|
||||
assert 'item2@example.org' not in response.content.decode()
|
||||
assert 'foo0@bar.com' in response.content.decode()
|
||||
|
||||
@@ -191,11 +189,161 @@ def test_delete_bulk(client, env):
|
||||
WaitingListEntry.objects.get(id=wle.id)
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_edit_settings(client, env):
|
||||
event = env['event']
|
||||
wle = env['wle']
|
||||
client.login(email='dummy@dummy.dummy', password='dummy')
|
||||
|
||||
response = client.get('/control/event/dummy/dummy/waitinglist/%s/edit' % wle.id)
|
||||
assert ['email', 'itemvar'] == list(response.context_data['form'].fields.keys())
|
||||
|
||||
event.settings.set('waiting_list_names_asked', True)
|
||||
response = client.get('/control/event/dummy/dummy/waitinglist/%s/edit' % wle.id)
|
||||
assert 'name_parts' in list(response.context_data['form'].fields.keys())
|
||||
|
||||
event.settings.set('waiting_list_names_required', True)
|
||||
response = client.get('/control/event/dummy/dummy/waitinglist/%s/edit' % wle.id)
|
||||
assert response.context_data['form'].fields['name_parts'].required is True
|
||||
|
||||
event.settings.set('waiting_list_phones_asked', True)
|
||||
response = client.get('/control/event/dummy/dummy/waitinglist/%s/edit' % wle.id)
|
||||
assert 'phone' in list(response.context_data['form'].fields.keys())
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_edit_itemvariation(client, env):
|
||||
item = env['item1']
|
||||
variation = env['variation']
|
||||
wle = env['wle']
|
||||
|
||||
client.login(email='dummy@dummy.dummy', password='dummy')
|
||||
|
||||
itemvar = f"{item.pk}-{variation.pk}"
|
||||
|
||||
client.post(
|
||||
'/control/event/dummy/dummy/waitinglist/%s/edit' % wle.id,
|
||||
data={
|
||||
"email": f"1_{wle.email}",
|
||||
"itemvar": itemvar
|
||||
}
|
||||
)
|
||||
|
||||
wle.refresh_from_db()
|
||||
assert wle.variation == variation
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_edit_validations_only_valid_item(client, env):
|
||||
item = env['item1']
|
||||
wle = env['wle']
|
||||
|
||||
client.login(email='dummy@dummy.dummy', password='dummy')
|
||||
|
||||
itemvar = f"{item.pk + 10000}"
|
||||
|
||||
response = client.post(
|
||||
'/control/event/dummy/dummy/waitinglist/%s/edit' % wle.id,
|
||||
data={
|
||||
"email": f"1_{wle.email}",
|
||||
"itemvar": itemvar
|
||||
}
|
||||
)
|
||||
assert response.context_data['form'].errors['itemvar'] == ["Select a valid choice."]
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_edit_validations_only_valid_variation(client, env):
|
||||
item = env['item1']
|
||||
wle = env['wle']
|
||||
variation = env['variation']
|
||||
|
||||
client.login(email='dummy@dummy.dummy', password='dummy')
|
||||
|
||||
itemvar = f"{item.pk}-{variation.pk + 1}"
|
||||
|
||||
response = client.post(
|
||||
'/control/event/dummy/dummy/waitinglist/%s/edit' % wle.id,
|
||||
data={
|
||||
"email": f"1_{wle.email}",
|
||||
"itemvar": itemvar
|
||||
}
|
||||
)
|
||||
assert response.context_data['form'].errors['itemvar'] == ["Select a valid choice."]
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_edit_validations_inactive_item(client, env):
|
||||
item = env['item1']
|
||||
wle = env['wle']
|
||||
item.active = False
|
||||
item.save()
|
||||
|
||||
client.login(email='dummy@dummy.dummy', password='dummy')
|
||||
|
||||
response = client.post(
|
||||
'/control/event/dummy/dummy/waitinglist/%s/edit' % wle.id,
|
||||
data={
|
||||
"email": f"1_{wle.email}",
|
||||
"itemvar": f"{item.pk}"
|
||||
}
|
||||
)
|
||||
assert response.context_data['form'].errors['itemvar'] == ["The selected product is not active."]
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_edit_validations_inactive_variation(client, env):
|
||||
item = env['item1']
|
||||
wle = env['wle']
|
||||
variation = env['variation']
|
||||
wle.variation = variation
|
||||
wle.save()
|
||||
|
||||
variation.active = False
|
||||
variation.save()
|
||||
|
||||
client.login(email='dummy@dummy.dummy', password='dummy')
|
||||
response = client.post(
|
||||
'/control/event/dummy/dummy/waitinglist/%s/edit' % wle.id,
|
||||
data={
|
||||
"email": f"1_{wle.email}",
|
||||
"itemvar": f"{item.pk}-{variation.pk}"
|
||||
}
|
||||
)
|
||||
assert response.context_data['form'].errors['itemvar'] == ["The selected product is not active."]
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_edit_voucher_send_out(client, env):
|
||||
event = env['event']
|
||||
item = env['item1']
|
||||
wle = env['wle']
|
||||
|
||||
quota = Quota.objects.create(event=event, size=100)
|
||||
quota.items.add(item)
|
||||
|
||||
client.login(email='dummy@dummy.dummy', password='dummy')
|
||||
|
||||
with scopes_disabled():
|
||||
wle.send_voucher()
|
||||
|
||||
response = client.post(
|
||||
'/control/event/dummy/dummy/waitinglist/%s/edit' % wle.id,
|
||||
data={
|
||||
"email": f"1_{wle.email}",
|
||||
"itemvar": item.pk
|
||||
},
|
||||
follow=True
|
||||
)
|
||||
assert response.status_code == 404
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_dashboard(client, env):
|
||||
with scopes_disabled():
|
||||
quota = Quota.objects.create(name="Test", size=2, event=env[0])
|
||||
quota.items.add(env[3])
|
||||
w = waitinglist_widgets(env[0])
|
||||
quota = Quota.objects.create(name="Test", size=2, event=env['event'])
|
||||
quota.items.add(env['item1'])
|
||||
w = waitinglist_widgets(env['event'])
|
||||
|
||||
assert '1' in w[0]['content']
|
||||
assert '5' in w[1]['content']
|
||||
|
||||
Reference in New Issue
Block a user