ispt4.0_laravel/app/Http/Controllers/WorkstationsJobsController.php

205 lines
8.0 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\ConstructionWorkstation;
use App\Models\ControlEquipmentWorkstation;
use App\Models\ElementalTasks;
use App\Models\Equipment;
use App\Models\workstationsTaskAnswers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
class WorkstationsJobsController extends Controller
{
public function index()
{
return view('workstations.start');
}
public function controlEquipment()
{
// A partir deste dado consigo receber os valores do WS,TE e Equipment
$controlEquipmentWorkstationId = 33;
$receiveEquipment = Equipment::where('equipment_id', 1443)->first();
$task_todo = 1;
return view('workstations.workstations', [
'task_todo' => $task_todo,
'controlEquipmentWorkstationId' => $controlEquipmentWorkstationId,
'receiveEquipment' => $receiveEquipment
]);
}
// public function receiveAnswersEquipment(Request $request)
// {
// $receiveAnswersElementalTasks = new workstationsTaskAnswers;
// $receiveAnswersElementalTasks->control_equipment_workstation_id = $request->control_equipment_workstation_id;
// $receiveAnswersElementalTasks->answer_json =
// }
// Recebe as perguntas e respostas e deve criar um linha nova.
public function receiveAnswersEquipment(Request $request)
{
// Primeiro ele deve criar a associação entre id atual do control + perguntas e respostas
$receiveAnswersElementalTasks = new workstationsTaskAnswers;
$receiveAnswersElementalTasks->control_equipment_workstation_id = $request->control_equipment_workstationid;
// Inicializando o array que vai armazenar os objetos JSON
$answersArray = [];
foreach ($request->all() as $key => $value) {
// Ignorando a chave control_equipment_workstation_id
if ($key !== 'control_equipment_workstation_id') {
// Verificando se $key contém '-'
if (strpos($key, '-') === false) {
// Se não contiver, pular esta iteração
continue;
}
// Dividindo a chave em duas partes: question e type
list($question, $type) = explode('-', $key);
// Adicionando um novo objeto JSON ao array
$answersArray[] = [
'type' => $type,
'value' => $value,
'question' => $question
];
}
}
// Convertendo o array em uma string JSON
$jsonString = json_encode($answersArray);
// Armazenando a string JSON no banco de dados
$receiveAnswersElementalTasks->answer_json = $jsonString;
$receiveAnswersElementalTasks->save();
// update departure_date value
$receiveDataControlWs = ControlEquipmentWorkstation::find($request->control_equipment_workstationid);
$receiveDataControlWs->departure_date = now();
$receiveDataControlWs->save();
//FINALIZOU A TAREFA ANTERIOR COM DEPARTURE
//Busca o Email
$userEmail = Auth::user()->email;
//Busca o id Anterior
$control_ew_id = $request->control_equipment_workstationid;
// Busca a Ws com base no id recebido da tabela Control.
$recebeDataControlId = ControlEquipmentWorkstation::find($request->control_equipment_workstationid);
//Chama o procedimento
$controlTasks = DB::select('CALL ManageNextTask(?, ?)', [$userEmail, $control_ew_id]);
//Saving the values to a variable
if (count($controlTasks) > 0) {
$current_workstation = $controlTasks[0]->id_workstations;
$next_workstation = $controlTasks[0]->next_workstation;
$next_todo = $controlTasks[0]->next_todo;
} else {
//It should always exist, but you never know :)
$next_todo = null;
}
//RECEBE OS VALORES DA PROXIMA WS E PROXIMA TAREFA
// Recebe os dados de cada Tarefa Elementar.
$receiveDataElementalTask = ElementalTasks::find($recebeDataControlId->elemental_tasks_id);
$receiveDataEquipment = Equipment::find($recebeDataControlId->equipment_id);
if ($next_todo < 25) {
$elemental_tasks_id = $next_todo;
$further_tasks_id = null;
} else {
$elemental_tasks_id = null;
$further_tasks_id = $next_todo;
}
//Se a proxima WS for igual a atual deve criar dados para a ws
if ($recebeDataControlId->id_workstations == $next_workstation) {
$nextEquipmentTask = DB::select("
INSERT INTO control_equipment_workstation
(equipment_id, id_workstations, elemental_tasks_id, further_tasks_id, equipment_comments_id, entry_date, departure_date)
VALUES
(:equipment_id,:next_workstation,:elemental_tasks_id,:further_tasks_id,NULL,CURRENT_TIMESTAMP,NULL)
", [
'equipment_id' => $receiveDataEquipment->equipment_id,
'next_workstation' => $next_workstation,
'elemental_tasks_id' => $elemental_tasks_id,
'further_tasks_id' => $further_tasks_id
]);
$lastInsertedId = DB::getPdo()->lastInsertId();
return view('workstations.workstations', [
'receiveDataElementalTask' => $receiveDataElementalTask,
'receiveDataEquipment' => $receiveDataEquipment,
'control_ew_id' => $lastInsertedId,
'task_todo' => $next_todo
]);
// Se verificar que a proxima tarefa e Null ele deve apenas voltar ao start
} else if($next_todo == null){
return view('workstations.start');
}
else {
$nextEquipmentTask = DB::select("
INSERT INTO control_equipment_workstation
(equipment_id, id_workstations, elemental_tasks_id, further_tasks_id, equipment_comments_id, entry_date, departure_date)
VALUES
(:equipment_id,NULL,:elemental_tasks_id,:further_tasks_id,NULL,NULL,NULL)
", [
'equipment_id' => $receiveDataEquipment->equipment_id,
'elemental_tasks_id' => $elemental_tasks_id,
'further_tasks_id' => $further_tasks_id
]);
return view('workstations.start');
}
}
// Ao selecionar o equipamento para se inicializar a tarefa deve mostrar os dados relacionados.
public function getEquipmentData($equipment_id)
{ //vai receber o email atual, no caso o da workstation que se encontra
$userEmail = Auth::user()->email;
$receiveDataEquipment = Equipment::where('equipment_id', $equipment_id)->first();
//Calling the MySQL procedure tthat will return a table with two columns and one row
//cria a nova linha
$equipmentData = DB::select('CALL ManageEquipmentTasks(?, ?)', [$userEmail, $equipment_id]);
// //Saving the values to a variable
if (count($equipmentData) > 0) {
$control_ew_id = $equipmentData[0]->control_ew_id;
$task_todo = $equipmentData[0]->task_todo;
} else {
//It should always exist, but you never know :)
$control_ew_id = null;
$task_todo = null;
}
$recebeDataControlId = ControlEquipmentWorkstation::find($control_ew_id);
// Recebe os dados de cada Tarefa Elementar.
$receiveDataElementalTask = ElementalTasks::find($recebeDataControlId->elemental_tasks_id);
//Deve recupar os dados da tarefa Atual quando receber o control_id
//Returning the values to a view "values"
return view('workstations.workstations', [
'receiveDataElementalTask' => $receiveDataElementalTask,
'receiveDataEquipment' => $receiveDataEquipment,
'control_ew_id' => $control_ew_id,
'task_todo' => $task_todo
]);
}
}