@using OnProfNext.Client.Services @using OnProfNext.Shared.Models.DTOs @inject BookingApiService BookingService @inject IJSRuntime JSRuntime
Verfügbare Aufträge
@if (Orders == null || !Orders.Any()) {

Keine Aufträge verfügbar

} else { @foreach (var order in Orders) {
@order.Titel (@order.Auftragsnummer)
} }
Woche vom @CurrentWeekStart.ToString("dd.MM.yyyy") bis @CurrentWeekStart.AddDays(6).ToString("dd.MM.yyyy")
@foreach (var day in WeekDays) { } @for (int hour = 8; hour <= 18; hour++) { var localHour = hour; @foreach (var day in WeekDays) { var localDay = day; } }
Zeit @day.ToString("dd.MM") (@day.ToString("ddd"))
@GetHoursForDay(day) h
@localHour:00 @foreach (var booking in GetBookingsForSlot(localDay, localHour)) {
@booking.OrderTitle - @booking.Hours h
}
@code { [Parameter] public List? Bookings { get; set; } [Parameter] public List? Orders { get; set; } [Parameter] public EventCallback OnBookingCreated { get; set; } [Parameter] public EventCallback OnError { get; set; } private DateTime CurrentWeekStart = DateTime.Today.AddDays(-(int)DateTime.Today.DayOfWeek + 1); private List WeekDays => Enumerable.Range(0, 7).Select(d => CurrentWeekStart.AddDays(d)).ToList(); private int? draggedOrderId; private void PreviousWeek() { if (CurrentWeekStart.Year > DateTime.MinValue.Year) { CurrentWeekStart = CurrentWeekStart.AddDays(-7); StateHasChanged(); } } private void NextWeek() { if (CurrentWeekStart.Year < DateTime.MaxValue.Year) { CurrentWeekStart = CurrentWeekStart.AddDays(7); StateHasChanged(); } } private void StartDrag(int orderId) { draggedOrderId = orderId; Console.WriteLine($"Start drag for Order ID: {orderId}"); } private async Task AllowDrop() { await JSRuntime.InvokeVoidAsync("onProfNext.preventDefault"); } private async Task DropOnSlot(DateTime day, int hour) { if (draggedOrderId == null) return; var bookingDate = new DateTime(day.Year, day.Month, day.Day, hour, 0, 0, DateTimeKind.Local); Console.WriteLine($"Calculated booking date: {bookingDate.ToString("dd.MM.yyyy HH:mm")} (Kind: {bookingDate.Kind})"); var newBooking = new BookingCreateDto { OrderId = draggedOrderId.Value, Date = bookingDate, Hours = 1, MandantId = 1 }; Console.WriteLine($"Sending to API: Date={newBooking.Date.ToString("dd.MM.yyyy HH:mm")} (Kind: {newBooking.Date.Kind})"); try { var (success, error) = await BookingService.CreateBookingAsync(newBooking); if (success) { await OnBookingCreated.InvokeAsync(); Console.WriteLine("Booking created successfully."); } else { await OnError.InvokeAsync(error ?? "Fehler beim Erstellen der Buchung."); Console.WriteLine($"API error: {error}"); } } catch (Exception ex) { await OnError.InvokeAsync($"Fehler beim Erstellen der Buchung: {ex.Message}"); Console.WriteLine($"Exception in DropOnSlot: {ex.Message}"); } draggedOrderId = null; } private async Task DeleteBooking(int bookingId) { try { var (success, error) = await BookingService.DeleteBookingAsync(bookingId); if (success) { await OnBookingCreated.InvokeAsync(); Console.WriteLine("Booking deleted successfully."); } else { await OnError.InvokeAsync(error ?? "Fehler beim Löschen der Buchung."); Console.WriteLine($"API error: {error}"); } } catch (Exception ex) { await OnError.InvokeAsync($"Fehler beim Löschen der Buchung: {ex.Message}"); Console.WriteLine($"Exception in DeleteBooking: {ex.Message}"); } } private List GetBookingsForSlot(DateTime day, int hour) { var bookings = Bookings?.Where(b => b.Date.Date == day.Date && b.Date.Hour == hour).ToList() ?? new(); if (bookings.Any()) { Console.WriteLine($"Bookings for {day.ToString("dd.MM.yyyy")} {hour}:00: {bookings.Count}"); foreach (var booking in bookings) { Console.WriteLine($"Booking ID={booking.Id}, Date={booking.Date.ToString("dd.MM.yyyy HH:mm")}, Hours={booking.Hours}"); } } return bookings; } private bool IsWeekend(DateTime day) { return day.DayOfWeek == DayOfWeek.Saturday || day.DayOfWeek == DayOfWeek.Sunday; } private decimal GetHoursForDay(DateTime day) { var hours = Bookings?.Where(b => b.Date.Date == day.Date).Sum(b => b.Hours) ?? 0; if (hours > 0) { Console.WriteLine($"Hours for {day.ToString("dd.MM.yyyy")}: {hours}"); } return hours; } private string GetHoursColorClass(DateTime day) { var hours = GetHoursForDay(day); if (hours >= 8) return "text-success"; else if (hours > 6 && hours < 8) return "text-warning"; else return "text-danger"; } }