From 068fa9519cf7c0b39ae6bd3d495b2d651c90f300 Mon Sep 17 00:00:00 2001 From: Marcel Arndt Date: Thu, 12 Jun 2025 17:13:15 +0200 Subject: [PATCH] feat: show next tour start in ticket search --- .../tickets-search-dialog.component.ts | 105 ++++++++++-------- 1 file changed, 60 insertions(+), 45 deletions(-) diff --git a/service/app-hub/dashboard/src/app/pages/ticket-system/tickets-search-dialog/tickets-search-dialog.component.ts b/service/app-hub/dashboard/src/app/pages/ticket-system/tickets-search-dialog/tickets-search-dialog.component.ts index dfd1ce7..edad3a7 100644 --- a/service/app-hub/dashboard/src/app/pages/ticket-system/tickets-search-dialog/tickets-search-dialog.component.ts +++ b/service/app-hub/dashboard/src/app/pages/ticket-system/tickets-search-dialog/tickets-search-dialog.component.ts @@ -17,54 +17,51 @@ import { } from '../../../core/data-access/graphql/generated/generated'; import { TicketViewComponent } from '../ticket-view/ticket-view.component'; import { TicketsService } from '../tickets.service'; +import { format, isAfter } from 'date-fns'; @Component({ - template: `
-
Ticket suchen
-
- - Einsatznummer oder Patient - - -
-
- @for (ticket of tickets$ | async; track ticket) { -
-
- {{ ticket.tours.at(0)?.ordinanceType }} - @if (ticket.tours.at(0)?.category) { - - ({{ ticket.tours.at(0)?.category }}) - - } -
-
- - {{ ticket.tours.at(0)?.patientName }} - {{ ticket.tours.at(0)?.patientSurname }} - - - {{ ticket.tours.length }} Tour{{ - ticket.tours.length > 1 ? 'en' : '' - }} - -
-
- } + template: `
+
Ticket suchen
+
+ + Einsatznummer oder Patient + + +
+
+ @for (ticket of tickets$ | async; track ticket) { +
+
+ + {{ ticket.tours.at(0)?.ordinanceType }} + @if (ticket.tours.at(0)?.category) { + + ({{ ticket.tours.at(0)?.category }}) + + } + + +
+
+ + {{ ticket.tours.at(0)?.patientName }} + {{ ticket.tours.at(0)?.patientSurname }} + + + {{ getToursLength(ticket) }} Tour{{ + getToursLength(ticket) > 1 ? 'en' : '' + }} + +
-
`, - imports: [ - MatFormFieldModule, - MatInputModule, - ReactiveFormsModule, - AsyncPipe -], - changeDetection: ChangeDetectionStrategy.OnPush + } +
+
`, + imports: [MatFormFieldModule, MatInputModule, ReactiveFormsModule, AsyncPipe], + changeDetection: ChangeDetectionStrategy.OnPush, }) export class TicketsSearchDialogComponent { private ticketsService = inject(TicketsService); @@ -89,4 +86,22 @@ export class TicketsSearchDialogComponent { .pipe(tap((result) => result && this.showTicketView(result))) .subscribe(); } + + getToursLength(ticket: unknown) { + return (ticket as Ticket & { tours: Tour[] }).tours.filter( + ({ check }) => check === 0 + ).length; + } + + getNextStart(tours: Partial[]) { + const sortedStartDates = [...tours.map(({startDate}) => new Date(startDate))].sort((a, b) => a.getTime() - b.getTime()) + for(let i = 0; i < sortedStartDates.length; i++) { + const currentDate = sortedStartDates.at(i) + if(currentDate && isAfter(currentDate, new Date())) { + return format(currentDate, 'HH:mm | dd.MM.yy') + } + } + const latestDate = sortedStartDates.at(-1); + return latestDate ? format(latestDate, 'HH:mm | dd.MM.yy') : 'No Tours' + } }