Fix: ignore all-day events in conflict detection
parent
7bab29b5eb
commit
ee63529289
|
|
@ -225,8 +225,9 @@ class EventPlannerService
|
||||||
|
|
||||||
protected function hasConflict(string $userId, Carbon $start, Carbon $end): bool
|
protected function hasConflict(string $userId, Carbon $start, Carbon $end): bool
|
||||||
{
|
{
|
||||||
// 1. Eintägige Termine: einfacher Zeitüberlapp
|
// 1. Eintägige Termine: einfacher Zeitüberlapp (ganztägige ignorieren)
|
||||||
$singleDayConflict = Event::where('user_id', $userId)
|
$singleDayConflict = Event::where('user_id', $userId)
|
||||||
|
->where('is_all_day', false)
|
||||||
->whereRaw('DATE(starts_at) = DATE(ends_at)')
|
->whereRaw('DATE(starts_at) = DATE(ends_at)')
|
||||||
->where(function ($q) use ($start, $end) {
|
->where(function ($q) use ($start, $end) {
|
||||||
$q->where('starts_at', '<', $end)
|
$q->where('starts_at', '<', $end)
|
||||||
|
|
@ -244,15 +245,16 @@ class EventPlannerService
|
||||||
|
|
||||||
protected function hasMultiDayConflict(string $userId, Carbon $start, Carbon $end): bool
|
protected function hasMultiDayConflict(string $userId, Carbon $start, Carbon $end): bool
|
||||||
{
|
{
|
||||||
// Alle echten Mehrtagesevents deren Datumsbereich den neuen Termin überschneidet
|
// Alle echten Mehrtagesevents deren Datumsbereich den neuen Termin überschneidet (ganztägige ignorieren)
|
||||||
$candidates = Event::where('user_id', $userId)
|
$candidates = Event::where('user_id', $userId)
|
||||||
|
->where('is_all_day', false)
|
||||||
->whereRaw('DATE(starts_at) < DATE(ends_at)')
|
->whereRaw('DATE(starts_at) < DATE(ends_at)')
|
||||||
->whereRaw('DATE(starts_at) <= ?', [$end->toDateString()])
|
->whereRaw('DATE(starts_at) <= ?', [$end->toDateString()])
|
||||||
->whereRaw('DATE(ends_at) >= ?', [$start->toDateString()])
|
->whereRaw('DATE(ends_at) >= ?', [$start->toDateString()])
|
||||||
->get();
|
->get();
|
||||||
|
|
||||||
foreach ($candidates as $event) {
|
foreach ($candidates as $event) {
|
||||||
// Reine ganztägige Termine ohne spezifische Zeiten überspringen
|
// Reine ganztägige Termine ohne spezifische Zeiten überspringen (Fallback)
|
||||||
if ($event->starts_at->format('H:i') === '00:00'
|
if ($event->starts_at->format('H:i') === '00:00'
|
||||||
&& in_array($event->ends_at->format('H:i'), ['23:59', '00:00'])) {
|
&& in_array($event->ends_at->format('H:i'), ['23:59', '00:00'])) {
|
||||||
continue;
|
continue;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue