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', 'equipmentWorkHistory', 'equipmentAssociationAmbit', 'ambitsEquipment') ->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) { //Variaveis recebidos da Obra em Planeamento (Filtros) $numberProject = $request->get('numberProject'); $receiveRespostUnitsSelect = $request->get('checkUnits'); // Tanto para em Planeamento como gestor de Ativos. $receiveTypeValveSelected = $request->get('tipo_valvulasList'); // Variaveis recebidas da gestao de ativos (Filtros) $receiveAllClients = $request->get('receiveAllClients'); $receiveAllPlants = $request->get('receiveAllPlants'); $receiveAllUnits = $request->get('receiveAllUnits'); $receiveEquipmentsType = $request->get('receiveEquipmentsType'); // Se receber o numero do projecto. /Se existir if ($numberProject) { //Se vier da Pagina extra = 2 if ($request->get('typePage') == 2) { // Query para DataTables do Planeamento 'Extra' $query = Equipment::with([ 'equipmentType', 'unit', 'equipmentWorkHistory' => function ($query) { //Assim a tabela recebe os equipamentos normais e extras e evita devolver equipamentos ja finalizados $query->whereIn('extra_equipment', [0, 1]); } ]) ->where('company_projects_id', $numberProject) ->whereHas('equipmentWorkHistory', function ($query) { $query->whereIn('extra_equipment', [0, 1]); }) ->select(['equipment_id', 'equipment_tag', 'unit_id', 'equipment_type_id', 'equipment_description']); } else { //Query para a Pagina 'Normal' // Query para DataTables do Planeamento 'Normal' $query = Equipment::with('equipmentType', 'unit', 'equipmentWorkHistory') ->where('company_projects_id', $numberProject) ->select(['equipment_id', 'equipment_tag', 'unit_id', 'equipment_type_id', 'equipment_description']); } if ($receiveRespostUnitsSelect && $receiveRespostUnitsSelect !== '#') { $query->where('unit_id', $receiveRespostUnitsSelect); } if ($receiveTypeValveSelected && $receiveTypeValveSelected !== '#') { $query->where('equipment_type_id', $receiveTypeValveSelected); } // 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 = ''; // Fecha as tags do dropdown return $dropdownHtml; }) ->make(true); } 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']); //Tratamento para o portifólio do Cliente. if ($request->get('clientId')) { $company = $request->get('clientId'); $query->whereHas('unit.plant', function ($query) use ($company) { $query->where('company_id', $company); }); } //Filtar equipamentos por um cliente . 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('company_id', $receiveAllClients); }); } //Filtar equipamentos por uma instalacao . if ($receiveAllPlants && $receiveAllPlants !== '#') { $query->whereHas('unit', function ($query) use ($receiveAllPlants) { $query->where('plant_id', $receiveAllPlants); }); } //Filtrar por Uma fabrica if ($receiveAllUnits && $receiveAllUnits !== '#') { $query->where('unit_id', $receiveAllUnits); } //Filtrar por tipo de equipamento 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('client_name', function ($equipment) { return $equipment->unit->plant->company ? $equipment->unit->plant->company->company_name : 'N/A'; }) ->addColumn('plant_name', function ($equipment) { return $equipment->unit->plant ? $equipment->unit->plant->plant_name : '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('action', function ($equipment) use ($numberProject) { $dropdownHtml = ''; // Fecha as tags do dropdown return $dropdownHtml; }) ->make(true); } } public function getDetailsEquipmentQrcode(Request $request) { // Filtros de pesquisa $equipmentTypeSelected = $request->get('equipmentTypeSelected'); $unitSelected = $request->get('unitSelected'); // Recebe o Id do projecto atual $receiveNumberProject = $request->get('receiveNumberProject'); $initialQuery = Equipment::where('company_projects_id', $receiveNumberProject); //Filtrar por tipo de equipamento if ($equipmentTypeSelected && $equipmentTypeSelected !== '#') { $initialQuery->where('equipment_type_id', $equipmentTypeSelected); } //Filtrar por Uma fabrica if ($unitSelected && $unitSelected !== '#') { $initialQuery->where('unit_id', $unitSelected); } $query = $initialQuery->get(); return DataTables::of($query) ->addColumn('ispt_number', function ($query) { // Assumindo que você quer o 'ispt_number' do primeiro 'EquipmentWorkHistory' que corresponde ao 'company_projects_id' $equipmentWorkHistory = $query->equipmentWorkHistory->first(); return $equipmentWorkHistory ? $equipmentWorkHistory->ispt_number : 'N/A'; }) ->addColumn('equipment_type_name', function ($query) { // Retorna 'equipment_type_name' do relacionamento 'equipmentType' return $query->equipmentType ? $query->equipmentType->equipment_type_name : 'N/A'; }) ->addColumn('unit_name', function ($query) { // Retorna 'unit_name' do relacionamento 'unit' return $query->unit ? $query->unit->unit_name : 'N/A'; }) ->addColumn('ambit_name', function ($query) { $firstEquipmentWorkHistory = $query->equipmentWorkHistory->first(); return $firstEquipmentWorkHistory->equipmentAssociationAmbit->ambitsEquipment->ambits_description; }) // ->addColumn('action', function ($equipment) use ($receiveNumberProject) { // $pdfUrl = route('showDetailsEquipmentForQrCode', ['equipmentId' => $equipment->equipment_id, 'projectId' => $receiveNumberProject]); // // Retorna apenas a ação para visualizar o PDF // $dropdownHtml = ' // // QR Code // '; // return $dropdownHtml; // }) ->addColumn('action', function ($equipment) use ($receiveNumberProject) { $pdfUrl = route('showDetailsEquipmentForQrCode', [ 'equipmentId' => $equipment->equipment_id, 'projectId' => $receiveNumberProject ]); $detailsUrl = !is_null($receiveNumberProject) ? route('projectDetails_11', ['projectID' => $receiveNumberProject, 'equipmentID' => $equipment->equipment_id]) : route('articulated_22', ['equipmentID' => $equipment->equipment_id]); // Criando dropdown com botões $dropdownHtml = ''; // Fecha as tags do dropdown return $dropdownHtml; }) ->make(true); } public function getDataEquipment1(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($query) ->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 = ''; // Fecha as tags do dropdown return $dropdownHtml; }) ->editColumn('unit_id', function ($equipment) { // Isto irá substituir 'unit_id' pelo 'unit_name' associado return $equipment->unit->unit_name ?? 'N/A'; }) ->editColumn('equipment_type_id', function ($equipment) { // Isto irá substituir 'equipment_type_id' pelo 'equipment_type_name' associado return $equipment->equipmentType->equipment_type_name ?? 'N/A'; }) ->rawColumns(['action']) ->make(true); } public function enterWorkstation() { return view('workstations/index'); } // public function receiveExecutionProject($ProjectId) // { // $DatasProject = CompanyProject::find($ProjectId); // $equipmentsTypes = EquipmentType::all(); // $receivePlant = Plant::where('plant_id', $DatasProject->plant_id)->first(); // $receiveCompany = Company::where('company_id', $receivePlant->company_id)->first(); // // Busca na model User // $filteredUsers = User::where('type_users', 5) // ->whereRaw("SUBSTRING_INDEX(user_name, '-', -1) = ?", [$DatasProject->company_projects_id]) // ->whereRaw("SUBSTRING_INDEX(SUBSTRING_INDEX(email, '@', 1), '-', 1) = ?", [$DatasProject->project_company_name]) // ->get(); // // Adicionando a nova coluna realPassword // $filteredUsers->map(function ($user) { // $user->realPassword = explode('@', $user->email)[0]; // return $user; // }); // $receiveDetailsWs = ConstructionWorkstation::where('name_workstations',$filteredUsers->user_name)->get(); // //Deve buscar o nome do posto de trabalho tambem. // // Retornando a view com os dados necessários // return view('projectsClients/executionProjectNew', [ // 'DatasProject' => $DatasProject, // 'equipmentsTypes' => $equipmentsTypes, // 'receiveCompany' => $receiveCompany, // 'filteredUsers' => $filteredUsers // ]); // } public function receiveExecutionProject($ProjectId) { $DatasProject = CompanyProject::find($ProjectId); $equipmentsTypes = EquipmentType::all(); $receivePlant = Plant::where('plant_id', $DatasProject->plant_id)->first(); $receiveCompany = Company::where('company_id', $receivePlant->company_id)->first(); // Busca na model User $filteredUsers = User::where('type_users', 5) ->whereRaw("SUBSTRING_INDEX(user_name, '-', -1) = ?", [$DatasProject->company_projects_id]) ->whereRaw("SUBSTRING_INDEX(SUBSTRING_INDEX(email, '@', 1), '-', 1) = ?", [$DatasProject->company_projects_id]) ->get(); // Adicionando a nova coluna realPassword $filteredUsers->map(function ($user) { $user->realPassword = explode('@', $user->email)[0]; return $user; }); // Busca todos os workstations relevantes $allWorkstations = ConstructionWorkstation::whereIn('name_workstations', $filteredUsers->pluck('user_name'))->get()->keyBy('name_workstations'); // dd($allWorkstations); // Adicionando a nomenclatura de workstation aos usuários filtrados $filteredUsers->map(function ($user) use ($allWorkstations) { if (isset($allWorkstations[$user->user_name])) { $user->nomenclature_workstation = $allWorkstations[$user->user_name]->nomenclature_workstation; } return $user; }); //Recebe todos os equipamentos apenas para verificar quantos ainda faltam para terminar a Obra. $receiveAllEquipments = Equipment::where('company_projects_id', $DatasProject->company_projects_id)->get(); $allEquipmentsFullyCompleted = $receiveAllEquipments->every(function ($equipment) { // Verifica se todos os registros dos Equipamntos têm equipment_status_project igual a 2 (TRUE /FALSE) return $equipment->equipmentWorkHistory->every(function ($workHistory) { return $workHistory->equipment_status_project == 2; }); }); // $allEquipmentsFullyCompleted será true se todos os equipamentos tiverem todos seus históricos com status 2 //Deve verificar se todos os equipamentos ja foram concluidos e se for o caso, deve alterar para Obra concluido, autorizar os relatorios e dessasociar todos os equipamento da Obra atual. if ($allEquipmentsFullyCompleted) { $DatasProject->order_project = 4; $DatasProject->end_date = now(); $DatasProject->save(); // Desassocia todos os equipamentos do projeto Equipment::where('company_projects_id', $DatasProject->company_projects_id) ->update(['company_projects_id' => null]); return redirect()->route('home'); } else { //Caso nem todos os equipamento tenham-se concluidos, deve voltar a pagina de execução normalmente // Retornando a view com os dados necessários return view('projectsClients/executionProjectNew', [ 'DatasProject' => $DatasProject, 'equipmentsTypes' => $equipmentsTypes, 'receiveCompany' => $receiveCompany, 'filteredUsers' => $filteredUsers ]); } } public function changeFromExecutionToPlanning($projectID) { $receiveDetailsProject = CompanyProject::where('company_projects_id', $projectID)->first(); if ($receiveDetailsProject) { $receiveDetailsProject->order_project = 5; // Alterar 5 seja 'Planeamento Extra' $receiveDetailsProject->save(); $typeEquipments = EquipmentType::all(); $listEquipmentsProjects = Equipment::with([ 'unit', 'equipmentType', // 'equipmentAssociationAmbit.ambitsEquipment', 'specificAttributes' => function ($query) { $query->orderBy('specific_attributes_value', 'asc'); } ]) ->where('company_projects_id', $receiveDetailsProject->company_projects_id) ->get(); //Retorna todas as Fabricas Unit, com base na Instalação $checkUnits = DB::table('units') ->join('plants', 'units.plant_id', '=', 'plants.plant_id') ->join('company_projects', 'plants.plant_id', '=', 'company_projects.plant_id') ->select('units.*') ->where('company_projects.company_projects_id', '=', $receiveDetailsProject->company_projects_id) ->get(); //Retorna todos os Equipamentos, com base na instalcao do projecto $checkEquipments = DB::table('equipments') ->join('units', 'equipments.unit_id', '=', 'units.unit_id') ->join('plants', 'units.plant_id', '=', 'plants.plant_id') ->select('equipments.*') // Seleciona todas as colunas da tabela 'equipments' ->where('plants.plant_id', '=', $receiveDetailsProject['plant_id']) // Filtra baseado no 'plant_id' ->get(); //Retorna todos os Equipamentos, com base na instalcao do projecto //Deve alterar para mostrar apenas os equipamentos criados como extras. $pendingEquipments = PendingEquipment::where('pending_company_projects_id', $receiveDetailsProject->company_projects_id)->get(); $receiveAllLogsProject = ProjectExcelLog::where('company_projects_id', $receiveDetailsProject->company_projects_id) ->get() ->groupBy('excel_name') ->map(function ($group) { return $group->sortByDesc('project_excel_logs_id')->first(); }); return view('projectsClients.articulated_2Extra') ->with('pendingEquipments', $pendingEquipments) ->with('receiveAllLogsProject', $receiveAllLogsProject) ->with('typeEquipments', $typeEquipments) ->with('checkEquipments', $checkEquipments) ->with('listEquipmentsProjects', $listEquipmentsProjects) ->with('checkUnits', $checkUnits) ->with('receiveDetailsProject', $receiveDetailsProject) ->with('success', 'O projeto foi alterado para Planeamento(Extra).'); } else { return back()->with('error', 'Projeto não encontrado.'); } } public function receiveWorkstationExecutionProject($receiveNumberProject) { $model = ConstructionWorkstation::where('company_projects_id', $receiveNumberProject)->with('workstationsAssociationTasks'); return DataTables::of($model) ->addColumn('workstations_Association_Tasks', function ($row) { return $row->workstationsAssociationTasks->map(function ($task) { return $task->elementalTask->elemental_tasks_code; })->implode('-'); }) ->toJson(); } public function receiveEquipmentIdForShowModal($EquipmentID) { // Recebe e encontra os dados do Equipamento indicada na Tabela. $equipment = Equipment::find($EquipmentID); // Recebe todas as tarefas e devolve em um Array $task_codes = $equipment->orderEquipmentTasks->map(function ($task) { return $task->elementalTask->elemental_tasks_code; })->toArray(); $receveControlEquipment = ControlEquipmentWorkstation::where('equipment_id', $EquipmentID)->get(); $receiveCommentsEquipment = EquipmentComments::where('equipment_id', $EquipmentID)->get(); // return view('projectsClients/executionProject',['receveControlEquipment'=>$receveControlEquipment]); return response()->json(['task_codes' => $task_codes, 'receveControlEquipment' => $receveControlEquipment, 'receiveCommentsEquipment' => $receiveCommentsEquipment]); } public function showQrcodesInProject($projectNumber) { $numberProject = CompanyProject::find($projectNumber); $equipmentsTypes = EquipmentType::all(); $plant = Plant::where('plant_id', $numberProject->plant_id)->first(); $unitsProject = Unit::where('plant_id', $plant->plant_id)->get(); // Carrega todos os equipamentos para um dado projeto $equipmentsProjects = Equipment::where('company_projects_id', $projectNumber)->get(); return view('projectsClients/showQrcodesInProject') ->with('numberProject', $numberProject) ->with('unitsProject', $unitsProject) ->with('equipmentsTypes', $equipmentsTypes) ->with('equipmentsProjects', $equipmentsProjects); } public function receiveDetailsEquipmentsProject(Request $request) { $numberProject = $request->input('receiveNumberProject'); $tableType = $request->input('tableType'); // Captura o tipo de tabela // query inicial dependendo se estamos buscando equipamentos pendentes ou normais. $initialQuery = Equipment::where('company_projects_id', $numberProject) ->whereHas('equipmentWorkHistory', function ($query) use ($tableType) { // Para a tabela 'pending' devem ir equipamentos com status = 1 ou 4 (por rever) pois estão pendentes para aprovação if ($tableType === 'pending') { $statuses = [1, 4]; // Equipamentos pendentes para aprovação $query->whereIn('equipment_status_project', $statuses); } // Para a tabela 'completed', apenas equipamentos concluídos e aprovados (status = 2) else if ($tableType === 'completed') { $status = 2; // Equipamentos concluídos e aprovados $query->where('equipment_status_project', $status); } // Para as tabelas 'start' e 'execution', primeiro filtramos equipamentos em andamento (status = 0) else if (in_array($tableType, ['start', 'execution'])) { $query->where('equipment_status_project', 0); } }); // lógica para 'start' e 'execution' diretamente com a relação entre equipmentWorkHistory e controlEquipmentWorkstation if ($tableType === 'start') { // Equipamentos que ainda não iniciaram (sem registros no ControlEquipmentWorkstation) $initialQuery->whereHas('equipmentWorkHistory', function ($query) { $query->whereDoesntHave('controlEquipmentWorkstation', function ($subQuery) { $subQuery->whereNotNull('equipmentWorkHistorys_id'); // Equipamentos que ainda não iniciaram }); }); } else if ($tableType === 'execution') { // Equipamentos já iniciados (com registros no ControlEquipmentWorkstation) $initialQuery->whereHas('equipmentWorkHistory', function ($query) { $query->whereHas('controlEquipmentWorkstation', function ($subQuery) { $subQuery->whereNotNull('equipmentWorkHistorys_id'); // Equipamentos que já iniciaram }); }); } $query = $initialQuery->get(); // Obtém a coleção de equipamentos com base nos critérios return DataTables::of($query) ->addColumn('ispt_number', function ($equipment) { $firstEquipmentWorkHistory = $equipment->equipmentWorkHistory->first(); return $firstEquipmentWorkHistory ? $firstEquipmentWorkHistory->ispt_number : '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('unit_name', function ($equipment) { // Retorna 'unit_name' do relacionamento 'unit' return $equipment->unit ? $equipment->unit->unit_name : 'N/A'; }) ->addColumn('ambit_name', function ($equipment) { $firstEquipmentWorkHistory = $equipment->equipmentWorkHistory->first(); return $firstEquipmentWorkHistory ? $firstEquipmentWorkHistory->equipmentAssociationAmbit->ambitsEquipment->ambits_description : 'N/A'; }) ->addColumn('extra_equipment', function ($equipment) { $firstEquipmentWorkHistory = $equipment->equipmentWorkHistory->first(); if ($firstEquipmentWorkHistory) { return $firstEquipmentWorkHistory->extra_equipment ? 'Sim' : 'Não'; } return 'N/A'; // Retorna 'N/A' se não houver registros na relação equipmentWorkHistory }) // ->addColumn('status', function ($equipment) { // // Pegue o primeiro equipmentWorkHistory do equipamento // $firstEquipmentWorkHistory = $equipment->equipmentWorkHistory->first(); // if (!$firstEquipmentWorkHistory) { // return 'N/A'; // Se não houver histórico de trabalho // } // // Pegue os valores de 'elemental_tasks_id' da tabela OrderEquipmentTasks com base no equipmentWorkHistorys_id // $elementalTasks = OrderEquipmentTasks::where('equipmentWorkHistorys_id', $firstEquipmentWorkHistory->equipmentWorkHistorys_id) // ->pluck('elemental_tasks_id') // ->toArray(); // Armazena todos os elemental_tasks_id em um array // // Se não houver tarefas elementares, retorna '0 / 0' // if (empty($elementalTasks)) { // return '0 / 0'; // } // // Busque correspondências na tabela control_equipment_workstation com base nos mesmos 'elemental_tasks_id' // $correspondencias = ControlEquipmentWorkstation::where('equipmentWorkHistorys_id', $firstEquipmentWorkHistory->equipmentWorkHistorys_id) // ->whereIn('elemental_tasks_id', $elementalTasks) // Verifica as correspondências // ->count(); // Conta quantas correspondências existem // // Total de tarefas é o número de 'elemental_tasks_id' que encontramos na tabela OrderEquipmentTasks // $totalDeTarefas = count($elementalTasks); // // Retorne a string com o formato 'contador de tarefas / total de tarefas' // return $correspondencias . ' / ' . $totalDeTarefas; // }) ->addColumn('status', function ($equipment) { // Pegue o primeiro equipmentWorkHistory do equipamento $firstEquipmentWorkHistory = $equipment->equipmentWorkHistory->first(); if (!$firstEquipmentWorkHistory) { return 'N/A'; // Se não houver histórico de trabalho } // Pegue os valores de 'elemental_tasks_id' da tabela OrderEquipmentTasks com base no equipmentWorkHistorys_id $elementalTasks = OrderEquipmentTasks::where('equipmentWorkHistorys_id', $firstEquipmentWorkHistory->equipmentWorkHistorys_id) ->pluck('elemental_tasks_id') ->toArray(); // Armazena todos os elemental_tasks_id em um array // Se não houver tarefas elementares, retorna '0 / 0' if (empty($elementalTasks)) { return '0 / 0'; } // Busque correspondências na tabela control_equipment_workstation com base nos mesmos 'elemental_tasks_id', // usando distinct para contar apenas valores únicos de 'elemental_tasks_id' $correspondencias = ControlEquipmentWorkstation::where('equipmentWorkHistorys_id', $firstEquipmentWorkHistory->equipmentWorkHistorys_id) ->whereIn('elemental_tasks_id', $elementalTasks) // Verifica as correspondências ->distinct('elemental_tasks_id') // Garante que só tarefas únicas sejam contadas ->count(); // Conta quantas correspondências existem // Total de tarefas é o número de 'elemental_tasks_id' que encontramos na tabela OrderEquipmentTasks $totalDeTarefas = count($elementalTasks); // Retorne a string com o formato 'contador de tarefas / total de tarefas' return $correspondencias . ' / ' . $totalDeTarefas; }) ->addColumn('action', function ($dataEquipment) use ($numberProject, $tableType) { $equipmentStatus = ($tableType === 'pending' ? 1 : ($tableType === 'completed' ? 2 : 0)); $actionBtn = ''; return $actionBtn; }) ->make(true); } }