user()?->cannot('update', $ticket)) { throw new AuthorizationException; } $validated = $request->validate([ 'minutes' => ['required', 'integer', 'min:1', 'max:1440'], 'description' => ['nullable', 'string', 'max:1000'], ]); $minutes = (int) $validated['minutes']; $description = $validated['description'] ?? null; $loggedAt = now(); DB::transaction(function () use ($ticket, $request, $minutes, $description, $loggedAt): void { if (Schema::hasColumn($ticket->getTable(), 'time_spent_minutes')) { $ticket->increment('time_spent_minutes', $minutes, [ 'last_activity_at' => $loggedAt, ]); } elseif (Schema::hasColumn($ticket->getTable(), 'last_activity_at')) { $ticket->forceFill(['last_activity_at' => $loggedAt])->save(); } if (Schema::hasTable('helpdesk_time_logs')) { DB::table('helpdesk_time_logs')->insert([ 'ticket_id' => $ticket->getKey(), 'user_id' => $request->user()->getKey(), 'minutes' => $minutes, 'description' => $description, 'logged_at' => $loggedAt, 'created_at' => $loggedAt, 'updated_at' => $loggedAt, ]); } if (Schema::hasTable('helpdesk_ticket_time_logs')) { $payload = [ 'ticket_id' => $ticket->getKey(), 'user_id' => $request->user()->getKey(), 'minutes' => $minutes, 'description' => $description, 'created_at' => $loggedAt, 'updated_at' => $loggedAt, ]; if (Schema::hasColumn('helpdesk_ticket_time_logs', 'started_at')) { $payload['started_at'] = $loggedAt->copy()->subMinutes($minutes); } if (Schema::hasColumn('helpdesk_ticket_time_logs', 'ended_at')) { $payload['ended_at'] = $loggedAt; } if (Schema::hasColumn('helpdesk_ticket_time_logs', 'logged_at')) { $payload['logged_at'] = $loggedAt; } if (Schema::hasColumn('helpdesk_ticket_time_logs', 'duration_seconds')) { $payload['duration_seconds'] = $minutes * 60; } if (Schema::hasColumn('helpdesk_ticket_time_logs', 'seconds')) { $payload['seconds'] = $minutes * 60; } DB::table('helpdesk_ticket_time_logs')->insert($payload); } }); return redirect() ->route('helpdesk.tickets.show', $ticket) ->with('ticket-action-updated', 'Time logged successfully.'); } }