diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php
index a8ef93d5..04cbce7b 100755
--- a/app/Console/Kernel.php
+++ b/app/Console/Kernel.php
@@ -27,12 +27,13 @@ protected function schedule(Schedule $schedule): void
// Atualiza sessões inativas
\App\Models\ControlEquipmentWorkstation::where('status', 1)
+ ->whereNull('departure_date')
->where('last_active_at', '<', $inactiveLimit)
->update([
'status' => 0,
'id_workstations' => null,
'elemental_tasks_id' => null,
- 'entry_date' => null
+ 'entry_date' => null,
]);
// Adicione outras tarefas necessárias aqui
diff --git a/app/Http/Controllers/CreateProjectController.php b/app/Http/Controllers/CreateProjectController.php
index ce28ecd4..1f92d0aa 100755
--- a/app/Http/Controllers/CreateProjectController.php
+++ b/app/Http/Controllers/CreateProjectController.php
@@ -1225,8 +1225,6 @@ public function processStep2(Request $request)
if ($chooseAction == 'selectEquipments') {
-
-
if ($existingEquipment) {
$foundInExcel = false;
@@ -1274,8 +1272,6 @@ public function processStep2(Request $request)
// Continua com o processo de salvar o novo registro
$newEquipmentWorkHistory->ispt_number = $isptNumber;
-
-
$newEquipmentWorkHistory->save();
// Recebe o Id do 'EquipmentWorkHistory' criado.
@@ -1283,7 +1279,6 @@ public function processStep2(Request $request)
$isptNumber++;
-
$ambit = AmbitsEquipment::where('ambits_description', $datas['ambit'])->first();
if ($ambit) {
@@ -1473,8 +1468,8 @@ public function processStep2(Request $request)
return redirect()->route('articulated_2', ['id' => $request->numberProject])
->with('danger', 'Equipamentos Pendentes criados: ' . $countPendingEquipments)
->with('dangerLogs', $ignoredLines)
- ->with('equipmentPendingLogs', $equipmentPendingLogs)
- ->with('pendingEquipments', $pendingEquipments);
+ ->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('articulated_2', ['id' => $request->numberProject])
diff --git a/app/Http/Controllers/WorkstationsJobsController.php b/app/Http/Controllers/WorkstationsJobsController.php
index f585709a..c8d57373 100755
--- a/app/Http/Controllers/WorkstationsJobsController.php
+++ b/app/Http/Controllers/WorkstationsJobsController.php
@@ -13,6 +13,7 @@
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
+use Mockery\Undefined;
class WorkstationsJobsController extends Controller
@@ -116,10 +117,11 @@ public function updateSessionStatus(Request $request, $controlEquipmentId)
public function receiveAnswersEquipment(Request $request, $control_equipment_workstation_id)
{
+ dd($request);
//No request recebemos ID(NUmero da tarela elementar) , esta variavel vai receber este ID apos selerar o id da string
$elementalTaskID = 0;
- // Deve receber o id da control atual.
+ // Deve receber as perguntas e respostas para a tarefa selecionada
$requestData = $request->all();
foreach ($requestData as $key => $value) {
@@ -195,10 +197,12 @@ public function receiveAnswersEquipment(Request $request, $control_equipment_wor
// Agora que guardamos os dados anteriores, vamos criar a nova linha na tabela Control Equipment ID para que o equipamento continue
// $newControlEquipment = new ControlEquipmentWorkstation;
// $newControlEquipment->equipmentWorkHistorys_id = $recebeDataControlWs->equipmentWorkHistorys_id;
- // $newControlEquipment->id_workstations = $recebeDataControlWs->id_workstations;
- // $newControlEquipment->entry_date = now();
+ // $newControlEquipment->last_active_at = now();
+ // $newControlEquipment->status = 0;
// $newControlEquipment->save();
+ // dd($newControlEquipment);
+
// Vamos buscar os dados da tarefa elementar comcluida para mandar uma mensagem ao Front e indicar que esta completada
$receiveDataElementalTask = ElementalTasks::find($recebeDataControlWs->elemental_tasks_id, 'elemental_tasks_id')->first();
@@ -211,36 +215,46 @@ public function receiveAnswersEquipment(Request $request, $control_equipment_wor
// Ao selecionar o equipamento para se inicializar a tarefa deve mostrar os dados relacionados.
public function getEquipmentData($equipment_id, $component_tag)
{
+ // dd($equipment_id);
//vai receber o email atual, no caso o da workstation que se encontra
$userEmail = Auth::user();
-
// Busca os dados da Ws com base no Login
$receiveDataWs = ConstructionWorkstation::where('name_workstations', $userEmail->user_name)->first();
-
-
// Recebe os dados do Equipamento
$receiveDataEquipment = Equipment::where('equipment_id', $equipment_id)->first();
+
+ $tagType = explode('@', $component_tag)[1]; // Isola o tipo da tag após o '@'
+
// Recebe o id do Historico do equipamento, em sua obra atual
$receiveEquipmentWorkHistory = EquipmentWorkHistory::where('equipment_id', $receiveDataEquipment->equipment_id)
->where('company_projects_id', $receiveDataEquipment->company_projects_id)
->first();
-
-
-
- //Verificar se o equipamento ja esta sendo utilizado em outra Ws se sim, retorna para a pagina anterior.
+
$equipmentInUse = ControlEquipmentWorkstation::where('equipmentWorkHistorys_id', $receiveEquipmentWorkHistory->equipmentWorkHistorys_id)
- ->whereNull('departure_date')
- ->whereNotNull('id_workstations')
- ->where('id_workstations', '!=', $receiveDataWs->id_workstations)
- ->where('status', 1)
- ->exists();
+ ->whereNull('departure_date') // A data de saída deve ser nula, indicando que a tarefa ainda está ativa
+ ->whereNotNull('id_workstations') // Deve ter um posto de trabalho associado
+ ->where('id_workstations', '!=', $receiveDataWs->id_workstations) // E esse posto de trabalho não deve ser o atual
+ ->where(function ($query) use ($tagType) {
+ if ($tagType == 'Obturador') {
+ // Apenas se a tarefa for igual a 9, indicando uma tarefa de Obturador
+ $query->where('elemental_tasks_id', '=', 9);
+ } elseif ($tagType == 'Corpo') {
+ // Apenas se a tarefa for NULL, indicando uma tarefa de Corpo que não foi especificada
+ $query->whereNull('elemental_tasks_id');
+ }
+ })
+ ->where('status', 1) // O status deve indicar que está ativo
+ ->whereNotNull('entry_date') // Deve ter uma data de entrada, indicando que a tarefa foi iniciada
+ ->exists(); // Verifica se existe ao menos um registro que atenda às condições
+
// Se o equipamento já estiver em uso, redirecione com uma mensagem de erro
if ($equipmentInUse) {
return redirect()->back()->with('danger', 'O equipamento já se encontra a executar tarefas noutro posto de trabalho.');
}
+
// Recebe todas as tarefas elementares do equipamento.
$recebeTasksForEquipment = OrderEquipmentTasks::where('equipmentWorkHistorys_id', $receiveEquipmentWorkHistory->equipmentWorkHistorys_id)->get();
@@ -277,35 +291,90 @@ public function getEquipmentData($equipment_id, $component_tag)
$divisionElementalTasks[2] = $receiveTasksThatCannotBeDone->all();
- //Aplica 2 condicoes a variavel a primeira e se os 3 campos forem nulos e a segunda e se a id_workstations nao for null e tiver o valor igual ao da sessao atual,
- $existingDataControlEquipment = ControlEquipmentWorkstation::where('equipmentWorkHistorys_id', $receiveEquipmentWorkHistory->equipmentWorkHistorys_id)
- ->where(function ($query) use ($receiveDataWs) {
- $query->where(function ($q) {
- $q->whereNull('elemental_tasks_id')
- ->whereNull('departure_date')
- ->whereNull('id_workstations');
- })->orWhere(function ($q) use ($receiveDataWs) {
- $q->whereNotNull('id_workstations')
- ->where('id_workstations', $receiveDataWs->id_workstations)
- ->whereNull('departure_date');
- });
- })
- ->first();
- if ($existingDataControlEquipment) {
- // Registro existente encontrado, atualize conforme necessário
- if (strpos($component_tag, '@Obturador') !== false) {
- $existingDataControlEquipment->elemental_tasks_id = 9;
+
+ // // //Aplica 2 condicoes a variavel a primeira e se os 3 campos forem nulos e a segunda e se a id_workstations nao for null e tiver o valor igual ao da sessao atual,
+ // $existingDataControlEquipment = ControlEquipmentWorkstation::where('equipmentWorkHistorys_id', $receiveEquipmentWorkHistory->equipmentWorkHistorys_id)
+ // ->whereNull('departure_date')
+ // ->whereNull('elemental_tasks_id')
+ // ->orWhere('elemental_tasks_id',9)
+ // ->where(function ($query) use ($receiveDataWs) {
+ // $query->whereNull('id_workstations')
+ // ->orWhere(function ($q) use ($receiveDataWs) {
+ // $q->whereNotNull('id_workstations')
+ // ->where('id_workstations', $receiveDataWs->id_workstations);
+ // });
+ // })
+ // ->first();
+
+ // dd($existingDataControlEquipment);
+
+ // if ($existingDataControlEquipment) {
+ // // Registro existente encontrado, atualize conforme necessário
+ // if (strpos($component_tag, '@Obturador') !== false) {
+ // $existingDataControlEquipment->elemental_tasks_id = 9;
+ // }
+ // $existingDataControlEquipment->id_workstations = $receiveDataWs->id_workstations;
+ // $existingDataControlEquipment->entry_date = now();
+ // $existingDataControlEquipment->status = 1;
+ // $existingDataControlEquipment->last_active_at = now();
+
+ // $existingDataControlEquipment->save();
+
+ // $receiveDataControlEquipment = $existingDataControlEquipment;
+
+ $existingDataControlEquipment = null;
+
+
+ // Inicia a consulta baseada no tipo de tag
+ $query = ControlEquipmentWorkstation::where('equipmentWorkHistorys_id', $receiveEquipmentWorkHistory->equipmentWorkHistorys_id)
+ ->whereNull('departure_date')
+ ->where('status', 1); // Suponho que você deseja apenas registros ativos
+
+ // Adiciona condições específicas baseadas no tipo de tag
+ if ($tagType == 'Obturador') {
+ // Procura por registros com elemental_tasks_id = 9
+ $query->where('elemental_tasks_id', 9);
+ } elseif ($tagType == 'Corpo') {
+ // Procura por registros com elemental_tasks_id NULL
+ $query->whereNull('elemental_tasks_id');
+ }
+ // Se encontrar Dados nestas condicoes, provavelmente, se refere a Uma atualizacao na pagina atual
+ if ($query->first()) {
+
+ $existingDataControlEquipment = $query->first();
+
+ // Caso nao seja uma possivel atualizacao, antes de criar um dado novo, deve verificar, se exsite um control_equipment_workstation_id, que nao estaja em uso para este equipamento.
+ } else {
+
+ $query = ControlEquipmentWorkstation::where('equipmentWorkHistorys_id', $receiveEquipmentWorkHistory->equipmentWorkHistorys_id)
+ ->whereNull('departure_date')
+ ->where('status', 0)
+ ->whereNull('id_workstations')
+ ->whereNull('elemental_tasks_id');
+
+ if ($query->first()) {
+
+ $existingDataControlEquipment = $query->first();
+
}
+ }
+ // Verifica se um registro foi encontrado e atualiza conforme necessário
+ if ($existingDataControlEquipment) {
+
$existingDataControlEquipment->id_workstations = $receiveDataWs->id_workstations;
$existingDataControlEquipment->entry_date = now();
$existingDataControlEquipment->status = 1;
$existingDataControlEquipment->last_active_at = now();
+ // Se a tag for 'Obturador', atualiza o elemental_tasks_id se nao deixa como NULL
+ if ($tagType == 'Obturador') {
+ $existingDataControlEquipment->elemental_tasks_id = 9;
+ }
$existingDataControlEquipment->save();
-
$receiveDataControlEquipment = $existingDataControlEquipment;
+
} else {
// Nenhum registro existente encontrado, crie um novo
$newDataControlEquipment = new ControlEquipmentWorkstation;
@@ -323,7 +392,6 @@ public function getEquipmentData($equipment_id, $component_tag)
$receiveDataControlEquipment = $newDataControlEquipment;
}
-
// Primeiro, obtenha o registro de ControlEquipmentWorkstation que não deve ter 'elemental_tasks_id' e 'departure_date' como null
$completedTasks = ControlEquipmentWorkstation::where('equipmentWorkHistorys_id', $receiveEquipmentWorkHistory->equipmentWorkHistorys_id)
->whereNotNull('elemental_tasks_id')
@@ -442,7 +510,6 @@ public function getEquipmentData($equipment_id, $component_tag)
$recebeTasksForEquipment = $recebeTasksForEquipment->sortBy('elemental_tasks_id');
}
- dd($receiveDataControlEquipment);
return view('workstations.workstations', [
// Deve receber o atual COntrol ID ? tudo a vez que atualizar ??
@@ -455,32 +522,25 @@ public function getEquipmentData($equipment_id, $component_tag)
}
- public function cancelElementalTaskForEquipment($equipmentID,)
+ public function cancelElementalTaskForEquipment($controlEquipmentID)
{
//Nesta funcao se o utilizador da Ws utilizar o botao cancelar na view principal,o equipamento deve se desvincular na Ws atual e poder ser selecionado por outra.
// Assim sendo mais pratico excluindo o ultimo dado desta Ws da tabela control_equipment_workstation, quando seu 'elemental_tasks_id' e 'departure_date' forem 'Null'
- $receiveDataEquipment = Equipment::where('equipment_id', $equipmentID)->first();
+ // $receiveDataEquipment = Equipment::where('equipment_id', $equipmentID)->first();
- // Recebe o id do Historico do equipamento, em sua obra atual
- $receiveEquipmentWorkHistory = EquipmentWorkHistory::where('equipment_id', $receiveDataEquipment->equipment_id)
- ->where('company_projects_id', $receiveDataEquipment->company_projects_id)
- ->first();
+ $receiveControlEquipmentID = ControlEquipmentWorkstation::where('control_equipment_workstation_id', $controlEquipmentID)->first();
- $existingControlEquipment = ControlEquipmentWorkstation::where('equipmentWorkHistorys_id', $receiveEquipmentWorkHistory->equipmentWorkHistorys_id)
- ->whereNull('elemental_tasks_id')
- ->whereNull('departure_date')
- ->first();
+ if ($receiveControlEquipmentID) {
+
+ $receiveControlEquipmentID->id_workstations = null;
+ $receiveControlEquipmentID->elemental_tasks_id = null;
+ $receiveControlEquipmentID->status = 0;
+ $receiveControlEquipmentID->entry_date = null;
+ $receiveControlEquipmentID->save();
- if ($existingControlEquipment) {
- $existingControlEquipment->id_workstations = null;
- $existingControlEquipment->elemental_tasks_id = null;
- $existingControlEquipment->status = 0;
- $existingControlEquipment->entry_date = null;
- $existingControlEquipment->last_active_at = null;
- $existingControlEquipment->save();
}
-
return redirect(route('enterWorkstation'));
+
}
}
diff --git a/app/Http/ViewComposers/WorkstationComposer copy.php b/app/Http/ViewComposers/WorkstationComposer copy.php
new file mode 100755
index 00000000..ebb1344e
--- /dev/null
+++ b/app/Http/ViewComposers/WorkstationComposer copy.php
@@ -0,0 +1,316 @@
+email;
+ $receiveDataEmail = User::where('email', $userEmail)->first();
+ $receiveDataWs = ConstructionWorkstation::where('name_workstations', $receiveDataEmail->user_name)->first();
+
+
+
+
+
+
+ // Busca todos os equipamentos associados a um determinado projeto.
+ // $receiveAllEquipmentOfProject = Equipment::where('company_projects_id', $receiveDataWs->company_projects_id)
+ // ->whereDoesntHave('equipmentWorkHistory.controlEquipmentWorkstation', function ($query) use ($excludedEquipmentsQuery) {
+ // //Quarto filtro : Com base na variavel $excludedEquipmentsQuery que serve para excluir equipamentos PSV, quando tem o @Corpo e @Obturador sendo feito em simultanio.
+ // $query->whereIn('equipmentWorkHistorys_id', $excludedEquipmentsQuery);
+ // // Primeiro filtro: Equipamentos sem ocorrência em ControlEquipmentWorkstation
+ // $query->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
+ // $query->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.
+ // $query->orWhereHas('equipmentWorkHistory.controlEquipmentWorkstation', function ($subQuery) {
+ // $subQuery->whereNotNull('id_workstations')
+ // ->where(function ($innerQuery) {
+ // $innerQuery->whereNotNull('elemental_tasks_id')
+ // ->whereNotNull('departure_date')
+ // ->where('status', 1);
+ // });
+ // });
+ // })
+ // // Adiciona condição para PSV (equipment_type_id = 3)
+ // ->orWhere(function ($query) use ($receiveDataWs) {
+ // // 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');
+ // });
+ // });
+ // })
+ // ->with([
+ // 'equipmentWorkHistory' => function ($query) use ($receiveDataWs) {
+ // $query->where('company_projects_id', $receiveDataWs->company_projects_id)
+ // ->select('equipment_id', 'equipmentWorkHistorys_id');
+ // }
+ // ])
+ // ->get()
+ // ->map(function ($equipment) {
+ // if (!$equipment->equipmentWorkHistory->isEmpty()) {
+ // $equipmentWorkHistory = $equipment->equipmentWorkHistory->first();
+ // $equipment->equipmentWorkHistoryId = $equipmentWorkHistory->equipmentWorkHistorys_id;
+ // } else {
+ // $equipment->equipmentWorkHistoryId = null;
+ // }
+ // return $equipment;
+ // });
+
+
+
+
+
+
+ // 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
+ // if (is_null($workHistoryId)) {
+ // continue; // Se não houver histórico de trabalho, continua para o próximo equipamento
+ // }
+
+ // $taskIds = OrderEquipmentTasks::where('equipmentWorkHistorys_id', $workHistoryId)
+ // ->pluck('elemental_tasks_id'); // Obter IDs de tarefas elementares baseado em um único workHistoryId
+
+ // if ($taskIds->isEmpty()) {
+ // continue; // Se não houver tarefas, continua para o próximo equipamento
+ // }
+
+ // //ESTE Code ve quantas vezes ja foi realizada cada tarefa do equipamento atual, saber o code a baixo ver se falta muito ou ja esta quase a acaber
+ // $workstationTaskCounts = ControlEquipmentWorkstation::whereIn('elemental_tasks_id', $taskIds)
+ // ->select('elemental_tasks_id', DB::raw('count(*) as total'))
+ // ->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;
+ // });
+
+ // if ($allTasksCompleted && $workstationTaskCounts->count() >= $taskIds->count()) {
+ // $completedEquipments->push($equipment); // Adicionar equipamento à lista de concluídos
+ // }
+ // }
+
+ // // Remover equipamentos concluídos da coleção original
+ // $receiveAllEquipmentOfProject = $receiveAllEquipmentOfProject->reject(function ($equipment) use ($completedEquipments) {
+ // return $completedEquipments->contains($equipment);
+ // });
+
+ // $equipmentIds = $receiveAllEquipmentOfProject->pluck('equipment_id');
+
+ // $receiveQrcodeEquipmentsProject = QrcodesAssociatedEquipment::whereIn('equipment_id', $equipmentIds)->get();
+
+ // //VAMOS filtrar os valores recebidos e terar todas as correspondencias de Flange, ja nao e uma tag que nao vai entrar no percurso do Equipamento.
+ // $filteredQrcodeEquipments = $receiveQrcodeEquipmentsProject->reject(function ($item) {
+ // return strpos($item->component_tag, '@Flange') !== false;
+ // });
+
+
+
+
+
+
+
+
+
+
+
+ // Este código identifica equipmentWorkHistorys_id que estão simultaneamente envolvidos em duas tarefas
+ // (uma identificada por elemental_tasks_id = 9 e elemental_tasks_id = NULL), quando o departure_date é null) ou seja, ainda em progresso...
+ // Agrupando-os por equipmentWorkHistorys_id e filtrando para garantir que existam exatamente dois tipos distintos de tarefas elementais para cada equipamento.
+ $excludedEquipmentsQuery = ControlEquipmentWorkstation::select('equipmentWorkHistorys_id')
+ ->whereNull('departure_date')
+ ->where(function ($query) {
+ $query->where('elemental_tasks_id', 9)
+ ->orWhereNull('elemental_tasks_id');
+ })
+ ->groupBy('equipmentWorkHistorys_id')
+ ->havingRaw('COUNT(DISTINCT elemental_tasks_id) = 2');
+
+ // Este código filtra equipamentos de um projeto específico, excluindo aqueles já entrados no (excludedEquipmentsQuery),
+ $receiveAllEquipmentOfProject = Equipment::where('company_projects_id', $receiveDataWs->company_projects_id)
+ ->whereDoesntHave('equipmentWorkHistory.controlEquipmentWorkstation', function ($query) use ($excludedEquipmentsQuery) {
+ $query->whereIn('equipmentWorkHistorys_id', $excludedEquipmentsQuery);
+ })
+ // Condicao 1 : Se todos esses campos foram confirmados como NULL e status = 0, signifca que e um control_equipment_workstation_id de um equipamento que foi limpo pelos metodos de fechar atividade do equipamento na Ws de forma nao convencional. pelo script do servidor
+ ->orWhereHas('equipmentWorkHistory.controlEquipmentWorkstation', function ($subQuery) {
+ $subQuery->whereNull('id_workstations')
+ ->whereNull('elemental_tasks_id')
+ ->whereNull('entry_date')
+ ->where('status', 0);
+ })
+ // Condicao 2 : Se os dados encontrados do equipamento tiverem com o departure_date principalmente diferente de NUll, signica que o ultima dado deste equipamento fez e concluiu uma de suas tarefas e agora precisa criar um dado novo.
+ ->orWhereHas('equipmentWorkHistory.controlEquipmentWorkstation', function ($subQuery) {
+ $subQuery->whereNotNull('id_workstations')
+ ->where(function ($innerQuery) {
+ $innerQuery->whereNotNull('elemental_tasks_id')
+ ->whereNotNull('departure_date')
+ ->where('status',1);
+ // ->orWhere('elemental_tasks_id', 9);
+ });
+ })
+
+ ->with([
+ 'equipmentWorkHistory' => function ($query) use ($receiveDataWs) {
+ $query->where('company_projects_id', $receiveDataWs->company_projects_id)
+ ->select('equipment_id', 'equipmentWorkHistorys_id');
+ }
+ ])
+ ->get()
+ ->map(function ($equipment) {
+ $equipmentWorkHistory = $equipment->equipmentWorkHistory->first() ?? null;
+ $equipment->equipmentWorkHistoryId = $equipmentWorkHistory?->equipmentWorkHistorys_id;
+ return $equipment;
+ });
+
+ dd($receiveAllEquipmentOfProject);
+
+ $completedEquipments = collect(); // Coleção para armazenar equipamentos concluídos
+
+ // 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
+ if (is_null($workHistoryId)) {
+ continue; // Se não houver histórico de trabalho, continua para o próximo equipamento
+ }
+
+ $taskIds = OrderEquipmentTasks::where('equipmentWorkHistorys_id', $workHistoryId)
+ ->pluck('elemental_tasks_id'); // Obter IDs de tarefas elementares baseado em um único workHistoryId
+
+ if ($taskIds->isEmpty()) {
+ continue; // Se não houver tarefas, continua para o próximo equipamento
+ }
+
+
+ // Busca registros na ControlEquipmentWorkstation com base no equipmentWorkHistoryId
+ $controlRecords = ControlEquipmentWorkstation::where('equipmentWorkHistorys_id', $workHistoryId)->get();
+
+ if ($controlRecords->isEmpty()) {
+ // Se não houver registros, considera como valor 0 (nenhuma tarefa ativa)
+ $equipmentStatus[$equipment->equipment_id] = 0;
+ } else {
+ //Deve verificar se o departure_date e NULL e o id_workstations <> null, e status = 0
+ // $activeTasks = $controlRecords->whereNull('departure_date');
+ $activeTasks = $controlRecords->whereNull('departure_date')
+ ->whereNotNull('id_workstations')
+ ->where('status', '!=', 0);
+
+ if ($activeTasks->isEmpty()) {
+ // Se não houver tarefas ativas, considera como valor 0 (nenhuma tarefa ativa)
+ $equipmentStatus[$equipment->equipment_id] = 0;
+ } else {
+ // Verifica as condições para determinar os valores 1 ou 2
+ $hasObturadorTask = $activeTasks->contains('elemental_tasks_id', 9);
+ $hasCorpoTask = $activeTasks->contains('elemental_tasks_id', null);
+
+ if ($hasObturadorTask) {
+ // Se tiver tarefa ativa para Obturador, valor = 2
+ $equipmentStatus[$equipment->equipment_id] = 2;
+ } elseif ($hasCorpoTask) {
+ // Se tiver tarefa ativa para Corpo, valor = 1
+ $equipmentStatus[$equipment->equipment_id] = 1;
+ } else {
+ // Caso contrário, considera como 0
+ $equipmentStatus[$equipment->equipment_id] = 0;
+ }
+ }
+ }
+
+ $workstationTaskCounts = ControlEquipmentWorkstation::whereIn('elemental_tasks_id', $taskIds)
+ ->select('elemental_tasks_id', DB::raw('count(*) as total'))
+ ->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;
+ });
+
+ if ($allTasksCompleted && $workstationTaskCounts->count() >= $taskIds->count()) {
+ $completedEquipments->push($equipment); // Adicionar equipamento à lista de concluídos
+ }
+ }
+
+ // Remover equipamentos concluídos da coleção original
+ $receiveAllEquipmentOfProject = $receiveAllEquipmentOfProject->reject(function ($equipment) use ($completedEquipments) {
+ return $completedEquipments->contains($equipment);
+ });
+
+ $equipmentIds = array_keys($equipmentStatus);
+
+
+
+ // Obtendo os registros QrcodesAssociatedEquipment para esses equipamentos
+ $receiveQrcodeEquipmentsProject = QrcodesAssociatedEquipment::whereIn('equipment_id', $equipmentIds)
+ ->get();
+
+
+ $filteredQrcodeEquipments = $receiveQrcodeEquipmentsProject->filter(function ($qrcodeEquipment) use ($equipmentStatus) {
+ // Exclui 'Flange'
+ if (strpos($qrcodeEquipment->component_tag, '@Flange') !== false) {
+ return false;
+ }
+
+ // Obtém o status do equipamento atual
+ $equipmentId = $qrcodeEquipment->equipment_id;
+ $status = $equipmentStatus[$equipmentId] ?? null;
+
+ // Decide se 'Corpo' ou 'Obturador' deve ser excluído com base no status
+ switch ($status) {
+ case 1: // Exclui 'Corpo' se o status for 1
+ return strpos($qrcodeEquipment->component_tag, '@Corpo') === false;
+ case 2: // Exclui 'Obturador' se o status for 2
+ return strpos($qrcodeEquipment->component_tag, '@Obturador') === false;
+ case 0: // Mantém ambos se o status for 0
+ default:
+ return true;
+ }
+ });
+
+ //Returning values of the queries to workstations layout
+ $view->with([
+ 'receiveAllEquipmentOfProject' => $receiveAllEquipmentOfProject,
+ // foi alterado para a variavel 'filteredQrcodeEquipments' pois nao tem a necessidade do utilizador selecionar 'Flange'(AINDA NAO !)
+ 'receiveQrcodeEquipmentsProject' => $filteredQrcodeEquipments,
+ 'completedEquipments' => $completedEquipments,
+ 'receiveDataWs' => $receiveDataWs,
+ ]);
+
+ }
+}
diff --git a/app/Http/ViewComposers/WorkstationComposer.php b/app/Http/ViewComposers/WorkstationComposer.php
index 3433c9d7..9275e568 100755
--- a/app/Http/ViewComposers/WorkstationComposer.php
+++ b/app/Http/ViewComposers/WorkstationComposer.php
@@ -18,69 +18,70 @@ class WorkstationComposer
{
public function compose(View $view)
{
+ //Recebe o User pela sessao atual e recebe seus dados.
$userEmail = Auth::user()->email;
$receiveDataEmail = User::where('email', $userEmail)->first();
-
$receiveDataWs = ConstructionWorkstation::where('name_workstations', $receiveDataEmail->user_name)->first();
- // Busca todos os equipamentos associados a um determinado projeto.
- // $receiveAllEquipmentOfProject = Equipment::where('company_projects_id', $receiveDataWs->company_projects_id)
- // // Verifica se existe histórico de trabalho associado ao equipamento e ao projeto específico.
- // ->whereHas('equipmentWorkHistory', function ($query) use ($receiveDataWs) {
- // $query->where('company_projects_id', $receiveDataWs->company_projects_id);
+ // 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')
+ ->whereNull('departure_date')
+ ->where('status', 1)
+ ->groupBy('equipmentWorkHistorys_id')
+ ->havingRaw('SUM(CASE WHEN elemental_tasks_id = 9 THEN 1 ELSE 0 END) = 1') // Assegura um registro com elemental_tasks_id = 9
+ ->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);
// })
- // // Exclui os equipamentos cujo histórico de trabalho mais recente (controlEquipmentWorkstation) tem 'elemental_tasks_id' e 'departure_date' nulos.
- // ->whereDoesntHave('equipmentWorkHistory.controlEquipmentWorkstation', function ($query) {
- // $query->where(function ($q) {
- // $q->whereNull('elemental_tasks_id')
- // ->WhereNull('departure_date')
- // ->WhereNotNull('id_workstations');
- // }) ;
- // })
-
- // // Carrega o histórico de trabalho associado ao equipamento e ao projeto específico.
- // ->with([
- // 'equipmentWorkHistory' => function ($query) use ($receiveDataWs) {
- // // Filtra o histórico de trabalho pelo 'company_projects_id' para obter os registros relevantes.
- // $query->where('company_projects_id', $receiveDataWs->company_projects_id)
- // ->select('equipment_id', 'equipmentWorkHistorys_id'); // Seleciona apenas os campos necessários.
- // }
- // ])
- // ->get() // Obtém os resultados da consulta.
- // ->map(function ($equipment) {
- // // Supondo que cada equipamento tem apenas um 'equipmentWorkHistory' relevante para este contexto
- // if (!$equipment->equipmentWorkHistory->isEmpty()) {
- // $equipmentWorkHistory = $equipment->equipmentWorkHistory->first();
- // $equipment->equipmentWorkHistoryId = $equipmentWorkHistory->equipmentWorkHistorys_id;
- // } else {
- // // Definir como null ou algum valor padrão se não houver histórico correspondente
- // $equipment->equipmentWorkHistoryId = null;
- // }
- // return $equipment;
- // });
-
- // $receiveAllEquipmentOfProject = Equipment::where('company_projects_id', $receiveDataWs->company_projects_id)
// // Primeiro filtro: Equipamentos sem ocorrência em ControlEquipmentWorkstation
// ->whereDoesntHave('equipmentWorkHistory.controlEquipmentWorkstation')
- // // Segundo filtro: Equipamentos com ocorrências onde id_workstations e elemental_tasks_id são nulos
- // ->orWhereHas('equipmentWorkHistory.controlEquipmentWorkstation', function ($query) {
- // $query->whereNull('id_workstations')
- // ->whereNull('elemental_tasks_id');
+
+ // // 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 ocorrências onde id_workstations, elemental_tasks_id e departure_date não são nulos
- // ->orWhereHas('equipmentWorkHistory.controlEquipmentWorkstation', function ($query) {
- // $query->whereNotNull('id_workstations')
- // ->whereNotNull('elemental_tasks_id')
- // ->whereNotNull('departure_date');
+ // // 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);
// })
- // // Carrega o histórico de trabalho associado ao equipamento e ao projeto específico
- // ->with([
- // 'equipmentWorkHistory' => function ($query) use ($receiveDataWs) {
- // $query->where('company_projects_id', $receiveDataWs->company_projects_id)
- // ->select('equipment_id', 'equipmentWorkHistorys_id');
- // }
- // ])
// ->get()
// ->map(function ($equipment) {
// if (!$equipment->equipmentWorkHistory->isEmpty()) {
@@ -93,34 +94,49 @@ public function compose(View $view)
// });
+ // Busca todos os equipamentos associados a um determinado projeto.
$receiveAllEquipmentOfProject = Equipment::where('company_projects_id', $receiveDataWs->company_projects_id)
- ->where(function ($query) use ($receiveDataWs) {
+ // 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
+ $query->whereHas('equipmentWorkHistory.controlEquipmentWorkstation', function ($subQuery) {
+ $subQuery->whereNotNull('id_workstations')
+ ->whereNotNull('elemental_tasks_id')
+ ->whereNotNull('departure_date')
+ ->where('status', 1);
+ });
+
+ // 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');
+ });
+ });
+ });
// Primeiro filtro: Equipamentos sem ocorrência em ControlEquipmentWorkstation
$query->whereDoesntHave('equipmentWorkHistory.controlEquipmentWorkstation');
- // Segundo filtro: Equipamentos com ocorrências onde id_workstations e elemental_tasks_id são nulos
+ // 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
$query->orWhereHas('equipmentWorkHistory.controlEquipmentWorkstation', function ($subQuery) {
$subQuery->whereNull('id_workstations')
- ->whereNull('elemental_tasks_id');
- });
-
- // Terceiro filtro: Equipamentos com todas as ocorrências onde id_workstations, elemental_tasks_id e departure_date não são nulos
- // Inclui a condição para elemental_tasks_id = 9
- $query->orWhereHas('equipmentWorkHistory.controlEquipmentWorkstation', function ($subQuery) {
- $subQuery->whereNotNull('id_workstations')
- ->where(function ($innerQuery) {
- $innerQuery->whereNotNull('elemental_tasks_id')
- ->whereNotNull('departure_date')
- ->orWhere('elemental_tasks_id', 9); // Inclui equipamentos com elemental_tasks_id = 9 independentemente de outros critérios
- });
+ ->whereNull('elemental_tasks_id')
+ ->whereNull('departure_date')
+ ->where('status', 0);
});
})
- ->with([
- 'equipmentWorkHistory' => function ($query) use ($receiveDataWs) {
- $query->where('company_projects_id', $receiveDataWs->company_projects_id)
- ->select('equipment_id', 'equipmentWorkHistorys_id');
- }
- ])
+ ->with('equipmentWorkHistory') // Carrega o relacionamento equipmentWorkHistory
->get()
->map(function ($equipment) {
if (!$equipment->equipmentWorkHistory->isEmpty()) {
@@ -132,10 +148,11 @@ public function compose(View $view)
return $equipment;
});
-
-
$completedEquipments = collect(); // Coleção para armazenar equipamentos concluídos
+ // 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
@@ -152,6 +169,40 @@ public function compose(View $view)
continue; // Se não houver tarefas, continua para o próximo equipamento
}
+ // Busca registros na ControlEquipmentWorkstation com base no equipmentWorkHistoryId
+ $controlRecords = ControlEquipmentWorkstation::where('equipmentWorkHistorys_id', $workHistoryId)->get();
+
+ if ($controlRecords->isEmpty()) {
+ // Se não houver registros, considera como valor 0 (nenhuma tarefa ativa)
+ $equipmentStatus[$equipment->equipment_id] = 0;
+ } else {
+ //Deve verificar se o departure_date e NULL e o id_workstations <> null, e status = 0
+ // $activeTasks = $controlRecords->whereNull('departure_date');
+ $activeTasks = $controlRecords->whereNull('departure_date')
+ ->whereNotNull('id_workstations')
+ ->where('status', '!=', 0);
+
+ if ($activeTasks->isEmpty()) {
+ // Se não houver tarefas ativas, considera como valor 0 (nenhuma tarefa ativa)
+ $equipmentStatus[$equipment->equipment_id] = 0;
+ } else {
+ // Verifica as condições para determinar os valores 1 ou 2
+ $hasObturadorTask = $activeTasks->contains('elemental_tasks_id', 9);
+ $hasCorpoTask = $activeTasks->contains('elemental_tasks_id', null);
+
+ if ($hasObturadorTask) {
+ // Se tiver tarefa ativa para Obturador, valor = 2
+ $equipmentStatus[$equipment->equipment_id] = 2;
+ } elseif ($hasCorpoTask) {
+ // Se tiver tarefa ativa para Corpo, valor = 1
+ $equipmentStatus[$equipment->equipment_id] = 1;
+ } else {
+ // Caso contrário, considera como 0
+ $equipmentStatus[$equipment->equipment_id] = 0;
+ }
+ }
+ }
+
$workstationTaskCounts = ControlEquipmentWorkstation::whereIn('elemental_tasks_id', $taskIds)
->select('elemental_tasks_id', DB::raw('count(*) as total'))
->groupBy('elemental_tasks_id')
@@ -172,18 +223,39 @@ public function compose(View $view)
return $completedEquipments->contains($equipment);
});
+ $equipmentIds = array_keys($equipmentStatus);
- $equipmentIds = $receiveAllEquipmentOfProject->pluck('equipment_id');
- $receiveQrcodeEquipmentsProject = QrcodesAssociatedEquipment::whereIn('equipment_id', $equipmentIds)->get();
- //VAMOS filtrar os valores recebidos e terar todas as correspondencias de Flange, ja nao e uma tag que nao vai entrar no percurso do Equipamento.
- $filteredQrcodeEquipments = $receiveQrcodeEquipmentsProject->reject(function ($item) {
- return strpos($item->component_tag, '@Flange') !== false;
+ // Obtendo os registros QrcodesAssociatedEquipment para esses equipamentos
+ $receiveQrcodeEquipmentsProject = QrcodesAssociatedEquipment::whereIn('equipment_id', $equipmentIds)
+ ->get();
+
+
+ $filteredQrcodeEquipments = $receiveQrcodeEquipmentsProject->filter(function ($qrcodeEquipment) use ($equipmentStatus) {
+ // Exclui 'Flange'
+ if (strpos($qrcodeEquipment->component_tag, '@Flange') !== false) {
+ return false;
+ }
+
+
+
+ // Obtém o status do equipamento atual
+ $equipmentId = $qrcodeEquipment->equipment_id;
+ $status = $equipmentStatus[$equipmentId] ?? null;
+
+ // Decide se 'Corpo' ou 'Obturador' deve ser excluído com base no status
+ switch ($status) {
+ case 1: // Exclui 'Corpo' se o status for 1
+ return strpos($qrcodeEquipment->component_tag, '@Corpo') === false;
+ case 2: // Exclui 'Obturador' se o status for 2
+ return strpos($qrcodeEquipment->component_tag, '@Obturador') === false;
+ case 0: // Mantém ambos se o status for 0
+ default:
+ return true;
+ }
});
-
-
//Returning values of the queries to workstations layout
$view->with([
'receiveAllEquipmentOfProject' => $receiveAllEquipmentOfProject,
diff --git a/public/user_logos/1710242399.jpg b/public/user_logos/1710242399.jpg
new file mode 100644
index 00000000..ce91928d
Binary files /dev/null and b/public/user_logos/1710242399.jpg differ
diff --git a/resources/views/Templates/templateWorkstations.blade.php b/resources/views/Templates/templateWorkstations.blade.php
index c69885ee..bd2afe55 100755
--- a/resources/views/Templates/templateWorkstations.blade.php
+++ b/resources/views/Templates/templateWorkstations.blade.php
@@ -416,13 +416,12 @@ function(errorMessage) {
});
});
-
+ {{--
+ --}}
+
+
+
+
-
+
+ {{--
@@ -35,19 +36,25 @@
-
+ --}}
@section('content')
-
-
-
-
-
-
-
+ @endif
@@ -430,11 +437,11 @@ class="form-control card_inputs" id="isolation"