From ce25e4e6d04fa92050641fb30a73d4f6a000dea5 Mon Sep 17 00:00:00 2001 From: Artur Savitskiy Date: Mon, 29 Apr 2024 16:09:02 +0200 Subject: [PATCH] Add code for registration workflow --- backend/api/registrations/get.php | 0 backend/api/registrations/set.php | 70 +++++++ .../student-register.component.html | 174 ++++++++++-------- .../student-register.component.scss | 15 ++ .../student-register.component.ts | 102 ++++++---- .../components/visits/visits.component.html | 2 +- .../src/app/models/student-registration.ts | 19 +- 7 files changed, 255 insertions(+), 127 deletions(-) create mode 100644 backend/api/registrations/get.php create mode 100644 backend/api/registrations/set.php diff --git a/backend/api/registrations/get.php b/backend/api/registrations/get.php new file mode 100644 index 0000000..e69de29 diff --git a/backend/api/registrations/set.php b/backend/api/registrations/set.php new file mode 100644 index 0000000..d921937 --- /dev/null +++ b/backend/api/registrations/set.php @@ -0,0 +1,70 @@ +num_rows !== 0) { + $querystr = "UPDATE li_registrations SET firstname='${firstname}', lastname='${lastname}', birthday='${birthday}', + gender=${gender}, street='${street}', house=${house}, + zip='${zip}', city='${city}', phone='${phone}', email='${email}', + accountholder='${accountHolder}', iban='${iban}', bic='${bic}', bank='${bank}', + applicationconsent=${applicationconsent}, datachangeconsent=${datachangeconsent}, privacypolicyconsent=${privacypolicyconsent}, + returndebitconsent=${returndebitconsent}, datastorageconsent=${datastorageconsent}, multimediaconsent=${multimediaconsent}, + WHERE rid=${rid}"; + } else { + $querystr = "INSERT INTO li_registrations (firstname, lastname, birthday, gender, street, house, zip, city, phone, email, + accountholder, iban, bic, bank, + applicationconsent, datachangeconsent, privacypolicyconsent, + returndebitconsent, datastorageconsent, multimediaconsent) + + VALUES('{$firstname}', '{$lastname}', '{$birthday}', {$gender}, '{$street}', {$house}, '{$house_suffix}', '{$zip}', '{$city}', '{$phone}', '{$email}'. + '${accountHolder}', '${iban}', '${bic}', '${bank}', + ${applicationconsent}, ${datachangeconsent}, ${privacypolicyconsent}, + ${returndebitconsent}, ${datastorageconsent}, ${multimediaconsent})"; + } + + $result = mysqli_query($connection, $querystr); + + echo json_encode('{ "result": "' . $result . '" }'); +?> \ No newline at end of file diff --git a/frontend/src/app/components/students/student-register/student-register.component.html b/frontend/src/app/components/students/student-register/student-register.component.html index e5c5a72..bf3d5cd 100644 --- a/frontend/src/app/components/students/student-register/student-register.component.html +++ b/frontend/src/app/components/students/student-register/student-register.component.html @@ -2,74 +2,92 @@ -
+ Persönliche Informationen -
- - Name - - +
+
+ + Name + + - - Nachname - - + + Nachname + + - - Geburtstag - - - - + + Geburtstag + + + + - - Geschlecht - - männlich - weiblich - divers - - -
-
- - Adresse - - - - - Postleitzahl - - - - - Telefon - - - - - E-Mail - - Ungültige E-Mail Adresse - + + Geschlecht + + männlich + weiblich + divers + + + + E-Mail + + Ungültige E-Mail Adresse + +
+
+ + Straße + + + + + Hausnummer + + + + + Postleitzahl + + + + + Stadt + + + + + Telefon + + +
+
+ +
+ +
+ +
-
diff --git a/frontend/src/app/components/students/student-register/student-register.component.scss b/frontend/src/app/components/students/student-register/student-register.component.scss index b45bf5a..05c2b7c 100644 --- a/frontend/src/app/components/students/student-register/student-register.component.scss +++ b/frontend/src/app/components/students/student-register/student-register.component.scss @@ -45,9 +45,24 @@ margin-right: 10px; } +.whitebox { + background-color: white; + border: gray; + padding: 1em; + margin-bottom: 1em; + + p { + text-align: justify; + } +} + textarea { font-family: inherit; padding: 5px; resize: none; } +.buttonsContainer { + display: flex; + justify-content: right; +} \ No newline at end of file diff --git a/frontend/src/app/components/students/student-register/student-register.component.ts b/frontend/src/app/components/students/student-register/student-register.component.ts index 9a804fa..3822d31 100644 --- a/frontend/src/app/components/students/student-register/student-register.component.ts +++ b/frontend/src/app/components/students/student-register/student-register.component.ts @@ -25,40 +25,49 @@ export class StudentRegisterComponent implements OnInit { firstFormGroup!: FormGroup; secondFormGroup!: FormGroup; thirdFormGroup!: FormGroup; + + infoTextAufnahme = 'Ich erkläre mich damit einverstanden, dass die Tanz- und Sportschule Li-Dance, ' + + 'Inh. Lydia Kolepp die vorstehend angegebenen, zur Einzahlungsvollmacht notwendigen Daten speichert.'; + + infoTextDataChange = 'Änderungen der Anschrift, der Kontaktdaten, der Bankverbindung werde ich unverzüglich bekannt geben. '; + + infoTextPrivacyPolicy = 'Die allgemeinen Geschäftsbedingungen und die Datenschutzerklärung habe ich gelesen und akzeptiere diese.'; + infoTextEinzugermaechtigung = - 'Hiermit ermächtige ich die Tanz- und Sportschule Li-Dance, Inh. Lydia Kolepp (nachfolgend Li-Dance) die Monatsbeiträge i.H.v. oben genannten Betrag, diverse Einmalzahlungen und sonstige' + - 'Verbindlichkeiten zu Lasten meines Kontos einzuziehen.' + - 'Bitte beachten Sie, dass im Falle einer unberechtigten Rücklastschrift Li-Dance ein' + - 'Verwaltungsaufwand entsteht und eine Gebühr i.H.v. derzeit 15,- € berechnet wird. Diese Gebühr' + - 'wird zusammen mit dem nachfolgenden Monatsbeitrag vom gleichen Konto abgebucht.'; + 'Ich ermächtige die Tanz- und Sportschule Li-Dance, Inh. Lydia Kolepp die Monatsbeiträge, diverse Einmalzahlungen und sonstige ' + + 'Verbindlichkeiten gem. unseres Preis- und Leistungsverzeichnisses zu Lasten meines Kontos einzuziehen. '; + + infoTextReturnDebit = 'Ich habe verstanden und akzeptiere, dass im Falle einer unberechtigten Rücklastschrift Li-Dance ein ' + + 'Verwaltungsaufwand entsteht und eine Gebühr i.H.v. 15,- € berechnet wird. Diese Gebühr wird zusammen mit dem nachfolgenden Monatsbeitrag ' + + 'vom gleichen Konto ohne erneute Erinnerung abgebucht.'; infoTextEinwilligungserklaerung = - 'Ich bin darüber informiert worden, dass meine personenbezogenen Daten aufgrund rechtlicher' + - 'Vorgaben mindestens 10 Jahre nach Vertragsende aufbewahrt werden müssen.' + - 'Ich bin damit einverstanden, dass die oben genannten personenbezogenen Daten zu den oben' + - 'genannten Zwecken erhoben, gespeichert, verarbeitet, genutzt und ggfs. weitergegeben werden.' + - 'Ich bin darauf hingewiesen worden, dass die im Rahmen der vorstehend genannten Zwecke' + + 'Ich bin darüber informiert worden, dass meine personenbezogenen Daten aufgrund rechtlicher ' + + 'Vorgaben mindestens 10 Jahre nach Vertragsende aufbewahrt werden müssen. ' + + 'Ich bin damit einverstanden, dass die oben genannten personenbezogenen Daten zu den oben ' + + 'genannten Zwecken erhoben, gespeichert, verarbeitet, genutzt und ggfs. weitergegeben werden. ' + + 'Ich bin darauf hingewiesen worden, dass die im Rahmen der vorstehend genannten Zwecke ' + 'erhobenen persönlichen Daten meiner Person unter Beachtung der EU-' + - 'Datenschutzgrundverordnung (DSGVO) erhoben, gespeichert, genutzt und übermittelt werden.' + - 'Ich bin zudem darauf hingewiesen worden, dass die Erhebung, Speicherung, Verarbeitung und' + - 'Nutzung meiner Daten auf freiwilliger Basis erfolgt.' + - 'Ich bin darüber informiert worden, dass diese Einverständniserklärung jederzeit mit sofortiger' + - 'Wirkung verweigert, bzw. jederzeit mit Wirkung für die Zukunft widerrufen werden kann. Meine' + + 'Datenschutzgrundverordnung (DSGVO) erhoben, gespeichert, genutzt und übermittelt werden. ' + + 'Ich bin zudem darauf hingewiesen worden, dass die Erhebung, Speicherung, Verarbeitung und ' + + 'Nutzung meiner Daten auf freiwilliger Basis erfolgt. ' + + 'Ich bin darüber informiert worden, dass diese Einverständniserklärung jederzeit mit sofortiger ' + + 'Wirkung verweigert, bzw. jederzeit mit Wirkung für die Zukunft widerrufen werden kann. Meine ' + 'Widerrufserklärung werde ich richten an die unten angegebene Adresse'; infoTextEinverstaendniserklaerung = - 'Ich bin damit einverstanden, dass Bilder und Videos der Tanzschule und der Veranstaltungen,' + - 'die durch die Tanzschule organisiert sind und/oder an denen die Tanzschule teilnimmt, auf' + - 'denen ich selbst, mein Sohn oder meine Tochter zu sehen ist auf den Webseiten von Li-Dance und in anderen Online- und/oder Printmedien veröffentlicht' + - 'werden und für Werbezwecke von Li-Dance genutzt werden dürfen. Rechtsgrundlage: Das Recht am eigenen Bild ist ein Teil des vom Gesetz geschützten' + - 'allgemeinen Persönlichkeitsrechts (§22 Kunsturheberrechtsgesetz). Es gilt der Grundsatz, dass' + - 'Bild- und Video-Material nur mit Einwilligung des Abgebildeten verbreitet oder veröffentlicht' + - 'werden kann. Es handelt sich hierbei um eine rechtsgeschäftliche Willenserklärung. Deshalb' + - 'kann bei Minderjährigen eine Einwilligung nur durch den gesetzlichen Vertreter erfolgen.' + - 'Diese Einverständniserklärung kann mit sofortiger Wirkung verweigert, bzw. jederzeit mit' + - 'Wirkung für die Zukunft widerrufen werden. Ein Widerruf kann einen Ausschluss aus der' + + 'Ich bin damit einverstanden, dass Bilder und Videos der Tanzschule und der Veranstaltungen, ' + + 'die durch die Tanzschule organisiert sind und/oder an denen die Tanzschule teilnimmt, auf ' + + 'denen ich selbst, mein Sohn oder meine Tochter zu sehen ist auf den Webseiten von Li-Dance und in anderen Online- und/oder Printmedien veröffentlicht ' + + 'werden und für Werbezwecke von Li-Dance genutzt werden dürfen. Rechtsgrundlage: Das Recht am eigenen Bild ist ein Teil des vom Gesetz geschützten ' + + 'allgemeinen Persönlichkeitsrechts (§22 Kunsturheberrechtsgesetz). Es gilt der Grundsatz, dass ' + + 'Bild- und Video-Material nur mit Einwilligung des Abgebildeten verbreitet oder veröffentlicht ' + + 'werden kann. Es handelt sich hierbei um eine rechtsgeschäftliche Willenserklärung. Deshalb ' + + 'kann bei Minderjährigen eine Einwilligung nur durch den gesetzlichen Vertreter erfolgen. ' + + 'Diese Einverständniserklärung kann mit sofortiger Wirkung verweigert, bzw. jederzeit mit ' + + 'Wirkung für die Zukunft widerrufen werden. Ein Widerruf kann einen Ausschluss aus der ' + 'jeweiligen Veranstaltung zur Folge haben.' + - 'Ein späterer rückwirkender Widerruf für aktuell stattfindende bzw. bereits stattgefundene' + + 'Ein späterer rückwirkender Widerruf für aktuell stattfindende bzw. bereits stattgefundene ' + 'Veranstaltungen ist ausgeschlossen.'; constructor(private _formBuilder: FormBuilder, private registerService: RegisterService) {} @@ -69,11 +78,16 @@ export class StudentRegisterComponent implements OnInit { firstName: ['', Validators.required], lastName: ['', Validators.required], birthdate: ['', Validators.required], - postalCode: ['', [Validators.required, Validators.pattern(/^\d+$/)]], //^: Asserts the start of the string. \d+: Matches one or more digits.$: Asserts the end of the string. - address: ['', Validators.required], + street: ['', Validators.required], + house: ['', Validators.required, Validators.pattern("^[0-9]*$")], + zip: ['', [Validators.required, Validators.pattern(/^\d+$/)]], //^: Asserts the start of the string. \d+: Matches one or more digits.$: Asserts the end of the string. + city: ['', Validators.required], phone: ['', [Validators.required, Validators.pattern(/^(\+?\d{1,3})?[ ]*\d{9,}$/)]], gender: ['', Validators.required], email: ['', [Validators.required, Validators.email]], + applicationConsent: ['', Validators.required], + dataChangeConsent: ['', Validators.required], + privacyPolicyConsent: ['', Validators.required], }); this.secondFormGroup = this._formBuilder.group({ @@ -81,12 +95,13 @@ export class StudentRegisterComponent implements OnInit { iban: ['', [Validators.required, ValidatorService.validateIban]], bic: ['', [Validators.required, Validators.pattern(/^[A-Z]{6}[A-Z0-9]{2}([A-Z0-9]{3})?$/)]], nameOfFinancialInstitute: ['', Validators.required], - directDebitAuthorization: ['', Validators.required], + directDebitConsent: ['', Validators.required], + returnDebitConsent: ['', Validators.required], }); this.thirdFormGroup = this._formBuilder.group({ - consent: ['', Validators.required], - declarationOfConsent: ['', Validators.required], + dataStorageConsent: ['', Validators.required], + multimediaConsent: ['', Validators.required], }); this.secondFormGroup.get("iban")?.valueChanges.subscribe(value => { @@ -115,24 +130,31 @@ export class StudentRegisterComponent implements OnInit { firstName: this.firstFormGroup.get('firstName')?.value, lastName: this.firstFormGroup.get('lastName')?.value, birthdate: this.firstFormGroup.get('birthdate')?.value, - postalCode: this.firstFormGroup.get('postalCode')?.value, - address: this.firstFormGroup.get('address')?.value, + gender: this.firstFormGroup.get('gender')?.value, + street: this.firstFormGroup.get('street')?.value, + house: this.firstFormGroup.get('house')?.value, + zip: this.firstFormGroup.get('zip')?.value, + city: this.firstFormGroup.get('city')?.value, phone: this.removeWhiteSpace(this.firstFormGroup.get('phone')?.value), email: this.firstFormGroup.get('email')?.value, + applicationConsent: this.firstFormGroup.get('applicationConsent')?.value, + dataChangeConsent: this.firstFormGroup.get('dataChangeConsent')?.value, + privacyPolicyConsent: this.firstFormGroup.get('privacyPolicyConsent')?.value, + // Second Form Group accountHolder: this.secondFormGroup.get('accountHolder')?.value, - iban: this.secondFormGroup.get('iban')?.value, - bic: this.secondFormGroup.get('bic')?.value, - nameOfFinancialInstitute: this.secondFormGroup.get('nameOfFinancialInstitute')?.value, - directDebitAuthorization: this.secondFormGroup.get('directDebitAuthorization')?.value, + iban: this.removeWhiteSpace(this.secondFormGroup.get('iban')?.value), + bic: this.removeWhiteSpace(this.secondFormGroup.get('bic')?.value), + bank: this.secondFormGroup.get('bank')?.value, + directDebitConsent: this.secondFormGroup.get('directDebitConsent')?.value, + returnDebitConsent: this.secondFormGroup.get('returnDebitConsent')?.value, // Third Form Group - consent: this.thirdFormGroup.get('consent')?.value, - declarationOfConsent: this.thirdFormGroup.get('declarationOfConsent')?.value + dataStorageConsent: this.thirdFormGroup.get('dataStorageConsent')?.value, + multimediaConsent: this.thirdFormGroup.get('multimediaConsent')?.value }; this.registerService.set(studentRegistration); - } } diff --git a/frontend/src/app/components/visits/visits.component.html b/frontend/src/app/components/visits/visits.component.html index 471ce26..7413d54 100644 --- a/frontend/src/app/components/visits/visits.component.html +++ b/frontend/src/app/components/visits/visits.component.html @@ -4,7 +4,7 @@
-

{{ courseVisit?.name }}

+

{{ courseVisit.name }}

{{ courseVisit.date | date: 'dd.MM.yyyy' }}, {{ courseVisit.begin }} - {{ courseVisit.end }} diff --git a/frontend/src/app/models/student-registration.ts b/frontend/src/app/models/student-registration.ts index 3f5d47e..8d053ce 100644 --- a/frontend/src/app/models/student-registration.ts +++ b/frontend/src/app/models/student-registration.ts @@ -2,15 +2,22 @@ export interface StudentRegistration { firstName: string; lastName: string; birthdate: Date; - postalCode: string; - address: string; + gender: number; + street: string; + house: number; + zip: string; + city: string; phone: string; email: string; accountHolder: string; iban: string; bic: string; - nameOfFinancialInstitute: string; - directDebitAuthorization: boolean; - consent: boolean; - declarationOfConsent: boolean; + bank: string; + applicationConsent: boolean; + dataChangeConsent: boolean; + privacyPolicyConsent: boolean; + directDebitConsent: boolean; + returnDebitConsent: boolean; + dataStorageConsent: boolean; + multimediaConsent: boolean; }