feat: show next tour start in ticket search

This commit is contained in:
Marcel Arndt 2025-06-12 17:13:15 +02:00
parent b4854dff0f
commit 068fa9519c
1 changed files with 60 additions and 45 deletions

View File

@ -17,6 +17,7 @@ import {
} from '../../../core/data-access/graphql/generated/generated'; } from '../../../core/data-access/graphql/generated/generated';
import { TicketViewComponent } from '../ticket-view/ticket-view.component'; import { TicketViewComponent } from '../ticket-view/ticket-view.component';
import { TicketsService } from '../tickets.service'; import { TicketsService } from '../tickets.service';
import { format, isAfter } from 'date-fns';
@Component({ @Component({
template: `<div class="flex flex-col items-center justify-start p-4"> template: `<div class="flex flex-col items-center justify-start p-4">
@ -33,15 +34,16 @@ import { TicketsService } from '../tickets.service';
class="flex flex-col justify-between items-center py-2 border-b border-gray-200 cursor-pointer" class="flex flex-col justify-between items-center py-2 border-b border-gray-200 cursor-pointer"
(click)="showTicketView(ticket)" (click)="showTicketView(ticket)"
> >
<div class="w-full"> <div class="w-full flex justify-between">
<span>
{{ ticket.tours.at(0)?.ordinanceType }} {{ ticket.tours.at(0)?.ordinanceType }}
@if (ticket.tours.at(0)?.category) { @if (ticket.tours.at(0)?.category) {
<span <span class="text-sm text-gray-600">
class="text-sm text-gray-600"
>
({{ ticket.tours.at(0)?.category }}) ({{ ticket.tours.at(0)?.category }})
</span> </span>
} }
</span>
<!-- <span class="text-sm text-gray-600">{{ getNextStart(ticket.tours) }}</span> -->
</div> </div>
<div class="w-full flex justify-between"> <div class="w-full flex justify-between">
<span> <span>
@ -49,8 +51,8 @@ import { TicketsService } from '../tickets.service';
{{ ticket.tours.at(0)?.patientSurname }} {{ ticket.tours.at(0)?.patientSurname }}
</span> </span>
<span> <span>
{{ ticket.tours.length }} Tour{{ {{ getToursLength(ticket) }} Tour{{
ticket.tours.length > 1 ? 'en' : '' getToursLength(ticket) > 1 ? 'en' : ''
}} }}
</span> </span>
</div> </div>
@ -58,13 +60,8 @@ import { TicketsService } from '../tickets.service';
} }
</div> </div>
</div>`, </div>`,
imports: [ imports: [MatFormFieldModule, MatInputModule, ReactiveFormsModule, AsyncPipe],
MatFormFieldModule, changeDetection: ChangeDetectionStrategy.OnPush,
MatInputModule,
ReactiveFormsModule,
AsyncPipe
],
changeDetection: ChangeDetectionStrategy.OnPush
}) })
export class TicketsSearchDialogComponent { export class TicketsSearchDialogComponent {
private ticketsService = inject(TicketsService); private ticketsService = inject(TicketsService);
@ -89,4 +86,22 @@ export class TicketsSearchDialogComponent {
.pipe(tap((result) => result && this.showTicketView(result))) .pipe(tap((result) => result && this.showTicketView(result)))
.subscribe(); .subscribe();
} }
getToursLength(ticket: unknown) {
return (ticket as Ticket & { tours: Tour[] }).tours.filter(
({ check }) => check === 0
).length;
}
getNextStart(tours: Partial<Tour>[]) {
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'
}
} }