199 lines
7.1 KiB
HTML
199 lines
7.1 KiB
HTML
<div>
|
|
<h1>Mitglieder & Sportlerübersicht</h1>
|
|
</div>
|
|
<div>
|
|
<button
|
|
matButton="filled"
|
|
class="primary-btn .no-print"
|
|
(click)="newMember()">
|
|
Neues Mitglied
|
|
</button>
|
|
<button
|
|
matButton="filled"
|
|
class="secondary-btn .no-print"
|
|
(click)="print()">
|
|
Drucken
|
|
</button>
|
|
</div>
|
|
<div class="filter-container .no-print">
|
|
<mat-form-field>
|
|
<label>Filter:</label>
|
|
<input
|
|
matInput
|
|
[formField]="filterForm.filterString"
|
|
placeholder="Filter" />
|
|
</mat-form-field>
|
|
<div class="status-filters">
|
|
<mat-radio-group [formField]="filterForm.status">
|
|
<mat-radio-button [value]="MemberStatusFilter.ACTIVE"
|
|
>Aktiv zum</mat-radio-button
|
|
>
|
|
<mat-radio-button [value]="MemberStatusFilter.INACTIVE"
|
|
>Gekündigt seit</mat-radio-button
|
|
>
|
|
<mat-radio-button [value]="MemberStatusFilter.ALL"
|
|
>Alle</mat-radio-button
|
|
>
|
|
</mat-radio-group>
|
|
<mat-form-field
|
|
matTooltip="Zeigt nur Mitglieder, die zum angegebenen Datum den ausgewählten status hatten"
|
|
matTooltipPosition="above">
|
|
<label>Zum Datum:</label>
|
|
<input
|
|
matInput
|
|
[matDatepicker]="picker"
|
|
[formField]="filterForm.statusDate"
|
|
placeholder="Aktiv bis" />
|
|
<mat-hint>DD.MM.YYYY</mat-hint>
|
|
<mat-datepicker-toggle
|
|
matIconSuffix
|
|
[disabled]="statusDateDisabled()"
|
|
[for]="picker"></mat-datepicker-toggle>
|
|
<mat-datepicker #picker></mat-datepicker>
|
|
</mat-form-field>
|
|
</div>
|
|
<mat-checkbox [formField]="filterForm.onlyWithID"
|
|
>Nur mit Passnummer</mat-checkbox
|
|
>
|
|
</div>
|
|
<div class="table-container">
|
|
<table
|
|
mat-table
|
|
[dataSource]="dataSource"
|
|
class="member-table"
|
|
matSort
|
|
matSortActive="vorname"
|
|
matSortDirection="asc"
|
|
matSortDisableClear>
|
|
<ng-container matColumnDef="edit">
|
|
<th mat-header-cell *matHeaderCellDef>Bearb.</th>
|
|
<td mat-cell *matCellDef="let element">
|
|
<button
|
|
mat-mini-fab-button
|
|
(click)="editMember(element.id)"
|
|
aria-label="Edit Member">
|
|
<mat-icon fontIcon="edit"></mat-icon>
|
|
</button>
|
|
</td>
|
|
</ng-container>
|
|
|
|
<ng-container matColumnDef="index" sticky>
|
|
<th mat-header-cell *matHeaderCellDef>Nr.</th>
|
|
<td mat-cell *matCellDef="let element; let i=index">{{i+1}}</td>
|
|
</ng-container>
|
|
|
|
<ng-container matColumnDef="vorname">
|
|
<th mat-header-cell mat-sort-header *matHeaderCellDef>Vorname</th>
|
|
<td mat-cell *matCellDef="let element">
|
|
<span [innerHTML]="element.vorname | stylizeNames"></span>
|
|
</td>
|
|
</ng-container>
|
|
<ng-container matColumnDef="nachname">
|
|
<th mat-header-cell mat-sort-header *matHeaderCellDef>Nachname</th>
|
|
<td mat-cell *matCellDef="let element">
|
|
<span [innerHTML]="element.nachname | stylizeNames"></span>
|
|
</td>
|
|
</ng-container>
|
|
<ng-container matColumnDef="geschlecht">
|
|
<th mat-header-cell mat-sort-header *matHeaderCellDef>
|
|
Geschlecht
|
|
</th>
|
|
<td mat-cell *matCellDef="let element">{{ element.geschlecht }}</td>
|
|
</ng-container>
|
|
<ng-container matColumnDef="passnummer">
|
|
<th mat-header-cell mat-sort-header *matHeaderCellDef>
|
|
Passnummer
|
|
</th>
|
|
<td mat-cell *matCellDef="let element">
|
|
{{ element.passnummer | nobreakHyphen }}
|
|
</td>
|
|
</ng-container>
|
|
<ng-container matColumnDef="geburtsdatum">
|
|
<th mat-header-cell mat-sort-header *matHeaderCellDef>
|
|
Geburtsdatum Geboren am
|
|
</th>
|
|
<td mat-cell *matCellDef="let element">
|
|
{{ element.geburtsdatum | datePipe }}
|
|
</td>
|
|
</ng-container>
|
|
<ng-container matColumnDef="geburtsort">
|
|
<th mat-header-cell mat-sort-header *matHeaderCellDef>
|
|
Geburtsort
|
|
</th>
|
|
<td mat-cell *matCellDef="let element">{{ element.geburtsort }}</td>
|
|
</ng-container>
|
|
<ng-container matColumnDef="verein">
|
|
<th mat-header-cell mat-sort-header *matHeaderCellDef>Verein?</th>
|
|
<td mat-cell *matCellDef="let element">
|
|
@if(element.verein){
|
|
<mat-icon
|
|
class="positive"
|
|
aria-label="Verein Check"
|
|
fontIcon="check"></mat-icon>
|
|
}@else {
|
|
|
|
<mat-icon
|
|
class="negative"
|
|
aria-label="Verein Cross"
|
|
fontIcon="close"></mat-icon>
|
|
}
|
|
</td>
|
|
</ng-container>
|
|
|
|
<ng-container matColumnDef="kontakt">
|
|
<th mat-header-cell *matHeaderCellDef>Kontakt</th>
|
|
<td mat-cell *matCellDef="let element">{{ element.kontakt }}</td>
|
|
</ng-container>
|
|
|
|
<ng-container matColumnDef="kuendigungzum">
|
|
<th mat-header-cell mat-sort-header *matHeaderCellDef>
|
|
Kündigung
|
|
</th>
|
|
<td mat-cell *matCellDef="let element">
|
|
{{ (element.kuendigungzum | datePipe) ?? "-" }}
|
|
</td>
|
|
</ng-container>
|
|
<ng-container matColumnDef="creationDate">
|
|
<th mat-header-cell mat-sort-header *matHeaderCellDef>Beitritt</th>
|
|
<td mat-cell *matCellDef="let element">
|
|
{{ element.creationDate | datePipe }}
|
|
</td>
|
|
</ng-container>
|
|
|
|
<ng-container matColumnDef="delete">
|
|
<th mat-header-cell *matHeaderCellDef>Entf.</th>
|
|
<td mat-cell *matCellDef="let element">
|
|
<button
|
|
mat-mini-fab-button
|
|
(click)="deleteMember(element.id)"
|
|
aria-label="Delete Member">
|
|
<mat-icon fontIcon="delete"></mat-icon>
|
|
</button>
|
|
</td>
|
|
</ng-container>
|
|
|
|
<ng-container matColumnDef="totalCount">
|
|
<td
|
|
colspan="100%"
|
|
mat-footer-cell
|
|
*matFooterCellDef
|
|
class="footer-entry">
|
|
Zeige {{dataSource.filteredData.length}} von
|
|
{{dataSource.data.length}} Mitgliedern
|
|
@if(dataSource.filteredData.length !== dataSource.data.length)
|
|
{(gefiltert) }
|
|
</td>
|
|
</ng-container>
|
|
|
|
<tr
|
|
mat-header-row
|
|
*matHeaderRowDef="displayedColumns; sticky: true"></tr>
|
|
<tr
|
|
mat-row
|
|
*matRowDef="let row; columns: displayedColumns"
|
|
class="table-row"
|
|
[class.expired]="isInPast(row.kuendigungzum)"></tr>
|
|
<tr mat-footer-row *matFooterRowDef="['totalCount']; sticky: true"></tr>
|
|
</table>
|
|
</div>
|