diff --git a/frontend/src/app/app-routing.module.ts b/frontend/src/app/app-routing.module.ts index 3ca09a1..b43c49b 100644 --- a/frontend/src/app/app-routing.module.ts +++ b/frontend/src/app/app-routing.module.ts @@ -3,7 +3,7 @@ import { RouterModule, Routes } from '@angular/router'; import { StudentListComponent } from './components/students/student-list/student-list.component'; import { VisitsComponent } from './components/visits/visits.component'; import { VisitsDatetimeComponent } from './components/visits/visits-datetime/visits-datetime.component'; -import {StudentRegisterComponent} from "./components/students/student-register/student-register.component"; +import { StudentRegisterComponent } from './components/students/student-register/student-register.component'; const routes: Routes = [ { path: 'students', component: StudentListComponent }, @@ -11,7 +11,7 @@ const routes: Routes = [ { path: 'select', component: VisitsDatetimeComponent }, { path: 'register', component: StudentRegisterComponent }, { path: 'visits/:date/:time', component: VisitsComponent }, - { path: '**', redirectTo: 'students' } + { path: '**', redirectTo: 'students' }, ]; @NgModule({ diff --git a/frontend/src/app/app.module.ts b/frontend/src/app/app.module.ts index 25067a6..66ecb37 100644 --- a/frontend/src/app/app.module.ts +++ b/frontend/src/app/app.module.ts @@ -1,7 +1,7 @@ import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import {FormsModule, ReactiveFormsModule} from '@angular/forms'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; import { StudentListComponent } from './components/students/student-list/student-list.component'; @@ -21,14 +21,14 @@ import { MatDatepickerModule } from '@angular/material/datepicker'; import { MatFormFieldModule } from '@angular/material/form-field'; import { MatNativeDateModule, MatRippleModule } from '@angular/material/core'; import { StudentRegisterComponent } from './components/students/student-register/student-register.component'; -import {MatStepperModule} from "@angular/material/stepper"; -import {MatInputModule} from "@angular/material/input"; -import {MatButtonModule} from "@angular/material/button"; -import {MatRadioModule} from "@angular/material/radio"; -import {MatSelectModule} from "@angular/material/select"; -import {MatIconModule} from "@angular/material/icon"; -import {MatCheckboxModule} from "@angular/material/checkbox"; -import {MatTooltipModule} from "@angular/material/tooltip"; +import { MatStepperModule } from '@angular/material/stepper'; +import { MatInputModule } from '@angular/material/input'; +import { MatButtonModule } from '@angular/material/button'; +import { MatRadioModule } from '@angular/material/radio'; +import { MatSelectModule } from '@angular/material/select'; +import { MatIconModule } from '@angular/material/icon'; +import { MatCheckboxModule } from '@angular/material/checkbox'; +import { MatTooltipModule } from '@angular/material/tooltip'; @NgModule({ declarations: [ 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 281c5b2..ffb16a6 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 @@ -8,149 +8,206 @@
Registration
- Für den Tanzunterricht (Tanz-Flatrate) + Für den Tanzunterricht (Tanz-Flatrate)
- Für den Karateunterricht + Für den Karateunterricht
- Für freies Training (unterschriebenes Beiblatt muss der Anmeldung beiliegen) + Für freies Training (unterschriebenes Beiblatt muss der Anmeldung + beiliegen)
- +
-
Personal Information -
+
+ + Name + + - - Name - - + + Surname + + - - Surname - - + + Birthdate + + MM/DD/YYYY + + + + + Gender + + Male + Female + Divers + + +
+
+ + Address + + - - Birthdate - - MM/DD/YYYY - - - + + Postal Code + + + + Phone + + - - Gender - - Male - Female - Divers - - -
-
- - - Address - - - - - Postal Code - - - - - Phone - - - - - E-Mail - - Invalid E-Mail Address - -
+ + E-Mail + + Invalid E-Mail Address + +
- +
-
+ Banking Information Account Holder - + IBAN - + BIC - + Name of Financial Institute - + Amount in €/Month - +
- Einzugsermächtigung - info + Einzugsermächtigung + info
- +
-
+ Consent
- Einwilligung zur Erhebung, Speicherung, Verarbeitung und Nutzung von - personenbezogenen Daten - info + Einwilligung zur Erhebung, Speicherung, Verarbeitung und Nutzung von + personenbezogenen Daten + + info
- Einverständniserklärung zur Nutzung von Bild- und Videomaterial - info + Einverständniserklärung zur Nutzung von Bild- und Videomaterial + + info
- +
- 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 103bbc9..773b918 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 @@ -10,7 +10,8 @@ background-color: transparent; } -input, button { +input, +button { color: white; } @@ -18,7 +19,6 @@ button { background-color: #0366d6; } - ::selection { color: white; background-color: #1576d5; @@ -44,8 +44,6 @@ button { } } - - .leftContainer { display: flex; flex-direction: column; diff --git a/frontend/src/app/components/students/student-register/student-register.component.spec.ts b/frontend/src/app/components/students/student-register/student-register.component.spec.ts index 7b5bfdb..11107a6 100644 --- a/frontend/src/app/components/students/student-register/student-register.component.spec.ts +++ b/frontend/src/app/components/students/student-register/student-register.component.spec.ts @@ -8,9 +8,8 @@ describe('StudentRegisterComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ StudentRegisterComponent ] - }) - .compileComponents(); + declarations: [StudentRegisterComponent], + }).compileComponents(); }); beforeEach(() => { 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 d716885..93c2469 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 @@ -1,12 +1,11 @@ import { Component, OnInit } from '@angular/core'; -import {FormBuilder, FormGroup, Validators} from "@angular/forms"; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; @Component({ selector: 'li-student-register', templateUrl: './student-register.component.html', - styleUrls: ['./student-register.component.scss'] + styleUrls: ['./student-register.component.scss'], }) - export class StudentRegisterComponent implements OnInit { masterFormGroup!: FormGroup; zeroFormGroup!: FormGroup; @@ -14,84 +13,89 @@ export class StudentRegisterComponent implements OnInit { secondFormGroup!: FormGroup; thirdFormGroup!: FormGroup; isEditable = false; - infoText = "Hiermit ermächtige ich die Tanz- und Sportschule Li-Dance, Inh. Lydia Kolepp (nachfolgend Li-\n" + - "Dance) die Monatsbeiträge i.H.v. oben genannten Betrag, diverse Einmalzahlungen und sonstige\n" + - "Verbindlichkeiten zu Lasten meines Kontos einzuziehen.\n"+ - "Bitte beachten Sie, dass im Falle einer unberechtigten Rücklastschrift Li-Dance ein\n" + - "Verwaltungsaufwand entsteht und eine Gebühr i.H.v. derzeit 15,- € berechnet wird. Diese Gebühr\n" + - "wird zusammen mit dem nachfolgenden Monatsbeitrag vom gleichen Konto abgebucht." + infoText = + 'Hiermit ermächtige ich die Tanz- und Sportschule Li-Dance, Inh. Lydia Kolepp (nachfolgend Li-\n' + + 'Dance) die Monatsbeiträge i.H.v. oben genannten Betrag, diverse Einmalzahlungen und sonstige\n' + + 'Verbindlichkeiten zu Lasten meines Kontos einzuziehen.\n' + + 'Bitte beachten Sie, dass im Falle einer unberechtigten Rücklastschrift Li-Dance ein\n' + + 'Verwaltungsaufwand entsteht und eine Gebühr i.H.v. derzeit 15,- € berechnet wird. Diese Gebühr\n' + + 'wird zusammen mit dem nachfolgenden Monatsbeitrag vom gleichen Konto abgebucht.'; - infoTextEinwilligungserklaerung = "Ich bin darüber informiert worden, dass meine personenbezogenen Daten aufgrund rechtlicher\n" + - "Vorgaben mindestens 10 Jahre nach Vertragsende aufbewahrt werden müssen.\n" + - "Ich bin damit einverstanden, dass die oben genannten personenbezogenen Daten zu den oben\n" + - "genannten Zwecken erhoben, gespeichert, verarbeitet, genutzt und ggfs. weitergegeben werden.\n" + - "Ich bin darauf hingewiesen worden, dass die im Rahmen der vorstehend genannten Zwecke\n" + - "erhobenen persönlichen Daten meiner Person unter Beachtung der EU-\n" + - "Datenschutzgrundverordnung (DSGVO) erhoben, gespeichert, genutzt und übermittelt werden.\n" + - "Ich bin zudem darauf hingewiesen worden, dass die Erhebung, Speicherung, Verarbeitung und\n" + - "Nutzung meiner Daten auf freiwilliger Basis erfolgt.\n" + - "Ich bin darüber informiert worden, dass diese Einverständniserklärung jederzeit mit sofortiger\n" + - "Wirkung verweigert, bzw. jederzeit mit Wirkung für die Zukunft widerrufen werden kann. Meine\n" + - "Widerrufserklärung werde ich richten an die unten angegebene Adresse" + infoTextEinwilligungserklaerung = + 'Ich bin darüber informiert worden, dass meine personenbezogenen Daten aufgrund rechtlicher\n' + + 'Vorgaben mindestens 10 Jahre nach Vertragsende aufbewahrt werden müssen.\n' + + 'Ich bin damit einverstanden, dass die oben genannten personenbezogenen Daten zu den oben\n' + + 'genannten Zwecken erhoben, gespeichert, verarbeitet, genutzt und ggfs. weitergegeben werden.\n' + + 'Ich bin darauf hingewiesen worden, dass die im Rahmen der vorstehend genannten Zwecke\n' + + 'erhobenen persönlichen Daten meiner Person unter Beachtung der EU-\n' + + 'Datenschutzgrundverordnung (DSGVO) erhoben, gespeichert, genutzt und übermittelt werden.\n' + + 'Ich bin zudem darauf hingewiesen worden, dass die Erhebung, Speicherung, Verarbeitung und\n' + + 'Nutzung meiner Daten auf freiwilliger Basis erfolgt.\n' + + 'Ich bin darüber informiert worden, dass diese Einverständniserklärung jederzeit mit sofortiger\n' + + 'Wirkung verweigert, bzw. jederzeit mit Wirkung für die Zukunft widerrufen werden kann. Meine\n' + + 'Widerrufserklärung werde ich richten an die unten angegebene Adresse'; - infoTextEinverstaendniserklaerung = "Ich bin damit einverstanden, dass Bilder und Videos der Tanzschule und der Veranstaltungen,\n" + - "die durch die Tanzschule organisiert sind und/oder an denen die Tanzschule teilnimmt, auf\n" + - "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\n" + - "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\n" + - "allgemeinen Persönlichkeitsrechts (§22 Kunsturheberrechtsgesetz). Es gilt der Grundsatz, dass\n" + - "Bild- und Video-Material nur mit Einwilligung des Abgebildeten verbreitet oder veröffentlicht\n" + - "werden kann. Es handelt sich hierbei um eine rechtsgeschäftliche Willenserklärung. Deshalb\n" + - "kann bei Minderjährigen eine Einwilligung nur durch den gesetzlichen Vertreter erfolgen.\n" + - "Diese Einverständniserklärung kann mit sofortiger Wirkung verweigert, bzw. jederzeit mit\n" + - "Wirkung für die Zukunft widerrufen werden. Ein Widerruf kann einen Ausschluss aus der\n" + - "jeweiligen Veranstaltung zur Folge haben.\n" + - "Ein späterer rückwirkender Widerruf für aktuell stattfindende bzw. bereits stattgefundene\n" + - "Veranstaltungen ist ausgeschlossen." + infoTextEinverstaendniserklaerung = + 'Ich bin damit einverstanden, dass Bilder und Videos der Tanzschule und der Veranstaltungen,\n' + + 'die durch die Tanzschule organisiert sind und/oder an denen die Tanzschule teilnimmt, auf\n' + + '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\n' + + '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\n' + + 'allgemeinen Persönlichkeitsrechts (§22 Kunsturheberrechtsgesetz). Es gilt der Grundsatz, dass\n' + + 'Bild- und Video-Material nur mit Einwilligung des Abgebildeten verbreitet oder veröffentlicht\n' + + 'werden kann. Es handelt sich hierbei um eine rechtsgeschäftliche Willenserklärung. Deshalb\n' + + 'kann bei Minderjährigen eine Einwilligung nur durch den gesetzlichen Vertreter erfolgen.\n' + + 'Diese Einverständniserklärung kann mit sofortiger Wirkung verweigert, bzw. jederzeit mit\n' + + 'Wirkung für die Zukunft widerrufen werden. Ein Widerruf kann einen Ausschluss aus der\n' + + 'jeweiligen Veranstaltung zur Folge haben.\n' + + 'Ein späterer rückwirkender Widerruf für aktuell stattfindende bzw. bereits stattgefundene\n' + + 'Veranstaltungen ist ausgeschlossen.'; constructor(private _formBuilder: FormBuilder) {} ngOnInit() { //TODO Test to group all forms into one master form - // this.masterFormGroup = this._formBuilder.group({ - // zeroFormGroup: this._formBuilder.group({ - // danceTraining: [''], - // karateTraining: [''], - // freeTraining: [''], - // }, { - // validators: [this.requireAtLeastOne] - // }), - // firstFormGroup: this._formBuilder.group({ - // firstName: ['', Validators.required], - // lastName: ['', Validators.required], - // birthdate: ['', Validators.required], - // postalCode: ['', [Validators.required, Validators.pattern(/^\d+$/)]], - // address: ['', Validators.required], - // phone: ['', [Validators.required, Validators.pattern(/^\d+$/)]], - // email: ['', [Validators.required, Validators.email]], - // }), - // secondFormGroup: this._formBuilder.group({ - // accountHolder: ['', Validators.required], - // iban: ['', [Validators.required, Validators.pattern(/^\d+$/)]], - // bic: ['', Validators.required], - // nameOfFinancialInstitute: ['', Validators.required], - // amount: ['', [Validators.required, Validators.pattern(/^\d+$/)]], - // einzugsermaechtigung: ['', Validators.required], - // }), - // thirdFormGroup: this._formBuilder.group({ - // einwilligung: ['', Validators.required], - // einverstaendniserklaerung: ['', Validators.required], - // }), - // }); - // } + // this.masterFormGroup = this._formBuilder.group({ + // zeroFormGroup: this._formBuilder.group({ + // danceTraining: [''], + // karateTraining: [''], + // freeTraining: [''], + // }, { + // validators: [this.requireAtLeastOne] + // }), + // firstFormGroup: this._formBuilder.group({ + // firstName: ['', Validators.required], + // lastName: ['', Validators.required], + // birthdate: ['', Validators.required], + // postalCode: ['', [Validators.required, Validators.pattern(/^\d+$/)]], + // address: ['', Validators.required], + // phone: ['', [Validators.required, Validators.pattern(/^\d+$/)]], + // email: ['', [Validators.required, Validators.email]], + // }), + // secondFormGroup: this._formBuilder.group({ + // accountHolder: ['', Validators.required], + // iban: ['', [Validators.required, Validators.pattern(/^\d+$/)]], + // bic: ['', Validators.required], + // nameOfFinancialInstitute: ['', Validators.required], + // amount: ['', [Validators.required, Validators.pattern(/^\d+$/)]], + // einzugsermaechtigung: ['', Validators.required], + // }), + // thirdFormGroup: this._formBuilder.group({ + // einwilligung: ['', Validators.required], + // einverstaendniserklaerung: ['', Validators.required], + // }), + // }); + // } - this.zeroFormGroup = this._formBuilder.group({ - danceTraining: [''], - karateTraining: [''], - freeTraining: [''], - }, { - validators : [this.requireAtLeastOne] + this.zeroFormGroup = this._formBuilder.group( + { + danceTraining: [''], + karateTraining: [''], + freeTraining: [''], + }, + { + validators: [this.requireAtLeastOne], } - ) + ); this.firstFormGroup = this._formBuilder.group({ firstName: ['', Validators.required], lastName: ['', Validators.required], @@ -104,10 +108,10 @@ export class StudentRegisterComponent implements OnInit { this.secondFormGroup = this._formBuilder.group({ accountHolder: ['', Validators.required], - iban: ['', [Validators.required, Validators.pattern(/^\d+$/)]], + iban: ['', [Validators.required, Validators.pattern(/^\d+$/)]], bic: ['', Validators.required], nameOfFinancialInstitute: ['', Validators.required], - amount: ['', [Validators.required, Validators.pattern(/^\d+$/)]], + amount: ['', [Validators.required, Validators.pattern(/^\d+$/)]], einzugsermaechtigung: ['', Validators.required], }); @@ -118,21 +122,19 @@ export class StudentRegisterComponent implements OnInit { } onClick() { - console.log(this.zeroFormGroup) + console.log(this.zeroFormGroup); } // Custom validator function requireAtLeastOne(formGroup: FormGroup) { - const danceTraining = formGroup.get('danceTraining')?.value - const karateTraining = formGroup.get('karateTraining')?.value - const freeTraining = formGroup.get('freeTraining')?.value + const danceTraining = formGroup.get('danceTraining')?.value; + const karateTraining = formGroup.get('karateTraining')?.value; + const freeTraining = formGroup.get('freeTraining')?.value; - if (!danceTraining && !karateTraining && !freeTraining ) { - return {requiredAtLeastOne: true} + if (!danceTraining && !karateTraining && !freeTraining) { + return { requiredAtLeastOne: true }; } - return null - + return null; } - } diff --git a/frontend/src/styles.scss b/frontend/src/styles.scss index ca886d5..52a4aad 100644 --- a/frontend/src/styles.scss +++ b/frontend/src/styles.scss @@ -1,7 +1,6 @@ /* Provide sufficient contrast against white background */ -@import "~bootstrap-icons/font/bootstrap-icons.css"; - +@import '~bootstrap-icons/font/bootstrap-icons.css'; a { color: #0366d6; @@ -32,7 +31,6 @@ body { font-size: 95%; } - .mat-checkbox-checked.mat-accent .mat-checkbox-background { background-color: #0366d6 !important; } @@ -43,13 +41,12 @@ mat-checkbox { color: white; margin-bottom: 16px; } -.mat-step-header .mat-step-icon-selected, .mat-step-icon-state-edit{ +.mat-step-header .mat-step-icon-selected, +.mat-step-icon-state-edit { background-color: #0366d6 !important; } - - - // customize datepicker +// customize datepicker //.mat-datepicker-content-container { // background:transparent; //} @@ -60,8 +57,6 @@ mat-checkbox { // color: black; // } - - // //.mat-calendar-body-cell-content { // background-color: #1861ac; @@ -103,5 +98,11 @@ mat-checkbox { // background-color: #1b6ec2; // border-color: #1861ac; //} -html, body { height: 100%; } -body { margin: 0; font-family: Roboto, "Helvetica Neue", sans-serif; } +html, +body { + height: 100%; +} +body { + margin: 0; + font-family: Roboto, 'Helvetica Neue', sans-serif; +}