workstation = $workstation; //verificar se nao o motivo de receber os valores antigos do ws ao entrar em outro. $workstation = $this->workstation; // Atribuindo a uma variável local para uso na closure //recebe todos os equipamentos do projecto atual $this->receiveAllEquipments = Equipment::join('equipment_work_historys', function ($join) use ($workstation) { $join->on('equipments.equipment_id', '=', 'equipment_work_historys.equipment_id') ->where('equipment_work_historys.company_projects_id', '=', $workstation->company_projects_id); }) ->join('equipment_association_ambits', 'equipment_work_historys.equipmentWorkHistorys_id', '=', 'equipment_association_ambits.equipmentWorkHistorys_id') ->select('equipments.equipment_id','equipment_work_historys.equipmentWorkHistorys_id','equipment_work_historys.company_projects_id', 'equipments.equipment_type_id', 'equipment_association_ambits.ambits_id',) ->get() ->toArray(); // $this->receiveAllFurtherTasks = ElementalTasks::where('company_projects_id', $this->workstation->company_projects_id)->get(); // Inicializar a matriz $this->receiveElementalTasks = [ 'geral' => [], '1' => [], '2' => [], '3' => [] ]; // Coletar todos os elemental_tasks_id para cada equipment_type_id foreach ($this->receiveAllEquipments as $equipment) { //Esta parte esta errada, nao esta indo pela tarefas do equipamento e sim pelos padrao ao selecionar um ambito. // $elementalTasksIds = TasksAssociationAmbits::where('ambits_equipment_id', $equipment['ambits_id']) // ->pluck('elemental_tasks_id') // ->toArray(); $elementalTasksIds = OrderEquipmentTasks::where('equipmentWorkHistorys_id',$equipment['equipmentWorkHistorys_id']) ->orderBy('elemental_tasks_id', 'asc') ->pluck('elemental_tasks_id') ->toArray(); // Inicializar cada ID como uma chave com um array vazio como valor foreach ($elementalTasksIds as $id) { $this->receiveElementalTasks[$equipment['equipment_type_id']][$id] = []; } } // Mover elemental_tasks_id que aparecem em mais de um equipment_type_id para 'geral' foreach ($this->receiveElementalTasks as $key1 => $values1) { foreach ($this->receiveElementalTasks as $key2 => $values2) { if ($key1 !== $key2 && $key1 !== 'geral' && $key2 !== 'geral') { $commonValues = array_intersect_key($values1, $values2); if (!empty($commonValues)) { foreach ($commonValues as $value => $emptyArray) { $this->receiveElementalTasks['geral'][$value] = []; unset($this->receiveElementalTasks[$key1][$value]); unset($this->receiveElementalTasks[$key2][$value]); } } } } } // Iterar sobre $receiveElementalTasks foreach ($this->receiveElementalTasks as $key => $ids) { // Para cada ID em uma chave específica, buscar os detalhes na tabela ElementalTasks $details = ElementalTasks::whereIn('elemental_tasks_id', array_keys($ids)) ->select(['elemental_tasks_id', 'elemental_tasks_code', 'elemental_tasks_description']) ->get() ->toArray(); // Atualizar o array $receiveElementalTasks com os detalhes foreach ($details as $detail) { $this->receiveElementalTasks[$key][$detail['elemental_tasks_id']] = [ 'code' => $detail['elemental_tasks_code'], 'description' => $detail['elemental_tasks_description'] ]; } } // Armazenar os dados na sessão session([ 'receiveAllFurtherTasks' => $this->receiveAllFurtherTasks, 'receiveElementalTasks' => $this->receiveElementalTasks, ]); $receiveTasksRepository = app(ReceiveTasksRepository::class); // Chama a variavel do Repositorio para amazenar a variavel e depois conseguir chamar facilmente. $receiveTasksRepository->setElementalTasks($this->receiveElementalTasks); // $receiveTasksRepository->setFurtherTasks($this->receiveAllFurtherTasks); } public function render() { return view('livewire.articulado.select-elemental-tasks-in-wonkstation'); } }