getMetapel(); $this->getMetaplim(); $this->getYedidimUsers(); $this->getQuickMessages(); abort_unless(self::shouldRegisterNavigation(), 403); // $this->getChats(); } public function twilioController(){ return new TwilioController; } public static function shouldRegisterNavigation(): bool{ $user = Auth::user(); return $user->hasRole('Yedidim_Metapel'); } public function getMetapel(){ $this->metapel = User::find(auth()->id()); } public function getMetaplim(){ $this->metaplim = User::role('Yedidim_Metapel')->get(); // dd($this->metaplim); } public function getYedidimUsers(){ $this->yedidimUsers = User::role('Yedidim_User')->get(); } public function getQuickMessages(){ $this->quickMessages = YedidimQuickMessage::all(); } public function updatedSelectedYedidimUserId(){ $this->getSelectedYedidimUserChats(); } public function getSelectedYedidimUserChats(){ if(!$this->selectedYedidimUserId) return; $this->selectedYedidimUser = User::with('yedidimUserChat', 'yedidimUserNotes')->find($this->selectedYedidimUserId); foreach ($this->selectedYedidimUser->yedidimUserChat as $chats) { if ($chats->seen != true) { $chats->seen = true; $chats->save(); } } // Notification::make()->title('New Message')->success()->send(); } public function updatedNewMessage(){ // $this->createChat(); } public function createChat(){ $this->validate(['newMessage' => 'required']); if(!$this->selectedYedidimUser) return; YedidimChat::create([ 'chat_user_id' => $this->selectedYedidimUser->id, 'from' => $this->metapel->id, 'to' => $this->selectedYedidimUser->id, 'message' => $this->newMessage, ]); if($this->selectedYedidimUser->is_whatsapp){ $this->twilioController()->sendWhats($this->selectedYedidimUser->phone, $this->newMessage); } // Enhanced ChatUpdated events with message data ChatUpdated::dispatch( $this->metapel->id, $this->newMessage, $this->metapel->id, ['id' => $this->metapel->id, 'name' => $this->metapel->name] ); ChatUpdated::dispatch( $this->selectedYedidimUser->id, $this->newMessage, $this->metapel->id, ['id' => $this->metapel->id, 'name' => $this->metapel->name] ); $this->reset('newMessage'); $this->getSelectedYedidimUserChats(); } public function sendQuickMessage($messageId){ $this->newMessage = YedidimQuickMessage::find($messageId)->body; $this->createChat(); $this->reset('showQuickMessageWindow'); ChatUpdated::dispatch( $this->metapel->id, $this->newMessage, $this->metapel->id, ['id' => $this->metapel->id, 'name' => $this->metapel->name] ); } public function sendTemplate() { $this->twilioController()->sendTemplate($this->selectedYedidimUser->phone); // Save context message in chat without sending via WhatsApp if($this->selectedYedidimUser) { YedidimChat::create([ 'chat_user_id' => $this->selectedYedidimUser->id, 'from' => $this->metapel->id, 'to' => $this->selectedYedidimUser->id, 'message' => '[Mensaje de plantilla enviado]', ]); $this->getSelectedYedidimUserChats(); } $this->reset('showQuickMessageWindow'); Notification::make() ->title('Mensaje de plantilla enviado') ->success() ->send(); ChatUpdated::dispatch( $this->metapel->id, '[Mensaje de plantilla enviado]', $this->metapel->id, ['id' => $this->metapel->id, 'name' => $this->metapel->name] ); } public function createNote(){ $this->validate(['newNote' => 'required']); if(!$this->selectedYedidimUser) return; YedidimUserNote::create([ 'metapel_id' => $this->metapel->id, 'user_id' => $this->selectedYedidimUser->id, 'note' => $this->newNote, ]); // Only send UI update events for notes, not message notifications ChatUpdated::dispatch($this->metapel->id); ChatUpdated::dispatch($this->selectedYedidimUser->id); $this->reset('newNote'); $this->getSelectedYedidimUserChats(); } public function markLastChatAsUnread($userId) { $user = User::find($userId); if ($user && $user->yedidimUserChat->isNotEmpty()) { $lastChat = $user->yedidimUserChat->last(); if ($lastChat && $lastChat->seen) { $lastChat->seen = false; $lastChat->save(); $this->getSelectedYedidimUserChats(); } } } public function loadMore() { $this->perPage += 50; } public function getFilteredUsersProperty() { try { $query = User::query() ->with(['yedidimUserChat' => function($query) { $query->latest()->limit(1); }]) ->where(function($query) { $query->where('metapel_id', $this->metapel->id) ->orWhereNull('metapel_id'); }); // Apply search filter if (!empty($this->search)) { $query->where(function($searchQuery) { $searchQuery->where('name', 'like', '%' . $this->search . '%') ->orWhere('id', 'like', '%' . $this->search . '%'); }); } return $query->orderBy('id', 'desc') ->limit(100) ->get(); } catch (\Exception $e) { // Log the error for debugging Log::error('Error fetching filtered users: ' . $e->getMessage()); return collect(); // Return an empty collection on error } } public function assignToMe($yedidimUserId) { $yedidimUser = User::find($yedidimUserId); if($yedidimUser){ $yedidimUser->metapel_id = $this->metapel->id; $yedidimUser->save(); Notification::make() ->title('Este usuario se le ha asignado un Metapel Privado') ->success() ->send(); } } public function doSearch() { $this->resetPage(); } }