get('clientId'); // Recebe as plants com base no USer $allPlantsClient = Plant::where('user_id', $clientId)->get(); // Extrai os plant_id da coleção $recevePlantClient $plantsIds = $allPlantsClient->pluck('plant_id'); // Busca todas as fabricas referente a plantas recebidas, guardamos o id de cada fabrica em $unitsIds $allUnitsClient = Unit::whereIn('plant_id', $plantsIds)->get(); $unitsIds = $allUnitsClient->pluck('unit_id'); $receiveAllPlants = $request->get('receiveAllPlants'); $receiveAllUnits = $request->get('receiveAllUnits'); $receiveEquipmentsType = $request->get('receiveEquipmentsType'); $query = Equipment::with('equipmentType', 'unit') ->whereIn('unit_id', $unitsIds) ->select(['equipment_id', 'ispt_number', 'equipment_tag', 'unit_id', 'equipment_type_id']); //Filtar equipamentos por uma instalacao especifica. if ($receiveAllPlants && $receiveAllPlants !== '#') { $query->whereHas('unit', function ($query) use ($receiveAllPlants) { $query->where('plant_id', $receiveAllPlants); }); } if ($receiveAllUnits && $receiveAllUnits !== '#') { $query->where('unit_id', $receiveAllUnits); } if ($receiveEquipmentsType && $receiveEquipmentsType !== '#') { $query->where('equipment_type_id', $receiveEquipmentsType); } return DataTables::of($query)->make(true); } public function getDataEquipment(Request $request) { // pode receber um request ou nao, depende de onde for chamado. (Tabela de equipamentos associada a uma Obra) $numberProject = $request->get('numberProject'); // pode receber um request ou nao, depende de onde for chamado. (Utilizadores 'Cliente') $clientId = $request->get('clientId'); $checkUnits = $request->get('checkUnits'); $tipo_valvulasList = $request->get('tipo_valvulasList'); $receiveAllClients = $request->get('receiveAllClients'); $receiveAllPlants = $request->get('receiveAllPlants'); $receiveAllUnits = $request->get('receiveAllUnits'); $receiveEquipmentsType = $request->get('receiveEquipmentsType'); if ($clientId) { // Recebe as plants com base no USer $allPlantsClient = Plant::where('user_id', $clientId)->get(); // Extrai os plant_id da coleção $recevePlantClient $plantsIds = $allPlantsClient->pluck('plant_id'); // Busca todas as fabricas referente a plantas recebidas, guardamos o id de cada fabrica em $unitsIds $allUnitsClient = Unit::whereIn('plant_id', $plantsIds)->get(); $unitsIds = $allUnitsClient->pluck('unit_id'); $receiveAllPlants = $request->get('receiveAllPlants'); $receiveAllUnits = $request->get('receiveAllUnits'); $receiveEquipmentsType = $request->get('receiveEquipmentsType'); // $query = Equipment::with('equipmentType', 'unit') // ->whereIn('unit_id', $unitsIds) // ->select(['equipment_id', 'equipment_tag', 'unit_id', 'equipment_type_id', 'equipment_description']); $query = Equipment::with([ 'equipmentType', 'unit', 'equipmentWorkHistory' => function ($query) use ($numberProject) { $query->where('company_projects_id', $numberProject)->orderBy('created_at', 'desc'); } ]) ->whereIn('unit_id', $unitsIds) ->select(['equipment_id', 'equipment_tag', 'unit_id', 'equipment_type_id', 'equipment_description']); } else { // Query padrão que todas as dataTables recebem, a partir dele fazemos os filt $query = Equipment::with('equipmentType', 'unit') ->select(['equipment_id', 'equipment_tag', 'unit_id', 'equipment_type_id', 'equipment_description']); } // Consultas para a Criacao da Obra, Ambas vao ser diferentes, pois na creacao, recebes os equipamentos por obra, porem no portifolio vamos buscar todos. if ($numberProject) { $query->where('company_projects_id', $numberProject); if ($checkUnits && $checkUnits !== '#') { $query->where('unit_id', $checkUnits); } if ($tipo_valvulasList && $tipo_valvulasList !== '#') { $query->where('equipment_type_id', $tipo_valvulasList); } } // Consultas para utilizadores do perfil Cliente if ($clientId) { } //Filtar equipamentos por um cliente especifico. if ($receiveAllClients && $receiveAllClients !== '#') { // Filtra os equipamentos cujas unidades estão associadas às plantas do usuário especificado $query->whereHas('unit.plant', function ($query) use ($receiveAllClients) { $query->where('user_id', $receiveAllClients); }); } //Filtar equipamentos por uma instalacao especifica. if ($receiveAllPlants && $receiveAllPlants !== '#') { $query->whereHas('unit', function ($query) use ($receiveAllPlants) { $query->where('plant_id', $receiveAllPlants); }); } if ($receiveAllUnits && $receiveAllUnits !== '#') { $query->where('unit_id', $receiveAllUnits); } if ($receiveEquipmentsType && $receiveEquipmentsType !== '#') { $query->where('equipment_type_id', $receiveEquipmentsType); } // Executa a consulta e obtém os resultados $equipment = $query->get(); return DataTables::of($equipment) ->addColumn('ispt_number', function ($equipment) { // Assumindo que você quer o 'ispt_number' do primeiro 'EquipmentWorkHistory' que corresponde ao 'company_projects_id' $equipmentWorkHistory = $equipment->equipmentWorkHistory->first(); return $equipmentWorkHistory ? $equipmentWorkHistory->ispt_number : 'N/A'; }) ->addColumn('unit_name', function ($equipment) { // Retorna 'unit_name' do relacionamento 'unit' return $equipment->unit ? $equipment->unit->unit_name : 'N/A'; }) ->addColumn('equipment_type_name', function ($equipment) { // Retorna 'equipment_type_name' do relacionamento 'equipmentType' return $equipment->equipmentType ? $equipment->equipmentType->equipment_type_name : 'N/A'; }) ->addColumn('ambit', function ($equipment) { $firstEquipmentWorkHistory = $equipment->equipmentWorkHistory->first(); return $firstEquipmentWorkHistory->equipmentAssociationAmbit->ambitsEquipment->ambits_description; }) ->addColumn('action', function ($equipment) use ($numberProject) { $dropdownHtml = '