diff --git a/app/Http/Controllers/ClientController.php b/app/Http/Controllers/ClientController.php index 8a75873e..09831820 100644 --- a/app/Http/Controllers/ClientController.php +++ b/app/Http/Controllers/ClientController.php @@ -5,6 +5,8 @@ use App\Models\AmbitsEquipment; use App\Models\Equipment; use App\Models\EquipmentAssociationAmbit; +use App\Models\EquipmentWorkHistory; +use App\Models\SpecificAttributesEquipmentType; use App\Models\Unit; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; @@ -12,6 +14,7 @@ use App\Models\CompanyProject; use App\Models\EquipmentType; use App\Models\Plant; +use Carbon\Carbon; use Yajra\DataTables\Facades\DataTables; @@ -25,7 +28,7 @@ public function showReportingForAmbitsProject($ambitId, $projectId) $dataAmbit = AmbitsEquipment::where('ambits_id', $ambitId)->first(); // $receiveDataEquipments = Equipment::where('company_projects_id', $projectId)->get(); - return view('userClient.showReportingAllEquipmentsForAmbitProject', compact('ambitId', 'projectId','dataAmbit')); + return view('userClient.showReportingAllEquipmentsForAmbitProject', compact('ambitId', 'projectId', 'dataAmbit')); } public function getEquipmentsOfAmbit(Request $request) @@ -34,16 +37,30 @@ public function getEquipmentsOfAmbit(Request $request) $projectId = $request->get('projectId'); $ambitId = $request->get('ambitId'); + // $dataAmbit = AmbitsEquipment::where('ambits_id', $ambitId)->first(); + // $receiveDataEquipments = Equipment::where('company_projects_id', $projectId)->get(); + // $filteredAssociations = EquipmentAssociationAmbit::where('ambits_id', $dataAmbit->ambits_id) + // ->whereIn('equipment_id', $receiveDataEquipments->pluck('equipment_id')) + // ->get(); + // $query = Equipment::whereIn('equipment_id', $filteredAssociations->pluck('equipment_id'))->get(); + $dataAmbit = AmbitsEquipment::where('ambits_id', $ambitId)->first(); - $receiveDataEquipments = Equipment::where('company_projects_id', $projectId)->get(); + $receiveDataEquipments = Equipment::where('equipments.company_projects_id', $projectId) + ->join('equipment_work_historys', 'equipments.equipment_id', '=', 'equipment_work_historys.equipment_id') + ->select('equipment_work_historys.equipmentWorkHistorys_id', 'equipment_work_historys.ispt_number') // Adicionei 'equipment_work_historys.ispt_number' aqui + ->pluck('equipmentWorkHistorys_id'); $filteredAssociations = EquipmentAssociationAmbit::where('ambits_id', $dataAmbit->ambits_id) - ->whereIn('equipment_id', $receiveDataEquipments->pluck('equipment_id')) + ->whereIn('equipmentWorkHistorys_id', $receiveDataEquipments) ->get(); - $query = Equipment::whereIn('equipment_id', $filteredAssociations->pluck('equipment_id'))->get(); - // $query = Equipment::select(['ispt_number', 'unit_id', 'equipment_tag'])->get(); + $equipmentWorkHistoryIds = $filteredAssociations->pluck('equipmentWorkHistorys_id'); + + $query = EquipmentWorkHistory::whereIn('equipmentWorkHistorys_id', $equipmentWorkHistoryIds) + ->join('equipments', 'equipment_work_historys.equipment_id', '=', 'equipments.equipment_id') + ->select('equipments.*', 'equipment_work_historys.ispt_number as ispt_number') // Adicionei 'equipment_work_historys.ispt_number as ispt_number' aqui + ->get(); return DataTables::of($query) // Adicione aqui qualquer manipulação de dados ou colunas adicionais que você precise @@ -56,21 +73,63 @@ public function showReportingForAmbitsProjectPdf($ambitId, $projectId) // Obter o caminho da imagem do usuário ou uma imagem padrão $userLogoPath = Auth::user()->user_logo ? public_path('user_logos/' . Auth::user()->user_logo) : public_path('user_logos/logoISPT4.0.jpg'); + // Pega a data e hora atual + $dataAtual = Carbon::now(); + + // Se quiser formatar a data, pode fazer assim: + $dataFormatada = $dataAtual->format('Y-m-d H:i:s'); + $dataAmbit = AmbitsEquipment::where('ambits_id', $ambitId)->first(); - $receiveDataEquipments = Equipment::where('company_projects_id', $projectId)->get(); - - $filteredAssociations = EquipmentAssociationAmbit::where('ambits_id', $dataAmbit->ambits_id) - ->whereIn('equipment_id', $receiveDataEquipments->pluck('equipment_id')) + $receiveDataEquipments = Equipment::where('equipments.company_projects_id', $projectId) // Adicionado 'equipments.' para remover a ambiguidade + ->join('equipment_work_historys', 'equipments.equipment_id', '=', 'equipment_work_historys.equipment_id') + ->select('equipment_work_historys.equipmentWorkHistorys_id', 'equipments.*') // Pegando o ID da tabela equipment_work_historys e todos os campos da tabela equipments ->get(); - $equipmentDetails = Equipment::whereIn('equipment_id', $filteredAssociations->pluck('equipment_id'))->get(); + $filteredAssociations = EquipmentAssociationAmbit::where('ambits_id', $dataAmbit->ambits_id) + ->whereIn('equipmentWorkHistorys_id', $receiveDataEquipments->pluck('equipmentWorkHistorys_id')) // Usando equipmentWorkHistorys_id em vez de equipment_id + ->get(); + + $equipmentWorkHistoryIds = $filteredAssociations->pluck('equipmentWorkHistorys_id'); + + // Agora, em vez de buscar diretamente em Equipment, vamos pegar os detalhes via EquipmentWorkHistory + $equipmentDetails = EquipmentWorkHistory::whereIn('equipmentWorkHistorys_id', $equipmentWorkHistoryIds) + ->join('equipments', 'equipment_work_historys.equipment_id', '=', 'equipments.equipment_id') + ->select('equipments.*', 'equipment_work_historys.*') // Seleciona todos os campos das tabelas equipments e equipment_work_historys + ->get(); + + // $equipmentDetails = EquipmentWorkHistory::whereIn('equipmentWorkHistorys_id', $equipmentWorkHistoryIds) + // ->join('equipments', 'equipment_work_historys.equipment_id', '=', 'equipments.equipment_id') + // ->leftJoin('specific_attributes_equipment_types', 'equipments.equipment_id', '=', 'specific_attributes_equipment_types.equipment_id') // Fazendo a junção com a tabela 'specific_attributes_equipment_types' + // ->select( + // 'equipments.*', + // 'equipment_work_historys.*', + // 'specific_attributes_equipment_types.general_attributes_equipment_id', + // 'specific_attributes_equipment_types.specific_attributes_value' + // ) + // ->get() + // // Junta os dados obtidos na tabela : specific_attributes_equipment_types, e como os dados na colecao de cada equipamento. + // ->transform(function ($item) { + // // Aqui você transforma cada item da coleção, adicionando o novo par de chave-valor + // $item->specific_attributes = [ + // $item->general_attributes_equipment_id => $item->specific_attributes_value + // ]; + // // Remove as colunas desnecessárias para evitar duplicação + // unset($item->general_attributes_equipment_id, $item->specific_attributes_value); + // return $item; + // }); + + + $detalsProject = CompanyProject::where('company_projects_id', $projectId)->first(); + $pdf = PDF::loadView('userClient.pdfReportings.equipmentsForAmbitPdf', [ 'equipmentDetails' => $equipmentDetails, 'userLogoPath' => $userLogoPath, 'dataAmbit' => $dataAmbit, - 'projectId' => $projectId + 'projectId' => $projectId, + 'detalsProject' => $detalsProject, + 'dataFormatada' => $dataFormatada ])->setPaper('a4', 'landscape'); return $pdf->stream('relatorio_teste.pdf'); @@ -130,15 +189,20 @@ public function getDataAmbitsOfProject(Request $request) ->addColumn('amountEquipment', function ($ambitsEquipment) use ($projectId) { // Contar quantos equipamentos estão associados a este âmbito para o projeto específico return EquipmentAssociationAmbit::where('ambits_id', $ambitsEquipment->ambits_id) - ->whereHas('Equipment', function ($q) use ($projectId) { - $q->where('company_projects_id', $projectId); - })->count(); + // Primeiro, juntar-se com equipment_work_historys + ->join('equipment_work_historys', 'equipment_association_ambits.equipmentWorkHistorys_id', '=', 'equipment_work_historys.equipmentWorkHistorys_id') + // Depois, juntar-se com equipments + ->join('equipments', 'equipment_work_historys.equipment_id', '=', 'equipments.equipment_id') + // Agora, podemos filtrar pela company_projects_id + ->where('equipments.company_projects_id', $projectId) + ->count(); }) - ->addColumn('action', function ($dataAmbitProject) use ($projectId) { // Incluindo $projectId no escopo da função anônima + ->addColumn('action', function ($dataAmbitProject) use ($projectId) { $actionBtn = ''; return $actionBtn; }) ->make(true); + } @@ -153,9 +217,14 @@ public function getDataEquipmentsOfProject(Request $request) { $projectId = $request->get('projectId'); - $query = Equipment::join('equipment_association_ambits', 'equipments.equipment_id', '=', 'equipment_association_ambits.equipment_id') + $query = Equipment::join('equipment_work_historys', 'equipments.equipment_id', '=', 'equipment_work_historys.equipment_id') + // Juntar-se com equipment_association_ambits usando equipment_work_historys + ->join('equipment_association_ambits', 'equipment_work_historys.equipmentWorkHistorys_id', '=', 'equipment_association_ambits.equipmentWorkHistorys_id') + // Juntar-se com ambits_equipments ->join('ambits_equipments', 'equipment_association_ambits.ambits_id', '=', 'ambits_equipments.ambits_id') + // Filtrar por company_projects_id ->where('equipments.company_projects_id', $projectId) + // Selecionar os campos desejados ->select([ 'equipments.equipment_id', 'equipments.unit_id', @@ -166,6 +235,7 @@ public function getDataEquipmentsOfProject(Request $request) $dataEquipentProject = $query->get(); + // Retornar a resposta para o DataTables return Datatables::of($dataEquipentProject) @@ -187,18 +257,19 @@ public function showDataDetailsProjectClient($projectID) $receiveDataProject = CompanyProject::where('company_projects_id', $projectID)->first(); // Recebe todas as Fabricas relacionadas a intalacao do Projecto recebido. $receiveUnitsOfProject = Unit::where('plant_id', $receiveDataProject->plant_id)->get(); - + //Recebe todos os tipos de equipamentos $receiveAllTypeEquipments = EquipmentType::all(); - $receiveAllEquipmentsOfProject = Equipment::where('company_projects_id', $projectID)->get(); + $receiveAllEquipmentsOfProject = EquipmentWorkHistory::where('company_projects_id', $projectID)->get(); - // Primeiro, obtenha todos os 'equipment_id' como um array - $equipmentIds = $receiveAllEquipmentsOfProject->pluck('equipment_id')->toArray(); - // Agora, use 'whereIn' com esse array de 'equipment_id' - $receiveAmbitsOfProject = EquipmentAssociationAmbit::whereIn('equipment_id', $equipmentIds)->get(); + // Obtendo todos os IDs de equipmentWorkHistorys + $equipmentWorkHistoryIds = $receiveAllEquipmentsOfProject->pluck('equipmentWorkHistorys_id'); + + // para a variavel obter o valor esperado precisamos separar os id como na varaivel acima, ele nao funciona diretamente com a variavel receiveAllEquipmentsOfProject, pois e uma colecao !! + $receiveEquipmentAssociatedAmbit = EquipmentAssociationAmbit::whereIn('equipmentWorkHistorys_id', $equipmentWorkHistoryIds)->get(); // Recebe os todos os ambitos do projecto - $AmbitsId = $receiveAmbitsOfProject->pluck('ambits_id')->unique()->toArray(); + $AmbitsId = $receiveEquipmentAssociatedAmbit->pluck('ambits_id')->unique()->toArray(); // Vamos passar os ids dos Ambitos para a view, para envialos para a Tabela Yajra. e carregar com base nos Ambitos $AmbitsIdString = implode(",", $AmbitsId); // Recebe os dados de cada Ambito @@ -211,16 +282,17 @@ public function showDataDetailsProjectClient($projectID) public function getDataProjectsClient(Request $request) { + // Filtros ... $allPlantsClient = $request->get('allPlantsClient'); $receiveAllPlants = $request->get('receiveAllPlants'); $receiveAllUnits = $request->get('receiveAllUnits'); $receiveEquipmentsType = $request->get('receiveEquipmentsType'); + $clientID = $request->get('clientID'); + //Criar Filtros para Atualizar os dados com base neles. - - $client = Auth::user()->user_id; - $allPlantsClient = Plant::where('user_id', $client)->pluck('plant_id')->toArray(); + $allPlantsClient = Plant::where('user_id', $clientID)->pluck('plant_id')->toArray(); $query = CompanyProject::with('plant') // Assegure-se de que a relação está correta. ->whereIn('plant_id', $allPlantsClient) @@ -280,13 +352,16 @@ public function receiveManageAssetsClient() } - public function reportingDataClient() + public function reportingDataClient($clientID = null) { - $client = Auth::user()->user_id; + // Se clientID não foi passado, usamos o ID do usuário autenticado + if (is_null($clientID)) { + $clientID = Auth::user()->user_id; + } // Busca todas as Instalacoes com base no id do CLIENTE - $allPlantsClient = Plant::where('user_id', $client)->get(); + $allPlantsClient = Plant::where('user_id', $clientID)->get(); // Extrai os plant_id da coleção $recevePlantClient $plantsIds = $allPlantsClient->pluck('plant_id'); @@ -299,7 +374,7 @@ public function reportingDataClient() ->orderBy('year', 'desc') ->pluck('year'); - return view('userClient.reportingDataClient', compact('allPlantsClient', 'yearsProjects')); + return view('userClient.reportingDataClient', compact('clientID','allPlantsClient', 'yearsProjects')); } diff --git a/app/Http/Controllers/CreateProjectController copy.php b/app/Http/Controllers/CreateProjectController copy.php index ea10f0e0..00a247c2 100755 --- a/app/Http/Controllers/CreateProjectController copy.php +++ b/app/Http/Controllers/CreateProjectController copy.php @@ -460,7 +460,7 @@ public function EditEquipmentsProjects(Request $request) } // Retorna uma resposta - return redirect()->route('test2', ['id' => $request->numberProject]) + return redirect()->route('articulated_2', ['id' => $request->numberProject]) ->with('success', 'Equipamento ' . $equipment->equipment_tag . ' Editado com Sucesso!!!') ->with('taskExecutionOrders', $taskExecutionOrders); } @@ -531,7 +531,7 @@ public function createWorkStations(Request $request) } // Redireciona para onde você quiser após a criação das workstations - return redirect()->route('test3', ['id' => $request->numberProject]) + return redirect()->route('workStation_3', ['id' => $request->numberProject]) ->with('success', $numberWorkstations . ' Postos de Trabalho criados !!!') ->with('listWorkstations', $listWorkstations); } @@ -654,10 +654,10 @@ public function processStep1(Request $request) session(['form_data.step1' => $request->all()]); // // Redirecione o Utilizador para a próxima etapa - // return redirect('/test2') + // return redirect('/articulated_2') // ->with('project', $project) // ->with('success', 'Dados guardados com sucesso'); - return redirect()->route('test2', ['id' => $project->company_projects_id]) + return redirect()->route('articulated_2', ['id' => $project->company_projects_id]) ->with('success', 'Detalhes, Projecto criado com sucesso'); } @@ -751,7 +751,7 @@ public function createEquipmentManual(Request $request) ]); if ($existingEquipment) { - return redirect()->route('test2', ['id' => $request->numberProject]) + return redirect()->route('articulated_2', ['id' => $request->numberProject]) ->with('danger', 'Equipamento ja Existe !!') ->with('listEquipmentsProjects', $listEquipmentsProjects); } @@ -850,7 +850,7 @@ public function createEquipmentManual(Request $request) } // O $request->numberProject e sempre necessario retornar para indicar a obra que se esta modificando... - return redirect()->route('test2', ['id' => $request->numberProject]) + return redirect()->route('articulated_2', ['id' => $request->numberProject]) ->with('success', 'Equipamento criado com sucesso') ->with('listEquipmentsProjects', $listEquipmentsProjects); } @@ -1050,13 +1050,13 @@ public function processStep2(Request $request) // $pendingEquipments = session('pendingEquipments'); if ($countPendingEquipments != 0) { - // return redirect()->route('test2')->with('Danger', 'Equipamentos Pendentes')->with('listValves', $listValves)->with('pendingEquipments', $pendingEquipments); - return redirect()->route('test2', ['id' => $request->numberProject]) + // return redirect()->route('articulated_2')->with('Danger', 'Equipamentos Pendentes')->with('listValves', $listValves)->with('pendingEquipments', $pendingEquipments); + return redirect()->route('articulated_2', ['id' => $request->numberProject]) ->with('danger', 'Equipamentos Pendentes criados : ' . $countPendingEquipments) ->with('pendingEquipments', $pendingEquipments); // ->with('success', 'Equipamentos Criados :' . count($listValves)) } - return redirect()->route('test2', ['id' => $request->numberProject]) + return redirect()->route('articulated_2', ['id' => $request->numberProject]) ->with('success', 'Equipamentos Criados :' . $countNewEquipment); } @@ -1065,7 +1065,7 @@ public function processStep2(Request $request) session(['form_data.step2' => $request->all()]); // Redirecione o Utilizador para a próxima etapa - return redirect('/test3'); + return redirect('/workStation_3'); } public function showStep3($company_projects_id) @@ -1230,7 +1230,7 @@ public function index() } $allPossibleAttributes = GeneralAttributesEquipment::all()->pluck('description')->toArray(); - return view('test2', ['equipments' => $equipments, 'allAttributes' => $allPossibleAttributes]); + return view('articulated_2', ['equipments' => $equipments, 'allAttributes' => $allPossibleAttributes]); // Retorne a view com os dados // return view('test', ['equipments' => $equipments]); } diff --git a/app/Http/Controllers/CreateProjectController.php b/app/Http/Controllers/CreateProjectController.php index 7823dd46..77a06ded 100755 --- a/app/Http/Controllers/CreateProjectController.php +++ b/app/Http/Controllers/CreateProjectController.php @@ -81,19 +81,22 @@ public function changeAmbitEquipment(Request $request) public function deleteEquipmentInProject(Request $request) { - $receiveEquipmentId = $request->equipmentId; - $receiveEquipment = Equipment::where('equipment_id', $receiveEquipmentId)->first(); + $receiveEquipment = Equipment::where('equipment_id', $request->equipmentId)->first(); $receiveStatus = $request->deleteEquipmentProject; + //Independente do tipo de select ele vai deletar o equipamento do Historico + EquipmentWorkHistory::where('equipment_id', $receiveEquipment->equipment_id) + ->where('company_projects_id', $receiveEquipment->company_projects_id) + ->delete(); + + // Deleta o equipamento por completo e retorna if ($receiveStatus == 'complete') { - EquipmentWorkHistory::where('equipment_id', $receiveEquipment->equipment_id) - ->where('company_projects_id', $receiveEquipment->company_projects_id) - ->delete(); $receiveEquipment->delete(); return redirect()->back() ->with('success', 'Equipamento: ' . $receiveEquipment->equipment_id . ' excluído com sucesso!'); } else { + // Deleta apaga a associacao do equipamento a Obra $receiveEquipment->company_projects_id = null; $receiveEquipment->save(); @@ -278,7 +281,7 @@ public function receiveEquipmentToAssociateTasks(Request $request) //Criar associacao do equipamento ao Âmbito $AssociationEquipmentAmbit = new EquipmentAssociationAmbit; $AssociationEquipmentAmbit->equipment_type_id = $equipment['equipment_type_id']; - $AssociationEquipmentAmbit->ambits_id = $equipment['ambit_id']; + $AssociationEquipmentAmbit->ambits_id = $equipment['ambit_id']; $AssociationEquipmentAmbit->equipmentWorkHistorys_id = $createEquipmentWorkHistory->equipmentWorkHistorys_id; $AssociationEquipmentAmbit->save(); @@ -592,7 +595,7 @@ public function EditEquipmentsProjects(Request $request) } // Retorna uma resposta - return redirect()->route('test2', ['id' => $request->numberProject]) + return redirect()->route('articulated_2', ['id' => $request->numberProject]) ->with('success', 'Equipamento ' . $equipment->equipment_tag . ' Editado com Sucesso!!!') ->with('taskExecutionOrders', $taskExecutionOrders); } @@ -663,7 +666,7 @@ public function createWorkStations(Request $request) } // Redireciona para onde você quiser após a criação das workstations - return redirect()->route('test3', ['id' => $request->numberProject]) + return redirect()->route('workStation_3', ['id' => $request->numberProject]) ->with('success', $numberWorkstations . ' Postos de Trabalho criados !!!') ->with('listWorkstations', $listWorkstations); } @@ -688,6 +691,14 @@ public function showStep1($company_projects_id) $companies = User::where('type_users', 3)->get(); + $receiveDetailsPlant = Plant::where('plant_id', $projects->plant_id)->first(); + + $receiveDetailsUser = User::where('user_id', $receiveDetailsPlant->user_id)->first(); + // $receiveDetailsUser->plantName = $receiveDetailsPlant->plant_name; + + $projects->plantName = $receiveDetailsPlant->plant_name; + $projects->userName = $receiveDetailsUser->user_name; + return view('projectsClients/projectDetails_1', ['step' => 1], ['companies' => $companies]) ->with('projects', $projects); } @@ -695,6 +706,56 @@ public function showStep1($company_projects_id) // Se forem alterados dados dos Detalhes da Obra, vai ser alterado public function EditprocessStep1(Request $request) { + dd($request); + // Validação... + $installationId = $request->input('installation_id'); + + if ($installationId <> null && $installationId == 'new_install') { + + // Criar uma nova instalação... + $newInstallation = new Plant; + + $newInstallation->plant_name = $request->input('new_company_name'); + $newInstallation->plant_address = $request->input('new_company_address'); + $newInstallation->user_id = $request->input('user_id'); + + $newInstallation->save(); + + // Use o id da nova instalação. + $installationId = $newInstallation->plant_id; + } + + $receiveDetailsPlant = Plant::where('plant_name', $request->plant_id_present)->first(); + + // $project = new CompanyProject; + $project = CompanyProject::where('company_projects_id', $request->projectId)->first(); + + $project->company_project_description = $request->input('description_project'); + $project->project_ispt_number = $request->input('n_project_ispt'); + $project->project_company_number = $request->input('project_company_number'); + $project->project_ispt_responsible = $request->input('responsible_project_ispt'); + $project->project_company_responsible = $request->input('responsible_project_company'); + + + // Verifica se e igual a nulo , se for usa a data ja existente + if ($request->date_started === null) { + $project->date_started = $request->input('date_started_present'); + } else + $project->date_started = $request->input('date_started'); + + $project->plant_id = $receiveDetailsPlant->plant_id; + $project->order_project = 1; + + $project->save(); + + session(['form_data.step1' => $request->all()]); + + // // Redirecione o Utilizador para a próxima etapa + // return redirect('/articulated_2') + // ->with('project', $project) + // ->with('success', 'Dados guardados com sucesso'); + return redirect()->route('articulated_2', ['id' => $project->company_projects_id]) + ->with('success', 'Detalhes do Project atualizados!'); } public function removePendingEquipment($id) @@ -746,10 +807,12 @@ public function CreateNewEquipmentFromPendingEquipment(Request $request, $id) public function processStep1(Request $request) { + + dd($request); // Validação... $installationId = $request->input('installation_id'); - if ($installationId == 'new_install') { + if ($installationId <> null && $installationId == 'new_install') { // Criar uma nova instalação... $newInstallation = new Plant; @@ -764,7 +827,10 @@ public function processStep1(Request $request) $installationId = $newInstallation->plant_id; } - $project = new CompanyProject; + $receiveDetailsPlant = Plant::where('plant_name', $request->plant_id_present)->first(); + + // $project = new CompanyProject; + $project = CompanyProject::where('company_projects_id', $request->projectId)->first(); $project->company_project_description = $request->input('description_project'); $project->project_ispt_number = $request->input('n_project_ispt'); @@ -772,13 +838,14 @@ public function processStep1(Request $request) $project->project_ispt_responsible = $request->input('responsible_project_ispt'); $project->project_company_responsible = $request->input('responsible_project_company'); + // Verifica se e igual a nulo , se for usa a data ja existente if ($request->date_started === null) { $project->date_started = $request->input('date_started_present'); } else $project->date_started = $request->input('date_started'); - $project->plant_id = $installationId; + $project->plant_id = $receiveDetailsPlant->plant_id; $project->order_project = 1; $project->save(); @@ -786,11 +853,11 @@ public function processStep1(Request $request) session(['form_data.step1' => $request->all()]); // // Redirecione o Utilizador para a próxima etapa - // return redirect('/test2') + // return redirect('/articulated_2') // ->with('project', $project) // ->with('success', 'Dados guardados com sucesso'); - return redirect()->route('test2', ['id' => $project->company_projects_id]) - ->with('success', 'Detalhes, Projecto criado com sucesso'); + return redirect()->route('articulated_2', ['id' => $project->company_projects_id]) + ->with('success', 'Detalhes do Project atualizados!'); } public function showStep2($company_projects_id) @@ -888,7 +955,7 @@ public function createEquipmentManual(Request $request) ]); if ($existingEquipment) { - return redirect()->route('test2', ['id' => $request->numberProject]) + return redirect()->route('articulated_2', ['id' => $request->numberProject]) ->with('danger', 'Equipamento ja Existe !!') ->with('listEquipmentsProjects', $listEquipmentsProjects); } @@ -928,8 +995,22 @@ public function createEquipmentManual(Request $request) $newEquipmentWorkHistorys = new EquipmentWorkHistory; + // Verifica se já existem registros com o mesmo 'equipment_id' e 'company_projects_id' + $existingRecords = EquipmentWorkHistory::where('company_projects_id', $request->numberProject) + ->orderBy('ispt_number', 'desc') // Ordena de forma decrescente + ->first(); // Pega o primeiro resultado, que seria o maior número + + if ($existingRecords) { + // Se existirem registros, o próximo número será o maior número existente + 1 + $isptNumber = $existingRecords->ispt_number + 1; + } else { + // Se não existirem registros, começa com 1 + $isptNumber = 1; + } + + $newEquipmentWorkHistorys->equipment_id = $equipmentID; - $newEquipmentWorkHistorys->ispt_number = 0; + $newEquipmentWorkHistorys->ispt_number = $isptNumber; $newEquipmentWorkHistorys->company_projects_id = $request->numberProject; $newEquipmentWorkHistorys->save(); @@ -987,7 +1068,7 @@ public function createEquipmentManual(Request $request) } // O $request->numberProject e sempre necessario retornar para indicar a obra que se esta modificando... - return redirect()->route('test2', ['id' => $request->numberProject]) + return redirect()->route('articulated_2', ['id' => $request->numberProject]) ->with('success', 'Equipamento criado com sucesso') ->with('listEquipmentsProjects', $listEquipmentsProjects); } @@ -1006,6 +1087,9 @@ public function processStep2(Request $request) // Inicializa o contador para ispt_number $isptNumber = 1; + // Recebe o valor do campo 'chooseIfSelectOrCreateEquipments' do formulário + $chooseAction = $request->input('chooseIfSelectOrCreateEquipments'); + // Certifique-se de que um arquivo foi enviado if ($file) { //Busca o nome do arquivo xslx. @@ -1020,7 +1104,7 @@ public function processStep2(Request $request) // Retorna um array com todos os names preenchidos na primeira linha do template de Excel $columnNames = $data[0]; $countPendingEquipments = 0; - $countNewEquipment = 0; + $countEquipment = 0; // Recebo os nomes das colunas do execel dependendo da linguagem selecionada $columnRealNames = $data[5]; @@ -1038,7 +1122,6 @@ public function processStep2(Request $request) // Se a coluna 'fábrica' estiver vazia, pule para a próxima linha continue; } - $emptyFields = []; // Verifica se os 5 primeiros campos essenciais estão preenchidos @@ -1049,14 +1132,7 @@ public function processStep2(Request $request) } } - if (!empty($emptyFields)) { - // Se houver campos vazios, adicione a linha e os campos vazios às linhas ignoradas - $ignoredLines[] = [ - 'line' => $i + 1, - 'emptyFields' => $emptyFields - ]; - continue; // Pula para a próxima linha - } + // Em cada um das linhas horizontais do excel, vai se guardar a 'key' vinculada ao valor do campo preenchido ou seja a 'key' vai ter o mesmo nome de um dos dados da tabela 'general_attributes_equipaments' na coluna : general_attributes_equipment_description, assim sendo mais facil implementar na tabela : specific_attributes_equipament_types $joinArrays = array_combine($columnNames, $dataLines); @@ -1077,179 +1153,275 @@ public function processStep2(Request $request) ->where('equipment_tag', $datas['equipment_tag']) ->first(); - if ($existingEquipment) { + //Nesta para vamos separar como tratar os equipamentos que existem, dependendo do tipo de select que o utilizador utilizou - $foundInExcel = false; - $rowExcelDuplicated = null; + if ($chooseAction == 'selectEquipments') { - // Verificar duplicatas no Excel - for ($j = 6; $j < $i; $j++) { - if ($data[$j][0] === $datas['unit'] && $data[$j][1] === $datas['equipment_tag'] && $data[$j][4] === $datas['equipment_description']) { - $foundInExcel = true; - $rowExcelDuplicated = $j; - break; + + + if ($existingEquipment) { + + $foundInExcel = false; + $rowExcelDuplicated = null; + + // Verificar duplicatas no Excel + for ($j = 6; $j < $i; $j++) { + if ($data[$j][0] === $datas['unit'] && $data[$j][1] === $datas['equipment_tag'] && $data[$j][4] === $datas['equipment_description']) { + $foundInExcel = true; + $rowExcelDuplicated = $j; + break; + } } + + // Associar o equipamento encontrado ao projeto + $existingEquipment->company_projects_id = $company_projects_id; + $existingEquipment->save(); + + $countEquipment++; + + // Guardo os valores de 'id' e do 'tipo de equipamento' que nosso novo equipamento acabado de criar + $receveEquipment_ID = $existingEquipment->equipment_id; + $receveEquipament_type_ID = $existingEquipment->equipment_type_id; + + + + // Verifica se já existem registros com o mesmo 'equipment_id' e 'company_projects_id' + $existingRecords = EquipmentWorkHistory::where('company_projects_id', $company_projects_id) + ->orderBy('ispt_number', 'desc') // Ordena de forma decrescente + ->first(); // Pega o primeiro resultado, que seria o maior número + + + if ($existingRecords) { + // Se existirem registros, o próximo número será o maior número existente + 1 + $isptNumber = $existingRecords->ispt_number + 1; + } else { + // Se não existirem registros, começa com 1 + $isptNumber = 1; + } + + $newEquipmentWorkHistory = new EquipmentWorkHistory; + + $newEquipmentWorkHistory->equipment_id = $receveEquipment_ID; + $newEquipmentWorkHistory->company_projects_id = $company_projects_id; + // Continua com o processo de salvar o novo registro + $newEquipmentWorkHistory->ispt_number = $isptNumber; + + + + $newEquipmentWorkHistory->save(); + + // Recebe o Id do 'EquipmentWorkHistory' criado. + $recebeNewEquipmentWorkHistoryID = $newEquipmentWorkHistory->equipmentWorkHistorys_id; + + $isptNumber++; + + + $ambit = AmbitsEquipment::where('ambits_description', $datas['ambit'])->first(); + + if ($ambit) { + $ambit_id = $ambit->ambits_id; + } + + //Criar associacao do equipamento ao Âmbito + $AssociationEquipmentAmbit = new EquipmentAssociationAmbit; + $AssociationEquipmentAmbit->equipment_type_id = $existingEquipment->equipment_type_id; + $AssociationEquipmentAmbit->ambits_id = $ambit_id; + $AssociationEquipmentAmbit->equipmentWorkHistorys_id = $newEquipmentWorkHistory->equipmentWorkHistorys_id; + + $AssociationEquipmentAmbit->save(); + + //Recebe a tabela com as associoacoes entre Âmbitos e tarefas Elementares + $TasksAssociationAmbits = TasksAssociationAmbits::all()->where('ambits_equipment_id', $AssociationEquipmentAmbit->ambits_id); + + foreach ($TasksAssociationAmbits as $TasksAssociationAmbit) { + $JoinsEquipmentsWithTasks = new OrderEquipmentTasks; + $JoinsEquipmentsWithTasks->equipmentWorkHistorys_id = $newEquipmentWorkHistory->equipmentWorkHistorys_id; + $JoinsEquipmentsWithTasks->elemental_tasks_id = $TasksAssociationAmbit->elemental_tasks_id; + $JoinsEquipmentsWithTasks->further_tasks_id = null; + $JoinsEquipmentsWithTasks->save(); + } + + // Separa o nome do arquivo para obter o tipo de documento e a data-hora + $parts = explode('_', $originalFileName); + $documentType = $parts[2]; // 98 + $timestamp = $parts[3]; // 2024-01-14_14-33 + + // Cria um array agrupado + $groupedArrayForPendingEquipments = [$documentType, [$timestamp, $equipmentPendingLogs]]; } - - // Se o equipamento existir, crie o novo equipamento na tabela pending_equipaments. - $pendingEquipament = new PendingEquipment; - - // Defina os atributos do pendingEquipament conforme necessário. - $pendingEquipament->pending_equipment_unit_id = $checkFactory->unit_id; - $pendingEquipament->pending_equipment_type_id = $equipmentType->equipment_type_id; - $pendingEquipament->pending_equipment_tag = $datas['equipment_tag']; - $pendingEquipament->pending_equipment_description = $datas['equipment_description']; - $pendingEquipament->pending_equipment_serial_number = $datas['serial_number']; - $pendingEquipament->pending_equipment_brand = $datas['model']; - $pendingEquipament->pending_company_projects_id = $company_projects_id; - $pendingEquipament->save(); - - // Incremente o contador de PendingEquipments - $countPendingEquipments++; - - // A variavel $pendenteLogs, na 'linhaExcel' vai recebe a linha do execel onde encontrou a duplicata em Array, vinda do primeiro $data, onde transforma toda o execel em array - // 'existingEquipmentId' vai ver qual o id do equipament que esta sendo duplicado. - //'duplicadoNoExcel' vai ser um boolean indicando que este valor duplicado veio da base de dados ou se foi de uma coluna anterior. - // linhaExcelDuplicada se o valor de duplicadoNoExcel for 'true' quer dizer que existe uma linha anterior com o mesmos dados, e essa variavel busco a o numero do array desta linha com base na variavel primeiro $data - $equipmentPendingLogs[] = [ - 'rowExecel' => $i + 1, - 'pendingEquipmentId' => $pendingEquipament->pending_equipment_id, - 'existingEquipmentId' => $existingEquipment->equipment_id, - 'foundInExcel' => $foundInExcel, - 'rowExcelDuplicated' => $rowExcelDuplicated + //Se nao existir deve retornar 'equipamentos nao encontrados, deve ser a mesma coisa que as linha ignoradas + $ignoredLines[] = [ + 'line' => $i + 1, + 'emptyFields' => ['Nenhum equipamento foi localizado que cumpra os requisitos especificados nesta linha.'] ]; - - // Continue com o próximo loop. - continue; - } - - $newEquipament = new Equipment; - - $newEquipament->unit_id = $checkFactory->unit_id; - $newEquipament->equipment_type_id = $equipmentType->equipment_type_id; - $newEquipament->equipment_Description = $datas['equipment_description']; - $newEquipament->equipment_tag = $datas['equipment_tag']; - $newEquipament->equipment_serial_number = $datas['serial_number']; - $newEquipament->equipment_brand = $datas['brand']; - $newEquipament->equipment_model = $datas['model']; - $newEquipament->company_projects_id = $company_projects_id; - - $newEquipament->save(); - - $countNewEquipment++; - - // Guardo os valores de 'id' e do 'tipo de equipamento' que nosso novo equipamento acabado de criar - $receveEquipment_ID = $newEquipament->equipment_id; - $receveEquipament_type_ID = $newEquipament->equipment_type_id; - - $newEquipmentWorkHistory = new EquipmentWorkHistory; - - $newEquipmentWorkHistory->equipment_id = $receveEquipment_ID; - $newEquipmentWorkHistory->ispt_number = $isptNumber; - $newEquipmentWorkHistory->company_projects_id = $company_projects_id; - - $newEquipmentWorkHistory->save(); - - // Recebe o Id do 'EquipmentWorkHistory' criado. - $recebeNewEquipmentWorkHistoryID = $newEquipmentWorkHistory->equipmentWorkHistorys_id; - - $isptNumber++; - - $ambit = AmbitsEquipment::where('ambits_description', $datas['ambit'])->first(); - - if ($ambit) { - $ambit_id = $ambit->ambits_id; - } - - //Criar associacao do equipamento ao Âmbito - $AssociationEquipmentAmbit = new EquipmentAssociationAmbit; - - $AssociationEquipmentAmbit->equipment_type_id = $receveEquipament_type_ID; - $AssociationEquipmentAmbit->ambits_id = $ambit_id; - $AssociationEquipmentAmbit->equipmentWorkHistorys_id = $recebeNewEquipmentWorkHistoryID; - $AssociationEquipmentAmbit->save(); - - $execution_order = 1; - - //Recebe a tabela com as associoacoes entre Âmbitos e tarefas Elementares - $TasksAssociationAmbits = TasksAssociationAmbits::all()->where('ambits_equipment_id', $AssociationEquipmentAmbit->ambits_id); - - foreach ($TasksAssociationAmbits as $TasksAssociationAmbit) { - $JoinsEquipmentsWithTasks = new OrderEquipmentTasks; - - $JoinsEquipmentsWithTasks->equipmentWorkHistorys_id = $recebeNewEquipmentWorkHistoryID; - $JoinsEquipmentsWithTasks->execution_order = $execution_order++; - $JoinsEquipmentsWithTasks->elemental_tasks_id = $TasksAssociationAmbit->elemental_tasks_id; - $JoinsEquipmentsWithTasks->further_tasks_id = null; - // 2 vai significar 'nao' e 1 'sim' - $JoinsEquipmentsWithTasks->inspection = 2; - $JoinsEquipmentsWithTasks->save(); - } + continue; // Pula para a próxima linha - $generalAttributes = GeneralAttributesEquipment::all(); + } elseif ($chooseAction == 'createEquipments') { - foreach ($generalAttributes as $generalAttribute) { - // Verifica se a chave existe em $datas, comparando com os dados da tabela : GeneralAttributesEquipment assim adicionando todos diferentes de NULL relacionados com o equipamento acabado de cria - if (isset($datas[$generalAttribute->general_attributes_equipment_description])) { - - $specificAttribute = new SpecificAttributesEquipmentType; - $specificAttribute->equipment_id = $receveEquipment_ID; - $specificAttribute->equipment_type_id = $receveEquipament_type_ID; - $specificAttribute->general_attributes_equipment_id = $generalAttribute->general_attributes_equipment_id; - // Atribui o valor da chave correspondente em $datas - $specificAttribute->specific_attributes_value = $datas[$generalAttribute->general_attributes_equipment_description]; - - $specificAttribute->save(); + if (!empty($emptyFields)) { + // Se houver campos vazios, adicione a linha e os campos vazios às linhas ignoradas + $ignoredLines[] = [ + 'line' => $i + 1, + 'emptyFields' => $emptyFields + ]; + continue; // Pula para a próxima linha } + + if ($existingEquipment) { + + $foundInExcel = false; + $rowExcelDuplicated = null; + + // Verificar duplicatas no Excel + for ($j = 6; $j < $i; $j++) { + if ($data[$j][0] === $datas['unit'] && $data[$j][1] === $datas['equipment_tag'] && $data[$j][4] === $datas['equipment_description']) { + $foundInExcel = true; + $rowExcelDuplicated = $j; + break; + } + } + + // Se o equipamento existir, crie o novo equipamento na tabela pending_equipaments. + $pendingEquipament = new PendingEquipment; + + // Defina os atributos do pendingEquipament conforme necessário. + $pendingEquipament->pending_equipment_unit_id = $checkFactory->unit_id; + $pendingEquipament->pending_equipment_type_id = $equipmentType->equipment_type_id; + $pendingEquipament->pending_equipment_tag = $datas['equipment_tag']; + $pendingEquipament->pending_equipment_description = $datas['equipment_description']; + $pendingEquipament->pending_equipment_serial_number = $datas['serial_number']; + $pendingEquipament->pending_equipment_brand = $datas['model']; + $pendingEquipament->pending_company_projects_id = $company_projects_id; + $pendingEquipament->save(); + + // Incremente o contador de PendingEquipments + $countPendingEquipments++; + + // A variavel $pendenteLogs, na 'linhaExcel' vai recebe a linha do execel onde encontrou a duplicata em Array, vinda do primeiro $data, onde transforma toda o execel em array + // 'existingEquipmentId' vai ver qual o id do equipament que esta sendo duplicado. + //'duplicadoNoExcel' vai ser um boolean indicando que este valor duplicado veio da base de dados ou se foi de uma coluna anterior. + // linhaExcelDuplicada se o valor de duplicadoNoExcel for 'true' quer dizer que existe uma linha anterior com o mesmos dados, e essa variavel busco a o numero do array desta linha com base na variavel primeiro $data + $equipmentPendingLogs[] = [ + 'rowExecel' => $i + 1, + 'pendingEquipmentId' => $pendingEquipament->pending_equipment_id, + 'existingEquipmentId' => $existingEquipment->equipment_id, + 'foundInExcel' => $foundInExcel, + 'rowExcelDuplicated' => $rowExcelDuplicated + ]; + + // Continue com o próximo loop. + continue; + } + + $newEquipament = new Equipment; + + $newEquipament->unit_id = $checkFactory->unit_id; + $newEquipament->equipment_type_id = $equipmentType->equipment_type_id; + $newEquipament->equipment_Description = $datas['equipment_description']; + $newEquipament->equipment_tag = $datas['equipment_tag']; + $newEquipament->equipment_serial_number = $datas['serial_number']; + $newEquipament->equipment_brand = $datas['brand']; + $newEquipament->equipment_model = $datas['model']; + $newEquipament->company_projects_id = $company_projects_id; + + $newEquipament->save(); + + $countEquipment++; + + // Guardo os valores de 'id' e do 'tipo de equipamento' que nosso novo equipamento acabado de criar + $receveEquipment_ID = $newEquipament->equipment_id; + $receveEquipament_type_ID = $newEquipament->equipment_type_id; + + + // Verifica se já existem registros com o mesmo 'equipment_id' e 'company_projects_id' + $existingRecords = EquipmentWorkHistory::where('company_projects_id', $company_projects_id) + ->orderBy('ispt_number', 'desc') // Ordena de forma decrescente + ->first(); // Pega o primeiro resultado, que seria o maior número + + + if ($existingRecords) { + // Se existirem registros, o próximo número será o maior número existente + 1 + $isptNumber = $existingRecords->ispt_number + 1; + } else { + // Se não existirem registros, começa com 1 + $isptNumber = 1; + } + + $newEquipmentWorkHistory = new EquipmentWorkHistory; + + $newEquipmentWorkHistory->equipment_id = $receveEquipment_ID; + $newEquipmentWorkHistory->ispt_number = $isptNumber; + $newEquipmentWorkHistory->company_projects_id = $company_projects_id; + + $newEquipmentWorkHistory->save(); + + // Recebe o Id do 'EquipmentWorkHistory' criado. + $recebeNewEquipmentWorkHistoryID = $newEquipmentWorkHistory->equipmentWorkHistorys_id; + + $isptNumber++; + + $ambit = AmbitsEquipment::where('ambits_description', $datas['ambit'])->first(); + + if ($ambit) { + $ambit_id = $ambit->ambits_id; + } + + //Criar associacao do equipamento ao Âmbito + $AssociationEquipmentAmbit = new EquipmentAssociationAmbit; + $AssociationEquipmentAmbit->equipment_type_id = $newEquipament->equipment_type_id; + $AssociationEquipmentAmbit->ambits_id = $ambit_id; + $AssociationEquipmentAmbit->equipmentWorkHistorys_id = $newEquipmentWorkHistory->equipmentWorkHistorys_id; + + $AssociationEquipmentAmbit->save(); + + //Recebe a tabela com as associoacoes entre Âmbitos e tarefas Elementares + $TasksAssociationAmbits = TasksAssociationAmbits::all()->where('ambits_equipment_id', $AssociationEquipmentAmbit->ambits_id); + + foreach ($TasksAssociationAmbits as $TasksAssociationAmbit) { + $JoinsEquipmentsWithTasks = new OrderEquipmentTasks; + $JoinsEquipmentsWithTasks->equipmentWorkHistorys_id = $newEquipmentWorkHistory->equipmentWorkHistorys_id; + $JoinsEquipmentsWithTasks->elemental_tasks_id = $TasksAssociationAmbit->elemental_tasks_id; + $JoinsEquipmentsWithTasks->further_tasks_id = null; + $JoinsEquipmentsWithTasks->save(); + } + + // Separa o nome do arquivo para obter o tipo de documento e a data-hora + $parts = explode('_', $originalFileName); + $documentType = $parts[2]; // 98 + $timestamp = $parts[3]; // 2024-01-14_14-33 + + // Cria um array agrupado + $groupedArrayForPendingEquipments = [$documentType, [$timestamp, $equipmentPendingLogs]]; + // Armazenar $groupedArrayForPendingEquipments na sessão + session(['groupedArrayForPendingEquipments' => $groupedArrayForPendingEquipments]); + $pendingEquipments = PendingEquipment::where('pending_company_projects_id', $request->numberProject)->get(); + } } - // Separa o nome do arquivo para obter o tipo de documento e a data-hora - $parts = explode('_', $originalFileName); - $documentType = $parts[2]; // 98 - $timestamp = $parts[3]; // 2024-01-14_14-33 - - // Cria um array agrupado - $groupedArrayForPendingEquipments = [$documentType, [$timestamp, $equipmentPendingLogs]]; - - // Armazenar $groupedArrayForPendingEquipments na sessão - session(['groupedArrayForPendingEquipments' => $groupedArrayForPendingEquipments]); - - $pendingEquipments = PendingEquipment::where('pending_company_projects_id', $request->numberProject)->get(); - - // Verifica se foram criados equipamentos pendentes,e se nesses pendentes vieram do execel ou da base de dados, alem de indicar as linha nao preenchidas. - // if ($countPendingEquipments != 0 && !empty($pendenteLogs) && !empty($linhasIgnoradas)) { - // return redirect()->route('test2', ['id' => $request->numberProject]) - // ->with('danger', 'Equipamentos Pendentes criados : ' . $countPendingEquipments) - // ->with('dangerPendenteLogs', ['linhasIgnoradas' => $linhasIgnoradas, 'pendenteLogs' => $pendenteLogs]) - // ->with('pendingEquipments', $pendingEquipments); - // } - // return redirect()->route('test2', ['id' => $request->numberProject]) - // ->with('success', 'Equipamentos Criados :' . $countNewEquipment); - if ($countPendingEquipments != 0 && !empty($equipmentPendingLogs)) { // Se houver equipamentos pendentes, redirecione com essa informação e inclua os $linhasIgnoradas se não estiverem vazios - return redirect()->route('test2', ['id' => $request->numberProject]) + return redirect()->route('articulated_2', ['id' => $request->numberProject]) ->with('danger', 'Equipamentos Pendentes criados: ' . $countPendingEquipments) ->with('dangerLogs', $ignoredLines) ->with('equipmentPendingLogs', $equipmentPendingLogs) ->with('pendingEquipments', $pendingEquipments); } else { // Se não houver equipamentos pendentes, redirecione com uma mensagem de sucesso e inclua os $linhasIgnoradas se não estiverem vazios - return redirect()->route('test2', ['id' => $request->numberProject]) - ->with('success', 'Equipamentos Criados: ' . $countNewEquipment) + return redirect()->route('articulated_2', ['id' => $request->numberProject]) + ->with('success', 'Equipamentos Criados: ' . $countEquipment) ->with('dangerLogs', $ignoredLines); } - + // return redirect()->route('articulated_2', ['id' => $request->numberProject]) + // ->with('success', 'Equipamentos Adicionados a Obra com sucesso: ' . $countEquipment); } - //Nao chega aqui ainda pois volta para a pagina com dados ja carregados. session(['form_data.step2' => $request->all()]); // Redirecione o Utilizador para a próxima etapa - return redirect('/test3'); + return redirect('/workStation_3'); } public function showStep3($company_projects_id) @@ -1410,7 +1582,7 @@ public function index() } $allPossibleAttributes = GeneralAttributesEquipment::all()->pluck('description')->toArray(); - return view('test2', ['equipments' => $equipments, 'allAttributes' => $allPossibleAttributes]); + return view('articulated_2', ['equipments' => $equipments, 'allAttributes' => $allPossibleAttributes]); // Retorne a view com os dados // return view('test', ['equipments' => $equipments]); } diff --git a/app/Http/Controllers/ExecutionProjectController.php b/app/Http/Controllers/ExecutionProjectController.php index 6d5097b8..3301eb8b 100755 --- a/app/Http/Controllers/ExecutionProjectController.php +++ b/app/Http/Controllers/ExecutionProjectController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers; +use App\Models\EquipmentWorkHistory; use App\Models\Plant; use App\Models\Unit; use Illuminate\Http\Request; @@ -103,15 +104,23 @@ public function getDataEquipment(Request $request) $receiveEquipmentsType = $request->get('receiveEquipmentsType'); - - $query = Equipment::with('equipmentType', 'unit') + // $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']); + ->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']); + ->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. @@ -158,6 +167,13 @@ public function getDataEquipment(Request $request) $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'; @@ -167,6 +183,12 @@ public function getDataEquipment(Request $request) 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 = '