diff --git a/pages/mitgliederbereich/api.vue b/pages/mitgliederbereich/api.vue
index dabddf2..acedff5 100644
--- a/pages/mitgliederbereich/api.vue
+++ b/pages/mitgliederbereich/api.vue
@@ -223,7 +223,7 @@
- Hinweis: Ohne id wird ein neues Mitglied erstellt. Mit id wird ein bestehendes Mitglied aktualisiert. geburtsdatum ist Pflichtfeld zur Duplikatsprüfung (Format: YYYY-MM-DD).
+ Hinweis: Ohne id wird ein neues Mitglied erstellt. Mit id wird ein bestehendes Mitglied aktualisiert. Bei neuen Mitgliedern ist geburtsdatum zur Duplikatsprüfung Pflicht (Format: YYYY-MM-DD). Altdaten ohne Geburtsdatum koennen weiter bearbeitet werden.
diff --git a/pages/mitgliederbereich/profil.vue b/pages/mitgliederbereich/profil.vue
index 3898e0c..d7389f5 100644
--- a/pages/mitgliederbereich/profil.vue
+++ b/pages/mitgliederbereich/profil.vue
@@ -77,6 +77,25 @@
>
+
+
+ Geburtsdatum
+
+
+
+ Sichtbar ist in der Mitgliederliste nur der Geburtstag, wenn Sie ihn unten freigeben.
+
+
+
Sichtbarkeit für andere Mitglieder
@@ -299,7 +318,8 @@ if (process.client) {
const formData = ref({
name: '',
email: '',
- phone: ''
+ phone: '',
+ geburtsdatum: ''
})
// Visibility preferences for other logged-in members
@@ -326,7 +346,8 @@ const loadProfile = async () => {
formData.value = {
name: response.user.name,
email: response.user.email,
- phone: response.user.phone || ''
+ phone: response.user.phone || '',
+ geburtsdatum: response.user.geburtsdatum || ''
}
visibility.value = response.user.visibility || visibility.value
} catch {
@@ -430,7 +451,8 @@ const handleSave = async () => {
name: formData.value.name,
email: formData.value.email,
phone: formData.value.phone,
- visibility: visibility.value,
+ geburtsdatum: formData.value.geburtsdatum,
+ visibility: visibility.value,
currentPassword: passwordData.value.current || undefined,
newPassword: passwordData.value.new || undefined
}
diff --git a/server/api/birthdays.get.js b/server/api/birthdays.get.js
index 129f12a..5c210eb 100644
--- a/server/api/birthdays.get.js
+++ b/server/api/birthdays.get.js
@@ -57,7 +57,15 @@ export default defineEventHandler(async (event) => {
const candidates = []
for (const m of manualMembers) {
- const isAccepted = m.active === true || (m.status && String(m.status).toLowerCase() === 'accepted') || m.accepted === true
+ const normalizedStatus = m.status ? String(m.status).toLowerCase() : ''
+ const hasExplicitAcceptanceFlag = m.active !== undefined || m.accepted !== undefined || normalizedStatus !== ''
+ const isAccepted = hasExplicitAcceptanceFlag
+ ? (
+ m.active === true ||
+ m.accepted === true ||
+ normalizedStatus === 'accepted'
+ )
+ : true
if (!isAccepted) continue
const vis = m.visibility || {}
const showBirthday = vis.showBirthday === undefined ? true : Boolean(vis.showBirthday)
diff --git a/server/api/profile.get.js b/server/api/profile.get.js
index 47d8fde..25946c4 100644
--- a/server/api/profile.get.js
+++ b/server/api/profile.get.js
@@ -26,6 +26,7 @@ export default defineEventHandler(async (event) => {
name: user.name,
email: user.email,
phone: user.phone || '',
+ geburtsdatum: user.geburtsdatum || '',
visibility: Object.assign({ showBirthday: true }, (user.visibility || {}))
}
}
diff --git a/server/api/profile.put.js b/server/api/profile.put.js
index 113fa4c..3042e29 100644
--- a/server/api/profile.put.js
+++ b/server/api/profile.put.js
@@ -22,7 +22,7 @@ export default defineEventHandler(async (event) => {
}
const body = await readBody(event)
- const { name, email, phone, currentPassword, newPassword } = body
+ const { name, email, phone, geburtsdatum, currentPassword, newPassword } = body
if (!name || !email) {
throw createError({
@@ -58,6 +58,7 @@ export default defineEventHandler(async (event) => {
user.name = name
user.email = email
user.phone = phone || ''
+ user.geburtsdatum = geburtsdatum || ''
// Optional visibility preferences (what to show to other logged-in members)
// Expected shape: { showEmail: boolean, showPhone: boolean, showAddress: boolean, showBirthday: boolean }
@@ -105,6 +106,7 @@ export default defineEventHandler(async (event) => {
email: user.email,
name: user.name,
phone: user.phone,
+ geburtsdatum: user.geburtsdatum || '',
visibility: user.visibility || {},
roles: roles,
role: roles[0] || 'mitglied' // Rückwärtskompatibilität