From ba3ce035a8899436adfadbed3c8ceda38214a49e Mon Sep 17 00:00:00 2001 From: ygbanzato Date: Fri, 3 May 2024 13:39:05 +0100 Subject: [PATCH] updating the system of completed projects and finished work based on the admin approving all the Work equipment --- app/Http/Controllers/ClientController.php | 93 +- .../Controllers/CreateProjectController.php | 235 +++-- .../ExecutionProjectController.php | 123 ++- .../Controllers/PreparedProjectController.php | 24 +- .../Controllers/ProjectoDatacontroller.php | 39 +- app/Http/Middleware/CheckUserType.php | 4 +- .../ViewComposers/WorkstationComposer.php | 111 +-- app/Livewire/Execução/EquipmentsDashboard.php | 2 +- app/Models/AmbitsEquipment.php | 2 + app/Models/AssociationCompanyUser.php | 2 + app/Models/Company.php | 3 + app/Models/CompanyProject.php | 2 + app/Models/Equipment.php | 4 + app/Models/EquipmentComment.php | 33 + app/Models/EquipmentComments.php | 23 - app/Models/EquipmentWorkHistory.php | 3 + .../DataManagement/manageassets.blade.php | 14 +- resources/views/Admin/index.blade.php | 4 +- .../Templates/templateWorkstations.blade.php | 7 + .../projectsClients/articulated_2.blade.php | 16 +- .../executionProjectNew.blade.php | 251 ++++- .../showAmbitDetailProjectHistory.blade.php | 857 +++++++++--------- .../showDataDetailsProjectClient.blade.php | 37 +- ...tingAllEquipmentsForAmbitProject.blade.php | 1 - routes/web.php | 5 +- 25 files changed, 1211 insertions(+), 684 deletions(-) create mode 100644 app/Models/EquipmentComment.php delete mode 100755 app/Models/EquipmentComments.php diff --git a/app/Http/Controllers/ClientController.php b/app/Http/Controllers/ClientController.php index 70d01591..56ab7c52 100644 --- a/app/Http/Controllers/ClientController.php +++ b/app/Http/Controllers/ClientController.php @@ -44,8 +44,8 @@ public function getEquipmentsOfAmbit(Request $request) //Recebe os dados do Ambito $dataAmbit = AmbitsEquipment::where('ambits_id', $ambitId)->first(); - $receiveDataEquipments = Equipment::where('equipments.company_projects_id', $projectId) - ->join('equipment_work_historys', 'equipments.equipment_id', '=', 'equipment_work_historys.equipment_id') + $receiveDataEquipments = Equipment:: + 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'); @@ -56,6 +56,8 @@ public function getEquipmentsOfAmbit(Request $request) $equipmentWorkHistoryIds = $filteredAssociations->pluck('equipmentWorkHistorys_id'); $query = EquipmentWorkHistory::whereIn('equipmentWorkHistorys_id', $equipmentWorkHistoryIds) + ->where('equipment_status_project', 2) + ->where('equipment_work_historys.company_projects_id', $projectId) ->join('equipments', 'equipment_work_historys.equipment_id', '=', 'equipments.equipment_id') ->select([ 'equipments.*', @@ -103,6 +105,7 @@ public function showReportingForAmbitsProjectPdf($ambitId, $projectId) // Agora, em vez de buscar diretamente em Equipment, vamos pegar os detalhes via EquipmentWorkHistory $equipmentDetails = EquipmentWorkHistory::whereIn('equipmentWorkHistorys_id', $equipmentWorkHistoryIds) + ->where('equipment_status_project', 2) ->join('equipments', 'equipment_work_historys.equipment_id', '=', 'equipments.equipment_id') ->select([ 'equipments.*', @@ -175,31 +178,37 @@ public function getDataAmbitsOfProject(Request $request) // Recebe o id do Projecto atual $projectId = $request->get('projectId'); + // Recebe os IDS passados de todos os âmbitos do projeto atual $AmbitsIdString = $request->get('AmbitsIdString'); - $AmbitsIdArray = explode(",", $AmbitsIdString); // Converter de string para Array + // Converter de string para Array + $AmbitsIdArray = explode(",", $AmbitsIdString); + //Busca todos os Ambitos relativos aos ids enviados por request $query = AmbitsEquipment::whereIn('ambits_id', $AmbitsIdArray) ->select(['ambits_id', 'ambits_description']); return Datatables::of($query) + + //MESMO que supostamente sao equipamentos ja libedos, faz sentido indica equipamentos que ja foram libedos pelo Admin ->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) // Primeiro, juntar-se com equipment_work_historys ->join('equipment_work_historys', 'equipment_association_ambits.equipmentWorkHistorys_id', '=', 'equipment_work_historys.equipmentWorkHistorys_id') + // Filtra apenas os registros onde equipment_status_project é igual a 2 + ->where('equipment_work_historys.equipment_status_project', 2) + ->where('equipment_work_historys.company_projects_id', $projectId) // 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(); + ->join('equipments','equipment_work_historys.equipment_id', '=', 'equipments.equipment_id') + //filtrar pela company_projects_id + ->count(); // Retorna a contagem de equipamentos que atendem às condições }) ->addColumn('action', function ($dataAmbitProject) use ($projectId) { $actionBtn = ''; return $actionBtn; }) ->make(true); - } @@ -214,23 +223,39 @@ public function getDataEquipmentsOfProject(Request $request) { $projectId = $request->get('projectId'); - $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', - 'equipments.equipment_tag', - 'equipments.equipment_type_id', - 'ambits_equipments.ambits_description as ambits_description' - ]); + $initialQuery = Equipment:: + whereHas('equipmentWorkHistory', function ($query) use ($projectId) { + //Para a tabela com status = pending' deve ir equipamentos com status = 1 pois estao pendentes para Aprovar + // Para os restantes equipamentos vao para a tabela que lista os equipamentos da Obra,porem apenas os equipmentos com status = 0 + //Equipamentos concluidos e aprovados, nao vao entrar em nenhuma das 2 listas ate agora. + $query + ->where('equipment_status_project', 2) + ->where('company_projects_id',$projectId); + }); - $dataEquipentProject = $query->get(); + $dataEquipentProject = $initialQuery->get(); + + return Datatables::of($dataEquipentProject) + + ->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_name', function ($equipment) { + $firstEquipmentWorkHistory = $equipment->equipmentWorkHistory->first(); + return $firstEquipmentWorkHistory ? $firstEquipmentWorkHistory->equipmentAssociationAmbit->ambitsEquipment->ambits_description : 'N/A'; + }) + + ->addColumn('action', function ($dataEquipment) use ($projectId) { // Use a palavra-chave 'use' para passar $projectId + $actionBtn = ''; + return $actionBtn; + }) + ->make(true); // // Retornar a resposta para o DataTables @@ -247,14 +272,6 @@ public function getDataEquipmentsOfProject(Request $request) // ->make(true); - return Datatables::of($dataEquipentProject) - ->addColumn('action', function ($dataEquipment) use ($projectId) { // Use a palavra-chave 'use' para passar $projectId - $actionBtn = ''; - return $actionBtn; - }) - ->make(true); - - } @@ -264,6 +281,10 @@ public function showDataDetailsProjectClient($projectID) // Recebe os detalhes do Projecto. $receiveDataProject = CompanyProject::where('company_projects_id', $projectID)->first(); + + $receivePlant = Plant::where('plant_id', $receiveDataProject->plant_id)->first(); + $receiveDetailsCompany = Company::where('company_id', $receivePlant->company_id)->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 @@ -284,7 +305,7 @@ public function showDataDetailsProjectClient($projectID) // Recebe os dados de cada Ambito $receiveDataAmbitsProject = AmbitsEquipment::whereIn('ambits_id', $AmbitsId)->get(); - return view('userClient.showDataDetailsProjectClient', compact('receiveDataProject', 'receiveUnitsOfProject', 'receiveAllTypeEquipments', 'receiveDataAmbitsProject', 'AmbitsIdString')); + return view('userClient.showDataDetailsProjectClient', compact('receiveDetailsCompany', 'receiveDataProject', 'receiveUnitsOfProject', 'receiveAllTypeEquipments', 'receiveDataAmbitsProject', 'AmbitsIdString')); } @@ -378,7 +399,7 @@ public function getDataProjects(Request $request) ->addColumn('client', function ($item) { return $item->plant && $item->plant->company ? $item->plant->company->company_name : 'N/A'; }) - ->addColumn('action', function ($projectClient) use ($projectOrder) { + ->addColumn('action', function ($projectClient) use ($projectOrder) { $routeName = 'articulated_2'; if ($projectOrder == 2) { $routeName = 'preparedProject'; @@ -399,7 +420,7 @@ public function receiveProjectsClient() { $client = Auth::user()->user_id; // DD($client); - $recebeCompanyID = AssociationCompanyUser::where('user_id',$client)->first(); + $recebeCompanyID = AssociationCompanyUser::where('user_id', $client)->first(); @@ -445,7 +466,7 @@ public function reportingDataClient($clientID = null) $clientID = Auth::user()->user_id; } - $companyDetails = Company::where('company_id',$clientID)->first(); + $companyDetails = Company::where('company_id', $clientID)->first(); // Busca todas as Instalacoes com base no id do CLIENTE $allPlantsClient = Plant::where('company_id', $companyDetails->company_id)->get(); diff --git a/app/Http/Controllers/CreateProjectController.php b/app/Http/Controllers/CreateProjectController.php index c3a4b9c2..3f206f0d 100755 --- a/app/Http/Controllers/CreateProjectController.php +++ b/app/Http/Controllers/CreateProjectController.php @@ -309,6 +309,69 @@ public function addFurtherTasks(Request $request) } + // public function receiveEquipmentToAssociateTasks(Request $request) + // { + // $receiveIsptNumber = 0; + + // // Obter o maior ispt_number da tabela EquipmentWorkHistory que corresponde aos valores em Equipment + // $highestIsptNumber = EquipmentWorkHistory::select('equipment_work_historys.ispt_number') + // ->join('equipments', function ($join) { + // $join->on('equipments.equipment_id', '=', 'equipment_work_historys.equipment_id') + // ->on('equipments.company_projects_id', '=', 'equipment_work_historys.company_projects_id'); + // }) + // ->orderBy('equipment_work_historys.ispt_number', 'desc') + // ->first(); + + // // Se existir, ele busca o maior número e acrescenta mais um para adicionar um novo equipamento. + // if ($highestIsptNumber) { + + // $receiveIsptNumber = $highestIsptNumber->ispt_number + 1; + // } else { + // // Se não houver registros, comece com 1 + // $receiveIsptNumber = 1; + // } + + // $execution_order = 1; + + // foreach ($request->equipment as $equipment) { + // $equipmentModel = Equipment::where('equipment_id', $equipment['equipment_id'])->first(); + + // //Atualiza a tabela equipment para associar o equipamento a uma Obra. + // if ($equipmentModel) { + // $equipmentModel->company_projects_id = $request->receiveNumberProject; + // $equipmentModel->save(); + + // // Ja associado, criar dados nos Historico para depois ser possivel de acessar. + // $createEquipmentWorkHistory = new EquipmentWorkHistory; + // $createEquipmentWorkHistory->equipment_id = $equipment['equipment_id']; + // $createEquipmentWorkHistory->ispt_number = $receiveIsptNumber++; + // $createEquipmentWorkHistory->company_projects_id = $request->receiveNumberProject; + // $createEquipmentWorkHistory->save(); + + // //Criar associacao do equipamento ao Âmbito + // $AssociationEquipmentAmbit = new EquipmentAssociationAmbit; + // $AssociationEquipmentAmbit->equipment_type_id = $equipment['equipment_type_id']; + // $AssociationEquipmentAmbit->ambits_id = $equipment['ambit_id']; + // $AssociationEquipmentAmbit->equipmentWorkHistorys_id = $createEquipmentWorkHistory->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 = $createEquipmentWorkHistory->equipmentWorkHistorys_id; + // $JoinsEquipmentsWithTasks->execution_order = $execution_order++; + // $JoinsEquipmentsWithTasks->elemental_tasks_id = $TasksAssociationAmbit->elemental_tasks_id; + // $JoinsEquipmentsWithTasks->further_tasks_id = null; + // $JoinsEquipmentsWithTasks->inspection = 2; + // $JoinsEquipmentsWithTasks->save(); + // } + // } + // } + + // return redirect()->back()->with('success', 'Equipametos associados a Obra com Sucesso !'); + // } public function receiveEquipmentToAssociateTasks(Request $request) { $receiveIsptNumber = 0; @@ -324,7 +387,6 @@ public function receiveEquipmentToAssociateTasks(Request $request) // Se existir, ele busca o maior número e acrescenta mais um para adicionar um novo equipamento. if ($highestIsptNumber) { - $receiveIsptNumber = $highestIsptNumber->ispt_number + 1; } else { // Se não houver registros, comece com 1 @@ -341,26 +403,31 @@ public function receiveEquipmentToAssociateTasks(Request $request) $equipmentModel->company_projects_id = $request->receiveNumberProject; $equipmentModel->save(); - // Ja associado, criar dados nos Historico para depois ser possivel de acessar. - $createEquipmentWorkHistory = new EquipmentWorkHistory; - $createEquipmentWorkHistory->equipment_id = $equipment['equipment_id']; - $createEquipmentWorkHistory->ispt_number = $receiveIsptNumber++; - $createEquipmentWorkHistory->company_projects_id = $request->receiveNumberProject; - $createEquipmentWorkHistory->save(); + // Utiliza firstOrCreate para evitar duplicidades + $attributes = [ + 'equipment_id' => $equipment['equipment_id'], + 'company_projects_id' => $request->receiveNumberProject + ]; - //Criar associacao do equipamento ao Âmbito + $values = [ + 'ispt_number' => $receiveIsptNumber++ // Incrementa o número ISPT se criar um novo registro + ]; + + $createEquipmentWorkHistory = EquipmentWorkHistory::firstOrCreate($attributes, $values); + + //Criar associacao do equipamento ao Âmbito $AssociationEquipmentAmbit = new EquipmentAssociationAmbit; $AssociationEquipmentAmbit->equipment_type_id = $equipment['equipment_type_id']; $AssociationEquipmentAmbit->ambits_id = $equipment['ambit_id']; - $AssociationEquipmentAmbit->equipmentWorkHistorys_id = $createEquipmentWorkHistory->equipmentWorkHistorys_id; + $AssociationEquipmentAmbit->equipmentWorkHistorys_id = $createEquipmentWorkHistory->id; // Note que mudamos para id $AssociationEquipmentAmbit->save(); - //Recebe a tabela com as associoacoes entre Âmbitos e tarefas Elementares - $TasksAssociationAmbits = TasksAssociationAmbits::all()->where('ambits_equipment_id', $AssociationEquipmentAmbit->ambits_id); + //Recebe a tabela com as associações entre Âmbitos e tarefas Elementares + $TasksAssociationAmbits = TasksAssociationAmbits::where('ambits_equipment_id', $AssociationEquipmentAmbit->ambits_id)->get(); foreach ($TasksAssociationAmbits as $TasksAssociationAmbit) { $JoinsEquipmentsWithTasks = new OrderEquipmentTasks; - $JoinsEquipmentsWithTasks->equipmentWorkHistorys_id = $createEquipmentWorkHistory->equipmentWorkHistorys_id; + $JoinsEquipmentsWithTasks->equipmentWorkHistorys_id = $createEquipmentWorkHistory->id; // Note que mudamos para id $JoinsEquipmentsWithTasks->execution_order = $execution_order++; $JoinsEquipmentsWithTasks->elemental_tasks_id = $TasksAssociationAmbit->elemental_tasks_id; $JoinsEquipmentsWithTasks->further_tasks_id = null; @@ -373,6 +440,7 @@ public function receiveEquipmentToAssociateTasks(Request $request) return redirect()->back()->with('success', 'Equipametos associados a Obra com Sucesso !'); } + public function receiveUnitsForExcelTemplate($numberProject) { // Dados do Projecto @@ -713,12 +781,12 @@ public function createProjectForStep1() public function showStep1($company_projects_id) { $projects = CompanyProject::find($company_projects_id); - + $companies = Company::all(); $receiveDetailsPlant = Plant::where('plant_id', $projects->plant_id)->first(); - $receiveDetailsCompany = Company::where('company_id',$receiveDetailsPlant->company_id)->first(); + $receiveDetailsCompany = Company::where('company_id', $receiveDetailsPlant->company_id)->first(); // $receiveDetailsUser = User::where('user_id', $receiveDetailsPlant->user_id)->first(); // $receiveDetailsUser->plantName = $receiveDetailsPlant->plant_name; @@ -754,14 +822,14 @@ public function EditprocessStep1(Request $request) session(['form_data.step1' => $request->all()]); $receiveAllLogsProject = ProjectExcelLog::where('company_projects_id', $project->company_projects_id) - ->get() - ->groupBy('excel_name') - ->map(function ($group) { - return $group->sortByDesc('project_excel_logs_id')->first(); - }); + ->get() + ->groupBy('excel_name') + ->map(function ($group) { + return $group->sortByDesc('project_excel_logs_id')->first(); + }); return redirect()->route('articulated_2', ['projectID' => $project->company_projects_id]) - ->with('receiveAllLogsProject',$receiveAllLogsProject) + ->with('receiveAllLogsProject', $receiveAllLogsProject) ->with('success', 'Detalhes do Project atualizados!'); } @@ -772,76 +840,136 @@ public function removePendingEquipment($id) return back()->with('success', 'Equipamento pendente removido com sucesso!'); } + // public function CreateNewEquipmentFromPendingEquipment(Request $request, $id) + // { + // $checkPendingEquipment = PendingEquipment::findOrFail($id); + + // // dd($checkPendingEquipment); + + // //Para que serve ?? + // $counter = 2; + // $baseTag = $checkPendingEquipment->pending_equipment_tag; + // $baseDescription = $checkPendingEquipment->pending_equipment_description; + + // // Ciclo para verificar se ja existe um equipamento com o mesmo nome se existir vai criando com o contador iniciado a partir de (2) + // while (Equipment::where('equipment_tag', $baseTag . "({$counter})")->orWhere('equipment_description', $baseDescription . "({$counter})")->exists()) { + // $counter++; + // } + + // $newEquipment = new Equipment; + // $newEquipment->unit_id = $checkPendingEquipment->pending_equipment_unit_id; + // $newEquipment->equipment_type_id = $checkPendingEquipment->pending_equipment_type_id; + // $newEquipment->equipment_tag = $baseTag . "({$counter})"; + // $newEquipment->equipment_description = $baseDescription . "({$counter})"; + // $newEquipment->equipment_serial_number = $checkPendingEquipment->pending_equipment_serial_number; + // $newEquipment->equipment_brand = $checkPendingEquipment->pending_equipment_brand; + // $newEquipment->equipment_model = $checkPendingEquipment->pending_equipment_model; + // $newEquipment->company_projects_id = $checkPendingEquipment->pending_company_projects_id; + // $newEquipment->save(); + + // $newEquipmentWorkHistory = new EquipmentWorkHistory; + // $newEquipmentWorkHistory->equipment_id = $newEquipment->equipment_id; + // $newEquipmentWorkHistory->company_projects_id = $newEquipment->company_projects_id; + + // // Busca o maior ispt_number para o company_projects_id específico + // $lastIsptNumber = EquipmentWorkHistory::where('company_projects_id', $newEquipment->company_projects_id) + // ->max('ispt_number'); + + // // Se não houver registros, definimos o primeiro número para 1, caso contrário, incrementamos o último número encontrado + // $newIsptNumber = $lastIsptNumber ? $lastIsptNumber + 1 : 1; + + // // Agora, atribuímos o novo número ISPT ao registro de histórico de equipamento + // $newEquipmentWorkHistory->ispt_number = $newIsptNumber; + + // $newEquipmentWorkHistory->save(); + + + // $newEquipmentAssociationAmbits = new EquipmentAssociationAmbit; + // $newEquipmentAssociationAmbits->equipmentWorkHistorys_id = $newEquipmentWorkHistory->equipmentWorkHistorys_id; + // $newEquipmentAssociationAmbits->ambits_id = $request->EquipmentAmbit; + // $newEquipmentAssociationAmbits->equipment_type_id = $checkPendingEquipment->pending_equipment_type_id; + // $newEquipmentAssociationAmbits->save(); + + // //Recebe a tabela com as associoacoes entre Âmbitos e tarefas Elementares + // $TasksAssociationAmbits = TasksAssociationAmbits::all()->where('ambits_equipment_id', $newEquipmentAssociationAmbits->ambits_id); + + // foreach ($TasksAssociationAmbits as $TasksAssociationAmbit) { + // $JoinsEquipmentsWithTasks = new OrderEquipmentTasks; + // $JoinsEquipmentsWithTasks->equipmentWorkHistorys_id = $newEquipmentWorkHistory->equipmentWorkHistorys_id; + // $JoinsEquipmentsWithTasks->execution_order = null; + // $JoinsEquipmentsWithTasks->elemental_tasks_id = $TasksAssociationAmbit->elemental_tasks_id; + // $JoinsEquipmentsWithTasks->further_tasks_id = null; + // $JoinsEquipmentsWithTasks->inspection = 2; + // $JoinsEquipmentsWithTasks->save(); + // } + + + // $checkPendingEquipment->delete(); + + // return back()->with('success', 'Equipamento ' . $newEquipment->equipment_tag . ' criado com sucesso'); + // } + public function CreateNewEquipmentFromPendingEquipment(Request $request, $id) { $checkPendingEquipment = PendingEquipment::findOrFail($id); - // dd($checkPendingEquipment); - - //Para que serve ?? $counter = 2; $baseTag = $checkPendingEquipment->pending_equipment_tag; $baseDescription = $checkPendingEquipment->pending_equipment_description; - // Ciclo para verificar se ja existe um equipamento com o mesmo nome se existir vai criando com o contador iniciado a partir de (2) + // Ciclo para verificar se já existe um equipamento com o mesmo nome se existir vai criando com o contador iniciado a partir de (2) while (Equipment::where('equipment_tag', $baseTag . "({$counter})")->orWhere('equipment_description', $baseDescription . "({$counter})")->exists()) { $counter++; } - $newEquipment = new Equipment; - $newEquipment->unit_id = $checkPendingEquipment->pending_equipment_unit_id; - $newEquipment->equipment_type_id = $checkPendingEquipment->pending_equipment_type_id; - $newEquipment->equipment_tag = $baseTag . "({$counter})"; - $newEquipment->equipment_description = $baseDescription . "({$counter})"; - $newEquipment->equipment_serial_number = $checkPendingEquipment->pending_equipment_serial_number; - $newEquipment->equipment_brand = $checkPendingEquipment->pending_equipment_brand; - $newEquipment->equipment_model = $checkPendingEquipment->pending_equipment_model; - $newEquipment->company_projects_id = $checkPendingEquipment->pending_company_projects_id; - $newEquipment->save(); + $attributes = [ + 'unit_id' => $checkPendingEquipment->pending_equipment_unit_id, + 'equipment_type_id' => $checkPendingEquipment->pending_equipment_type_id, + 'equipment_tag' => $baseTag . "({$counter})", + 'equipment_description' => $baseDescription . "({$counter})", + 'company_projects_id' => $checkPendingEquipment->pending_company_projects_id + ]; - $newEquipmentWorkHistory = new EquipmentWorkHistory; - $newEquipmentWorkHistory->equipment_id = $newEquipment->equipment_id; - $newEquipmentWorkHistory->company_projects_id = $newEquipment->company_projects_id; + $newEquipment = Equipment::firstOrCreate($attributes); - // Busca o maior ispt_number para o company_projects_id específico - $lastIsptNumber = EquipmentWorkHistory::where('company_projects_id', $newEquipment->company_projects_id) - ->max('ispt_number'); + $newEquipmentWorkHistoryAttributes = [ + 'equipment_id' => $newEquipment->equipment_id, + 'company_projects_id' => $newEquipment->company_projects_id + ]; - // Se não houver registros, definimos o primeiro número para 1, caso contrário, incrementamos o último número encontrado + $lastIsptNumber = EquipmentWorkHistory::where('company_projects_id', $newEquipment->company_projects_id)->max('ispt_number'); $newIsptNumber = $lastIsptNumber ? $lastIsptNumber + 1 : 1; - // Agora, atribuímos o novo número ISPT ao registro de histórico de equipamento - $newEquipmentWorkHistory->ispt_number = $newIsptNumber; - - $newEquipmentWorkHistory->save(); + $valuesWorkHistory = [ + 'ispt_number' => $newIsptNumber, + 'equipment_status_project' => 0 + ]; + $newEquipmentWorkHistory = EquipmentWorkHistory::firstOrCreate($newEquipmentWorkHistoryAttributes, $valuesWorkHistory); $newEquipmentAssociationAmbits = new EquipmentAssociationAmbit; $newEquipmentAssociationAmbits->equipmentWorkHistorys_id = $newEquipmentWorkHistory->equipmentWorkHistorys_id; $newEquipmentAssociationAmbits->ambits_id = $request->EquipmentAmbit; - $newEquipmentAssociationAmbits->equipment_type_id = $checkPendingEquipment->pending_equipment_type_id; + $newEquipmentAssociationAmbits->equipment_type_id = $newEquipment->equipment_type_id; $newEquipmentAssociationAmbits->save(); - //Recebe a tabela com as associoacoes entre Âmbitos e tarefas Elementares - $TasksAssociationAmbits = TasksAssociationAmbits::all()->where('ambits_equipment_id', $newEquipmentAssociationAmbits->ambits_id); + + $TasksAssociationAmbits = TasksAssociationAmbits::where('ambits_equipment_id', $newEquipmentAssociationAmbits->ambits_id)->get(); foreach ($TasksAssociationAmbits as $TasksAssociationAmbit) { $JoinsEquipmentsWithTasks = new OrderEquipmentTasks; $JoinsEquipmentsWithTasks->equipmentWorkHistorys_id = $newEquipmentWorkHistory->equipmentWorkHistorys_id; - $JoinsEquipmentsWithTasks->execution_order = null; $JoinsEquipmentsWithTasks->elemental_tasks_id = $TasksAssociationAmbit->elemental_tasks_id; - $JoinsEquipmentsWithTasks->further_tasks_id = null; - $JoinsEquipmentsWithTasks->inspection = 2; $JoinsEquipmentsWithTasks->save(); } - $checkPendingEquipment->delete(); return back()->with('success', 'Equipamento ' . $newEquipment->equipment_tag . ' criado com sucesso'); } + public function processStep1(Request $request) { //NAO DEVE SER CRIAR UMA NOVA EMPRESA NA CRIACAO DA OBRA (era uma boa ideia para facilitar ao Admin ter que criar a empresa para Depois a Obra, mas e necessario pelo facto da autentificao de 2 factores e envio e email , entao devido essa adicoes, nao preciso atualmente fazer sentido criar isto) @@ -1264,7 +1392,7 @@ function normalize($value) // Registra a linha como ignorada se menos de 2 campos estiverem preenchidos ou se houver campos não preenchidos if ($nonEmptyFieldsCount > 2 && $nonEmptyFieldsCount < 5) { $equipmentPendingLogs[] = [ - 'typePendingLog' => 0 , + 'typePendingLog' => 0, 'line' => $i + 1, 'reason' => implode(', ', $missingFields), // Converte o array de campos faltantes para uma string ]; @@ -1409,6 +1537,7 @@ function normalize($value) $newEquipmentWorkHistory->equipment_id = $newEquipament->equipment_id; $newEquipmentWorkHistory->ispt_number = $isptNumber++; $newEquipmentWorkHistory->company_projects_id = $company_projects_id; + $newEquipmentWorkHistory->equipment_status_project = 0; $newEquipmentWorkHistory->save(); $ambit = AmbitsEquipment::where('ambits_description', $datas['ambit'])->first(); diff --git a/app/Http/Controllers/ExecutionProjectController.php b/app/Http/Controllers/ExecutionProjectController.php index 64f296da..06c9a87d 100755 --- a/app/Http/Controllers/ExecutionProjectController.php +++ b/app/Http/Controllers/ExecutionProjectController.php @@ -71,7 +71,6 @@ public function getDataEquipmentClient(Request $request) public function getDataEquipment(Request $request) { - //Variaveis recebidos da Obra em Planeamento (Filtros) $numberProject = $request->get('numberProject'); $receiveRespostUnitsSelect = $request->get('checkUnits'); @@ -527,13 +526,42 @@ public function receiveExecutionProject($ProjectId) } return $user; }); - // Retornando a view com os dados necessários - return view('projectsClients/executionProjectNew', [ - 'DatasProject' => $DatasProject, - 'equipmentsTypes' => $equipmentsTypes, - 'receiveCompany' => $receiveCompany, - 'filteredUsers' => $filteredUsers - ]); + + //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->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 Execussao 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) @@ -604,6 +632,85 @@ public function showQrcodesInProject($projectNumber) ->with('equipmentsProjects', $equipmentsProjects); } + + + // public function receiveDetailsEquipmentsProject(Request $request) + // { + // $numberProject = $request->input('receiveNumberProject'); + // $tableType = $request->input('tableType'); // Captura o tipo de tabela + + // // Para + // if ($tableType == 'pending') { + + // $initialQuery = Equipment::where('company_projects_id', $numberProject); + + // } else { + // // Lógica para a tabela 'normal' + // $initialQuery = Equipment::where('company_projects_id', $numberProject); + // } + + // $query = $initialQuery->get(); // Certifique-se de usar get() para retornar uma coleção + + // return DataTables::of($query) + // ->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; + // }) + // ->make(true); + // } + + public function receiveDetailsEquipmentsProject(Request $request) + { + $numberProject = $request->input('receiveNumberProject'); + $tableType = $request->input('tableType'); // Captura o tipo de tabela + + // Ajusta a 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 com status = pending' deve ir equipamentos com status = 1 pois estao pendentes para Aprovar + // Para os restantes equipamentos vao para a tabela que lista os equipamentos da Obra,porem apenas os equipmentos com status = 0 + //Equipamentos concluidos e aprovados, nao vao entrar em nenhuma das 2 listas ate agora. + $status = $tableType === 'pending' ? 1 : 0; + $query->where('equipment_status_project', $status); + }); + + $query = $initialQuery->get(); // Obtém a coleção de equipamentos com base nos critérios + + return DataTables::of($query) + ->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'; + }) + + //Vai ser 2 tipos de action, para as tabelas. + ->addColumn('action', function ($dataEquipment) use ($numberProject, $tableType) { + $equipmentStatus = $tableType === 'pending' ? 1 : 0; + $actionBtn = ''; + return $actionBtn; + }) + + ->make(true); + } + + + + // public function receiveEquipmentsExecutionProject($receiveNumberProject) // { // // Recebe os dados vindos da funcao 'data' criada na view diff --git a/app/Http/Controllers/PreparedProjectController.php b/app/Http/Controllers/PreparedProjectController.php index c355a055..226d75a4 100755 --- a/app/Http/Controllers/PreparedProjectController.php +++ b/app/Http/Controllers/PreparedProjectController.php @@ -126,49 +126,53 @@ class PreparedProjectController extends Controller public function showAllEquipmentsInProjectForQrCode($projectId) { $equipments = Equipment::where('company_projects_id', $projectId)->get(); - + $equipmentData = []; foreach ($equipments as $equipment) { $associatedEquipments = QrcodesAssociatedEquipment::where('equipment_id', $equipment->equipment_id)->get(); $associatedArray = []; - + foreach ($associatedEquipments as $associatedEquipment) { $qrCode = new QrCode($associatedEquipment->component_tag); $writer = new PngWriter(); $qrCodeImage = 'data:image/png;base64,' . base64_encode($writer->write($qrCode)->getString()); - + $associatedArray[] = [ 'id' => $associatedEquipment->id, 'component_tag' => $associatedEquipment->component_tag, 'qrCodeImage' => $qrCodeImage ]; } - + $equipmentData[] = [ 'equipment' => $equipment, 'associatedArray' => $associatedArray ]; } - + $detailsCompanyProject = CompanyProject::find($projectId); $detailsPlant = Plant::where('plant_id', $detailsCompanyProject->plant_id)->first(); $detailsCompany = Company::where('company_id', $detailsPlant->company_id)->first(); $logoPath = public_path('companies_logo/' . ($detailsCompany->company_logo ?: 'logoISPT4.0.jpg')); - + if (!file_exists($logoPath)) { $logoPath = public_path('companies_logo/logoISPT4.0.jpg'); } - + $html = view('projectsClients.showAllEquipmentsInProjectQrCodePdf', [ 'equipmentData' => $equipmentData, 'logoPath' => $logoPath ])->render(); - - $mpdf = new \Mpdf\Mpdf(['mode' => 'utf-8', 'format' => 'A4']); + + $mpdf = new Mpdf(['mode' => 'utf-8', 'format' => 'A4']); + + $mpdf->useSubstitutions = false; // Reduce processing + $mpdf->simpleTables = true; // Simplifies tables into basic HTML + $mpdf->WriteHTML($html); $mpdf->Output('equipamentos_projeto_' . $projectId . '.pdf', 'I'); } - + // public function showDetailsEquipmentForQrCode($equipmentId, $projectId) diff --git a/app/Http/Controllers/ProjectoDatacontroller.php b/app/Http/Controllers/ProjectoDatacontroller.php index af235015..cbc226d9 100755 --- a/app/Http/Controllers/ProjectoDatacontroller.php +++ b/app/Http/Controllers/ProjectoDatacontroller.php @@ -7,6 +7,7 @@ use App\Models\ControlEquipmentWorkstation; use App\Models\ElementalTasks; use App\Models\EquipmentAssociationAmbit; +use App\Models\EquipmentComment; use App\Models\EquipmentWorkHistory; use App\Models\TasksAssociationAmbits; use App\Models\Unit; @@ -146,9 +147,8 @@ public function checkProjectIsptNumber(Request $request, $projectId = null) } - public function showAmbitDetailsProjectHistory($projectID, $equipmentID) + public function showAmbitDetailsProjectHistory($equipmentStatus, $projectID, $equipmentID) { - $detailsProject = CompanyProject::where('company_projects_id', $projectID)->first(); $detailsCliente = Plant::where('plant_id', $detailsProject->plant_id)->first(); $detailsProject->user_id = $detailsCliente->user_id; @@ -255,7 +255,7 @@ public function showAmbitDetailsProjectHistory($projectID, $equipmentID) // dd($receiveAmbit); - return view('projectsClients.showAmbitDetailProjectHistory', compact('detailsProject', 'receiveAmbit', 'receiveAllTasksHistiory', 'detalsEquipment')); + return view('projectsClients.showAmbitDetailProjectHistory', compact('equipmentStatus', 'detailsProject', 'receiveAmbit', 'receiveAllTasksHistiory', 'detalsEquipment')); } @@ -349,7 +349,7 @@ public function testRelatorio() public function receiveUnitsManageAssets($receivePlantClientRelated) { - + $UnitsData = Unit::where('plant_id', $receivePlantClientRelated)->get(); @@ -739,4 +739,35 @@ public function receiveWorkstationProject($receiveNumberProject) }) ->toJson(); } + + public function changeEquipmentStatusOnProject(Request $request) + { + + $receivedetailsUser = auth()->user(); + + $detailsEquipmentWorkHistory = EquipmentWorkHistory:: + where('equipment_id', $request->equipmentID) + ->where('company_projects_id', $request->projectID) + ->where('equipment_status_project', 1) + ->first(); + + if ($request->choiseAdminForEquipment == 'approve') { + //Se for aprovado, libera o equipamento para relatorio. + $detailsEquipmentWorkHistory->equipment_status_project = 2 ; + $detailsEquipmentWorkHistory->save(); + } + + //Sempre vai criar o comentario, a diferenca a se o equipamento tem status : 2 o comanterio vai para o relatorio,se nao vai para os comentarios da Ws. + $createCommet= new EquipmentComment; + $createCommet->equipmentWorkHistorys_id = $detailsEquipmentWorkHistory->equipmentWorkHistorys_id; + $createCommet->user_id = $receivedetailsUser->user_id; + $createCommet->company_projects_id = $detailsEquipmentWorkHistory->company_projects_id; + $createCommet->creation_date = now(); + $createCommet->comment =$request->comment; + $createCommet->save(); + + return redirect()->route('ExecutionProject', ['projectID' => $request->projectID]) + ->with('success', 'Equipamento aprovado, liberado para relatório.'); + + } } diff --git a/app/Http/Middleware/CheckUserType.php b/app/Http/Middleware/CheckUserType.php index df979aa4..a5971054 100755 --- a/app/Http/Middleware/CheckUserType.php +++ b/app/Http/Middleware/CheckUserType.php @@ -78,8 +78,8 @@ protected function getAllowedRoutesForUserType($userType) 'deletePendingEquipments','CreateNewEquipmentFromPendingEquipment','removeEquipment','receiveEquipmentToAssociateTasks', 'createCompany','ShowPendingUser','register','download','projectDetails_11','editEquipment','EditprocessStep1','createWorkStations','workstationsAssociationTasks','finishCreatingProject', 'preparedProject','EditProjectForArticulated','companyEdit','reportingDataClient','ExecutionProject', - 'changeFromExecutionToPlanning','deleteWorkstation','deleteProject','showQrcodesInProject', - + 'changeFromExecutionToPlanning','deleteWorkstation','deleteProject','showQrcodesInProject','showDataDetailsProjectClient', + 'getDataAmbitsOfProject', 'showReportingForAmbitsProject','getEquipmentsOfAmbit','getDataEquipmentsOfProject', ]; diff --git a/app/Http/ViewComposers/WorkstationComposer.php b/app/Http/ViewComposers/WorkstationComposer.php index b4043cf2..ccf65e8f 100755 --- a/app/Http/ViewComposers/WorkstationComposer.php +++ b/app/Http/ViewComposers/WorkstationComposer.php @@ -18,12 +18,11 @@ class WorkstationComposer { public function compose(View $view) { - //Recebe o User pela sessao atual e recebe seus dados. + //Recebe os dados do Ws pela sessao atual. $userEmail = Auth::user()->email; $receiveDataEmail = User::where('email', $userEmail)->first(); $receiveDataWs = ConstructionWorkstation::where('name_workstations', $receiveDataEmail->user_name)->first(); - // Verifica equipamentos que tenho 2 dados com o departure_date = NULL e especificamente um dado tem o elemental_tasks_id = 9 e o outro igual a NULL. //Isto para ser possivel identificar equipamentos (psv-Provavelmente) que esta sendo feitas em simultanio suas pecas e nao deve ser diponivel ate uma de suas pecas tiverem deponivel. $excludedEquipmentsQuery = ControlEquipmentWorkstation::select('equipmentWorkHistorys_id') @@ -34,77 +33,23 @@ public function compose(View $view) ->havingRaw('SUM(CASE WHEN elemental_tasks_id IS NULL THEN 1 ELSE 0 END) = 1') // Assegura um registro com elemental_tasks_id NULL ->pluck('equipmentWorkHistorys_id'); // Obtém os IDs para exclusão - - // // Busca todos os equipamentos associados a um determinado projeto. - // $receiveAllEquipmentOfProject = Equipment::where('company_projects_id', $receiveDataWs->company_projects_id) - - // ->WhereHas('equipmentWorkHistory.controlEquipmentWorkstation', function ($subQuery) use ($excludedEquipmentsQuery) { - // $subQuery->whereNot('equipmentWorkHistorys_id', $excludedEquipmentsQuery); - // }) - // // Primeiro filtro: Equipamentos sem ocorrência em ControlEquipmentWorkstation - // ->whereDoesntHave('equipmentWorkHistory.controlEquipmentWorkstation') - - // // Segundo filtro: Equipamentos que ja tiverem um controlEquipmentWorkstation_ID criado uma dos Ws o fechou sem concluir por um metodo nao convencional e o script do servidor limpou o controlEquipmentWorkstation_ID - // ->orWhereHas('equipmentWorkHistory.controlEquipmentWorkstation', function ($subQuery) { - // $subQuery->whereNull('id_workstations') - // ->whereNull('elemental_tasks_id') - // ->whereNull('departure_date') - // ->where('status', 0); - // }) - // // Terceiro filtro: Equipamentos com todas as colunas sao prenchidas como deve ser, signifca que e uma tarefa concluida(finalizada) e agora vai criar um novo dado na controlEquipmentWorkstation para a proxima tarefa. - // ->orWhereHas('equipmentWorkHistory.controlEquipmentWorkstation', function ($subQuery) { - // $subQuery->whereNotNull('id_workstations') - // ->where(function ($innerQuery) { - // $innerQuery->whereNotNull('elemental_tasks_id') - // ->whereNotNull('departure_date') - // ->where('status', 1); - // }); - // }) - - // // No geral esta condicao verifica que e uma psv, e que tem a possiblidade de ficar diponivel para selecionar o equipamento , mesmo com ele ja dentro de uma Ws. - // // Adiciona condição para PSV (equipment_type_id = 3) - // ->orWhere(function ($query) { - // // Verifica no sistema se for uma 'PSV' , mesmo apos entrar como @Corpo, ou pelo @Obutador deve deixar o outro disponivel. - // $query->whereHas('equipmentType', function ($typeQuery) { - // $typeQuery->where('equipment_type_id', 3); - // }) - // ->whereHas('equipmentWorkHistory.controlEquipmentWorkstation', function ($subQuery) { - // $subQuery->where('status', 1) - // ->whereNull('departure_date') - // ->where(function ($taskQuery) { - // $taskQuery->where('elemental_tasks_id', 9) - // ->orWhereNull('elemental_tasks_id'); - // }); - // }); - // }) - // // Último filtro: Equipamentos cujo equipmentWorkHistorys_id NÃO estão na lista excluída. - // ->whereDoesntHave('equipmentWorkHistory.controlEquipmentWorkstation', function ($subQuery) use ($excludedEquipmentsQuery) { - // // Aqui é onde verificamos se o equipmentWorkHistorys_id NÃO está contido na lista excluída. - // $subQuery->whereIn('equipmentWorkHistorys_id', $excludedEquipmentsQuery); - // }) - // ->get() - // ->map(function ($equipment) { - // if (!$equipment->equipmentWorkHistory->isEmpty()) { - // $equipmentWorkHistory = $equipment->equipmentWorkHistory->first(); - // $equipment->equipmentWorkHistoryId = $equipmentWorkHistory->equipmentWorkHistorys_id; - // } else { - // $equipment->equipmentWorkHistoryId = null; - // } - // return $equipment; - // }); - + //Onde estava o antigo Code // Busca todos os equipamentos associados a um determinado projeto. $receiveAllEquipmentOfProject = Equipment::where('company_projects_id', $receiveDataWs->company_projects_id) // Use whereDoesntHave para excluir os equipamentos cujos IDs de histórico estão no array excluído ->where(function ($query) use ($excludedEquipmentsQuery) { + // Agrupa as condições para aplicar corretamente a lógica de exclusão e inclusão $query->whereDoesntHave('equipmentWorkHistory.controlEquipmentWorkstation', function ($subQuery) use ($excludedEquipmentsQuery) { + // Exclui os equipamentos cujos IDs de histórico estão no array excluído $subQuery->whereIn('equipmentWorkHistorys_id', $excludedEquipmentsQuery); }) ->orWhere(function ($query) { + // Aplica o segundo filtro somente aos equipamentos que não foram excluídos pelo primeiro + //Libera novamente o equipamento ao concluir uma tarefa. $query->whereHas('equipmentWorkHistory.controlEquipmentWorkstation', function ($subQuery) { $subQuery->whereNotNull('id_workstations') ->whereNotNull('elemental_tasks_id') @@ -154,12 +99,13 @@ public function compose(View $view) // Inicializa um array para armazenar o status de cada equipamento $equipmentStatus = []; - foreach ($receiveAllEquipmentOfProject as $equipment) { + // Agora 'equipmentWorkHistoryId' contém um único ID, então não usamos 'pluck' $workHistoryId = $equipment->equipmentWorkHistoryId; // Obter ID do histórico de trabalho diretamente // Verifica se existe um workHistoryId antes de prosseguir + //POREM POR NORMA, TODOS DEVEM TER if (is_null($workHistoryId)) { continue; // Se não houver histórico de trabalho, continua para o próximo equipamento } @@ -210,16 +156,30 @@ public function compose(View $view) ->groupBy('elemental_tasks_id') ->pluck('total', 'elemental_tasks_id'); // Contagem de tarefas nas estações de trabalho - // Verificar se todas as tarefas foram concluídas pelo menos uma vez - $allTasksCompleted = $taskIds->every(function ($taskId) use ($workstationTaskCounts) { - return isset ($workstationTaskCounts[$taskId]) && $workstationTaskCounts[$taskId] >= 1; + // Vai verificar diretamente na base de dados , busca todos os dados do equipmentWorkHistorys_id, nesta obra e verificar com base na colecao recebida, se entre todos os seus valores, tem pelo menos um elemental_tasks_id, presente na variavel $taskIds + $taskCountsInControlRecords = ControlEquipmentWorkstation::where('equipmentWorkHistorys_id', $workHistoryId) + ->whereNotNull('departure_date') + ->whereIn('elemental_tasks_id', $taskIds) + ->groupBy('elemental_tasks_id') + ->select('elemental_tasks_id', DB::raw('COUNT(*) as count')) + ->pluck('count', 'elemental_tasks_id'); + + // Verifica se todas as tarefas foram concluídas pelo menos uma vez + $allTasksCompleted = $taskIds->every(function ($taskId) use ($taskCountsInControlRecords) { + return isset ($taskCountsInControlRecords[$taskId]) && $taskCountsInControlRecords[$taskId] > 0; }); - if ($allTasksCompleted && $workstationTaskCounts->count() >= $taskIds->count()) { - $completedEquipments->push($equipment); // Adicionar equipamento à lista de concluídos + //$allTasksCompleted vai ter TRUE, apenas quando se verificar todos as tarefas foram feitas no equipamento. + if ($allTasksCompleted) { + $completedEquipments->push($equipment); + + //Se o equipamento for verificado como concluido, altera o seu status na Obra, para o mesmo ser indicado como um equipamento pendente a aplovacao de Admin. + $changeEquipmentStatus = EquipmentWorkHistory::where('equipmentWorkHistorys_id',$equipment->equipmentWorkHistoryId)->first(); + $changeEquipmentStatus->equipment_status_project = 1; + $changeEquipmentStatus->save(); } } - + // Remover equipamentos concluídos da coleção original $receiveAllEquipmentOfProject = $receiveAllEquipmentOfProject->reject(function ($equipment) use ($completedEquipments) { return $completedEquipments->contains($equipment); @@ -227,12 +187,20 @@ public function compose(View $view) $equipmentIds = array_keys($equipmentStatus); - // dd($equipmentIds); // Obtendo os registros QrcodesAssociatedEquipment para esses equipamentos - $receiveQrcodeEquipmentsProject = QrcodesAssociatedEquipment::whereIn('equipment_id', $equipmentIds) - ->get(); + $receiveQrcodeEquipmentsProject = QrcodesAssociatedEquipment::whereIn('equipment_id', $equipmentIds)->get(); + // Extrai os IDs de equipamentos dos equipamentos completados + $completedEquipmentIds = $completedEquipments->pluck('equipment_id')->toArray(); + + // Filtra a coleção $receiveQrcodeEquipmentsProject para excluir registros com equipment_id em $completedEquipmentIds + $filteredQrcodeEquipments = $receiveQrcodeEquipmentsProject->reject(function ($qrcodeEquipment) use ($completedEquipmentIds) { + return in_array($qrcodeEquipment->equipment_id, $completedEquipmentIds); + }); + + // Se você desejar, pode reatribuir a coleção filtrada de volta à variável original + $receiveQrcodeEquipmentsProject = $filteredQrcodeEquipments; $filteredQrcodeEquipments = $receiveQrcodeEquipmentsProject->filter(function ($qrcodeEquipment) use ($equipmentStatus) { // Exclui 'Flange' @@ -241,7 +209,6 @@ public function compose(View $view) } - // Obtém o status do equipamento atual $equipmentId = $qrcodeEquipment->equipment_id; $status = $equipmentStatus[$equipmentId] ?? null; diff --git a/app/Livewire/Execução/EquipmentsDashboard.php b/app/Livewire/Execução/EquipmentsDashboard.php index f2678def..e7e6f193 100755 --- a/app/Livewire/Execução/EquipmentsDashboard.php +++ b/app/Livewire/Execução/EquipmentsDashboard.php @@ -34,7 +34,6 @@ public function mount($datasProject) $this->lastUpdated = now()->format('Y-m-d H:i'); - // chama a funcao e envia a variavel datasProject recebido da view principal $this->refreshDataEquipments($datasProject); } @@ -109,6 +108,7 @@ public function refreshDataEquipments($datasProject) // Conta quantas vezes o equipamento aparece em OrderEquipmentTasks $tasksCount = OrderEquipmentTasks::where('equipmentWorkHistorys_id', $equipment->equipmentWorkHistorys_id)->count(); + // ira receber varios dados para o array sendo array[key:equipment_id,valor:quantidade de vezes que o equipment_id se repete na tabela 'OrderEquipmentTasks'] $equipmentCounts[$equipment->equipment_id] = $tasksCount; diff --git a/app/Models/AmbitsEquipment.php b/app/Models/AmbitsEquipment.php index 60e4bb84..419c11be 100755 --- a/app/Models/AmbitsEquipment.php +++ b/app/Models/AmbitsEquipment.php @@ -13,6 +13,8 @@ class AmbitsEquipment extends Model // protected $primaryKey = 'ambits_equipment_id'; protected $primaryKey = 'ambits_id'; + protected $fillable = ['ambits_id', 'ambits_description', 'equipment_type_id']; + public $timestamps = false; diff --git a/app/Models/AssociationCompanyUser.php b/app/Models/AssociationCompanyUser.php index 0fe1b665..b0637d63 100644 --- a/app/Models/AssociationCompanyUser.php +++ b/app/Models/AssociationCompanyUser.php @@ -13,4 +13,6 @@ class AssociationCompanyUser extends Model public $timestamps = false; + protected $fillable = ['association_company_user_id', 'company_id', 'user_id']; + } diff --git a/app/Models/Company.php b/app/Models/Company.php index e58b80d6..5b035e6a 100644 --- a/app/Models/Company.php +++ b/app/Models/Company.php @@ -12,6 +12,9 @@ class Company extends Model protected $primaryKey = 'company_id'; + protected $fillable = ['company_id', 'company_name', 'company_logo']; + + public function plants(){ return $this->hasMany(Plant::class,'company_id', 'company_id'); } diff --git a/app/Models/CompanyProject.php b/app/Models/CompanyProject.php index 1158bba5..6158467d 100755 --- a/app/Models/CompanyProject.php +++ b/app/Models/CompanyProject.php @@ -12,6 +12,8 @@ class CompanyProject extends Model protected $primaryKey = 'company_projects_id'; + protected $fillable = ['company_projects_id', 'plant_id', 'project_company_number','project_ispt_number','company_project_description','project_ispt_responsible','project_company_responsible','date_started','end_date','order_project']; + public $timestamps = false; public function plant(){ diff --git a/app/Models/Equipment.php b/app/Models/Equipment.php index 360531c2..0f47e399 100755 --- a/app/Models/Equipment.php +++ b/app/Models/Equipment.php @@ -20,6 +20,10 @@ class Equipment extends Model protected $primaryKey = 'equipment_id'; + protected $fillable = ['unit_id', 'equipment_type_id', 'equipment_tag', 'equipment_description', 'company_projects_id']; + + + public function unit() { diff --git a/app/Models/EquipmentComment.php b/app/Models/EquipmentComment.php new file mode 100644 index 00000000..5046ae9f --- /dev/null +++ b/app/Models/EquipmentComment.php @@ -0,0 +1,33 @@ +belongsTo(EquipmentWorkHistory::class, 'equipmentWorkHistorys_id'); + } + + public function user() + { + return $this->belongsTo(User::class, 'user_id'); + } + + public function companyProject() + { + return $this->belongsTo(CompanyProject::class, 'company_projects_id'); + } +} diff --git a/app/Models/EquipmentComments.php b/app/Models/EquipmentComments.php deleted file mode 100755 index 63e53372..00000000 --- a/app/Models/EquipmentComments.php +++ /dev/null @@ -1,23 +0,0 @@ -belongsTo(Equipment::class, 'equipment_id', 'equipment_id'); - } -} diff --git a/app/Models/EquipmentWorkHistory.php b/app/Models/EquipmentWorkHistory.php index a851b803..3829d625 100644 --- a/app/Models/EquipmentWorkHistory.php +++ b/app/Models/EquipmentWorkHistory.php @@ -15,6 +15,9 @@ class EquipmentWorkHistory extends Model protected $primaryKey = 'equipmentWorkHistorys_id'; + protected $fillable = ['equipmentWorkHistorys_id', 'equipment_id', 'ispt_number','company_projects_id','equipment_status_project']; + + public function equipment() { return $this->belongsTo(Equipment::class, 'equipment_id', 'equipment_id'); diff --git a/resources/views/Admin/DataManagement/manageassets.blade.php b/resources/views/Admin/DataManagement/manageassets.blade.php index c9e717bc..cbc5919f 100755 --- a/resources/views/Admin/DataManagement/manageassets.blade.php +++ b/resources/views/Admin/DataManagement/manageassets.blade.php @@ -24,19 +24,6 @@
- {{--
- -
--}} -
@@ -115,6 +102,7 @@ class="form-control"> @endsection @section('scriptsTemplateAdmin') + + @endsection diff --git a/resources/views/projectsClients/executionProjectNew.blade.php b/resources/views/projectsClients/executionProjectNew.blade.php index 06e6629d..f2e17ed1 100755 --- a/resources/views/projectsClients/executionProjectNew.blade.php +++ b/resources/views/projectsClients/executionProjectNew.blade.php @@ -23,6 +23,22 @@ + @if (session('success')) +
+ + +
+ + @endif +
@@ -90,13 +106,15 @@
- +
- +
- +
@@ -145,6 +164,61 @@
@livewire('execução.equipments-dashboard', ['datasProject' => $DatasProject], key($DatasProject->company_projects_id)) + +
+ +
+

Lista de equipamentos da Obra

+
+ + +
+ + + + + + + + + + + + +
TagDescriçãoTipo EquipamentoFabricaÂmbitoAção
+ +
+
+ + + +
+ +
+

Concluidos, por Aprovar

+
+ + +
+ + + + + + + + + + + + +
TagDescriçãoTipo EquipamentoFabricaÂmbitoAção
+ +
+
+ +
@@ -169,7 +243,7 @@ @foreach ($filteredUsers as $user) - {{ $user->nomenclature_workstation}} + {{ $user->nomenclature_workstation }} {{ $user->email }} {{ $user->realPassword }} @@ -230,6 +304,169 @@ @endsection @section('scriptsTemplateAdmin') + {{-- Antigocode para funcioanr o yajra, porem apenas para uma tabela, quando concluir osyajrada pagina,pode apagar. --}} + {{-- --}} + + {{-- --}} + + + + + + + + + + + + + - + - -