ticketStatuses() ->with('boardColumn') ->findOrFail($ticketStatusId); $ticket->loadMissing('ticketStatus.boardColumn'); $originStatusId = $ticket->ticket_status_id; $originLabel = $this->statusLabel($ticket->ticketStatus); $destinationLabel = $this->statusLabel($destinationStatus); if ($ticket->ticket_status_id === $ticketStatusId) { return [ 'destination_label' => $destinationLabel, 'moved' => false, ]; } $ticket->update([ 'ticket_status_id' => $destinationStatus->id, ]); $this->createTicketWorklogEntry->handle( $ticket->fresh(), $user, TicketWorklogEntryType::StatusChanged, "Moved from {$originLabel} to {$destinationLabel}.", [ 'from' => [ 'label' => $originLabel, 'ticket_status_id' => $originStatusId, ], 'to' => [ 'label' => $destinationLabel, 'ticket_status_id' => $destinationStatus->id, ], ], ); return [ 'destination_label' => $destinationLabel, 'moved' => true, ]; } private function statusLabel(?TicketStatus $ticketStatus): string { if ($ticketStatus === null) { return 'Unknown status'; } if ($ticketStatus->boardColumn === null) { return $ticketStatus->name; } if ($ticketStatus->boardColumn->name === $ticketStatus->name) { return $ticketStatus->name; } return "{$ticketStatus->boardColumn->name} / {$ticketStatus->name}"; } }