diff --git a/app/Http/Controllers/CreateProjectController.php b/app/Http/Controllers/CreateProjectController.php index 3da6df50..9ed594ee 100644 --- a/app/Http/Controllers/CreateProjectController.php +++ b/app/Http/Controllers/CreateProjectController.php @@ -18,12 +18,224 @@ use App\Models\PendingEquipment; use App\Models\AmbitsEquipment; use App\Models\EquipmentAssociationAmbit; +use App\Models\ConstructionWorkstation; +use App\Models\OrderEquipmentTasks; +use App\Models\FurtherTasks; +use App\Models\WorkstationsAssociationTasks; class CreateProjectController extends Controller { + public function deleteWorkstation($name) + { + + $workstation = ConstructionWorkstation::where('name_workstations', $name)->first(); + if ($workstation) { + $workstation->delete(); + return back()->with('success', 'Posto de Trabalho removido com sucesso!'); + } + return back()->with('danger', 'Posto de Trabalho não encontrado!'); + } + + public function AddNomenclatureWorkstation(Request $request) + { + foreach ($request->nameWorkstations as $key => $value) { + // Procurar a Workstation pelo ID + $workstation = ConstructionWorkstation::where('name_workstations', $key) + ->first(); + if ($workstation) { + // Atualizar o valor do campo nomenclature_workstation + $workstation->nomenclature_workstation = $value; + $workstation->save(); + } + } + + // Redirecionar de volta com uma mensagem de sucesso + return back()->with('success', 'Nome da estação de trabalho atualizado com sucesso!'); + } + + + public function removeProjectEquipment(Request $request) + { + + $equipment = Equipment::find($request->EquipmentID); + + if ($request->removalType == 'total') { + $equipment->delete(); + + return back()->with('success', 'Equipamento Excluido com sucesso!'); + } else + $equipment->company_projects_id = null; + $equipment->save(); + + return back()->with('success', 'Equipamento retirado da obra !'); + } + public function EditEquipmentsProjects(Request $request) + { + // dd($request); + // Localiza o equipment pelo numberProject + $equipment = Equipment::find($request->equipmentId); + + // Atualiza os campos + $equipment->equipment_tag = $request->tag; + $equipment->equipment_description = $request->equipmentDescription; + $equipment->equipment_serial_number = $request->serialNumberEquipment; + $equipment->equipment_brand = $request->equipmentBrand; + $equipment->equipment_model = $request->equipmentModel; + + $equipment->save(); + + if ($request->input('attributes')) { + foreach ($request->input('attributes') as $key => $value) { + // Verifica se o valor é null e a chave é um número (correspondendo aos general_attributes_equipment_id) + if ($value == null && is_numeric($key)) { + // Procura o registro relevante em SpecificAttributesEquipmentType + $specificAttributes = SpecificAttributesEquipmentType::where('equipment_id', $request->equipmentId) + ->where('general_attributes_equipment_id', $key) + ->first(); + + // Se o registro existir, o deleta + if ($specificAttributes) { + $specificAttributes->delete(); + } + } + // Se o valor não for null, atualiza ou cria um novo registro + elseif ($value !== null && is_numeric($key)) { + + // Procura o registro relevante em SpecificAttributesEquipmentType + $specificAttributes = SpecificAttributesEquipmentType::where('equipment_id', $request->equipmentId) + ->where('general_attributes_equipment_id', $key) + ->first(); + + // Se o registro existir, atualiza o valor + if ($specificAttributes) { + $specificAttributes->specific_attributes_value = $value; + $specificAttributes->save(); + } + // Se não existir, cria um novo + else { + // Cria um novo registro em SpecificAttributesEquipmentType + $specificAttributes = new SpecificAttributesEquipmentType(); + $specificAttributes->equipment_id = $request->equipmentId; + $specificAttributes->equipment_type_id = $equipment->equipment_type_id; + $specificAttributes->general_attributes_equipment_id = $key; + $specificAttributes->specific_attributes_value = $value; + $specificAttributes->save(); + } + } + } + } + + $executionOrder = 1; // Inicia a contagem da ordem de execução + + foreach ($request->input('ordemTasks') as $key => $value) { + // Procura o registro relevante em OrderEquipmentTasks + $orderEquipmentTask = OrderEquipmentTasks::where('equipment_id', $request->equipmentId) + ->where('elemental_tasks_id', $key) + ->first(); + + // Se o valor é 'on' + if ($value === "on") { + // Se o registro não existir, cria um novo + if (!$orderEquipmentTask) { + $orderEquipmentTask = new OrderEquipmentTasks(); + $orderEquipmentTask->equipment_id = $request->equipmentId; + $orderEquipmentTask->elemental_tasks_id = $key; + } + // Atualiza a ordem de execução independentemente do registro ser novo ou não + $orderEquipmentTask->execution_order = $executionOrder; + $orderEquipmentTask->save(); + + // Incrementa a ordem de execução para o próximo 'on' + $executionOrder++; + } + // Se o valor é 'off' e o registro existir, o deleta + elseif ($value === "off" && $orderEquipmentTask) { + $orderEquipmentTask->delete(); + } + } + + // Atualiza a ordem de execução dos restantes 'on' após as remoções + $remainingOrderEquipmentTasks = OrderEquipmentTasks::where('equipment_id', $request->equipmentId) + ->where('execution_order', '>=', $executionOrder) + ->orderBy('execution_order', 'asc') + ->get(); + + foreach ($remainingOrderEquipmentTasks as $orderEquipmentTask) { + $orderEquipmentTask->execution_order = $executionOrder; + $orderEquipmentTask->save(); + $executionOrder++; + } + + // Obtém todas as tarefas na ordem correta + $orderTasks = OrderEquipmentTasks::where('equipment_id', $request->equipmentId) + ->orderBy('execution_order', 'asc') + ->get(); + + // Cria uma matriz associativa para armazenar o elemental_tasks_id e o execution_order + $taskExecutionOrders = []; + foreach ($orderTasks as $task) { + $taskExecutionOrders[$task->elemental_tasks_id] = $task->execution_order; + } + + + + // Retorna uma resposta + return redirect()->route('test2', ['id' => $request->numberProject]) + ->with('success', 'Equipamento ' . $equipment->equipment_tag . ' Editado com Sucesso!!!') + ->with('taskExecutionOrders', $taskExecutionOrders); + } + public function showJson($id) + { + $attributes = SpecificAttributesEquipmentType::where('equipment_id', $id)->get(); + $OrdemTasks = OrderEquipmentTasks::where('equipment_id', $id)->get(); + + return response()->json([ + 'attributes' => $attributes, + 'OrdemTasks' => $OrdemTasks + ]); + } + + + public function createWorkStations(Request $request) + { + // Pega o número de estações de trabalho do request + $numberWorkstations = $request->numberWorkstations; + + // Pega o número do projeto do request + $numberProject = $request->numberProject; + + $listWorkstations = ConstructionWorkstation::where('company_projects_id', $numberProject)->get(); + + // Pega o último elemento da lista + $lastWorkstation = $listWorkstations->last(); + + // Se houver uma estação de trabalho anterior, extrai o número dela + $startNumber = 1; + if ($lastWorkstation) { + $parts = explode('-', $lastWorkstation->name_workstations); + $startNumber = intval(str_replace('workstation', '', $parts[0])) + 1; + } + + // Loop para criar as estações de trabalho + for ($i = $startNumber; $i < $startNumber + $numberWorkstations; $i++) { + $workstation = new ConstructionWorkstation(); + $workstation->name_workstations = 'workstation' . $i . '-' . $numberProject; + $workstation->company_projects_id = $numberProject; + $workstation->save(); + } + + // Redireciona para onde você quiser após a criação das workstations + return redirect()->route('test3', ['id' => $request->numberProject]) + ->with('success', $numberWorkstations . ' Postos de Trabalho criados !!!') + ->with('listWorkstations', $listWorkstations); + } + + + // Funcao apenas para retornar os dados necessarios para a view criar uma Obra. - public function createProjectForStep1(){ + public function createProjectForStep1() + { $companies = User::where('type_users', 3)->get(); // Apos terminar nao vai ficar step 1 @@ -32,37 +244,39 @@ public function createProjectForStep1(){ // Progress Bar //Devolve para a primeira para na descricao do projecto apenas user com ID 3, quer dizer que apenas as "empresas" public function showStep1($company_projects_id) - { + { $projects = CompanyProject::find($company_projects_id); $companies = User::where('type_users', 3)->get(); return view('projectsClients/projectDetails_1', ['step' => 1], ['companies' => $companies]) - ->with('projects',$projects); + ->with('projects', $projects); } // Se forem alterados dados dos Detalhes da Obra, vai ser alterado - public function EditprocessStep1(Request $request){ - + public function EditprocessStep1(Request $request) + { } - public function removePendingEquipment($id){ + public function removePendingEquipment($id) + { $equipment = PendingEquipment::findOrFail($id); $equipment->delete(); return back()->with('success', 'Equipamento pendente removido com sucesso!'); } - public function CreateNewEquipmentFromPendingEquipment(Request $request, $id){ + public function CreateNewEquipmentFromPendingEquipment(Request $request, $id) + { $checkPendingEquipment = PendingEquipment::findOrFail($id); $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; @@ -84,9 +298,9 @@ public function CreateNewEquipmentFromPendingEquipment(Request $request, $id){ $checkPendingEquipment->delete(); - return back()->with('success', 'Equipamento '.$newEquipment->equipment_tag.' criado com sucesso'); + return back()->with('success', 'Equipamento ' . $newEquipment->equipment_tag . ' criado com sucesso'); } - + public function processStep1(Request $request) { @@ -170,8 +384,8 @@ public function showStep2($company_projects_id) $listEquipmentsProjects = Equipment::with(['unit', 'equipmentType', 'equipmentAssociationAmbit.ambitsEquipment', 'specificAttributes' => function ($query) { $query->orderBy('specific_attributes_value', 'asc'); }]) - ->where('company_projects_id', $company_projects_id) - ->get(); + ->where('company_projects_id', $company_projects_id) + ->get(); $pendingEquipments = PendingEquipment::where('pending_company_projects_id', $numberProject)->get(); @@ -251,7 +465,7 @@ public function createEquipmentManual(Request $request) // ID do equipamento criado $equipmentID = $newEquipmentProject->equipment_id; - + // Verifica os campos do Card_do tipo de valvula selecionado (Ex: psv_card) e de acordo com os campos preenchidos se for de atributos especificos, ele compara o 'name' dos inputs com os 'general_attributes_equipment_description' da tabela : GeneralAttributesEquipment e associa $checkAtributs = GeneralAttributesEquipment::whereIn('general_attributes_equipment_description', array_keys($request->all())) @@ -274,7 +488,7 @@ public function createEquipmentManual(Request $request) $AddAtributsEquipments = new SpecificAttributesEquipmentType; $AddAtributsEquipments->equipment_id = $equipmentID; $AddAtributsEquipments->equipment_type_id = $request->equipmentTypeId; - $AddAtributsEquipments->specific_attributes_equipment_type_id = $receivesAssociationAttribute['general_attributes_equipment_id']; + $AddAtributsEquipments->general_attributes_equipment_id = $receivesAssociationAttribute['general_attributes_equipment_id']; $AddAtributsEquipments->specific_attributes_value = $receivesAssociationAttribute['value']; $AddAtributsEquipments->save(); } @@ -291,7 +505,8 @@ public function createEquipmentManual(Request $request) ->with('success', 'Equipamento criado com sucesso') ->with('listEquipmentsProjects', $listEquipmentsProjects); } - public function receiveIdEquipment(Equipment $equipment){ + public function receiveIdEquipment(Equipment $equipment) + { // return response()->json($equipment); return view('projectsClients/articulated_2', ['equipment' => $equipment]); } @@ -422,7 +637,7 @@ public function processStep2(Request $request) $specificAttribute->equipment_id = $receveEquipment_ID; $specificAttribute->equipment_type_id = $receveEquipament_type_ID; - $specificAttribute->specific_attributes_equipment_type_id = $generalAttribute->general_attributes_equipment_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]; @@ -453,14 +668,46 @@ public function processStep2(Request $request) return redirect('/test3'); } - public function showStep3() + public function showStep3($company_projects_id) { - // Verifique se a etapa 2 foi concluída - // if (!session('form_data.step2')) { - // return redirect('/test2'); - // } + //Sempre que entrar na view ja verifica se existe 'Workstations' preparadas para esta obra. + $listWorkstations = ConstructionWorkstation::where('company_projects_id', $company_projects_id)->get(); + $equipments = Equipment::where('company_projects_id', $company_projects_id) + ->get(); - return view('projectsClients/workStation_3', ['step' => 3]); + $futherTasks = FurtherTasks::where('company_projects_id', $company_projects_id) + ->get(); + + return view('projectsClients/workStation_3', ['step' => 3, 'numberProject' => $company_projects_id]) + ->with('listWorkstations', $listWorkstations) + ->with('equipments', $equipments) + ->with('futherTasks', $futherTasks); + } + + public function workstationsAssociationTasks(Request $request) + { + $workStation = ConstructionWorkstation::where('id_workstations', $request->idWorkStation)->first(); + + if ($workStation) { + $workStation->nomenclature_workstation = $request->nameWorkstation; + $workStation->save(); + } + // então, iteramos sobre as três listas de tarefas e as associamos à estação de trabalho + $taskTypes = ['generalTasks', 'PsvTasks', 'CvTasks']; + + foreach ($taskTypes as $taskType) { + if (isset($request->$taskType)) { + foreach ($request->$taskType as $taskId) { + $taskAssociation = new WorkstationsAssociationTasks; + $taskAssociation->id_workstations = $workStation->id_workstations; + $taskAssociation->elemental_tasks_id = $taskId; // assumindo que $taskId é o id da tarefa + $taskAssociation->company_projects_id = $workStation->company_projects_id; + $taskAssociation->save(); + } + } + } + // Redirecionar de volta com uma mensagem de sucesso + return back()->with('success', 'Posto de trabalho : '.$workStation->name_workstations.' atualizado com sucesso!'); } public function processStep3(Request $request) @@ -599,6 +846,12 @@ public function getAmbits($equipmentType) return response()->json($ambits); } + public function getAttributes($id) + { + $equipment = Equipment::with('specificAttributes')->find($id); + return response()->json($equipment->specificAttributes); + } + // public function createEquipamentProject(Request $request) // { // $file = $request->file('documento'); @@ -674,7 +927,7 @@ public function getAmbits($equipmentType) // } // } - + // public function createEquipamentProject(Request $request) diff --git a/app/Http/Controllers/ProjectoDatacontroller.php b/app/Http/Controllers/ProjectoDatacontroller.php index c14a3185..4640f1e7 100644 --- a/app/Http/Controllers/ProjectoDatacontroller.php +++ b/app/Http/Controllers/ProjectoDatacontroller.php @@ -28,7 +28,7 @@ public function ManageAssets() ->join('users', 'plants.user_id', '=', 'users.user_id') ->select('plants.*', 'units.unit_name', 'users.user_name as user_name') ->get(); - + $equipments = Equipment::all(); // $equipaments = DB::table('equipaments') // ->join('factories','equipaments.factory_id', '=', 'factories.factories_id') // ->join('equipament_types', 'equipaments.equipament_type_id', '=' , 'equipament_types.equipament_type_id') @@ -36,7 +36,7 @@ public function ManageAssets() // ->get(); // return view('Admin/DataManagement/manageassets', compact('units','equipaments')); - return view('Admin/DataManagement/manageassets', compact('units')); + return view('Admin/DataManagement/manageassets', compact('units','equipments')); } public function showUnit($id) diff --git a/app/Http/Controllers/userController.php b/app/Http/Controllers/userController.php index 1c035208..be32244c 100644 --- a/app/Http/Controllers/userController.php +++ b/app/Http/Controllers/userController.php @@ -76,7 +76,7 @@ public static function authenticateAndRedirect(Request $request) public function ListCompanies() { - $users = User::with('userType')->where('user_type', '=', 3)->get(); + $users = User::with('userType')->where('type_users', '=', 3)->get(); return view('Admin.CrudUsers.listCompany', compact('users')); } @@ -84,7 +84,7 @@ public function ListCompanies() //Busca Todos os utilizadores Exeto as 'Empresas' public function ListUsers() { - $users = User::with('userType')->where('user_type', '<>', 3)->get(); + $users = User::with('userType')->where('type_users', '<>', 3)->get(); return view('Admin.CrudUsers.listUsers', compact('users')); } diff --git a/app/Models/ConstructionWorkstation.php b/app/Models/ConstructionWorkstation.php new file mode 100644 index 00000000..85ab1070 --- /dev/null +++ b/app/Models/ConstructionWorkstation.php @@ -0,0 +1,19 @@ + - -
-
-
-
-

Gestão de ativos

-
-
- -
+ +
+
+
+
+

Gestão de ativos

-
-
+
+ +
+
+
+
- + - -
-
- -
-
-
-

Instalações

+ +
+
+ + +
+
+

Instalações

-
- -
- -
- -
- -
-
-

Inserir nova instalação

- -
- -
- -
- -
-
- - -
-
- - -
-
- - -
-
- - -
- -
- - - - - - - - - - - @foreach ($units as $unit) - - - - - - - - @endforeach - -
InstalaçãoFábricaClienteEditar
{{ $unit->unit_name }}{{ $unit->plant_name }}{{ $unit->user_name }} - - - - - -
-
- +
+
+
- - - + +
+ +
+
+

Inserir nova instalação

- - -
-
-
-

Equipamentos

- -
- -
- -
- -
- -
-
-

Inserir novo equipamento

- -
- -
+
+
-
- -
- - + +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+ + + + + + + + + + + @foreach ($units as $unit) + + + + + + + + @endforeach + +
InstalaçãoFábricaClienteEditar
{{ $unit->unit_name }}{{ $unit->plant_name }}{{ $unit->user_name }} + + + + + +
+
+ +
+
+ + + + + + +
+
+
+

Equipamentos

+ +
+ +
+ +
+ +
+ +
+
+

Inserir novo equipamento

+ +
+ +
+
+
+ +
+ + +
+ +
+ + +
+ + +
+
+

PSV

- -
- - -
- - -
-
-

PSV

-
- -
-
-
-
- - -
-
-
-
- - -
+ +
+
+
+
+ +
- -
-
-
- - -
-
-
-
- - -
-
-
- -
-
-
- - -
-
-
-
- - -
-
-
-
-
-
- - -
-
-
-
- - -
+
+
+ +
- -
- -
-
-

Válvula de isolamento

-
- -
-
-
-
- - -
-
-
-
- - -
+
+
+
+ +
- -
-
-
- - -
-
-
-
- - -
-
-
- -
-
-
- - -
-
-
-
- - -
-
-
-
-
-
- - -
-
-
-
- - -
+
+
+ +
- -
- -
-
-

Válvula de controlo

-
- -
-
-
-
- - -
-
-
-
- - -
-
-
-
-
-
- - -
-
-
-
- - -
+
+
+
+ +
- -
-
-
- - -
-
-
-
- - -
-
-
-
-
-
- - -
-
-
-
- - -
-
-
-
-
-
- - -
-
-
-
- - -
-
-
-
- - -
-
-
- -
-
-
- - -
-
-
-
- - -
+
+
+ +
-
- -
- -
-
- - +
+
+
+ + +
+
+
+
+ + +
- - - - -
-
- - - -
-
- - - - +
- -