diff --git a/README.md b/README.md
index 1f01a3f88..46aeb8340 100644
--- a/README.md
+++ b/README.md
@@ -5,7 +5,7 @@ SWT2 - Bogenliga Application - Angular Oberfläche
Ein Beispiel ist unter [GitHub Demo Seite](https://exxcellent.github.io/swt2-bsa-frontend/) verfügbar.
-## Einstiegg
+## Einstieg
Zum Starten der Anwendung führe folgede Befehle aus:
diff --git a/bogenliga/src/app/modules/sportjahresplan/components/schusszettel/schusszettel.component.ts b/bogenliga/src/app/modules/sportjahresplan/components/schusszettel/schusszettel.component.ts
index f92a5106d..ba82702b6 100644
--- a/bogenliga/src/app/modules/sportjahresplan/components/schusszettel/schusszettel.component.ts
+++ b/bogenliga/src/app/modules/sportjahresplan/components/schusszettel/schusszettel.component.ts
@@ -211,45 +211,42 @@ export class SchusszettelComponent implements OnInit {
this.dirtyFlag = true; // Daten geändert
}
- onSchuetzeChange(value: string, matchNr: number, rueckennummer: number){
- var mannschaftId = matchNr == 1 ? this.match1.mannschaftId : this.match2.mannschaftId;
+ async onSchuetzeChange(value: string, matchNr: number, rueckennummer: number){
+ const mannschaftId = matchNr == 1 ? this.match1.mannschaftId : this.match2.mannschaftId;
- this.mannschaftsMitgliedDataProvider.findByTeamIdAndRueckennummer(mannschaftId, value).then(result => {
- if(result.result == RequestResult.SUCCESS){
- console.log(result.payload.dsbMitgliedId);
+ let valid = true;
+ let allowed = [];
+ let mitglied = null;
- let dsbNummer = result.payload.dsbMitgliedId;
- let allowed = [];
+ try {
+ mitglied = await this.mannschaftsMitgliedDataProvider.findByTeamIdAndRueckennummer(mannschaftId, value);
+ }catch (e){
+ valid = false;
+ }
- if(matchNr == 1){
- allowed = this.allowedMitglieder1;
- }
- else{
- allowed = this.allowedMitglieder2;
- }
+ if(mitglied != null && mitglied.result == RequestResult.SUCCESS) {
+ let dsbNummer = mitglied.payload.dsbMitgliedId;
+ console.log('DsbNummer for Mannschaftsmitglied in Mannschaft ' +
+ mannschaftId + " and Rueckennummer " + value + " is " + dsbNummer);
- if(!allowed.includes(dsbNummer)){
- this.match1.schuetzen.forEach(val => {
- console.log('Checking ',val);
- if(allowed.includes(val[0].dsbMitgliedId)){
- console.log(val[0].rueckennummer + " is valid");
- }
- });
+ allowed = matchNr == 1 ? this.allowedMitglieder1 : this.allowedMitglieder2;
- this.notificationService.showNotification({
- id: 'NOTIFICATION_SCHUSSZETTEL_SCHUETZENNUMMER',
- title: 'SPORTJAHRESPLAN.SCHUSSZETTEL.NOTIFICATION.SCHUETZENNUMMER.TITLE',
- description: 'SPORTJAHRESPLAN.SCHUSSZETTEL.NOTIFICATION.SCHUETZENNUMMER.DESCRIPTION',
- severity: NotificationSeverity.ERROR,
- origin: NotificationOrigin.SYSTEM,
- type: NotificationType.OK,
- userAction: NotificationUserAction.ACCEPTED
- });
- }
- }else{
- console.log('Error');
+ if (!allowed.includes(dsbNummer)) {
+ valid = false;
}
- });
+ }
+
+ if(!valid){
+ this.notificationService.showNotification({
+ id: 'NOTIFICATION_SCHUSSZETTEL_SCHUETZENNUMMER',
+ title: 'SPORTJAHRESPLAN.SCHUSSZETTEL.NOTIFICATION.SCHUETZENNUMMER.TITLE',
+ description: 'SPORTJAHRESPLAN.SCHUSSZETTEL.NOTIFICATION.SCHUETZENNUMMER.DESCRIPTION',
+ severity: NotificationSeverity.ERROR,
+ origin: NotificationOrigin.SYSTEM,
+ type: NotificationType.OK,
+ userAction: NotificationUserAction.ACCEPTED
+ });
+ }
}
onFehlerpunkteChange(value: string, matchNr: number, satzNr: number) {
@@ -401,6 +398,7 @@ export class SchusszettelComponent implements OnInit {
this.getBereitsgeschossenToCheckSchuetze();
// Kontrolle, ob die die Regeln eingehalten wurden
+ /*
for (let i = 0; i < this.matchAllPasse.length; i++) {
// Hat der Schütze 2x in einer Liga geschossen -> darf er nicht mehr in einer Liga darunter schießen
@@ -421,7 +419,7 @@ export class SchusszettelComponent implements OnInit {
console.log('Popup: ', this.passeSelberTag, 'hat bereits diesen Wettkampftag in der', this.selberTagVeranstaltung, 'geschossen');
this.savepopSelberTag();
}
- }
+ }*/
}
savepopSelberTag() {
diff --git a/bogenliga/src/app/modules/user/components/user-pwd/user-pwd.component.html b/bogenliga/src/app/modules/user/components/user-pwd/user-pwd.component.html
index 8d2e70c21..193fb7626 100644
--- a/bogenliga/src/app/modules/user/components/user-pwd/user-pwd.component.html
+++ b/bogenliga/src/app/modules/user/components/user-pwd/user-pwd.component.html
@@ -58,8 +58,7 @@
*
-
-
-
{{ 'MANAGEMENT.DSBMITGLIEDER_DETAIL.FORM.VEREIN.ERROR' | translate }}
+
diff --git a/bogenliga/src/app/modules/verwaltung/components/veranstaltung/veranstaltung-detail/veranstaltung-detail.component.ts b/bogenliga/src/app/modules/verwaltung/components/veranstaltung/veranstaltung-detail/veranstaltung-detail.component.ts
index 87dcea1f7..25b527723 100644
--- a/bogenliga/src/app/modules/verwaltung/components/veranstaltung/veranstaltung-detail/veranstaltung-detail.component.ts
+++ b/bogenliga/src/app/modules/verwaltung/components/veranstaltung/veranstaltung-detail/veranstaltung-detail.component.ts
@@ -1,6 +1,12 @@
import {Component, OnInit} from '@angular/core';
import {ActivatedRoute, Router} from '@angular/router';
-import {AlertType, ButtonType, CommonComponentDirective, toTableRows} from '@shared/components';
+import {
+ AlertType,
+ ButtonType,
+ CommonComponentDirective, hideLoadingIndicator,
+ showDeleteLoadingIndicatorIcon,
+ toTableRows
+} from '@shared/components';
import {BogenligaResponse} from '@shared/data-provider';
import {isNullOrUndefined, isUndefined} from '@shared/functions';
import {
@@ -12,6 +18,7 @@ import {
NotificationUserAction
} from '../../../../shared/services/notification';
import {UserProfileDataProviderService} from '../../../../user/services/user-profile-data-provider.service';
+import {UserDataProviderService} from '../../../services/user-data-provider.service';
import {UserProfileDTO} from '../../../../user/types/model/user-profile-dto.class';
import {UserProfileDO} from '../../../../user/types/user-profile-do.class';
import {VeranstaltungDataProviderService} from '../../../services/veranstaltung-data-provider.service';
@@ -37,17 +44,22 @@ import {MannschaftSortierungDO} from '@verwaltung/types/mannschaftSortierung-do.
import {MatchDataProviderService} from '@verwaltung/services/match-data-provider.service';
import {WettkampfKlasseDO} from '@verwaltung/types/wettkampfklasse-do.class';
import {TableActionType} from '@shared/components/tables/types/table-action-type.enum';
+import {UserRolleDO} from '@verwaltung/types/user-rolle-do.class';
+import {UserRolleDTO} from '@verwaltung/types/datatransfer/user-rolle-dto.class';
+
const ID_PATH_PARAM = 'id';
const NOTIFICATION_DELETE_VERANSTALTUNG = 'veranstaltung_detail_delete';
const NOTIFICATION_DELETE_VERANSTALTUNG_SUCCESS = 'veranstaltung_detail_delete_success';
const NOTIFICATION_DELETE_VERANSTALTUNG_FAILURE = 'veranstaltung_detail_delete_failure';
const NOTIFICATION_SAVE_VERANSTALTUNG = 'veranstaltung_detail_save';
+const NOTIFICATION_SAVE_VERANSTALTUNG_FAILURE = 'veranstaltung_detail_save_failure';
const NOTIFICATION_UPDATE_VERANSTALTUNG = 'veranstaltung_detail_update';
const NOTIFICATION_SAVE_SORTIERUNG = 'veranstaltung_detail_save_sortierung';
const NOTIFICATION_INIT_LIGATABELLE_SUC = 'init_Ligatabelle_suc';
const NOTIFICATION_INIT_LIGATABELLE_FAIL = 'init_Ligatabelle_fail';
const NOTIFICATION_COPY_MANNSCHAFTEN_FAILURE = 'veranstaltung_detail_copy_failure';
+const NOTIFICATION_DELETE_MANNSCHAFT = 'mannschaft_detail_delete';
@Component({
@@ -55,7 +67,11 @@ const NOTIFICATION_COPY_MANNSCHAFTEN_FAILURE = 'veranstaltung_detail_copy_failur
templateUrl: './veranstaltung-detail.component.html',
styleUrls: ['./veranstaltung-detail.component.scss']
})
+
+
+
export class VeranstaltungDetailComponent extends CommonComponentDirective implements OnInit {
+
public config = VERANSTALTUNG_DETAIL_CONFIG;
public tableConfig = VERANSTALTUNG_DETAIL_TABLE_Config;
public ButtonType = ButtonType;
@@ -64,7 +80,6 @@ export class VeranstaltungDetailComponent extends CommonComponentDirective imple
public allVeranstaltung: Array = [new VeranstaltungDO()];
public lastVeranstaltung: VeranstaltungDO = new VeranstaltungDO();
-
public currentLiga: LigaDO = new LigaDO();
public allLiga: Array = [new LigaDO()];
@@ -75,11 +90,9 @@ export class VeranstaltungDetailComponent extends CommonComponentDirective imple
public allDsbMannschaft: Array = [new DsbMannschaftDO()];
public testMannschaft: DsbMannschaftDO = new DsbMannschaftDO();
-
-
public currentUser: UserProfileDO = new UserProfileDO();
public allUsers: Array = [new UserProfileDO()];
-
+ public allLigaleiter: Array = [new UserRolleDO()];
public deleteLoading = false;
public saveLoading = false;
@@ -97,11 +110,13 @@ export class VeranstaltungDetailComponent extends CommonComponentDirective imple
public currentLigatabelle: Array;
+
constructor(
private veranstaltungDataProvider: VeranstaltungDataProviderService,
private wettkampftypDataProvider: WettkampftypDataProviderService,
private regionProvider: RegionDataProviderService,
private userProvider: UserProfileDataProviderService,
+ private userDataProvider: UserDataProviderService,
private ligaProvider: LigaDataProviderService,
private mannschaftDataProvider: DsbMannschaftDataProviderService,
private router: Router,
@@ -113,8 +128,8 @@ export class VeranstaltungDetailComponent extends CommonComponentDirective imple
super();
}
- ngOnInit() {
+ ngOnInit() {
this.loading = true;
this.notificationService.discardNotification();
this.route.params.subscribe((params) => {
@@ -128,6 +143,7 @@ export class VeranstaltungDetailComponent extends CommonComponentDirective imple
this.loadUsers();
+ this.loadLigaleiter();
this.loadWettkampftyp();
this.loadLiga();
@@ -144,18 +160,20 @@ export class VeranstaltungDetailComponent extends CommonComponentDirective imple
});
}
+
public onWettkampftag(ignore: any): void {
this.navigateToWettkampftage(this.currentVeranstaltung);
}
+
private navigateToWettkampftage(ignore: any) {
this.router.navigateByUrl('/verwaltung/veranstaltung/' + this.currentVeranstaltung.id + '/' + this.currentVeranstaltung.id);
}
+
public onSave(ignore: any): void {
this.saveLoading = true;
-
if (typeof this.currentLiga === 'undefined') {
this.currentVeranstaltung.ligaId = null;
} else {
@@ -173,7 +191,6 @@ export class VeranstaltungDetailComponent extends CommonComponentDirective imple
} else {
this.currentVeranstaltung.wettkampfTypId = this.currentWettkampftyp.id;
this.currentVeranstaltung.wettkampftypName = this.currentWettkampftyp.name;
-
}
// persist
@@ -204,18 +221,34 @@ export class VeranstaltungDetailComponent extends CommonComponentDirective imple
this.notificationService.showNotification(notification);
}
- }, (response: BogenligaResponse) => {
- console.log('Failed');
- this.saveLoading = false;
+ }
+ )
+ .catch((response)=> {
+ console.log('Veranstaltung existiert bereits in diesem Sportjahr');
+ const notification: Notification = {
+ id: NOTIFICATION_SAVE_VERANSTALTUNG_FAILURE,
+ title: 'MANAGEMENT.VERANSTALTUNG_DETAIL.NOTIFICATION.SAVE_FAILURE.TITLE',
+ description: 'MANAGEMENT.VERANSTALTUNG_DETAIL.NOTIFICATION.SAVE_FAILURE.DESCRIPTION',
+ severity: NotificationSeverity.ERROR,
+ origin: NotificationOrigin.USER,
+ type: NotificationType.OK,
+ userAction: NotificationUserAction.PENDING
+ };
+ this.notificationService.observeNotification(NOTIFICATION_SAVE_VERANSTALTUNG_FAILURE)
+ .subscribe((myNotification) => {
+ if (myNotification.userAction === NotificationUserAction.ACCEPTED) {
+ this.saveLoading = false;
+ }
+ });
+ this.notificationService.showNotification(notification);
});
-
-
// show response message
}
- //Gets executed when button "Mannschaft kopieren" is pressed
+
+ // Gets executed when button "Mannschaft kopieren" is pressed
public onCopyMannschaft(ignore: any): void {
this.saveLoading = true;
this.veranstaltungDataProvider.findLastVeranstaltungById(this.currentVeranstaltung.id)
@@ -253,7 +286,6 @@ export class VeranstaltungDetailComponent extends CommonComponentDirective imple
}
-
public onUpdate(ignore: any): void {
this.saveLoading = true;
this.currentVeranstaltung.ligaId = this.currentLiga.id;
@@ -296,11 +328,10 @@ export class VeranstaltungDetailComponent extends CommonComponentDirective imple
});
}
+
/**
* Deletes all Wettkampftag entries of the provided VeranstaltungID
*/
-
-
public onDelete(ignore: any): void {
this.deleteLoading = true;
this.notificationService.discardNotification();
@@ -329,14 +360,15 @@ export class VeranstaltungDetailComponent extends CommonComponentDirective imple
this.deleteLoading = false;
}
});
-
this.notificationService.showNotification(notification);
}
+
public entityExists(): boolean {
return this.currentVeranstaltung.id >= 0;
}
+
public mannschaftExists(): boolean {
return this.allDsbMannschaft.filter((veranstaltung) => veranstaltung.id === this.currentVeranstaltung.id).length > 0;
}
@@ -348,45 +380,61 @@ export class VeranstaltungDetailComponent extends CommonComponentDirective imple
.catch((response: BogenligaResponse) => this.handleFailure(response));
}
+
private loadUsers() {
this.userProvider.findAll()
.then((response: BogenligaResponse) => this.handleUserResponseArraySuccess(response))
.catch((response: BogenligaResponse) => this.handleUserResponseArrayFailure(response));
+ }
+
+ /**
+ * receives a promise including a list of all Ligaleiter
+ * @private
+ */
+ private loadLigaleiter() {
+ let ligaleiterRolleId = 2;
+ this.userDataProvider.findAllUsersByRoleId(ligaleiterRolleId)
+ .then((response: BogenligaResponse) => this.handleLigaleiterResponseArraySuccess(response))
+ .catch((response: BogenligaResponse) => this.handleLigaleiterResponseArrayFailure(response));
}
+
private loadLiga() {
this.ligaProvider.findAll()
.then((response: BogenligaResponse) => this.handlLigaResponseArraySuccess(response))
.catch((response: BogenligaResponse) => this.handleLigaResponseArrayFailure(response));
-
}
+
private loadWettkampftyp() {
this.wettkampftypDataProvider.findAll()
.then((response: BogenligaResponse) => this.handleWettkampftypResponseArraySuccess(response))
.catch((response: BogenligaResponse) => this.handleWettkampftypResponseArrayFailure(response));
-
}
+
private handleSuccess(response: BogenligaResponse) {
this.currentVeranstaltung = response.payload;
this.loading = false;
this.loadWettkampftyp();
this.loadUsers();
+ this.loadLigaleiter()
this.loadLiga();
}
+
private handleFailure(response: BogenligaResponse) {
this.loading = false;
}
+
private handleCopyFromVeranstaltungSuccess(response: BogenligaResponse) {
this.loadMannschaftsTable();
}
- private handleDeleteSuccess(response: BogenligaResponse): void {
+ private handleDeleteSuccess(response: BogenligaResponse): void {
const notification: Notification = {
id: NOTIFICATION_DELETE_VERANSTALTUNG_SUCCESS,
title: 'MANAGEMENT.VERANSTALTUNG_DETAIL.NOTIFICATION.DELETE_SUCCESS.TITLE',
@@ -408,8 +456,8 @@ export class VeranstaltungDetailComponent extends CommonComponentDirective imple
this.notificationService.showNotification(notification);
}
- private handleDeleteFailure(response: BogenligaResponse): void {
+ private handleDeleteFailure(response: BogenligaResponse): void {
const notification: Notification = {
id: NOTIFICATION_DELETE_VERANSTALTUNG_FAILURE,
title: 'MANAGEMENT.VERANSTALTUNG_DETAIL.NOTIFICATION.DELETE_FAILURE.TITLE',
@@ -430,6 +478,7 @@ export class VeranstaltungDetailComponent extends CommonComponentDirective imple
this.notificationService.showNotification(notification);
}
+
private handlLigaResponseArraySuccess(response: BogenligaResponse): void {
this.allLiga = [];
this.allLiga = response.payload;
@@ -441,11 +490,13 @@ export class VeranstaltungDetailComponent extends CommonComponentDirective imple
this.loading = false;
}
+
private handleLigaResponseArrayFailure(response: BogenligaResponse): void {
this.allLiga = [];
this.loading = false;
}
+
private handleWettkampftypResponseArraySuccess(response: BogenligaResponse): void {
this.allWettkampftyp = [];
this.allWettkampftyp = response.payload;
@@ -457,11 +508,13 @@ export class VeranstaltungDetailComponent extends CommonComponentDirective imple
this.loading = false;
}
+
private handleWettkampftypResponseArrayFailure(response: BogenligaResponse): void {
this.allWettkampftyp = [];
this.loading = false;
}
+
private handleUserResponseArraySuccess(response: BogenligaResponse): void {
this.allUsers = [];
this.allUsers = response.payload;
@@ -473,11 +526,27 @@ export class VeranstaltungDetailComponent extends CommonComponentDirective imple
this.loading = false;
}
+
private handleUserResponseArrayFailure(response: BogenligaResponse): void {
this.allUsers = [];
this.loading = false;
}
+
+ private handleLigaleiterResponseArraySuccess(response: BogenligaResponse): void {
+ this.allLigaleiter = [];
+ this.allLigaleiter = response.payload;
+
+ this.loading = false;
+ }
+
+
+ private handleLigaleiterResponseArrayFailure(response: BogenligaResponse): void {
+ this.allLigaleiter = [];
+ this.loading = false;
+ }
+
+
/**
* Checks if current Table is empty
* If not button which uses copyMannschaftFromVeranstaltung will be greyed out
@@ -490,17 +559,55 @@ export class VeranstaltungDetailComponent extends CommonComponentDirective imple
return empty;
}
+
private loadMannschaftsTable() {
this.mannschaftDataProvider.findAllByVeranstaltungsId(this.id)
.then((response: BogenligaResponse) => this.handleLoadMannschaftsTableSuccess(response.payload))
.catch((response: BogenligaResponse) => this.rows = []);
}
+
private handleLoadMannschaftsTableSuccess(payload: DsbMannschaftDO[]) {
this.rows = toTableRows(payload);
this.loadLigaTabelleExists();
}
+ public onDeleteMannschaft(versionedDataObject: VersionedDataObject): void {
+
+ this.notificationService.discardNotification();
+
+ const id = versionedDataObject.id;
+ this.rows = showDeleteLoadingIndicatorIcon(this.rows, id);
+
+ const notification: Notification = {
+ id: NOTIFICATION_DELETE_MANNSCHAFT + id,
+ title: 'MANAGEMENT.MANNSCHAFT_DETAIL.NOTIFICATION.DELETE.TITLE',
+ description: 'MANAGEMENT.MANNSCHAFT_DETAIL.NOTIFICATION.DELETE.DESCRIPTION',
+ descriptionParam: '' + id,
+ severity: NotificationSeverity.QUESTION,
+ origin: NotificationOrigin.USER,
+ type: NotificationType.YES_NO,
+ userAction: NotificationUserAction.PENDING
+ };
+
+ let notificationEvent = this.notificationService.observeNotification(NOTIFICATION_DELETE_MANNSCHAFT + id)
+ .subscribe((myNotification) => {
+
+ if (myNotification.userAction === NotificationUserAction.ACCEPTED) {
+ this.mannschaftDataProvider.deleteById(id)
+ .then((response) => this.loadMannschaftsTable())
+ .catch((response) => this.rows = hideLoadingIndicator(this.rows, id));
+ } else if (myNotification.userAction === NotificationUserAction.DECLINED) {
+ this.rows = hideLoadingIndicator(this.rows, id);
+ notificationEvent.unsubscribe();
+ }
+
+ });
+
+ this.notificationService.showNotification(notification);
+ }
+
+
public onEdit(versionedDataObject: VersionedDataObject) {
this.selectedMannschaft = versionedDataObject as DsbMannschaftDO;
@@ -508,11 +615,13 @@ export class VeranstaltungDetailComponent extends CommonComponentDirective imple
this.showPopup = true;
}
+
public onTableEditCancel( event: any) {
this.selectedMannschaft.sortierung = this.oldSortierung;
this.showPopup = false;
}
+
public onTableEditSave(event: any) {
const maSortierung = new MannschaftSortierungDO(
this.selectedMannschaft.id, this.selectedMannschaft.sortierung);
@@ -523,8 +632,8 @@ export class VeranstaltungDetailComponent extends CommonComponentDirective imple
this.loading = false;
}
- private handleTableSaveSuccess() {
+ private handleTableSaveSuccess() {
const notification: Notification = {
id: NOTIFICATION_SAVE_SORTIERUNG,
title: 'MANAGEMENT.VERANSTALTUNG_DETAIL.TABLE.NOTIFICATION.SAVE.TITLE',
@@ -552,22 +661,26 @@ export class VeranstaltungDetailComponent extends CommonComponentDirective imple
this.loadMannschaftsTable();
}
+
public checkForExistingLigatabelle(): boolean {
return this.currentLigatabelle !== undefined;
}
+
private loadLigaTabelleExists() {
this.ligatabellenService.getLigatabelleVeranstaltung(this.id)
.then((response: BogenligaResponse) => response.payload.length >= 4 ? this.handleLigatabelleExistsSuccess(response) : this.handleLigatabelleExistsFailure())
.catch(() => this.handleLigatabelleExistsFailure())
}
+
private handleLigatabelleExistsFailure() {
console.log("Initiale Ligatabelle does not yet exist");
this.currentLigatabelle = undefined;
this.saveLoading = false;
}
+
private handleLigatabelleExistsSuccess(response: BogenligaResponse) {
try {
this.currentLigatabelle = response.payload;
@@ -582,12 +695,14 @@ export class VeranstaltungDetailComponent extends CommonComponentDirective imple
}
}
+
public createMatchesWT0(event: any) {
this.matchDataProvider.createInitialMatchesWT0(this.currentVeranstaltung)
.then(() => this.handleCreateMatchesWT0Success())
.catch(() => this.handleCreateMatchesWT0Failure());
}
+
private handleCreateMatchesWT0Success() {
const notification: Notification = {
id: NOTIFICATION_INIT_LIGATABELLE_SUC,
@@ -610,6 +725,7 @@ export class VeranstaltungDetailComponent extends CommonComponentDirective imple
this.loadLigaTabelleExists();
}
+
private handleCreateMatchesWT0Failure() {
const notification: Notification = {
id: NOTIFICATION_INIT_LIGATABELLE_FAIL,
diff --git a/bogenliga/src/app/modules/verwaltung/components/veranstaltung/veranstaltung-detail/wettkampftage/wettkampftage.component.html b/bogenliga/src/app/modules/verwaltung/components/veranstaltung/veranstaltung-detail/wettkampftage/wettkampftage.component.html
index a3f35249c..2cda8ff54 100644
--- a/bogenliga/src/app/modules/verwaltung/components/veranstaltung/veranstaltung-detail/wettkampftage/wettkampftage.component.html
+++ b/bogenliga/src/app/modules/verwaltung/components/veranstaltung/veranstaltung-detail/wettkampftage/wettkampftage.component.html
@@ -37,10 +37,20 @@
[optionFieldSelector]="'wettkampfTag'">
-
+