351 lines
16 KiB
PHP
351 lines
16 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 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);
|
|
|
|
|
|
//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;
|
|
}
|
|
// dd($recebeDataControlId->id_workstations );
|
|
|
|
|
|
if ($request->stateEquipment == "cancel") {
|
|
$deleteDataControlWhereRefreashPage = ControlEquipmentWorkstation::where('id_workstations', $receiveDataControlWs->id_workstations)
|
|
->where('equipment_id', $receiveDataEquipment->equipment_id)
|
|
->whereNotNull('entry_date')
|
|
->whereNull('departure_date')
|
|
->first();
|
|
|
|
if ($deleteDataControlWhereRefreashPage) {
|
|
$deleteDataControlWhereRefreashPage->id_workstations = null;
|
|
$deleteDataControlWhereRefreashPage->entry_date = null;
|
|
$deleteDataControlWhereRefreashPage->departure_date = null;
|
|
$deleteDataControlWhereRefreashPage->save();
|
|
}
|
|
return redirect()->route('enterWorkstation');
|
|
|
|
} if ($request->stateEquipment == "finish") {
|
|
|
|
$receiveDataControlWs->departure_date = now();
|
|
$receiveDataControlWs->save();
|
|
|
|
$nextEquipmentTaskStateEquipmentFinish = 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 redirect()->route('enterWorkstation');
|
|
|
|
}
|
|
if ($request->stateEquipment == 'next') {
|
|
|
|
|
|
|
|
$receiveDataControlWs->departure_date = now();
|
|
$receiveDataControlWs->save();
|
|
|
|
// Para criar a divisao do equipamento em entre compo e Obturador
|
|
if ($receiveDataControlWs->elemental_tasks_id == 5 && $receiveDataEquipment->equipment_type_id == 3) {
|
|
|
|
$nextEquipmentTask1 = 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,8,:further_tasks_id,NULL,NULL,NULL)
|
|
", [
|
|
'equipment_id' => $receiveDataEquipment->equipment_id,
|
|
'further_tasks_id' => $further_tasks_id
|
|
]);
|
|
|
|
$nextEquipmentTask2 = 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,9,:further_tasks_id,NULL,NULL,NULL)
|
|
", [
|
|
'equipment_id' => $receiveDataEquipment->equipment_id,
|
|
'further_tasks_id' => $further_tasks_id
|
|
]);
|
|
// Equipamento separado em 2 corpo/ Obturador
|
|
return redirect()->route('enterWorkstation');
|
|
}
|
|
|
|
// Quando concluir as tarefas 8 e 9
|
|
if ($receiveDataEquipment->equipment_type_id == 3 && ($receiveDataControlWs->elemental_tasks_id == 8 || $receiveDataControlWs->elemental_tasks_id == 9)) {
|
|
// dd('recebe if Quando concluir as tarefas 8 e 9 ');
|
|
|
|
// Verifique se já existem registros na tabela control_equipment_workstation
|
|
$existingRecords = DB::table('control_equipment_workstation')
|
|
->where('equipment_id', $receiveDataControlWs->equipment_id)
|
|
->whereIn('elemental_tasks_id', [8, 9])
|
|
->whereNotNull('departure_date')
|
|
->get();
|
|
|
|
// Verifique se há pelo menos dois registros que atendem às condições
|
|
if ($existingRecords->count() >= 2) {
|
|
|
|
// Crie um novo registro com elemental_tasks_id igual a 10
|
|
$nextEquipmentTask3 = DB::table('control_equipment_workstation')->insertGetId([
|
|
'equipment_id' => $receiveDataControlWs->equipment_id,
|
|
'id_workstations' => NULL,
|
|
'elemental_tasks_id' => 10,
|
|
'further_tasks_id' => $further_tasks_id,
|
|
'equipment_comments_id' => NULL,
|
|
'entry_date' => NULL,
|
|
'departure_date' => NULL,
|
|
]);
|
|
}
|
|
|
|
return redirect()->route('enterWorkstation');
|
|
}
|
|
|
|
|
|
|
|
//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();
|
|
|
|
$receiveDataNewElementalTask = ElementalTasks::find($elemental_tasks_id);
|
|
|
|
return view('workstations.workstations', [
|
|
'receiveDataElementalTask' => $receiveDataNewElementalTask,
|
|
'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_workstation == null) {
|
|
|
|
$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 redirect()->route('enterWorkstation');
|
|
}
|
|
}
|
|
}
|
|
|
|
// 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();
|
|
|
|
|
|
// Busca os dados da Ws com base no Login
|
|
$findDataWs = ConstructionWorkstation::where('name_workstations', $userEmail->user_name)->first();
|
|
|
|
// Recebe os dados do Equipamento
|
|
$receiveDataEquipment = Equipment::where('equipment_id', $equipment_id)->first();
|
|
|
|
// Busca as tarefas do Equipamento a serem feitas
|
|
$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();
|
|
|
|
//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')
|
|
->join('workstations_association_tasks as wat', 'cw.id_workstations', '=', 'wat.id_workstations')
|
|
->where('u.email', $userEmail->email)
|
|
->select('cw.id_workstations', 'cw.name_workstations', DB::raw('GROUP_CONCAT(COALESCE(wat.elemental_tasks_id, wat.further_tasks_id)) AS all_tasks'))
|
|
->groupBy('cw.id_workstations', 'cw.name_workstations')
|
|
->get();
|
|
|
|
// Convertendo as tarefas do usuário em um array
|
|
$tasksArray = explode(',', $userTasks->pluck('all_tasks')->first());
|
|
|
|
$controlEquipmentWorkstation = ControlEquipmentWorkstation::where('equipment_id', $receiveDataEquipment->equipment_id)
|
|
->whereIn('elemental_tasks_id', $tasksArray)
|
|
->whereNull('id_workstations')
|
|
->whereNull('entry_date')
|
|
->whereNull('departure_date')
|
|
->first();
|
|
|
|
// Se encontrar um dado que satisfaca as verificacoes acima deve implementar a tarefa para esta WS.
|
|
if ($controlEquipmentWorkstation) {
|
|
|
|
$controlEquipmentWorkstation->id_workstations = $findDataWs->id_workstations;
|
|
$controlEquipmentWorkstation->entry_date = now();
|
|
$controlEquipmentWorkstation->save();
|
|
|
|
$receiveDataElementalTask = ElementalTasks::find($controlEquipmentWorkstation->elemental_tasks_id);
|
|
|
|
//Returning the values to a view "values"
|
|
return view('workstations.workstations', [
|
|
'receiveDataElementalTask' => $receiveDataElementalTask,
|
|
'receiveDataEquipment' => $receiveDataEquipment,
|
|
'control_ew_id' => $controlEquipmentWorkstation->control_equipment_workstation_id,
|
|
'task_todo' => $controlEquipmentWorkstation->elemental_tasks_id
|
|
]);
|
|
} else
|
|
|
|
//cria a nova linha
|
|
$equipmentData = DB::select('CALL ManageEquipmentTasks(?, ?)', [$userEmail->email, $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;
|
|
}
|
|
|
|
// Recebe os dados de cada Tarefa Elementar.
|
|
|
|
$recebeDataControlId = ControlEquipmentWorkstation::find($control_ew_id);
|
|
|
|
// Quando se da Refreash a pagina me devolve um erro de laravel pois o $recebeDataControlId e Null , pois claramente ja foi feita seus scripts e apos o refreash nao e feito denovo, sendo assim e melhor perder os dados criados e fazer novamente do que ter erros de lAravel :D
|
|
if ($recebeDataControlId == NULL) {
|
|
|
|
$deleteDataControlWhereRefreashPage = ControlEquipmentWorkstation::where('id_workstations', $findDataWs->id_workstations)
|
|
->where('equipment_id', $receiveDataEquipment->equipment_id)
|
|
->whereNotNull('entry_date')
|
|
->whereNull('departure_date')
|
|
->first();
|
|
// dd($deleteDataControlWhereRefreashPage);
|
|
|
|
if ($deleteDataControlWhereRefreashPage) {
|
|
$deleteDataControlWhereRefreashPage->id_workstations = null;
|
|
$deleteDataControlWhereRefreashPage->entry_date = null;
|
|
$deleteDataControlWhereRefreashPage->departure_date = null;
|
|
$deleteDataControlWhereRefreashPage->save();
|
|
}
|
|
return redirect()->route('enterWorkstation');
|
|
} else
|
|
|
|
$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
|
|
]);
|
|
}
|
|
}
|