diff --git a/backend/models/Member.js b/backend/models/Member.js index 2c128ee..a415712 100644 --- a/backend/models/Member.js +++ b/backend/models/Member.js @@ -45,9 +45,9 @@ const Member = sequelize.define('Member', { }, birthDate: { type: DataTypes.STRING, - allowNull: false, + allowNull: true, set(value) { - const encryptedValue = encryptData(value); + const encryptedValue = encryptData(value || ''); this.setDataValue('birthDate', encryptedValue); }, get() { diff --git a/frontend/src/components/QuickAddMemberDialog.vue b/frontend/src/components/QuickAddMemberDialog.vue index 23635be..b8238ee 100644 --- a/frontend/src/components/QuickAddMemberDialog.vue +++ b/frontend/src/components/QuickAddMemberDialog.vue @@ -14,7 +14,8 @@ @@ -33,17 +35,18 @@
- +
- @@ -101,15 +104,14 @@ export default { this.localMember = { ...newVal }; }, deep: true - }, - localMember: { - handler(newVal) { - this.$emit('update:member', newVal); - }, - deep: true } }, methods: { + updateMember(field, value) { + this.localMember[field] = value; + this.$emit('update:member', { ...this.localMember }); + }, + handleClose() { this.$emit('update:modelValue', false); this.$emit('close'); diff --git a/frontend/src/views/DiaryView.vue b/frontend/src/views/DiaryView.vue index 67bc258..24f58f5 100644 --- a/frontend/src/views/DiaryView.vue +++ b/frontend/src/views/DiaryView.vue @@ -1713,15 +1713,10 @@ export default { openQuickAddDialog() { this.showQuickAddDialog = true; - // Standard-Geburtsdatum: 01.01.(aktuelles Jahr - 10) - const currentYear = new Date().getFullYear(); - const defaultBirthYear = currentYear - 10; - const defaultBirthDate = `${defaultBirthYear}-01-01`; - this.newMember = { firstName: '', lastName: '', - birthDate: defaultBirthDate, + birthDate: '', gender: '' }; }, @@ -1736,39 +1731,46 @@ export default { }; }, - async createAndAddMember() { - if (!this.isNewMemberValid) return; + async createAndAddMember(memberData) { + console.log('🔍 createAndAddMember aufgerufen mit:', memberData); + + // Verwende die übergebenen Daten oder die lokalen Daten als Fallback + const data = memberData || this.newMember; + + console.log('📊 Verwendete Daten:', data); + + if (!data.firstName || data.firstName.trim() === '') { + console.log('❌ Validierung fehlgeschlagen: Vorname fehlt'); + this.showInfo('Fehler', 'Vorname ist erforderlich', '', 'error'); + return; + } try { - // Standard-Geburtsdatum falls keins eingegeben wurde - let birthDate = this.newMember.birthDate; - if (!birthDate) { - const currentYear = new Date().getFullYear(); - const defaultBirthYear = currentYear - 10; - birthDate = `${defaultBirthYear}-01-01`; - } - + console.log('✅ Validierung erfolgreich, erstelle Mitglied...'); + // Erstelle neues Mitglied - const memberData = { - firstName: this.newMember.firstName.trim(), - lastName: this.newMember.lastName.trim(), - birthDate: birthDate, - gender: this.newMember.gender + const memberDataToSend = { + firstName: data.firstName.trim(), + lastName: data.lastName.trim(), + birthDate: data.birthDate || '', + gender: data.gender }; + + console.log('📤 Sende Daten an API:', memberDataToSend); const response = await apiClient.post(`/clubmembers/set/${this.currentClub}`, { id: null, // null für neues Mitglied - firstname: memberData.firstName, - lastname: memberData.lastName, + firstname: memberDataToSend.firstName, + lastname: memberDataToSend.lastName, street: '', city: '', - birthdate: memberData.birthDate, + birthdate: memberDataToSend.birthDate, phone: '', email: '', active: true, testMembership: false, picsInInternetAllowed: false, - gender: memberData.gender + gender: memberDataToSend.gender }); if (response.data.result === 'success') { diff --git a/frontend/src/views/MembersView.vue b/frontend/src/views/MembersView.vue index 4df6078..104b3bb 100644 --- a/frontend/src/views/MembersView.vue +++ b/frontend/src/views/MembersView.vue @@ -565,7 +565,9 @@ export default { pdfGenerator.save('Telefonliste.pdf'); }, getFormattedBirthdate(birthDate) { + if (!birthDate) return '–'; const date = new Date(birthDate); + if (isNaN(date.getTime())) return '–'; return `${String(date.getDate()).padStart(2, '0')}.${String(date.getMonth() + 1).padStart(2, '0')}.${date.getFullYear()}`; }, labelGender(g) {