diff --git a/app/Http/Controllers/CreateProjectController.php b/app/Http/Controllers/CreateProjectController.php
index 07f65397..1f74bf5a 100755
--- a/app/Http/Controllers/CreateProjectController.php
+++ b/app/Http/Controllers/CreateProjectController.php
@@ -27,6 +27,7 @@
use App\Models\FurtherTasks;
use App\Models\WorkstationsAssociationTasks;
use App\Models\TasksAssociationAmbits;
+use LengthException;
// use DataTables;
@@ -90,40 +91,193 @@ function () use ($writer) {
public function finishCreatingProject($numberProject)
{
$receiveWorkstaions = ConstructionWorkstation::where('company_projects_id', $numberProject)->get();
+ // Extrai apena o id_workstations de cada um
+ $workstationIds = $receiveWorkstaions->pluck('id_workstations')->toArray();
+
+ $workstationOccurrences = WorkstationsAssociationTasks::whereIn('id_workstations', $workstationIds)
+ ->get()
+ ->countBy('id_workstations')
+ ->toArray();
+
+ // Guarda as WorkStations que nao tem nenhuma tarefa associada
+ $missingWorkstations = array_filter($workstationIds, function ($workstationId) use ($workstationOccurrences) {
+ return !isset($workstationOccurrences[$workstationId]) || $workstationOccurrences[$workstationId] == 0;
+ });
+
+ foreach ($missingWorkstations as $dataWs => $idWs) {
+ $checkDataWsMissing = ConstructionWorkstation::where('id_workstations', $idWs)->get();
+ $receiveDataWsMissing[$idWs] = $checkDataWsMissing;
+ }
+
+ // Recebe todos os equipamentos relacionados na Obra indicada
$receiveEquipments = Equipment::where('company_projects_id', $numberProject)->get();
+ // Recebe a quantidade de equipamentos de acordo com seu tipo de Equipamento
$equipmentCounts = $receiveEquipments->countBy('equipment_type_id');
+
+ // CV
$countType1 = $equipmentCounts[1] ?? 0;
+ // ISV
$countType2 = $equipmentCounts[2] ?? 0;
+ // PSV
$countType3 = $equipmentCounts[3] ?? 0;
$valuesTypeCV = [];
$valuesTypeISV = [];
$valuesTypePSV = [];
- $GeneralValues = [1,2,8,14,17];
+ $GeneralValues = [1, 2, 8, 14, 17];
if ($countType1 > 0) {
$valuesTypeCV = [18, 4, 6, 11, 19, 16];
}
-
if ($countType2 > 0) {
$valuesTypeISV = [7, 12, 20, 15, 21];
}
-
if ($countType3 > 0) {
$valuesTypePSV = [3, 9, 10, 13, 15];
}
+ $missingTasks = [];
-
+ // Recebe cada id de workstations
+ foreach ($workstationIds as $id) {
+ // Verificar se há pelo menos uma entrada para cada valor em $GeneralValues
+ foreach ($GeneralValues as $value) {
+ $exists = WorkstationsAssociationTasks::where('id_workstations', $id)
+ ->where('elemental_tasks_id', $value)
+ ->exists();
+ if (!$exists) {
+ $missingTasks[$id][] = $value;
+ }
+ }
+ // Verificar se há pelo menos uma entrada para cada valor em $valuesTypeCV
+ if ($countType1 > 0) {
+ foreach ($valuesTypeCV as $value) {
+ $exists = WorkstationsAssociationTasks::where('id_workstations', $id)
+ ->where('elemental_tasks_id', $value)
+ ->exists();
- $project = CompanyProject::find($numberProject);
- $project->order_project = 2;
- $project->save();
+ if (!$exists) {
+ $missingTasks[$id][] = $value;
+ }
+ }
+ }
- return redirect()->route('home');
+ // Verificar se há pelo menos uma entrada para cada valor em $valuesTypeISV
+ if ($countType2 > 0) {
+ foreach ($valuesTypeISV as $value) {
+ $exists = WorkstationsAssociationTasks::where('id_workstations', $id)
+ ->where('elemental_tasks_id', $value)
+ ->exists();
+
+ if (!$exists) {
+ $missingTasks[$id][] = $value;
+ }
+ }
+ }
+
+ // Verificar se há pelo menos uma entrada para cada valor em $valuesTypePSV
+ if ($countType3 > 0) {
+ foreach ($valuesTypePSV as $value) {
+ $exists = WorkstationsAssociationTasks::where('id_workstations', $id)
+ ->where('elemental_tasks_id', $value)
+ ->exists();
+
+ if (!$exists) {
+ $missingTasks[$id][] = $value;
+ }
+ }
+ }
+ }
+
+ // Todas as tarefas que nao estao em cada posto
+ $allMissingTasks = [];
+
+ // Aqui nós contamos quantas workstations existem
+ $numberOfWorkstations = count($workstationIds);
+
+ // Junta todas as tarefas ausentes em um único array
+ foreach ($missingTasks as $tasks) {
+ $allMissingTasks = array_merge($allMissingTasks, $tasks);
+ }
+
+ // Conta o número de ocorrências de cada tarefa no array
+ $counts = array_count_values($allMissingTasks);
+
+ // Mantém apenas as tarefas que aparecem no array o mesmo número de vezes que o número de workstations
+ $allMissingTasks = array_filter($counts, function ($count) use ($numberOfWorkstations) {
+ return $count === $numberOfWorkstations;
+ });
+
+ // Recebe as tarefas, nao existentes em nenhum do postos
+ $receveDataTasksMissing = [];
+
+ foreach ($allMissingTasks as $IdElementalTask => $ElementalTask) {
+ // dd($IdElementalTask);
+ $checkDataTask = ElementalTasks::where('elemental_tasks_id', $IdElementalTask)->first();
+
+ $receiveDataTasksMissing[$IdElementalTask] = $checkDataTask;
+ }
+
+ // // Se receber zero(0) quer dizer que todas as tarefas foram atribuidas pelo menos uma vez em cada posto de Trabalho.
+ // if (sizeof($allMissingTasks) != 0) {
+ // $missingTasksList = collect($receiveDataTasksMissing)
+ // ->map(function ($task) {
+ // return $task->elemental_tasks_code . ' => ' . $task->elemental_tasks_description;
+ // })
+ // ->implode('
');
+
+ // return redirect()->back()->with('error', 'As seguintes tarefas não foram atribuídas a nenhum posto de trabalho:
' . $missingTasksList);
+ // } elseif (sizeof($missingWorkstations) != 0) {
+ // $receveMissingWorkstations = collect($receiveDataWsMissing)
+ // ->map(function ($DataWorkstation) {
+ // // Aqui iteramos sobre a Collection de ConstructionWorkstation
+ // return $DataWorkstation->map(function ($constructionWorkstation) {
+ // return $constructionWorkstation->name_workstations ;
+ // });
+ // })
+ // ->flatten() // Achata a coleção multi-dimensional para um único nível
+ // ->implode('
');
+
+ // return redirect()->back()->with('error', 'O seguintes postos nao tem nenhuma tarefa atribuida!!
' . $receveMissingWorkstations.);
+
+ $errors = [];
+
+ // Se receber zero(0) quer dizer que todas as tarefas foram atribuídas pelo menos uma vez em cada posto de Trabalho.
+ if (sizeof($allMissingTasks) != 0) {
+ $missingTasksList = collect($receiveDataTasksMissing)
+ ->map(function ($task) {
+ return $task->elemental_tasks_code . ' => ' . $task->elemental_tasks_description;
+ })
+ ->implode('
');
+
+ $errors[] = 'As seguintes tarefas não foram atribuídas a nenhum posto de trabalho:
' . $missingTasksList;
+ }
+
+ if (sizeof($missingWorkstations) != 0) {
+ $receveMissingWorkstations = collect($receiveDataWsMissing)
+ ->map(function ($DataWorkstation) {
+ // Aqui iteramos sobre a Collection de ConstructionWorkstation
+ return $DataWorkstation->map(function ($constructionWorkstation) {
+ return $constructionWorkstation->name_workstations;
+ });
+ })
+ ->flatten() // Achata a coleção multi-dimensional para um único nível
+ ->implode('
');
+
+ $errors[] = 'O seguintes postos nao tem nenhuma tarefa atribuida!!
' . $receveMissingWorkstations;
+ } // Verificar se existem erros e retornar, se houver
+ if (!empty($errors)) {
+ return redirect()->back()->with('errors', $errors);
+ } else {
+ $project = CompanyProject::find($numberProject);
+ $project->order_project = 2;
+ $project->save();
+
+ return redirect()->route('home');
+ }
}
public function deleteWorkstation($name)
@@ -395,7 +549,7 @@ public function createProjectForStep1()
return view('projectsClients/createProject', ['step' => 1], ['companies' => $companies]);
}
// Progress Bar
- //Devolve para a primeira para na descricao do projecto apenas user com ID 3, quer dizer que apenas as "empresas"
+ //Devolve para a primeira para na Descrição 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);
@@ -519,7 +673,7 @@ public function showStep2($company_projects_id)
// return redirect('/createProject');
// }
- //recebe o Id de Plant vai devolver todos os equipamentos relacionados a esta instalacao(plant)
+ //recebe o Id de Plant vai devolver todos os equipamentos relacionados a esta Instalação(plant)
// Carregue o projeto com o id fornecido
$project = CompanyProject::find($company_projects_id);
@@ -527,7 +681,7 @@ public function showStep2($company_projects_id)
$typeEquipments = EquipmentType::all();
- //Retorna todas as Fabricas Unit, com base na instalacao
+ //Retorna todas as Fabricas Unit, com base na Instalação
$checkUnits = DB::table('units')
->join('plants', 'units.plant_id', '=', 'plants.plant_id')
->join('company_projects', 'plants.plant_id', '=', 'company_projects.plant_id')
@@ -543,7 +697,7 @@ public function showStep2($company_projects_id)
->where('plants.plant_id', '=', $project['plant_id']) // Filtra baseado no 'plant_id'
->get();
- // Para listar os equipamentos vinculados na obra, buscamos suas associações gerais entre suas tabelas , ou seja a : fabrica(unit), tipo de equipamento e o Ambito para se realizar a tarefas pretendida neste obra.
+ // Para listar os equipamentos vinculados na obra, buscamos suas associações gerais entre suas tabelas , ou seja a : fabrica(unit), tipo de equipamento e o Âmbito para se realizar a tarefas pretendida neste obra.
// $listEquipmentsProjects = Equipment::with(['unit', 'equipmentType', 'equipmentAssociationAmbit.ambitsEquipment'])
// ->where('company_projects_id', $company_projects_id)
// ->get();
@@ -557,7 +711,7 @@ public function showStep2($company_projects_id)
$pendingEquipments = PendingEquipment::where('pending_company_projects_id', $numberProject)->get();
if (!$pendingEquipments->isEmpty()) {
- // Retornamos para a view 'step' => 2 indicando conclusao da primeira parte, $numberProject para associacao de equipamentos a esta obra, alem de todos os equipamentos e fabricao ja existente com base na instalacao que se iniciou a obra.
+ // Retornamos para a view 'step' => 2 indicando conclusao da primeira parte, $numberProject para associacao de equipamentos a esta obra, alem de todos os equipamentos e fabricao ja existente com base na Instalação que se iniciou a obra.
return view('projectsClients/articulated_2', ['step' => 2, 'numberProject' => $numberProject])
->with('danger', 'Equipamentos Pendentes: ' . count($pendingEquipments))
->with('pendingEquipments', $pendingEquipments)
@@ -578,7 +732,7 @@ public function showStep2($company_projects_id)
public function createEquipmentManual(Request $request)
{
// EquipmentAmbit
- // *** Recebe a Instalacao(Plant), com base no numero da Obra Criada
+ // *** Recebe a Instalação(Plant), com base no número da Obra Criada
$receivePlant = DB::table('plants')
->join('company_projects', 'company_projects.plant_id', 'plants.plant_id')
->select('plants.plant_id')
@@ -661,7 +815,7 @@ public function createEquipmentManual(Request $request)
$AddAtributsEquipments->specific_attributes_value = $receivesAssociationAttribute['value'];
$AddAtributsEquipments->save();
}
- //Criar associacao do equipamento ao Ambito
+ //Criar associacao do equipamento ao Âmbito
$AssociationEquipmentAmbit = new EquipmentAssociationAmbit;
$AssociationEquipmentAmbit->equipment_type_id = $request->equipmentTypeId;
$AssociationEquipmentAmbit->ambits_id = $request->EquipmentAmbit;
@@ -671,7 +825,7 @@ public function createEquipmentManual(Request $request)
$execution_order = 1;
- //Recebe a tabela com as associoacoes entre Ambitos e tarefas Elementares
+ //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) {
@@ -804,7 +958,7 @@ public function processStep2(Request $request)
$ambit_id = $ambit->ambits_id;
}
- //Criar associacao do equipamento ao Ambito
+ //Criar associacao do equipamento ao Âmbito
$AssociationEquipmentAmbit = new EquipmentAssociationAmbit;
$AssociationEquipmentAmbit->equipment_type_id = $receveEquipament_type_ID;
$AssociationEquipmentAmbit->ambits_id = $ambit_id;
@@ -813,7 +967,7 @@ public function processStep2(Request $request)
$execution_order = 1;
- //Recebe a tabela com as associoacoes entre Ambitos e tarefas Elementares
+ //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) {
diff --git a/app/Http/Controllers/ExecutionProjectController.php b/app/Http/Controllers/ExecutionProjectController.php
index 6af93364..7d2b2ea5 100755
--- a/app/Http/Controllers/ExecutionProjectController.php
+++ b/app/Http/Controllers/ExecutionProjectController.php
@@ -76,7 +76,7 @@ public function receiveEquipmentIdForShowModal($EquipmentID)
// if ($equipment_type_id == '#') {
// $model = Equipment::query()->with(['equipmentType', 'unit', 'equipmentAssociationAmbit.ambitsEquipment']);
// }
- // // Caso 'equipment_type_id' não seja '#', filtra os equipamentos por tipo e ambito (caso 'ambits_id' não seja '#')
+ // // Caso 'equipment_type_id' não seja '#', filtra os equipamentos por tipo e Âmbito (caso 'ambits_id' não seja '#')
// else {
// $equipment_type_id = intval($equipment_type_id);
// $model = Equipment::where('equipments.equipment_type_id', $equipment_type_id)
diff --git a/app/Http/Controllers/PreparedProjectController.php b/app/Http/Controllers/PreparedProjectController.php
index 8d7af6e4..9b650100 100755
--- a/app/Http/Controllers/PreparedProjectController.php
+++ b/app/Http/Controllers/PreparedProjectController.php
@@ -25,7 +25,7 @@ public function PreparedProject($ProjectId)
$equipmentsProjects = Equipment::all()->where('company_projects_id', $ProjectId);
$equipmentsTypes = EquipmentType::all();
- //Retorna todas as Fabricas Unit, com base na instalacao
+ //Retorna todas as Fabricas Unit, com base na Instalação
$checkUnits = DB::table('units')
->join('plants', 'units.plant_id', '=', 'plants.plant_id')
->join('company_projects', 'plants.plant_id', '=', 'company_projects.plant_id')
@@ -73,7 +73,7 @@ public function getData1()
if ($equipment_type_id == '#') {
$model = Equipment::query()->with(['equipmentType', 'unit', 'equipmentAssociationAmbit.ambitsEquipment']);
}
- // Caso 'equipment_type_id' não seja '#', filtra os equipamentos por tipo e ambito (caso 'ambits_id' não seja '#')
+ // Caso 'equipment_type_id' não seja '#', filtra os equipamentos por tipo e Âmbito (caso 'ambits_id' não seja '#')
else {
$equipment_type_id = intval($equipment_type_id);
$model = Equipment::where('equipments.equipment_type_id', $equipment_type_id)
diff --git a/app/Http/Controllers/ProjectoDatacontroller.php b/app/Http/Controllers/ProjectoDatacontroller.php
index 43d9b7ef..79ba123e 100755
--- a/app/Http/Controllers/ProjectoDatacontroller.php
+++ b/app/Http/Controllers/ProjectoDatacontroller.php
@@ -116,7 +116,7 @@ public function receiveEquipmentsProject($receiveNumberProject)
->where('company_projects_id', $receiveNumberProject)
->with(['equipmentType', 'unit', 'equipmentAssociationAmbit.ambitsEquipment']);
}
- // Caso 'equipment_type_id' não seja '#', filtra os equipamentos por tipo e ambito (caso 'ambits_id' não seja '#')
+ // Caso 'equipment_type_id' não seja '#', filtra os equipamentos por tipo e Âmbito (caso 'ambits_id' não seja '#')
else {
$equipment_type_id = intval($equipment_type_id);
$model = Equipment::where('equipments.equipment_type_id', $equipment_type_id)
diff --git a/resources/views/Admin/DataManagement/manageassets.blade.php b/resources/views/Admin/DataManagement/manageassets.blade.php
index 8240b236..fb5ab2ed 100755
--- a/resources/views/Admin/DataManagement/manageassets.blade.php
+++ b/resources/views/Admin/DataManagement/manageassets.blade.php
@@ -451,8 +451,8 @@ class="fas fa-plus">
Criar equipamento ?
-