Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • Teckids/hacknfun/AlekSIS-App-Paweljong
  • 8sercomcurro/AlekSIS-App-Paweljong
  • gassungtholbuy/AlekSIS-App-Paweljong
  • inturnickterc/AlekSIS-App-Paweljong
  • 3vibbergulyo/AlekSIS-App-Paweljong
  • 9fulcvoZdendmi/AlekSIS-App-Paweljong
  • 8stagitWriate/AlekSIS-App-Paweljong
  • 9sorneWpersma/AlekSIS-App-Paweljong
  • imelKgeshi/AlekSIS-App-Paweljong
  • ceotremagi/AlekSIS-App-Paweljong
  • niebutdiscchi/AlekSIS-App-Paweljong
  • plusultesetz/AlekSIS-App-Paweljong
  • 7tiadeKplicpu/AlekSIS-App-Paweljong
  • grehanbeci/AlekSIS-App-Paweljong
  • inocpuhaw/AlekSIS-App-Paweljong
  • 7inenprobko/AlekSIS-App-Paweljong
  • _weblate/AlekSIS-App-Paweljong
17 results
Show changes
Commits on Source (151)
Showing
with 4434 additions and 1446 deletions
......@@ -19,8 +19,8 @@ class EventMembersSyncDataCheck(DataCheck):
verbose_name = _("Ensure that all registered persons are member of the linked group")
problem_name = _("Event members are out of sync with registrations!")
solve_options = {
IgnoreSolveOption.name: IgnoreSolveOption,
SyncEventMembers.name: SyncEventMembers,
IgnoreSolveOption._class_name: IgnoreSolveOption,
SyncEventMembers._class_name: SyncEventMembers,
}
@classmethod
......@@ -29,7 +29,9 @@ class EventMembersSyncDataCheck(DataCheck):
async_events = []
for event in Event.objects.all():
if set(event.linked_group.members.values_list("id", flat=True)) != set(event.registrations.filter(retracted=False).values_list("person", flat=True)):
if set(event.linked_group.members.values_list("id", flat=True)) != set(
event.registrations.filter(retracted=False).values_list("person", flat=True)
):
async_events.append(event)
for event in async_events:
......
......@@ -61,8 +61,17 @@ class EditEventForm(ExtensibleForm):
"linked_group",
Row("display_name", "slug", "description"),
Row("place", "published"),
Fieldset(_("Date data"), Row("date_event", "date_registration", "date_retraction")),
Fieldset(_("Event details"), Row("cost", "max_participants"), "information", "additional_fields", "contact_information_visible_fields"),
Fieldset(
_("Date data"),
Row("date_start", "date_end", "date_registration", "date_retraction"),
),
Fieldset(
_("Event details"),
Row("cost", "min_cost", "max_cost", "max_participants"),
"information",
"additional_fields",
"contact_information_visible_fields",
),
Fieldset(_("Terms"), "terms"),
Fieldset(_("Info mailings"), "info_mailings"),
),
......@@ -77,10 +86,13 @@ class EditEventForm(ExtensibleForm):
"slug",
"place",
"published",
"date_event",
"date_start",
"date_end",
"date_registration",
"date_retraction",
"cost",
"min_cost",
"max_cost",
"max_participants",
"terms",
"information",
......@@ -106,16 +118,17 @@ class EditEventForm(ExtensibleForm):
attrs={"data-minimum-input-length": 0, "class": "browser-default"},
),
"contact_information_visible_fields": ArrayFieldCheckboxSelectMultiple(
choices=[
("date_of_birth", _("Date of birth")),
("sex", _("Sex")),
("street", _("Street")),
("housenumber", _("House number")),
("postal_code", _("Postal code")),
("place", _("Place")),
("mobile_number", _("Mobile number")),
("school_details", _("School details")),
])
choices=[
("date_of_birth", _("Date of birth")),
("sex", _("Sex")),
("street", _("Street")),
("housenumber", _("House number")),
("postal_code", _("Postal code")),
("place", _("Place")),
("mobile_number", _("Mobile number")),
("school_details", _("School details")),
]
),
}
......@@ -216,10 +229,12 @@ class RegisterEventContactDetails(ExtensibleForm):
@classmethod
def clear_layout(cls):
cls.base_layout = [Fieldset(
_("Name"),
Row("first_name", "last_name"),
)]
cls.base_layout = [
Fieldset(
_("Name"),
Row("first_name", "last_name"),
)
]
cls.layout = Layout(*cls.base_layout)
def __init__(self, event, *args, **kwargs):
......@@ -237,7 +252,10 @@ class RegisterEventContactDetails(ExtensibleForm):
disabled=True,
)
if "date_of_birth" in event.contact_information_visible_fields or "sex" in event.contact_information_visible_fields:
if (
"date_of_birth" in event.contact_information_visible_fields
or "sex" in event.contact_information_visible_fields
):
active_fields = []
if "date_of_birth" in event.contact_information_visible_fields:
active_fields.append("date_of_birth")
......@@ -258,7 +276,12 @@ class RegisterEventContactDetails(ExtensibleForm):
node = Fieldset(_("Personal information"), *active_fields)
self.add_node_to_layout(node, add_fields=False)
if "street" in event.contact_information_visible_fields or "housenumber" in event.contact_information_visible_fields or "postal_code" in event.contact_information_visible_fields or "place" in event.contact_information_visible_fields:
if (
"street" in event.contact_information_visible_fields
or "housenumber" in event.contact_information_visible_fields
or "postal_code" in event.contact_information_visible_fields
or "place" in event.contact_information_visible_fields
):
active_fields = []
if "street" in event.contact_information_visible_fields:
active_fields.append("street")
......@@ -281,7 +304,6 @@ class RegisterEventContactDetails(ExtensibleForm):
label=_("Place"),
)
self.add_node_to_layout(Fieldset(_("Address data"), *active_fields), add_fields=False)
self.fields["email"] = forms.EmailField(
label=_("Email address"),
......@@ -304,7 +326,7 @@ class RegisterEventContactDetails(ExtensibleForm):
contact_details_fields = ["mobile_number", "email"]
else:
contact_details_fields = ["email"]
node = Fieldset(_("Contact details"), *contact_details_fields)
self.add_node_to_layout(node, add_fields=False)
......@@ -405,7 +427,7 @@ class RegisterEventFinancial(ExtensibleForm):
},
)
self.fields["payment_method"].choices = group.get_variant_choices()
self.fields["payment_method"].choices = group.client.get_payment_variant_choices()
class Meta:
model = EventRegistration
......@@ -601,6 +623,7 @@ class EventCheckpointForm(forms.Form):
widget=forms.HiddenInput(),
)
class RegisterAccountForm(SignupForm, ExtensibleForm):
"""Form to register new user accounts."""
......
<template><div>
<v-form
ref="form"
>
<v-text-field
v-model="comment"
label="Comment"
required
></v-text-field>
<template>
<div>
<v-form ref="form">
<v-text-field v-model="comment" label="Comment" required></v-text-field>
<v-btn
color="success"
class="mr-4"
@click="startScan"
>
Check in
</v-btn>
</v-form>
<v-card class="mx-auto">
<v-alert :color="status.color">
{{ status.message }}
</v-alert>
</v-card>
<v-card class="mx-auto">
<v-alert v-for="(checkIn, i) in checkIns" :key="i" :color="checkIn.color">
{{ checkIn.message }}
</v-alert>
</v-card>
</div></template>
<v-btn color="success" class="mr-4" @click="startScan"> Check in </v-btn>
</v-form>
<v-card class="mx-auto">
<v-alert :color="status.color">
{{ status.message }}
</v-alert>
</v-card>
<v-card class="mx-auto">
<v-alert v-for="(checkIn, i) in checkIns" :key="i" :color="checkIn.color">
{{ checkIn.message }}
</v-alert>
</v-card>
</div>
</template>
<script>
import gql from "graphql-tag";
import gql from "graphql-tag";
export default {
data () {
return {
comment: "",
status: {
"color": "blue-grey",
"message": "Scan not started",
},
checkIns: new Array(),
}
},
methods: {
checkIn (data, statusObject) {
this.$apollo.mutate({
mutation: gql`mutation ($eventSlug:String!, $personId:Int!, $comment:String!, $lat:Int, $lon:Int) {
checkpointCheckIn(eventSlug:$eventSlug, personId:$personId, comment:$comment, lat:$lat, lon:$lon){
checkpoint {
id
export default {
data() {
return {
comment: "",
status: {
color: "blue-grey",
message: "Scan not started",
},
checkIns: new Array(),
};
},
methods: {
checkIn(data, statusObject) {
this.$apollo
.mutate({
mutation: gql`
mutation (
$eventSlug: String!
$personId: Int!
$comment: String!
$lat: Int
$lon: Int
) {
checkpointCheckIn(
eventSlug: $eventSlug
personId: $personId
comment: $comment
lat: $lat
lon: $lon
) {
checkpoint {
id
}
}
}
}`,
`,
variables: {
"eventSlug": this.$route.params.slug,
"personId": data.id,
"comment": this.comment
}
}).then((data) => {
eventSlug: this.$route.params.slug,
personId: data.id,
comment: this.comment,
},
})
.then((data) => {
statusObject.message = `Checked in ${data.user.username}`;
statusObject.color = "green";
}).catch((error) => {
})
.catch((error) => {
statusObject.message = `Error checking in ${data.user.username}`;
statusObject.color = "red";
})
},
startScan() {
try {
const ndef = new NDEFReader();
ndef.scan().then(() => {
this.status.color = "blue-grey";
this.status.message = "Scanning...";
ndef.addEventListener("readingerror", (err) => {
// FIXME use semantic colors/types
this.status.color = "red";
this.status.message = err;
});
ndef.addEventListener("reading", (e) => {
const message = e.message;
const checkInStatus = {
"color": "blue-grey",
"message": "Decoding...",
};
this.checkIns.unshift(checkInStatus);
for (const record of message.records) {
if (record.recordType !== "url") {
checkInStatus.message = "Found non-URL";
continue;
}
const decoder = new TextDecoder();
const url = decoder.decode(record.data);
// FIXME use configured base URL here
if (!url.startsWith("https://ticdesk.teckids.org/o/")) {
checkInStatus.message = "Found invalid URL";
checkInStatus.color = "red";
break;
}
fetch(url).then((res) => res.json()).then((data) => {
});
},
startScan() {
try {
const ndef = new NDEFReader();
ndef.scan().then(() => {
this.status.color = "blue-grey";
this.status.message = "Scanning...";
ndef.addEventListener("readingerror", (err) => {
// FIXME use semantic colors/types
this.status.color = "red";
this.status.message = err;
});
ndef.addEventListener("reading", (e) => {
const message = e.message;
const checkInStatus = {
color: "blue-grey",
message: "Decoding...",
};
this.checkIns.unshift(checkInStatus);
for (const record of message.records) {
if (record.recordType !== "url") {
checkInStatus.message = "Found non-URL";
continue;
}
const decoder = new TextDecoder();
const url = decoder.decode(record.data);
// FIXME use configured base URL here
if (!url.startsWith("https://ticdesk.teckids.org/o/")) {
checkInStatus.message = "Found invalid URL";
checkInStatus.color = "red";
break;
}
fetch(url)
.then((res) => res.json())
.then((data) => {
checkInStatus.message = `Checking in ${data.user.username}...`;
checkInStatus.color = "orange";
this.checkIn(data, checkInStatus);
}).catch((error) => {
})
.catch((error) => {
checkInStatus.message = "Error retrieving or decoding data";
checkInStatus.color = "red";
});
}
});
}
});
} catch {
console.log("Error");
}
});
} catch {
console.log("Error");
}
},
}
},
};
</script>
query eventById($id: ID!) {
eventById(id: $id) {
id
displayName
description
cost
minCost
maxCost
terms {
id
}
additionalFields {
id
}
}
}
query eventBySlug($slug: String!) {
event: eventBySlug(slug: $slug) {
id
displayName
description
cost
minCost
maxCost
dateRetraction
terms {
id
title
term
confirmationText
}
additionalFields {
id
title
fieldType
required
helpText
}
contactInformationVisibleFields
}
}
......@@ -80,7 +80,9 @@ export default {
value: "fieldType",
},
{
text: this.$t("paweljong.event_additional_field.required.form_field_name"),
text: this.$t(
"paweljong.event_additional_field.required.form_field_name",
),
value: "required",
},
{
......@@ -104,7 +106,7 @@ export default {
},
methods: {
getCreateData(item) {
let {fieldTitle: _, ...filteredObj} = item;
let { fieldTitle: _, ...filteredObj } = item;
return {
...filteredObj,
required: !!item.required,
......@@ -113,7 +115,7 @@ export default {
},
getPatchData(item) {
if ("required" in item) {
let {fieldTitle: _, ...filteredObj} = item;
let { fieldTitle: _, ...filteredObj } = item;
return {
...filteredObj,
required: !!item.required,
......
/**
* Vue mixin containing code getting the respective vue component for event additional fields.
*
* Only used by event registration form, but factored out for readability.
*/
// TODO: add some more rule checking (e.g. for emails)
import DateField from "aleksis.core/components/generic/forms/DateField.vue";
import DateTimeField from "aleksis.core/components/generic/forms/DateTimeField.vue";
import TimeField from "aleksis.core/components/generic/forms/TimeField.vue";
import PositiveSmallIntegerField from "aleksis.core/components/generic/forms/PositiveSmallIntegerField.vue";
const eventAdditionalFieldMixin = {
methods: {
fieldComponentForAdditionalField(additionalField) {
if (
additionalField.fieldType == "CHARFIELD" ||
additionalField.fieldType == "EMAILFIELD" ||
additionalField.fieldType == "URLFIELD" ||
additionalField.fieldType == "GENERICIPADDRESSFIELD"
) {
return "v-text-field";
} else if (
additionalField.fieldType == "BOOLEANFIELD" ||
additionalField.fieldType == "NULLBOOLEANFIELD"
) {
// TODO: implement proper null boolean input
return "v-checkbox";
} else if (additionalField.fieldType == "DATEFIELD") {
return DateField;
} else if (additionalField.fieldType == "DATETIMEFIELD") {
return DateTimeField;
} else if (additionalField.fieldType == "TIMEFIELD") {
return TimeField;
} else if (
additionalField.fieldType == "INTEGERFIELD" ||
additionalField.fieldType == "DECIMALFIELD"
) {
// TODO: implement proper decimal input
return PositiveSmallIntegerField;
}
return "";
},
},
};
export default eventAdditionalFieldMixin;
<template>
<v-row v-if="participantHelpText || guardianHelpText" class="mb-2">
<v-col
v-if="participantHelpText"
cols="12"
:md="guardianHelpText ? '6' : '12'"
>
<v-card>
<v-card-title>
{{ $t("paweljong.event_registration.form.help_text.participant") }}
</v-card-title>
<v-card-text>{{ participantHelpText }}</v-card-text>
</v-card>
</v-col>
<v-col
v-if="guardianHelpText"
cols="12"
:md="participantHelpText ? '6' : '12'"
>
<v-card>
<v-card-title>
{{ $t("paweljong.event_registration.form.help_text.guardian") }}
</v-card-title>
<v-card-text>{{ guardianHelpText }}</v-card-text>
</v-card>
</v-col>
</v-row>
</template>
<script>
export default {
name: "EventRegistrationHelpTextCards",
props: {
participantHelpText: {
type: String,
required: false,
default: "",
},
guardianHelpText: {
type: String,
required: false,
default: "",
},
},
};
</script>
mutation sendEventRegistration(
$event: ID!
$eventRegistration: EventRegistrationInputType!
) {
sendEventRegistration(event: $event, eventRegistration: $eventRegistration) {
ok
doPaymentToken
}
}
query whoAmI {
whoAmI {
id
person {
id
firstName
lastName
guardians {
id
firstName
lastName
mobileNumber
email
}
mobileNumber
sex
addresses {
id
street
housenumber
postalCode
place
country
addressTypes {
id
name
}
}
dateOfBirth
}
}
}
query gqlPaweljongPaymentChoices {
paweljongPaymentChoices {
variant
text
}
}
query gqlPaweljongSitePreferences {
paweljongSitePreferences {
eventRegistrationAccountParticipantHelpText
eventRegistrationEmailParticipantHelpText
eventRegistrationRegisterParticipantHelpText
eventRegistrationContactDetailsParticipantHelpText
eventRegistrationGuardiansParticipantHelpText
eventRegistrationAdditionalParticipantHelpText
eventRegistrationFinancialParticipantHelpText
eventRegistrationConsentParticipantHelpText
eventRegistrationConfirmParticipantHelpText
eventRegistrationAccountGuardianHelpText
eventRegistrationEmailGuardianHelpText
eventRegistrationRegisterGuardianHelpText
eventRegistrationContactDetailsGuardianHelpText
eventRegistrationGuardiansGuardianHelpText
eventRegistrationAdditionalGuardianHelpText
eventRegistrationFinancialGuardianHelpText
eventRegistrationConsentGuardianHelpText
eventRegistrationConfirmGuardianHelpText
}
}
......@@ -30,11 +30,10 @@ export default {
},
{
path: "event/:slug/register/",
component: () => import("aleksis.core/components/LegacyBaseTemplate.vue"),
component: () =>
import("./components/event_registration/EventRegistrationForm.vue"),
name: "paweljong.registerEventBySlug",
props: {
byTheGreatnessOfTheAlmightyAleksolotlISwearIAmWorthyOfUsingTheLegacyBaseTemplate: true,
},
props: true,
},
{
path: "group_persons/:pk/add/",
......
{
"paweljong": {
"events": {
"menu_title": "Veranstaltungen",
"vouchers": {
"menu_title": "Gutscheine"
},
"terms": {
"menu_title": "Bedingungen"
},
"registration_states": {
"menu_title": "Registrierungsstatus"
},
"info_mailings": {
"menu_title": "Info-Mailings"
"paweljong": {
"events": {
"menu_title": "Veranstaltungen",
"vouchers": {
"menu_title": "Gutscheine"
},
"terms": {
"menu_title": "Bedingungen"
},
"registration_states": {
"menu_title": "Registrierungsstatus"
},
"info_mailings": {
"menu_title": "Info-Mailings"
},
"generate_lists": {
"menu_title": "Teilnehmendenliste generieren"
},
"manage_events": {
"menu_title": "Veranstaltungen verwalten"
}
},
"register": {
"menu_title": "Registrieren"
},
"event_additional_field": {
"create": "Zusätzliche Felder für Veranstaltungen erstellen",
"title": "Zusätzliches Feld für Veranstaltung",
"field_title": "Titel",
"title_plural": "Zusätzliche Felder für Veranstaltungen",
"menu_title": "Zusätzliche Felder für Veranstaltungen",
"field_type": {
"form_field_name": "Feld-Typ",
"BOOLEANFIELD": "Boolescher Wert (Ja/Nein)",
"CHARFIELD": "Text (einzeilig)",
"DATEFIELD": "Datum",
"DATETIMEFIELD": "Datum und Uhrzeit",
"DECIMALFIELD": "Dezimalzahl",
"EMAILFIELD": "E-Mail-Adresse",
"INTEGERFIELD": "Zahl",
"GENERICIPADDRESSFIELD": "IP-Adresse",
"NULLBOOLEANFIELD": "Boolescher Wert oder leer (Ja/Nein/Leer)",
"TEXTFIELD": "Text (mehrzeilig)",
"TIMEFIELD": "Uhrzeit",
"URLFIELD": "URL / Link"
},
"required": {
"form_field_name": "Verpflichtend",
"required": "Verpflichtend",
"optional": "Optional"
},
"help_text": "Hilfe-Text"
},
"event_registration": {
"form": {
"submitted": {
"thank_you": "Danke!",
"submitted_successfully": "Deine Anmeldung wurde erfolgreich abgeschickt.",
"payment_text": "Du musst noch den Zahlungsvorgang für deine Anmeldung abschließen.",
"payment_button": "Zahlung abschließen"
},
"steps": {
"account": {
"title": "Konto",
"choose_mode": {
"continue_existing_account": "Ich habe bereits ein Konto",
"continue_new_account": "Ich habe noch kein Konto",
"new_account_explanation": "Klicke auf Weiter, um den Registrierungsprozess zu starten."
}
},
"email": {
"title": "E-Mail-Adresse",
"choose_mode": {
"continue_aleksis": "Neue E-Mail-Adresse",
"continue_own": "Bestehende E-Mail-Adresse",
"back": "Zurück"
},
"generate_lists": {
"menu_title": "Teilnehmendenliste generieren"
"fields": {
"email": {
"label": "E-Mail-Adresse"
},
"confirm_email": {
"label": "E-Mail-Adresse bestätigen"
}
}
},
"register": {
"title": "Konto",
"fields": {
"first_name": {
"label": "Vorname"
},
"last_name": {
"label": "Nachname"
},
"username": {
"label": "Benutzername"
},
"password": {
"label": "Passwort"
},
"confirm_password": {
"label": "Passwort bestätigen"
}
}
},
"contact_details": {
"title": "Kontaktinformationen",
"fields": {
"first_name": {
"label": "Vorname"
},
"last_name": {
"label": "Nachname"
},
"date_of_birth": {
"label": "Geburtsdatum"
},
"sex": {
"label": "Geschlecht",
"help_text": "Aus verschiedenen Gründen, z. B. weil wir aus rechtlichen Gründen nachts eine geschlechtergetrennte Unterbringung einhalten müssen, müssen wir wissen, ob du ein Junge oder ein Mädchen bist."
},
"street": {
"label": "Straße"
},
"housenumber": {
"label": "Hausnummer"
},
"postal_code": {
"label": "Postleitzahl"
},
"place": {
"label": "Ort"
},
"email": {
"label": "E-Mail-Adresse",
"help_text": "Bitte gib hier deine persönliche E-Mail-Adresse an, die du regelmäßig abrufst. Wichtige Informationen werden immer auch an deine Eltern gesendet. Verwende hier keine E-Mail-Adresse deiner Eltern."
},
"mobile_number": {
"label": "Handynummer",
"help_text": "Deine Handynummer hilft uns, dich im Notfall während der Veranstaltung zu erreichen, z. B. wenn du mit deiner Gruppe auf einer Konferenz unterwegs bist. Falls du kein Handy hast, kannst du das Feld leer lassen."
},
"school": {
"label": "Schule",
"help_text": "Bitte gib den Namen deiner Schule ein."
},
"school_place": {
"label": "Schulort",
"help_text": "Gib den Ort (Stadt) an, in dem sich deine Schule befindet."
},
"school_class": {
"label": "Klasse",
"help_text": "Bitte gib deine aktuelle Klasse an (z. B. 8a)."
}
}
},
"guardians": {
"title": "Erziehungsberechtigte",
"counter": "Erziehungsberechtigter {i}",
"add": "Erziehungsberechtigten hinzufügen",
"fields": {
"first_name": {
"label": "Vorname des Erziehungsberechtigten",
"help_text": "Bitte gib den Vornamen des Erziehungsberechtigten an, der das Anmeldeformular mit dir ausfüllt und während der Veranstaltung in Notfällen erreichbar ist."
},
"last_name": {
"label": "Nachname des Erziehungsberechtigten",
"help_text": "Bitte gib den Nachnamen des Erziehungsberechtigten an, der das Anmeldeformular mit dir ausfüllt und während der Veranstaltung in Notfällen erreichbar ist."
},
"email": {
"label": "E-Mail-Adresse des Erziehungsberechtigten"
},
"mobile_number": {
"label": "Handynummer des Erziehungsberechtigten",
"help_text": "Wir benötigen die Handynummer für Notfälle, falls wir deine Eltern während der Veranstaltung dringend erreichen müssen."
}
}
},
"additional": {
"title": "Zusätzliche Informationen",
"fields": {
"medical_information": {
"label": "Medizinische Informationen / Unverträglichkeiten",
"help_text": "Falls es medizinisch wichtige Dinge gibt, die wir beachten müssen, z. B. bei der Essenszubereitung oder zur Einnahme verschriebener Medikamente, gib diese bitte hier an."
}
}
},
"financial": {
"title": "Bezahlung",
"help_text": {
"cost": "Tatsächliche Kosten",
"max_cost": "Maximal zu zahlender Betrag",
"min_cost": "Minimal zu zahlender Betrag"
},
"manage_events": {
"menu_title": "Veranstaltungen verwalten"
"fields": {
"payment_method": {
"label": "Zahlungsmethode",
"help_text": "Bitte wähle eine Zahlungsmethode. Die tatsächliche Zahlung erfolgt nach der Anmeldung."
},
"voucher_code": {
"label": "Gutscheincode",
"help_text": "Falls du einen Gutscheincode hast, gib ihn hier ein."
},
"amount": {
"label": "Von dir gezahlter Betrag (in €)"
}
}
},
"consent": {
"title": "Einverständniserklärung",
"fields": {
"retraction_consent": {
"label": "Ich bestätige, dass die Rücknahme der Anmeldung nach dem {date} nicht mehr möglich ist."
}
}
},
"confirm": {
"title": "Bestätigen",
"hint": "Nach diesem Schritt kannst du deine Anmeldung nicht mehr bearbeiten.",
"fields": {
"comment": {
"label": "Weitere Anmerkungen",
"help_text": "Hier kannst du uns zusätzliche Anmerkungen mitteilen."
}
}
}
},
"register": {
"menu_title": "Registrieren"
"rules": {
"email": {
"valid": "Dies ist keine gültige E-Mail-Adresse"
},
"confirm_email": {
"no_match": "Die E-Mail-Adressen stimmen nicht überein"
},
"confirm_password": {
"no_match": "Die Passwörter stimmen nicht überein"
},
"amount": {
"too_high": "Der Betrag ist höher als der maximal zu zahlende Betrag.",
"too_low": "Der Betrag ist niedriger als der minimal zu zahlende Betrag."
}
},
"event_additional_field": {
"create": "Zusätzliche Felder für Veranstaltungen erstellen",
"title": "Zusätzliches Feld für Veranstaltung",
"field_title": "Titel",
"title_plural": "Zusätzliche Felder für Veranstaltungen",
"menu_title": "Zusätzliche Felder für Veranstaltungen",
"field_type": {
"form_field_name": "Feld-Typ",
"BOOLEANFIELD": "Boolescher Wert (Ja/Nein)",
"CHARFIELD": "Text (einzeilig)",
"DATEFIELD": "Datum",
"DATETIMEFIELD": "Datum und Uhrzeit",
"DECIMALFIELD": "Dezimalzahl",
"EMAILFIELD": "E-Mail-Adresse",
"INTEGERFIELD": "Zahl",
"GENERICIPADDRESSFIELD": "IP-Adresse",
"NULLBOOLEANFIELD": "Boolescher Wert oder leer (Ja/Nein/Leer)",
"TEXTFIELD": "Text (mehrzeilig)",
"TIMEFIELD": "Uhrzeit",
"URLFIELD": "URL / Link"
},
"required": {
"form_field_name": "Verpflichtend",
"required": "Verpflichtend",
"optional": "Optional"
},
"help_text": "Hilfe-Text"
"help_text": {
"guardian": "Für Erziehungsberechtigte",
"participant": "Für Teilnehmende"
}
}
}
}
}
......@@ -51,6 +51,202 @@
"optional": "Optional"
},
"help_text": "Helptext"
},
"event_registration": {
"form": {
"submitted": {
"thank_you": "Thanks!",
"submitted_successfully": "Your registration was submitted successfully.",
"payment_text": "You need to finish the payment process for your registration.",
"payment_button": "Finish payment"
},
"steps": {
"account": {
"title": "Account",
"choose_mode": {
"continue_existing_account": "I already have an account",
"continue_new_account": "I do not have an account yet",
"new_account_explanation": "Click continue to start the registration process."
}
},
"email": {
"title": "E-Mail address",
"choose_mode": {
"continue_aleksis": "New email address",
"continue_own": "Existing email address",
"back": "Go back"
},
"fields": {
"email": {
"label": "E-Mail address"
},
"confirm_email": {
"label": "Confirm e-mail address"
}
}
},
"register": {
"title": "Account",
"fields": {
"first_name": {
"label": "First name"
},
"last_name": {
"label": "Last name"
},
"username": {
"label": "Username"
},
"password": {
"label": "Password"
},
"confirm_password": {
"label": "Confirm password"
}
}
},
"contact_details": {
"title": "Contact information",
"fields": {
"first_name": {
"label": "First name"
},
"last_name": {
"label": "Last name"
},
"date_of_birth": {
"label": "Date of birth"
},
"sex": {
"label": "Sex",
"help_text": "For various reasons, e.g. because we have to keep gender segregation during the night for legal reasons, we need to know if you are a boy or a girl."
},
"street": {
"label": "Street"
},
"housenumber": {
"label": "Housenumber"
},
"postal_code": {
"label": "Postal code"
},
"place": {
"label": "Place"
},
"email": {
"label": "E-Mail address",
"help_text": "Please use your personal e-mail address here, which you will check personally. Important information will always be sent to your parents as well. Do not use an e-mail address owned by your parents here."
},
"mobile_number": {
"label": "Mobile number",
"help_text": "Your mobile number helps us to reach you in an emergency during the event, e.g. if you are alone with your group at a conference or similar. If you don't have a cell phone, you can leave the field blank."
},
"school": {
"label": "School",
"help_text": "Please enter the name of your school."
},
"school_place": {
"label": "School place",
"help_text": "Enter the place (city) where your school is located."
},
"school_class": {
"label": "School class",
"help_text": "Please enter the class you are in (e.g. 8a)."
}
}
},
"guardians": {
"title": "Legal guardians",
"counter": "Guardian {i}",
"add": "Add guardian",
"remove": "Remove guardian",
"fields": {
"first_name": {
"label": "Guardian's first name",
"help_text": "Please enter the first name of the legal guardian who will fill in the registration with you and who can be reached during the event in an emergency."
},
"last_name": {
"label": "Guardian's last name",
"help_text": "Please enter the last name of the legal guardian who will fill in the registration with you and who can be reached during the event in an emergency."
},
"email": {
"label": "Guardian's email address"
},
"mobile_number": {
"label": "Guardian's mobile number",
"help_text": "We need the mobile phone number for emergencies if we urgently need to reach your parents during the event."
}
}
},
"additional": {
"title": "Additional information",
"fields": {
"medical_information": {
"label": "Medical information / intolerances",
"help_text": "If there are any medically important things we need to consider, e.g. when making food or to make sure you take prescribed medication, please enter it here."
}
}
},
"financial": {
"title": "Payment",
"help_text": {
"cost": "Real costs",
"max_cost": "Maximal payable amount",
"min_cost": "Minimal payable amount"
},
"fields": {
"payment_method": {
"label": "Payment method",
"help_text": "Please choose a payment method. The actual payment will be made after the registration."
},
"voucher_code": {
"label": "Voucher code",
"help_text": "If you have a voucher code, type it in here."
},
"amount": {
"label": "Amount paid by you (in €)"
}
}
},
"consent": {
"title": "Consent",
"fields": {
"retraction_consent": {
"label": "I confirm that the retraction of the registration is not possible anymore after {date}"
}
}
},
"confirm": {
"title": "Confirm",
"hint": "After this step, you won't be able to edit your registration.",
"fields": {
"comment": {
"label": "Other remarks",
"help_text": "You can write down any remarks you want to tell us here."
}
}
}
},
"rules": {
"email": {
"valid": "This is not a valid e-mail address"
},
"confirm_email": {
"no_match": "The e-mail addresses do not match"
},
"confirm_password": {
"no_match": "The passwords do not match"
},
"amount": {
"too_high": "The amount is higher than the maximal payable amount.",
"too_low": "The amount is lower than the minimal payable amount."
}
},
"help_text": {
"guardian": "For guardians",
"participant": "For participants"
}
}
}
}
}