updating the WS structure

This commit is contained in:
ygbanzato 2024-01-25 16:54:19 +00:00
parent 3b86212755
commit 5ef4d8c95b
13 changed files with 3776 additions and 694 deletions

View File

@ -41,27 +41,8 @@ public function changeAmbitEquipment(Request $request)
{
$receiveAmbitEquipmentId = $request->receveAmbit;
$equipmentId = $request->equipmentID;
// $receiveEquipment = Equipment::where('equipment_id', $equipmentId)->first();
// $receiveEquipmentWorkHistorys = EquipmentWorkHistory::where('equipment_id',$receiveEquipment->equipment_id)
// ->where('company_projects_id', $receiveEquipment->company_projects_id )
// ->first();
// $receiveDataEquipmentAssociationAmbit = EquipmentAssociationAmbit::where('equipmentWorkHistorys_id',$receiveEquipmentWorkHistorys->equipmentWorkHistorys_id)->first();
// if($receiveDataEquipmentAssociationAmbit->ambits_id == $receiveAmbitEquipmentId){
// return back()->with('danger', 'Ambito selecionado, igual ao anterior!');
// } else {
// $receiveDataEquipmentAssociationAmbit->ambits_id = $receiveAmbitEquipmentId;
// $receiveDataEquipmentAssociationAmbit->save();
// }
$receiveEquipment = Equipment::where('equipment_id', $equipmentId)->first();
$receiveEquipmentWorkHistorys = EquipmentWorkHistory::where('equipment_id', $receiveEquipment->equipment_id)
@ -257,16 +238,65 @@ public function addFurtherTasks(Request $request)
public function receiveEquipmentToAssociateTasks(Request $request)
{
// dd($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 !');
}

View File

@ -93,7 +93,6 @@ public function test11($projectID, $equipmentID)
public function test22($equipmentID)
{
$dataEquipment = Equipment::find($equipmentID);
$attributes = SpecificAttributesEquipmentType::where('equipment_id', $equipmentID)->get(); // recebe todos os atributos espesificos do equipamento

View File

@ -6,6 +6,7 @@
use App\Models\ControlEquipmentWorkstation;
use App\Models\ElementalTasks;
use App\Models\Equipment;
use App\Models\EquipmentWorkHistory;
use App\Models\OrderEquipmentTasks;
use App\Models\workstationsTaskAnswers;
@ -16,12 +17,27 @@
class WorkstationsJobsController extends Controller
{
public function receiveAnswersEquipment(Request $request)
public function receiveAnswersEquipment(Request $request, $control_equipment_workstation_id)
{
//Deve recber o id da control atual.
// Primeiro ele deve criar a associação entre id atual do control + perguntas e respostas
// 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.
$requestData = $request->all();
foreach ($requestData as $key => $value) {
// Verifica se a chave começa com 'ID'
if (preg_match('/ID(\d+)/', $key, $matches)) {
// $matches[1] conterá o número após 'ID'
$elementalTaskID = intval($matches[1]);
break; // Sai do loop após encontrar o primeiro match
}
}
//Ele deve criar a associação entre id atual do control + perguntas e respostas
$receiveAnswersElementalTasks = new workstationsTaskAnswers;
$receiveAnswersElementalTasks->control_equipment_workstation_id = $request->controlEquipmentID;
$receiveAnswersElementalTasks->control_equipment_workstation_id = $control_equipment_workstation_id;
// Inicializando o array que vai armazenar os objetos JSON
$answersArray = []; // Array para armazenar as respostas
@ -59,7 +75,8 @@ public function receiveAnswersEquipment(Request $request)
$receiveAnswersElementalTasks->answer_json = $jsonString;
// Busca a Ws com base no id recebido da tabela Control.
$recebeDataControlWs = ControlEquipmentWorkstation::find($request->controlEquipmentID);
$recebeDataControlWs = ControlEquipmentWorkstation::find($control_equipment_workstation_id);
$recebeDataControlWs->elemental_tasks_id = $elementalTaskID;
$recebeDataControlWs->departure_date = now();
$requestData = $request->all();
@ -80,16 +97,16 @@ public function receiveAnswersEquipment(Request $request)
$receiveAnswersElementalTasks->save();
// 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->equipment_id = $recebeDataControlWs->equipment_id;
$newControlEquipment->id_workstations = $recebeDataControlWs->id_workstations;
$newControlEquipment->entry_date = now();
$newControlEquipment->save();
// $newControlEquipment = new ControlEquipmentWorkstation;
// $newControlEquipment->equipmentWorkHistorys_id = $recebeDataControlWs->equipmentWorkHistorys_id;
// $newControlEquipment->id_workstations = $recebeDataControlWs->id_workstations;
// $newControlEquipment->entry_date = now();
// $newControlEquipment->save();
// 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();
$receiveDataElementalTask = ElementalTasks::find($recebeDataControlWs->elemental_tasks_id, 'elemental_tasks_id')->first();
return back()->with('success', 'Tarefa :: '.$receiveDataElementalTask->elemental_tasks_code.'-'.$receiveDataElementalTask->elemental_tasks_code.' Concluída com sucesso!');
return back()->with('success', 'Tarefa :: ' . $receiveDataElementalTask->elemental_tasks_code . '-' . $receiveDataElementalTask->elemental_tasks_code . ' Concluída com sucesso!');
// return route('getEquipmentData', $recebeDataControlWs->equipment_id);
@ -100,36 +117,18 @@ public function getEquipmentData($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();
// Recebe todas as tarefas elementares do equipamento.
$recebeTasksForEquipment = OrderEquipmentTasks::where('equipment_id', $equipment_id)->get();
// Primeira coisa, deve verificar se existe dados deste equipamento e se suas coluna elemental_tasks_id e departure_date estao diferentes de null
// Se estiver diferente de null quer dizer que todas as tarefas anteriores deste equipamento ja foram realizadas e se ele ainda aparece na tabela de equipamentos por fazer que dizer que ele ainda nao terminou todas as suas tarefas.
$existingControlEquipment = ControlEquipmentWorkstation::where('equipment_id', $receiveDataEquipment->equipment_id)
->whereNull('elemental_tasks_id')
->whereNull('departure_date')
// 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();
$receiveDataControlEquipment = $existingControlEquipment;
// Ele realmente cria dados, porem toda a vez que da reload ele continua a criar.
// Ao entrar na tela do equipamento deve criar dados, para ele nao poder ser buscado por nenhuma outra WS.
if (!$existingControlEquipment) {
$createControlEquipment = new ControlEquipmentWorkstation;
$createControlEquipment->equipment_id = $receiveDataEquipment->equipment_id;
$createControlEquipment->id_workstations = $receiveDataWs->id_workstations;
$createControlEquipment->entry_date = now();
$createControlEquipment->save();
$receiveDataControlEquipment = $createControlEquipment;
}
// Recebe todas as tarefas elementares do equipamento.
$recebeTasksForEquipment = OrderEquipmentTasks::where('equipmentWorkHistorys_id', $receiveEquipmentWorkHistory->equipmentWorkHistorys_id)->get();
//Busca as tarefas que podem ser feitas pela WS Atual a partir do Email
$userTasks = DB::table('users as u')
->join('construction_workstations as cw', 'u.user_name', '=', 'cw.name_workstations')
@ -139,6 +138,7 @@ public function getEquipmentData($equipment_id)
->groupBy('cw.id_workstations', 'cw.name_workstations')
->get();
// Primeiro, obtenha todos os IDs de tarefas elementares e outras tarefas de $userTasks
$userTasksIds = $userTasks->pluck('all_tasks')->map(function ($tasks) {
// Transforma a string 'all_tasks' em um array e remove espaços em branco
@ -156,28 +156,33 @@ public function getEquipmentData($equipment_id)
1 => $commonIds->all(),
];
// IDs que estão em $recebeTasksForEquipment mas não em $userTasks
// IDs que estão em $recebeTasksForEquipment mas não em $userTasks ou seja sao os ids que a Ws nao pode executar estas tarefas.
$uniqueEquipmentTasksIds = $equipmentTasksIds->diff($userTasksIds);
// Adicione esses IDs únicos ao array $divisionElementalTasks na chave [2]
$divisionElementalTasks[2] = $uniqueEquipmentTasksIds->all();
// Ao selecionar um equipamento cria na ControlEquipmentWorkstation dados sobre o mesmo indicando quando entrou.
$newDataControlEquipment = new ControlEquipmentWorkstation;
$newDataControlEquipment->equipmentWorkHistorys_id = $receiveEquipmentWorkHistory->equipmentWorkHistorys_id;
$newDataControlEquipment->id_workstations = $receiveDataWs->id_workstations;
$newDataControlEquipment->entry_date = now();
$newDataControlEquipment->save();
// Primeiro, obtenha o registro de ControlEquipmentWorkstation que não deve ter 'elemental_tasks_id' e 'departure_date' como null
$completedTasks = ControlEquipmentWorkstation::where('equipment_id', $equipment_id)
$completedTasks = ControlEquipmentWorkstation::where('equipmentWorkHistorys_id', $receiveEquipmentWorkHistory->equipmentWorkHistorys_id)
->whereNotNull('elemental_tasks_id')
->whereNotNull('departure_date')
->pluck('elemental_tasks_id')->toArray(); // Supondo que você quer apenas os IDs das tarefas
// Agora, verifique se algum desses IDs está em $divisionElementalTasks[1] e mova para $divisionElementalTasks[3]
//Agora, verifique se algum desses IDs está em $divisionElementalTasks[1] e mova para $divisionElementalTasks[3]
//O id que for movido para o [3] sua inica condicao sera quando o 'entry_date' e 'departure_date' forem diferentes de null, assim indica ser uma tarefa Finalizada.
foreach ($completedTasks as $completedTaskId) {
if (in_array($completedTaskId, $divisionElementalTasks[1])) {
// Encontre a chave do valor correspondente em [1]
$key = array_search($completedTaskId, $divisionElementalTasks[1]);
// Mova a tarefa de [1] para [3]
$divisionElementalTasks[3][$key] = $completedTaskId;
// Remova a tarefa de [1]
unset($divisionElementalTasks[1][$key]);
}
@ -187,61 +192,112 @@ public function getEquipmentData($equipment_id)
// Verifica se o id da tarefa está no array de tarefas que podem ser feitas
if (in_array($task->elemental_tasks_id, $divisionElementalTasks[1])) {
$task->cardType = 'card-primary';
$task->cardTypeStyle = 'blue'; // Define o estilo de cor
}
// Verifica se o id da tarefa está no array de tarefas que não podem ser feitas
elseif (in_array($task->elemental_tasks_id, $divisionElementalTasks[2])) {
$task->cardType = 'card-warning';
$task->cardType = 'card-primary';
$task->cardTypeStyle = 'gray'; // Define o estilo de cor
// $task->InputInCardOnlyReadOrNot = 'readonly';
// Consulta ControlEquipmentWorkstation para verificar as condições especificadas
$controlEquipment = ControlEquipmentWorkstation::where('elemental_tasks_id', $task->elemental_tasks_id)
->whereNotNull('entry_date')
->whereNotNull('departure_date')
->first();
if ($controlEquipment) {
// Se encontrar, atribuir control_equipment_workstation_id
$task->control_equipment_workstation_id = $controlEquipment->control_equipment_workstation_id;
//buscar dados na model workstationsTaskAnswers
$workstationTaskAnswer = WorkstationsTaskAnswers::where('control_equipment_workstation_id', $task->control_equipment_workstation_id)
->first();
if ($workstationTaskAnswer) {
// Decodifica o JSON para um array
$answersArray = json_decode($workstationTaskAnswer->answer_json, true);
// Cria um array associativo onde as chaves são as perguntas e os valores são as respostas
$formattedAnswers = [];
foreach ($answersArray as $item) {
$formattedAnswers[$item['question']] = $item['value'];
}
// Atribui o array formatado ao task
$task->formatted_answers = $formattedAnswers;
}
}
}
// Verifica se o id da tarefa está no array de tarefas já feitas
elseif (in_array($task->elemental_tasks_id, $divisionElementalTasks[3])) {
$task->cardType = 'card-info';
}
// Se não estiver em nenhum dos arrays, define um tipo padrão (opcional)
else {
$task->cardType = 'card-warning'; // ou qualquer outra classe que você queira usar como padrão
}
$task->cardTypeStyle = 'green'; // Define o estilo de cor
// Consulta ControlEquipmentWorkstation para verificar as condições especificadas
$controlEquipment = ControlEquipmentWorkstation::where('equipmentWorkHistorys_id', $task->equipmentWorkHistorys_id)
->where('elemental_tasks_id', $task->elemental_tasks_id)
->whereNotNull('entry_date')
->whereNotNull('departure_date')
->first();
if ($controlEquipment) {
// Se encontrar, atribuir control_equipment_workstation_id
$task->control_equipment_workstation_id = $controlEquipment->control_equipment_workstation_id;
//buscar dados na model workstationsTaskAnswers
$workstationTaskAnswer = WorkstationsTaskAnswers::where('control_equipment_workstation_id', $task->control_equipment_workstation_id)
->first();
if ($workstationTaskAnswer) {
// Decodifica o JSON para um array
$answersArray = json_decode($workstationTaskAnswer->answer_json, true);
// Cria um array associativo onde as chaves são as perguntas e os valores são as respostas
$formattedAnswers = [];
foreach ($answersArray as $item) {
$formattedAnswers[$item['question']] = $item['value'];
}
// Atribui o array formatado ao task
$task->formatted_answers = $formattedAnswers;
}
}
}
return $task;
});
// dd($divisionElementalTasks);
// dd($recebeTasksForEquipment);
return view('workstations.workstations', [
// Deve receber o atual COntrol ID ? tudo a vez que atualizar atualiza ??
'dataControlEquipment' => $newDataControlEquipment,
'receiveDataEquipment' => $receiveDataEquipment,
'receiveDataControlEquipment' => $receiveDataControlEquipment,
'recebeTasksForEquipment' => $recebeTasksForEquipment,
'divisionElementalTasks' => $divisionElementalTasks,
]);
// Busca os Equipamento com base nas tarefas que a Ws atual pode fazer.
// Nao sei de ainda va ser usado apos a atualizacao.
// $equipmentTasks = DB::table('users as u')
// ->join('construction_workstations as cw', 'u.user_name', '=', 'cw.name_workstations')
// ->join('workstations_association_tasks as wat', 'cw.id_workstations', '=', 'wat.id_workstations')
// ->join('equipments as e', 'wat.company_projects_id', '=', 'e.company_projects_id')
// ->join('ordered_equipment_tasks as oet', 'e.equipment_id', '=', 'oet.equipment_id')
// ->where('u.email', $userEmail->email)
// ->select('e.equipment_id', 'e.equipment_tag', DB::raw('GROUP_CONCAT(DISTINCT COALESCE(oet.elemental_tasks_id, oet.further_tasks_id) ORDER BY oet.execution_order) AS equipment_all_tasks'))
// ->groupBy('e.equipment_id', 'e.equipment_tag')
// ->orderBy('e.equipment_id', 'ASC')
// ->get();
// Convertendo as tarefas do usuário(WS) em um array
// $tasksArray = explode(',', $userTasks->pluck('all_tasks')->first());
}
public function cancelElementalTaskForEquipment($equipmentID)
{
//Nesta funcao se o utilizador da Ws apenas o botao de cancelar na view principal,o equipamento deve se desvincular na Ws atual e poder ser selecionado por outra.
//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();
$existingControlEquipment = ControlEquipmentWorkstation::where('equipment_id', $receiveDataEquipment->equipment_id)
// 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();
$existingControlEquipment = ControlEquipmentWorkstation::where('equipmentWorkHistorys_id', $receiveEquipmentWorkHistory->equipmentWorkHistorys_id)
->whereNull('elemental_tasks_id')
->whereNull('departure_date')
->first();
$existingControlEquipment->delete();
->delete();
return redirect(route('enterWorkstation'));
}
}

View File

@ -2,6 +2,11 @@
namespace App\Http\ViewComposers;
use App\Models\ConstructionWorkstation;
use App\Models\ControlEquipmentWorkstation;
use App\Models\Equipment;
use App\Models\EquipmentWorkHistory;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
@ -12,376 +17,29 @@ class WorkstationComposer
public function compose(View $view)
{
$userEmail = Auth::user()->email;
$receiveDataEmail = User::where('email', $userEmail)->first();
$equipmentsTodo = DB::select("
WITH equipments_multiple_rows AS (
SELECT
e.equipment_id,
e.equipment_tag,
COALESCE(MAX(oet.elemental_tasks_id), MAX(oet.further_tasks_id)) AS equipment_all_tasks
FROM
users u
JOIN
construction_workstations cw ON u.user_name = cw.name_workstations
JOIN
workstations_association_tasks wat ON cw.id_workstations = wat.id_workstations
JOIN
equipments e ON wat.company_projects_id = e.company_projects_id
JOIN
ordered_equipment_tasks oet ON e.equipment_id = oet.equipment_id
WHERE
u.email = :email1
AND
oet.execution_order = 1
GROUP BY
e.equipment_id,
e.equipment_tag
),
$receiveDataWs = ConstructionWorkstation::where('name_workstations', $receiveDataEmail->user_name)->first();
workstations_multiple_rows AS (
SELECT
cw.id_workstations,
cw.name_workstations,
COALESCE(wat.elemental_tasks_id, wat.further_tasks_id) AS all_tasks
FROM
users u
JOIN
construction_workstations cw ON u.user_name = cw.name_workstations
JOIN
workstations_association_tasks wat ON cw.id_workstations = wat.id_workstations
WHERE
u.email = :email2
),
workstations_control_all_tasks AS (
SELECT
cew.control_equipment_workstation_id,
cew.equipment_id,
CASE
WHEN cew.id_workstations IS NULL THEN NULL
WHEN cew.id_workstations IN (
SELECT wat.id_workstations
FROM workstations_association_tasks wat
JOIN construction_workstations cw ON wat.company_projects_id = cw.company_projects_id
JOIN users u ON u.user_name = cw.name_workstations
WHERE u.email = :email3
) THEN cew.id_workstations
ELSE NULL
END AS control_id_workstations,
COALESCE(cew.elemental_tasks_id, cew.further_tasks_id) AS control_workstation_all_tasks,
cew.equipment_comments_id,
cew.entry_date,
cew.departure_date
FROM
control_equipment_workstation cew
WHERE
cew.id_workstations IS NULL
OR cew.id_workstations IN (
SELECT wat.id_workstations
FROM workstations_association_tasks wat
JOIN construction_workstations cw ON wat.company_projects_id = cw.company_projects_id
JOIN users u ON u.user_name = cw.name_workstations
WHERE u.email = :email4
)
)
SELECT
emr.equipment_id,
emr.equipment_tag
FROM
equipments_multiple_rows emr
WHERE
(
emr.equipment_all_tasks IN (SELECT all_tasks FROM workstations_multiple_rows)
AND NOT EXISTS (
SELECT 1
FROM workstations_control_all_tasks wc
WHERE wc.equipment_id = emr.equipment_id
AND wc.control_id_workstations IN (SELECT id_workstations FROM workstations_multiple_rows)
)
)
OR
(
emr.equipment_id IN (
SELECT equipment_id
FROM workstations_control_all_tasks
WHERE control_id_workstations IS NULL
AND entry_date IS NULL
AND departure_date IS NULL
AND control_workstation_all_tasks IN (SELECT all_tasks FROM workstations_multiple_rows)
)
AND NOT EXISTS (
SELECT 1
FROM workstations_control_all_tasks wc
WHERE wc.equipment_id = emr.equipment_id
AND wc.control_id_workstations IS NOT NULL
GROUP BY wc.equipment_id
HAVING COUNT(DISTINCT wc.control_id_workstations) > 20
)
)
GROUP BY
emr.equipment_id,
emr.equipment_tag
ORDER BY
emr.equipment_id ASC;
", [
'email1' => $userEmail,
'email2' => $userEmail,
'email3' => $userEmail,
'email4' => $userEmail
]);
$equipmentsReturned = DB::select("
WITH equipments_multiple_rows AS (
SELECT
e.equipment_id,
e.equipment_tag,
COALESCE(MAX(oet.elemental_tasks_id), MAX(oet.further_tasks_id)) AS equipment_all_tasks
FROM
users u
JOIN
construction_workstations cw ON u.user_name = cw.name_workstations
JOIN
workstations_association_tasks wat ON cw.id_workstations = wat.id_workstations
JOIN
equipments e ON wat.company_projects_id = e.company_projects_id
JOIN
ordered_equipment_tasks oet ON e.equipment_id = oet.equipment_id
WHERE
u.email = :email1
AND
oet.execution_order = 1
GROUP BY
e.equipment_id,
e.equipment_tag
),
workstations_multiple_rows AS (
SELECT
cw.id_workstations,
cw.name_workstations,
COALESCE(wat.elemental_tasks_id, wat.further_tasks_id) AS all_tasks
FROM
users u
JOIN
construction_workstations cw ON u.user_name = cw.name_workstations
JOIN
workstations_association_tasks wat ON cw.id_workstations = wat.id_workstations
WHERE
u.email = :email2
),
workstations_control_all_tasks AS (
SELECT
cew.control_equipment_workstation_id,
cew.equipment_id,
CASE
WHEN cew.id_workstations IS NULL THEN NULL
WHEN cew.id_workstations IN (
SELECT wat.id_workstations
FROM workstations_association_tasks wat
JOIN construction_workstations cw ON wat.company_projects_id = cw.company_projects_id
JOIN users u ON u.user_name = cw.name_workstations
WHERE u.email = :email3
) THEN cew.id_workstations
ELSE NULL
END AS control_id_workstations,
COALESCE(cew.elemental_tasks_id, cew.further_tasks_id) AS control_workstation_all_tasks,
cew.equipment_comments_id,
cew.entry_date,
cew.departure_date
FROM
control_equipment_workstation cew
WHERE
cew.id_workstations IS NULL
OR cew.id_workstations IN (
SELECT wat.id_workstations
FROM workstations_association_tasks wat
JOIN construction_workstations cw ON wat.company_projects_id = cw.company_projects_id
JOIN users u ON u.user_name = cw.name_workstations
WHERE u.email = :email4
)
)
SELECT
emr.equipment_id,
emr.equipment_tag
FROM
equipments_multiple_rows emr
WHERE
emr.equipment_id IN (
SELECT equipment_id
FROM workstations_control_all_tasks
WHERE control_id_workstations IS NULL
AND entry_date IS NULL
AND departure_date IS NULL
AND control_workstation_all_tasks IN (SELECT all_tasks FROM workstations_multiple_rows)
AND EXISTS (
SELECT 1
FROM workstations_control_all_tasks wc
WHERE wc.equipment_id = emr.equipment_id
AND wc.control_id_workstations IS NOT NULL
GROUP BY wc.equipment_id
HAVING COUNT(DISTINCT wc.control_id_workstations) >= 20
)
)
GROUP BY
emr.equipment_id,
emr.equipment_tag
ORDER BY
emr.equipment_id ASC;
", [
'email1' => $userEmail,
'email2' => $userEmail,
'email3' => $userEmail,
'email4' => $userEmail
]);
$equipmentsDone = DB::select("
WITH equipments_multiple_rows AS (
SELECT
e.equipment_id,
e.equipment_tag,
COALESCE(MAX(oet.elemental_tasks_id), MAX(oet.further_tasks_id)) AS equipment_all_tasks
FROM
users u
JOIN
construction_workstations cw ON u.user_name = cw.name_workstations
JOIN
workstations_association_tasks wat ON cw.id_workstations = wat.id_workstations
JOIN
equipments e ON wat.company_projects_id = e.company_projects_id
JOIN
ordered_equipment_tasks oet ON e.equipment_id = oet.equipment_id
WHERE
u.email = :email1
AND
oet.execution_order = 1
GROUP BY
e.equipment_id,
e.equipment_tag
),
workstations_multiple_rows AS (
SELECT
cw.id_workstations,
cw.name_workstations,
COALESCE(wat.elemental_tasks_id, wat.further_tasks_id) AS all_tasks
FROM
users u
JOIN
construction_workstations cw ON u.user_name = cw.name_workstations
JOIN
workstations_association_tasks wat ON cw.id_workstations = wat.id_workstations
WHERE
u.email = :email2
),
workstations_control_all_tasks AS (
SELECT
cew.control_equipment_workstation_id,
cew.equipment_id,
CASE
WHEN cew.id_workstations IS NULL THEN NULL
WHEN cew.id_workstations IN (
SELECT wat.id_workstations
FROM workstations_association_tasks wat
JOIN construction_workstations cw ON wat.company_projects_id = cw.company_projects_id
JOIN users u ON u.user_name = cw.name_workstations
WHERE u.email = :email3
) THEN cew.id_workstations
ELSE NULL
END AS control_id_workstations,
COALESCE(cew.elemental_tasks_id, cew.further_tasks_id) AS control_workstation_all_tasks,
cew.equipment_comments_id,
cew.entry_date,
cew.departure_date
FROM
control_equipment_workstation cew
WHERE
cew.id_workstations IS NULL
OR cew.id_workstations IN (
SELECT wat.id_workstations
FROM workstations_association_tasks wat
JOIN construction_workstations cw ON wat.company_projects_id = cw.company_projects_id
JOIN users u ON u.user_name = cw.name_workstations
WHERE u.email = :email4
)
)
SELECT
emr.equipment_id,
emr.equipment_tag
FROM
equipments_multiple_rows emr
WHERE
EXISTS (
SELECT 1
FROM workstations_control_all_tasks wc
JOIN workstations_multiple_rows wmr ON wc.control_id_workstations = wmr.id_workstations
WHERE wc.equipment_id = emr.equipment_id
AND wc.control_workstation_all_tasks = wmr.all_tasks
AND wc.entry_date IS NOT NULL
AND wc.departure_date IS NOT NULL
AND wc.control_id_workstations IS NOT NULL
)
AND NOT EXISTS (
SELECT 1
FROM workstations_control_all_tasks wc
WHERE wc.equipment_id = emr.equipment_id
AND wc.control_workstation_all_tasks IN (SELECT all_tasks FROM workstations_multiple_rows)
AND wc.control_id_workstations IS NULL
)
GROUP BY
emr.equipment_id,
emr.equipment_tag
ORDER BY
emr.equipment_id ASC;
", [
'email1' => $userEmail,
'email2' => $userEmail,
'email3' => $userEmail,
'email4' => $userEmail
]);
$workstationNameQuery = DB::select("
SELECT construction_workstations.nomenclature_workstation
FROM construction_workstations
JOIN users
WHERE construction_workstations.name_workstations = users.user_name
AND users.email = :email;
", ['email' => $userEmail]);
$workstationName = $workstationNameQuery[0]->nomenclature_workstation;
//Counting of equipments
$equipmentsTodoCount = count($equipmentsTodo);
$equipmentsDoneCount = count($equipmentsDone);
$equipmentsReturnedCount = count($equipmentsReturned);
$receiveAllEquipmentOfProject = Equipment::where('company_projects_id', $receiveDataWs->company_projects_id)
->whereHas('equipmentWorkHistory', function ($query) use ($receiveDataWs) {
$query->where('company_projects_id', $receiveDataWs->company_projects_id);
})
->whereDoesntHave('equipmentWorkHistory.controlEquipmentWorkstation', function ($query) {
$query->whereNull('elemental_tasks_id')
->whereNull('departure_date');
})
->get();
$receiceCountAllEquipmentOfProject = count($receiveAllEquipmentOfProject);
//Returning values of the queries to workstations layout
$view->with([
'equipmentsTodo' => $equipmentsTodo,
'equipmentsTodoCount' => $equipmentsTodoCount,
'equipmentsDone' => $equipmentsDone,
'equipmentsDoneCount' => $equipmentsDoneCount,
'equipmentsReturned' => $equipmentsReturned,
'equipmentsReturnedCount' => $equipmentsReturnedCount,
'workstationName' => $workstationName
'receiveAllEquipmentOfProject' => $receiveAllEquipmentOfProject,
'receiceCountAllEquipmentOfProject' => $receiceCountAllEquipmentOfProject,
'receiveDataWs' => $receiveDataWs,
]);
}
}

View File

@ -22,6 +22,10 @@ public function equipment()
return $this->belongsTo(Equipment::class, 'equipment_id', 'equipment_id');
}
public function equipmentWorkHistory(){
return $this->belongsTo(EquipmentWorkHistory::class,'equipmentWorkHistorys_id','equipmentWorkHistorys_id');
}
public function elementalTask()
{
return $this->belongsTo(ElementalTasks::class,'elemental_tasks_id','elemental_tasks_id');
@ -33,4 +37,5 @@ public function furtherTasks()
}
}

View File

@ -67,9 +67,6 @@ public function hasInspectionYes()
return $this->orderEquipmentTasks()->where('inspection', 'Sim')->exists();
}
public function EquipmentWorkHistory(){
return $this->hasMany(EquipmentWorkHistory::class, 'equipment_id','equipment_id');
}

View File

@ -23,4 +23,10 @@ public function companyProject()
{
return $this->belongsTo(Equipment::class, 'company_projects_id', 'company_projects_id');
}
public function controlEquipmentWorkstation()
{
return $this->hasMany(ControlEquipmentWorkstation::class, 'equipmentWorkHistorys_id', 'equipmentWorkHistorys_id');
}
}

View File

@ -59,19 +59,13 @@
<li class="nav-item">
<a class="nav-link">
<i class="fas fa-play" style="color:#1f2d3d"></i>
<span class="badge badge-info navbar-badge">{{ $equipmentsTodoCount }}</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link">
<i class="fas fa-undo" style="color:#1f2d3d"></i>
<span class="badge badge-warning navbar-badge">{{ $equipmentsReturnedCount }}</span>
<span class="badge badge-info navbar-badge">{{ $receiceCountAllEquipmentOfProject }}</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link">
<i class="fas fa-check" style="color:#1f2d3d"></i>
<span class="badge badge-success navbar-badge">{{ $equipmentsDoneCount }}</span>
{{-- <span class="badge badge-success navbar-badge">{{ $equipmentsDoneCount }}</span> --}}
</a>
</li>
</ul>
@ -79,7 +73,7 @@
<ul class="navbar-nav ml-auto">
<li class="nav-item d-none d-sm-inline-block">
<!--<div class="nav-link">{{ Auth::user()->user_name }}</div>-->
<div class="nav-link" style="color:#1f2d3d">{{ $workstationName }}</div>
<div class="nav-link" style="color:#1f2d3d">{{ $receiveDataWs->nomenclature_workstation }}</div>
</li>
<!-- User Dropdown Menu -->
<li class="nav-item dropdown">
@ -145,39 +139,21 @@ class="brand-image img-circle elevation-3" style="opacity: .8">
<a href="#" class="nav-link text-white" style="background-color: #007BFF;">
<i class="nav-icon fas fa-play"></i>
<p>
{{ $equipmentsTodoCount }} a iniciar
{{ $receiceCountAllEquipmentOfProject }}
a iniciar
<i class="right fas fa-angle-left"></i>
</p>
</a>
<ul class="nav nav-treeview">
{{-- @foreach ($equipmentsTodo as $equipmentTodo)
@foreach ($receiveAllEquipmentOfProject as $equipmentOfProject )
<li class="nav-item">
<a href="{{ route('getEquipmentData', $equipmentTodo->equipment_id) }}"
<a href="{{ route('getEquipmentData', $equipmentOfProject->equipment_id) }}"
class="nav-link text-white">
<i class="fas fa-tag nav-icon"></i>
<p>{{ $equipmentTodo->equipment_tag }}</p>
<p>{{ $equipmentOfProject->equipment_tag }}</p>
</a>
</li>
@endforeach --}}
</ul>
</li>
<li class="nav-item menu-closed">
<a href="#" class="nav-link text-white" style="background-color: #ba9420;">
<i class="nav-icon fas fa-undo"></i>
<p>{{ $equipmentsReturnedCount }} retornadas
<i class="right fas fa-angle-left"></i>
</p>
</a>
<ul class="nav nav-treeview">
{{-- @foreach ($equipmentsReturned as $equipmentReturned)
<li class="nav-item">
<a href="#" class="nav-link text-white">
<i class="fas fa-tag nav-icon"></i>
<p>{{ $equipmentReturned->equipment_tag }}</p>
</a>
</li>
@endforeach --}}
@endforeach
</ul>
</li>
</ul>
@ -261,19 +237,20 @@ class="nav-link text-white">
<a href="#" class="nav-link text-white" style="background-color: #28a745;">
<i class="nav-icon fas fa-check"></i>
<p>
{{ $equipmentsDoneCount }} válvulas concluídas
{{-- {{ $equipmentsDoneCount }} --}}
válvulas concluídas
<i class="right fas fa-angle-left"></i>
</p>
</a>
<ul class="nav nav-treeview">
@foreach ($equipmentsDone as $equipmentDone)
{{-- @foreach ($equipmentsDone as $equipmentDone)
<li class="nav-item-right">
<a href="#" class="nav-link text-white">
<i class="fas fa-tag nav-icon"></i>
<p>{{ $equipmentDone->equipment_tag }}</p>
</a>
</li>
@endforeach
@endforeach --}}
</ul>
</li>
</ul>

View File

@ -135,11 +135,6 @@
<label>{{ __('messages.createProject.project_start_date') }} : <b
style="color:red">*</b></label>
<div class="input-group">
{{-- <div class="input-group-prepend">
<span class="input-group-text">
<i class="far fa-calendar-alt"></i>
</span>
</div> --}}
<input name="date_started" type="datetime-local"
class="form-control float-right" required>
</div>

View File

@ -1144,8 +1144,8 @@
<div class="d-flex justify-content-between align-items-center"
style="width: 100%;">
{{-- <h3 class="card-title mb-0">TE4 - PSV - Abertura de válvula, análise e controle dos
componentes
</h3> --}}
componentes
</h3> --}}
<h3 class="card-title mb-0">
{{$task_todo->elemental_tasks_id}} </h3>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -119,7 +119,7 @@
})->name('enterWorkstation');
Route::get('/getEquipmentData/{equipment_id}', [WorkstationsJobsController::class, 'getEquipmentData'])->name('getEquipmentData');
Route::post('receiveAnswersEquipment', [WorkstationsJobsController::class, 'receiveAnswersEquipment'])->name('receiveAnswersEquipment');
Route::post('receiveAnswersEquipment/{control_equipment_workstation_id}', [WorkstationsJobsController::class, 'receiveAnswersEquipment'])->name('receiveAnswersEquipment');
});
Route::middleware(['checkUserType:testClient'])->group(function () {